From 5a13873f3b03572010f71cff09e8aa81299f50c8 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 1 Feb 2021 19:25:14 +0100 Subject: [PATCH 1/6] move freestanding to src/freestanding --- {freestanding => src-freestanding}/Makefile | 0 {freestanding => src-freestanding}/dune | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename {freestanding => src-freestanding}/Makefile (100%) rename {freestanding => src-freestanding}/dune (100%) diff --git a/freestanding/Makefile b/src-freestanding/Makefile similarity index 100% rename from freestanding/Makefile rename to src-freestanding/Makefile diff --git a/freestanding/dune b/src-freestanding/dune similarity index 100% rename from freestanding/dune rename to src-freestanding/dune From 53260836a1be243568fe935d84291e004ce4ff1f Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 1 Feb 2021 22:13:53 +0100 Subject: [PATCH 2/6] mirage-crypto-rng-mirage.opam: Adjust license (from rng/mirage/LICENSE.md) --- mirage-crypto-rng-mirage.opam | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mirage-crypto-rng-mirage.opam b/mirage-crypto-rng-mirage.opam index 59c42f32..7110ab8f 100644 --- a/mirage-crypto-rng-mirage.opam +++ b/mirage-crypto-rng-mirage.opam @@ -5,7 +5,7 @@ bug-reports: "https://github.com/mirage/mirage-crypto/issues" doc: "https://mirage.github.io/mirage-crypto/doc" authors: ["David Kaloper " "Hannes Mehnert " ] maintainer: "Hannes Mehnert " -license: "ISC" +license: "BSD-2-Clause" synopsis: "Entropy collection for a cryptographically secure PRNG" build: [ ["dune" "subst"] {pinned} From 8d5bcf48a840a55714424c59439400160b9e23de Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 1 Feb 2021 22:15:53 +0100 Subject: [PATCH 3/6] New package mirage-crypto-ec MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is an import of https://github.com/mirage/fiat from commit 341318ad08b9224c87ed4bd26b29cebb46e10812 (with a rename of fiat_p256 to mirage_crypto_ec). The motivation is to extend "fiat-p256" in multiple dimensions: more curves (NIST, ..), and also ECDSA - which requires hash functions, and computation of a deterministic k (RFC 6979) which is already part of this repository. Co-Authored-By: Nathan Rebours Co-Authored-By: Etienne Millon Co-Authored-By: Clément Pascutto --- META.mirage-crypto-ec.template | 3 + ec-freestanding/Makefile | 24 + ec-freestanding/dune | 15 + ec/LICENSE.md | 31 + ec/dune | 39 + ec/error.ml | 21 + ec/error.mli | 12 + ec/field_element.ml | 65 + ec/field_element.mli | 63 + ec/implementation.mld | 72 + ec/mirage_crypto_ec.ml | 41 + ec/mirage_crypto_ec.mli | 44 + ec/native/p256_32.h | 3307 +++++++++++++++++++++++ ec/native/p256_64.h | 1298 +++++++++ ec/native/p256_stubs.c | 401 +++ ec/parameters.ml | 13 + ec/parameters.mli | 19 + ec/point.ml | 122 + ec/point.mli | 43 + ec/scalar.ml | 19 + ec/scalar.mli | 14 + ec/scalar_mult.ml | 12 + ec/scalar_mult.mli | 3 + mirage-crypto-ec.opam | 54 + tests/dune | 13 + tests/ecdh_secp256r1_test.json | 3586 +++++++++++++++++++++++++ tests/test_ec.ml | 222 ++ tests/test_ec_wycheproof_secp256r1.ml | 112 + tests/wycheproof/dune | 6 + tests/wycheproof/wycheproof.ml | 65 + tests/wycheproof/wycheproof.mli | 41 + 31 files changed, 9780 insertions(+) create mode 100644 META.mirage-crypto-ec.template create mode 100644 ec-freestanding/Makefile create mode 100644 ec-freestanding/dune create mode 100644 ec/LICENSE.md create mode 100644 ec/dune create mode 100644 ec/error.ml create mode 100644 ec/error.mli create mode 100644 ec/field_element.ml create mode 100644 ec/field_element.mli create mode 100644 ec/implementation.mld create mode 100644 ec/mirage_crypto_ec.ml create mode 100644 ec/mirage_crypto_ec.mli create mode 100644 ec/native/p256_32.h create mode 100644 ec/native/p256_64.h create mode 100644 ec/native/p256_stubs.c create mode 100644 ec/parameters.ml create mode 100644 ec/parameters.mli create mode 100644 ec/point.ml create mode 100644 ec/point.mli create mode 100644 ec/scalar.ml create mode 100644 ec/scalar.mli create mode 100644 ec/scalar_mult.ml create mode 100644 ec/scalar_mult.mli create mode 100644 mirage-crypto-ec.opam create mode 100644 tests/ecdh_secp256r1_test.json create mode 100644 tests/test_ec.ml create mode 100644 tests/test_ec_wycheproof_secp256r1.ml create mode 100644 tests/wycheproof/dune create mode 100644 tests/wycheproof/wycheproof.ml create mode 100644 tests/wycheproof/wycheproof.mli diff --git a/META.mirage-crypto-ec.template b/META.mirage-crypto-ec.template new file mode 100644 index 00000000..bbfae4e2 --- /dev/null +++ b/META.mirage-crypto-ec.template @@ -0,0 +1,3 @@ +# DUNE_GEN + +freestanding_linkopts = "-l:libmirage_crypto_ec_freestanding_stubs.a" diff --git a/ec-freestanding/Makefile b/ec-freestanding/Makefile new file mode 100644 index 00000000..000dce71 --- /dev/null +++ b/ec-freestanding/Makefile @@ -0,0 +1,24 @@ +PKG_CONFIG_PATH := $(shell opam config var prefix)/lib/pkgconfig + +EXISTS := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --exists ocaml-freestanding; echo $$?) + +.PHONY: all clean +all: libmirage_crypto_ec_freestanding_stubs.a + +ifeq ($(EXISTS), 1) +libmirage_crypto_ec_freestanding_stubs.a: + touch $@ +else +CC ?= cc +FREESTANDING_CFLAGS := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags ocaml-freestanding) +DISCOVER_CFLAGS := $(shell sed 's/^(\(.*\))$$/\1/' ../ec/cflags_optimized.sexp | tr -d '"') +CFLAGS := -O3 -I../ec/native -I../src/native $(DISCOVER_CFLAGS) $(FREESTANDING_CFLAGS) + +OBJS=p256_stubs.o + +libmirage_crypto_ec_freestanding_stubs.a: $(OBJS) + $(AR) r $@ $^ +endif + +clean: + $(RM) $(OBJS) libmirage_crypto_ec_freestanding_stubs.a diff --git a/ec-freestanding/dune b/ec-freestanding/dune new file mode 100644 index 00000000..243bba7b --- /dev/null +++ b/ec-freestanding/dune @@ -0,0 +1,15 @@ +(copy_files# ../ec/native/*.c) + +(rule + (deps ../ec/cflags_optimized.sexp ../src/native/mirage_crypto.h + ../src/native/bitfn.h Makefile p256_stubs.c) + (targets libmirage_crypto_ec_freestanding_stubs.a) + (action + (no-infer + (progn + (run %{make}))))) + +(install + (package mirage-crypto-ec) + (section lib) + (files libmirage_crypto_ec_freestanding_stubs.a)) diff --git a/ec/LICENSE.md b/ec/LICENSE.md new file mode 100644 index 00000000..889dbec5 --- /dev/null +++ b/ec/LICENSE.md @@ -0,0 +1,31 @@ +The MIT License + +Copyright (c) 2019 Etienne Millon + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + + +C stubs in `p256_32.h`, `p256_64.h` and `p256_stubs.c` were generated using +Fiat (https://github.com/mit-plv/fiat-crypto) and thus these files are +licensed under the MIT license with the following copyright : +---------------------------- +Copyright (c) 2015-2016 Andres Erbsen + Google Inc. + Jade Philipoom + Massachusetts Institute of Technology diff --git a/ec/dune b/ec/dune new file mode 100644 index 00000000..2ba16048 --- /dev/null +++ b/ec/dune @@ -0,0 +1,39 @@ +(library + (name mirage_crypto_ec) + (public_name mirage-crypto-ec) + (libraries cstruct eqaf.cstruct hex) + (foreign_stubs + (language c) + (names p256_stubs) + (flags + (:standard -I../src/native) + (:include cflags_optimized.sexp)))) + +(include_subdirs unqualified) + +(rule + (targets cflags_optimized.sexp) + (action + (run ../config/cfg.exe))) + +(rule + (targets upstream_p256_32) + (action + (bash + "wget https://raw.githubusercontent.com/mit-plv/fiat-crypto/ecdfd03c636ab63e167fbe4fc4d7ab0ed5d9db74/p256_32.c -O %{targets}"))) + +(rule + (targets upstream_p256_64) + (action + (bash + "wget https://raw.githubusercontent.com/mit-plv/fiat-crypto/ecdfd03c636ab63e167fbe4fc4d7ab0ed5d9db74/p256_64.c -O %{targets}"))) + +(rule + (alias check_vendors) + (action + (diff native/p256_32.h upstream_p256_32))) + +(rule + (alias check_vendors) + (action + (diff native/p256_64.h upstream_p256_64))) diff --git a/ec/error.ml b/ec/error.ml new file mode 100644 index 00000000..5c7dd364 --- /dev/null +++ b/ec/error.ml @@ -0,0 +1,21 @@ +type point_error = + [ `Invalid_format + | `Invalid_length + | `Invalid_range + | `Not_on_curve + | `At_infinity ] + +type scalar_error = [ `Invalid_length | `Invalid_range ] + +let error_to_string = function + | `Invalid_format -> "invalid format" + | `Not_on_curve -> "point is not on curve" + | `At_infinity -> "point is at infinity" + | `Invalid_length -> "invalid length" + | `Invalid_range -> "invalid range" + +let pp_point_error fmt e = + Format.fprintf fmt "Cannot parse point: %s" (error_to_string e) + +let pp_scalar_error fmt e = + Format.fprintf fmt "Cannot parse scalar: %s" (error_to_string e) diff --git a/ec/error.mli b/ec/error.mli new file mode 100644 index 00000000..f17d454d --- /dev/null +++ b/ec/error.mli @@ -0,0 +1,12 @@ +type point_error = + [ `Invalid_format + | `Invalid_range + | `Invalid_length + | `Not_on_curve + | `At_infinity ] + +type scalar_error = [ `Invalid_length | `Invalid_range ] + +val pp_point_error : Format.formatter -> point_error -> unit + +val pp_scalar_error : Format.formatter -> scalar_error -> unit diff --git a/ec/field_element.ml b/ec/field_element.ml new file mode 100644 index 00000000..32e0cadb --- /dev/null +++ b/ec/field_element.ml @@ -0,0 +1,65 @@ +type t = Cstruct.buffer + +let create () = Cstruct.to_bigarray (Cstruct.create 32) + +external mul : t -> t -> t -> unit = "fiat_p256_caml_mul" [@@noalloc] + +external sub : t -> t -> t -> unit = "fiat_p256_caml_sub" [@@noalloc] + +external add : t -> t -> t -> unit = "fiat_p256_caml_add" [@@noalloc] + +let r_squared = + Cstruct.to_bigarray + (Cstruct.of_hex + "0300000000000000fffffffffbfffffffefffffffffffffffdffffff04000000") + +let to_montgomery x = mul x x r_squared + +let copy dst src = Bigarray_compat.Array1.blit src dst + +external from_bytes_buf : t -> Cstruct.buffer -> unit + = "fiat_p256_caml_from_bytes" + [@@noalloc] + +let checked_buffer cs = + assert (Cstruct.len cs = 32); + Cstruct.to_bigarray cs + +let from_bytes fe cs = from_bytes_buf fe (checked_buffer cs) + +let one_bytes = + Cstruct.of_hex + "010000000000000000000000fffffffffffffffffffffffffeffffff00000000" + +let one () = + let fe = create () in + from_bytes fe one_bytes; + fe + +external nz : t -> bool = "fiat_p256_caml_nz" [@@noalloc] + +external sqr : t -> t -> unit = "fiat_p256_caml_sqr" + +external from_montgomery : t -> unit = "fiat_p256_caml_from_montgomery" + [@@noalloc] + +external to_bytes_buf : Cstruct.buffer -> t -> unit = "fiat_p256_caml_to_bytes" + [@@noalloc] + +let to_bytes cs fe = to_bytes_buf (checked_buffer cs) fe + +external inv : t -> t -> unit = "fiat_p256_caml_inv" [@@noalloc] + +let from_be_cstruct cs = + let cs_rev = Cstruct.rev cs in + let fe = create () in + from_bytes fe cs_rev; + to_montgomery fe; + fe + +external select_c : t -> bool -> t -> t -> unit = "fiat_p256_caml_select" + +let select bit ~then_ ~else_ = + let out = create () in + select_c out bit then_ else_; + out diff --git a/ec/field_element.mli b/ec/field_element.mli new file mode 100644 index 00000000..a6c4204e --- /dev/null +++ b/ec/field_element.mli @@ -0,0 +1,63 @@ +(** Field elements *) + +type t +(** A field element. This corresponds to a mutable chunk of memory. + Most operations are done in Montgomery form. This means that the internal + value is multiplied by a constant [R = 2**256]. + + @see +*) + +val create : unit -> t +(** Allocate a new element, corresponding to zero. *) + +val one : unit -> t +(** Allocate a new element, corresponding to one. *) + +val from_bytes : t -> Cstruct.t -> unit +(** [from_bytes dst src] deserializes a field element in the Montgomery domain + from bytes in little-endian order. *) + +val to_bytes : Cstruct.t -> t -> unit +(** [to_bytes dst src] serializes a field element in the Montgomery domain to + bytes in little-endian order. *) + +val from_montgomery : t -> unit +(** Translate a field element out of the Montgomery domain. + That is to say, it divides by [R] in place. *) + +val copy : t -> t -> unit +(** [copy dst src] sets [dst] to [src]. *) + +val add : t -> t -> t -> unit +(** [add dst a b] adds [a] and [b] and stores the result in [dst]. + Due to how Montgomery form works, it works both in and out of the Montgomery + domain. *) + +val sub : t -> t -> t -> unit +(** [sub dst a b] subtracts [a] and [b] and stores the result in [dst]. + Due to how Montgomery form works, it works both in and out of the Montgomery + domain. *) + +val mul : t -> t -> t -> unit +(** [mul dst a b] multiplies [a] and [b] (in the Montgomery domain) and stores + the result in [dst]. *) + +val nz : t -> bool +(** [nz n] returns [true] if [n] is non-zero. *) + +val sqr : t -> t -> unit +(** [sqr dst src] squares [src] in the Montgomery domain and stores the result + in [dst]. *) + +val inv : t -> t -> unit +(** [inv dst src] computes the modular inverse of [src] and stores the result in + [dst]. *) + +val from_be_cstruct : Cstruct.t -> t +(** Converts from a big-endian cstruct to Montgomery form. *) + +val select : bool -> then_:t -> else_:t -> t +(** Constant-time selection. + [select true ~then_ ~false_] returns a copy of [then_], and + [select false ~then_ ~false_] returns a copy of [else_]. *) diff --git a/ec/implementation.mld b/ec/implementation.mld new file mode 100644 index 00000000..2b7b3cf1 --- /dev/null +++ b/ec/implementation.mld @@ -0,0 +1,72 @@ +{1 Implementation } + +The goal of this document is to describe how the library is implemented. + +{2 Field operations} + +These are implemented in [Field_element], which is a binding over +[p256_{32,64}.h]. These are files extracted from Coq code in +{{:https://github.com/mit-plv/fiat-crypto}this repository}. + +This module uses +{{:https://en.wikipedia.org/wiki/Montgomery_modular_multiplication} Montgomery +Modular Multiplication}. Instead of storing a number [a], operations are done +on [aR] where R = 2{^256}. + +It is possible to check that these files correspond to the extracted ones in +the upstream repository by running [dune build @check_vendors]. + +These files are part of the trusted computing base. That is, using this package +relies on the fact that they implemented the correct algorithms. To go further, +one can re-run the extraction process from Coq sources, see +{{:https://github.com/mirage/fiat/issues/41}#41}. + +{2 Point operations} + +Points (see the [Point] module) are stored using projective coordinates (X : Y +: Z): + +- Z=0 corresponds to the point at infinity +- for Z≠0, this corresponds to a point with affine coordinates (X/Z{^2}, + Y/Z{^3}) + +Doubling and addition are implemented as C stubs in [p256_stubs.c] using code +that comes from BoringSSL, Google's fork of OpenSSL. Fiat code has been design +in part to be included in BoringSSL, so this does not require any particular +glue code. + +Some operations are implemented manually, in particular: + +- conversion to affine coordinates, as described above. This relies on a field + inversion primitive from BoringSSL, that is exposed in [Field_element]. +- point verification (bound checking and making sure that the equation is + satisfied). + +There is no automated way to check that the BoringSSL part is identical to that +in the upstream repository (nor to update it). + +{2 Scalar multiplication} + +Implemented by hand using the +{{:https://cr.yp.to/bib/2003/joye-ladder.pdf}Montgomery Powering Ladder}. + +Instead of branching based on key bits, constant-time selection (as defined in +fiat code) is used. + +The following references discuss this algorithm: + +- {{:https://cryptojedi.org/peter/data/eccss-20130911b.pdf}Scalar-multiplication algorithms, Peter Schwabe, ECC 2013 Summer School} +- {{:https://eprint.iacr.org/2017/293.pdf}Montgomery curves and the Montgomery +ladder, Daniel J. Bernstein and Tanja Lange} + +{2 Key exchange} + +Key exchange consists in + +- validating the public key as described in + {{:https://tools.ietf.org/html/rfc8446#section-4.2.8.2}RFC 8446 §4.2.8.2}; +- computing scalar multiplication; +- returning the encoded x coordinate of the result. + +This is implemented by hand and checked against common errors using test +vectors from {{:https://github.com/google/wycheproof}project Wycheproof}. diff --git a/ec/mirage_crypto_ec.ml b/ec/mirage_crypto_ec.ml new file mode 100644 index 00000000..efba64b3 --- /dev/null +++ b/ec/mirage_crypto_ec.ml @@ -0,0 +1,41 @@ +let dh ~scalar ~point = + Point.x_of_finite_point (Scalar_mult.scalar_mult scalar point) + +let public scalar = Scalar_mult.scalar_mult scalar Point.params_g + +type error = Error.point_error + +let pp_error = Error.pp_point_error + +let check_point = function + | Ok p when not (Point.is_infinity p) -> Ok p + | Ok _ -> Error `At_infinity + | Error _ as e -> e + +let point_of_cs c = check_point (Point.of_cstruct c) + +let point_to_cs = Point.to_cstruct + +type secret = Scalar.t + +let secret_of_cs = Scalar.of_cstruct + +let rec generate_private_key ~rng () = + let candidate = rng 32 in + match secret_of_cs candidate with + | Ok secret -> secret + | Error `Invalid_length -> + failwith "Fiat_p256.gen_key: generator returned an invalid length" + | Error _ -> generate_private_key ~rng () + +let gen_key ~rng = + let private_key = generate_private_key ~rng () in + let public_key = public private_key in + let to_send = point_to_cs public_key in + (private_key, to_send) + +let key_exchange secret received = + match point_of_cs received with + | Error _ as err -> err + | Ok other_party_public_key -> + Ok (dh ~scalar:secret ~point:other_party_public_key) diff --git a/ec/mirage_crypto_ec.mli b/ec/mirage_crypto_ec.mli new file mode 100644 index 00000000..b8848a50 --- /dev/null +++ b/ec/mirage_crypto_ec.mli @@ -0,0 +1,44 @@ +(** See {!page-implementation} for a description on how this is implemented. *) + +type error = + [ `Invalid_range + | `Invalid_format + | `Invalid_length + | `Not_on_curve + | `At_infinity ] +(** The type for public key parsing errors. *) + +val pp_error : Format.formatter -> error -> unit +(** Pretty printer for public key parsing errors *) + +type secret +(** Type for P256 private keys. + + In the usual setting, the private key only be generated and used for key + exchange. But it can be useful to create values of type [secret] with a + known value, for example to check against test vectors. + One can use the following pattern to do this: + + {[ let (secret, _) = gen_key ~rng:(fun _ -> known_data) ]} +*) + +val gen_key : rng:(int -> Cstruct.t) -> secret * Cstruct.t +(** [gen_key ~rng] generates a private and a public key for Ephemeral Diffie-Hellman + over P256. The returned key pair MUST only be used for a single key exchange. + + [rng] is the function used to repeteadly generate a private key until a valid candidate + is obtained. [rng]'s int parameter is the size of the [Cstruct.t] to generate. + If [rng] returns an invalid length buffer, [Failure _] is raised. + + The generated private key is checked to be greater than zero and lower than the group + order meaning the public key cannot be the point at inifinity. *) + +val key_exchange : secret -> Cstruct.t -> (Cstruct.t, error) result +(** [key_exchange secret received_public_key] performs Diffie-Hellman key exchange + using your secret and the data received from the other party. Returns the shared secret + or an error if the received data is wrongly encoded, doesn't represent a point on the curve + or represent the point at infinity. + + The shared secret is returned as is i.e. not stripped from leading 0x00 bytes. + + @see for public key encoding format. *) diff --git a/ec/native/p256_32.h b/ec/native/p256_32.h new file mode 100644 index 00000000..2bb3097c --- /dev/null +++ b/ec/native/p256_32.h @@ -0,0 +1,3307 @@ +/* Autogenerated */ +/* curve description: p256 */ +/* requested operations: (all) */ +/* m = 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff (from "2^256 - 2^224 + 2^192 + 2^96 - 1") */ +/* machine_wordsize = 32 (from "32") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ + +#include +typedef unsigned char fiat_p256_uint1; +typedef signed char fiat_p256_int1; + + +/* + * The function fiat_p256_addcarryx_u32 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^32 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p256_addcarryx_u32(uint32_t* out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint32_t arg2, uint32_t arg3) { + uint64_t x1 = ((arg1 + (uint64_t)arg2) + arg3); + uint32_t x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + fiat_p256_uint1 x3 = (fiat_p256_uint1)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p256_subborrowx_u32 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^32 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p256_subborrowx_u32(uint32_t* out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint32_t arg2, uint32_t arg3) { + int64_t x1 = ((arg2 - (int64_t)arg1) - arg3); + fiat_p256_int1 x2 = (fiat_p256_int1)(x1 >> 32); + uint32_t x3 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + *out1 = x3; + *out2 = (fiat_p256_uint1)(0x0 - x2); +} + +/* + * The function fiat_p256_mulx_u32 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^32 + * out2 = ⌊arg1 * arg2 / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0xffffffff] + */ +static void fiat_p256_mulx_u32(uint32_t* out1, uint32_t* out2, uint32_t arg1, uint32_t arg2) { + uint64_t x1 = ((uint64_t)arg1 * arg2); + uint32_t x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + uint32_t x3 = (uint32_t)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p256_cmovznz_u32 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static void fiat_p256_cmovznz_u32(uint32_t* out1, fiat_p256_uint1 arg1, uint32_t arg2, uint32_t arg3) { + fiat_p256_uint1 x1 = (!(!arg1)); + uint32_t x2 = ((fiat_p256_int1)(0x0 - x1) & UINT32_C(0xffffffff)); + uint32_t x3 = ((x2 & arg3) | ((~x2) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_p256_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_mul(uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { + uint32_t x1 = (arg1[1]); + uint32_t x2 = (arg1[2]); + uint32_t x3 = (arg1[3]); + uint32_t x4 = (arg1[4]); + uint32_t x5 = (arg1[5]); + uint32_t x6 = (arg1[6]); + uint32_t x7 = (arg1[7]); + uint32_t x8 = (arg1[0]); + uint32_t x9; + uint32_t x10; + fiat_p256_mulx_u32(&x9, &x10, x8, (arg2[7])); + uint32_t x11; + uint32_t x12; + fiat_p256_mulx_u32(&x11, &x12, x8, (arg2[6])); + uint32_t x13; + uint32_t x14; + fiat_p256_mulx_u32(&x13, &x14, x8, (arg2[5])); + uint32_t x15; + uint32_t x16; + fiat_p256_mulx_u32(&x15, &x16, x8, (arg2[4])); + uint32_t x17; + uint32_t x18; + fiat_p256_mulx_u32(&x17, &x18, x8, (arg2[3])); + uint32_t x19; + uint32_t x20; + fiat_p256_mulx_u32(&x19, &x20, x8, (arg2[2])); + uint32_t x21; + uint32_t x22; + fiat_p256_mulx_u32(&x21, &x22, x8, (arg2[1])); + uint32_t x23; + uint32_t x24; + fiat_p256_mulx_u32(&x23, &x24, x8, (arg2[0])); + uint32_t x25; + fiat_p256_uint1 x26; + fiat_p256_addcarryx_u32(&x25, &x26, 0x0, x24, x21); + uint32_t x27; + fiat_p256_uint1 x28; + fiat_p256_addcarryx_u32(&x27, &x28, x26, x22, x19); + uint32_t x29; + fiat_p256_uint1 x30; + fiat_p256_addcarryx_u32(&x29, &x30, x28, x20, x17); + uint32_t x31; + fiat_p256_uint1 x32; + fiat_p256_addcarryx_u32(&x31, &x32, x30, x18, x15); + uint32_t x33; + fiat_p256_uint1 x34; + fiat_p256_addcarryx_u32(&x33, &x34, x32, x16, x13); + uint32_t x35; + fiat_p256_uint1 x36; + fiat_p256_addcarryx_u32(&x35, &x36, x34, x14, x11); + uint32_t x37; + fiat_p256_uint1 x38; + fiat_p256_addcarryx_u32(&x37, &x38, x36, x12, x9); + uint32_t x39; + fiat_p256_uint1 x40; + fiat_p256_addcarryx_u32(&x39, &x40, x38, x10, 0x0); + uint32_t x41; + uint32_t x42; + fiat_p256_mulx_u32(&x41, &x42, x23, UINT32_C(0xffffffff)); + uint32_t x43; + uint32_t x44; + fiat_p256_mulx_u32(&x43, &x44, x23, UINT32_C(0xffffffff)); + uint32_t x45; + uint32_t x46; + fiat_p256_mulx_u32(&x45, &x46, x23, UINT32_C(0xffffffff)); + uint32_t x47; + uint32_t x48; + fiat_p256_mulx_u32(&x47, &x48, x23, UINT32_C(0xffffffff)); + uint32_t x49; + fiat_p256_uint1 x50; + fiat_p256_addcarryx_u32(&x49, &x50, 0x0, x48, x45); + uint32_t x51; + fiat_p256_uint1 x52; + fiat_p256_addcarryx_u32(&x51, &x52, x50, x46, x43); + uint32_t x53; + fiat_p256_uint1 x54; + fiat_p256_addcarryx_u32(&x53, &x54, x52, x44, 0x0); + uint32_t x55; + fiat_p256_uint1 x56; + fiat_p256_addcarryx_u32(&x55, &x56, 0x0, x23, x47); + uint32_t x57; + fiat_p256_uint1 x58; + fiat_p256_addcarryx_u32(&x57, &x58, x56, x25, x49); + uint32_t x59; + fiat_p256_uint1 x60; + fiat_p256_addcarryx_u32(&x59, &x60, x58, x27, x51); + uint32_t x61; + fiat_p256_uint1 x62; + fiat_p256_addcarryx_u32(&x61, &x62, x60, x29, x53); + uint32_t x63; + fiat_p256_uint1 x64; + fiat_p256_addcarryx_u32(&x63, &x64, x62, x31, 0x0); + uint32_t x65; + fiat_p256_uint1 x66; + fiat_p256_addcarryx_u32(&x65, &x66, x64, x33, 0x0); + uint32_t x67; + fiat_p256_uint1 x68; + fiat_p256_addcarryx_u32(&x67, &x68, x66, x35, x23); + uint32_t x69; + fiat_p256_uint1 x70; + fiat_p256_addcarryx_u32(&x69, &x70, x68, x37, x41); + uint32_t x71; + fiat_p256_uint1 x72; + fiat_p256_addcarryx_u32(&x71, &x72, x70, x39, x42); + uint32_t x73; + fiat_p256_uint1 x74; + fiat_p256_addcarryx_u32(&x73, &x74, x72, 0x0, 0x0); + uint32_t x75; + uint32_t x76; + fiat_p256_mulx_u32(&x75, &x76, x1, (arg2[7])); + uint32_t x77; + uint32_t x78; + fiat_p256_mulx_u32(&x77, &x78, x1, (arg2[6])); + uint32_t x79; + uint32_t x80; + fiat_p256_mulx_u32(&x79, &x80, x1, (arg2[5])); + uint32_t x81; + uint32_t x82; + fiat_p256_mulx_u32(&x81, &x82, x1, (arg2[4])); + uint32_t x83; + uint32_t x84; + fiat_p256_mulx_u32(&x83, &x84, x1, (arg2[3])); + uint32_t x85; + uint32_t x86; + fiat_p256_mulx_u32(&x85, &x86, x1, (arg2[2])); + uint32_t x87; + uint32_t x88; + fiat_p256_mulx_u32(&x87, &x88, x1, (arg2[1])); + uint32_t x89; + uint32_t x90; + fiat_p256_mulx_u32(&x89, &x90, x1, (arg2[0])); + uint32_t x91; + fiat_p256_uint1 x92; + fiat_p256_addcarryx_u32(&x91, &x92, 0x0, x90, x87); + uint32_t x93; + fiat_p256_uint1 x94; + fiat_p256_addcarryx_u32(&x93, &x94, x92, x88, x85); + uint32_t x95; + fiat_p256_uint1 x96; + fiat_p256_addcarryx_u32(&x95, &x96, x94, x86, x83); + uint32_t x97; + fiat_p256_uint1 x98; + fiat_p256_addcarryx_u32(&x97, &x98, x96, x84, x81); + uint32_t x99; + fiat_p256_uint1 x100; + fiat_p256_addcarryx_u32(&x99, &x100, x98, x82, x79); + uint32_t x101; + fiat_p256_uint1 x102; + fiat_p256_addcarryx_u32(&x101, &x102, x100, x80, x77); + uint32_t x103; + fiat_p256_uint1 x104; + fiat_p256_addcarryx_u32(&x103, &x104, x102, x78, x75); + uint32_t x105; + fiat_p256_uint1 x106; + fiat_p256_addcarryx_u32(&x105, &x106, x104, x76, 0x0); + uint32_t x107; + fiat_p256_uint1 x108; + fiat_p256_addcarryx_u32(&x107, &x108, 0x0, x57, x89); + uint32_t x109; + fiat_p256_uint1 x110; + fiat_p256_addcarryx_u32(&x109, &x110, x108, x59, x91); + uint32_t x111; + fiat_p256_uint1 x112; + fiat_p256_addcarryx_u32(&x111, &x112, x110, x61, x93); + uint32_t x113; + fiat_p256_uint1 x114; + fiat_p256_addcarryx_u32(&x113, &x114, x112, x63, x95); + uint32_t x115; + fiat_p256_uint1 x116; + fiat_p256_addcarryx_u32(&x115, &x116, x114, x65, x97); + uint32_t x117; + fiat_p256_uint1 x118; + fiat_p256_addcarryx_u32(&x117, &x118, x116, x67, x99); + uint32_t x119; + fiat_p256_uint1 x120; + fiat_p256_addcarryx_u32(&x119, &x120, x118, x69, x101); + uint32_t x121; + fiat_p256_uint1 x122; + fiat_p256_addcarryx_u32(&x121, &x122, x120, x71, x103); + uint32_t x123; + fiat_p256_uint1 x124; + fiat_p256_addcarryx_u32(&x123, &x124, x122, (fiat_p256_uint1)x73, x105); + uint32_t x125; + uint32_t x126; + fiat_p256_mulx_u32(&x125, &x126, x107, UINT32_C(0xffffffff)); + uint32_t x127; + uint32_t x128; + fiat_p256_mulx_u32(&x127, &x128, x107, UINT32_C(0xffffffff)); + uint32_t x129; + uint32_t x130; + fiat_p256_mulx_u32(&x129, &x130, x107, UINT32_C(0xffffffff)); + uint32_t x131; + uint32_t x132; + fiat_p256_mulx_u32(&x131, &x132, x107, UINT32_C(0xffffffff)); + uint32_t x133; + fiat_p256_uint1 x134; + fiat_p256_addcarryx_u32(&x133, &x134, 0x0, x132, x129); + uint32_t x135; + fiat_p256_uint1 x136; + fiat_p256_addcarryx_u32(&x135, &x136, x134, x130, x127); + uint32_t x137; + fiat_p256_uint1 x138; + fiat_p256_addcarryx_u32(&x137, &x138, x136, x128, 0x0); + uint32_t x139; + fiat_p256_uint1 x140; + fiat_p256_addcarryx_u32(&x139, &x140, 0x0, x107, x131); + uint32_t x141; + fiat_p256_uint1 x142; + fiat_p256_addcarryx_u32(&x141, &x142, x140, x109, x133); + uint32_t x143; + fiat_p256_uint1 x144; + fiat_p256_addcarryx_u32(&x143, &x144, x142, x111, x135); + uint32_t x145; + fiat_p256_uint1 x146; + fiat_p256_addcarryx_u32(&x145, &x146, x144, x113, x137); + uint32_t x147; + fiat_p256_uint1 x148; + fiat_p256_addcarryx_u32(&x147, &x148, x146, x115, 0x0); + uint32_t x149; + fiat_p256_uint1 x150; + fiat_p256_addcarryx_u32(&x149, &x150, x148, x117, 0x0); + uint32_t x151; + fiat_p256_uint1 x152; + fiat_p256_addcarryx_u32(&x151, &x152, x150, x119, x107); + uint32_t x153; + fiat_p256_uint1 x154; + fiat_p256_addcarryx_u32(&x153, &x154, x152, x121, x125); + uint32_t x155; + fiat_p256_uint1 x156; + fiat_p256_addcarryx_u32(&x155, &x156, x154, x123, x126); + uint32_t x157; + fiat_p256_uint1 x158; + fiat_p256_addcarryx_u32(&x157, &x158, x156, x124, 0x0); + uint32_t x159; + uint32_t x160; + fiat_p256_mulx_u32(&x159, &x160, x2, (arg2[7])); + uint32_t x161; + uint32_t x162; + fiat_p256_mulx_u32(&x161, &x162, x2, (arg2[6])); + uint32_t x163; + uint32_t x164; + fiat_p256_mulx_u32(&x163, &x164, x2, (arg2[5])); + uint32_t x165; + uint32_t x166; + fiat_p256_mulx_u32(&x165, &x166, x2, (arg2[4])); + uint32_t x167; + uint32_t x168; + fiat_p256_mulx_u32(&x167, &x168, x2, (arg2[3])); + uint32_t x169; + uint32_t x170; + fiat_p256_mulx_u32(&x169, &x170, x2, (arg2[2])); + uint32_t x171; + uint32_t x172; + fiat_p256_mulx_u32(&x171, &x172, x2, (arg2[1])); + uint32_t x173; + uint32_t x174; + fiat_p256_mulx_u32(&x173, &x174, x2, (arg2[0])); + uint32_t x175; + fiat_p256_uint1 x176; + fiat_p256_addcarryx_u32(&x175, &x176, 0x0, x174, x171); + uint32_t x177; + fiat_p256_uint1 x178; + fiat_p256_addcarryx_u32(&x177, &x178, x176, x172, x169); + uint32_t x179; + fiat_p256_uint1 x180; + fiat_p256_addcarryx_u32(&x179, &x180, x178, x170, x167); + uint32_t x181; + fiat_p256_uint1 x182; + fiat_p256_addcarryx_u32(&x181, &x182, x180, x168, x165); + uint32_t x183; + fiat_p256_uint1 x184; + fiat_p256_addcarryx_u32(&x183, &x184, x182, x166, x163); + uint32_t x185; + fiat_p256_uint1 x186; + fiat_p256_addcarryx_u32(&x185, &x186, x184, x164, x161); + uint32_t x187; + fiat_p256_uint1 x188; + fiat_p256_addcarryx_u32(&x187, &x188, x186, x162, x159); + uint32_t x189; + fiat_p256_uint1 x190; + fiat_p256_addcarryx_u32(&x189, &x190, x188, x160, 0x0); + uint32_t x191; + fiat_p256_uint1 x192; + fiat_p256_addcarryx_u32(&x191, &x192, 0x0, x141, x173); + uint32_t x193; + fiat_p256_uint1 x194; + fiat_p256_addcarryx_u32(&x193, &x194, x192, x143, x175); + uint32_t x195; + fiat_p256_uint1 x196; + fiat_p256_addcarryx_u32(&x195, &x196, x194, x145, x177); + uint32_t x197; + fiat_p256_uint1 x198; + fiat_p256_addcarryx_u32(&x197, &x198, x196, x147, x179); + uint32_t x199; + fiat_p256_uint1 x200; + fiat_p256_addcarryx_u32(&x199, &x200, x198, x149, x181); + uint32_t x201; + fiat_p256_uint1 x202; + fiat_p256_addcarryx_u32(&x201, &x202, x200, x151, x183); + uint32_t x203; + fiat_p256_uint1 x204; + fiat_p256_addcarryx_u32(&x203, &x204, x202, x153, x185); + uint32_t x205; + fiat_p256_uint1 x206; + fiat_p256_addcarryx_u32(&x205, &x206, x204, x155, x187); + uint32_t x207; + fiat_p256_uint1 x208; + fiat_p256_addcarryx_u32(&x207, &x208, x206, x157, x189); + uint32_t x209; + uint32_t x210; + fiat_p256_mulx_u32(&x209, &x210, x191, UINT32_C(0xffffffff)); + uint32_t x211; + uint32_t x212; + fiat_p256_mulx_u32(&x211, &x212, x191, UINT32_C(0xffffffff)); + uint32_t x213; + uint32_t x214; + fiat_p256_mulx_u32(&x213, &x214, x191, UINT32_C(0xffffffff)); + uint32_t x215; + uint32_t x216; + fiat_p256_mulx_u32(&x215, &x216, x191, UINT32_C(0xffffffff)); + uint32_t x217; + fiat_p256_uint1 x218; + fiat_p256_addcarryx_u32(&x217, &x218, 0x0, x216, x213); + uint32_t x219; + fiat_p256_uint1 x220; + fiat_p256_addcarryx_u32(&x219, &x220, x218, x214, x211); + uint32_t x221; + fiat_p256_uint1 x222; + fiat_p256_addcarryx_u32(&x221, &x222, x220, x212, 0x0); + uint32_t x223; + fiat_p256_uint1 x224; + fiat_p256_addcarryx_u32(&x223, &x224, 0x0, x191, x215); + uint32_t x225; + fiat_p256_uint1 x226; + fiat_p256_addcarryx_u32(&x225, &x226, x224, x193, x217); + uint32_t x227; + fiat_p256_uint1 x228; + fiat_p256_addcarryx_u32(&x227, &x228, x226, x195, x219); + uint32_t x229; + fiat_p256_uint1 x230; + fiat_p256_addcarryx_u32(&x229, &x230, x228, x197, x221); + uint32_t x231; + fiat_p256_uint1 x232; + fiat_p256_addcarryx_u32(&x231, &x232, x230, x199, 0x0); + uint32_t x233; + fiat_p256_uint1 x234; + fiat_p256_addcarryx_u32(&x233, &x234, x232, x201, 0x0); + uint32_t x235; + fiat_p256_uint1 x236; + fiat_p256_addcarryx_u32(&x235, &x236, x234, x203, x191); + uint32_t x237; + fiat_p256_uint1 x238; + fiat_p256_addcarryx_u32(&x237, &x238, x236, x205, x209); + uint32_t x239; + fiat_p256_uint1 x240; + fiat_p256_addcarryx_u32(&x239, &x240, x238, x207, x210); + uint32_t x241; + fiat_p256_uint1 x242; + fiat_p256_addcarryx_u32(&x241, &x242, x240, x208, 0x0); + uint32_t x243; + uint32_t x244; + fiat_p256_mulx_u32(&x243, &x244, x3, (arg2[7])); + uint32_t x245; + uint32_t x246; + fiat_p256_mulx_u32(&x245, &x246, x3, (arg2[6])); + uint32_t x247; + uint32_t x248; + fiat_p256_mulx_u32(&x247, &x248, x3, (arg2[5])); + uint32_t x249; + uint32_t x250; + fiat_p256_mulx_u32(&x249, &x250, x3, (arg2[4])); + uint32_t x251; + uint32_t x252; + fiat_p256_mulx_u32(&x251, &x252, x3, (arg2[3])); + uint32_t x253; + uint32_t x254; + fiat_p256_mulx_u32(&x253, &x254, x3, (arg2[2])); + uint32_t x255; + uint32_t x256; + fiat_p256_mulx_u32(&x255, &x256, x3, (arg2[1])); + uint32_t x257; + uint32_t x258; + fiat_p256_mulx_u32(&x257, &x258, x3, (arg2[0])); + uint32_t x259; + fiat_p256_uint1 x260; + fiat_p256_addcarryx_u32(&x259, &x260, 0x0, x258, x255); + uint32_t x261; + fiat_p256_uint1 x262; + fiat_p256_addcarryx_u32(&x261, &x262, x260, x256, x253); + uint32_t x263; + fiat_p256_uint1 x264; + fiat_p256_addcarryx_u32(&x263, &x264, x262, x254, x251); + uint32_t x265; + fiat_p256_uint1 x266; + fiat_p256_addcarryx_u32(&x265, &x266, x264, x252, x249); + uint32_t x267; + fiat_p256_uint1 x268; + fiat_p256_addcarryx_u32(&x267, &x268, x266, x250, x247); + uint32_t x269; + fiat_p256_uint1 x270; + fiat_p256_addcarryx_u32(&x269, &x270, x268, x248, x245); + uint32_t x271; + fiat_p256_uint1 x272; + fiat_p256_addcarryx_u32(&x271, &x272, x270, x246, x243); + uint32_t x273; + fiat_p256_uint1 x274; + fiat_p256_addcarryx_u32(&x273, &x274, x272, x244, 0x0); + uint32_t x275; + fiat_p256_uint1 x276; + fiat_p256_addcarryx_u32(&x275, &x276, 0x0, x225, x257); + uint32_t x277; + fiat_p256_uint1 x278; + fiat_p256_addcarryx_u32(&x277, &x278, x276, x227, x259); + uint32_t x279; + fiat_p256_uint1 x280; + fiat_p256_addcarryx_u32(&x279, &x280, x278, x229, x261); + uint32_t x281; + fiat_p256_uint1 x282; + fiat_p256_addcarryx_u32(&x281, &x282, x280, x231, x263); + uint32_t x283; + fiat_p256_uint1 x284; + fiat_p256_addcarryx_u32(&x283, &x284, x282, x233, x265); + uint32_t x285; + fiat_p256_uint1 x286; + fiat_p256_addcarryx_u32(&x285, &x286, x284, x235, x267); + uint32_t x287; + fiat_p256_uint1 x288; + fiat_p256_addcarryx_u32(&x287, &x288, x286, x237, x269); + uint32_t x289; + fiat_p256_uint1 x290; + fiat_p256_addcarryx_u32(&x289, &x290, x288, x239, x271); + uint32_t x291; + fiat_p256_uint1 x292; + fiat_p256_addcarryx_u32(&x291, &x292, x290, x241, x273); + uint32_t x293; + uint32_t x294; + fiat_p256_mulx_u32(&x293, &x294, x275, UINT32_C(0xffffffff)); + uint32_t x295; + uint32_t x296; + fiat_p256_mulx_u32(&x295, &x296, x275, UINT32_C(0xffffffff)); + uint32_t x297; + uint32_t x298; + fiat_p256_mulx_u32(&x297, &x298, x275, UINT32_C(0xffffffff)); + uint32_t x299; + uint32_t x300; + fiat_p256_mulx_u32(&x299, &x300, x275, UINT32_C(0xffffffff)); + uint32_t x301; + fiat_p256_uint1 x302; + fiat_p256_addcarryx_u32(&x301, &x302, 0x0, x300, x297); + uint32_t x303; + fiat_p256_uint1 x304; + fiat_p256_addcarryx_u32(&x303, &x304, x302, x298, x295); + uint32_t x305; + fiat_p256_uint1 x306; + fiat_p256_addcarryx_u32(&x305, &x306, x304, x296, 0x0); + uint32_t x307; + fiat_p256_uint1 x308; + fiat_p256_addcarryx_u32(&x307, &x308, 0x0, x275, x299); + uint32_t x309; + fiat_p256_uint1 x310; + fiat_p256_addcarryx_u32(&x309, &x310, x308, x277, x301); + uint32_t x311; + fiat_p256_uint1 x312; + fiat_p256_addcarryx_u32(&x311, &x312, x310, x279, x303); + uint32_t x313; + fiat_p256_uint1 x314; + fiat_p256_addcarryx_u32(&x313, &x314, x312, x281, x305); + uint32_t x315; + fiat_p256_uint1 x316; + fiat_p256_addcarryx_u32(&x315, &x316, x314, x283, 0x0); + uint32_t x317; + fiat_p256_uint1 x318; + fiat_p256_addcarryx_u32(&x317, &x318, x316, x285, 0x0); + uint32_t x319; + fiat_p256_uint1 x320; + fiat_p256_addcarryx_u32(&x319, &x320, x318, x287, x275); + uint32_t x321; + fiat_p256_uint1 x322; + fiat_p256_addcarryx_u32(&x321, &x322, x320, x289, x293); + uint32_t x323; + fiat_p256_uint1 x324; + fiat_p256_addcarryx_u32(&x323, &x324, x322, x291, x294); + uint32_t x325; + fiat_p256_uint1 x326; + fiat_p256_addcarryx_u32(&x325, &x326, x324, x292, 0x0); + uint32_t x327; + uint32_t x328; + fiat_p256_mulx_u32(&x327, &x328, x4, (arg2[7])); + uint32_t x329; + uint32_t x330; + fiat_p256_mulx_u32(&x329, &x330, x4, (arg2[6])); + uint32_t x331; + uint32_t x332; + fiat_p256_mulx_u32(&x331, &x332, x4, (arg2[5])); + uint32_t x333; + uint32_t x334; + fiat_p256_mulx_u32(&x333, &x334, x4, (arg2[4])); + uint32_t x335; + uint32_t x336; + fiat_p256_mulx_u32(&x335, &x336, x4, (arg2[3])); + uint32_t x337; + uint32_t x338; + fiat_p256_mulx_u32(&x337, &x338, x4, (arg2[2])); + uint32_t x339; + uint32_t x340; + fiat_p256_mulx_u32(&x339, &x340, x4, (arg2[1])); + uint32_t x341; + uint32_t x342; + fiat_p256_mulx_u32(&x341, &x342, x4, (arg2[0])); + uint32_t x343; + fiat_p256_uint1 x344; + fiat_p256_addcarryx_u32(&x343, &x344, 0x0, x342, x339); + uint32_t x345; + fiat_p256_uint1 x346; + fiat_p256_addcarryx_u32(&x345, &x346, x344, x340, x337); + uint32_t x347; + fiat_p256_uint1 x348; + fiat_p256_addcarryx_u32(&x347, &x348, x346, x338, x335); + uint32_t x349; + fiat_p256_uint1 x350; + fiat_p256_addcarryx_u32(&x349, &x350, x348, x336, x333); + uint32_t x351; + fiat_p256_uint1 x352; + fiat_p256_addcarryx_u32(&x351, &x352, x350, x334, x331); + uint32_t x353; + fiat_p256_uint1 x354; + fiat_p256_addcarryx_u32(&x353, &x354, x352, x332, x329); + uint32_t x355; + fiat_p256_uint1 x356; + fiat_p256_addcarryx_u32(&x355, &x356, x354, x330, x327); + uint32_t x357; + fiat_p256_uint1 x358; + fiat_p256_addcarryx_u32(&x357, &x358, x356, x328, 0x0); + uint32_t x359; + fiat_p256_uint1 x360; + fiat_p256_addcarryx_u32(&x359, &x360, 0x0, x309, x341); + uint32_t x361; + fiat_p256_uint1 x362; + fiat_p256_addcarryx_u32(&x361, &x362, x360, x311, x343); + uint32_t x363; + fiat_p256_uint1 x364; + fiat_p256_addcarryx_u32(&x363, &x364, x362, x313, x345); + uint32_t x365; + fiat_p256_uint1 x366; + fiat_p256_addcarryx_u32(&x365, &x366, x364, x315, x347); + uint32_t x367; + fiat_p256_uint1 x368; + fiat_p256_addcarryx_u32(&x367, &x368, x366, x317, x349); + uint32_t x369; + fiat_p256_uint1 x370; + fiat_p256_addcarryx_u32(&x369, &x370, x368, x319, x351); + uint32_t x371; + fiat_p256_uint1 x372; + fiat_p256_addcarryx_u32(&x371, &x372, x370, x321, x353); + uint32_t x373; + fiat_p256_uint1 x374; + fiat_p256_addcarryx_u32(&x373, &x374, x372, x323, x355); + uint32_t x375; + fiat_p256_uint1 x376; + fiat_p256_addcarryx_u32(&x375, &x376, x374, x325, x357); + uint32_t x377; + uint32_t x378; + fiat_p256_mulx_u32(&x377, &x378, x359, UINT32_C(0xffffffff)); + uint32_t x379; + uint32_t x380; + fiat_p256_mulx_u32(&x379, &x380, x359, UINT32_C(0xffffffff)); + uint32_t x381; + uint32_t x382; + fiat_p256_mulx_u32(&x381, &x382, x359, UINT32_C(0xffffffff)); + uint32_t x383; + uint32_t x384; + fiat_p256_mulx_u32(&x383, &x384, x359, UINT32_C(0xffffffff)); + uint32_t x385; + fiat_p256_uint1 x386; + fiat_p256_addcarryx_u32(&x385, &x386, 0x0, x384, x381); + uint32_t x387; + fiat_p256_uint1 x388; + fiat_p256_addcarryx_u32(&x387, &x388, x386, x382, x379); + uint32_t x389; + fiat_p256_uint1 x390; + fiat_p256_addcarryx_u32(&x389, &x390, x388, x380, 0x0); + uint32_t x391; + fiat_p256_uint1 x392; + fiat_p256_addcarryx_u32(&x391, &x392, 0x0, x359, x383); + uint32_t x393; + fiat_p256_uint1 x394; + fiat_p256_addcarryx_u32(&x393, &x394, x392, x361, x385); + uint32_t x395; + fiat_p256_uint1 x396; + fiat_p256_addcarryx_u32(&x395, &x396, x394, x363, x387); + uint32_t x397; + fiat_p256_uint1 x398; + fiat_p256_addcarryx_u32(&x397, &x398, x396, x365, x389); + uint32_t x399; + fiat_p256_uint1 x400; + fiat_p256_addcarryx_u32(&x399, &x400, x398, x367, 0x0); + uint32_t x401; + fiat_p256_uint1 x402; + fiat_p256_addcarryx_u32(&x401, &x402, x400, x369, 0x0); + uint32_t x403; + fiat_p256_uint1 x404; + fiat_p256_addcarryx_u32(&x403, &x404, x402, x371, x359); + uint32_t x405; + fiat_p256_uint1 x406; + fiat_p256_addcarryx_u32(&x405, &x406, x404, x373, x377); + uint32_t x407; + fiat_p256_uint1 x408; + fiat_p256_addcarryx_u32(&x407, &x408, x406, x375, x378); + uint32_t x409; + fiat_p256_uint1 x410; + fiat_p256_addcarryx_u32(&x409, &x410, x408, x376, 0x0); + uint32_t x411; + uint32_t x412; + fiat_p256_mulx_u32(&x411, &x412, x5, (arg2[7])); + uint32_t x413; + uint32_t x414; + fiat_p256_mulx_u32(&x413, &x414, x5, (arg2[6])); + uint32_t x415; + uint32_t x416; + fiat_p256_mulx_u32(&x415, &x416, x5, (arg2[5])); + uint32_t x417; + uint32_t x418; + fiat_p256_mulx_u32(&x417, &x418, x5, (arg2[4])); + uint32_t x419; + uint32_t x420; + fiat_p256_mulx_u32(&x419, &x420, x5, (arg2[3])); + uint32_t x421; + uint32_t x422; + fiat_p256_mulx_u32(&x421, &x422, x5, (arg2[2])); + uint32_t x423; + uint32_t x424; + fiat_p256_mulx_u32(&x423, &x424, x5, (arg2[1])); + uint32_t x425; + uint32_t x426; + fiat_p256_mulx_u32(&x425, &x426, x5, (arg2[0])); + uint32_t x427; + fiat_p256_uint1 x428; + fiat_p256_addcarryx_u32(&x427, &x428, 0x0, x426, x423); + uint32_t x429; + fiat_p256_uint1 x430; + fiat_p256_addcarryx_u32(&x429, &x430, x428, x424, x421); + uint32_t x431; + fiat_p256_uint1 x432; + fiat_p256_addcarryx_u32(&x431, &x432, x430, x422, x419); + uint32_t x433; + fiat_p256_uint1 x434; + fiat_p256_addcarryx_u32(&x433, &x434, x432, x420, x417); + uint32_t x435; + fiat_p256_uint1 x436; + fiat_p256_addcarryx_u32(&x435, &x436, x434, x418, x415); + uint32_t x437; + fiat_p256_uint1 x438; + fiat_p256_addcarryx_u32(&x437, &x438, x436, x416, x413); + uint32_t x439; + fiat_p256_uint1 x440; + fiat_p256_addcarryx_u32(&x439, &x440, x438, x414, x411); + uint32_t x441; + fiat_p256_uint1 x442; + fiat_p256_addcarryx_u32(&x441, &x442, x440, x412, 0x0); + uint32_t x443; + fiat_p256_uint1 x444; + fiat_p256_addcarryx_u32(&x443, &x444, 0x0, x393, x425); + uint32_t x445; + fiat_p256_uint1 x446; + fiat_p256_addcarryx_u32(&x445, &x446, x444, x395, x427); + uint32_t x447; + fiat_p256_uint1 x448; + fiat_p256_addcarryx_u32(&x447, &x448, x446, x397, x429); + uint32_t x449; + fiat_p256_uint1 x450; + fiat_p256_addcarryx_u32(&x449, &x450, x448, x399, x431); + uint32_t x451; + fiat_p256_uint1 x452; + fiat_p256_addcarryx_u32(&x451, &x452, x450, x401, x433); + uint32_t x453; + fiat_p256_uint1 x454; + fiat_p256_addcarryx_u32(&x453, &x454, x452, x403, x435); + uint32_t x455; + fiat_p256_uint1 x456; + fiat_p256_addcarryx_u32(&x455, &x456, x454, x405, x437); + uint32_t x457; + fiat_p256_uint1 x458; + fiat_p256_addcarryx_u32(&x457, &x458, x456, x407, x439); + uint32_t x459; + fiat_p256_uint1 x460; + fiat_p256_addcarryx_u32(&x459, &x460, x458, x409, x441); + uint32_t x461; + uint32_t x462; + fiat_p256_mulx_u32(&x461, &x462, x443, UINT32_C(0xffffffff)); + uint32_t x463; + uint32_t x464; + fiat_p256_mulx_u32(&x463, &x464, x443, UINT32_C(0xffffffff)); + uint32_t x465; + uint32_t x466; + fiat_p256_mulx_u32(&x465, &x466, x443, UINT32_C(0xffffffff)); + uint32_t x467; + uint32_t x468; + fiat_p256_mulx_u32(&x467, &x468, x443, UINT32_C(0xffffffff)); + uint32_t x469; + fiat_p256_uint1 x470; + fiat_p256_addcarryx_u32(&x469, &x470, 0x0, x468, x465); + uint32_t x471; + fiat_p256_uint1 x472; + fiat_p256_addcarryx_u32(&x471, &x472, x470, x466, x463); + uint32_t x473; + fiat_p256_uint1 x474; + fiat_p256_addcarryx_u32(&x473, &x474, x472, x464, 0x0); + uint32_t x475; + fiat_p256_uint1 x476; + fiat_p256_addcarryx_u32(&x475, &x476, 0x0, x443, x467); + uint32_t x477; + fiat_p256_uint1 x478; + fiat_p256_addcarryx_u32(&x477, &x478, x476, x445, x469); + uint32_t x479; + fiat_p256_uint1 x480; + fiat_p256_addcarryx_u32(&x479, &x480, x478, x447, x471); + uint32_t x481; + fiat_p256_uint1 x482; + fiat_p256_addcarryx_u32(&x481, &x482, x480, x449, x473); + uint32_t x483; + fiat_p256_uint1 x484; + fiat_p256_addcarryx_u32(&x483, &x484, x482, x451, 0x0); + uint32_t x485; + fiat_p256_uint1 x486; + fiat_p256_addcarryx_u32(&x485, &x486, x484, x453, 0x0); + uint32_t x487; + fiat_p256_uint1 x488; + fiat_p256_addcarryx_u32(&x487, &x488, x486, x455, x443); + uint32_t x489; + fiat_p256_uint1 x490; + fiat_p256_addcarryx_u32(&x489, &x490, x488, x457, x461); + uint32_t x491; + fiat_p256_uint1 x492; + fiat_p256_addcarryx_u32(&x491, &x492, x490, x459, x462); + uint32_t x493; + fiat_p256_uint1 x494; + fiat_p256_addcarryx_u32(&x493, &x494, x492, x460, 0x0); + uint32_t x495; + uint32_t x496; + fiat_p256_mulx_u32(&x495, &x496, x6, (arg2[7])); + uint32_t x497; + uint32_t x498; + fiat_p256_mulx_u32(&x497, &x498, x6, (arg2[6])); + uint32_t x499; + uint32_t x500; + fiat_p256_mulx_u32(&x499, &x500, x6, (arg2[5])); + uint32_t x501; + uint32_t x502; + fiat_p256_mulx_u32(&x501, &x502, x6, (arg2[4])); + uint32_t x503; + uint32_t x504; + fiat_p256_mulx_u32(&x503, &x504, x6, (arg2[3])); + uint32_t x505; + uint32_t x506; + fiat_p256_mulx_u32(&x505, &x506, x6, (arg2[2])); + uint32_t x507; + uint32_t x508; + fiat_p256_mulx_u32(&x507, &x508, x6, (arg2[1])); + uint32_t x509; + uint32_t x510; + fiat_p256_mulx_u32(&x509, &x510, x6, (arg2[0])); + uint32_t x511; + fiat_p256_uint1 x512; + fiat_p256_addcarryx_u32(&x511, &x512, 0x0, x510, x507); + uint32_t x513; + fiat_p256_uint1 x514; + fiat_p256_addcarryx_u32(&x513, &x514, x512, x508, x505); + uint32_t x515; + fiat_p256_uint1 x516; + fiat_p256_addcarryx_u32(&x515, &x516, x514, x506, x503); + uint32_t x517; + fiat_p256_uint1 x518; + fiat_p256_addcarryx_u32(&x517, &x518, x516, x504, x501); + uint32_t x519; + fiat_p256_uint1 x520; + fiat_p256_addcarryx_u32(&x519, &x520, x518, x502, x499); + uint32_t x521; + fiat_p256_uint1 x522; + fiat_p256_addcarryx_u32(&x521, &x522, x520, x500, x497); + uint32_t x523; + fiat_p256_uint1 x524; + fiat_p256_addcarryx_u32(&x523, &x524, x522, x498, x495); + uint32_t x525; + fiat_p256_uint1 x526; + fiat_p256_addcarryx_u32(&x525, &x526, x524, x496, 0x0); + uint32_t x527; + fiat_p256_uint1 x528; + fiat_p256_addcarryx_u32(&x527, &x528, 0x0, x477, x509); + uint32_t x529; + fiat_p256_uint1 x530; + fiat_p256_addcarryx_u32(&x529, &x530, x528, x479, x511); + uint32_t x531; + fiat_p256_uint1 x532; + fiat_p256_addcarryx_u32(&x531, &x532, x530, x481, x513); + uint32_t x533; + fiat_p256_uint1 x534; + fiat_p256_addcarryx_u32(&x533, &x534, x532, x483, x515); + uint32_t x535; + fiat_p256_uint1 x536; + fiat_p256_addcarryx_u32(&x535, &x536, x534, x485, x517); + uint32_t x537; + fiat_p256_uint1 x538; + fiat_p256_addcarryx_u32(&x537, &x538, x536, x487, x519); + uint32_t x539; + fiat_p256_uint1 x540; + fiat_p256_addcarryx_u32(&x539, &x540, x538, x489, x521); + uint32_t x541; + fiat_p256_uint1 x542; + fiat_p256_addcarryx_u32(&x541, &x542, x540, x491, x523); + uint32_t x543; + fiat_p256_uint1 x544; + fiat_p256_addcarryx_u32(&x543, &x544, x542, x493, x525); + uint32_t x545; + uint32_t x546; + fiat_p256_mulx_u32(&x545, &x546, x527, UINT32_C(0xffffffff)); + uint32_t x547; + uint32_t x548; + fiat_p256_mulx_u32(&x547, &x548, x527, UINT32_C(0xffffffff)); + uint32_t x549; + uint32_t x550; + fiat_p256_mulx_u32(&x549, &x550, x527, UINT32_C(0xffffffff)); + uint32_t x551; + uint32_t x552; + fiat_p256_mulx_u32(&x551, &x552, x527, UINT32_C(0xffffffff)); + uint32_t x553; + fiat_p256_uint1 x554; + fiat_p256_addcarryx_u32(&x553, &x554, 0x0, x552, x549); + uint32_t x555; + fiat_p256_uint1 x556; + fiat_p256_addcarryx_u32(&x555, &x556, x554, x550, x547); + uint32_t x557; + fiat_p256_uint1 x558; + fiat_p256_addcarryx_u32(&x557, &x558, x556, x548, 0x0); + uint32_t x559; + fiat_p256_uint1 x560; + fiat_p256_addcarryx_u32(&x559, &x560, 0x0, x527, x551); + uint32_t x561; + fiat_p256_uint1 x562; + fiat_p256_addcarryx_u32(&x561, &x562, x560, x529, x553); + uint32_t x563; + fiat_p256_uint1 x564; + fiat_p256_addcarryx_u32(&x563, &x564, x562, x531, x555); + uint32_t x565; + fiat_p256_uint1 x566; + fiat_p256_addcarryx_u32(&x565, &x566, x564, x533, x557); + uint32_t x567; + fiat_p256_uint1 x568; + fiat_p256_addcarryx_u32(&x567, &x568, x566, x535, 0x0); + uint32_t x569; + fiat_p256_uint1 x570; + fiat_p256_addcarryx_u32(&x569, &x570, x568, x537, 0x0); + uint32_t x571; + fiat_p256_uint1 x572; + fiat_p256_addcarryx_u32(&x571, &x572, x570, x539, x527); + uint32_t x573; + fiat_p256_uint1 x574; + fiat_p256_addcarryx_u32(&x573, &x574, x572, x541, x545); + uint32_t x575; + fiat_p256_uint1 x576; + fiat_p256_addcarryx_u32(&x575, &x576, x574, x543, x546); + uint32_t x577; + fiat_p256_uint1 x578; + fiat_p256_addcarryx_u32(&x577, &x578, x576, x544, 0x0); + uint32_t x579; + uint32_t x580; + fiat_p256_mulx_u32(&x579, &x580, x7, (arg2[7])); + uint32_t x581; + uint32_t x582; + fiat_p256_mulx_u32(&x581, &x582, x7, (arg2[6])); + uint32_t x583; + uint32_t x584; + fiat_p256_mulx_u32(&x583, &x584, x7, (arg2[5])); + uint32_t x585; + uint32_t x586; + fiat_p256_mulx_u32(&x585, &x586, x7, (arg2[4])); + uint32_t x587; + uint32_t x588; + fiat_p256_mulx_u32(&x587, &x588, x7, (arg2[3])); + uint32_t x589; + uint32_t x590; + fiat_p256_mulx_u32(&x589, &x590, x7, (arg2[2])); + uint32_t x591; + uint32_t x592; + fiat_p256_mulx_u32(&x591, &x592, x7, (arg2[1])); + uint32_t x593; + uint32_t x594; + fiat_p256_mulx_u32(&x593, &x594, x7, (arg2[0])); + uint32_t x595; + fiat_p256_uint1 x596; + fiat_p256_addcarryx_u32(&x595, &x596, 0x0, x594, x591); + uint32_t x597; + fiat_p256_uint1 x598; + fiat_p256_addcarryx_u32(&x597, &x598, x596, x592, x589); + uint32_t x599; + fiat_p256_uint1 x600; + fiat_p256_addcarryx_u32(&x599, &x600, x598, x590, x587); + uint32_t x601; + fiat_p256_uint1 x602; + fiat_p256_addcarryx_u32(&x601, &x602, x600, x588, x585); + uint32_t x603; + fiat_p256_uint1 x604; + fiat_p256_addcarryx_u32(&x603, &x604, x602, x586, x583); + uint32_t x605; + fiat_p256_uint1 x606; + fiat_p256_addcarryx_u32(&x605, &x606, x604, x584, x581); + uint32_t x607; + fiat_p256_uint1 x608; + fiat_p256_addcarryx_u32(&x607, &x608, x606, x582, x579); + uint32_t x609; + fiat_p256_uint1 x610; + fiat_p256_addcarryx_u32(&x609, &x610, x608, x580, 0x0); + uint32_t x611; + fiat_p256_uint1 x612; + fiat_p256_addcarryx_u32(&x611, &x612, 0x0, x561, x593); + uint32_t x613; + fiat_p256_uint1 x614; + fiat_p256_addcarryx_u32(&x613, &x614, x612, x563, x595); + uint32_t x615; + fiat_p256_uint1 x616; + fiat_p256_addcarryx_u32(&x615, &x616, x614, x565, x597); + uint32_t x617; + fiat_p256_uint1 x618; + fiat_p256_addcarryx_u32(&x617, &x618, x616, x567, x599); + uint32_t x619; + fiat_p256_uint1 x620; + fiat_p256_addcarryx_u32(&x619, &x620, x618, x569, x601); + uint32_t x621; + fiat_p256_uint1 x622; + fiat_p256_addcarryx_u32(&x621, &x622, x620, x571, x603); + uint32_t x623; + fiat_p256_uint1 x624; + fiat_p256_addcarryx_u32(&x623, &x624, x622, x573, x605); + uint32_t x625; + fiat_p256_uint1 x626; + fiat_p256_addcarryx_u32(&x625, &x626, x624, x575, x607); + uint32_t x627; + fiat_p256_uint1 x628; + fiat_p256_addcarryx_u32(&x627, &x628, x626, x577, x609); + uint32_t x629; + uint32_t x630; + fiat_p256_mulx_u32(&x629, &x630, x611, UINT32_C(0xffffffff)); + uint32_t x631; + uint32_t x632; + fiat_p256_mulx_u32(&x631, &x632, x611, UINT32_C(0xffffffff)); + uint32_t x633; + uint32_t x634; + fiat_p256_mulx_u32(&x633, &x634, x611, UINT32_C(0xffffffff)); + uint32_t x635; + uint32_t x636; + fiat_p256_mulx_u32(&x635, &x636, x611, UINT32_C(0xffffffff)); + uint32_t x637; + fiat_p256_uint1 x638; + fiat_p256_addcarryx_u32(&x637, &x638, 0x0, x636, x633); + uint32_t x639; + fiat_p256_uint1 x640; + fiat_p256_addcarryx_u32(&x639, &x640, x638, x634, x631); + uint32_t x641; + fiat_p256_uint1 x642; + fiat_p256_addcarryx_u32(&x641, &x642, x640, x632, 0x0); + uint32_t x643; + fiat_p256_uint1 x644; + fiat_p256_addcarryx_u32(&x643, &x644, 0x0, x611, x635); + uint32_t x645; + fiat_p256_uint1 x646; + fiat_p256_addcarryx_u32(&x645, &x646, x644, x613, x637); + uint32_t x647; + fiat_p256_uint1 x648; + fiat_p256_addcarryx_u32(&x647, &x648, x646, x615, x639); + uint32_t x649; + fiat_p256_uint1 x650; + fiat_p256_addcarryx_u32(&x649, &x650, x648, x617, x641); + uint32_t x651; + fiat_p256_uint1 x652; + fiat_p256_addcarryx_u32(&x651, &x652, x650, x619, 0x0); + uint32_t x653; + fiat_p256_uint1 x654; + fiat_p256_addcarryx_u32(&x653, &x654, x652, x621, 0x0); + uint32_t x655; + fiat_p256_uint1 x656; + fiat_p256_addcarryx_u32(&x655, &x656, x654, x623, x611); + uint32_t x657; + fiat_p256_uint1 x658; + fiat_p256_addcarryx_u32(&x657, &x658, x656, x625, x629); + uint32_t x659; + fiat_p256_uint1 x660; + fiat_p256_addcarryx_u32(&x659, &x660, x658, x627, x630); + uint32_t x661; + fiat_p256_uint1 x662; + fiat_p256_addcarryx_u32(&x661, &x662, x660, x628, 0x0); + uint32_t x663; + fiat_p256_uint1 x664; + fiat_p256_subborrowx_u32(&x663, &x664, 0x0, x645, UINT32_C(0xffffffff)); + uint32_t x665; + fiat_p256_uint1 x666; + fiat_p256_subborrowx_u32(&x665, &x666, x664, x647, UINT32_C(0xffffffff)); + uint32_t x667; + fiat_p256_uint1 x668; + fiat_p256_subborrowx_u32(&x667, &x668, x666, x649, UINT32_C(0xffffffff)); + uint32_t x669; + fiat_p256_uint1 x670; + fiat_p256_subborrowx_u32(&x669, &x670, x668, x651, 0x0); + uint32_t x671; + fiat_p256_uint1 x672; + fiat_p256_subborrowx_u32(&x671, &x672, x670, x653, 0x0); + uint32_t x673; + fiat_p256_uint1 x674; + fiat_p256_subborrowx_u32(&x673, &x674, x672, x655, 0x0); + uint32_t x675; + fiat_p256_uint1 x676; + fiat_p256_subborrowx_u32(&x675, &x676, x674, x657, 0x1); + uint32_t x677; + fiat_p256_uint1 x678; + fiat_p256_subborrowx_u32(&x677, &x678, x676, x659, UINT32_C(0xffffffff)); + uint32_t x679; + fiat_p256_uint1 x680; + fiat_p256_subborrowx_u32(&x679, &x680, x678, x661, 0x0); + uint32_t x681; + fiat_p256_cmovznz_u32(&x681, x680, x663, x645); + uint32_t x682; + fiat_p256_cmovznz_u32(&x682, x680, x665, x647); + uint32_t x683; + fiat_p256_cmovznz_u32(&x683, x680, x667, x649); + uint32_t x684; + fiat_p256_cmovznz_u32(&x684, x680, x669, x651); + uint32_t x685; + fiat_p256_cmovznz_u32(&x685, x680, x671, x653); + uint32_t x686; + fiat_p256_cmovznz_u32(&x686, x680, x673, x655); + uint32_t x687; + fiat_p256_cmovznz_u32(&x687, x680, x675, x657); + uint32_t x688; + fiat_p256_cmovznz_u32(&x688, x680, x677, x659); + out1[0] = x681; + out1[1] = x682; + out1[2] = x683; + out1[3] = x684; + out1[4] = x685; + out1[5] = x686; + out1[6] = x687; + out1[7] = x688; +} + +/* + * The function fiat_p256_square squares a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_square(uint32_t out1[8], const uint32_t arg1[8]) { + uint32_t x1 = (arg1[1]); + uint32_t x2 = (arg1[2]); + uint32_t x3 = (arg1[3]); + uint32_t x4 = (arg1[4]); + uint32_t x5 = (arg1[5]); + uint32_t x6 = (arg1[6]); + uint32_t x7 = (arg1[7]); + uint32_t x8 = (arg1[0]); + uint32_t x9; + uint32_t x10; + fiat_p256_mulx_u32(&x9, &x10, x8, (arg1[7])); + uint32_t x11; + uint32_t x12; + fiat_p256_mulx_u32(&x11, &x12, x8, (arg1[6])); + uint32_t x13; + uint32_t x14; + fiat_p256_mulx_u32(&x13, &x14, x8, (arg1[5])); + uint32_t x15; + uint32_t x16; + fiat_p256_mulx_u32(&x15, &x16, x8, (arg1[4])); + uint32_t x17; + uint32_t x18; + fiat_p256_mulx_u32(&x17, &x18, x8, (arg1[3])); + uint32_t x19; + uint32_t x20; + fiat_p256_mulx_u32(&x19, &x20, x8, (arg1[2])); + uint32_t x21; + uint32_t x22; + fiat_p256_mulx_u32(&x21, &x22, x8, (arg1[1])); + uint32_t x23; + uint32_t x24; + fiat_p256_mulx_u32(&x23, &x24, x8, (arg1[0])); + uint32_t x25; + fiat_p256_uint1 x26; + fiat_p256_addcarryx_u32(&x25, &x26, 0x0, x24, x21); + uint32_t x27; + fiat_p256_uint1 x28; + fiat_p256_addcarryx_u32(&x27, &x28, x26, x22, x19); + uint32_t x29; + fiat_p256_uint1 x30; + fiat_p256_addcarryx_u32(&x29, &x30, x28, x20, x17); + uint32_t x31; + fiat_p256_uint1 x32; + fiat_p256_addcarryx_u32(&x31, &x32, x30, x18, x15); + uint32_t x33; + fiat_p256_uint1 x34; + fiat_p256_addcarryx_u32(&x33, &x34, x32, x16, x13); + uint32_t x35; + fiat_p256_uint1 x36; + fiat_p256_addcarryx_u32(&x35, &x36, x34, x14, x11); + uint32_t x37; + fiat_p256_uint1 x38; + fiat_p256_addcarryx_u32(&x37, &x38, x36, x12, x9); + uint32_t x39; + fiat_p256_uint1 x40; + fiat_p256_addcarryx_u32(&x39, &x40, x38, x10, 0x0); + uint32_t x41; + uint32_t x42; + fiat_p256_mulx_u32(&x41, &x42, x23, UINT32_C(0xffffffff)); + uint32_t x43; + uint32_t x44; + fiat_p256_mulx_u32(&x43, &x44, x23, UINT32_C(0xffffffff)); + uint32_t x45; + uint32_t x46; + fiat_p256_mulx_u32(&x45, &x46, x23, UINT32_C(0xffffffff)); + uint32_t x47; + uint32_t x48; + fiat_p256_mulx_u32(&x47, &x48, x23, UINT32_C(0xffffffff)); + uint32_t x49; + fiat_p256_uint1 x50; + fiat_p256_addcarryx_u32(&x49, &x50, 0x0, x48, x45); + uint32_t x51; + fiat_p256_uint1 x52; + fiat_p256_addcarryx_u32(&x51, &x52, x50, x46, x43); + uint32_t x53; + fiat_p256_uint1 x54; + fiat_p256_addcarryx_u32(&x53, &x54, x52, x44, 0x0); + uint32_t x55; + fiat_p256_uint1 x56; + fiat_p256_addcarryx_u32(&x55, &x56, 0x0, x23, x47); + uint32_t x57; + fiat_p256_uint1 x58; + fiat_p256_addcarryx_u32(&x57, &x58, x56, x25, x49); + uint32_t x59; + fiat_p256_uint1 x60; + fiat_p256_addcarryx_u32(&x59, &x60, x58, x27, x51); + uint32_t x61; + fiat_p256_uint1 x62; + fiat_p256_addcarryx_u32(&x61, &x62, x60, x29, x53); + uint32_t x63; + fiat_p256_uint1 x64; + fiat_p256_addcarryx_u32(&x63, &x64, x62, x31, 0x0); + uint32_t x65; + fiat_p256_uint1 x66; + fiat_p256_addcarryx_u32(&x65, &x66, x64, x33, 0x0); + uint32_t x67; + fiat_p256_uint1 x68; + fiat_p256_addcarryx_u32(&x67, &x68, x66, x35, x23); + uint32_t x69; + fiat_p256_uint1 x70; + fiat_p256_addcarryx_u32(&x69, &x70, x68, x37, x41); + uint32_t x71; + fiat_p256_uint1 x72; + fiat_p256_addcarryx_u32(&x71, &x72, x70, x39, x42); + uint32_t x73; + fiat_p256_uint1 x74; + fiat_p256_addcarryx_u32(&x73, &x74, x72, 0x0, 0x0); + uint32_t x75; + uint32_t x76; + fiat_p256_mulx_u32(&x75, &x76, x1, (arg1[7])); + uint32_t x77; + uint32_t x78; + fiat_p256_mulx_u32(&x77, &x78, x1, (arg1[6])); + uint32_t x79; + uint32_t x80; + fiat_p256_mulx_u32(&x79, &x80, x1, (arg1[5])); + uint32_t x81; + uint32_t x82; + fiat_p256_mulx_u32(&x81, &x82, x1, (arg1[4])); + uint32_t x83; + uint32_t x84; + fiat_p256_mulx_u32(&x83, &x84, x1, (arg1[3])); + uint32_t x85; + uint32_t x86; + fiat_p256_mulx_u32(&x85, &x86, x1, (arg1[2])); + uint32_t x87; + uint32_t x88; + fiat_p256_mulx_u32(&x87, &x88, x1, (arg1[1])); + uint32_t x89; + uint32_t x90; + fiat_p256_mulx_u32(&x89, &x90, x1, (arg1[0])); + uint32_t x91; + fiat_p256_uint1 x92; + fiat_p256_addcarryx_u32(&x91, &x92, 0x0, x90, x87); + uint32_t x93; + fiat_p256_uint1 x94; + fiat_p256_addcarryx_u32(&x93, &x94, x92, x88, x85); + uint32_t x95; + fiat_p256_uint1 x96; + fiat_p256_addcarryx_u32(&x95, &x96, x94, x86, x83); + uint32_t x97; + fiat_p256_uint1 x98; + fiat_p256_addcarryx_u32(&x97, &x98, x96, x84, x81); + uint32_t x99; + fiat_p256_uint1 x100; + fiat_p256_addcarryx_u32(&x99, &x100, x98, x82, x79); + uint32_t x101; + fiat_p256_uint1 x102; + fiat_p256_addcarryx_u32(&x101, &x102, x100, x80, x77); + uint32_t x103; + fiat_p256_uint1 x104; + fiat_p256_addcarryx_u32(&x103, &x104, x102, x78, x75); + uint32_t x105; + fiat_p256_uint1 x106; + fiat_p256_addcarryx_u32(&x105, &x106, x104, x76, 0x0); + uint32_t x107; + fiat_p256_uint1 x108; + fiat_p256_addcarryx_u32(&x107, &x108, 0x0, x57, x89); + uint32_t x109; + fiat_p256_uint1 x110; + fiat_p256_addcarryx_u32(&x109, &x110, x108, x59, x91); + uint32_t x111; + fiat_p256_uint1 x112; + fiat_p256_addcarryx_u32(&x111, &x112, x110, x61, x93); + uint32_t x113; + fiat_p256_uint1 x114; + fiat_p256_addcarryx_u32(&x113, &x114, x112, x63, x95); + uint32_t x115; + fiat_p256_uint1 x116; + fiat_p256_addcarryx_u32(&x115, &x116, x114, x65, x97); + uint32_t x117; + fiat_p256_uint1 x118; + fiat_p256_addcarryx_u32(&x117, &x118, x116, x67, x99); + uint32_t x119; + fiat_p256_uint1 x120; + fiat_p256_addcarryx_u32(&x119, &x120, x118, x69, x101); + uint32_t x121; + fiat_p256_uint1 x122; + fiat_p256_addcarryx_u32(&x121, &x122, x120, x71, x103); + uint32_t x123; + fiat_p256_uint1 x124; + fiat_p256_addcarryx_u32(&x123, &x124, x122, (fiat_p256_uint1)x73, x105); + uint32_t x125; + uint32_t x126; + fiat_p256_mulx_u32(&x125, &x126, x107, UINT32_C(0xffffffff)); + uint32_t x127; + uint32_t x128; + fiat_p256_mulx_u32(&x127, &x128, x107, UINT32_C(0xffffffff)); + uint32_t x129; + uint32_t x130; + fiat_p256_mulx_u32(&x129, &x130, x107, UINT32_C(0xffffffff)); + uint32_t x131; + uint32_t x132; + fiat_p256_mulx_u32(&x131, &x132, x107, UINT32_C(0xffffffff)); + uint32_t x133; + fiat_p256_uint1 x134; + fiat_p256_addcarryx_u32(&x133, &x134, 0x0, x132, x129); + uint32_t x135; + fiat_p256_uint1 x136; + fiat_p256_addcarryx_u32(&x135, &x136, x134, x130, x127); + uint32_t x137; + fiat_p256_uint1 x138; + fiat_p256_addcarryx_u32(&x137, &x138, x136, x128, 0x0); + uint32_t x139; + fiat_p256_uint1 x140; + fiat_p256_addcarryx_u32(&x139, &x140, 0x0, x107, x131); + uint32_t x141; + fiat_p256_uint1 x142; + fiat_p256_addcarryx_u32(&x141, &x142, x140, x109, x133); + uint32_t x143; + fiat_p256_uint1 x144; + fiat_p256_addcarryx_u32(&x143, &x144, x142, x111, x135); + uint32_t x145; + fiat_p256_uint1 x146; + fiat_p256_addcarryx_u32(&x145, &x146, x144, x113, x137); + uint32_t x147; + fiat_p256_uint1 x148; + fiat_p256_addcarryx_u32(&x147, &x148, x146, x115, 0x0); + uint32_t x149; + fiat_p256_uint1 x150; + fiat_p256_addcarryx_u32(&x149, &x150, x148, x117, 0x0); + uint32_t x151; + fiat_p256_uint1 x152; + fiat_p256_addcarryx_u32(&x151, &x152, x150, x119, x107); + uint32_t x153; + fiat_p256_uint1 x154; + fiat_p256_addcarryx_u32(&x153, &x154, x152, x121, x125); + uint32_t x155; + fiat_p256_uint1 x156; + fiat_p256_addcarryx_u32(&x155, &x156, x154, x123, x126); + uint32_t x157; + fiat_p256_uint1 x158; + fiat_p256_addcarryx_u32(&x157, &x158, x156, x124, 0x0); + uint32_t x159; + uint32_t x160; + fiat_p256_mulx_u32(&x159, &x160, x2, (arg1[7])); + uint32_t x161; + uint32_t x162; + fiat_p256_mulx_u32(&x161, &x162, x2, (arg1[6])); + uint32_t x163; + uint32_t x164; + fiat_p256_mulx_u32(&x163, &x164, x2, (arg1[5])); + uint32_t x165; + uint32_t x166; + fiat_p256_mulx_u32(&x165, &x166, x2, (arg1[4])); + uint32_t x167; + uint32_t x168; + fiat_p256_mulx_u32(&x167, &x168, x2, (arg1[3])); + uint32_t x169; + uint32_t x170; + fiat_p256_mulx_u32(&x169, &x170, x2, (arg1[2])); + uint32_t x171; + uint32_t x172; + fiat_p256_mulx_u32(&x171, &x172, x2, (arg1[1])); + uint32_t x173; + uint32_t x174; + fiat_p256_mulx_u32(&x173, &x174, x2, (arg1[0])); + uint32_t x175; + fiat_p256_uint1 x176; + fiat_p256_addcarryx_u32(&x175, &x176, 0x0, x174, x171); + uint32_t x177; + fiat_p256_uint1 x178; + fiat_p256_addcarryx_u32(&x177, &x178, x176, x172, x169); + uint32_t x179; + fiat_p256_uint1 x180; + fiat_p256_addcarryx_u32(&x179, &x180, x178, x170, x167); + uint32_t x181; + fiat_p256_uint1 x182; + fiat_p256_addcarryx_u32(&x181, &x182, x180, x168, x165); + uint32_t x183; + fiat_p256_uint1 x184; + fiat_p256_addcarryx_u32(&x183, &x184, x182, x166, x163); + uint32_t x185; + fiat_p256_uint1 x186; + fiat_p256_addcarryx_u32(&x185, &x186, x184, x164, x161); + uint32_t x187; + fiat_p256_uint1 x188; + fiat_p256_addcarryx_u32(&x187, &x188, x186, x162, x159); + uint32_t x189; + fiat_p256_uint1 x190; + fiat_p256_addcarryx_u32(&x189, &x190, x188, x160, 0x0); + uint32_t x191; + fiat_p256_uint1 x192; + fiat_p256_addcarryx_u32(&x191, &x192, 0x0, x141, x173); + uint32_t x193; + fiat_p256_uint1 x194; + fiat_p256_addcarryx_u32(&x193, &x194, x192, x143, x175); + uint32_t x195; + fiat_p256_uint1 x196; + fiat_p256_addcarryx_u32(&x195, &x196, x194, x145, x177); + uint32_t x197; + fiat_p256_uint1 x198; + fiat_p256_addcarryx_u32(&x197, &x198, x196, x147, x179); + uint32_t x199; + fiat_p256_uint1 x200; + fiat_p256_addcarryx_u32(&x199, &x200, x198, x149, x181); + uint32_t x201; + fiat_p256_uint1 x202; + fiat_p256_addcarryx_u32(&x201, &x202, x200, x151, x183); + uint32_t x203; + fiat_p256_uint1 x204; + fiat_p256_addcarryx_u32(&x203, &x204, x202, x153, x185); + uint32_t x205; + fiat_p256_uint1 x206; + fiat_p256_addcarryx_u32(&x205, &x206, x204, x155, x187); + uint32_t x207; + fiat_p256_uint1 x208; + fiat_p256_addcarryx_u32(&x207, &x208, x206, x157, x189); + uint32_t x209; + uint32_t x210; + fiat_p256_mulx_u32(&x209, &x210, x191, UINT32_C(0xffffffff)); + uint32_t x211; + uint32_t x212; + fiat_p256_mulx_u32(&x211, &x212, x191, UINT32_C(0xffffffff)); + uint32_t x213; + uint32_t x214; + fiat_p256_mulx_u32(&x213, &x214, x191, UINT32_C(0xffffffff)); + uint32_t x215; + uint32_t x216; + fiat_p256_mulx_u32(&x215, &x216, x191, UINT32_C(0xffffffff)); + uint32_t x217; + fiat_p256_uint1 x218; + fiat_p256_addcarryx_u32(&x217, &x218, 0x0, x216, x213); + uint32_t x219; + fiat_p256_uint1 x220; + fiat_p256_addcarryx_u32(&x219, &x220, x218, x214, x211); + uint32_t x221; + fiat_p256_uint1 x222; + fiat_p256_addcarryx_u32(&x221, &x222, x220, x212, 0x0); + uint32_t x223; + fiat_p256_uint1 x224; + fiat_p256_addcarryx_u32(&x223, &x224, 0x0, x191, x215); + uint32_t x225; + fiat_p256_uint1 x226; + fiat_p256_addcarryx_u32(&x225, &x226, x224, x193, x217); + uint32_t x227; + fiat_p256_uint1 x228; + fiat_p256_addcarryx_u32(&x227, &x228, x226, x195, x219); + uint32_t x229; + fiat_p256_uint1 x230; + fiat_p256_addcarryx_u32(&x229, &x230, x228, x197, x221); + uint32_t x231; + fiat_p256_uint1 x232; + fiat_p256_addcarryx_u32(&x231, &x232, x230, x199, 0x0); + uint32_t x233; + fiat_p256_uint1 x234; + fiat_p256_addcarryx_u32(&x233, &x234, x232, x201, 0x0); + uint32_t x235; + fiat_p256_uint1 x236; + fiat_p256_addcarryx_u32(&x235, &x236, x234, x203, x191); + uint32_t x237; + fiat_p256_uint1 x238; + fiat_p256_addcarryx_u32(&x237, &x238, x236, x205, x209); + uint32_t x239; + fiat_p256_uint1 x240; + fiat_p256_addcarryx_u32(&x239, &x240, x238, x207, x210); + uint32_t x241; + fiat_p256_uint1 x242; + fiat_p256_addcarryx_u32(&x241, &x242, x240, x208, 0x0); + uint32_t x243; + uint32_t x244; + fiat_p256_mulx_u32(&x243, &x244, x3, (arg1[7])); + uint32_t x245; + uint32_t x246; + fiat_p256_mulx_u32(&x245, &x246, x3, (arg1[6])); + uint32_t x247; + uint32_t x248; + fiat_p256_mulx_u32(&x247, &x248, x3, (arg1[5])); + uint32_t x249; + uint32_t x250; + fiat_p256_mulx_u32(&x249, &x250, x3, (arg1[4])); + uint32_t x251; + uint32_t x252; + fiat_p256_mulx_u32(&x251, &x252, x3, (arg1[3])); + uint32_t x253; + uint32_t x254; + fiat_p256_mulx_u32(&x253, &x254, x3, (arg1[2])); + uint32_t x255; + uint32_t x256; + fiat_p256_mulx_u32(&x255, &x256, x3, (arg1[1])); + uint32_t x257; + uint32_t x258; + fiat_p256_mulx_u32(&x257, &x258, x3, (arg1[0])); + uint32_t x259; + fiat_p256_uint1 x260; + fiat_p256_addcarryx_u32(&x259, &x260, 0x0, x258, x255); + uint32_t x261; + fiat_p256_uint1 x262; + fiat_p256_addcarryx_u32(&x261, &x262, x260, x256, x253); + uint32_t x263; + fiat_p256_uint1 x264; + fiat_p256_addcarryx_u32(&x263, &x264, x262, x254, x251); + uint32_t x265; + fiat_p256_uint1 x266; + fiat_p256_addcarryx_u32(&x265, &x266, x264, x252, x249); + uint32_t x267; + fiat_p256_uint1 x268; + fiat_p256_addcarryx_u32(&x267, &x268, x266, x250, x247); + uint32_t x269; + fiat_p256_uint1 x270; + fiat_p256_addcarryx_u32(&x269, &x270, x268, x248, x245); + uint32_t x271; + fiat_p256_uint1 x272; + fiat_p256_addcarryx_u32(&x271, &x272, x270, x246, x243); + uint32_t x273; + fiat_p256_uint1 x274; + fiat_p256_addcarryx_u32(&x273, &x274, x272, x244, 0x0); + uint32_t x275; + fiat_p256_uint1 x276; + fiat_p256_addcarryx_u32(&x275, &x276, 0x0, x225, x257); + uint32_t x277; + fiat_p256_uint1 x278; + fiat_p256_addcarryx_u32(&x277, &x278, x276, x227, x259); + uint32_t x279; + fiat_p256_uint1 x280; + fiat_p256_addcarryx_u32(&x279, &x280, x278, x229, x261); + uint32_t x281; + fiat_p256_uint1 x282; + fiat_p256_addcarryx_u32(&x281, &x282, x280, x231, x263); + uint32_t x283; + fiat_p256_uint1 x284; + fiat_p256_addcarryx_u32(&x283, &x284, x282, x233, x265); + uint32_t x285; + fiat_p256_uint1 x286; + fiat_p256_addcarryx_u32(&x285, &x286, x284, x235, x267); + uint32_t x287; + fiat_p256_uint1 x288; + fiat_p256_addcarryx_u32(&x287, &x288, x286, x237, x269); + uint32_t x289; + fiat_p256_uint1 x290; + fiat_p256_addcarryx_u32(&x289, &x290, x288, x239, x271); + uint32_t x291; + fiat_p256_uint1 x292; + fiat_p256_addcarryx_u32(&x291, &x292, x290, x241, x273); + uint32_t x293; + uint32_t x294; + fiat_p256_mulx_u32(&x293, &x294, x275, UINT32_C(0xffffffff)); + uint32_t x295; + uint32_t x296; + fiat_p256_mulx_u32(&x295, &x296, x275, UINT32_C(0xffffffff)); + uint32_t x297; + uint32_t x298; + fiat_p256_mulx_u32(&x297, &x298, x275, UINT32_C(0xffffffff)); + uint32_t x299; + uint32_t x300; + fiat_p256_mulx_u32(&x299, &x300, x275, UINT32_C(0xffffffff)); + uint32_t x301; + fiat_p256_uint1 x302; + fiat_p256_addcarryx_u32(&x301, &x302, 0x0, x300, x297); + uint32_t x303; + fiat_p256_uint1 x304; + fiat_p256_addcarryx_u32(&x303, &x304, x302, x298, x295); + uint32_t x305; + fiat_p256_uint1 x306; + fiat_p256_addcarryx_u32(&x305, &x306, x304, x296, 0x0); + uint32_t x307; + fiat_p256_uint1 x308; + fiat_p256_addcarryx_u32(&x307, &x308, 0x0, x275, x299); + uint32_t x309; + fiat_p256_uint1 x310; + fiat_p256_addcarryx_u32(&x309, &x310, x308, x277, x301); + uint32_t x311; + fiat_p256_uint1 x312; + fiat_p256_addcarryx_u32(&x311, &x312, x310, x279, x303); + uint32_t x313; + fiat_p256_uint1 x314; + fiat_p256_addcarryx_u32(&x313, &x314, x312, x281, x305); + uint32_t x315; + fiat_p256_uint1 x316; + fiat_p256_addcarryx_u32(&x315, &x316, x314, x283, 0x0); + uint32_t x317; + fiat_p256_uint1 x318; + fiat_p256_addcarryx_u32(&x317, &x318, x316, x285, 0x0); + uint32_t x319; + fiat_p256_uint1 x320; + fiat_p256_addcarryx_u32(&x319, &x320, x318, x287, x275); + uint32_t x321; + fiat_p256_uint1 x322; + fiat_p256_addcarryx_u32(&x321, &x322, x320, x289, x293); + uint32_t x323; + fiat_p256_uint1 x324; + fiat_p256_addcarryx_u32(&x323, &x324, x322, x291, x294); + uint32_t x325; + fiat_p256_uint1 x326; + fiat_p256_addcarryx_u32(&x325, &x326, x324, x292, 0x0); + uint32_t x327; + uint32_t x328; + fiat_p256_mulx_u32(&x327, &x328, x4, (arg1[7])); + uint32_t x329; + uint32_t x330; + fiat_p256_mulx_u32(&x329, &x330, x4, (arg1[6])); + uint32_t x331; + uint32_t x332; + fiat_p256_mulx_u32(&x331, &x332, x4, (arg1[5])); + uint32_t x333; + uint32_t x334; + fiat_p256_mulx_u32(&x333, &x334, x4, (arg1[4])); + uint32_t x335; + uint32_t x336; + fiat_p256_mulx_u32(&x335, &x336, x4, (arg1[3])); + uint32_t x337; + uint32_t x338; + fiat_p256_mulx_u32(&x337, &x338, x4, (arg1[2])); + uint32_t x339; + uint32_t x340; + fiat_p256_mulx_u32(&x339, &x340, x4, (arg1[1])); + uint32_t x341; + uint32_t x342; + fiat_p256_mulx_u32(&x341, &x342, x4, (arg1[0])); + uint32_t x343; + fiat_p256_uint1 x344; + fiat_p256_addcarryx_u32(&x343, &x344, 0x0, x342, x339); + uint32_t x345; + fiat_p256_uint1 x346; + fiat_p256_addcarryx_u32(&x345, &x346, x344, x340, x337); + uint32_t x347; + fiat_p256_uint1 x348; + fiat_p256_addcarryx_u32(&x347, &x348, x346, x338, x335); + uint32_t x349; + fiat_p256_uint1 x350; + fiat_p256_addcarryx_u32(&x349, &x350, x348, x336, x333); + uint32_t x351; + fiat_p256_uint1 x352; + fiat_p256_addcarryx_u32(&x351, &x352, x350, x334, x331); + uint32_t x353; + fiat_p256_uint1 x354; + fiat_p256_addcarryx_u32(&x353, &x354, x352, x332, x329); + uint32_t x355; + fiat_p256_uint1 x356; + fiat_p256_addcarryx_u32(&x355, &x356, x354, x330, x327); + uint32_t x357; + fiat_p256_uint1 x358; + fiat_p256_addcarryx_u32(&x357, &x358, x356, x328, 0x0); + uint32_t x359; + fiat_p256_uint1 x360; + fiat_p256_addcarryx_u32(&x359, &x360, 0x0, x309, x341); + uint32_t x361; + fiat_p256_uint1 x362; + fiat_p256_addcarryx_u32(&x361, &x362, x360, x311, x343); + uint32_t x363; + fiat_p256_uint1 x364; + fiat_p256_addcarryx_u32(&x363, &x364, x362, x313, x345); + uint32_t x365; + fiat_p256_uint1 x366; + fiat_p256_addcarryx_u32(&x365, &x366, x364, x315, x347); + uint32_t x367; + fiat_p256_uint1 x368; + fiat_p256_addcarryx_u32(&x367, &x368, x366, x317, x349); + uint32_t x369; + fiat_p256_uint1 x370; + fiat_p256_addcarryx_u32(&x369, &x370, x368, x319, x351); + uint32_t x371; + fiat_p256_uint1 x372; + fiat_p256_addcarryx_u32(&x371, &x372, x370, x321, x353); + uint32_t x373; + fiat_p256_uint1 x374; + fiat_p256_addcarryx_u32(&x373, &x374, x372, x323, x355); + uint32_t x375; + fiat_p256_uint1 x376; + fiat_p256_addcarryx_u32(&x375, &x376, x374, x325, x357); + uint32_t x377; + uint32_t x378; + fiat_p256_mulx_u32(&x377, &x378, x359, UINT32_C(0xffffffff)); + uint32_t x379; + uint32_t x380; + fiat_p256_mulx_u32(&x379, &x380, x359, UINT32_C(0xffffffff)); + uint32_t x381; + uint32_t x382; + fiat_p256_mulx_u32(&x381, &x382, x359, UINT32_C(0xffffffff)); + uint32_t x383; + uint32_t x384; + fiat_p256_mulx_u32(&x383, &x384, x359, UINT32_C(0xffffffff)); + uint32_t x385; + fiat_p256_uint1 x386; + fiat_p256_addcarryx_u32(&x385, &x386, 0x0, x384, x381); + uint32_t x387; + fiat_p256_uint1 x388; + fiat_p256_addcarryx_u32(&x387, &x388, x386, x382, x379); + uint32_t x389; + fiat_p256_uint1 x390; + fiat_p256_addcarryx_u32(&x389, &x390, x388, x380, 0x0); + uint32_t x391; + fiat_p256_uint1 x392; + fiat_p256_addcarryx_u32(&x391, &x392, 0x0, x359, x383); + uint32_t x393; + fiat_p256_uint1 x394; + fiat_p256_addcarryx_u32(&x393, &x394, x392, x361, x385); + uint32_t x395; + fiat_p256_uint1 x396; + fiat_p256_addcarryx_u32(&x395, &x396, x394, x363, x387); + uint32_t x397; + fiat_p256_uint1 x398; + fiat_p256_addcarryx_u32(&x397, &x398, x396, x365, x389); + uint32_t x399; + fiat_p256_uint1 x400; + fiat_p256_addcarryx_u32(&x399, &x400, x398, x367, 0x0); + uint32_t x401; + fiat_p256_uint1 x402; + fiat_p256_addcarryx_u32(&x401, &x402, x400, x369, 0x0); + uint32_t x403; + fiat_p256_uint1 x404; + fiat_p256_addcarryx_u32(&x403, &x404, x402, x371, x359); + uint32_t x405; + fiat_p256_uint1 x406; + fiat_p256_addcarryx_u32(&x405, &x406, x404, x373, x377); + uint32_t x407; + fiat_p256_uint1 x408; + fiat_p256_addcarryx_u32(&x407, &x408, x406, x375, x378); + uint32_t x409; + fiat_p256_uint1 x410; + fiat_p256_addcarryx_u32(&x409, &x410, x408, x376, 0x0); + uint32_t x411; + uint32_t x412; + fiat_p256_mulx_u32(&x411, &x412, x5, (arg1[7])); + uint32_t x413; + uint32_t x414; + fiat_p256_mulx_u32(&x413, &x414, x5, (arg1[6])); + uint32_t x415; + uint32_t x416; + fiat_p256_mulx_u32(&x415, &x416, x5, (arg1[5])); + uint32_t x417; + uint32_t x418; + fiat_p256_mulx_u32(&x417, &x418, x5, (arg1[4])); + uint32_t x419; + uint32_t x420; + fiat_p256_mulx_u32(&x419, &x420, x5, (arg1[3])); + uint32_t x421; + uint32_t x422; + fiat_p256_mulx_u32(&x421, &x422, x5, (arg1[2])); + uint32_t x423; + uint32_t x424; + fiat_p256_mulx_u32(&x423, &x424, x5, (arg1[1])); + uint32_t x425; + uint32_t x426; + fiat_p256_mulx_u32(&x425, &x426, x5, (arg1[0])); + uint32_t x427; + fiat_p256_uint1 x428; + fiat_p256_addcarryx_u32(&x427, &x428, 0x0, x426, x423); + uint32_t x429; + fiat_p256_uint1 x430; + fiat_p256_addcarryx_u32(&x429, &x430, x428, x424, x421); + uint32_t x431; + fiat_p256_uint1 x432; + fiat_p256_addcarryx_u32(&x431, &x432, x430, x422, x419); + uint32_t x433; + fiat_p256_uint1 x434; + fiat_p256_addcarryx_u32(&x433, &x434, x432, x420, x417); + uint32_t x435; + fiat_p256_uint1 x436; + fiat_p256_addcarryx_u32(&x435, &x436, x434, x418, x415); + uint32_t x437; + fiat_p256_uint1 x438; + fiat_p256_addcarryx_u32(&x437, &x438, x436, x416, x413); + uint32_t x439; + fiat_p256_uint1 x440; + fiat_p256_addcarryx_u32(&x439, &x440, x438, x414, x411); + uint32_t x441; + fiat_p256_uint1 x442; + fiat_p256_addcarryx_u32(&x441, &x442, x440, x412, 0x0); + uint32_t x443; + fiat_p256_uint1 x444; + fiat_p256_addcarryx_u32(&x443, &x444, 0x0, x393, x425); + uint32_t x445; + fiat_p256_uint1 x446; + fiat_p256_addcarryx_u32(&x445, &x446, x444, x395, x427); + uint32_t x447; + fiat_p256_uint1 x448; + fiat_p256_addcarryx_u32(&x447, &x448, x446, x397, x429); + uint32_t x449; + fiat_p256_uint1 x450; + fiat_p256_addcarryx_u32(&x449, &x450, x448, x399, x431); + uint32_t x451; + fiat_p256_uint1 x452; + fiat_p256_addcarryx_u32(&x451, &x452, x450, x401, x433); + uint32_t x453; + fiat_p256_uint1 x454; + fiat_p256_addcarryx_u32(&x453, &x454, x452, x403, x435); + uint32_t x455; + fiat_p256_uint1 x456; + fiat_p256_addcarryx_u32(&x455, &x456, x454, x405, x437); + uint32_t x457; + fiat_p256_uint1 x458; + fiat_p256_addcarryx_u32(&x457, &x458, x456, x407, x439); + uint32_t x459; + fiat_p256_uint1 x460; + fiat_p256_addcarryx_u32(&x459, &x460, x458, x409, x441); + uint32_t x461; + uint32_t x462; + fiat_p256_mulx_u32(&x461, &x462, x443, UINT32_C(0xffffffff)); + uint32_t x463; + uint32_t x464; + fiat_p256_mulx_u32(&x463, &x464, x443, UINT32_C(0xffffffff)); + uint32_t x465; + uint32_t x466; + fiat_p256_mulx_u32(&x465, &x466, x443, UINT32_C(0xffffffff)); + uint32_t x467; + uint32_t x468; + fiat_p256_mulx_u32(&x467, &x468, x443, UINT32_C(0xffffffff)); + uint32_t x469; + fiat_p256_uint1 x470; + fiat_p256_addcarryx_u32(&x469, &x470, 0x0, x468, x465); + uint32_t x471; + fiat_p256_uint1 x472; + fiat_p256_addcarryx_u32(&x471, &x472, x470, x466, x463); + uint32_t x473; + fiat_p256_uint1 x474; + fiat_p256_addcarryx_u32(&x473, &x474, x472, x464, 0x0); + uint32_t x475; + fiat_p256_uint1 x476; + fiat_p256_addcarryx_u32(&x475, &x476, 0x0, x443, x467); + uint32_t x477; + fiat_p256_uint1 x478; + fiat_p256_addcarryx_u32(&x477, &x478, x476, x445, x469); + uint32_t x479; + fiat_p256_uint1 x480; + fiat_p256_addcarryx_u32(&x479, &x480, x478, x447, x471); + uint32_t x481; + fiat_p256_uint1 x482; + fiat_p256_addcarryx_u32(&x481, &x482, x480, x449, x473); + uint32_t x483; + fiat_p256_uint1 x484; + fiat_p256_addcarryx_u32(&x483, &x484, x482, x451, 0x0); + uint32_t x485; + fiat_p256_uint1 x486; + fiat_p256_addcarryx_u32(&x485, &x486, x484, x453, 0x0); + uint32_t x487; + fiat_p256_uint1 x488; + fiat_p256_addcarryx_u32(&x487, &x488, x486, x455, x443); + uint32_t x489; + fiat_p256_uint1 x490; + fiat_p256_addcarryx_u32(&x489, &x490, x488, x457, x461); + uint32_t x491; + fiat_p256_uint1 x492; + fiat_p256_addcarryx_u32(&x491, &x492, x490, x459, x462); + uint32_t x493; + fiat_p256_uint1 x494; + fiat_p256_addcarryx_u32(&x493, &x494, x492, x460, 0x0); + uint32_t x495; + uint32_t x496; + fiat_p256_mulx_u32(&x495, &x496, x6, (arg1[7])); + uint32_t x497; + uint32_t x498; + fiat_p256_mulx_u32(&x497, &x498, x6, (arg1[6])); + uint32_t x499; + uint32_t x500; + fiat_p256_mulx_u32(&x499, &x500, x6, (arg1[5])); + uint32_t x501; + uint32_t x502; + fiat_p256_mulx_u32(&x501, &x502, x6, (arg1[4])); + uint32_t x503; + uint32_t x504; + fiat_p256_mulx_u32(&x503, &x504, x6, (arg1[3])); + uint32_t x505; + uint32_t x506; + fiat_p256_mulx_u32(&x505, &x506, x6, (arg1[2])); + uint32_t x507; + uint32_t x508; + fiat_p256_mulx_u32(&x507, &x508, x6, (arg1[1])); + uint32_t x509; + uint32_t x510; + fiat_p256_mulx_u32(&x509, &x510, x6, (arg1[0])); + uint32_t x511; + fiat_p256_uint1 x512; + fiat_p256_addcarryx_u32(&x511, &x512, 0x0, x510, x507); + uint32_t x513; + fiat_p256_uint1 x514; + fiat_p256_addcarryx_u32(&x513, &x514, x512, x508, x505); + uint32_t x515; + fiat_p256_uint1 x516; + fiat_p256_addcarryx_u32(&x515, &x516, x514, x506, x503); + uint32_t x517; + fiat_p256_uint1 x518; + fiat_p256_addcarryx_u32(&x517, &x518, x516, x504, x501); + uint32_t x519; + fiat_p256_uint1 x520; + fiat_p256_addcarryx_u32(&x519, &x520, x518, x502, x499); + uint32_t x521; + fiat_p256_uint1 x522; + fiat_p256_addcarryx_u32(&x521, &x522, x520, x500, x497); + uint32_t x523; + fiat_p256_uint1 x524; + fiat_p256_addcarryx_u32(&x523, &x524, x522, x498, x495); + uint32_t x525; + fiat_p256_uint1 x526; + fiat_p256_addcarryx_u32(&x525, &x526, x524, x496, 0x0); + uint32_t x527; + fiat_p256_uint1 x528; + fiat_p256_addcarryx_u32(&x527, &x528, 0x0, x477, x509); + uint32_t x529; + fiat_p256_uint1 x530; + fiat_p256_addcarryx_u32(&x529, &x530, x528, x479, x511); + uint32_t x531; + fiat_p256_uint1 x532; + fiat_p256_addcarryx_u32(&x531, &x532, x530, x481, x513); + uint32_t x533; + fiat_p256_uint1 x534; + fiat_p256_addcarryx_u32(&x533, &x534, x532, x483, x515); + uint32_t x535; + fiat_p256_uint1 x536; + fiat_p256_addcarryx_u32(&x535, &x536, x534, x485, x517); + uint32_t x537; + fiat_p256_uint1 x538; + fiat_p256_addcarryx_u32(&x537, &x538, x536, x487, x519); + uint32_t x539; + fiat_p256_uint1 x540; + fiat_p256_addcarryx_u32(&x539, &x540, x538, x489, x521); + uint32_t x541; + fiat_p256_uint1 x542; + fiat_p256_addcarryx_u32(&x541, &x542, x540, x491, x523); + uint32_t x543; + fiat_p256_uint1 x544; + fiat_p256_addcarryx_u32(&x543, &x544, x542, x493, x525); + uint32_t x545; + uint32_t x546; + fiat_p256_mulx_u32(&x545, &x546, x527, UINT32_C(0xffffffff)); + uint32_t x547; + uint32_t x548; + fiat_p256_mulx_u32(&x547, &x548, x527, UINT32_C(0xffffffff)); + uint32_t x549; + uint32_t x550; + fiat_p256_mulx_u32(&x549, &x550, x527, UINT32_C(0xffffffff)); + uint32_t x551; + uint32_t x552; + fiat_p256_mulx_u32(&x551, &x552, x527, UINT32_C(0xffffffff)); + uint32_t x553; + fiat_p256_uint1 x554; + fiat_p256_addcarryx_u32(&x553, &x554, 0x0, x552, x549); + uint32_t x555; + fiat_p256_uint1 x556; + fiat_p256_addcarryx_u32(&x555, &x556, x554, x550, x547); + uint32_t x557; + fiat_p256_uint1 x558; + fiat_p256_addcarryx_u32(&x557, &x558, x556, x548, 0x0); + uint32_t x559; + fiat_p256_uint1 x560; + fiat_p256_addcarryx_u32(&x559, &x560, 0x0, x527, x551); + uint32_t x561; + fiat_p256_uint1 x562; + fiat_p256_addcarryx_u32(&x561, &x562, x560, x529, x553); + uint32_t x563; + fiat_p256_uint1 x564; + fiat_p256_addcarryx_u32(&x563, &x564, x562, x531, x555); + uint32_t x565; + fiat_p256_uint1 x566; + fiat_p256_addcarryx_u32(&x565, &x566, x564, x533, x557); + uint32_t x567; + fiat_p256_uint1 x568; + fiat_p256_addcarryx_u32(&x567, &x568, x566, x535, 0x0); + uint32_t x569; + fiat_p256_uint1 x570; + fiat_p256_addcarryx_u32(&x569, &x570, x568, x537, 0x0); + uint32_t x571; + fiat_p256_uint1 x572; + fiat_p256_addcarryx_u32(&x571, &x572, x570, x539, x527); + uint32_t x573; + fiat_p256_uint1 x574; + fiat_p256_addcarryx_u32(&x573, &x574, x572, x541, x545); + uint32_t x575; + fiat_p256_uint1 x576; + fiat_p256_addcarryx_u32(&x575, &x576, x574, x543, x546); + uint32_t x577; + fiat_p256_uint1 x578; + fiat_p256_addcarryx_u32(&x577, &x578, x576, x544, 0x0); + uint32_t x579; + uint32_t x580; + fiat_p256_mulx_u32(&x579, &x580, x7, (arg1[7])); + uint32_t x581; + uint32_t x582; + fiat_p256_mulx_u32(&x581, &x582, x7, (arg1[6])); + uint32_t x583; + uint32_t x584; + fiat_p256_mulx_u32(&x583, &x584, x7, (arg1[5])); + uint32_t x585; + uint32_t x586; + fiat_p256_mulx_u32(&x585, &x586, x7, (arg1[4])); + uint32_t x587; + uint32_t x588; + fiat_p256_mulx_u32(&x587, &x588, x7, (arg1[3])); + uint32_t x589; + uint32_t x590; + fiat_p256_mulx_u32(&x589, &x590, x7, (arg1[2])); + uint32_t x591; + uint32_t x592; + fiat_p256_mulx_u32(&x591, &x592, x7, (arg1[1])); + uint32_t x593; + uint32_t x594; + fiat_p256_mulx_u32(&x593, &x594, x7, (arg1[0])); + uint32_t x595; + fiat_p256_uint1 x596; + fiat_p256_addcarryx_u32(&x595, &x596, 0x0, x594, x591); + uint32_t x597; + fiat_p256_uint1 x598; + fiat_p256_addcarryx_u32(&x597, &x598, x596, x592, x589); + uint32_t x599; + fiat_p256_uint1 x600; + fiat_p256_addcarryx_u32(&x599, &x600, x598, x590, x587); + uint32_t x601; + fiat_p256_uint1 x602; + fiat_p256_addcarryx_u32(&x601, &x602, x600, x588, x585); + uint32_t x603; + fiat_p256_uint1 x604; + fiat_p256_addcarryx_u32(&x603, &x604, x602, x586, x583); + uint32_t x605; + fiat_p256_uint1 x606; + fiat_p256_addcarryx_u32(&x605, &x606, x604, x584, x581); + uint32_t x607; + fiat_p256_uint1 x608; + fiat_p256_addcarryx_u32(&x607, &x608, x606, x582, x579); + uint32_t x609; + fiat_p256_uint1 x610; + fiat_p256_addcarryx_u32(&x609, &x610, x608, x580, 0x0); + uint32_t x611; + fiat_p256_uint1 x612; + fiat_p256_addcarryx_u32(&x611, &x612, 0x0, x561, x593); + uint32_t x613; + fiat_p256_uint1 x614; + fiat_p256_addcarryx_u32(&x613, &x614, x612, x563, x595); + uint32_t x615; + fiat_p256_uint1 x616; + fiat_p256_addcarryx_u32(&x615, &x616, x614, x565, x597); + uint32_t x617; + fiat_p256_uint1 x618; + fiat_p256_addcarryx_u32(&x617, &x618, x616, x567, x599); + uint32_t x619; + fiat_p256_uint1 x620; + fiat_p256_addcarryx_u32(&x619, &x620, x618, x569, x601); + uint32_t x621; + fiat_p256_uint1 x622; + fiat_p256_addcarryx_u32(&x621, &x622, x620, x571, x603); + uint32_t x623; + fiat_p256_uint1 x624; + fiat_p256_addcarryx_u32(&x623, &x624, x622, x573, x605); + uint32_t x625; + fiat_p256_uint1 x626; + fiat_p256_addcarryx_u32(&x625, &x626, x624, x575, x607); + uint32_t x627; + fiat_p256_uint1 x628; + fiat_p256_addcarryx_u32(&x627, &x628, x626, x577, x609); + uint32_t x629; + uint32_t x630; + fiat_p256_mulx_u32(&x629, &x630, x611, UINT32_C(0xffffffff)); + uint32_t x631; + uint32_t x632; + fiat_p256_mulx_u32(&x631, &x632, x611, UINT32_C(0xffffffff)); + uint32_t x633; + uint32_t x634; + fiat_p256_mulx_u32(&x633, &x634, x611, UINT32_C(0xffffffff)); + uint32_t x635; + uint32_t x636; + fiat_p256_mulx_u32(&x635, &x636, x611, UINT32_C(0xffffffff)); + uint32_t x637; + fiat_p256_uint1 x638; + fiat_p256_addcarryx_u32(&x637, &x638, 0x0, x636, x633); + uint32_t x639; + fiat_p256_uint1 x640; + fiat_p256_addcarryx_u32(&x639, &x640, x638, x634, x631); + uint32_t x641; + fiat_p256_uint1 x642; + fiat_p256_addcarryx_u32(&x641, &x642, x640, x632, 0x0); + uint32_t x643; + fiat_p256_uint1 x644; + fiat_p256_addcarryx_u32(&x643, &x644, 0x0, x611, x635); + uint32_t x645; + fiat_p256_uint1 x646; + fiat_p256_addcarryx_u32(&x645, &x646, x644, x613, x637); + uint32_t x647; + fiat_p256_uint1 x648; + fiat_p256_addcarryx_u32(&x647, &x648, x646, x615, x639); + uint32_t x649; + fiat_p256_uint1 x650; + fiat_p256_addcarryx_u32(&x649, &x650, x648, x617, x641); + uint32_t x651; + fiat_p256_uint1 x652; + fiat_p256_addcarryx_u32(&x651, &x652, x650, x619, 0x0); + uint32_t x653; + fiat_p256_uint1 x654; + fiat_p256_addcarryx_u32(&x653, &x654, x652, x621, 0x0); + uint32_t x655; + fiat_p256_uint1 x656; + fiat_p256_addcarryx_u32(&x655, &x656, x654, x623, x611); + uint32_t x657; + fiat_p256_uint1 x658; + fiat_p256_addcarryx_u32(&x657, &x658, x656, x625, x629); + uint32_t x659; + fiat_p256_uint1 x660; + fiat_p256_addcarryx_u32(&x659, &x660, x658, x627, x630); + uint32_t x661; + fiat_p256_uint1 x662; + fiat_p256_addcarryx_u32(&x661, &x662, x660, x628, 0x0); + uint32_t x663; + fiat_p256_uint1 x664; + fiat_p256_subborrowx_u32(&x663, &x664, 0x0, x645, UINT32_C(0xffffffff)); + uint32_t x665; + fiat_p256_uint1 x666; + fiat_p256_subborrowx_u32(&x665, &x666, x664, x647, UINT32_C(0xffffffff)); + uint32_t x667; + fiat_p256_uint1 x668; + fiat_p256_subborrowx_u32(&x667, &x668, x666, x649, UINT32_C(0xffffffff)); + uint32_t x669; + fiat_p256_uint1 x670; + fiat_p256_subborrowx_u32(&x669, &x670, x668, x651, 0x0); + uint32_t x671; + fiat_p256_uint1 x672; + fiat_p256_subborrowx_u32(&x671, &x672, x670, x653, 0x0); + uint32_t x673; + fiat_p256_uint1 x674; + fiat_p256_subborrowx_u32(&x673, &x674, x672, x655, 0x0); + uint32_t x675; + fiat_p256_uint1 x676; + fiat_p256_subborrowx_u32(&x675, &x676, x674, x657, 0x1); + uint32_t x677; + fiat_p256_uint1 x678; + fiat_p256_subborrowx_u32(&x677, &x678, x676, x659, UINT32_C(0xffffffff)); + uint32_t x679; + fiat_p256_uint1 x680; + fiat_p256_subborrowx_u32(&x679, &x680, x678, x661, 0x0); + uint32_t x681; + fiat_p256_cmovznz_u32(&x681, x680, x663, x645); + uint32_t x682; + fiat_p256_cmovznz_u32(&x682, x680, x665, x647); + uint32_t x683; + fiat_p256_cmovznz_u32(&x683, x680, x667, x649); + uint32_t x684; + fiat_p256_cmovznz_u32(&x684, x680, x669, x651); + uint32_t x685; + fiat_p256_cmovznz_u32(&x685, x680, x671, x653); + uint32_t x686; + fiat_p256_cmovznz_u32(&x686, x680, x673, x655); + uint32_t x687; + fiat_p256_cmovznz_u32(&x687, x680, x675, x657); + uint32_t x688; + fiat_p256_cmovznz_u32(&x688, x680, x677, x659); + out1[0] = x681; + out1[1] = x682; + out1[2] = x683; + out1[3] = x684; + out1[4] = x685; + out1[5] = x686; + out1[6] = x687; + out1[7] = x688; +} + +/* + * The function fiat_p256_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_add(uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { + uint32_t x1; + fiat_p256_uint1 x2; + fiat_p256_addcarryx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + uint32_t x3; + fiat_p256_uint1 x4; + fiat_p256_addcarryx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); + uint32_t x5; + fiat_p256_uint1 x6; + fiat_p256_addcarryx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); + uint32_t x7; + fiat_p256_uint1 x8; + fiat_p256_addcarryx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); + uint32_t x9; + fiat_p256_uint1 x10; + fiat_p256_addcarryx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); + uint32_t x11; + fiat_p256_uint1 x12; + fiat_p256_addcarryx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); + uint32_t x13; + fiat_p256_uint1 x14; + fiat_p256_addcarryx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); + uint32_t x15; + fiat_p256_uint1 x16; + fiat_p256_addcarryx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); + uint32_t x17; + fiat_p256_uint1 x18; + fiat_p256_subborrowx_u32(&x17, &x18, 0x0, x1, UINT32_C(0xffffffff)); + uint32_t x19; + fiat_p256_uint1 x20; + fiat_p256_subborrowx_u32(&x19, &x20, x18, x3, UINT32_C(0xffffffff)); + uint32_t x21; + fiat_p256_uint1 x22; + fiat_p256_subborrowx_u32(&x21, &x22, x20, x5, UINT32_C(0xffffffff)); + uint32_t x23; + fiat_p256_uint1 x24; + fiat_p256_subborrowx_u32(&x23, &x24, x22, x7, 0x0); + uint32_t x25; + fiat_p256_uint1 x26; + fiat_p256_subborrowx_u32(&x25, &x26, x24, x9, 0x0); + uint32_t x27; + fiat_p256_uint1 x28; + fiat_p256_subborrowx_u32(&x27, &x28, x26, x11, 0x0); + uint32_t x29; + fiat_p256_uint1 x30; + fiat_p256_subborrowx_u32(&x29, &x30, x28, x13, 0x1); + uint32_t x31; + fiat_p256_uint1 x32; + fiat_p256_subborrowx_u32(&x31, &x32, x30, x15, UINT32_C(0xffffffff)); + uint32_t x33; + fiat_p256_uint1 x34; + fiat_p256_subborrowx_u32(&x33, &x34, x32, x16, 0x0); + uint32_t x35; + fiat_p256_cmovznz_u32(&x35, x34, x17, x1); + uint32_t x36; + fiat_p256_cmovznz_u32(&x36, x34, x19, x3); + uint32_t x37; + fiat_p256_cmovznz_u32(&x37, x34, x21, x5); + uint32_t x38; + fiat_p256_cmovznz_u32(&x38, x34, x23, x7); + uint32_t x39; + fiat_p256_cmovznz_u32(&x39, x34, x25, x9); + uint32_t x40; + fiat_p256_cmovznz_u32(&x40, x34, x27, x11); + uint32_t x41; + fiat_p256_cmovznz_u32(&x41, x34, x29, x13); + uint32_t x42; + fiat_p256_cmovznz_u32(&x42, x34, x31, x15); + out1[0] = x35; + out1[1] = x36; + out1[2] = x37; + out1[3] = x38; + out1[4] = x39; + out1[5] = x40; + out1[6] = x41; + out1[7] = x42; +} + +/* + * The function fiat_p256_sub subtracts two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_sub(uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { + uint32_t x1; + fiat_p256_uint1 x2; + fiat_p256_subborrowx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + uint32_t x3; + fiat_p256_uint1 x4; + fiat_p256_subborrowx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); + uint32_t x5; + fiat_p256_uint1 x6; + fiat_p256_subborrowx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); + uint32_t x7; + fiat_p256_uint1 x8; + fiat_p256_subborrowx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); + uint32_t x9; + fiat_p256_uint1 x10; + fiat_p256_subborrowx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); + uint32_t x11; + fiat_p256_uint1 x12; + fiat_p256_subborrowx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); + uint32_t x13; + fiat_p256_uint1 x14; + fiat_p256_subborrowx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); + uint32_t x15; + fiat_p256_uint1 x16; + fiat_p256_subborrowx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); + uint32_t x17; + fiat_p256_cmovznz_u32(&x17, x16, 0x0, UINT32_C(0xffffffff)); + uint32_t x18; + fiat_p256_uint1 x19; + fiat_p256_addcarryx_u32(&x18, &x19, 0x0, x1, (x17 & UINT32_C(0xffffffff))); + uint32_t x20; + fiat_p256_uint1 x21; + fiat_p256_addcarryx_u32(&x20, &x21, x19, x3, (x17 & UINT32_C(0xffffffff))); + uint32_t x22; + fiat_p256_uint1 x23; + fiat_p256_addcarryx_u32(&x22, &x23, x21, x5, (x17 & UINT32_C(0xffffffff))); + uint32_t x24; + fiat_p256_uint1 x25; + fiat_p256_addcarryx_u32(&x24, &x25, x23, x7, 0x0); + uint32_t x26; + fiat_p256_uint1 x27; + fiat_p256_addcarryx_u32(&x26, &x27, x25, x9, 0x0); + uint32_t x28; + fiat_p256_uint1 x29; + fiat_p256_addcarryx_u32(&x28, &x29, x27, x11, 0x0); + uint32_t x30; + fiat_p256_uint1 x31; + fiat_p256_addcarryx_u32(&x30, &x31, x29, x13, (fiat_p256_uint1)(x17 & 0x1)); + uint32_t x32; + fiat_p256_uint1 x33; + fiat_p256_addcarryx_u32(&x32, &x33, x31, x15, (x17 & UINT32_C(0xffffffff))); + out1[0] = x18; + out1[1] = x20; + out1[2] = x22; + out1[3] = x24; + out1[4] = x26; + out1[5] = x28; + out1[6] = x30; + out1[7] = x32; +} + +/* + * The function fiat_p256_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_opp(uint32_t out1[8], const uint32_t arg1[8]) { + uint32_t x1; + fiat_p256_uint1 x2; + fiat_p256_subborrowx_u32(&x1, &x2, 0x0, 0x0, (arg1[0])); + uint32_t x3; + fiat_p256_uint1 x4; + fiat_p256_subborrowx_u32(&x3, &x4, x2, 0x0, (arg1[1])); + uint32_t x5; + fiat_p256_uint1 x6; + fiat_p256_subborrowx_u32(&x5, &x6, x4, 0x0, (arg1[2])); + uint32_t x7; + fiat_p256_uint1 x8; + fiat_p256_subborrowx_u32(&x7, &x8, x6, 0x0, (arg1[3])); + uint32_t x9; + fiat_p256_uint1 x10; + fiat_p256_subborrowx_u32(&x9, &x10, x8, 0x0, (arg1[4])); + uint32_t x11; + fiat_p256_uint1 x12; + fiat_p256_subborrowx_u32(&x11, &x12, x10, 0x0, (arg1[5])); + uint32_t x13; + fiat_p256_uint1 x14; + fiat_p256_subborrowx_u32(&x13, &x14, x12, 0x0, (arg1[6])); + uint32_t x15; + fiat_p256_uint1 x16; + fiat_p256_subborrowx_u32(&x15, &x16, x14, 0x0, (arg1[7])); + uint32_t x17; + fiat_p256_cmovznz_u32(&x17, x16, 0x0, UINT32_C(0xffffffff)); + uint32_t x18; + fiat_p256_uint1 x19; + fiat_p256_addcarryx_u32(&x18, &x19, 0x0, x1, (x17 & UINT32_C(0xffffffff))); + uint32_t x20; + fiat_p256_uint1 x21; + fiat_p256_addcarryx_u32(&x20, &x21, x19, x3, (x17 & UINT32_C(0xffffffff))); + uint32_t x22; + fiat_p256_uint1 x23; + fiat_p256_addcarryx_u32(&x22, &x23, x21, x5, (x17 & UINT32_C(0xffffffff))); + uint32_t x24; + fiat_p256_uint1 x25; + fiat_p256_addcarryx_u32(&x24, &x25, x23, x7, 0x0); + uint32_t x26; + fiat_p256_uint1 x27; + fiat_p256_addcarryx_u32(&x26, &x27, x25, x9, 0x0); + uint32_t x28; + fiat_p256_uint1 x29; + fiat_p256_addcarryx_u32(&x28, &x29, x27, x11, 0x0); + uint32_t x30; + fiat_p256_uint1 x31; + fiat_p256_addcarryx_u32(&x30, &x31, x29, x13, (fiat_p256_uint1)(x17 & 0x1)); + uint32_t x32; + fiat_p256_uint1 x33; + fiat_p256_addcarryx_u32(&x32, &x33, x31, x15, (x17 & UINT32_C(0xffffffff))); + out1[0] = x18; + out1[1] = x20; + out1[2] = x22; + out1[3] = x24; + out1[4] = x26; + out1[5] = x28; + out1[6] = x30; + out1[7] = x32; +} + +/* + * The function fiat_p256_from_montgomery translates a field element out of the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^32)⁻¹ mod m)^8) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_from_montgomery(uint32_t out1[8], const uint32_t arg1[8]) { + uint32_t x1 = (arg1[0]); + uint32_t x2; + uint32_t x3; + fiat_p256_mulx_u32(&x2, &x3, x1, UINT32_C(0xffffffff)); + uint32_t x4; + uint32_t x5; + fiat_p256_mulx_u32(&x4, &x5, x1, UINT32_C(0xffffffff)); + uint32_t x6; + uint32_t x7; + fiat_p256_mulx_u32(&x6, &x7, x1, UINT32_C(0xffffffff)); + uint32_t x8; + uint32_t x9; + fiat_p256_mulx_u32(&x8, &x9, x1, UINT32_C(0xffffffff)); + uint32_t x10; + fiat_p256_uint1 x11; + fiat_p256_addcarryx_u32(&x10, &x11, 0x0, x9, x6); + uint32_t x12; + fiat_p256_uint1 x13; + fiat_p256_addcarryx_u32(&x12, &x13, x11, x7, x4); + uint32_t x14; + fiat_p256_uint1 x15; + fiat_p256_addcarryx_u32(&x14, &x15, 0x0, x1, x8); + uint32_t x16; + fiat_p256_uint1 x17; + fiat_p256_addcarryx_u32(&x16, &x17, x15, 0x0, x10); + uint32_t x18; + fiat_p256_uint1 x19; + fiat_p256_addcarryx_u32(&x18, &x19, x17, 0x0, x12); + uint32_t x20; + fiat_p256_uint1 x21; + fiat_p256_addcarryx_u32(&x20, &x21, x13, x5, 0x0); + uint32_t x22; + fiat_p256_uint1 x23; + fiat_p256_addcarryx_u32(&x22, &x23, x19, 0x0, x20); + uint32_t x24; + fiat_p256_uint1 x25; + fiat_p256_addcarryx_u32(&x24, &x25, 0x0, x16, (arg1[1])); + uint32_t x26; + fiat_p256_uint1 x27; + fiat_p256_addcarryx_u32(&x26, &x27, x25, x18, 0x0); + uint32_t x28; + fiat_p256_uint1 x29; + fiat_p256_addcarryx_u32(&x28, &x29, x27, x22, 0x0); + uint32_t x30; + uint32_t x31; + fiat_p256_mulx_u32(&x30, &x31, x24, UINT32_C(0xffffffff)); + uint32_t x32; + uint32_t x33; + fiat_p256_mulx_u32(&x32, &x33, x24, UINT32_C(0xffffffff)); + uint32_t x34; + uint32_t x35; + fiat_p256_mulx_u32(&x34, &x35, x24, UINT32_C(0xffffffff)); + uint32_t x36; + uint32_t x37; + fiat_p256_mulx_u32(&x36, &x37, x24, UINT32_C(0xffffffff)); + uint32_t x38; + fiat_p256_uint1 x39; + fiat_p256_addcarryx_u32(&x38, &x39, 0x0, x37, x34); + uint32_t x40; + fiat_p256_uint1 x41; + fiat_p256_addcarryx_u32(&x40, &x41, x39, x35, x32); + uint32_t x42; + fiat_p256_uint1 x43; + fiat_p256_addcarryx_u32(&x42, &x43, 0x0, x24, x36); + uint32_t x44; + fiat_p256_uint1 x45; + fiat_p256_addcarryx_u32(&x44, &x45, x43, x26, x38); + uint32_t x46; + fiat_p256_uint1 x47; + fiat_p256_addcarryx_u32(&x46, &x47, x45, x28, x40); + uint32_t x48; + fiat_p256_uint1 x49; + fiat_p256_addcarryx_u32(&x48, &x49, x41, x33, 0x0); + uint32_t x50; + fiat_p256_uint1 x51; + fiat_p256_addcarryx_u32(&x50, &x51, x23, 0x0, 0x0); + uint32_t x52; + fiat_p256_uint1 x53; + fiat_p256_addcarryx_u32(&x52, &x53, x29, (fiat_p256_uint1)x50, 0x0); + uint32_t x54; + fiat_p256_uint1 x55; + fiat_p256_addcarryx_u32(&x54, &x55, x47, x52, x48); + uint32_t x56; + fiat_p256_uint1 x57; + fiat_p256_addcarryx_u32(&x56, &x57, 0x0, x2, x24); + uint32_t x58; + fiat_p256_uint1 x59; + fiat_p256_addcarryx_u32(&x58, &x59, x57, x3, x30); + uint32_t x60; + fiat_p256_uint1 x61; + fiat_p256_addcarryx_u32(&x60, &x61, 0x0, x44, (arg1[2])); + uint32_t x62; + fiat_p256_uint1 x63; + fiat_p256_addcarryx_u32(&x62, &x63, x61, x46, 0x0); + uint32_t x64; + fiat_p256_uint1 x65; + fiat_p256_addcarryx_u32(&x64, &x65, x63, x54, 0x0); + uint32_t x66; + uint32_t x67; + fiat_p256_mulx_u32(&x66, &x67, x60, UINT32_C(0xffffffff)); + uint32_t x68; + uint32_t x69; + fiat_p256_mulx_u32(&x68, &x69, x60, UINT32_C(0xffffffff)); + uint32_t x70; + uint32_t x71; + fiat_p256_mulx_u32(&x70, &x71, x60, UINT32_C(0xffffffff)); + uint32_t x72; + uint32_t x73; + fiat_p256_mulx_u32(&x72, &x73, x60, UINT32_C(0xffffffff)); + uint32_t x74; + fiat_p256_uint1 x75; + fiat_p256_addcarryx_u32(&x74, &x75, 0x0, x73, x70); + uint32_t x76; + fiat_p256_uint1 x77; + fiat_p256_addcarryx_u32(&x76, &x77, x75, x71, x68); + uint32_t x78; + fiat_p256_uint1 x79; + fiat_p256_addcarryx_u32(&x78, &x79, 0x0, x60, x72); + uint32_t x80; + fiat_p256_uint1 x81; + fiat_p256_addcarryx_u32(&x80, &x81, x79, x62, x74); + uint32_t x82; + fiat_p256_uint1 x83; + fiat_p256_addcarryx_u32(&x82, &x83, x81, x64, x76); + uint32_t x84; + fiat_p256_uint1 x85; + fiat_p256_addcarryx_u32(&x84, &x85, x77, x69, 0x0); + uint32_t x86; + fiat_p256_uint1 x87; + fiat_p256_addcarryx_u32(&x86, &x87, x55, 0x0, 0x0); + uint32_t x88; + fiat_p256_uint1 x89; + fiat_p256_addcarryx_u32(&x88, &x89, x65, (fiat_p256_uint1)x86, 0x0); + uint32_t x90; + fiat_p256_uint1 x91; + fiat_p256_addcarryx_u32(&x90, &x91, x83, x88, x84); + uint32_t x92; + fiat_p256_uint1 x93; + fiat_p256_addcarryx_u32(&x92, &x93, x91, x1, 0x0); + uint32_t x94; + fiat_p256_uint1 x95; + fiat_p256_addcarryx_u32(&x94, &x95, x93, x56, 0x0); + uint32_t x96; + fiat_p256_uint1 x97; + fiat_p256_addcarryx_u32(&x96, &x97, x95, x58, x60); + uint32_t x98; + fiat_p256_uint1 x99; + fiat_p256_addcarryx_u32(&x98, &x99, x59, 0x0, x31); + uint32_t x100; + fiat_p256_uint1 x101; + fiat_p256_addcarryx_u32(&x100, &x101, x97, x98, x66); + uint32_t x102; + fiat_p256_uint1 x103; + fiat_p256_addcarryx_u32(&x102, &x103, 0x0, x80, (arg1[3])); + uint32_t x104; + fiat_p256_uint1 x105; + fiat_p256_addcarryx_u32(&x104, &x105, x103, x82, 0x0); + uint32_t x106; + fiat_p256_uint1 x107; + fiat_p256_addcarryx_u32(&x106, &x107, x105, x90, 0x0); + uint32_t x108; + fiat_p256_uint1 x109; + fiat_p256_addcarryx_u32(&x108, &x109, x107, x92, 0x0); + uint32_t x110; + fiat_p256_uint1 x111; + fiat_p256_addcarryx_u32(&x110, &x111, x109, x94, 0x0); + uint32_t x112; + fiat_p256_uint1 x113; + fiat_p256_addcarryx_u32(&x112, &x113, x111, x96, 0x0); + uint32_t x114; + fiat_p256_uint1 x115; + fiat_p256_addcarryx_u32(&x114, &x115, x113, x100, 0x0); + uint32_t x116; + fiat_p256_uint1 x117; + fiat_p256_addcarryx_u32(&x116, &x117, x101, 0x0, x67); + uint32_t x118; + fiat_p256_uint1 x119; + fiat_p256_addcarryx_u32(&x118, &x119, x115, x116, 0x0); + uint32_t x120; + uint32_t x121; + fiat_p256_mulx_u32(&x120, &x121, x102, UINT32_C(0xffffffff)); + uint32_t x122; + uint32_t x123; + fiat_p256_mulx_u32(&x122, &x123, x102, UINT32_C(0xffffffff)); + uint32_t x124; + uint32_t x125; + fiat_p256_mulx_u32(&x124, &x125, x102, UINT32_C(0xffffffff)); + uint32_t x126; + uint32_t x127; + fiat_p256_mulx_u32(&x126, &x127, x102, UINT32_C(0xffffffff)); + uint32_t x128; + fiat_p256_uint1 x129; + fiat_p256_addcarryx_u32(&x128, &x129, 0x0, x127, x124); + uint32_t x130; + fiat_p256_uint1 x131; + fiat_p256_addcarryx_u32(&x130, &x131, x129, x125, x122); + uint32_t x132; + fiat_p256_uint1 x133; + fiat_p256_addcarryx_u32(&x132, &x133, 0x0, x102, x126); + uint32_t x134; + fiat_p256_uint1 x135; + fiat_p256_addcarryx_u32(&x134, &x135, x133, x104, x128); + uint32_t x136; + fiat_p256_uint1 x137; + fiat_p256_addcarryx_u32(&x136, &x137, x135, x106, x130); + uint32_t x138; + fiat_p256_uint1 x139; + fiat_p256_addcarryx_u32(&x138, &x139, x131, x123, 0x0); + uint32_t x140; + fiat_p256_uint1 x141; + fiat_p256_addcarryx_u32(&x140, &x141, x137, x108, x138); + uint32_t x142; + fiat_p256_uint1 x143; + fiat_p256_addcarryx_u32(&x142, &x143, x141, x110, 0x0); + uint32_t x144; + fiat_p256_uint1 x145; + fiat_p256_addcarryx_u32(&x144, &x145, x143, x112, 0x0); + uint32_t x146; + fiat_p256_uint1 x147; + fiat_p256_addcarryx_u32(&x146, &x147, x145, x114, x102); + uint32_t x148; + fiat_p256_uint1 x149; + fiat_p256_addcarryx_u32(&x148, &x149, x147, x118, x120); + uint32_t x150; + fiat_p256_uint1 x151; + fiat_p256_addcarryx_u32(&x150, &x151, x119, 0x0, 0x0); + uint32_t x152; + fiat_p256_uint1 x153; + fiat_p256_addcarryx_u32(&x152, &x153, x149, (fiat_p256_uint1)x150, x121); + uint32_t x154; + fiat_p256_uint1 x155; + fiat_p256_addcarryx_u32(&x154, &x155, 0x0, x134, (arg1[4])); + uint32_t x156; + fiat_p256_uint1 x157; + fiat_p256_addcarryx_u32(&x156, &x157, x155, x136, 0x0); + uint32_t x158; + fiat_p256_uint1 x159; + fiat_p256_addcarryx_u32(&x158, &x159, x157, x140, 0x0); + uint32_t x160; + fiat_p256_uint1 x161; + fiat_p256_addcarryx_u32(&x160, &x161, x159, x142, 0x0); + uint32_t x162; + fiat_p256_uint1 x163; + fiat_p256_addcarryx_u32(&x162, &x163, x161, x144, 0x0); + uint32_t x164; + fiat_p256_uint1 x165; + fiat_p256_addcarryx_u32(&x164, &x165, x163, x146, 0x0); + uint32_t x166; + fiat_p256_uint1 x167; + fiat_p256_addcarryx_u32(&x166, &x167, x165, x148, 0x0); + uint32_t x168; + fiat_p256_uint1 x169; + fiat_p256_addcarryx_u32(&x168, &x169, x167, x152, 0x0); + uint32_t x170; + uint32_t x171; + fiat_p256_mulx_u32(&x170, &x171, x154, UINT32_C(0xffffffff)); + uint32_t x172; + uint32_t x173; + fiat_p256_mulx_u32(&x172, &x173, x154, UINT32_C(0xffffffff)); + uint32_t x174; + uint32_t x175; + fiat_p256_mulx_u32(&x174, &x175, x154, UINT32_C(0xffffffff)); + uint32_t x176; + uint32_t x177; + fiat_p256_mulx_u32(&x176, &x177, x154, UINT32_C(0xffffffff)); + uint32_t x178; + fiat_p256_uint1 x179; + fiat_p256_addcarryx_u32(&x178, &x179, 0x0, x177, x174); + uint32_t x180; + fiat_p256_uint1 x181; + fiat_p256_addcarryx_u32(&x180, &x181, x179, x175, x172); + uint32_t x182; + fiat_p256_uint1 x183; + fiat_p256_addcarryx_u32(&x182, &x183, 0x0, x154, x176); + uint32_t x184; + fiat_p256_uint1 x185; + fiat_p256_addcarryx_u32(&x184, &x185, x183, x156, x178); + uint32_t x186; + fiat_p256_uint1 x187; + fiat_p256_addcarryx_u32(&x186, &x187, x185, x158, x180); + uint32_t x188; + fiat_p256_uint1 x189; + fiat_p256_addcarryx_u32(&x188, &x189, x181, x173, 0x0); + uint32_t x190; + fiat_p256_uint1 x191; + fiat_p256_addcarryx_u32(&x190, &x191, x187, x160, x188); + uint32_t x192; + fiat_p256_uint1 x193; + fiat_p256_addcarryx_u32(&x192, &x193, x191, x162, 0x0); + uint32_t x194; + fiat_p256_uint1 x195; + fiat_p256_addcarryx_u32(&x194, &x195, x193, x164, 0x0); + uint32_t x196; + fiat_p256_uint1 x197; + fiat_p256_addcarryx_u32(&x196, &x197, x195, x166, x154); + uint32_t x198; + fiat_p256_uint1 x199; + fiat_p256_addcarryx_u32(&x198, &x199, x197, x168, x170); + uint32_t x200; + fiat_p256_uint1 x201; + fiat_p256_addcarryx_u32(&x200, &x201, x153, 0x0, 0x0); + uint32_t x202; + fiat_p256_uint1 x203; + fiat_p256_addcarryx_u32(&x202, &x203, x169, (fiat_p256_uint1)x200, 0x0); + uint32_t x204; + fiat_p256_uint1 x205; + fiat_p256_addcarryx_u32(&x204, &x205, x199, x202, x171); + uint32_t x206; + fiat_p256_uint1 x207; + fiat_p256_addcarryx_u32(&x206, &x207, 0x0, x184, (arg1[5])); + uint32_t x208; + fiat_p256_uint1 x209; + fiat_p256_addcarryx_u32(&x208, &x209, x207, x186, 0x0); + uint32_t x210; + fiat_p256_uint1 x211; + fiat_p256_addcarryx_u32(&x210, &x211, x209, x190, 0x0); + uint32_t x212; + fiat_p256_uint1 x213; + fiat_p256_addcarryx_u32(&x212, &x213, x211, x192, 0x0); + uint32_t x214; + fiat_p256_uint1 x215; + fiat_p256_addcarryx_u32(&x214, &x215, x213, x194, 0x0); + uint32_t x216; + fiat_p256_uint1 x217; + fiat_p256_addcarryx_u32(&x216, &x217, x215, x196, 0x0); + uint32_t x218; + fiat_p256_uint1 x219; + fiat_p256_addcarryx_u32(&x218, &x219, x217, x198, 0x0); + uint32_t x220; + fiat_p256_uint1 x221; + fiat_p256_addcarryx_u32(&x220, &x221, x219, x204, 0x0); + uint32_t x222; + uint32_t x223; + fiat_p256_mulx_u32(&x222, &x223, x206, UINT32_C(0xffffffff)); + uint32_t x224; + uint32_t x225; + fiat_p256_mulx_u32(&x224, &x225, x206, UINT32_C(0xffffffff)); + uint32_t x226; + uint32_t x227; + fiat_p256_mulx_u32(&x226, &x227, x206, UINT32_C(0xffffffff)); + uint32_t x228; + uint32_t x229; + fiat_p256_mulx_u32(&x228, &x229, x206, UINT32_C(0xffffffff)); + uint32_t x230; + fiat_p256_uint1 x231; + fiat_p256_addcarryx_u32(&x230, &x231, 0x0, x229, x226); + uint32_t x232; + fiat_p256_uint1 x233; + fiat_p256_addcarryx_u32(&x232, &x233, x231, x227, x224); + uint32_t x234; + fiat_p256_uint1 x235; + fiat_p256_addcarryx_u32(&x234, &x235, 0x0, x206, x228); + uint32_t x236; + fiat_p256_uint1 x237; + fiat_p256_addcarryx_u32(&x236, &x237, x235, x208, x230); + uint32_t x238; + fiat_p256_uint1 x239; + fiat_p256_addcarryx_u32(&x238, &x239, x237, x210, x232); + uint32_t x240; + fiat_p256_uint1 x241; + fiat_p256_addcarryx_u32(&x240, &x241, x233, x225, 0x0); + uint32_t x242; + fiat_p256_uint1 x243; + fiat_p256_addcarryx_u32(&x242, &x243, x239, x212, x240); + uint32_t x244; + fiat_p256_uint1 x245; + fiat_p256_addcarryx_u32(&x244, &x245, x243, x214, 0x0); + uint32_t x246; + fiat_p256_uint1 x247; + fiat_p256_addcarryx_u32(&x246, &x247, x245, x216, 0x0); + uint32_t x248; + fiat_p256_uint1 x249; + fiat_p256_addcarryx_u32(&x248, &x249, x247, x218, x206); + uint32_t x250; + fiat_p256_uint1 x251; + fiat_p256_addcarryx_u32(&x250, &x251, x249, x220, x222); + uint32_t x252; + fiat_p256_uint1 x253; + fiat_p256_addcarryx_u32(&x252, &x253, x205, 0x0, 0x0); + uint32_t x254; + fiat_p256_uint1 x255; + fiat_p256_addcarryx_u32(&x254, &x255, x221, (fiat_p256_uint1)x252, 0x0); + uint32_t x256; + fiat_p256_uint1 x257; + fiat_p256_addcarryx_u32(&x256, &x257, x251, x254, x223); + uint32_t x258; + fiat_p256_uint1 x259; + fiat_p256_addcarryx_u32(&x258, &x259, 0x0, x236, (arg1[6])); + uint32_t x260; + fiat_p256_uint1 x261; + fiat_p256_addcarryx_u32(&x260, &x261, x259, x238, 0x0); + uint32_t x262; + fiat_p256_uint1 x263; + fiat_p256_addcarryx_u32(&x262, &x263, x261, x242, 0x0); + uint32_t x264; + fiat_p256_uint1 x265; + fiat_p256_addcarryx_u32(&x264, &x265, x263, x244, 0x0); + uint32_t x266; + fiat_p256_uint1 x267; + fiat_p256_addcarryx_u32(&x266, &x267, x265, x246, 0x0); + uint32_t x268; + fiat_p256_uint1 x269; + fiat_p256_addcarryx_u32(&x268, &x269, x267, x248, 0x0); + uint32_t x270; + fiat_p256_uint1 x271; + fiat_p256_addcarryx_u32(&x270, &x271, x269, x250, 0x0); + uint32_t x272; + fiat_p256_uint1 x273; + fiat_p256_addcarryx_u32(&x272, &x273, x271, x256, 0x0); + uint32_t x274; + uint32_t x275; + fiat_p256_mulx_u32(&x274, &x275, x258, UINT32_C(0xffffffff)); + uint32_t x276; + uint32_t x277; + fiat_p256_mulx_u32(&x276, &x277, x258, UINT32_C(0xffffffff)); + uint32_t x278; + uint32_t x279; + fiat_p256_mulx_u32(&x278, &x279, x258, UINT32_C(0xffffffff)); + uint32_t x280; + uint32_t x281; + fiat_p256_mulx_u32(&x280, &x281, x258, UINT32_C(0xffffffff)); + uint32_t x282; + fiat_p256_uint1 x283; + fiat_p256_addcarryx_u32(&x282, &x283, 0x0, x281, x278); + uint32_t x284; + fiat_p256_uint1 x285; + fiat_p256_addcarryx_u32(&x284, &x285, x283, x279, x276); + uint32_t x286; + fiat_p256_uint1 x287; + fiat_p256_addcarryx_u32(&x286, &x287, 0x0, x258, x280); + uint32_t x288; + fiat_p256_uint1 x289; + fiat_p256_addcarryx_u32(&x288, &x289, x287, x260, x282); + uint32_t x290; + fiat_p256_uint1 x291; + fiat_p256_addcarryx_u32(&x290, &x291, x289, x262, x284); + uint32_t x292; + fiat_p256_uint1 x293; + fiat_p256_addcarryx_u32(&x292, &x293, x285, x277, 0x0); + uint32_t x294; + fiat_p256_uint1 x295; + fiat_p256_addcarryx_u32(&x294, &x295, x291, x264, x292); + uint32_t x296; + fiat_p256_uint1 x297; + fiat_p256_addcarryx_u32(&x296, &x297, x295, x266, 0x0); + uint32_t x298; + fiat_p256_uint1 x299; + fiat_p256_addcarryx_u32(&x298, &x299, x297, x268, 0x0); + uint32_t x300; + fiat_p256_uint1 x301; + fiat_p256_addcarryx_u32(&x300, &x301, x299, x270, x258); + uint32_t x302; + fiat_p256_uint1 x303; + fiat_p256_addcarryx_u32(&x302, &x303, x301, x272, x274); + uint32_t x304; + fiat_p256_uint1 x305; + fiat_p256_addcarryx_u32(&x304, &x305, x257, 0x0, 0x0); + uint32_t x306; + fiat_p256_uint1 x307; + fiat_p256_addcarryx_u32(&x306, &x307, x273, (fiat_p256_uint1)x304, 0x0); + uint32_t x308; + fiat_p256_uint1 x309; + fiat_p256_addcarryx_u32(&x308, &x309, x303, x306, x275); + uint32_t x310; + fiat_p256_uint1 x311; + fiat_p256_addcarryx_u32(&x310, &x311, 0x0, x288, (arg1[7])); + uint32_t x312; + fiat_p256_uint1 x313; + fiat_p256_addcarryx_u32(&x312, &x313, x311, x290, 0x0); + uint32_t x314; + fiat_p256_uint1 x315; + fiat_p256_addcarryx_u32(&x314, &x315, x313, x294, 0x0); + uint32_t x316; + fiat_p256_uint1 x317; + fiat_p256_addcarryx_u32(&x316, &x317, x315, x296, 0x0); + uint32_t x318; + fiat_p256_uint1 x319; + fiat_p256_addcarryx_u32(&x318, &x319, x317, x298, 0x0); + uint32_t x320; + fiat_p256_uint1 x321; + fiat_p256_addcarryx_u32(&x320, &x321, x319, x300, 0x0); + uint32_t x322; + fiat_p256_uint1 x323; + fiat_p256_addcarryx_u32(&x322, &x323, x321, x302, 0x0); + uint32_t x324; + fiat_p256_uint1 x325; + fiat_p256_addcarryx_u32(&x324, &x325, x323, x308, 0x0); + uint32_t x326; + uint32_t x327; + fiat_p256_mulx_u32(&x326, &x327, x310, UINT32_C(0xffffffff)); + uint32_t x328; + uint32_t x329; + fiat_p256_mulx_u32(&x328, &x329, x310, UINT32_C(0xffffffff)); + uint32_t x330; + uint32_t x331; + fiat_p256_mulx_u32(&x330, &x331, x310, UINT32_C(0xffffffff)); + uint32_t x332; + uint32_t x333; + fiat_p256_mulx_u32(&x332, &x333, x310, UINT32_C(0xffffffff)); + uint32_t x334; + fiat_p256_uint1 x335; + fiat_p256_addcarryx_u32(&x334, &x335, 0x0, x333, x330); + uint32_t x336; + fiat_p256_uint1 x337; + fiat_p256_addcarryx_u32(&x336, &x337, x335, x331, x328); + uint32_t x338; + fiat_p256_uint1 x339; + fiat_p256_addcarryx_u32(&x338, &x339, 0x0, x310, x332); + uint32_t x340; + fiat_p256_uint1 x341; + fiat_p256_addcarryx_u32(&x340, &x341, x339, x312, x334); + uint32_t x342; + fiat_p256_uint1 x343; + fiat_p256_addcarryx_u32(&x342, &x343, x341, x314, x336); + uint32_t x344; + fiat_p256_uint1 x345; + fiat_p256_addcarryx_u32(&x344, &x345, x337, x329, 0x0); + uint32_t x346; + fiat_p256_uint1 x347; + fiat_p256_addcarryx_u32(&x346, &x347, x343, x316, x344); + uint32_t x348; + fiat_p256_uint1 x349; + fiat_p256_addcarryx_u32(&x348, &x349, x347, x318, 0x0); + uint32_t x350; + fiat_p256_uint1 x351; + fiat_p256_addcarryx_u32(&x350, &x351, x349, x320, 0x0); + uint32_t x352; + fiat_p256_uint1 x353; + fiat_p256_addcarryx_u32(&x352, &x353, x351, x322, x310); + uint32_t x354; + fiat_p256_uint1 x355; + fiat_p256_addcarryx_u32(&x354, &x355, x353, x324, x326); + uint32_t x356; + fiat_p256_uint1 x357; + fiat_p256_addcarryx_u32(&x356, &x357, x309, 0x0, 0x0); + uint32_t x358; + fiat_p256_uint1 x359; + fiat_p256_addcarryx_u32(&x358, &x359, x325, (fiat_p256_uint1)x356, 0x0); + uint32_t x360; + fiat_p256_uint1 x361; + fiat_p256_addcarryx_u32(&x360, &x361, x355, x358, x327); + uint32_t x362; + fiat_p256_uint1 x363; + fiat_p256_subborrowx_u32(&x362, &x363, 0x0, x340, UINT32_C(0xffffffff)); + uint32_t x364; + fiat_p256_uint1 x365; + fiat_p256_subborrowx_u32(&x364, &x365, x363, x342, UINT32_C(0xffffffff)); + uint32_t x366; + fiat_p256_uint1 x367; + fiat_p256_subborrowx_u32(&x366, &x367, x365, x346, UINT32_C(0xffffffff)); + uint32_t x368; + fiat_p256_uint1 x369; + fiat_p256_subborrowx_u32(&x368, &x369, x367, x348, 0x0); + uint32_t x370; + fiat_p256_uint1 x371; + fiat_p256_subborrowx_u32(&x370, &x371, x369, x350, 0x0); + uint32_t x372; + fiat_p256_uint1 x373; + fiat_p256_subborrowx_u32(&x372, &x373, x371, x352, 0x0); + uint32_t x374; + fiat_p256_uint1 x375; + fiat_p256_subborrowx_u32(&x374, &x375, x373, x354, 0x1); + uint32_t x376; + fiat_p256_uint1 x377; + fiat_p256_subborrowx_u32(&x376, &x377, x375, x360, UINT32_C(0xffffffff)); + uint32_t x378; + fiat_p256_uint1 x379; + fiat_p256_addcarryx_u32(&x378, &x379, x361, 0x0, 0x0); + uint32_t x380; + fiat_p256_uint1 x381; + fiat_p256_subborrowx_u32(&x380, &x381, x377, (fiat_p256_uint1)x378, 0x0); + uint32_t x382; + fiat_p256_cmovznz_u32(&x382, x381, x362, x340); + uint32_t x383; + fiat_p256_cmovznz_u32(&x383, x381, x364, x342); + uint32_t x384; + fiat_p256_cmovznz_u32(&x384, x381, x366, x346); + uint32_t x385; + fiat_p256_cmovznz_u32(&x385, x381, x368, x348); + uint32_t x386; + fiat_p256_cmovznz_u32(&x386, x381, x370, x350); + uint32_t x387; + fiat_p256_cmovznz_u32(&x387, x381, x372, x352); + uint32_t x388; + fiat_p256_cmovznz_u32(&x388, x381, x374, x354); + uint32_t x389; + fiat_p256_cmovznz_u32(&x389, x381, x376, x360); + out1[0] = x382; + out1[1] = x383; + out1[2] = x384; + out1[3] = x385; + out1[4] = x386; + out1[5] = x387; + out1[6] = x388; + out1[7] = x389; +} + +/* + * The function fiat_p256_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static void fiat_p256_nonzero(uint32_t* out1, const uint32_t arg1[8]) { + uint32_t x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | ((arg1[4]) | ((arg1[5]) | ((arg1[6]) | ((arg1[7]) | (uint32_t)0x0)))))))); + *out1 = x1; +} + +/* + * The function fiat_p256_selectznz is a multi-limb conditional select. + * Postconditions: + * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_selectznz(uint32_t out1[8], fiat_p256_uint1 arg1, const uint32_t arg2[8], const uint32_t arg3[8]) { + uint32_t x1; + fiat_p256_cmovznz_u32(&x1, arg1, (arg2[0]), (arg3[0])); + uint32_t x2; + fiat_p256_cmovznz_u32(&x2, arg1, (arg2[1]), (arg3[1])); + uint32_t x3; + fiat_p256_cmovznz_u32(&x3, arg1, (arg2[2]), (arg3[2])); + uint32_t x4; + fiat_p256_cmovznz_u32(&x4, arg1, (arg2[3]), (arg3[3])); + uint32_t x5; + fiat_p256_cmovznz_u32(&x5, arg1, (arg2[4]), (arg3[4])); + uint32_t x6; + fiat_p256_cmovznz_u32(&x6, arg1, (arg2[5]), (arg3[5])); + uint32_t x7; + fiat_p256_cmovznz_u32(&x7, arg1, (arg2[6]), (arg3[6])); + uint32_t x8; + fiat_p256_cmovznz_u32(&x8, arg1, (arg2[7]), (arg3[7])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; + out1[6] = x7; + out1[7] = x8; +} + +/* + * The function fiat_p256_to_bytes serializes a field element in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + */ +static void fiat_p256_to_bytes(uint8_t out1[32], const uint32_t arg1[8]) { + uint32_t x1 = (arg1[7]); + uint32_t x2 = (arg1[6]); + uint32_t x3 = (arg1[5]); + uint32_t x4 = (arg1[4]); + uint32_t x5 = (arg1[3]); + uint32_t x6 = (arg1[2]); + uint32_t x7 = (arg1[1]); + uint32_t x8 = (arg1[0]); + uint32_t x9 = (x8 >> 8); + uint8_t x10 = (uint8_t)(x8 & UINT8_C(0xff)); + uint32_t x11 = (x9 >> 8); + uint8_t x12 = (uint8_t)(x9 & UINT8_C(0xff)); + uint8_t x13 = (uint8_t)(x11 >> 8); + uint8_t x14 = (uint8_t)(x11 & UINT8_C(0xff)); + uint8_t x15 = (uint8_t)(x13 & UINT8_C(0xff)); + uint32_t x16 = (x7 >> 8); + uint8_t x17 = (uint8_t)(x7 & UINT8_C(0xff)); + uint32_t x18 = (x16 >> 8); + uint8_t x19 = (uint8_t)(x16 & UINT8_C(0xff)); + uint8_t x20 = (uint8_t)(x18 >> 8); + uint8_t x21 = (uint8_t)(x18 & UINT8_C(0xff)); + uint8_t x22 = (uint8_t)(x20 & UINT8_C(0xff)); + uint32_t x23 = (x6 >> 8); + uint8_t x24 = (uint8_t)(x6 & UINT8_C(0xff)); + uint32_t x25 = (x23 >> 8); + uint8_t x26 = (uint8_t)(x23 & UINT8_C(0xff)); + uint8_t x27 = (uint8_t)(x25 >> 8); + uint8_t x28 = (uint8_t)(x25 & UINT8_C(0xff)); + uint8_t x29 = (uint8_t)(x27 & UINT8_C(0xff)); + uint32_t x30 = (x5 >> 8); + uint8_t x31 = (uint8_t)(x5 & UINT8_C(0xff)); + uint32_t x32 = (x30 >> 8); + uint8_t x33 = (uint8_t)(x30 & UINT8_C(0xff)); + uint8_t x34 = (uint8_t)(x32 >> 8); + uint8_t x35 = (uint8_t)(x32 & UINT8_C(0xff)); + uint8_t x36 = (uint8_t)(x34 & UINT8_C(0xff)); + uint32_t x37 = (x4 >> 8); + uint8_t x38 = (uint8_t)(x4 & UINT8_C(0xff)); + uint32_t x39 = (x37 >> 8); + uint8_t x40 = (uint8_t)(x37 & UINT8_C(0xff)); + uint8_t x41 = (uint8_t)(x39 >> 8); + uint8_t x42 = (uint8_t)(x39 & UINT8_C(0xff)); + uint8_t x43 = (uint8_t)(x41 & UINT8_C(0xff)); + uint32_t x44 = (x3 >> 8); + uint8_t x45 = (uint8_t)(x3 & UINT8_C(0xff)); + uint32_t x46 = (x44 >> 8); + uint8_t x47 = (uint8_t)(x44 & UINT8_C(0xff)); + uint8_t x48 = (uint8_t)(x46 >> 8); + uint8_t x49 = (uint8_t)(x46 & UINT8_C(0xff)); + uint8_t x50 = (uint8_t)(x48 & UINT8_C(0xff)); + uint32_t x51 = (x2 >> 8); + uint8_t x52 = (uint8_t)(x2 & UINT8_C(0xff)); + uint32_t x53 = (x51 >> 8); + uint8_t x54 = (uint8_t)(x51 & UINT8_C(0xff)); + uint8_t x55 = (uint8_t)(x53 >> 8); + uint8_t x56 = (uint8_t)(x53 & UINT8_C(0xff)); + uint8_t x57 = (uint8_t)(x55 & UINT8_C(0xff)); + uint32_t x58 = (x1 >> 8); + uint8_t x59 = (uint8_t)(x1 & UINT8_C(0xff)); + uint32_t x60 = (x58 >> 8); + uint8_t x61 = (uint8_t)(x58 & UINT8_C(0xff)); + uint8_t x62 = (uint8_t)(x60 >> 8); + uint8_t x63 = (uint8_t)(x60 & UINT8_C(0xff)); + out1[0] = x10; + out1[1] = x12; + out1[2] = x14; + out1[3] = x15; + out1[4] = x17; + out1[5] = x19; + out1[6] = x21; + out1[7] = x22; + out1[8] = x24; + out1[9] = x26; + out1[10] = x28; + out1[11] = x29; + out1[12] = x31; + out1[13] = x33; + out1[14] = x35; + out1[15] = x36; + out1[16] = x38; + out1[17] = x40; + out1[18] = x42; + out1[19] = x43; + out1[20] = x45; + out1[21] = x47; + out1[22] = x49; + out1[23] = x50; + out1[24] = x52; + out1[25] = x54; + out1[26] = x56; + out1[27] = x57; + out1[28] = x59; + out1[29] = x61; + out1[30] = x63; + out1[31] = x62; +} + +/* + * The function fiat_p256_from_bytes deserializes a field element in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_from_bytes(uint32_t out1[8], const uint8_t arg1[32]) { + uint32_t x1 = ((uint32_t)(arg1[31]) << 24); + uint32_t x2 = ((uint32_t)(arg1[30]) << 16); + uint32_t x3 = ((uint32_t)(arg1[29]) << 8); + uint8_t x4 = (arg1[28]); + uint32_t x5 = ((uint32_t)(arg1[27]) << 24); + uint32_t x6 = ((uint32_t)(arg1[26]) << 16); + uint32_t x7 = ((uint32_t)(arg1[25]) << 8); + uint8_t x8 = (arg1[24]); + uint32_t x9 = ((uint32_t)(arg1[23]) << 24); + uint32_t x10 = ((uint32_t)(arg1[22]) << 16); + uint32_t x11 = ((uint32_t)(arg1[21]) << 8); + uint8_t x12 = (arg1[20]); + uint32_t x13 = ((uint32_t)(arg1[19]) << 24); + uint32_t x14 = ((uint32_t)(arg1[18]) << 16); + uint32_t x15 = ((uint32_t)(arg1[17]) << 8); + uint8_t x16 = (arg1[16]); + uint32_t x17 = ((uint32_t)(arg1[15]) << 24); + uint32_t x18 = ((uint32_t)(arg1[14]) << 16); + uint32_t x19 = ((uint32_t)(arg1[13]) << 8); + uint8_t x20 = (arg1[12]); + uint32_t x21 = ((uint32_t)(arg1[11]) << 24); + uint32_t x22 = ((uint32_t)(arg1[10]) << 16); + uint32_t x23 = ((uint32_t)(arg1[9]) << 8); + uint8_t x24 = (arg1[8]); + uint32_t x25 = ((uint32_t)(arg1[7]) << 24); + uint32_t x26 = ((uint32_t)(arg1[6]) << 16); + uint32_t x27 = ((uint32_t)(arg1[5]) << 8); + uint8_t x28 = (arg1[4]); + uint32_t x29 = ((uint32_t)(arg1[3]) << 24); + uint32_t x30 = ((uint32_t)(arg1[2]) << 16); + uint32_t x31 = ((uint32_t)(arg1[1]) << 8); + uint8_t x32 = (arg1[0]); + uint32_t x33 = (x32 + (x31 + (x30 + x29))); + uint32_t x34 = (x33 & UINT32_C(0xffffffff)); + uint32_t x35 = (x4 + (x3 + (x2 + x1))); + uint32_t x36 = (x8 + (x7 + (x6 + x5))); + uint32_t x37 = (x12 + (x11 + (x10 + x9))); + uint32_t x38 = (x16 + (x15 + (x14 + x13))); + uint32_t x39 = (x20 + (x19 + (x18 + x17))); + uint32_t x40 = (x24 + (x23 + (x22 + x21))); + uint32_t x41 = (x28 + (x27 + (x26 + x25))); + uint32_t x42 = (x41 & UINT32_C(0xffffffff)); + uint32_t x43 = (x40 & UINT32_C(0xffffffff)); + uint32_t x44 = (x39 & UINT32_C(0xffffffff)); + uint32_t x45 = (x38 & UINT32_C(0xffffffff)); + uint32_t x46 = (x37 & UINT32_C(0xffffffff)); + uint32_t x47 = (x36 & UINT32_C(0xffffffff)); + out1[0] = x34; + out1[1] = x42; + out1[2] = x43; + out1[3] = x44; + out1[4] = x45; + out1[5] = x46; + out1[6] = x47; + out1[7] = x35; +} + diff --git a/ec/native/p256_64.h b/ec/native/p256_64.h new file mode 100644 index 00000000..3279a82d --- /dev/null +++ b/ec/native/p256_64.h @@ -0,0 +1,1298 @@ +/* Autogenerated */ +/* curve description: p256 */ +/* requested operations: (all) */ +/* m = 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff (from "2^256 - 2^224 + 2^192 + 2^96 - 1") */ +/* machine_wordsize = 64 (from "64") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ + +#include +typedef unsigned char fiat_p256_uint1; +typedef signed char fiat_p256_int1; +typedef signed __int128 fiat_p256_int128; +typedef unsigned __int128 fiat_p256_uint128; + + +/* + * The function fiat_p256_addcarryx_u64 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^64 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p256_addcarryx_u64(uint64_t* out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_p256_uint128 x1 = ((arg1 + (fiat_p256_uint128)arg2) + arg3); + uint64_t x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + fiat_p256_uint1 x3 = (fiat_p256_uint1)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p256_subborrowx_u64 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^64 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p256_subborrowx_u64(uint64_t* out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_p256_int128 x1 = ((arg2 - (fiat_p256_int128)arg1) - arg3); + fiat_p256_int1 x2 = (fiat_p256_int1)(x1 >> 64); + uint64_t x3 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + *out1 = x3; + *out2 = (fiat_p256_uint1)(0x0 - x2); +} + +/* + * The function fiat_p256_mulx_u64 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^64 + * out2 = ⌊arg1 * arg2 / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_p256_mulx_u64(uint64_t* out1, uint64_t* out2, uint64_t arg1, uint64_t arg2) { + fiat_p256_uint128 x1 = ((fiat_p256_uint128)arg1 * arg2); + uint64_t x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + uint64_t x3 = (uint64_t)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p256_cmovznz_u64 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_p256_cmovznz_u64(uint64_t* out1, fiat_p256_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_p256_uint1 x1 = (!(!arg1)); + uint64_t x2 = ((fiat_p256_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); + uint64_t x3 = ((x2 & arg3) | ((~x2) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_p256_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_mul(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { + uint64_t x1 = (arg1[1]); + uint64_t x2 = (arg1[2]); + uint64_t x3 = (arg1[3]); + uint64_t x4 = (arg1[0]); + uint64_t x5; + uint64_t x6; + fiat_p256_mulx_u64(&x5, &x6, x4, (arg2[3])); + uint64_t x7; + uint64_t x8; + fiat_p256_mulx_u64(&x7, &x8, x4, (arg2[2])); + uint64_t x9; + uint64_t x10; + fiat_p256_mulx_u64(&x9, &x10, x4, (arg2[1])); + uint64_t x11; + uint64_t x12; + fiat_p256_mulx_u64(&x11, &x12, x4, (arg2[0])); + uint64_t x13; + fiat_p256_uint1 x14; + fiat_p256_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + uint64_t x15; + fiat_p256_uint1 x16; + fiat_p256_addcarryx_u64(&x15, &x16, x14, x10, x7); + uint64_t x17; + fiat_p256_uint1 x18; + fiat_p256_addcarryx_u64(&x17, &x18, x16, x8, x5); + uint64_t x19; + fiat_p256_uint1 x20; + fiat_p256_addcarryx_u64(&x19, &x20, x18, x6, 0x0); + uint64_t x21; + uint64_t x22; + fiat_p256_mulx_u64(&x21, &x22, x11, UINT64_C(0xffffffff00000001)); + uint64_t x23; + uint64_t x24; + fiat_p256_mulx_u64(&x23, &x24, x11, UINT32_C(0xffffffff)); + uint64_t x25; + uint64_t x26; + fiat_p256_mulx_u64(&x25, &x26, x11, UINT64_C(0xffffffffffffffff)); + uint64_t x27; + fiat_p256_uint1 x28; + fiat_p256_addcarryx_u64(&x27, &x28, 0x0, x26, x23); + uint64_t x29; + fiat_p256_uint1 x30; + fiat_p256_addcarryx_u64(&x29, &x30, x28, x24, 0x0); + uint64_t x31; + fiat_p256_uint1 x32; + fiat_p256_addcarryx_u64(&x31, &x32, 0x0, x11, x25); + uint64_t x33; + fiat_p256_uint1 x34; + fiat_p256_addcarryx_u64(&x33, &x34, x32, x13, x27); + uint64_t x35; + fiat_p256_uint1 x36; + fiat_p256_addcarryx_u64(&x35, &x36, x34, x15, x29); + uint64_t x37; + fiat_p256_uint1 x38; + fiat_p256_addcarryx_u64(&x37, &x38, x36, x17, x21); + uint64_t x39; + fiat_p256_uint1 x40; + fiat_p256_addcarryx_u64(&x39, &x40, x38, x19, x22); + uint64_t x41; + fiat_p256_uint1 x42; + fiat_p256_addcarryx_u64(&x41, &x42, x40, 0x0, 0x0); + uint64_t x43; + uint64_t x44; + fiat_p256_mulx_u64(&x43, &x44, x1, (arg2[3])); + uint64_t x45; + uint64_t x46; + fiat_p256_mulx_u64(&x45, &x46, x1, (arg2[2])); + uint64_t x47; + uint64_t x48; + fiat_p256_mulx_u64(&x47, &x48, x1, (arg2[1])); + uint64_t x49; + uint64_t x50; + fiat_p256_mulx_u64(&x49, &x50, x1, (arg2[0])); + uint64_t x51; + fiat_p256_uint1 x52; + fiat_p256_addcarryx_u64(&x51, &x52, 0x0, x50, x47); + uint64_t x53; + fiat_p256_uint1 x54; + fiat_p256_addcarryx_u64(&x53, &x54, x52, x48, x45); + uint64_t x55; + fiat_p256_uint1 x56; + fiat_p256_addcarryx_u64(&x55, &x56, x54, x46, x43); + uint64_t x57; + fiat_p256_uint1 x58; + fiat_p256_addcarryx_u64(&x57, &x58, x56, x44, 0x0); + uint64_t x59; + fiat_p256_uint1 x60; + fiat_p256_addcarryx_u64(&x59, &x60, 0x0, x33, x49); + uint64_t x61; + fiat_p256_uint1 x62; + fiat_p256_addcarryx_u64(&x61, &x62, x60, x35, x51); + uint64_t x63; + fiat_p256_uint1 x64; + fiat_p256_addcarryx_u64(&x63, &x64, x62, x37, x53); + uint64_t x65; + fiat_p256_uint1 x66; + fiat_p256_addcarryx_u64(&x65, &x66, x64, x39, x55); + uint64_t x67; + fiat_p256_uint1 x68; + fiat_p256_addcarryx_u64(&x67, &x68, x66, (fiat_p256_uint1)x41, x57); + uint64_t x69; + uint64_t x70; + fiat_p256_mulx_u64(&x69, &x70, x59, UINT64_C(0xffffffff00000001)); + uint64_t x71; + uint64_t x72; + fiat_p256_mulx_u64(&x71, &x72, x59, UINT32_C(0xffffffff)); + uint64_t x73; + uint64_t x74; + fiat_p256_mulx_u64(&x73, &x74, x59, UINT64_C(0xffffffffffffffff)); + uint64_t x75; + fiat_p256_uint1 x76; + fiat_p256_addcarryx_u64(&x75, &x76, 0x0, x74, x71); + uint64_t x77; + fiat_p256_uint1 x78; + fiat_p256_addcarryx_u64(&x77, &x78, x76, x72, 0x0); + uint64_t x79; + fiat_p256_uint1 x80; + fiat_p256_addcarryx_u64(&x79, &x80, 0x0, x59, x73); + uint64_t x81; + fiat_p256_uint1 x82; + fiat_p256_addcarryx_u64(&x81, &x82, x80, x61, x75); + uint64_t x83; + fiat_p256_uint1 x84; + fiat_p256_addcarryx_u64(&x83, &x84, x82, x63, x77); + uint64_t x85; + fiat_p256_uint1 x86; + fiat_p256_addcarryx_u64(&x85, &x86, x84, x65, x69); + uint64_t x87; + fiat_p256_uint1 x88; + fiat_p256_addcarryx_u64(&x87, &x88, x86, x67, x70); + uint64_t x89; + fiat_p256_uint1 x90; + fiat_p256_addcarryx_u64(&x89, &x90, x88, x68, 0x0); + uint64_t x91; + uint64_t x92; + fiat_p256_mulx_u64(&x91, &x92, x2, (arg2[3])); + uint64_t x93; + uint64_t x94; + fiat_p256_mulx_u64(&x93, &x94, x2, (arg2[2])); + uint64_t x95; + uint64_t x96; + fiat_p256_mulx_u64(&x95, &x96, x2, (arg2[1])); + uint64_t x97; + uint64_t x98; + fiat_p256_mulx_u64(&x97, &x98, x2, (arg2[0])); + uint64_t x99; + fiat_p256_uint1 x100; + fiat_p256_addcarryx_u64(&x99, &x100, 0x0, x98, x95); + uint64_t x101; + fiat_p256_uint1 x102; + fiat_p256_addcarryx_u64(&x101, &x102, x100, x96, x93); + uint64_t x103; + fiat_p256_uint1 x104; + fiat_p256_addcarryx_u64(&x103, &x104, x102, x94, x91); + uint64_t x105; + fiat_p256_uint1 x106; + fiat_p256_addcarryx_u64(&x105, &x106, x104, x92, 0x0); + uint64_t x107; + fiat_p256_uint1 x108; + fiat_p256_addcarryx_u64(&x107, &x108, 0x0, x81, x97); + uint64_t x109; + fiat_p256_uint1 x110; + fiat_p256_addcarryx_u64(&x109, &x110, x108, x83, x99); + uint64_t x111; + fiat_p256_uint1 x112; + fiat_p256_addcarryx_u64(&x111, &x112, x110, x85, x101); + uint64_t x113; + fiat_p256_uint1 x114; + fiat_p256_addcarryx_u64(&x113, &x114, x112, x87, x103); + uint64_t x115; + fiat_p256_uint1 x116; + fiat_p256_addcarryx_u64(&x115, &x116, x114, x89, x105); + uint64_t x117; + uint64_t x118; + fiat_p256_mulx_u64(&x117, &x118, x107, UINT64_C(0xffffffff00000001)); + uint64_t x119; + uint64_t x120; + fiat_p256_mulx_u64(&x119, &x120, x107, UINT32_C(0xffffffff)); + uint64_t x121; + uint64_t x122; + fiat_p256_mulx_u64(&x121, &x122, x107, UINT64_C(0xffffffffffffffff)); + uint64_t x123; + fiat_p256_uint1 x124; + fiat_p256_addcarryx_u64(&x123, &x124, 0x0, x122, x119); + uint64_t x125; + fiat_p256_uint1 x126; + fiat_p256_addcarryx_u64(&x125, &x126, x124, x120, 0x0); + uint64_t x127; + fiat_p256_uint1 x128; + fiat_p256_addcarryx_u64(&x127, &x128, 0x0, x107, x121); + uint64_t x129; + fiat_p256_uint1 x130; + fiat_p256_addcarryx_u64(&x129, &x130, x128, x109, x123); + uint64_t x131; + fiat_p256_uint1 x132; + fiat_p256_addcarryx_u64(&x131, &x132, x130, x111, x125); + uint64_t x133; + fiat_p256_uint1 x134; + fiat_p256_addcarryx_u64(&x133, &x134, x132, x113, x117); + uint64_t x135; + fiat_p256_uint1 x136; + fiat_p256_addcarryx_u64(&x135, &x136, x134, x115, x118); + uint64_t x137; + fiat_p256_uint1 x138; + fiat_p256_addcarryx_u64(&x137, &x138, x136, x116, 0x0); + uint64_t x139; + uint64_t x140; + fiat_p256_mulx_u64(&x139, &x140, x3, (arg2[3])); + uint64_t x141; + uint64_t x142; + fiat_p256_mulx_u64(&x141, &x142, x3, (arg2[2])); + uint64_t x143; + uint64_t x144; + fiat_p256_mulx_u64(&x143, &x144, x3, (arg2[1])); + uint64_t x145; + uint64_t x146; + fiat_p256_mulx_u64(&x145, &x146, x3, (arg2[0])); + uint64_t x147; + fiat_p256_uint1 x148; + fiat_p256_addcarryx_u64(&x147, &x148, 0x0, x146, x143); + uint64_t x149; + fiat_p256_uint1 x150; + fiat_p256_addcarryx_u64(&x149, &x150, x148, x144, x141); + uint64_t x151; + fiat_p256_uint1 x152; + fiat_p256_addcarryx_u64(&x151, &x152, x150, x142, x139); + uint64_t x153; + fiat_p256_uint1 x154; + fiat_p256_addcarryx_u64(&x153, &x154, x152, x140, 0x0); + uint64_t x155; + fiat_p256_uint1 x156; + fiat_p256_addcarryx_u64(&x155, &x156, 0x0, x129, x145); + uint64_t x157; + fiat_p256_uint1 x158; + fiat_p256_addcarryx_u64(&x157, &x158, x156, x131, x147); + uint64_t x159; + fiat_p256_uint1 x160; + fiat_p256_addcarryx_u64(&x159, &x160, x158, x133, x149); + uint64_t x161; + fiat_p256_uint1 x162; + fiat_p256_addcarryx_u64(&x161, &x162, x160, x135, x151); + uint64_t x163; + fiat_p256_uint1 x164; + fiat_p256_addcarryx_u64(&x163, &x164, x162, x137, x153); + uint64_t x165; + uint64_t x166; + fiat_p256_mulx_u64(&x165, &x166, x155, UINT64_C(0xffffffff00000001)); + uint64_t x167; + uint64_t x168; + fiat_p256_mulx_u64(&x167, &x168, x155, UINT32_C(0xffffffff)); + uint64_t x169; + uint64_t x170; + fiat_p256_mulx_u64(&x169, &x170, x155, UINT64_C(0xffffffffffffffff)); + uint64_t x171; + fiat_p256_uint1 x172; + fiat_p256_addcarryx_u64(&x171, &x172, 0x0, x170, x167); + uint64_t x173; + fiat_p256_uint1 x174; + fiat_p256_addcarryx_u64(&x173, &x174, x172, x168, 0x0); + uint64_t x175; + fiat_p256_uint1 x176; + fiat_p256_addcarryx_u64(&x175, &x176, 0x0, x155, x169); + uint64_t x177; + fiat_p256_uint1 x178; + fiat_p256_addcarryx_u64(&x177, &x178, x176, x157, x171); + uint64_t x179; + fiat_p256_uint1 x180; + fiat_p256_addcarryx_u64(&x179, &x180, x178, x159, x173); + uint64_t x181; + fiat_p256_uint1 x182; + fiat_p256_addcarryx_u64(&x181, &x182, x180, x161, x165); + uint64_t x183; + fiat_p256_uint1 x184; + fiat_p256_addcarryx_u64(&x183, &x184, x182, x163, x166); + uint64_t x185; + fiat_p256_uint1 x186; + fiat_p256_addcarryx_u64(&x185, &x186, x184, x164, 0x0); + uint64_t x187; + fiat_p256_uint1 x188; + fiat_p256_subborrowx_u64(&x187, &x188, 0x0, x177, UINT64_C(0xffffffffffffffff)); + uint64_t x189; + fiat_p256_uint1 x190; + fiat_p256_subborrowx_u64(&x189, &x190, x188, x179, UINT32_C(0xffffffff)); + uint64_t x191; + fiat_p256_uint1 x192; + fiat_p256_subborrowx_u64(&x191, &x192, x190, x181, 0x0); + uint64_t x193; + fiat_p256_uint1 x194; + fiat_p256_subborrowx_u64(&x193, &x194, x192, x183, UINT64_C(0xffffffff00000001)); + uint64_t x195; + fiat_p256_uint1 x196; + fiat_p256_subborrowx_u64(&x195, &x196, x194, x185, 0x0); + uint64_t x197; + fiat_p256_cmovznz_u64(&x197, x196, x187, x177); + uint64_t x198; + fiat_p256_cmovznz_u64(&x198, x196, x189, x179); + uint64_t x199; + fiat_p256_cmovznz_u64(&x199, x196, x191, x181); + uint64_t x200; + fiat_p256_cmovznz_u64(&x200, x196, x193, x183); + out1[0] = x197; + out1[1] = x198; + out1[2] = x199; + out1[3] = x200; +} + +/* + * The function fiat_p256_square squares a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_square(uint64_t out1[4], const uint64_t arg1[4]) { + uint64_t x1 = (arg1[1]); + uint64_t x2 = (arg1[2]); + uint64_t x3 = (arg1[3]); + uint64_t x4 = (arg1[0]); + uint64_t x5; + uint64_t x6; + fiat_p256_mulx_u64(&x5, &x6, x4, (arg1[3])); + uint64_t x7; + uint64_t x8; + fiat_p256_mulx_u64(&x7, &x8, x4, (arg1[2])); + uint64_t x9; + uint64_t x10; + fiat_p256_mulx_u64(&x9, &x10, x4, (arg1[1])); + uint64_t x11; + uint64_t x12; + fiat_p256_mulx_u64(&x11, &x12, x4, (arg1[0])); + uint64_t x13; + fiat_p256_uint1 x14; + fiat_p256_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + uint64_t x15; + fiat_p256_uint1 x16; + fiat_p256_addcarryx_u64(&x15, &x16, x14, x10, x7); + uint64_t x17; + fiat_p256_uint1 x18; + fiat_p256_addcarryx_u64(&x17, &x18, x16, x8, x5); + uint64_t x19; + fiat_p256_uint1 x20; + fiat_p256_addcarryx_u64(&x19, &x20, x18, x6, 0x0); + uint64_t x21; + uint64_t x22; + fiat_p256_mulx_u64(&x21, &x22, x11, UINT64_C(0xffffffff00000001)); + uint64_t x23; + uint64_t x24; + fiat_p256_mulx_u64(&x23, &x24, x11, UINT32_C(0xffffffff)); + uint64_t x25; + uint64_t x26; + fiat_p256_mulx_u64(&x25, &x26, x11, UINT64_C(0xffffffffffffffff)); + uint64_t x27; + fiat_p256_uint1 x28; + fiat_p256_addcarryx_u64(&x27, &x28, 0x0, x26, x23); + uint64_t x29; + fiat_p256_uint1 x30; + fiat_p256_addcarryx_u64(&x29, &x30, x28, x24, 0x0); + uint64_t x31; + fiat_p256_uint1 x32; + fiat_p256_addcarryx_u64(&x31, &x32, 0x0, x11, x25); + uint64_t x33; + fiat_p256_uint1 x34; + fiat_p256_addcarryx_u64(&x33, &x34, x32, x13, x27); + uint64_t x35; + fiat_p256_uint1 x36; + fiat_p256_addcarryx_u64(&x35, &x36, x34, x15, x29); + uint64_t x37; + fiat_p256_uint1 x38; + fiat_p256_addcarryx_u64(&x37, &x38, x36, x17, x21); + uint64_t x39; + fiat_p256_uint1 x40; + fiat_p256_addcarryx_u64(&x39, &x40, x38, x19, x22); + uint64_t x41; + fiat_p256_uint1 x42; + fiat_p256_addcarryx_u64(&x41, &x42, x40, 0x0, 0x0); + uint64_t x43; + uint64_t x44; + fiat_p256_mulx_u64(&x43, &x44, x1, (arg1[3])); + uint64_t x45; + uint64_t x46; + fiat_p256_mulx_u64(&x45, &x46, x1, (arg1[2])); + uint64_t x47; + uint64_t x48; + fiat_p256_mulx_u64(&x47, &x48, x1, (arg1[1])); + uint64_t x49; + uint64_t x50; + fiat_p256_mulx_u64(&x49, &x50, x1, (arg1[0])); + uint64_t x51; + fiat_p256_uint1 x52; + fiat_p256_addcarryx_u64(&x51, &x52, 0x0, x50, x47); + uint64_t x53; + fiat_p256_uint1 x54; + fiat_p256_addcarryx_u64(&x53, &x54, x52, x48, x45); + uint64_t x55; + fiat_p256_uint1 x56; + fiat_p256_addcarryx_u64(&x55, &x56, x54, x46, x43); + uint64_t x57; + fiat_p256_uint1 x58; + fiat_p256_addcarryx_u64(&x57, &x58, x56, x44, 0x0); + uint64_t x59; + fiat_p256_uint1 x60; + fiat_p256_addcarryx_u64(&x59, &x60, 0x0, x33, x49); + uint64_t x61; + fiat_p256_uint1 x62; + fiat_p256_addcarryx_u64(&x61, &x62, x60, x35, x51); + uint64_t x63; + fiat_p256_uint1 x64; + fiat_p256_addcarryx_u64(&x63, &x64, x62, x37, x53); + uint64_t x65; + fiat_p256_uint1 x66; + fiat_p256_addcarryx_u64(&x65, &x66, x64, x39, x55); + uint64_t x67; + fiat_p256_uint1 x68; + fiat_p256_addcarryx_u64(&x67, &x68, x66, (fiat_p256_uint1)x41, x57); + uint64_t x69; + uint64_t x70; + fiat_p256_mulx_u64(&x69, &x70, x59, UINT64_C(0xffffffff00000001)); + uint64_t x71; + uint64_t x72; + fiat_p256_mulx_u64(&x71, &x72, x59, UINT32_C(0xffffffff)); + uint64_t x73; + uint64_t x74; + fiat_p256_mulx_u64(&x73, &x74, x59, UINT64_C(0xffffffffffffffff)); + uint64_t x75; + fiat_p256_uint1 x76; + fiat_p256_addcarryx_u64(&x75, &x76, 0x0, x74, x71); + uint64_t x77; + fiat_p256_uint1 x78; + fiat_p256_addcarryx_u64(&x77, &x78, x76, x72, 0x0); + uint64_t x79; + fiat_p256_uint1 x80; + fiat_p256_addcarryx_u64(&x79, &x80, 0x0, x59, x73); + uint64_t x81; + fiat_p256_uint1 x82; + fiat_p256_addcarryx_u64(&x81, &x82, x80, x61, x75); + uint64_t x83; + fiat_p256_uint1 x84; + fiat_p256_addcarryx_u64(&x83, &x84, x82, x63, x77); + uint64_t x85; + fiat_p256_uint1 x86; + fiat_p256_addcarryx_u64(&x85, &x86, x84, x65, x69); + uint64_t x87; + fiat_p256_uint1 x88; + fiat_p256_addcarryx_u64(&x87, &x88, x86, x67, x70); + uint64_t x89; + fiat_p256_uint1 x90; + fiat_p256_addcarryx_u64(&x89, &x90, x88, x68, 0x0); + uint64_t x91; + uint64_t x92; + fiat_p256_mulx_u64(&x91, &x92, x2, (arg1[3])); + uint64_t x93; + uint64_t x94; + fiat_p256_mulx_u64(&x93, &x94, x2, (arg1[2])); + uint64_t x95; + uint64_t x96; + fiat_p256_mulx_u64(&x95, &x96, x2, (arg1[1])); + uint64_t x97; + uint64_t x98; + fiat_p256_mulx_u64(&x97, &x98, x2, (arg1[0])); + uint64_t x99; + fiat_p256_uint1 x100; + fiat_p256_addcarryx_u64(&x99, &x100, 0x0, x98, x95); + uint64_t x101; + fiat_p256_uint1 x102; + fiat_p256_addcarryx_u64(&x101, &x102, x100, x96, x93); + uint64_t x103; + fiat_p256_uint1 x104; + fiat_p256_addcarryx_u64(&x103, &x104, x102, x94, x91); + uint64_t x105; + fiat_p256_uint1 x106; + fiat_p256_addcarryx_u64(&x105, &x106, x104, x92, 0x0); + uint64_t x107; + fiat_p256_uint1 x108; + fiat_p256_addcarryx_u64(&x107, &x108, 0x0, x81, x97); + uint64_t x109; + fiat_p256_uint1 x110; + fiat_p256_addcarryx_u64(&x109, &x110, x108, x83, x99); + uint64_t x111; + fiat_p256_uint1 x112; + fiat_p256_addcarryx_u64(&x111, &x112, x110, x85, x101); + uint64_t x113; + fiat_p256_uint1 x114; + fiat_p256_addcarryx_u64(&x113, &x114, x112, x87, x103); + uint64_t x115; + fiat_p256_uint1 x116; + fiat_p256_addcarryx_u64(&x115, &x116, x114, x89, x105); + uint64_t x117; + uint64_t x118; + fiat_p256_mulx_u64(&x117, &x118, x107, UINT64_C(0xffffffff00000001)); + uint64_t x119; + uint64_t x120; + fiat_p256_mulx_u64(&x119, &x120, x107, UINT32_C(0xffffffff)); + uint64_t x121; + uint64_t x122; + fiat_p256_mulx_u64(&x121, &x122, x107, UINT64_C(0xffffffffffffffff)); + uint64_t x123; + fiat_p256_uint1 x124; + fiat_p256_addcarryx_u64(&x123, &x124, 0x0, x122, x119); + uint64_t x125; + fiat_p256_uint1 x126; + fiat_p256_addcarryx_u64(&x125, &x126, x124, x120, 0x0); + uint64_t x127; + fiat_p256_uint1 x128; + fiat_p256_addcarryx_u64(&x127, &x128, 0x0, x107, x121); + uint64_t x129; + fiat_p256_uint1 x130; + fiat_p256_addcarryx_u64(&x129, &x130, x128, x109, x123); + uint64_t x131; + fiat_p256_uint1 x132; + fiat_p256_addcarryx_u64(&x131, &x132, x130, x111, x125); + uint64_t x133; + fiat_p256_uint1 x134; + fiat_p256_addcarryx_u64(&x133, &x134, x132, x113, x117); + uint64_t x135; + fiat_p256_uint1 x136; + fiat_p256_addcarryx_u64(&x135, &x136, x134, x115, x118); + uint64_t x137; + fiat_p256_uint1 x138; + fiat_p256_addcarryx_u64(&x137, &x138, x136, x116, 0x0); + uint64_t x139; + uint64_t x140; + fiat_p256_mulx_u64(&x139, &x140, x3, (arg1[3])); + uint64_t x141; + uint64_t x142; + fiat_p256_mulx_u64(&x141, &x142, x3, (arg1[2])); + uint64_t x143; + uint64_t x144; + fiat_p256_mulx_u64(&x143, &x144, x3, (arg1[1])); + uint64_t x145; + uint64_t x146; + fiat_p256_mulx_u64(&x145, &x146, x3, (arg1[0])); + uint64_t x147; + fiat_p256_uint1 x148; + fiat_p256_addcarryx_u64(&x147, &x148, 0x0, x146, x143); + uint64_t x149; + fiat_p256_uint1 x150; + fiat_p256_addcarryx_u64(&x149, &x150, x148, x144, x141); + uint64_t x151; + fiat_p256_uint1 x152; + fiat_p256_addcarryx_u64(&x151, &x152, x150, x142, x139); + uint64_t x153; + fiat_p256_uint1 x154; + fiat_p256_addcarryx_u64(&x153, &x154, x152, x140, 0x0); + uint64_t x155; + fiat_p256_uint1 x156; + fiat_p256_addcarryx_u64(&x155, &x156, 0x0, x129, x145); + uint64_t x157; + fiat_p256_uint1 x158; + fiat_p256_addcarryx_u64(&x157, &x158, x156, x131, x147); + uint64_t x159; + fiat_p256_uint1 x160; + fiat_p256_addcarryx_u64(&x159, &x160, x158, x133, x149); + uint64_t x161; + fiat_p256_uint1 x162; + fiat_p256_addcarryx_u64(&x161, &x162, x160, x135, x151); + uint64_t x163; + fiat_p256_uint1 x164; + fiat_p256_addcarryx_u64(&x163, &x164, x162, x137, x153); + uint64_t x165; + uint64_t x166; + fiat_p256_mulx_u64(&x165, &x166, x155, UINT64_C(0xffffffff00000001)); + uint64_t x167; + uint64_t x168; + fiat_p256_mulx_u64(&x167, &x168, x155, UINT32_C(0xffffffff)); + uint64_t x169; + uint64_t x170; + fiat_p256_mulx_u64(&x169, &x170, x155, UINT64_C(0xffffffffffffffff)); + uint64_t x171; + fiat_p256_uint1 x172; + fiat_p256_addcarryx_u64(&x171, &x172, 0x0, x170, x167); + uint64_t x173; + fiat_p256_uint1 x174; + fiat_p256_addcarryx_u64(&x173, &x174, x172, x168, 0x0); + uint64_t x175; + fiat_p256_uint1 x176; + fiat_p256_addcarryx_u64(&x175, &x176, 0x0, x155, x169); + uint64_t x177; + fiat_p256_uint1 x178; + fiat_p256_addcarryx_u64(&x177, &x178, x176, x157, x171); + uint64_t x179; + fiat_p256_uint1 x180; + fiat_p256_addcarryx_u64(&x179, &x180, x178, x159, x173); + uint64_t x181; + fiat_p256_uint1 x182; + fiat_p256_addcarryx_u64(&x181, &x182, x180, x161, x165); + uint64_t x183; + fiat_p256_uint1 x184; + fiat_p256_addcarryx_u64(&x183, &x184, x182, x163, x166); + uint64_t x185; + fiat_p256_uint1 x186; + fiat_p256_addcarryx_u64(&x185, &x186, x184, x164, 0x0); + uint64_t x187; + fiat_p256_uint1 x188; + fiat_p256_subborrowx_u64(&x187, &x188, 0x0, x177, UINT64_C(0xffffffffffffffff)); + uint64_t x189; + fiat_p256_uint1 x190; + fiat_p256_subborrowx_u64(&x189, &x190, x188, x179, UINT32_C(0xffffffff)); + uint64_t x191; + fiat_p256_uint1 x192; + fiat_p256_subborrowx_u64(&x191, &x192, x190, x181, 0x0); + uint64_t x193; + fiat_p256_uint1 x194; + fiat_p256_subborrowx_u64(&x193, &x194, x192, x183, UINT64_C(0xffffffff00000001)); + uint64_t x195; + fiat_p256_uint1 x196; + fiat_p256_subborrowx_u64(&x195, &x196, x194, x185, 0x0); + uint64_t x197; + fiat_p256_cmovznz_u64(&x197, x196, x187, x177); + uint64_t x198; + fiat_p256_cmovznz_u64(&x198, x196, x189, x179); + uint64_t x199; + fiat_p256_cmovznz_u64(&x199, x196, x191, x181); + uint64_t x200; + fiat_p256_cmovznz_u64(&x200, x196, x193, x183); + out1[0] = x197; + out1[1] = x198; + out1[2] = x199; + out1[3] = x200; +} + +/* + * The function fiat_p256_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_add(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { + uint64_t x1; + fiat_p256_uint1 x2; + fiat_p256_addcarryx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + uint64_t x3; + fiat_p256_uint1 x4; + fiat_p256_addcarryx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + uint64_t x5; + fiat_p256_uint1 x6; + fiat_p256_addcarryx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + uint64_t x7; + fiat_p256_uint1 x8; + fiat_p256_addcarryx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + uint64_t x9; + fiat_p256_uint1 x10; + fiat_p256_subborrowx_u64(&x9, &x10, 0x0, x1, UINT64_C(0xffffffffffffffff)); + uint64_t x11; + fiat_p256_uint1 x12; + fiat_p256_subborrowx_u64(&x11, &x12, x10, x3, UINT32_C(0xffffffff)); + uint64_t x13; + fiat_p256_uint1 x14; + fiat_p256_subborrowx_u64(&x13, &x14, x12, x5, 0x0); + uint64_t x15; + fiat_p256_uint1 x16; + fiat_p256_subborrowx_u64(&x15, &x16, x14, x7, UINT64_C(0xffffffff00000001)); + uint64_t x17; + fiat_p256_uint1 x18; + fiat_p256_subborrowx_u64(&x17, &x18, x16, x8, 0x0); + uint64_t x19; + fiat_p256_cmovznz_u64(&x19, x18, x9, x1); + uint64_t x20; + fiat_p256_cmovznz_u64(&x20, x18, x11, x3); + uint64_t x21; + fiat_p256_cmovznz_u64(&x21, x18, x13, x5); + uint64_t x22; + fiat_p256_cmovznz_u64(&x22, x18, x15, x7); + out1[0] = x19; + out1[1] = x20; + out1[2] = x21; + out1[3] = x22; +} + +/* + * The function fiat_p256_sub subtracts two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_sub(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { + uint64_t x1; + fiat_p256_uint1 x2; + fiat_p256_subborrowx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + uint64_t x3; + fiat_p256_uint1 x4; + fiat_p256_subborrowx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + uint64_t x5; + fiat_p256_uint1 x6; + fiat_p256_subborrowx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + uint64_t x7; + fiat_p256_uint1 x8; + fiat_p256_subborrowx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + uint64_t x9; + fiat_p256_cmovznz_u64(&x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); + uint64_t x10; + fiat_p256_uint1 x11; + fiat_p256_addcarryx_u64(&x10, &x11, 0x0, x1, (x9 & UINT64_C(0xffffffffffffffff))); + uint64_t x12; + fiat_p256_uint1 x13; + fiat_p256_addcarryx_u64(&x12, &x13, x11, x3, (x9 & UINT32_C(0xffffffff))); + uint64_t x14; + fiat_p256_uint1 x15; + fiat_p256_addcarryx_u64(&x14, &x15, x13, x5, 0x0); + uint64_t x16; + fiat_p256_uint1 x17; + fiat_p256_addcarryx_u64(&x16, &x17, x15, x7, (x9 & UINT64_C(0xffffffff00000001))); + out1[0] = x10; + out1[1] = x12; + out1[2] = x14; + out1[3] = x16; +} + +/* + * The function fiat_p256_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_opp(uint64_t out1[4], const uint64_t arg1[4]) { + uint64_t x1; + fiat_p256_uint1 x2; + fiat_p256_subborrowx_u64(&x1, &x2, 0x0, 0x0, (arg1[0])); + uint64_t x3; + fiat_p256_uint1 x4; + fiat_p256_subborrowx_u64(&x3, &x4, x2, 0x0, (arg1[1])); + uint64_t x5; + fiat_p256_uint1 x6; + fiat_p256_subborrowx_u64(&x5, &x6, x4, 0x0, (arg1[2])); + uint64_t x7; + fiat_p256_uint1 x8; + fiat_p256_subborrowx_u64(&x7, &x8, x6, 0x0, (arg1[3])); + uint64_t x9; + fiat_p256_cmovznz_u64(&x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); + uint64_t x10; + fiat_p256_uint1 x11; + fiat_p256_addcarryx_u64(&x10, &x11, 0x0, x1, (x9 & UINT64_C(0xffffffffffffffff))); + uint64_t x12; + fiat_p256_uint1 x13; + fiat_p256_addcarryx_u64(&x12, &x13, x11, x3, (x9 & UINT32_C(0xffffffff))); + uint64_t x14; + fiat_p256_uint1 x15; + fiat_p256_addcarryx_u64(&x14, &x15, x13, x5, 0x0); + uint64_t x16; + fiat_p256_uint1 x17; + fiat_p256_addcarryx_u64(&x16, &x17, x15, x7, (x9 & UINT64_C(0xffffffff00000001))); + out1[0] = x10; + out1[1] = x12; + out1[2] = x14; + out1[3] = x16; +} + +/* + * The function fiat_p256_from_montgomery translates a field element out of the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^64)⁻¹ mod m)^4) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_from_montgomery(uint64_t out1[4], const uint64_t arg1[4]) { + uint64_t x1 = (arg1[0]); + uint64_t x2; + uint64_t x3; + fiat_p256_mulx_u64(&x2, &x3, x1, UINT64_C(0xffffffff00000001)); + uint64_t x4; + uint64_t x5; + fiat_p256_mulx_u64(&x4, &x5, x1, UINT32_C(0xffffffff)); + uint64_t x6; + uint64_t x7; + fiat_p256_mulx_u64(&x6, &x7, x1, UINT64_C(0xffffffffffffffff)); + uint64_t x8; + fiat_p256_uint1 x9; + fiat_p256_addcarryx_u64(&x8, &x9, 0x0, x7, x4); + uint64_t x10; + fiat_p256_uint1 x11; + fiat_p256_addcarryx_u64(&x10, &x11, 0x0, x1, x6); + uint64_t x12; + fiat_p256_uint1 x13; + fiat_p256_addcarryx_u64(&x12, &x13, x11, 0x0, x8); + uint64_t x14; + fiat_p256_uint1 x15; + fiat_p256_addcarryx_u64(&x14, &x15, 0x0, x12, (arg1[1])); + uint64_t x16; + uint64_t x17; + fiat_p256_mulx_u64(&x16, &x17, x14, UINT64_C(0xffffffff00000001)); + uint64_t x18; + uint64_t x19; + fiat_p256_mulx_u64(&x18, &x19, x14, UINT32_C(0xffffffff)); + uint64_t x20; + uint64_t x21; + fiat_p256_mulx_u64(&x20, &x21, x14, UINT64_C(0xffffffffffffffff)); + uint64_t x22; + fiat_p256_uint1 x23; + fiat_p256_addcarryx_u64(&x22, &x23, 0x0, x21, x18); + uint64_t x24; + fiat_p256_uint1 x25; + fiat_p256_addcarryx_u64(&x24, &x25, x9, x5, 0x0); + uint64_t x26; + fiat_p256_uint1 x27; + fiat_p256_addcarryx_u64(&x26, &x27, x13, 0x0, x24); + uint64_t x28; + fiat_p256_uint1 x29; + fiat_p256_addcarryx_u64(&x28, &x29, x15, x26, 0x0); + uint64_t x30; + fiat_p256_uint1 x31; + fiat_p256_addcarryx_u64(&x30, &x31, 0x0, x14, x20); + uint64_t x32; + fiat_p256_uint1 x33; + fiat_p256_addcarryx_u64(&x32, &x33, x31, x28, x22); + uint64_t x34; + fiat_p256_uint1 x35; + fiat_p256_addcarryx_u64(&x34, &x35, x23, x19, 0x0); + uint64_t x36; + fiat_p256_uint1 x37; + fiat_p256_addcarryx_u64(&x36, &x37, x33, x2, x34); + uint64_t x38; + fiat_p256_uint1 x39; + fiat_p256_addcarryx_u64(&x38, &x39, x37, x3, x16); + uint64_t x40; + fiat_p256_uint1 x41; + fiat_p256_addcarryx_u64(&x40, &x41, 0x0, x32, (arg1[2])); + uint64_t x42; + fiat_p256_uint1 x43; + fiat_p256_addcarryx_u64(&x42, &x43, x41, x36, 0x0); + uint64_t x44; + fiat_p256_uint1 x45; + fiat_p256_addcarryx_u64(&x44, &x45, x43, x38, 0x0); + uint64_t x46; + uint64_t x47; + fiat_p256_mulx_u64(&x46, &x47, x40, UINT64_C(0xffffffff00000001)); + uint64_t x48; + uint64_t x49; + fiat_p256_mulx_u64(&x48, &x49, x40, UINT32_C(0xffffffff)); + uint64_t x50; + uint64_t x51; + fiat_p256_mulx_u64(&x50, &x51, x40, UINT64_C(0xffffffffffffffff)); + uint64_t x52; + fiat_p256_uint1 x53; + fiat_p256_addcarryx_u64(&x52, &x53, 0x0, x51, x48); + uint64_t x54; + fiat_p256_uint1 x55; + fiat_p256_addcarryx_u64(&x54, &x55, 0x0, x40, x50); + uint64_t x56; + fiat_p256_uint1 x57; + fiat_p256_addcarryx_u64(&x56, &x57, x55, x42, x52); + uint64_t x58; + fiat_p256_uint1 x59; + fiat_p256_addcarryx_u64(&x58, &x59, x53, x49, 0x0); + uint64_t x60; + fiat_p256_uint1 x61; + fiat_p256_addcarryx_u64(&x60, &x61, x57, x44, x58); + uint64_t x62; + fiat_p256_uint1 x63; + fiat_p256_addcarryx_u64(&x62, &x63, x39, 0x0, x17); + uint64_t x64; + fiat_p256_uint1 x65; + fiat_p256_addcarryx_u64(&x64, &x65, x45, x62, 0x0); + uint64_t x66; + fiat_p256_uint1 x67; + fiat_p256_addcarryx_u64(&x66, &x67, x61, x64, x46); + uint64_t x68; + fiat_p256_uint1 x69; + fiat_p256_addcarryx_u64(&x68, &x69, 0x0, x56, (arg1[3])); + uint64_t x70; + fiat_p256_uint1 x71; + fiat_p256_addcarryx_u64(&x70, &x71, x69, x60, 0x0); + uint64_t x72; + fiat_p256_uint1 x73; + fiat_p256_addcarryx_u64(&x72, &x73, x71, x66, 0x0); + uint64_t x74; + uint64_t x75; + fiat_p256_mulx_u64(&x74, &x75, x68, UINT64_C(0xffffffff00000001)); + uint64_t x76; + uint64_t x77; + fiat_p256_mulx_u64(&x76, &x77, x68, UINT32_C(0xffffffff)); + uint64_t x78; + uint64_t x79; + fiat_p256_mulx_u64(&x78, &x79, x68, UINT64_C(0xffffffffffffffff)); + uint64_t x80; + fiat_p256_uint1 x81; + fiat_p256_addcarryx_u64(&x80, &x81, 0x0, x79, x76); + uint64_t x82; + fiat_p256_uint1 x83; + fiat_p256_addcarryx_u64(&x82, &x83, 0x0, x68, x78); + uint64_t x84; + fiat_p256_uint1 x85; + fiat_p256_addcarryx_u64(&x84, &x85, x83, x70, x80); + uint64_t x86; + fiat_p256_uint1 x87; + fiat_p256_addcarryx_u64(&x86, &x87, x81, x77, 0x0); + uint64_t x88; + fiat_p256_uint1 x89; + fiat_p256_addcarryx_u64(&x88, &x89, x85, x72, x86); + uint64_t x90; + fiat_p256_uint1 x91; + fiat_p256_addcarryx_u64(&x90, &x91, x67, 0x0, x47); + uint64_t x92; + fiat_p256_uint1 x93; + fiat_p256_addcarryx_u64(&x92, &x93, x73, x90, 0x0); + uint64_t x94; + fiat_p256_uint1 x95; + fiat_p256_addcarryx_u64(&x94, &x95, x89, x92, x74); + uint64_t x96; + fiat_p256_uint1 x97; + fiat_p256_addcarryx_u64(&x96, &x97, x95, 0x0, x75); + uint64_t x98; + fiat_p256_uint1 x99; + fiat_p256_subborrowx_u64(&x98, &x99, 0x0, x84, UINT64_C(0xffffffffffffffff)); + uint64_t x100; + fiat_p256_uint1 x101; + fiat_p256_subborrowx_u64(&x100, &x101, x99, x88, UINT32_C(0xffffffff)); + uint64_t x102; + fiat_p256_uint1 x103; + fiat_p256_subborrowx_u64(&x102, &x103, x101, x94, 0x0); + uint64_t x104; + fiat_p256_uint1 x105; + fiat_p256_subborrowx_u64(&x104, &x105, x103, x96, UINT64_C(0xffffffff00000001)); + uint64_t x106; + fiat_p256_uint1 x107; + fiat_p256_subborrowx_u64(&x106, &x107, x105, 0x0, 0x0); + uint64_t x108; + fiat_p256_cmovznz_u64(&x108, x107, x98, x84); + uint64_t x109; + fiat_p256_cmovznz_u64(&x109, x107, x100, x88); + uint64_t x110; + fiat_p256_cmovznz_u64(&x110, x107, x102, x94); + uint64_t x111; + fiat_p256_cmovznz_u64(&x111, x107, x104, x96); + out1[0] = x108; + out1[1] = x109; + out1[2] = x110; + out1[3] = x111; +} + +/* + * The function fiat_p256_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_p256_nonzero(uint64_t* out1, const uint64_t arg1[4]) { + uint64_t x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | (uint64_t)0x0)))); + *out1 = x1; +} + +/* + * The function fiat_p256_selectznz is a multi-limb conditional select. + * Postconditions: + * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_selectznz(uint64_t out1[4], fiat_p256_uint1 arg1, const uint64_t arg2[4], const uint64_t arg3[4]) { + uint64_t x1; + fiat_p256_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0])); + uint64_t x2; + fiat_p256_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1])); + uint64_t x3; + fiat_p256_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2])); + uint64_t x4; + fiat_p256_cmovznz_u64(&x4, arg1, (arg2[3]), (arg3[3])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; +} + +/* + * The function fiat_p256_to_bytes serializes a field element in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + */ +static void fiat_p256_to_bytes(uint8_t out1[32], const uint64_t arg1[4]) { + uint64_t x1 = (arg1[3]); + uint64_t x2 = (arg1[2]); + uint64_t x3 = (arg1[1]); + uint64_t x4 = (arg1[0]); + uint64_t x5 = (x4 >> 8); + uint8_t x6 = (uint8_t)(x4 & UINT8_C(0xff)); + uint64_t x7 = (x5 >> 8); + uint8_t x8 = (uint8_t)(x5 & UINT8_C(0xff)); + uint64_t x9 = (x7 >> 8); + uint8_t x10 = (uint8_t)(x7 & UINT8_C(0xff)); + uint64_t x11 = (x9 >> 8); + uint8_t x12 = (uint8_t)(x9 & UINT8_C(0xff)); + uint64_t x13 = (x11 >> 8); + uint8_t x14 = (uint8_t)(x11 & UINT8_C(0xff)); + uint64_t x15 = (x13 >> 8); + uint8_t x16 = (uint8_t)(x13 & UINT8_C(0xff)); + uint8_t x17 = (uint8_t)(x15 >> 8); + uint8_t x18 = (uint8_t)(x15 & UINT8_C(0xff)); + uint8_t x19 = (uint8_t)(x17 & UINT8_C(0xff)); + uint64_t x20 = (x3 >> 8); + uint8_t x21 = (uint8_t)(x3 & UINT8_C(0xff)); + uint64_t x22 = (x20 >> 8); + uint8_t x23 = (uint8_t)(x20 & UINT8_C(0xff)); + uint64_t x24 = (x22 >> 8); + uint8_t x25 = (uint8_t)(x22 & UINT8_C(0xff)); + uint64_t x26 = (x24 >> 8); + uint8_t x27 = (uint8_t)(x24 & UINT8_C(0xff)); + uint64_t x28 = (x26 >> 8); + uint8_t x29 = (uint8_t)(x26 & UINT8_C(0xff)); + uint64_t x30 = (x28 >> 8); + uint8_t x31 = (uint8_t)(x28 & UINT8_C(0xff)); + uint8_t x32 = (uint8_t)(x30 >> 8); + uint8_t x33 = (uint8_t)(x30 & UINT8_C(0xff)); + uint8_t x34 = (uint8_t)(x32 & UINT8_C(0xff)); + uint64_t x35 = (x2 >> 8); + uint8_t x36 = (uint8_t)(x2 & UINT8_C(0xff)); + uint64_t x37 = (x35 >> 8); + uint8_t x38 = (uint8_t)(x35 & UINT8_C(0xff)); + uint64_t x39 = (x37 >> 8); + uint8_t x40 = (uint8_t)(x37 & UINT8_C(0xff)); + uint64_t x41 = (x39 >> 8); + uint8_t x42 = (uint8_t)(x39 & UINT8_C(0xff)); + uint64_t x43 = (x41 >> 8); + uint8_t x44 = (uint8_t)(x41 & UINT8_C(0xff)); + uint64_t x45 = (x43 >> 8); + uint8_t x46 = (uint8_t)(x43 & UINT8_C(0xff)); + uint8_t x47 = (uint8_t)(x45 >> 8); + uint8_t x48 = (uint8_t)(x45 & UINT8_C(0xff)); + uint8_t x49 = (uint8_t)(x47 & UINT8_C(0xff)); + uint64_t x50 = (x1 >> 8); + uint8_t x51 = (uint8_t)(x1 & UINT8_C(0xff)); + uint64_t x52 = (x50 >> 8); + uint8_t x53 = (uint8_t)(x50 & UINT8_C(0xff)); + uint64_t x54 = (x52 >> 8); + uint8_t x55 = (uint8_t)(x52 & UINT8_C(0xff)); + uint64_t x56 = (x54 >> 8); + uint8_t x57 = (uint8_t)(x54 & UINT8_C(0xff)); + uint64_t x58 = (x56 >> 8); + uint8_t x59 = (uint8_t)(x56 & UINT8_C(0xff)); + uint64_t x60 = (x58 >> 8); + uint8_t x61 = (uint8_t)(x58 & UINT8_C(0xff)); + uint8_t x62 = (uint8_t)(x60 >> 8); + uint8_t x63 = (uint8_t)(x60 & UINT8_C(0xff)); + out1[0] = x6; + out1[1] = x8; + out1[2] = x10; + out1[3] = x12; + out1[4] = x14; + out1[5] = x16; + out1[6] = x18; + out1[7] = x19; + out1[8] = x21; + out1[9] = x23; + out1[10] = x25; + out1[11] = x27; + out1[12] = x29; + out1[13] = x31; + out1[14] = x33; + out1[15] = x34; + out1[16] = x36; + out1[17] = x38; + out1[18] = x40; + out1[19] = x42; + out1[20] = x44; + out1[21] = x46; + out1[22] = x48; + out1[23] = x49; + out1[24] = x51; + out1[25] = x53; + out1[26] = x55; + out1[27] = x57; + out1[28] = x59; + out1[29] = x61; + out1[30] = x63; + out1[31] = x62; +} + +/* + * The function fiat_p256_from_bytes deserializes a field element in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_from_bytes(uint64_t out1[4], const uint8_t arg1[32]) { + uint64_t x1 = ((uint64_t)(arg1[31]) << 56); + uint64_t x2 = ((uint64_t)(arg1[30]) << 48); + uint64_t x3 = ((uint64_t)(arg1[29]) << 40); + uint64_t x4 = ((uint64_t)(arg1[28]) << 32); + uint64_t x5 = ((uint64_t)(arg1[27]) << 24); + uint64_t x6 = ((uint64_t)(arg1[26]) << 16); + uint64_t x7 = ((uint64_t)(arg1[25]) << 8); + uint8_t x8 = (arg1[24]); + uint64_t x9 = ((uint64_t)(arg1[23]) << 56); + uint64_t x10 = ((uint64_t)(arg1[22]) << 48); + uint64_t x11 = ((uint64_t)(arg1[21]) << 40); + uint64_t x12 = ((uint64_t)(arg1[20]) << 32); + uint64_t x13 = ((uint64_t)(arg1[19]) << 24); + uint64_t x14 = ((uint64_t)(arg1[18]) << 16); + uint64_t x15 = ((uint64_t)(arg1[17]) << 8); + uint8_t x16 = (arg1[16]); + uint64_t x17 = ((uint64_t)(arg1[15]) << 56); + uint64_t x18 = ((uint64_t)(arg1[14]) << 48); + uint64_t x19 = ((uint64_t)(arg1[13]) << 40); + uint64_t x20 = ((uint64_t)(arg1[12]) << 32); + uint64_t x21 = ((uint64_t)(arg1[11]) << 24); + uint64_t x22 = ((uint64_t)(arg1[10]) << 16); + uint64_t x23 = ((uint64_t)(arg1[9]) << 8); + uint8_t x24 = (arg1[8]); + uint64_t x25 = ((uint64_t)(arg1[7]) << 56); + uint64_t x26 = ((uint64_t)(arg1[6]) << 48); + uint64_t x27 = ((uint64_t)(arg1[5]) << 40); + uint64_t x28 = ((uint64_t)(arg1[4]) << 32); + uint64_t x29 = ((uint64_t)(arg1[3]) << 24); + uint64_t x30 = ((uint64_t)(arg1[2]) << 16); + uint64_t x31 = ((uint64_t)(arg1[1]) << 8); + uint8_t x32 = (arg1[0]); + uint64_t x33 = (x32 + (x31 + (x30 + (x29 + (x28 + (x27 + (x26 + x25))))))); + uint64_t x34 = (x33 & UINT64_C(0xffffffffffffffff)); + uint64_t x35 = (x8 + (x7 + (x6 + (x5 + (x4 + (x3 + (x2 + x1))))))); + uint64_t x36 = (x16 + (x15 + (x14 + (x13 + (x12 + (x11 + (x10 + x9))))))); + uint64_t x37 = (x24 + (x23 + (x22 + (x21 + (x20 + (x19 + (x18 + x17))))))); + uint64_t x38 = (x37 & UINT64_C(0xffffffffffffffff)); + uint64_t x39 = (x36 & UINT64_C(0xffffffffffffffff)); + out1[0] = x34; + out1[1] = x38; + out1[2] = x39; + out1[3] = x35; +} + diff --git a/ec/native/p256_stubs.c b/ec/native/p256_stubs.c new file mode 100644 index 00000000..f8dbd25b --- /dev/null +++ b/ec/native/p256_stubs.c @@ -0,0 +1,401 @@ +#include "mirage_crypto.h" + +#ifdef ARCH_64BIT +#include "p256_64.h" +#define NLIMBS 4 +typedef uint64_t limb_t; +#else +#define NLIMBS 8 +#include "p256_32.h" +typedef uint32_t limb_t; +#endif + +typedef limb_t fe[NLIMBS]; + +#include +#include + +#define fe_add fiat_p256_add +#define fe_sub fiat_p256_sub +#define fe_opp fiat_p256_opp + +#define fe_mul fiat_p256_mul +#define fe_sqr fiat_p256_square + +#define fe_tobytes fiat_p256_to_bytes +#define fe_frombytes fiat_p256_from_bytes + +static limb_t fe_nz(const limb_t in1[NLIMBS]) { + limb_t ret; + fiat_p256_nonzero(&ret, in1); + return ret; +} + +static void fe_copy(limb_t out[NLIMBS], const limb_t in1[NLIMBS]) { + for (int i = 0; i < NLIMBS; i++) { + out[i] = in1[i]; + } +} + +static void fe_cmovznz(limb_t out[NLIMBS], limb_t t, const limb_t z[NLIMBS], + const limb_t nz[NLIMBS]) { + fiat_p256_selectznz(out, !!t, z, nz); +} + +static void fe_from_montgomery(fe x) { + fiat_p256_from_montgomery(x, x); +} + +// fe_inv calculates |out| = |in|^{-1} +// +// Based on Fermat's Little Theorem: +// a^p = a (mod p) +// a^{p-1} = 1 (mod p) +// a^{p-2} = a^{-1} (mod p) +static void fe_inv(fe out, const fe in) { + fe ftmp, ftmp2; + // each e_I will hold |in|^{2^I - 1} + fe e2, e4, e8, e16, e32, e64; + + fe_sqr(ftmp, in); // 2^1 + fe_mul(ftmp, in, ftmp); // 2^2 - 2^0 + fe_copy(e2, ftmp); + fe_sqr(ftmp, ftmp); // 2^3 - 2^1 + fe_sqr(ftmp, ftmp); // 2^4 - 2^2 + fe_mul(ftmp, ftmp, e2); // 2^4 - 2^0 + fe_copy(e4, ftmp); + fe_sqr(ftmp, ftmp); // 2^5 - 2^1 + fe_sqr(ftmp, ftmp); // 2^6 - 2^2 + fe_sqr(ftmp, ftmp); // 2^7 - 2^3 + fe_sqr(ftmp, ftmp); // 2^8 - 2^4 + fe_mul(ftmp, ftmp, e4); // 2^8 - 2^0 + fe_copy(e8, ftmp); + for (size_t i = 0; i < 8; i++) { + fe_sqr(ftmp, ftmp); + } // 2^16 - 2^8 + fe_mul(ftmp, ftmp, e8); // 2^16 - 2^0 + fe_copy(e16, ftmp); + for (size_t i = 0; i < 16; i++) { + fe_sqr(ftmp, ftmp); + } // 2^32 - 2^16 + fe_mul(ftmp, ftmp, e16); // 2^32 - 2^0 + fe_copy(e32, ftmp); + for (size_t i = 0; i < 32; i++) { + fe_sqr(ftmp, ftmp); + } // 2^64 - 2^32 + fe_copy(e64, ftmp); + fe_mul(ftmp, ftmp, in); // 2^64 - 2^32 + 2^0 + for (size_t i = 0; i < 192; i++) { + fe_sqr(ftmp, ftmp); + } // 2^256 - 2^224 + 2^192 + + fe_mul(ftmp2, e64, e32); // 2^64 - 2^0 + for (size_t i = 0; i < 16; i++) { + fe_sqr(ftmp2, ftmp2); + } // 2^80 - 2^16 + fe_mul(ftmp2, ftmp2, e16); // 2^80 - 2^0 + for (size_t i = 0; i < 8; i++) { + fe_sqr(ftmp2, ftmp2); + } // 2^88 - 2^8 + fe_mul(ftmp2, ftmp2, e8); // 2^88 - 2^0 + for (size_t i = 0; i < 4; i++) { + fe_sqr(ftmp2, ftmp2); + } // 2^92 - 2^4 + fe_mul(ftmp2, ftmp2, e4); // 2^92 - 2^0 + fe_sqr(ftmp2, ftmp2); // 2^93 - 2^1 + fe_sqr(ftmp2, ftmp2); // 2^94 - 2^2 + fe_mul(ftmp2, ftmp2, e2); // 2^94 - 2^0 + fe_sqr(ftmp2, ftmp2); // 2^95 - 2^1 + fe_sqr(ftmp2, ftmp2); // 2^96 - 2^2 + fe_mul(ftmp2, ftmp2, in); // 2^96 - 3 + + fe_mul(out, ftmp2, ftmp); // 2^256 - 2^224 + 2^192 + 2^96 - 3 +} + +// Group operations +// ---------------- +// +// Building on top of the field operations we have the operations on the +// elliptic curve group itself. Points on the curve are represented in Jacobian +// coordinates. +// +// Both operations were transcribed to Coq and proven to correspond to naive +// implementations using Affine coordinates, for all suitable fields. In the +// Coq proofs, issues of constant-time execution and memory layout (aliasing) +// conventions were not considered. Specification of affine coordinates: +// +// As a sanity check, a proof that these points form a commutative group: +// + +// point_double calculates 2*(x_in, y_in, z_in) +// +// The method is taken from: +// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b +// +// Coq transcription and correctness proof: +// +// +// +// Outputs can equal corresponding inputs, i.e., x_out == x_in is allowed. +// while x_out == y_in is not (maybe this works, but it's not tested). +static void point_double(fe x_out, fe y_out, fe z_out, + const fe x_in, const fe y_in, const fe z_in) { + fe delta, gamma, beta, ftmp, ftmp2, tmptmp, alpha, fourbeta; + // delta = z^2 + fe_sqr(delta, z_in); + // gamma = y^2 + fe_sqr(gamma, y_in); + // beta = x*gamma + fe_mul(beta, x_in, gamma); + + // alpha = 3*(x-delta)*(x+delta) + fe_sub(ftmp, x_in, delta); + fe_add(ftmp2, x_in, delta); + + fe_add(tmptmp, ftmp2, ftmp2); + fe_add(ftmp2, ftmp2, tmptmp); + fe_mul(alpha, ftmp, ftmp2); + + // x' = alpha^2 - 8*beta + fe_sqr(x_out, alpha); + fe_add(fourbeta, beta, beta); + fe_add(fourbeta, fourbeta, fourbeta); + fe_add(tmptmp, fourbeta, fourbeta); + fe_sub(x_out, x_out, tmptmp); + + // z' = (y + z)^2 - gamma - delta + fe_add(delta, gamma, delta); + fe_add(ftmp, y_in, z_in); + fe_sqr(z_out, ftmp); + fe_sub(z_out, z_out, delta); + + // y' = alpha*(4*beta - x') - 8*gamma^2 + fe_sub(y_out, fourbeta, x_out); + fe_add(gamma, gamma, gamma); + fe_sqr(gamma, gamma); + fe_mul(y_out, alpha, y_out); + fe_add(gamma, gamma, gamma); + fe_sub(y_out, y_out, gamma); +} + +// point_add calcuates (x1, y1, z1) + (x2, y2, z2) +// +// The method is taken from: +// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-2007-bl, +// adapted for mixed addition (z2 = 1, or z2 = 0 for the point at infinity). +// +// Coq transcription and correctness proof: +// +// +// +// This function includes a branch for checking whether the two input points +// are equal, (while not equal to the point at infinity). This case never +// happens during single point multiplication, so there is no timing leak for +// ECDH or ECDSA signing. +static void point_add(fe x3, fe y3, fe z3, const fe x1, + const fe y1, const fe z1, const int mixed, + const fe x2, const fe y2, const fe z2) { + fe x_out, y_out, z_out; + limb_t z1nz = fe_nz(z1); + limb_t z2nz = fe_nz(z2); + + // z1z1 = z1z1 = z1**2 + fe z1z1; fe_sqr(z1z1, z1); + + fe u1, s1, two_z1z2; + if (!mixed) { + // z2z2 = z2**2 + fe z2z2; fe_sqr(z2z2, z2); + + // u1 = x1*z2z2 + fe_mul(u1, x1, z2z2); + + // two_z1z2 = (z1 + z2)**2 - (z1z1 + z2z2) = 2z1z2 + fe_add(two_z1z2, z1, z2); + fe_sqr(two_z1z2, two_z1z2); + fe_sub(two_z1z2, two_z1z2, z1z1); + fe_sub(two_z1z2, two_z1z2, z2z2); + + // s1 = y1 * z2**3 + fe_mul(s1, z2, z2z2); + fe_mul(s1, s1, y1); + } else { + // We'll assume z2 = 1 (special case z2 = 0 is handled later). + + // u1 = x1*z2z2 + fe_copy(u1, x1); + // two_z1z2 = 2z1z2 + fe_add(two_z1z2, z1, z1); + // s1 = y1 * z2**3 + fe_copy(s1, y1); + } + + // u2 = x2*z1z1 + fe u2; fe_mul(u2, x2, z1z1); + + // h = u2 - u1 + fe h; fe_sub(h, u2, u1); + + limb_t xneq = fe_nz(h); + + // z_out = two_z1z2 * h + fe_mul(z_out, h, two_z1z2); + + // z1z1z1 = z1 * z1z1 + fe z1z1z1; fe_mul(z1z1z1, z1, z1z1); + + // s2 = y2 * z1**3 + fe s2; fe_mul(s2, y2, z1z1z1); + + // r = (s2 - s1)*2 + fe r; + fe_sub(r, s2, s1); + fe_add(r, r, r); + + limb_t yneq = fe_nz(r); + + if (!xneq && !yneq && z1nz && z2nz) { + point_double(x3, y3, z3, x1, y1, z1); + return; + } + + // I = (2h)**2 + fe i; + fe_add(i, h, h); + fe_sqr(i, i); + + // J = h * I + fe j; fe_mul(j, h, i); + + // V = U1 * I + fe v; fe_mul(v, u1, i); + + // x_out = r**2 - J - 2V + fe_sqr(x_out, r); + fe_sub(x_out, x_out, j); + fe_sub(x_out, x_out, v); + fe_sub(x_out, x_out, v); + + // y_out = r(V-x_out) - 2 * s1 * J + fe_sub(y_out, v, x_out); + fe_mul(y_out, y_out, r); + fe s1j; + fe_mul(s1j, s1, j); + fe_sub(y_out, y_out, s1j); + fe_sub(y_out, y_out, s1j); + + fe_cmovznz(x_out, z1nz, x2, x_out); + fe_cmovznz(x3, z2nz, x1, x_out); + fe_cmovznz(y_out, z1nz, y2, y_out); + fe_cmovznz(y3, z2nz, y1, y_out); + fe_cmovznz(z_out, z1nz, z2, z_out); + fe_cmovznz(z3, z2nz, z1, z_out); +} + +CAMLprim value fiat_p256_caml_sub(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_p256_sub(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value fiat_p256_caml_add(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_p256_add(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value fiat_p256_caml_mul(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_p256_mul(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value fiat_p256_caml_from_bytes(value out, value in) +{ + CAMLparam2(out, in); + fiat_p256_from_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value fiat_p256_caml_to_bytes(value out, value in) +{ + CAMLparam2(out, in); + fiat_p256_to_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value fiat_p256_caml_sqr(value out, value in) +{ + CAMLparam2(out, in); + fiat_p256_square(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value fiat_p256_caml_from_montgomery(value x) +{ + CAMLparam1(x); + limb_t *l = Caml_ba_data_val(x); + fiat_p256_from_montgomery(l, l); + CAMLreturn(Val_unit); +} + + +CAMLprim value fiat_p256_caml_nz(value x) +{ + CAMLparam1(x); + CAMLreturn(Val_bool(fe_nz(Caml_ba_data_val(x)))); +} + +CAMLprim value fiat_p256_caml_inv(value out, value in) +{ + CAMLparam2(out, in); + fe_inv(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value fiat_p256_caml_point_double(value out, value in) +{ + CAMLparam2(out, in); + point_double( + Caml_ba_data_val(Field(out, 0)), + Caml_ba_data_val(Field(out, 1)), + Caml_ba_data_val(Field(out, 2)), + Caml_ba_data_val(Field(in, 0)), + Caml_ba_data_val(Field(in, 1)), + Caml_ba_data_val(Field(in, 2)) + ); + CAMLreturn(Val_unit); +} + +CAMLprim value fiat_p256_caml_point_add(value out, value p, value q) +{ + CAMLparam3(out, p, q); + point_add( + Caml_ba_data_val(Field(out, 0)), + Caml_ba_data_val(Field(out, 1)), + Caml_ba_data_val(Field(out, 2)), + Caml_ba_data_val(Field(p, 0)), + Caml_ba_data_val(Field(p, 1)), + Caml_ba_data_val(Field(p, 2)), + 0, + Caml_ba_data_val(Field(q, 0)), + Caml_ba_data_val(Field(q, 1)), + Caml_ba_data_val(Field(q, 2)) + ); + CAMLreturn(Val_unit); +} + +CAMLprim value fiat_p256_caml_select(value out, value bit, value t, value f) +{ + CAMLparam4(out, bit, t, f); + fe_cmovznz( + Caml_ba_data_val(out), + Bool_val(bit), + Caml_ba_data_val(f), + Caml_ba_data_val(t) + ); + CAMLreturn(Val_unit); +} diff --git a/ec/parameters.ml b/ec/parameters.ml new file mode 100644 index 00000000..9f460bc5 --- /dev/null +++ b/ec/parameters.ml @@ -0,0 +1,13 @@ +let a = `Hex "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC" + +let b = `Hex "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B" + +let g_x = + `Hex "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296" + +let g_y = + `Hex "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5" + +let p = `Hex "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF" + +let n = `Hex "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551" diff --git a/ec/parameters.mli b/ec/parameters.mli new file mode 100644 index 00000000..b6b08340 --- /dev/null +++ b/ec/parameters.mli @@ -0,0 +1,19 @@ +(** Curve parameters. + They are stored as [Hex.t] because [Fe.t] and [Cstruct.t] are + mutable. *) + +val a : Hex.t + +val b : Hex.t + +val g_x : Hex.t +(** The base point's x coordinate. *) + +val g_y : Hex.t +(** The base point's y coordinate. *) + +val p : Hex.t +(** The prime number corresponding to [Fe]. *) + +val n : Hex.t +(** The group order. *) diff --git a/ec/point.ml b/ec/point.ml new file mode 100644 index 00000000..ea447924 --- /dev/null +++ b/ec/point.ml @@ -0,0 +1,122 @@ +module Fe = Field_element + +type t = { f_x : Fe.t; f_y : Fe.t; f_z : Fe.t } + +let at_infinity () = + let f_x = Fe.one () in + let f_y = Fe.one () in + let f_z = Fe.create () in + { f_x; f_y; f_z } + +let is_infinity p = not (Fe.nz p.f_z) + +let is_solution_to_curve_equation ~x ~y = + let a = Fe.from_be_cstruct (Hex.to_cstruct Parameters.a) in + let b = Fe.from_be_cstruct (Hex.to_cstruct Parameters.b) in + let x3 = Fe.create () in + Fe.mul x3 x x; + Fe.mul x3 x3 x; + let ax = Fe.create () in + Fe.mul ax a x; + let y2 = Fe.create () in + Fe.mul y2 y y; + let sum = Fe.create () in + Fe.add sum x3 ax; + Fe.add sum sum b; + Fe.sub sum sum y2; + not (Fe.nz sum) + +let check_coordinate cs = + let p = Hex.to_cstruct Parameters.p in + (* ensure cs < p: *) + match Eqaf_cstruct.compare_be_with_len ~len:32 cs p >= 0 with + | true -> None + | exception Invalid_argument _ -> None + | false -> Some (Fe.from_be_cstruct cs) + +(** Convert cstruct coordinates to a finite point ensuring: + - x < p + - y < p + - y^2 = ax^3 + ax + b +*) +let validate_finite_point ~x ~y = + match (check_coordinate x, check_coordinate y) with + | Some f_x, Some f_y -> + if is_solution_to_curve_equation ~x:f_x ~y:f_y then + let f_z = Fe.one () in + Ok { f_x; f_y; f_z } + else Error `Not_on_curve + | _ -> Error `Invalid_range + +let first_byte cs = + if Cstruct.len cs = 0 then None else Some (Cstruct.get_uint8 cs 0) + +let of_cstruct cs = + match (first_byte cs, Cstruct.len cs) with + | Some 0x00, 1 -> Ok (at_infinity ()) + | Some 0x04, 65 -> + let x = Cstruct.sub cs 1 32 in + let y = Cstruct.sub cs 33 32 in + validate_finite_point ~x ~y + | Some 0x00, _ | Some 0x04, _ -> Error `Invalid_length + | _, _ -> Error `Invalid_format + +let to_affine p = + if is_infinity p then None + else + let out_x = Cstruct.create 32 in + let out_y = Cstruct.create 32 in + let z1 = Fe.create () in + let z2 = Fe.create () in + Fe.copy z1 p.f_z; + Fe.inv z2 z1; + Fe.sqr z1 z2; + Fe.from_montgomery z1; + let x = Fe.create () in + Fe.copy x p.f_x; + Fe.mul x x z1; + Fe.to_bytes out_x x; + let y = Fe.create () in + Fe.copy y p.f_y; + Fe.mul z1 z1 z2; + Fe.mul y y z1; + Fe.to_bytes out_y y; + Some (out_x, out_y) + +let to_cstruct p = + match to_affine p with + | None -> Cstruct.create 1 + | Some (x, y) -> + let four = Cstruct.create 1 in + Cstruct.set_uint8 four 0 4; + let rev_x = Cstruct.rev x and rev_y = Cstruct.rev y in + Cstruct.concat [ four; rev_x; rev_y ] + +external double_c : t -> t -> unit = "fiat_p256_caml_point_double" [@@noalloc] + +let double p = + let out = { f_x = Fe.create (); f_y = Fe.create (); f_z = Fe.create () } in + double_c out p; + out + +external add_c : t -> t -> t -> unit = "fiat_p256_caml_point_add" [@@noalloc] + +let add fe_p fe_q = + let out = { f_x = Fe.create (); f_y = Fe.create (); f_z = Fe.create () } in + add_c out fe_p fe_q; + out + +let x_of_finite_point p = + match to_affine p with None -> assert false | Some (x, _) -> Cstruct.rev x + +let params_g = + let x = Hex.to_cstruct Parameters.g_x in + let y = Hex.to_cstruct Parameters.g_y in + match validate_finite_point ~x ~y with Ok p -> p | Error _ -> assert false + +let select bit ~then_ ~else_ = + { + f_x = Fe.select bit ~then_:then_.f_x ~else_:else_.f_x; + f_y = Fe.select bit ~then_:then_.f_y ~else_:else_.f_y; + f_z = Fe.select bit ~then_:then_.f_z ~else_:else_.f_z; + } diff --git a/ec/point.mli b/ec/point.mli new file mode 100644 index 00000000..a018e60a --- /dev/null +++ b/ec/point.mli @@ -0,0 +1,43 @@ +type t +(** A Point on the P-256 curve. *) + +val at_infinity : unit -> t +(** The point at infinity *) + +val is_infinity : t -> bool +(** [is_infty p] checks wether [p] is the point at infinity. *) + +val add : t -> t -> t +(** Point addition. [add p q] returns the result of the addition of [p] and [q]. *) + +val double : t -> t +(** Point doubling. [double p] returns the result of doubling [p]. *) + +val of_cstruct : + Cstruct.t -> + ( t, + [> `Invalid_format | `Invalid_length | `Invalid_range | `Not_on_curve ] ) + result +(** Convert from cstruct. The format is the uncompressed format described in + SEC1, section 2.3.4, that is to say: + + - the point at infinity is the single byte "00". + - for a point (x, y) not at infinity, the format is: + - the byte "04" + - x serialized in big endian format, padded to 32 bytes. + - y serialized in big endian format, padded to 32 bytes. + + @see +*) + +val to_cstruct : t -> Cstruct.t +(** Convert to a cstruct. See [of_cstruct] for the format. *) + +val x_of_finite_point : t -> Cstruct.t +(** Return only the X coordinate of a point that is not at infinity. *) + +val params_g : t +(** The curve's base point *) + +val select : bool -> then_:t -> else_:t -> t +(** Constant-time selection. See [Field_element.select]. *) diff --git a/ec/scalar.ml b/ec/scalar.ml new file mode 100644 index 00000000..d1166e2a --- /dev/null +++ b/ec/scalar.ml @@ -0,0 +1,19 @@ +type t = Scalar of Cstruct.t + +let is_in_range cs = + let zero = Cstruct.create 32 in + let n = Hex.to_cstruct Parameters.n in + Eqaf_cstruct.compare_be_with_len ~len:32 cs zero > 0 + && Eqaf_cstruct.compare_be_with_len ~len:32 n cs > 0 + +let of_cstruct cs = + match is_in_range cs with + | exception Invalid_argument _ -> Error `Invalid_length + | true -> Ok (Scalar (Cstruct.rev cs)) + | false -> Error `Invalid_range + +let bit_at (Scalar s) i = + let byte_num = i / 8 in + let bit_num = i mod 8 in + let byte = Cstruct.get_uint8 s byte_num in + byte land (1 lsl bit_num) <> 0 diff --git a/ec/scalar.mli b/ec/scalar.mli new file mode 100644 index 00000000..64ad4aa8 --- /dev/null +++ b/ec/scalar.mli @@ -0,0 +1,14 @@ +type t +(** A scalar value strictly between 1 and n-1 where n is the group order. *) + +val of_cstruct : Cstruct.t -> (t, Error.scalar_error) result +(** [of_cstruct cs] is a scalar {!t} when successful. + It should be in big endian format. + Returns an [Error _] when [cs] is not 32 bytes long; + or when the number is zero; + or if it is larger than or equal to the group order. +*) + +val bit_at : t -> int -> bool +(** [bit_at d n] returns the [n]th bit from [d], where bit 0 is the least + significant bit. *) diff --git a/ec/scalar_mult.ml b/ec/scalar_mult.ml new file mode 100644 index 00000000..23d340a0 --- /dev/null +++ b/ec/scalar_mult.ml @@ -0,0 +1,12 @@ +let scalar_mult d p = + let r0 = ref (Point.at_infinity ()) in + let r1 = ref p in + for i = 255 downto 0 do + let bit = Scalar.bit_at d i in + let sum = Point.add !r0 !r1 in + let r0_double = Point.double !r0 in + let r1_double = Point.double !r1 in + r0 := Point.select bit ~then_:sum ~else_:r0_double; + r1 := Point.select bit ~then_:r1_double ~else_:sum + done; + !r0 diff --git a/ec/scalar_mult.mli b/ec/scalar_mult.mli new file mode 100644 index 00000000..e430789c --- /dev/null +++ b/ec/scalar_mult.mli @@ -0,0 +1,3 @@ +val scalar_mult : Scalar.t -> Point.t -> Point.t +(** Scalar multiplication, implemented using the Montgomery powering ladder. + @see *) diff --git a/mirage-crypto-ec.opam b/mirage-crypto-ec.opam new file mode 100644 index 00000000..e31f54b3 --- /dev/null +++ b/mirage-crypto-ec.opam @@ -0,0 +1,54 @@ +opam-version: "2.0" +synopsis: "Primitives for Elliptic Curve Cryptography taken from Fiat" +description: """ +This is an implementation of the ECDH over P-256 key exchange algorithm, using +code from Fiat (). + +Cryptographic primitives should not be used in end applications, they are better +used as part of a cryptographic library. +""" +maintainer: "Hannes Mehnert " +authors: [ + "Hannes Mehnert " + "Nathan Rebours " + "Clément Pascutto " + "Etienne Millon " +# and from the fiat-crypto AUTHORS file + "Andres Erbsen " + "Google Inc." + "Jade Philipoom " + "Massachusetts Institute of Technology" + "Zoe Paraskevopoulou " +] +license: "MIT" +homepage: "https://github.com/mirage/mirage-crypto" +doc: "https://mirage.github.io/mirage-crypto/doc" +bug-reports: "https://github.com/mirage/mirage-crypto/issues" +depends: [ + "dune" {>= "2.6"} + "alcotest" {with-test} + "asn1-combinators" {with-test} + "ocaml" {>= "4.08.0"} + "cstruct" {>= "3.5.0"} + "dune-configurator" + "eqaf" {>= "0.5"} + "hex" + "conf-pkg-config" {build} + "ppx_deriving_yojson" {with-test} + "ppx_deriving" {with-test} + "rresult" {with-test} + "stdlib-shims" {with-test} + "yojson" {with-test & >= "1.6.0"} +] +depopts: ["ocaml-freestanding"] +conflicts: [ + "mirage-xen" {< "6.0.0"} + "ocaml-freestanding" {< "0.4.1"} +] +build: [ + ["dune" "subst"] {pinned} + ["dune" "build" "-p" name "-j" jobs] + ["dune" "runtest" "-p" name "-j" jobs] {with-test} +] +dev-repo: "git+https://github.com/mirage/mirage-crypto.git" +tags: ["org:mirage"] diff --git a/tests/dune b/tests/dune index aed09433..f689d0d7 100644 --- a/tests/dune +++ b/tests/dune @@ -48,3 +48,16 @@ (modules test_entropy) (package mirage-crypto-rng) (libraries mirage-crypto-rng)) + +(test + (name test_ec) + (modules test_ec) + (libraries alcotest mirage-crypto-ec) + (package mirage-crypto-ec)) + +(test + (name test_ec_wycheproof_secp256r1) + (modules test_ec_wycheproof_secp256r1) + (deps ecdh_secp256r1_test.json) + (libraries alcotest mirage-crypto-ec wycheproof asn1-combinators) + (package mirage-crypto-ec)) diff --git a/tests/ecdh_secp256r1_test.json b/tests/ecdh_secp256r1_test.json new file mode 100644 index 00000000..44d6e1e8 --- /dev/null +++ b/tests/ecdh_secp256r1_test.json @@ -0,0 +1,3586 @@ +{ + "algorithm" : "ECDH", + "generatorVersion" : "0.4.12", + "notes" : { + "AddSubChain" : "The private key has a special value. Implementations using addition subtraction chains for the point multiplication may get the point at infinity as an intermediate result. See CVE_2017_10176", + "CompressedPoint" : "The point in the public key is compressed. Not every library supports points in compressed format.", + "InvalidAsn" : "The public key in this test uses an invalid ASN encoding. Some cases where the ASN parser is not strictly checking the ASN format are benign as long as the ECDH computation still returns the correct shared value.", + "InvalidPublic" : "The public key has been modified and is invalid. An implementation should always check whether the public key is valid and on the same curve as the private key. The test vector includes the shared secret computed with the original public key if the public point is on the curve of the private key. Generating a shared secret other than the one with the original key likely indicates that the bug is exploitable.", + "ModifiedPrime" : "The modulus of the public key has been modified. The public point of the public key has been chosen so that it is both a point on both the curve of the modified public key and the private key.", + "UnnamedCurve" : "The public key does not use a named curve. RFC 3279 allows to encode such curves by explicitly encoding, the parameters of the curve equation, modulus, generator, order and cofactor. However, many crypto libraries only support named curves. Modifying some of the EC parameters and encoding the corresponding public key as an unnamed curve is a potential attack vector.", + "UnusedParam" : "A parameter that is typically not used for ECDH has been modified. Sometimes libraries ignore small differences between public and private key. For example, a library might ignore an incorrect cofactor in the public key. We consider ignoring such changes as acceptable as long as these differences do not change the outcome of the ECDH computation, i.e. as long as the computation is done on the curve from the private key.", + "WeakPublicKey" : "The vector contains a weak public key. The curve is not a named curve, the public key point has order 3 and has been chosen to be on the same curve as the private key. This test vector is used to check ECC implementations for missing steps in the verification of the public key.", + "WrongOrder" : "The order of the public key has been modified. If this order is used in a cryptographic primitive instead of the correct order then private keys may leak. E.g. ECDHC in BC 1.52 suffered from this." + }, + "numberOfTests" : 340, + "header" : [], + "testGroups" : [ + { + "curve" : "secp256r1", + "encoding" : "asn", + "type" : "ECHDComp", + "tests" : [ + { + "tcId" : 1, + "comment" : "normal case", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000462d5bd3372af75fe85a040715d0f502428e07046868b0bfdfa61d731afe44f26ac333a93a9e70a81cd5a95b5bf8d13990eb741c8c38872b4a07d275a014e30cf", + "private" : "612465c89a023ab17855b0a6bcebfd3febb53aef84138647b5352e02c10c346", + "shared" : "53020d908b0219328b658b525f26780e3ae12bcd952bb25a93bc0895e1714285", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "compressed public key", + "public" : "3039301306072a8648ce3d020106082a8648ce3d0301070322000362d5bd3372af75fe85a040715d0f502428e07046868b0bfdfa61d731afe44f26", + "private" : "612465c89a023ab17855b0a6bcebfd3febb53aef84138647b5352e02c10c346", + "shared" : "53020d908b0219328b658b525f26780e3ae12bcd952bb25a93bc0895e1714285", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 3, + "comment" : "edge case for shared secret", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000458fd4168a87795603e2b04390285bdca6e57de6027fe211dd9d25e2212d29e62080d36bd224d7405509295eed02a17150e03b314f96da37445b0d1d29377d12c", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "0000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "edge case for shared secret", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040f6d20c04261ecc3e92846acad48dc8ec5ee35ae0883f0d2ea71216906ee1c47c042689a996dd12830ae459382e94aac56b717af2e2080215f9e41949b1f52be", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "00000000000000000000000000000000ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "edge case for shared secret", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400c7defeb1a16236738e9a1123ba621bc8e9a3f2485b3f8ffde7f9ce98f5a8a1cb338c3912b1792f60c2b06ec5231e2d84b0e596e9b76d419ce105ece3791dbc", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "0000000000000000ffffffffffffffff00000000000000010000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "edge case for shared secret", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e9b98fb2c0ac045f8c76125ffd99eb8a5157be1d7db3e85d655ec1d8210288cf218df24fd2c2746be59df41262ef3a97d986744b2836748a7486230a319ffec0", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff0000000100000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "edge case for shared secret", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e9484e58f3331b66ffed6d90cb1c78065fa28cfba5c7dd4352013d3252ee4277bd7503b045a38b4b247b32c59593580f39e6abfa376c3dca20cf7f9cfb659e13", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "edge case for shared secret", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004767d7fbb84aa6a4db1079372644e42ecb2fec200c178822392cb8b950ffdd0c91c86853cafd09b52ba2f287f0ebaa26415a3cfabaf92c6a617a19988563d9dea", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "edge case for shared secret", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004c74d546f2fcc6dd392f85e5be167e358de908756b0c0bb01cb69d864ca083e1c93f959eece6e10ee11bd3934207d65ae28af68b092585a1509260eceb39b92ef", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "085ec5a4af40176b63189069aeffcb229c96d3e046e0283ed2f9dac21b15ad3c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "edge case for shared secret", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000434fc9f1e7a094cd29598d1841fa9613dbe82313d633a51d63fb6eff074cc9b9a4ecfd9f258c5c4d4210b49751213a24c596982bd1d54e0445443f21ef15492a5", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "190c25f88ad9ae3a098e6cffe6fd0b1bea42114eb0cedd5868a45c5fe277dff3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "edge case for shared secret", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d5c96efd1907fd48de2ad715acf82eae5c6690fe3efe16a78d61c68d3bfd10df03eac816b9e7b776192a3f5075887c0e225617505833ca997cda32fd0f673c5e", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "507442007322aa895340cba4abc2d730bfd0b16c2c79a46815f8780d2c55a2dd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "edge case for shared secret", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f475f503a770df72c45aedfe42c008f59aa57e72b232f26600bdd0353957cb20bdb8f6405b4918050a3549f44c07a8eba820cdce4ece699888c638df66f54f7c", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "5f177bfe19baaaee597e68b6a87a519e805e9d28a70cb72fd40f0fe5a754ba45", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "edge case for shared secret", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f3cb6754b7e2a86d064dfb9f903185aaa4c92b481c2c1a1ff276303bbc4183e49c318599b0984c3563df339311fe143a7d921ee75b755a52c6f804f897b809f7", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "7fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "edge case for shared secret", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cce13fbdc96a946dfb8c6d9ed762dbd1731630455689f57a437fee124dd54cecaef78026c653030cf2f314a67064236b0a354defebc5e90c94124e9bf5c4fc24", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "8000000000000000000000000000000000000000000000000000000000000004", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "edge case for shared secret", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047633dfd0ad06765097bc11bd5022b200df31f28c4ff0625421221ac7eeb6e6f4cb9c67693609ddd6f92343a5a1c635408240f4f8e27120c12554c7ff8c76e2fe", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "edge case for shared secret", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a386ace573f87558a68ead2a20088e3fe928bdae9e109446f93a078c15741f0421261e6db2bf12106e4c6bf85b9581b4c0302a526222f90abc5a549206b11011", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "edge case for shared secret", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048e7b50f7d8c44d5d3496c43141a502f4a43f153d03ad43eda8e39597f1d477b8647f3da67969b7f989ff4addc393515af40c82085ce1f2ee195412c6f583774f", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "edge case for shared secret", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004c827fb930fd51d926086191b502af83abb5f717debc8de29897a3934b2571ca05990c0597b0b7a2e42febd56b13235d1d408d76ed2c93b3facf514d902f6910a", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "ffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "y-coordinate of the public key is small", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cbc1b31b43f17dc200dd70c2944c04c6cb1b082820c234a300b05b7763844c74fde0a4ef93887469793270eb2ff148287da9265b0334f9e2609aac16e8ad503", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "7fffffffffffffffffffffffeecf2230ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "y-coordinate of the public key is small", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042830d96489ae24b79cad425056e82746f9e3f419ab9aa21ca1fbb11c7325e7d318abe66f575ee8a2f1c4a80e35260ae82ad7d6f661d15f06967930a585097ef7", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "000000000000000000000000111124f400000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "y-coordinate of the public key is small", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004450b6b6e2097178e9d2850109518d28eb3b6ded2922a5452003bc2e4a4ec775c894e90f0df1b0e6cadb03b9de24f6a22d1bd0a4a58cd645c273cae1c619bfd61", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "000000000000000000000001ea77d449ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "y-coordinate of the public key is large", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cbc1b31b43f17dc200dd70c2944c04c6cb1b082820c234a300b05b7763844c7b021f5b006c778ba686cd8f14d00eb7d78256d9b4fccb061d9f6553e91752afc", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "7fffffffffffffffffffffffeecf2230ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "y-coordinate of the public key is large", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042830d96489ae24b79cad425056e82746f9e3f419ab9aa21ca1fbb11c7325e7d3e754198fa8a1175e0e3b57f1cad9f517d528290a9e2ea0f96986cf5a7af68108", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "000000000000000000000000111124f400000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "y-coordinate of the public key is large", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004450b6b6e2097178e9d2850109518d28eb3b6ded2922a5452003bc2e4a4ec775c76b16f0e20e4f194524fc4621db095dd2e42f5b6a7329ba3d8c351e39e64029e", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "000000000000000000000001ea77d449ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "y-coordinate of the public key has many trailing 1's", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200049a0f0e3dd31417bbd9e298bc068ab6d5c36733af26ed67676f410c804b8b2ca1b02c82f3a61a376db795626e9400557112273a36cddb08caaa43953965454730", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "7fffffffffffffffffffffffca089011ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "y-coordinate of the public key has many trailing 1's", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048e5d22d5e53ec797c55ecd68a08a7c3361cd99ca7fad1a68ea802a6a4cb58a918ea7a07023ef67677024bd3841e187c64b30a30a3750eb2ee873fbe58fa1357b", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "0000000000000000000000001f6bd1e500000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "y-coordinate of the public key has many trailing 1's", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004293aa349b934ab2c839cf54b8a737df2304ef9b20fa494e31ad62b315dd6a53c118182b85ef466eb9a8e87f9661f7d017984c15ea82043f536d1ee6a6d95b509", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "000000000000000000000002099f55d5ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "y-coordinate of the public key has many trailing 0's", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200049a0f0e3dd31417bbd9e298bc068ab6d5c36733af26ed67676f410c804b8b2ca14fd37d0b59e5c893486a9d916bffaa8eedd8c5ca3224f73555bc6ac69abab8cf", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "7fffffffffffffffffffffffca089011ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "y-coordinate of the public key has many trailing 0's", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048e5d22d5e53ec797c55ecd68a08a7c3361cd99ca7fad1a68ea802a6a4cb58a9171585f8edc1098998fdb42c7be1e7839b4cf5cf6c8af14d1178c041a705eca84", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "0000000000000000000000001f6bd1e500000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "y-coordinate of the public key has many trailing 0's", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004293aa349b934ab2c839cf54b8a737df2304ef9b20fa494e31ad62b315dd6a53cee7e7d46a10b99156571780699e082fe867b3ea257dfbc0ac92e1195926a4af6", + "private" : "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a", + "shared" : "000000000000000000000002099f55d5ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000000000000000000000000000000000000000000000066485c780e2f83d72433bd5d84a06bb6541c2af31dae871728bf856a174f93f4", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "cfe4077c8730b1c9384581d36bff5542bc417c9eff5c2afcb98cc8829b2ce848", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000ffffffffffffffffffffffffffffffff4f2b92b4c596a5a47f8b041d2dea6043021ac77b9a80b1343ac9d778f4f8f733", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "49ae50fe096a6cd26698b78356b2c8adf1f6a3490f14e364629f7a0639442509", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000ffffffffffffffff0000000000000001000000000000000138120be6ab31edfa34768c4387d2f84fb4b0be8a9a985864a1575f4436bb37b0", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "5a1334572b2a711ead8b4653eb310cd8d9fd114399379a8f6b872e3b8fdda2d9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000ffffffff00000000ffffffff00000000ffffffff0000000100000000462c0466e41802238d6c925ecbefc747cfe505ea196af9a2d11b62850fce946e", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "c73755133b6b9b4b2a00631cbc7940ecbe6ec08f20448071422e3362f2556888", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff1582fa32e2d4a89dfcfb3d0b149f667dba3329490f4d64ee2ad586c0c9e8c508", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "06fa1059935e47a9fd667e13f469614eb257cc9a7e3fc599bfb92780d59b146d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010001684c8a9586ed6f9cbe447058a7da2108bab1e5e0a60d1f73e4e2e713f0a3dfe0", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "f237df4c10bd3e357971bb2b16b293566b7e355bdc8141d6c92cabc682983c45", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004085ec5a4af40176b63189069aeffcb229c96d3e046e0283ed2f9dac21b15ad3c7859f97cb6e203f46bf3438f61282325e94e681b60b5669788aeb0655bf19d38", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "d874b55678d0a04d216c31b02f3ad1f30c92caaf168f34e3a743356d9276e993", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004190c25f88ad9ae3a098e6cffe6fd0b1bea42114eb0cedd5868a45c5fe277dff321b8342ef077bc6724112403eaee5a15b4c31a71589f02ded09cd99cc5db9c83", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "11a8582057463fc76fda3ab8087eb0a420b0d601bb3134165a369646931e52a6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004507442007322aa895340cba4abc2d730bfd0b16c2c79a46815f8780d2c55a2dd4619d69f9940f51663aa12381bc7cf678bd1a72a49fbc11b0b69cb22d1af9f2d", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "4e173a80907f361fe5a5d335ba7685d5eba93e9dfc8d8fcdb1dcd2d2bde27507", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045f177bfe19baaaee597e68b6a87a519e805e9d28a70cb72fd40f0fe5a754ba4562ca1103f70a2006cd1f67f5f6a3580b29dc446abc90e0e910c1e05a9aa788cd", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "73220471ec8bad99a297db488a34a259f9bc891ffaf09922e6b5001f5df67018", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff2e2213caf03033e0fd0f7951154f6e6c3a9244a72faca65e9ce9eeb5c8e1cea9", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "55d0a203e22ffb523c8d2705060cee9d28308b51f184beefc518cff690bad346", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000480000000000000000000000000000000000000000000000000000000000000042be8789db81bb4870a9e60c5c18c80c83de464277281f1af1e640843a1a3148e", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "2518d846e577d95e9e7bc766cde7997cb887fb266d3a6cb598a839fd54aa2f4f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000000722540f8a471c379083c600b58fde4d95c7dcad5095f4219fc5e9bdde3c5cd39", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "bdb49f4bdf42ac64504e9ce677b3ec5c0a03828c5b3efad726005692d35c0f26", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff5df80fc6cae26b6c1952fbd00ed174ee1209d069335f5b48588e29e80b9191ad", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "f503ac65637e0f17cb4408961cb882c875e4c6ef7a548d2d52d8c2f681838c55", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff2c63650e6a5d332e2987dd09a79008e8faabbd37e49cb016bfb92c8cd0f5da77", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "e3c18e7d7377dc540bc45c08d389bdbe255fa80ca8faf1ef6b94d52049987d21", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff7a116c964a4cd60668bf89cffe157714a3ce21b93b3ca607c8a5b93ac54ffc0a", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "516d6d329b095a7c7e93b4023d4d05020c1445ef1ddcb3347b3a27d7d7f57265", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047fffffffffffffffffffffffeecf2230ffffffffffffffffffffffffffffffff00000001c7c30643abed0af0a49fe352cb483ff9b97dccdf427c658e8793240d", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "6fd26661851a8de3c6d06f834ef3acb8f2a5f9c136a985ffe10d5eeb51edcfa3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047fffffffffffffffffffffffeecf2230fffffffffffffffffffffffffffffffffffffffd383cf9bd5412f50f5b601cad34b7c00746823320bd839a71786cdbf2", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "6fd26661851a8de3c6d06f834ef3acb8f2a5f9c136a985ffe10d5eeb51edcfa3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047fffffffffffffffffffffffca089011ffffffffffffffffffffffffffffffff267bfdf8a61148decd80283732dd4c1095e4bb40b9658408208dc1147fffffff", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "44236c8b9505a19d48774a3903c0292759b0f826e6ac092ff898d87e53d353fc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047fffffffffffffffffffffffca089011ffffffffffffffffffffffffffffffffd984020659eeb722327fd7c8cd22b3ef6a1b44c0469a7bf7df723eeb80000000", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "44236c8b9505a19d48774a3903c0292759b0f826e6ac092ff898d87e53d353fc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000000111124f4000000000000000000000000000000000000000d12d381b0760b1c50be8acf859385052c7f53cde67ce13759de3123a0", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "f1f0e43b374feb7e7f96d4ffe7519fa8bb6c3cfd25f6f87dab2623d2a2d33851", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000000111124f400000000000000000000000000000000fffffff1ed2c7e5089f4e3af4175307a6c7afad480ac3219831ec8a621cedc5f", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "f1f0e43b374feb7e7f96d4ffe7519fa8bb6c3cfd25f6f87dab2623d2a2d33851", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000000000001f6bd1e5000000000000000000000000000000004096edd6871c320cb8a9f4531751105c97b4c257811bbc32963eaf39ffffffff", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "3ebbace1098a81949d5605dd94a7aa88dc396c2c23e01a9c8cca5bb07bfbb6a1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000000000001f6bd1e500000000000000000000000000000000bf69122878e3cdf447560bace8aeefa3684b3da97ee443cd69c150c600000000", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "3ebbace1098a81949d5605dd94a7aa88dc396c2c23e01a9c8cca5bb07bfbb6a1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000001ea77d449ffffffffffffffffffffffffffffffff000000007afbc0b325e820646dec622fb558a51c342aa257f4b6a8ec5ddf144f", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "1b085213a9c89d353e1111af078c38c502b7b4771efba51f589b5be243417bdc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000001ea77d449fffffffffffffffffffffffffffffffffffffffe85043f4dda17df9b92139dd04aa75ae4cbd55da80b495713a220ebb0", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "1b085213a9c89d353e1111af078c38c502b7b4771efba51f589b5be243417bdc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000002099f55d5ffffffffffffffffffffffffffffffff152c1a22d823a27855ed03f8e2ab5038bb1df4d87e43865f2daf6948ffffffff", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "67cb63566c7ceb12fdd85ce9d2f77c359242bbaa0ea1bf3cf510a4a26591d1f1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "edge cases for ephemeral key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000002099f55d5ffffffffffffffffffffffffffffffffead3e5dc27dc5d88aa12fc071d54afc744e20b2881bc79a0d25096b700000000", + "private" : "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48", + "shared" : "67cb63566c7ceb12fdd85ce9d2f77c359242bbaa0ea1bf3cf510a4a26591d1f1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "edge case private key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "3", + "shared" : "85a0b58519b28e70a694ec5198f72c4bfdabaa30a70f7143b5b1cd7536f716ca", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "edge case private key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "a329a7d80424ea2d6c904393808e510dfbb28155092f1bac284dceda1f13afe5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "edge case private key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "100000000000000000000000000000000000000000000000000000000000000", + "shared" : "bd26d0293e8851c51ebe0d426345683ae94026aca545282a4759faa85fde6687", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "edge case private key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "ea9350b2490a2010c7abf43fb1a38be729a2de375ea7a6ac34ff58cc87e51b6c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "edge case private key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "08000000000000000000000000000000000000000000000000000000000000000", + "shared" : "34eed3f6673d340b6f716913f6dfa36b5ac85fa667791e2d6a217b0c0b7ba807", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "edge case private key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e83f3b9cac2fc632551", + "shared" : "1354ce6692c9df7b6fc3119d47c56338afbedccb62faa546c0fe6ed4959e41c3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "edge case private key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3a9cac2fc632551", + "shared" : "fe7496c30d534995f0bf428b5471c21585aaafc81733916f0165597a55d12cb4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "edge case private key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b1cac2fc632551", + "shared" : "348bf8042e4edf1d03c8b36ab815156e77c201b764ed4562cfe2ee90638ffef5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "edge case private key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac1fc632551", + "shared" : "6e4ec5479a7c20a537501700484f6f433a8a8fe53c288f7a25c8e8c92d39e8dc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "edge case private key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f3", + "shared" : "f7407d61fdf581be4f564621d590ca9b7ba37f31396150f9922f1501da8c83ef", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 69, + "comment" : "edge case private key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632533", + "shared" : "82236fd272208693e0574555ca465c6cc512163486084fa57f5e1bd2e2ccc0b3", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 70, + "comment" : "edge case private key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632543", + "shared" : "06537149664dba1a9924654cb7f787ed224851b0df25ef53fcf54f8f26cd5f3f", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 71, + "comment" : "edge case private key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254b", + "shared" : "f2b38539bce995d443c7bfeeefadc9e42cc2c89c60bf4e86eac95d51987bd112", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 72, + "comment" : "edge case private key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "shared" : "85a0b58519b28e70a694ec5198f72c4bfdabaa30a70f7143b5b1cd7536f716ca", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "edge case private key", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", + "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f", + "shared" : "027b013a6f166db655d69d643c127ef8ace175311e667dff2520f5b5c75b7659", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 74, + "comment" : "CVE-2017-8932", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004023819813ac969847059028ea88a1f30dfbcde03fc791d3a252c6b41211882eaf93e4ae433cc12cf2a43fc0ef26400c0e125508224cdb649380f25479148a4ad", + "private" : "2a265f8bcbdcaf94d58519141e578124cb40d64a501fba9c11847b28965bc737", + "shared" : "4d4de80f1534850d261075997e3049321a0864082d24a917863366c0724f5ae3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "CVE-2017-8932", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cc11887b2d66cbae8f4d306627192522932146b42f01d3c6f92bd5c8ba739b06a2f08a029cd06b46183085bae9248b0ed15b70280c7ef13a457f5af382426031", + "private" : "313f72ff9fe811bf573176231b286a3bdb6f1b14e05c40146590727a71c3bccd", + "shared" : "831c3f6b5f762d2f461901577af41354ac5f228c2591f84f8a6e51e2e3f17991", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "point is not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "point is not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "point is not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000000000000000000000000000000000000000000000000000ffffffff00000001000000000000000000000000fffffffffffffffffffffffe", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "point is not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000000000000000000000000000000000000000000000000000ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "point is not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "point is not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "point is not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000000000000000000000000000000000000000000000000001ffffffff00000001000000000000000000000000fffffffffffffffffffffffe", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "point is not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000000000000000000000000000000000000000000000000001ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "point is not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000001000000000000000000000000fffffffffffffffffffffffe0000000000000000000000000000000000000000000000000000000000000000", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "point is not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000001000000000000000000000000fffffffffffffffffffffffe0000000000000000000000000000000000000000000000000000000000000001", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "point is not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000001000000000000000000000000fffffffffffffffffffffffeffffffff00000001000000000000000000000000fffffffffffffffffffffffe", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "point is not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000001000000000000000000000000fffffffffffffffffffffffeffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "point is not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "point is not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000001", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "point is not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000001000000000000000000000000fffffffffffffffffffffffe", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "point is not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "", + "public" : "3018301306072a8648ce3d020106082a8648ce3d030107030100", + "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "public point not on curve", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764c", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 94, + "comment" : "public point = (0,0)", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 95, + "comment" : "order = -115792089210356248762697446949407573529996955224135760342422259061068512044369", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f50221ff00000000ffffffff00000000000000004319055258e8617b0c46353d039cdaaf020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 96, + "comment" : "order = 0", + "public" : "308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5020100020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 97, + "comment" : "order = 1", + "public" : "308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5020101020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 98, + "comment" : "order = 26959946660873538060741835960514744168612397095220107664918121663170", + "public" : "3082012f3081e806072a8648ce3d02013081dc020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5021d00ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 99, + "comment" : "generator = (0,0)", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b04410400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 100, + "comment" : "generator not on curve", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f7022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 101, + "comment" : "cofactor = -1", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510201ff034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "invalid", + "flags" : [ + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 102, + "comment" : "cofactor = 0", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020100034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "invalid", + "flags" : [ + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 103, + "comment" : "cofactor = 2", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020102034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 104, + "comment" : "cofactor = 115792089210356248762697446949407573529996955224135760342422259061068512044369", + "public" : "308201553082010d06072a8648ce3d020130820100020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "invalid", + "flags" : [ + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 105, + "comment" : "cofactor = None", + "public" : "308201303081e906072a8648ce3d02013081dd020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 106, + "comment" : "modified prime", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100fd091059a6893635f900e9449d63f572b2aebc4cff7b4e5e33f1b200e8bbc1453044042002f6efa55976c9cb06ff16bb629c0a8d4d5143b40084b1a1cc0e4dff17443eb704205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441040000000000000000000006597fa94b1fd90000000000000000000000000000021b8c7dd77f9a95627922eceefea73f028f1ec95ba9b8fa95a3ad24bdf9fff414022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200040000000000000000000006597fa94b1fd90000000000000000000000000000021b8c7dd77f9a95627922eceefea73f028f1ec95ba9b8fa95a3ad24bdf9fff414", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "cea0fbd8f20abc8cf8127c132e29756d25ff1530a88bf5c9e22dc1c137c36be9", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 107, + "comment" : "using secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 108, + "comment" : "using secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 109, + "comment" : "a = 0", + "public" : "308201143081cd06072a8648ce3d02013081c1020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff302504010004201b95c2f46065dbf0f3ff09153e4748ed71595e0774ba8e25c364ff1e6be039b70441041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "d003f5cc83852584061f7a8a28bcb5671ecbda096e16e7accfa8f8d311a3db7a", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 110, + "comment" : "public key of order 3", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff304404205a715b6a9ef865f5058e21e20b575d9d585533bd588a9d5fb61cd69534b4e581042036a1a972d367abf9054cce4d54424592882c345283dc9cf0ec47231711f56b22044104d68a3dfbaeb2d277742e833c51625c2ded89b13ea1ec5d33b9cbca77334d79ec89c97eb4143dc3c88d1925fc4f30baba454bb201e5c0d3158ec98bb1fd045e12022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255102010103420004d68a3dfbaeb2d277742e833c51625c2ded89b13ea1ec5d33b9cbca77334d79ec7636814aebc23c3872e6da03b0cf4545bab44dff1a3f2cea7136744e02fba1ed", + "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", + "shared" : "f0652d1cc135c763cd51e429d320a6101634d13b59790c3b1db0063f9f00dc99", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 111, + "comment" : "Public key uses wrong curve: secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a00042af270d2a6030e3dd38cc46e7d719f176c2ca4eb04d7e8b84290c8edbcaed964ebe226b2d7ce17251622804c0d3b7adce020a3cdc97cac6c", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "Public key uses wrong curve: secp384r1", + "public" : "3076301006072a8648ce3d020106052b81040022036200041f17901e731b06f349b6e9d7d17d45e8a2b46115a47485be16197932db87b39405b5c941b36fd61b9ef7dd20878e129e55a2277099c601dcdb3747f80ad6e166116378e1ebce2c95744a0986128cfeeaac7f90b71787d9a1cfe417cd4c8f6af5", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "Public key uses wrong curve: secp521r1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400ed76e5888428fad409ff203ab298b0f24827c091939ae0f9b1245d865ac5fbcd2749f9ae6c90fa8e29414d1bc7dc7b3c4aca904cd824484421cc66fe6af43bdfd200c1f790a0b3ae994937f91b6bdb9778b08c83ecadb8cba22a78c37bf565dac164f18e719be0ef890ee5cbf20e17fcfc9a5585e5416470b9862f82fb769339994f4e", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "Public key uses wrong curve: secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a034200048028d16082b07696d4aa4aab9d6b1f1463435ac097900631108f9888e13da67c4841fd8dd3ced6e7ad8c6fc656621c2f93d3db0eb29d48d1423154519865dbc1", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "Public key uses wrong curve: brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004a6bae3d155c1f9ca263928c986ede69acefd0dd9b3a19d2b9f4b0a3a66bea5d167318dcc028945fc1b40c60ce716ba2d414a743c6b856a6f", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "Public key uses wrong curve: brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200045d3ddbbb9bc071d8b59855c74bdf3541ae4cb6c1a24ec439034df7abde16a346523edf6a67896b304cb2cd2a083eec2b16935bbc910e85ec6eae38b50230bf70", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "Public key uses wrong curve: brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010903520004a43c6ef2500723d54c1fc88f8844d83445ca5a0f585c10b8eb3f022d47d0e84862b7f5cbf97d352d4348ca730f600f2258d1d192da223f6ba83a7cc0d6da598d55c2b77824d326c8df000b8fff156d2c", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "Public key uses wrong curve: brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b036200042391c062833d1e6d89ec256cf4a3989534c1ead5e1e14ffae933a53f962857e4713087e1b3d65ac79634c71577af24698b5ce959183835551f7b08aef7853378c299930b360813fd58d5e4da8b37d5a7473e891ee11cb02881bd848b364fb7d5", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "Public key uses wrong curve: brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000484beae85096640953c1fd6ebbc32697263d53f89943cbaf14432061aea8c0318acbd9389ab1d2e904fa0e081d08cfabb614ed9bca618211142d94623c14b476a25e47abf98fd3b1da1417dfc2e2cfc8424b16ea14dd45e1422be7d4e0a5cc7f4d4ab5f198cdbaaa3f642ec6361842cbe869382ee78cd596ff5e740d9ec2c3ad6", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "Public key uses wrong curve: brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00042b0a1a858ffc44e7752940731d378f96570837e279ea3948fe00cff8b5f89adb4e2fe6f8781ba6426364f4590b34dd79fc80629de4a86084", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "Public key uses wrong curve: brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b2403030208010108034200043037c01b4a5ac53742e3f5528dffb0f010ab6ebeb08d792b32e19e9006ca331a024b67698d7cf4b575ccd9389441d5c640b77c63771cef1bd85675361c6602a4", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "Public key uses wrong curve: brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200040f0fd972a495a140124a4019291a20f5b39fb755c126bf268643bb3091eca44f2a3cda1dead6ab1f4fe08a4b3872423f71e5bf96b1c20bc0ca73b7e2c134cc14a5f77bc838ebcf01084da3bf15663536", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "Public key uses wrong curve: brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c0362000403b65faf5a6bf74bd5c166278a4b566c6c705ac6363e61f3b0699e116d3c5b19e8b7021b75b005f78a8cea8de34c49397f9b3b2bfc8706eb8163c802371eff7dfc825c40aa84dd9d1c4b34615ee5ae28c6c05d58d2a8ccc3786382b712d3bcda", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "Public key uses wrong curve: brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200047504d660943a69ab043378e44c034896534a346e0e95f35fcaad3503b490856bfb20a753ecabc6d7bfeec28d057f919923b7d3c086953eb16c5bd287b59788db72dbb7c273854294c927ea7eca205aae2f0830e5faaddad8316231bfc3572c85c33cb7054e04c8936e3ce059c907e59f40593444e590b31820bc1f514ed0ec8a", + "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "invalid public key", + "public" : "3039301306072a8648ce3d020106082a8648ce3d03010703220002fd4bf61763b46581fd9174d623516cf3c81edd40e29ffa2777fb6cb0ae3ce535", + "private" : "6f953faff3599e6c762d7f4cabfeed092de2add1df1bc5748c6cbb725cf35458", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 126, + "comment" : "public key is a low order point on twist", + "public" : "3039301306072a8648ce3d020106082a8648ce3d03010703220003efdde3b32872a9effcf3b94cbf73aa7b39f9683ece9121b9852167f4e3da609b", + "private" : "0d27edf0ff5b6b6b465753e7158370332c153b468a1be087ad0f490bdb99e5f02", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 127, + "comment" : "public key is a low order point on twist", + "public" : "3039301306072a8648ce3d020106082a8648ce3d03010703220002efdde3b32872a9effcf3b94cbf73aa7b39f9683ece9121b9852167f4e3da609b", + "private" : "0d27edf0ff5b6b6b465753e7158370332c153b468a1be087ad0f490bdb99e5f03", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 128, + "comment" : "public key is a low order point on twist", + "public" : "3039301306072a8648ce3d020106082a8648ce3d03010703220002c49524b2adfd8f5f972ef554652836e2efb2d306c6d3b0689234cec93ae73db5", + "private" : "095ead84540c2d027aa3130ff1b47888cc1ed67e8dda46156e71ce0991791e835", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 129, + "comment" : "public key is a low order point on twist", + "public" : "3039301306072a8648ce3d020106082a8648ce3d0301070322000318f9bae7747cd844e98525b7ccd0daf6e1d20a818b2175a9a91e4eae5343bc98", + "private" : "0a8681ef67fb1f189647d95e8db00c52ceef6d41a85ba0a5bd74c44e8e62c8aa4", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 130, + "comment" : "public key is a low order point on twist", + "public" : "3039301306072a8648ce3d020106082a8648ce3d0301070322000218f9bae7747cd844e98525b7ccd0daf6e1d20a818b2175a9a91e4eae5343bc98", + "private" : "0a8681ef67fb1f189647d95e8db00c52ceef6d41a85ba0a5bd74c44e8e62c8aa5", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 131, + "comment" : "public key is a low order point on twist", + "public" : "3039301306072a8648ce3d020106082a8648ce3d03010703220003c49524b2adfd8f5f972ef554652836e2efb2d306c6d3b0689234cec93ae73db5", + "private" : "095ead84540c2d027aa3130ff1b47888cc1ed67e8dda46156e71ce0991791e834", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 132, + "comment" : "long form encoding of length", + "public" : "308159301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 133, + "comment" : "long form encoding of length", + "public" : "305a30811306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 134, + "comment" : "long form encoding of length", + "public" : "305a30140681072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 135, + "comment" : "long form encoding of length", + "public" : "305a301406072a8648ce3d02010681082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 136, + "comment" : "long form encoding of length", + "public" : "305a301306072a8648ce3d020106082a8648ce3d03010703814200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 137, + "comment" : "length contains leading 0", + "public" : "30820059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 138, + "comment" : "length contains leading 0", + "public" : "305b3082001306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 139, + "comment" : "length contains leading 0", + "public" : "305b3015068200072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 140, + "comment" : "length contains leading 0", + "public" : "305b301506072a8648ce3d0201068200082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 141, + "comment" : "length contains leading 0", + "public" : "305b301306072a8648ce3d020106082a8648ce3d0301070382004200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 142, + "comment" : "wrong length", + "public" : "305a301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 143, + "comment" : "wrong length", + "public" : "3058301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 144, + "comment" : "wrong length", + "public" : "3059301406072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 145, + "comment" : "wrong length", + "public" : "3059301206072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 146, + "comment" : "wrong length", + "public" : "3059301306082a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 147, + "comment" : "wrong length", + "public" : "3059301306062a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 148, + "comment" : "wrong length", + "public" : "3059301306072a8648ce3d020106092a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 149, + "comment" : "wrong length", + "public" : "3059301306072a8648ce3d020106072a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 150, + "comment" : "wrong length", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034300042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 151, + "comment" : "wrong length", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034100042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 152, + "comment" : "uint32 overflow in length", + "public" : "30850100000059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 153, + "comment" : "uint32 overflow in length", + "public" : "305e3085010000001306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 154, + "comment" : "uint32 overflow in length", + "public" : "305e3018068501000000072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 155, + "comment" : "uint32 overflow in length", + "public" : "305e301806072a8648ce3d0201068501000000082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 156, + "comment" : "uint32 overflow in length", + "public" : "305e301306072a8648ce3d020106082a8648ce3d0301070385010000004200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 157, + "comment" : "uint64 overflow in length", + "public" : "3089010000000000000059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 158, + "comment" : "uint64 overflow in length", + "public" : "3062308901000000000000001306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 159, + "comment" : "uint64 overflow in length", + "public" : "3062301c06890100000000000000072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 160, + "comment" : "uint64 overflow in length", + "public" : "3062301c06072a8648ce3d020106890100000000000000082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 161, + "comment" : "uint64 overflow in length", + "public" : "3062301306072a8648ce3d020106082a8648ce3d030107038901000000000000004200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 162, + "comment" : "length = 2**31 - 1", + "public" : "30847fffffff301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 163, + "comment" : "length = 2**31 - 1", + "public" : "305d30847fffffff06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 164, + "comment" : "length = 2**31 - 1", + "public" : "305d301706847fffffff2a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 165, + "comment" : "length = 2**31 - 1", + "public" : "305d301706072a8648ce3d020106847fffffff2a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 166, + "comment" : "length = 2**31 - 1", + "public" : "305d301306072a8648ce3d020106082a8648ce3d03010703847fffffff00042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 167, + "comment" : "length = 2**32 - 1", + "public" : "3084ffffffff301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 168, + "comment" : "length = 2**32 - 1", + "public" : "305d3084ffffffff06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 169, + "comment" : "length = 2**32 - 1", + "public" : "305d30170684ffffffff2a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 170, + "comment" : "length = 2**32 - 1", + "public" : "305d301706072a8648ce3d02010684ffffffff2a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 171, + "comment" : "length = 2**32 - 1", + "public" : "305d301306072a8648ce3d020106082a8648ce3d0301070384ffffffff00042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 172, + "comment" : "length = 2**40 - 1", + "public" : "3085ffffffffff301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 173, + "comment" : "length = 2**40 - 1", + "public" : "305e3085ffffffffff06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 174, + "comment" : "length = 2**40 - 1", + "public" : "305e30180685ffffffffff2a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 175, + "comment" : "length = 2**40 - 1", + "public" : "305e301806072a8648ce3d02010685ffffffffff2a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 176, + "comment" : "length = 2**40 - 1", + "public" : "305e301306072a8648ce3d020106082a8648ce3d0301070385ffffffffff00042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 177, + "comment" : "length = 2**64 - 1", + "public" : "3088ffffffffffffffff301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 178, + "comment" : "length = 2**64 - 1", + "public" : "30613088ffffffffffffffff06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 179, + "comment" : "length = 2**64 - 1", + "public" : "3061301b0688ffffffffffffffff2a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 180, + "comment" : "length = 2**64 - 1", + "public" : "3061301b06072a8648ce3d02010688ffffffffffffffff2a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 181, + "comment" : "length = 2**64 - 1", + "public" : "3061301306072a8648ce3d020106082a8648ce3d0301070388ffffffffffffffff00042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 182, + "comment" : "incorrect length", + "public" : "30ff301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 183, + "comment" : "incorrect length", + "public" : "305930ff06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 184, + "comment" : "incorrect length", + "public" : "3059301306ff2a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 185, + "comment" : "incorrect length", + "public" : "3059301306072a8648ce3d020106ff2a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 186, + "comment" : "incorrect length", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703ff00042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 187, + "comment" : "indefinite length without termination", + "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 188, + "comment" : "indefinite length without termination", + "public" : "3059308006072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 189, + "comment" : "indefinite length without termination", + "public" : "3059301306802a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 190, + "comment" : "indefinite length without termination", + "public" : "3059301306072a8648ce3d020106802a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 191, + "comment" : "indefinite length without termination", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107038000042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 192, + "comment" : "removing sequence", + "public" : "", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 193, + "comment" : "removing sequence", + "public" : "3044034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 194, + "comment" : "lonely sequence tag", + "public" : "30", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 195, + "comment" : "lonely sequence tag", + "public" : "304530034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 196, + "comment" : "appending 0's to sequence", + "public" : "305b301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0000", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 197, + "comment" : "appending 0's to sequence", + "public" : "305b301506072a8648ce3d020106082a8648ce3d0301070000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 198, + "comment" : "prepending 0's to sequence", + "public" : "305b0000301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 199, + "comment" : "prepending 0's to sequence", + "public" : "305b3015000006072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 200, + "comment" : "appending unused 0's to sequence", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0000", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 201, + "comment" : "appending unused 0's to sequence", + "public" : "305b301306072a8648ce3d020106082a8648ce3d0301070000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 202, + "comment" : "appending null value to sequence", + "public" : "305b301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0500", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 203, + "comment" : "appending null value to sequence", + "public" : "305b301506072a8648ce3d020106082a8648ce3d0301070500034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 204, + "comment" : "including garbage", + "public" : "305e4981773059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 205, + "comment" : "including garbage", + "public" : "305d25003059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 206, + "comment" : "including garbage", + "public" : "305b3059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0004deadbeef", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 207, + "comment" : "including garbage", + "public" : "305e3018498177301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 208, + "comment" : "including garbage", + "public" : "305d30172500301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 209, + "comment" : "including garbage", + "public" : "30613015301306072a8648ce3d020106082a8648ce3d0301070004deadbeef034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 210, + "comment" : "including garbage", + "public" : "305e3018260c49817706072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 211, + "comment" : "including garbage", + "public" : "305d3017260b250006072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 212, + "comment" : "including garbage", + "public" : "3061301b260906072a8648ce3d02010004deadbeef06082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 213, + "comment" : "including garbage", + "public" : "305e301806072a8648ce3d0201260d49817706082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 214, + "comment" : "including garbage", + "public" : "305d301706072a8648ce3d0201260c250006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 215, + "comment" : "including garbage", + "public" : "3061301b06072a8648ce3d0201260a06082a8648ce3d0301070004deadbeef034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 216, + "comment" : "including garbage", + "public" : "305e301306072a8648ce3d020106082a8648ce3d0301072347498177034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 217, + "comment" : "including garbage", + "public" : "305d301306072a8648ce3d020106082a8648ce3d03010723462500034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 218, + "comment" : "including garbage", + "public" : "3061301306072a8648ce3d020106082a8648ce3d0301072344034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0004deadbeef", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 219, + "comment" : "including undefined tags", + "public" : "3061aa00bb00cd003059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 220, + "comment" : "including undefined tags", + "public" : "305faa02aabb3059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 221, + "comment" : "including undefined tags", + "public" : "3061301baa00bb00cd00301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 222, + "comment" : "including undefined tags", + "public" : "305f3019aa02aabb301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 223, + "comment" : "including undefined tags", + "public" : "3061301b260faa00bb00cd0006072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 224, + "comment" : "including undefined tags", + "public" : "305f3019260daa02aabb06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 225, + "comment" : "including undefined tags", + "public" : "3061301b06072a8648ce3d02012610aa00bb00cd0006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 226, + "comment" : "including undefined tags", + "public" : "305f301906072a8648ce3d0201260eaa02aabb06082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 227, + "comment" : "including undefined tags", + "public" : "3061301306072a8648ce3d020106082a8648ce3d030107234aaa00bb00cd00034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 228, + "comment" : "including undefined tags", + "public" : "305f301306072a8648ce3d020106082a8648ce3d0301072348aa02aabb034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 229, + "comment" : "truncated length of sequence", + "public" : "3081", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 230, + "comment" : "truncated length of sequence", + "public" : "30463081034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 231, + "comment" : "Replacing sequence with NULL", + "public" : "0500", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 232, + "comment" : "Replacing sequence with NULL", + "public" : "30460500034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 233, + "comment" : "changing tag value of sequence", + "public" : "2e59301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 234, + "comment" : "changing tag value of sequence", + "public" : "2f59301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 235, + "comment" : "changing tag value of sequence", + "public" : "3159301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 236, + "comment" : "changing tag value of sequence", + "public" : "3259301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 237, + "comment" : "changing tag value of sequence", + "public" : "ff59301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 238, + "comment" : "changing tag value of sequence", + "public" : "30592e1306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 239, + "comment" : "changing tag value of sequence", + "public" : "30592f1306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 240, + "comment" : "changing tag value of sequence", + "public" : "3059311306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 241, + "comment" : "changing tag value of sequence", + "public" : "3059321306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 242, + "comment" : "changing tag value of sequence", + "public" : "3059ff1306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 243, + "comment" : "dropping value of sequence", + "public" : "3000", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 244, + "comment" : "dropping value of sequence", + "public" : "30463000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 245, + "comment" : "truncate sequence", + "public" : "3058301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add6", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 246, + "comment" : "truncate sequence", + "public" : "30581306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 247, + "comment" : "truncate sequence", + "public" : "3058301206072a8648ce3d020106082a8648ce3d0301034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 248, + "comment" : "truncate sequence", + "public" : "30583012072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 249, + "comment" : "indefinite length", + "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0000", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 250, + "comment" : "indefinite length", + "public" : "305b308006072a8648ce3d020106082a8648ce3d0301070000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 251, + "comment" : "indefinite length with truncated delimiter", + "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b00", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 252, + "comment" : "indefinite length with truncated delimiter", + "public" : "305a308006072a8648ce3d020106082a8648ce3d03010700034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 253, + "comment" : "indefinite length with additional element", + "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b05000000", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 254, + "comment" : "indefinite length with additional element", + "public" : "305d308006072a8648ce3d020106082a8648ce3d03010705000000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 255, + "comment" : "indefinite length with truncated element", + "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b060811220000", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 256, + "comment" : "indefinite length with truncated element", + "public" : "305f308006072a8648ce3d020106082a8648ce3d030107060811220000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 257, + "comment" : "indefinite length with garbage", + "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0000fe02beef", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 258, + "comment" : "indefinite length with garbage", + "public" : "305f308006072a8648ce3d020106082a8648ce3d0301070000fe02beef034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 259, + "comment" : "indefinite length with nonempty EOC", + "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0002beef", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 260, + "comment" : "indefinite length with nonempty EOC", + "public" : "305d308006072a8648ce3d020106082a8648ce3d0301070002beef034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 261, + "comment" : "prepend empty sequence", + "public" : "305b3000301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 262, + "comment" : "prepend empty sequence", + "public" : "305b3015300006072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 263, + "comment" : "append empty sequence", + "public" : "305b301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b3000", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 264, + "comment" : "append empty sequence", + "public" : "305b301506072a8648ce3d020106082a8648ce3d0301073000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 265, + "comment" : "sequence of sequence", + "public" : "305b3059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 266, + "comment" : "sequence of sequence", + "public" : "305b3015301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 267, + "comment" : "truncated sequence", + "public" : "3015301306072a8648ce3d020106082a8648ce3d030107", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 268, + "comment" : "truncated sequence", + "public" : "304f300906072a8648ce3d0201034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 269, + "comment" : "repeat element in sequence", + "public" : "30819d301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 270, + "comment" : "repeat element in sequence", + "public" : "3063301d06072a8648ce3d020106082a8648ce3d03010706082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 271, + "comment" : "removing oid", + "public" : "3050300a06082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 272, + "comment" : "lonely oid tag", + "public" : "3051300b0606082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 273, + "comment" : "lonely oid tag", + "public" : "3050300a06072a8648ce3d020106034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 274, + "comment" : "appending 0's to oid", + "public" : "305b301506092a8648ce3d0201000006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 275, + "comment" : "appending 0's to oid", + "public" : "305b301506072a8648ce3d0201060a2a8648ce3d0301070000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 276, + "comment" : "prepending 0's to oid", + "public" : "305b3015060900002a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 277, + "comment" : "prepending 0's to oid", + "public" : "305b301506072a8648ce3d0201060a00002a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 278, + "comment" : "appending unused 0's to oid", + "public" : "305b301506072a8648ce3d0201000006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 279, + "comment" : "appending null value to oid", + "public" : "305b301506092a8648ce3d0201050006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 280, + "comment" : "appending null value to oid", + "public" : "305b301506072a8648ce3d0201060a2a8648ce3d0301070500034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 281, + "comment" : "truncated length of oid", + "public" : "3052300c068106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 282, + "comment" : "truncated length of oid", + "public" : "3051300b06072a8648ce3d02010681034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 283, + "comment" : "Replacing oid with NULL", + "public" : "3052300c050006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 284, + "comment" : "Replacing oid with NULL", + "public" : "3051300b06072a8648ce3d02010500034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 285, + "comment" : "changing tag value of oid", + "public" : "3059301304072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 286, + "comment" : "changing tag value of oid", + "public" : "3059301305072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 287, + "comment" : "changing tag value of oid", + "public" : "3059301307072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 288, + "comment" : "changing tag value of oid", + "public" : "3059301308072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 289, + "comment" : "changing tag value of oid", + "public" : "30593013ff072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 290, + "comment" : "changing tag value of oid", + "public" : "3059301306072a8648ce3d020104082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 291, + "comment" : "changing tag value of oid", + "public" : "3059301306072a8648ce3d020105082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 292, + "comment" : "changing tag value of oid", + "public" : "3059301306072a8648ce3d020107082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 293, + "comment" : "changing tag value of oid", + "public" : "3059301306072a8648ce3d020108082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 294, + "comment" : "changing tag value of oid", + "public" : "3059301306072a8648ce3d0201ff082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 295, + "comment" : "dropping value of oid", + "public" : "3052300c060006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 296, + "comment" : "dropping value of oid", + "public" : "3051300b06072a8648ce3d02010600034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 297, + "comment" : "modify first byte of oid", + "public" : "305930130607288648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 298, + "comment" : "modify first byte of oid", + "public" : "3059301306072a8648ce3d02010608288648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 299, + "comment" : "modify last byte of oid", + "public" : "3059301306072a8648ce3d028106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 300, + "comment" : "modify last byte of oid", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030187034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 301, + "comment" : "truncate oid", + "public" : "3058301206062a8648ce3d0206082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 302, + "comment" : "truncate oid", + "public" : "3058301206068648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 303, + "comment" : "truncate oid", + "public" : "3058301206072a8648ce3d020106072a8648ce3d0301034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 304, + "comment" : "truncate oid", + "public" : "3058301206072a8648ce3d020106078648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 305, + "comment" : "wrong oid", + "public" : "305c3016060a3262306530333032316106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 306, + "comment" : "wrong oid", + "public" : "3064301e061236303836343830313635303330343032303106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 307, + "comment" : "wrong oid", + "public" : "305b301506072a8648ce3d0201060a32623065303330323161034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 308, + "comment" : "wrong oid", + "public" : "3063301d06072a8648ce3d02010612363038363438303136353033303430323031034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 309, + "comment" : "longer oid", + "public" : "3062301c06103261383634386365336430323031303106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 310, + "comment" : "longer oid", + "public" : "3063301d06072a8648ce3d02010612326138363438636533643033303130373031034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 311, + "comment" : "oid with modified node", + "public" : "3060301a060e326138363438636533643032313106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 312, + "comment" : "oid with modified node", + "public" : "3068302206163261383634386365336430323838383038303830303106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 313, + "comment" : "oid with modified node", + "public" : "3061301b06072a8648ce3d0201061032613836343863653364303330313137034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 314, + "comment" : "oid with modified node", + "public" : "3069302306072a8648ce3d02010618326138363438636533643033303138383830383038303037034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 315, + "comment" : "large integer in oid", + "public" : "3072302c0620326138363438636533643032383238303830383038303830383038303830303106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 316, + "comment" : "large integer in oid", + "public" : "3073302d06072a8648ce3d0201062232613836343863653364303330313832383038303830383038303830383038303037034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 317, + "comment" : "oid with invalid node", + "public" : "3063301d0611326138363438636533643032303165303306082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 318, + "comment" : "oid with invalid node", + "public" : "305a301406082a808648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 319, + "comment" : "oid with invalid node", + "public" : "3064301e06072a8648ce3d0201061332613836343863653364303330313037653033034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 320, + "comment" : "oid with invalid node", + "public" : "305a301406072a8648ce3d020106092a808648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 321, + "comment" : "lonely bit string tag", + "public" : "3016301306072a8648ce3d020106082a8648ce3d03010703", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 322, + "comment" : "appending 0's to bit string", + "public" : "305b301306072a8648ce3d020106082a8648ce3d030107034400042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0000", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 323, + "comment" : "prepending 0's to bit string", + "public" : "305b301306072a8648ce3d020106082a8648ce3d0301070344000000042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 324, + "comment" : "appending null value to bit string", + "public" : "305b301306072a8648ce3d020106082a8648ce3d030107034400042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0500", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 325, + "comment" : "truncated length of bit string", + "public" : "3017301306072a8648ce3d020106082a8648ce3d0301070381", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 326, + "comment" : "Replacing bit string with NULL", + "public" : "3017301306072a8648ce3d020106082a8648ce3d0301070500", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 327, + "comment" : "changing tag value of bit string", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107014200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 328, + "comment" : "changing tag value of bit string", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107024200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 329, + "comment" : "changing tag value of bit string", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107044200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 330, + "comment" : "changing tag value of bit string", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107054200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 331, + "comment" : "changing tag value of bit string", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107ff4200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 332, + "comment" : "dropping value of bit string", + "public" : "3017301306072a8648ce3d020106082a8648ce3d0301070300", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 333, + "comment" : "modify first byte of bit string", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034202042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 334, + "comment" : "modify last byte of bit string", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add6eb", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 335, + "comment" : "truncate bit string", + "public" : "3058301306072a8648ce3d020106082a8648ce3d030107034100042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add6", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 336, + "comment" : "truncate bit string", + "public" : "3058301306072a8648ce3d020106082a8648ce3d0301070341042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 337, + "comment" : "declaring bits as unused in a bit-string", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034201042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 338, + "comment" : "unused bits in a bit-string", + "public" : "305d301306072a8648ce3d020106082a8648ce3d030107034620042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b01020304", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 339, + "comment" : "unused bits in empty bit-string", + "public" : "3018301306072a8648ce3d020106082a8648ce3d030107030103", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 340, + "comment" : "128 unused bits", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034280042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + } + ] + } + ] +} diff --git a/tests/test_ec.ml b/tests/test_ec.ml new file mode 100644 index 00000000..df2428f3 --- /dev/null +++ b/tests/test_ec.ml @@ -0,0 +1,222 @@ +module Testable = struct + let fiat_error = Alcotest.testable Mirage_crypto_ec.pp_error ( = ) + + let ok_or_error = Alcotest.result Alcotest.unit fiat_error +end + +let key_pair_of_hex h = Mirage_crypto_ec.gen_key ~rng:(fun _ -> Hex.to_cstruct h) + +let scalar_of_hex h = fst (key_pair_of_hex h) + +let pp_hex_le fmt cs = + let n = Cstruct.len cs in + for i = n - 1 downto 0 do + let byte = Cstruct.get_uint8 cs i in + Format.fprintf fmt "%02x" byte + done + +let pp_result ppf = function + | Ok cs -> pp_hex_le ppf cs + | Error e -> Format.fprintf ppf "%a" Mirage_crypto_ec.pp_error e + +let key_exchange = + let test ~name d p ~expected = + ( name, + `Quick, + fun () -> + Mirage_crypto_ec.key_exchange d p + |> Format.asprintf "%a" pp_result + |> Alcotest.check Alcotest.string __LOC__ expected ) + in + let d_a, p_a = + key_pair_of_hex + (`Hex "200102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f") + in + let d_b, p_b = + key_pair_of_hex + (`Hex "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f") + in + [ + test ~name:"b*A" d_b p_a + ~expected: + "2e3e4065a62a7f425aaf8aae3d158f367c733300b5002e0b62f4bc6260789e1b"; + test ~name:"a*B" d_a p_b + ~expected: + "2e3e4065a62a7f425aaf8aae3d158f367c733300b5002e0b62f4bc6260789e1b"; + test ~name:"a*A" d_a p_a + ~expected: + "2ea4e810837da217a5bfd05f01d12459eeda830b6e0dec7f8afa425c5b55c507"; + test ~name:"b*B" d_b p_b + ~expected: + "a7666bcc3818472194460f7df22d80a5886da0e1679eac930175ce1ff733c7ca"; + ] + +let scalar_mult = + let test ~n ~scalar ~point ~expected = + let scalar = scalar_of_hex scalar in + let point = Hex.to_cstruct point in + ( Printf.sprintf "Scalar mult (#%d)" n, + `Quick, + fun () -> + Mirage_crypto_ec.key_exchange scalar point + |> Format.asprintf "%a" pp_result + |> Alcotest.check Alcotest.string __LOC__ expected ) + in + let point = + `Hex + "046B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C2964FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5" + in + [ + test ~n:0 + ~scalar: + (`Hex + "0000000000000000000000000000000000000000000000000000000000000001") + ~point + ~expected: + "96c298d84539a1f4a033eb2d817d0377f240a463e5e6bcf847422ce1f2d1176b"; + test ~n:1 + ~scalar: + (`Hex + "0000000000000000000000000000000000000000000000000000000000000002") + ~point + ~expected: + "78996647fc480ba6351bf277e26989c0c31ab5040338528a7e4f038d187bf27c"; + test ~n:2 + ~scalar: + (`Hex + "0000000000000000000000000000000000000000000000000000000000000004") + ~point + ~expected: + "5208036b44029350ef965578dbe21f03d02be69e65de2da0bb8fd032354a53e2"; + test ~n:3 + ~scalar: + (`Hex + "0612465c89a023ab17855b0a6bcebfd3febb53aef84138647b5352e02c10c346") + ~point: + (`Hex + "0462d5bd3372af75fe85a040715d0f502428e07046868b0bfdfa61d731afe44f26ac333a93a9e70a81cd5a95b5bf8d13990eb741c8c38872b4a07d275a014e30cf") + ~expected: + "854271e19508bc935ab22b95cd2be13a0e78265f528b658b3219028b900d0253"; + test ~n:4 + ~scalar: + (`Hex + "0a0d622a47e48f6bc1038ace438c6f528aa00ad2bd1da5f13ee46bf5f633d71a") + ~point: + (`Hex + "043cbc1b31b43f17dc200dd70c2944c04c6cb1b082820c234a300b05b7763844c74fde0a4ef93887469793270eb2ff148287da9265b0334f9e2609aac16e8ad503") + ~expected: + "ffffffffffffffffffffffffffffffff3022cfeeffffffffffffffffffffff7f"; + test ~n:5 + ~scalar: + (`Hex + "55d55f11bb8da1ea318bca7266f0376662441ea87270aa2077f1b770c4854a48") + ~point: + (`Hex + "04000000000000000000000000000000000000000000000000000000000000000066485c780e2f83d72433bd5d84a06bb6541c2af31dae871728bf856a174f93f4") + ~expected: + "48e82c9b82c88cb9fc2a5cff9e7c41bc4255ff6bd3814538c9b130877c07e4cf"; + ] + +let to_ok_or_error = function Ok _ -> Ok () | Error _ as e -> e + +let point_validation = + let test ~name ~x ~y ~expected = + let scalar = + scalar_of_hex + (`Hex + "000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f") + in + let point = + Cstruct.concat [ Cstruct.of_hex "04"; Hex.to_cstruct x; Hex.to_cstruct y ] + in + ( name, + `Quick, + fun () -> + Mirage_crypto_ec.key_exchange scalar point + |> to_ok_or_error + |> Alcotest.check Testable.ok_or_error __LOC__ expected ) + in + let zero = `Hex (String.make 64 '0') in + let sb = + `Hex "66485c780e2f83d72433bd5d84a06bb6541c2af31dae871728bf856a174f93f4" + in + [ + test ~name:"Ok" + ~x: + (`Hex + "62d5bd3372af75fe85a040715d0f502428e07046868b0bfdfa61d731afe44f26") + ~y: + (`Hex + "ac333a93a9e70a81cd5a95b5bf8d13990eb741c8c38872b4a07d275a014e30cf") + ~expected:(Ok ()); + test ~name:"P=0" + ~x: + (`Hex + "0000000000000000000000000000000000000000000000000000000000000000") + ~y: + (`Hex + "0000000000000000000000000000000000000000000000000000000000000000") + ~expected:(Error `Not_on_curve); + test ~name:"(0, sqrt(b))" ~x:zero ~y:sb ~expected:(Ok ()); + test ~name:"out of range" + ~x: + (`Hex + "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF") + ~y:sb + ~expected:(Error `Invalid_range); + ] + +let scalar_validation = + let test_scalar_validation ~name ~scalar ~expected = + let safe = + Cstruct.of_hex + "0000000000000000000000000000000000000000000000000000000000000001" + in + let ncalls = ref 0 in + let return_value = ref (Some (Hex.to_cstruct scalar)) in + let rng _ = + incr ncalls; + match !return_value with + | None -> safe + | Some rv -> + return_value := None; + rv + in + ( name, + `Quick, + fun () -> + let _, _ = Mirage_crypto_ec.gen_key ~rng in + let got = !ncalls in + Alcotest.check Alcotest.int __LOC__ expected got ) + in + [ + test_scalar_validation ~name:"0" + ~scalar: + (`Hex + "0000000000000000000000000000000000000000000000000000000000000000") + ~expected:2; + test_scalar_validation ~name:"1" + ~scalar: + (`Hex + "0000000000000000000000000000000000000000000000000000000000000001") + ~expected:1; + test_scalar_validation ~name:"n-1" + ~scalar: + (`Hex + "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632550") + ~expected:1; + test_scalar_validation ~name:"n" + ~scalar: + (`Hex + "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551") + ~expected:2; + ] + +let () = + Alcotest.run "P256 ECDH" + [ + ("Key exchange", key_exchange); + ("Low level scalar mult", scalar_mult); + ("Point validation", point_validation); + ("Scalar validation when generating", scalar_validation); + ] diff --git a/tests/test_ec_wycheproof_secp256r1.ml b/tests/test_ec_wycheproof_secp256r1.ml new file mode 100644 index 00000000..1c967979 --- /dev/null +++ b/tests/test_ec_wycheproof_secp256r1.ml @@ -0,0 +1,112 @@ +open Wycheproof + +let hex = Alcotest.testable Wycheproof.pp_hex Wycheproof.equal_hex + +let parse_asn1 s = + let cs = Cstruct.of_string s in + let seq2 a b = Asn.S.(sequence2 (required a) (required b)) in + let term = Asn.S.(seq2 (seq2 oid oid) bit_string_cs) in + let ec_public_key = Asn.OID.(base 1 2 <|| [ 840; 10045; 2; 1 ]) in + let prime256v1 = Asn.OID.(base 1 2 <|| [ 840; 10045; 3; 1; 7 ]) in + match Asn.decode (Asn.codec Asn.ber term) cs with + | Error _ -> Error "ASN1 parse error" + | Ok (((oid1, oid2), data), rest) -> + if Cstruct.len rest <> 0 then Error "ASN1 leftover" + else if not (Asn.OID.equal oid1 ec_public_key) then + Error "ASN1: wrong oid 1" + else if not (Asn.OID.equal oid2 prime256v1) then Error "ASN1: wrong oid 2" + else Ok (Cstruct.to_string data) + +let ( >>= ) xr f = match xr with Error _ as e -> e | Ok x -> f x + +let parse_point p = parse_asn1 p >>= fun h -> Ok Hex.(to_cstruct (of_string h)) + +let to_string_result ~pp_error = function + | Ok _ as ok -> ok + | Error e -> + let msg = Format.asprintf "%a" pp_error e in + Error msg + +let strip_leading_zeroes cs = + let first_nonzero_index = ref None in + let cs_len = Cstruct.len cs in + for i = cs_len - 1 downto 0 do + if Cstruct.get_uint8 cs i <> 0 then first_nonzero_index := Some i + done; + match !first_nonzero_index with + | None -> Cstruct.empty + | Some i -> + let off = i in + let len = cs_len - i in + Cstruct.sub cs off len + +let pad ~total_len cs = + match total_len - Cstruct.len cs with + | 0 -> Ok cs + | n when n < 0 -> Error "input is too long" + | pad_len -> Ok (Cstruct.append cs (Cstruct.create pad_len)) + +let parse_secret s = + let stripped = strip_leading_zeroes (Cstruct.of_string s) in + pad ~total_len:32 (Cstruct.rev stripped) >>= fun cs -> Ok (Cstruct.rev cs) + +type test = { + public_key : Cstruct.t; + raw_private_key : Cstruct.t; + expected : string; +} + +let perform_key_exchange ~public_key ~raw_private_key = + let open Mirage_crypto_ec in + let gen _ = raw_private_key in + let secret, _ = gen_key ~rng:gen in + to_string_result ~pp_error (key_exchange secret public_key) + +let interpret_test ~tcId { public_key; raw_private_key; expected } () = + match perform_key_exchange ~public_key ~raw_private_key with + | Ok cs -> + let got = Cstruct.to_string cs in + Alcotest.check hex __LOC__ expected got + | Error err -> Printf.ksprintf Alcotest.fail "While parsing %d: %s" tcId err + +type invalid_test = { public : string; private_ : string } + +let is_ok = function Ok _ -> true | Error _ -> false + +let interpret_invalid_test { public; private_ } () = + let result = + parse_point public >>= fun public_key -> + parse_secret private_ >>= fun raw_private_key -> + perform_key_exchange ~public_key ~raw_private_key + in + Alcotest.check Alcotest.bool __LOC__ false (is_ok result) + +type strategy = Test of test | Invalid_test of invalid_test | Skip + +let make_test test = + let ignored_flags = [ "CompressedPoint"; "UnnamedCurve" ] in + match test.result with + | _ when has_ignored_flag test ~ignored_flags -> Ok Skip + | Invalid -> + Ok (Invalid_test { public = test.public; private_ = test.private_ }) + | Acceptable -> Ok Skip + | Valid -> + parse_point test.public >>= fun public_key -> + parse_secret test.private_ >>= fun raw_private_key -> + Ok (Test { public_key; raw_private_key; expected = test.shared }) + +let concat_map f l = List.map f l |> List.concat + +let to_tests x = + let name = Printf.sprintf "%d - %s" x.tcId x.comment in + match make_test x with + | Ok (Test t) -> [ (name, `Quick, interpret_test ~tcId:x.tcId t) ] + | Ok (Invalid_test t) -> [ (name, `Quick, interpret_invalid_test t) ] + | Ok Skip -> [] + | Error e -> Printf.ksprintf failwith "While parsing %d: %s" x.tcId e + +let tests = + let data = load_file_exn "ecdh_secp256r1_test.json" in + concat_map (fun group -> concat_map to_tests group.tests) data.testGroups + +let () = Alcotest.run "Wycheproof-hacl-p256" [ ("test vectors", tests) ] diff --git a/tests/wycheproof/dune b/tests/wycheproof/dune new file mode 100644 index 00000000..4aaf545a --- /dev/null +++ b/tests/wycheproof/dune @@ -0,0 +1,6 @@ +(library + (name wycheproof) + (libraries yojson ppx_deriving_yojson.runtime hex) + (preprocess + (pps ppx_deriving.std ppx_deriving_yojson)) + (optional)) diff --git a/tests/wycheproof/wycheproof.ml b/tests/wycheproof/wycheproof.ml new file mode 100644 index 00000000..2572dd89 --- /dev/null +++ b/tests/wycheproof/wycheproof.ml @@ -0,0 +1,65 @@ +[@@@ocaml.warning "-39"] + +type json = Yojson.Safe.t [@@deriving of_yojson] + +let pp_json = Yojson.Safe.pretty_print + +type hex = string [@@deriving eq] + +let pp_hex fmt s = + let (`Hex h) = Hex.of_string s in + Format.pp_print_string fmt h + +let hex_of_yojson json = + let padded s = if String.length s mod 2 = 0 then s else "0" ^ s in + match [%of_yojson: string] json with + | Ok s -> Ok (Hex.to_string (`Hex (padded s))) + | Error _ as e -> e + +type test_result = Valid | Acceptable | Invalid [@@deriving show] + +let test_result_of_yojson = function + | `String "valid" -> Ok Valid + | `String "acceptable" -> Ok Acceptable + | `String "invalid" -> Ok Invalid + | _ -> Error "test_result" + +type test = { + tcId : int; + comment : string; + curve : json option; [@yojson.default None] + public : hex; + private_ : hex; [@yojson.key "private"] + shared : hex; + result : test_result; + flags : string list; +} +[@@deriving of_yojson, show] + +let has_ignored_flag test ~ignored_flags = + List.exists + (fun ignored_flag -> List.mem ignored_flag test.flags) + ignored_flags + +type test_group = { + curve : json; + tests : test list; + encoding : json option; [@yojson.default None] + type_ : json option; [@yojson.default None] [@yojson.key "type"] +} +[@@deriving of_yojson, show] + +type test_file = { + algorithm : json; + generatorVersion : json; + header : json; + notes : json; + numberOfTests : json; + testGroups : test_group list; +} +[@@deriving of_yojson, show] + +let get_json = function Ok x -> x | Error s -> failwith s + +let load_file_exn path = + Yojson.Safe.from_file path |> [%of_yojson: test_file] |> get_json diff --git a/tests/wycheproof/wycheproof.mli b/tests/wycheproof/wycheproof.mli new file mode 100644 index 00000000..40e64ad1 --- /dev/null +++ b/tests/wycheproof/wycheproof.mli @@ -0,0 +1,41 @@ +type json + +type hex = string [@@deriving eq] + +val pp_hex : Format.formatter -> hex -> unit + +type test_result = Valid | Acceptable | Invalid [@@deriving show] + +type test = { + tcId : int; + comment : string; + curve : json option; + public : hex; + private_ : hex; + shared : hex; + result : test_result; + flags : string list; +} +[@@deriving show] + +val has_ignored_flag : test -> ignored_flags:string list -> bool + +type test_group = { + curve : json; + tests : test list; + encoding : json option; + type_ : json option; +} +[@@deriving show] + +type test_file = { + algorithm : json; + generatorVersion : json; + header : json; + notes : json; + numberOfTests : json; + testGroups : test_group list; +} +[@@deriving show] + +val load_file_exn : string -> test_file From a85f4fc0a14ef69c19f5007f87708fb3c946edec Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Fri, 5 Mar 2021 12:45:51 +0100 Subject: [PATCH 4/6] GitHub actions: add 4.12, update to 4.11.2, 4.10.2, 4.09.1 --- .github/workflows/test.yml | 2 +- .github/workflows/windows.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index d027868f..eade5ec0 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,7 +9,7 @@ jobs: strategy: fail-fast: false matrix: - ocaml-version: ["4.11.1", "4.10.1", "4.09.0", "4.08.1"] + ocaml-version: ["4.12.0", "4.11.2", "4.10.2", "4.09.1", "4.08.1"] operating-system: [macos-latest, ubuntu-latest] runs-on: ${{ matrix.operating-system }} diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index 71b88ddc..da6ac1c9 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -9,7 +9,7 @@ jobs: strategy: fail-fast: false matrix: - ocaml-version: ["4.11.1", "4.10.1", "4.09.0", "4.08.1"] + ocaml-version: ["4.12.0", "4.11.2", "4.10.2", "4.09.1", "4.08.1"] operating-system: [windows-latest] runs-on: ${{ matrix.operating-system }} From 523f2fdf032abdffca644467cc1c5b6788ca890f Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Fri, 5 Mar 2021 23:18:27 +0100 Subject: [PATCH 5/6] CI: remove formatting --- .ocamlformat | 2 -- dune-project | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 .ocamlformat diff --git a/.ocamlformat b/.ocamlformat deleted file mode 100644 index 2e686658..00000000 --- a/.ocamlformat +++ /dev/null @@ -1,2 +0,0 @@ -version = 0.15.0 -disable = true diff --git a/dune-project b/dune-project index 3a832198..f4174495 100644 --- a/dune-project +++ b/dune-project @@ -1,2 +1,3 @@ (lang dune 2.6) (name mirage-crypto) +(formatting disabled) From 5e042bb61eb90758a0d3c82e94396c83dad109f5 Mon Sep 17 00:00:00 2001 From: Hannes Mehnert Date: Mon, 1 Feb 2021 22:41:08 +0100 Subject: [PATCH 6/6] mirage-crypto-ec: ECDSA and curves P-224, P-256, P-384, P-521 This includes: - ECDSA implementation with blinding - tests from RFC 6979 (deterministic k) - wycheproof tests for ECDH and ECDSA (commit 2196000605e45d91097147c9c71f26b72af58003) - ec/native contains a Makefile which runs the extraction (using fiat-crypto's word-by-word-montgomery) --- .github/workflows/test.yml | 3 +- .github/workflows/windows.yml | 9 +- .travis.yml | 2 +- ec-freestanding/Makefile | 2 +- ec-freestanding/dune | 3 +- ec/dune | 31 +- ec/error.ml | 21 - ec/error.mli | 12 - ec/field_element.ml | 65 - ec/field_element.mli | 63 - ec/mirage_crypto_ec.ml | 803 +- ec/mirage_crypto_ec.mli | 155 +- ec/native/GNUmakefile | 119 + ec/native/README.md | 12 + ec/native/inversion_template.h | 63 + ec/native/np224_32.h | 3596 +++++ ec/native/np224_64.h | 1724 ++ ec/native/np224_stubs.c | 76 + ec/native/np256_32.h | 4222 +++++ ec/native/np256_64.h | 1770 ++ ec/native/np256_stubs.c | 76 + ec/native/np384_32.h | 8781 ++++++++++ ec/native/np384_64.h | 3071 ++++ ec/native/np384_stubs.c | 76 + ec/native/np521_32.h | 16202 +++++++++++++++++++ ec/native/np521_64.h | 5586 +++++++ ec/native/np521_stubs.c | 77 + ec/native/p224_32.h | 3978 +++++ ec/native/p224_64.h | 2079 +++ ec/native/p224_stubs.c | 143 + ec/native/p256_32.h | 5356 +++--- ec/native/p256_64.h | 2071 ++- ec/native/p256_stubs.c | 336 +- ec/native/p384_32.h | 10144 ++++++++++++ ec/native/p384_64.h | 3876 +++++ ec/native/p384_stubs.c | 143 + ec/native/p521_32.h | 19721 +++++++++++++++++++++++ ec/native/p521_64.h | 6625 ++++++++ ec/native/p521_stubs.c | 143 + ec/native/point_operations.h | 210 + ec/parameters.ml | 13 - ec/parameters.mli | 19 - ec/point.ml | 122 - ec/point.mli | 43 - ec/scalar.ml | 19 - ec/scalar.mli | 14 - ec/scalar_mult.ml | 12 - ec/scalar_mult.mli | 3 - mirage-crypto-ec.opam | 10 +- tests/dune | 17 +- tests/ecdh_secp224r1_test.json | 3581 ++++ tests/ecdh_secp256r1_test.json | 2869 +++- tests/ecdh_secp384r1_test.json | 4366 +++++ tests/ecdh_secp521r1_test.json | 4868 ++++++ tests/ecdsa_secp224r1_sha224_test.json | 4218 +++++ tests/ecdsa_secp224r1_sha256_test.json | 4447 +++++ tests/ecdsa_secp224r1_sha512_test.json | 5002 ++++++ tests/ecdsa_secp256r1_sha256_test.json | 4578 ++++++ tests/ecdsa_secp256r1_sha512_test.json | 5138 ++++++ tests/ecdsa_secp384r1_sha384_test.json | 4634 ++++++ tests/ecdsa_secp384r1_sha512_test.json | 4940 ++++++ tests/ecdsa_secp521r1_sha512_test.json | 4989 ++++++ tests/test_ec.ml | 537 +- tests/test_ec_wycheproof.ml | 235 + tests/test_ec_wycheproof_secp256r1.ml | 112 - tests/wycheproof/wycheproof.ml | 47 +- tests/wycheproof/wycheproof.mli | 47 +- 67 files changed, 151877 insertions(+), 4448 deletions(-) delete mode 100644 ec/error.ml delete mode 100644 ec/error.mli delete mode 100644 ec/field_element.ml delete mode 100644 ec/field_element.mli create mode 100644 ec/native/GNUmakefile create mode 100644 ec/native/README.md create mode 100644 ec/native/inversion_template.h create mode 100644 ec/native/np224_32.h create mode 100644 ec/native/np224_64.h create mode 100644 ec/native/np224_stubs.c create mode 100644 ec/native/np256_32.h create mode 100644 ec/native/np256_64.h create mode 100644 ec/native/np256_stubs.c create mode 100644 ec/native/np384_32.h create mode 100644 ec/native/np384_64.h create mode 100644 ec/native/np384_stubs.c create mode 100644 ec/native/np521_32.h create mode 100644 ec/native/np521_64.h create mode 100644 ec/native/np521_stubs.c create mode 100644 ec/native/p224_32.h create mode 100644 ec/native/p224_64.h create mode 100644 ec/native/p224_stubs.c create mode 100644 ec/native/p384_32.h create mode 100644 ec/native/p384_64.h create mode 100644 ec/native/p384_stubs.c create mode 100644 ec/native/p521_32.h create mode 100644 ec/native/p521_64.h create mode 100644 ec/native/p521_stubs.c create mode 100644 ec/native/point_operations.h delete mode 100644 ec/parameters.ml delete mode 100644 ec/parameters.mli delete mode 100644 ec/point.ml delete mode 100644 ec/point.mli delete mode 100644 ec/scalar.ml delete mode 100644 ec/scalar.mli delete mode 100644 ec/scalar_mult.ml delete mode 100644 ec/scalar_mult.mli create mode 100644 tests/ecdh_secp224r1_test.json create mode 100644 tests/ecdh_secp384r1_test.json create mode 100644 tests/ecdh_secp521r1_test.json create mode 100644 tests/ecdsa_secp224r1_sha224_test.json create mode 100644 tests/ecdsa_secp224r1_sha256_test.json create mode 100644 tests/ecdsa_secp224r1_sha512_test.json create mode 100644 tests/ecdsa_secp256r1_sha256_test.json create mode 100644 tests/ecdsa_secp256r1_sha512_test.json create mode 100644 tests/ecdsa_secp384r1_sha384_test.json create mode 100644 tests/ecdsa_secp384r1_sha512_test.json create mode 100644 tests/ecdsa_secp521r1_sha512_test.json create mode 100644 tests/test_ec_wycheproof.ml delete mode 100644 tests/test_ec_wycheproof_secp256r1.ml diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index eade5ec0..986022e6 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -30,7 +30,8 @@ jobs: opam pin add -n mirage-crypto-rng-mirage.dev . opam pin add -n mirage-crypto-rng-async.dev . opam pin add -n mirage-crypto-pk.dev . - opam depext -y mirage-crypto mirage-crypto-rng mirage-crypto-rng-mirage mirage-crypto-pk + opam pin add -n mirage-crypto-ec.dev . + opam depext -y mirage-crypto mirage-crypto-rng mirage-crypto-rng-mirage mirage-crypto-pk mirage-crypto-ec opam install -t --deps-only . - name: Build diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml index da6ac1c9..f3dbee43 100644 --- a/.github/workflows/windows.yml +++ b/.github/workflows/windows.yml @@ -29,11 +29,12 @@ jobs: opam pin add -n mirage-crypto-rng.dev . opam pin add -n mirage-crypto-rng-mirage.dev . opam pin add -n mirage-crypto-pk.dev . - opam depext -y mirage-crypto mirage-crypto-rng mirage-crypto-rng-mirage mirage-crypto-pk - opam install -t --deps-only mirage-crypto mirage-crypto-rng mirage-crypto-rng-mirage mirage-crypto-pk + opam pin add -n mirage-crypto-ec.dev . + opam depext -y mirage-crypto mirage-crypto-rng mirage-crypto-rng-mirage mirage-crypto-pk mirage-crypto-ec + opam install -t --deps-only mirage-crypto mirage-crypto-rng mirage-crypto-rng-mirage mirage-crypto-pk mirage-crypto-ec - name: Build - run: opam exec -- dune build -p mirage-crypto,mirage-crypto-rng,mirage-crypto-rng-mirage,mirage-crypto-pk + run: opam exec -- dune build -p mirage-crypto,mirage-crypto-rng,mirage-crypto-rng-mirage,mirage-crypto-pk,mirage-crypto-ec - name: Test - run: opam exec -- dune runtest -p mirage-crypto,mirage-crypto-rng,mirage-crypto-rng-mirage,mirage-crypto-pk + run: opam exec -- dune runtest -p mirage-crypto,mirage-crypto-rng,mirage-crypto-rng-mirage,mirage-crypto-pk,mirage-crypto-ec diff --git a/.travis.yml b/.travis.yml index e13084ff..5fecb030 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,7 +6,7 @@ services: os: linux env: global: - - PINS="mirage-crypto:. mirage-crypto-rng:. mirage-crypto-rng-mirage:. mirage-crypto-pk:. mirage-crypto-rng-async:." + - PINS="mirage-crypto:. mirage-crypto-rng:. mirage-crypto-rng-mirage:. mirage-crypto-pk:. mirage-crypto-rng-async:. mirage-crypto-ec:." - PACKAGE="mirage-crypto-pk" - TESTS=true - DISTRO=alpine diff --git a/ec-freestanding/Makefile b/ec-freestanding/Makefile index 000dce71..16bb90ed 100644 --- a/ec-freestanding/Makefile +++ b/ec-freestanding/Makefile @@ -14,7 +14,7 @@ FREESTANDING_CFLAGS := $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --c DISCOVER_CFLAGS := $(shell sed 's/^(\(.*\))$$/\1/' ../ec/cflags_optimized.sexp | tr -d '"') CFLAGS := -O3 -I../ec/native -I../src/native $(DISCOVER_CFLAGS) $(FREESTANDING_CFLAGS) -OBJS=p256_stubs.o +OBJS=p224_stubs.o np224_stubs.o p256_stubs.o np256_stubs.o p384_stubs.o np384_stubs.o p521_stubs.o np521_stubs.o libmirage_crypto_ec_freestanding_stubs.a: $(OBJS) $(AR) r $@ $^ diff --git a/ec-freestanding/dune b/ec-freestanding/dune index 243bba7b..ded8af43 100644 --- a/ec-freestanding/dune +++ b/ec-freestanding/dune @@ -2,7 +2,8 @@ (rule (deps ../ec/cflags_optimized.sexp ../src/native/mirage_crypto.h - ../src/native/bitfn.h Makefile p256_stubs.c) + ../src/native/bitfn.h Makefile p224_stubs.c np224_stubs.c p256_stubs.c + np256_stubs.c p384_stubs.c np384_stubs.c p521_stubs.c np521_stubs.c) (targets libmirage_crypto_ec_freestanding_stubs.a) (action (no-infer diff --git a/ec/dune b/ec/dune index 2ba16048..de79a353 100644 --- a/ec/dune +++ b/ec/dune @@ -1,39 +1,22 @@ (library (name mirage_crypto_ec) (public_name mirage-crypto-ec) - (libraries cstruct eqaf.cstruct hex) + (libraries cstruct eqaf.cstruct mirage-crypto mirage-crypto-rng) (foreign_stubs (language c) - (names p256_stubs) + (names p224_stubs np224_stubs p256_stubs np256_stubs p384_stubs np384_stubs + p521_stubs np521_stubs) (flags (:standard -I../src/native) (:include cflags_optimized.sexp)))) +(env + (dev + (c_flags (-Werror)))) + (include_subdirs unqualified) (rule (targets cflags_optimized.sexp) (action (run ../config/cfg.exe))) - -(rule - (targets upstream_p256_32) - (action - (bash - "wget https://raw.githubusercontent.com/mit-plv/fiat-crypto/ecdfd03c636ab63e167fbe4fc4d7ab0ed5d9db74/p256_32.c -O %{targets}"))) - -(rule - (targets upstream_p256_64) - (action - (bash - "wget https://raw.githubusercontent.com/mit-plv/fiat-crypto/ecdfd03c636ab63e167fbe4fc4d7ab0ed5d9db74/p256_64.c -O %{targets}"))) - -(rule - (alias check_vendors) - (action - (diff native/p256_32.h upstream_p256_32))) - -(rule - (alias check_vendors) - (action - (diff native/p256_64.h upstream_p256_64))) diff --git a/ec/error.ml b/ec/error.ml deleted file mode 100644 index 5c7dd364..00000000 --- a/ec/error.ml +++ /dev/null @@ -1,21 +0,0 @@ -type point_error = - [ `Invalid_format - | `Invalid_length - | `Invalid_range - | `Not_on_curve - | `At_infinity ] - -type scalar_error = [ `Invalid_length | `Invalid_range ] - -let error_to_string = function - | `Invalid_format -> "invalid format" - | `Not_on_curve -> "point is not on curve" - | `At_infinity -> "point is at infinity" - | `Invalid_length -> "invalid length" - | `Invalid_range -> "invalid range" - -let pp_point_error fmt e = - Format.fprintf fmt "Cannot parse point: %s" (error_to_string e) - -let pp_scalar_error fmt e = - Format.fprintf fmt "Cannot parse scalar: %s" (error_to_string e) diff --git a/ec/error.mli b/ec/error.mli deleted file mode 100644 index f17d454d..00000000 --- a/ec/error.mli +++ /dev/null @@ -1,12 +0,0 @@ -type point_error = - [ `Invalid_format - | `Invalid_range - | `Invalid_length - | `Not_on_curve - | `At_infinity ] - -type scalar_error = [ `Invalid_length | `Invalid_range ] - -val pp_point_error : Format.formatter -> point_error -> unit - -val pp_scalar_error : Format.formatter -> scalar_error -> unit diff --git a/ec/field_element.ml b/ec/field_element.ml deleted file mode 100644 index 32e0cadb..00000000 --- a/ec/field_element.ml +++ /dev/null @@ -1,65 +0,0 @@ -type t = Cstruct.buffer - -let create () = Cstruct.to_bigarray (Cstruct.create 32) - -external mul : t -> t -> t -> unit = "fiat_p256_caml_mul" [@@noalloc] - -external sub : t -> t -> t -> unit = "fiat_p256_caml_sub" [@@noalloc] - -external add : t -> t -> t -> unit = "fiat_p256_caml_add" [@@noalloc] - -let r_squared = - Cstruct.to_bigarray - (Cstruct.of_hex - "0300000000000000fffffffffbfffffffefffffffffffffffdffffff04000000") - -let to_montgomery x = mul x x r_squared - -let copy dst src = Bigarray_compat.Array1.blit src dst - -external from_bytes_buf : t -> Cstruct.buffer -> unit - = "fiat_p256_caml_from_bytes" - [@@noalloc] - -let checked_buffer cs = - assert (Cstruct.len cs = 32); - Cstruct.to_bigarray cs - -let from_bytes fe cs = from_bytes_buf fe (checked_buffer cs) - -let one_bytes = - Cstruct.of_hex - "010000000000000000000000fffffffffffffffffffffffffeffffff00000000" - -let one () = - let fe = create () in - from_bytes fe one_bytes; - fe - -external nz : t -> bool = "fiat_p256_caml_nz" [@@noalloc] - -external sqr : t -> t -> unit = "fiat_p256_caml_sqr" - -external from_montgomery : t -> unit = "fiat_p256_caml_from_montgomery" - [@@noalloc] - -external to_bytes_buf : Cstruct.buffer -> t -> unit = "fiat_p256_caml_to_bytes" - [@@noalloc] - -let to_bytes cs fe = to_bytes_buf (checked_buffer cs) fe - -external inv : t -> t -> unit = "fiat_p256_caml_inv" [@@noalloc] - -let from_be_cstruct cs = - let cs_rev = Cstruct.rev cs in - let fe = create () in - from_bytes fe cs_rev; - to_montgomery fe; - fe - -external select_c : t -> bool -> t -> t -> unit = "fiat_p256_caml_select" - -let select bit ~then_ ~else_ = - let out = create () in - select_c out bit then_ else_; - out diff --git a/ec/field_element.mli b/ec/field_element.mli deleted file mode 100644 index a6c4204e..00000000 --- a/ec/field_element.mli +++ /dev/null @@ -1,63 +0,0 @@ -(** Field elements *) - -type t -(** A field element. This corresponds to a mutable chunk of memory. - Most operations are done in Montgomery form. This means that the internal - value is multiplied by a constant [R = 2**256]. - - @see -*) - -val create : unit -> t -(** Allocate a new element, corresponding to zero. *) - -val one : unit -> t -(** Allocate a new element, corresponding to one. *) - -val from_bytes : t -> Cstruct.t -> unit -(** [from_bytes dst src] deserializes a field element in the Montgomery domain - from bytes in little-endian order. *) - -val to_bytes : Cstruct.t -> t -> unit -(** [to_bytes dst src] serializes a field element in the Montgomery domain to - bytes in little-endian order. *) - -val from_montgomery : t -> unit -(** Translate a field element out of the Montgomery domain. - That is to say, it divides by [R] in place. *) - -val copy : t -> t -> unit -(** [copy dst src] sets [dst] to [src]. *) - -val add : t -> t -> t -> unit -(** [add dst a b] adds [a] and [b] and stores the result in [dst]. - Due to how Montgomery form works, it works both in and out of the Montgomery - domain. *) - -val sub : t -> t -> t -> unit -(** [sub dst a b] subtracts [a] and [b] and stores the result in [dst]. - Due to how Montgomery form works, it works both in and out of the Montgomery - domain. *) - -val mul : t -> t -> t -> unit -(** [mul dst a b] multiplies [a] and [b] (in the Montgomery domain) and stores - the result in [dst]. *) - -val nz : t -> bool -(** [nz n] returns [true] if [n] is non-zero. *) - -val sqr : t -> t -> unit -(** [sqr dst src] squares [src] in the Montgomery domain and stores the result - in [dst]. *) - -val inv : t -> t -> unit -(** [inv dst src] computes the modular inverse of [src] and stores the result in - [dst]. *) - -val from_be_cstruct : Cstruct.t -> t -(** Converts from a big-endian cstruct to Montgomery form. *) - -val select : bool -> then_:t -> else_:t -> t -(** Constant-time selection. - [select true ~then_ ~false_] returns a copy of [then_], and - [select false ~then_ ~false_] returns a copy of [else_]. *) diff --git a/ec/mirage_crypto_ec.ml b/ec/mirage_crypto_ec.ml index efba64b3..f734e82c 100644 --- a/ec/mirage_crypto_ec.ml +++ b/ec/mirage_crypto_ec.ml @@ -1,41 +1,782 @@ -let dh ~scalar ~point = - Point.x_of_finite_point (Scalar_mult.scalar_mult scalar point) +type error = + [ `Invalid_format + | `Invalid_length + | `Invalid_range + | `Not_on_curve + | `At_infinity ] -let public scalar = Scalar_mult.scalar_mult scalar Point.params_g +let error_to_string = function + | `Invalid_format -> "invalid format" + | `Not_on_curve -> "point is not on curve" + | `At_infinity -> "point is at infinity" + | `Invalid_length -> "invalid length" + | `Invalid_range -> "invalid range" -type error = Error.point_error +let pp_error fmt e = + Format.fprintf fmt "Cannot parse point: %s" (error_to_string e) -let pp_error = Error.pp_point_error +module type Dh = sig + type secret -let check_point = function - | Ok p when not (Point.is_infinity p) -> Ok p - | Ok _ -> Error `At_infinity - | Error _ as e -> e + val gen_key : rng:(int -> Cstruct.t) -> secret * Cstruct.t -let point_of_cs c = check_point (Point.of_cstruct c) + val key_exchange : secret -> Cstruct.t -> (Cstruct.t, error) result +end -let point_to_cs = Point.to_cstruct +module type Dsa = sig + type priv -type secret = Scalar.t + type pub -let secret_of_cs = Scalar.of_cstruct + val priv_of_cstruct : Cstruct.t -> (priv, error) result -let rec generate_private_key ~rng () = - let candidate = rng 32 in - match secret_of_cs candidate with - | Ok secret -> secret - | Error `Invalid_length -> + val priv_to_cstruct : priv -> Cstruct.t + + val pub_of_cstruct : Cstruct.t -> (pub, error) result + + val pub_to_cstruct : pub -> Cstruct.t + + val pub_of_priv : priv -> pub + + val generate : rng:(int -> Cstruct.t) -> priv * pub + + val sign : ?mask:[ `No | `Yes | `Yes_with of Mirage_crypto_rng.g ] -> + key:priv -> ?k:Cstruct.t -> Cstruct.t -> Cstruct.t * Cstruct.t + + val verify : key:pub -> Cstruct.t * Cstruct.t -> Cstruct.t -> bool + + module K_gen (H : Mirage_crypto.Hash.S) : sig + + val generate : key:priv -> Cstruct.t -> Cstruct.t + end +end + +module type Dh_dsa = sig + module Dh : Dh + module Dsa : Dsa +end + +module type Parameters = sig + val a : Cstruct.t + val b : Cstruct.t + val g_x : Cstruct.t + val g_y : Cstruct.t + val p : Cstruct.t + val n : Cstruct.t + val byte_length : int + val fe_length : int +end + +type field_element = Cstruct.buffer + +type point = { f_x : field_element; f_y : field_element; f_z : field_element } + +type scalar = Scalar of Cstruct.t + +module type Foreign = sig + val mul : field_element -> field_element -> field_element -> unit + val sub : field_element -> field_element -> field_element -> unit + val add : field_element -> field_element -> field_element -> unit + val to_montgomery : field_element -> unit + val from_bytes_buf : field_element -> Cstruct.buffer -> unit + val set_one : field_element -> unit + val nz : field_element -> bool + val sqr : field_element -> field_element -> unit + val from_montgomery : field_element -> unit + val to_bytes_buf : Cstruct.buffer -> field_element -> unit + val inv : field_element -> field_element -> unit + val select_c : field_element -> bool -> field_element -> field_element -> unit + + val double_c : point -> point -> unit + val add_c : point -> point -> point -> unit +end + +module type Field_element = sig + val create : unit -> field_element + + val copy : field_element -> field_element -> unit + + val one : unit -> field_element + + val to_bytes : Cstruct.t -> field_element -> unit + + val from_montgomery : field_element -> unit + + val add : field_element -> field_element -> field_element -> unit + + val sub : field_element -> field_element -> field_element -> unit + + val mul : field_element -> field_element -> field_element -> unit + + val nz : field_element -> bool + + val sqr : field_element -> field_element -> unit + + val inv : field_element -> field_element -> unit + + val from_be_cstruct : Cstruct.t -> field_element + + val select : bool -> then_:field_element -> else_:field_element -> field_element +end + +module Make_field_element (P : Parameters) (F : Foreign) : Field_element = struct + include F + + let create () = Cstruct.to_bigarray (Cstruct.create P.fe_length) + + let copy dst src = Bigarray.Array1.blit src dst + + let checked_buffer cs = + assert (Cstruct.len cs = P.byte_length); + Cstruct.to_bigarray cs + + let from_bytes fe cs = + F.from_bytes_buf fe (checked_buffer cs) + + let one () = + let fe = create () in + F.set_one fe; + fe + + let to_bytes cs fe = + F.to_bytes_buf (checked_buffer cs) fe + + let from_be_cstruct cs = + let cs_rev = Cstruct.rev cs in + let fe = create () in + from_bytes fe cs_rev; + F.to_montgomery fe; + fe + + let select bit ~then_ ~else_ = + let out = create () in + F.select_c out bit then_ else_; + out +end + +module type Point = sig + val at_infinity : unit -> point + + val is_infinity : point -> bool + + val add : point -> point -> point + + val double : point -> point + + val of_cstruct : Cstruct.t -> (point, error) result + + val to_cstruct : point -> Cstruct.t + + val x_of_finite_point : point -> Cstruct.t + + val params_g : point + + val select : bool -> then_:point -> else_:point -> point +end + +module Make_point (P : Parameters) (F : Foreign) : Point = struct + module Fe = Make_field_element(P)(F) + + let at_infinity () = + let f_x = Fe.one () in + let f_y = Fe.one () in + let f_z = Fe.create () in + { f_x; f_y; f_z } + + let is_infinity p = not (Fe.nz p.f_z) + + let is_solution_to_curve_equation = + let a = Fe.from_be_cstruct P.a in + let b = Fe.from_be_cstruct P.b in + fun ~x ~y -> + let x3 = Fe.create () in + Fe.mul x3 x x; + Fe.mul x3 x3 x; + let ax = Fe.create () in + Fe.mul ax a x; + let y2 = Fe.create () in + Fe.mul y2 y y; + let sum = Fe.create () in + Fe.add sum x3 ax; + Fe.add sum sum b; + Fe.sub sum sum y2; + not (Fe.nz sum) + + let check_coordinate cs = + (* ensure cs < p: *) + match Eqaf_cstruct.compare_be_with_len ~len:P.byte_length cs P.p >= 0 with + | true -> None + | exception Invalid_argument _ -> None + | false -> Some (Fe.from_be_cstruct cs) + + (** Convert cstruct coordinates to a finite point ensuring: + - x < p + - y < p + - y^2 = ax^3 + ax + b + *) + let validate_finite_point ~x ~y = + match (check_coordinate x, check_coordinate y) with + | Some f_x, Some f_y -> + if is_solution_to_curve_equation ~x:f_x ~y:f_y then + let f_z = Fe.one () in + Ok { f_x; f_y; f_z } + else Error `Not_on_curve + | _ -> Error `Invalid_range + + let of_cstruct cs = + let len = P.byte_length in + if Cstruct.len cs = 0 then + Error `Invalid_format + else + match Cstruct.get_uint8 cs 0 with + | 0x00 when Cstruct.len cs = 1 -> Ok (at_infinity ()) + | 0x04 when Cstruct.len cs = 1 + len + len -> + let x = Cstruct.sub cs 1 len in + let y = Cstruct.sub cs (1 + len) len in + validate_finite_point ~x ~y + | 0x00 | 0x04 -> Error `Invalid_length + | _ -> Error `Invalid_format + + let to_affine p = + if is_infinity p then None + else + let out_x = Cstruct.create P.byte_length in + let out_y = Cstruct.create P.byte_length in + let z1 = Fe.create () in + let z2 = Fe.create () in + Fe.copy z1 p.f_z; + Fe.from_montgomery z1; + Fe.inv z2 z1; + Fe.sqr z1 z2; + Fe.from_montgomery z1; + let x = Fe.create () in + Fe.copy x p.f_x; + Fe.mul x x z1; + Fe.to_bytes out_x x; + let y = Fe.create () in + Fe.copy y p.f_y; + Fe.mul z1 z1 z2; + Fe.mul y y z1; + Fe.to_bytes out_y y; + Some (out_x, out_y) + + let to_cstruct p = + match to_affine p with + | None -> Cstruct.create 1 + | Some (x, y) -> + let four = Cstruct.create 1 in + Cstruct.set_uint8 four 0 4; + let rev_x = Cstruct.rev x and rev_y = Cstruct.rev y in + Cstruct.concat [ four; rev_x; rev_y ] + + let double p = + let out = { f_x = Fe.create (); f_y = Fe.create (); f_z = Fe.create () } in + F.double_c out p; + out + + let add fe_p fe_q = + let out = { f_x = Fe.create (); f_y = Fe.create (); f_z = Fe.create () } in + F.add_c out fe_p fe_q; + out + + let x_of_finite_point p = + match to_affine p with None -> assert false | Some (x, _) -> Cstruct.rev x + + let params_g = + match validate_finite_point ~x:P.g_x ~y:P.g_y with + | Ok p -> p + | Error _ -> assert false + + let select bit ~then_ ~else_ = + { + f_x = Fe.select bit ~then_:then_.f_x ~else_:else_.f_x; + f_y = Fe.select bit ~then_:then_.f_y ~else_:else_.f_y; + f_z = Fe.select bit ~then_:then_.f_z ~else_:else_.f_z; + } +end + +module type Scalar = sig + val of_cstruct : Cstruct.t -> (scalar, error) result + + val to_cstruct : scalar -> Cstruct.t + + val scalar_mult : scalar -> point -> point +end + +module Make_scalar (Param : Parameters) (P : Point) : Scalar = struct + let is_in_range cs = + let zero = Cstruct.create Param.byte_length in + Eqaf_cstruct.compare_be_with_len ~len:Param.byte_length cs zero > 0 + && Eqaf_cstruct.compare_be_with_len ~len:Param.byte_length Param.n cs > 0 + + let of_cstruct cs = + match is_in_range cs with + | exception Invalid_argument _ -> Error `Invalid_length + | true -> Ok (Scalar (Cstruct.rev cs)) + | false -> Error `Invalid_range + + let to_cstruct (Scalar cs) = Cstruct.rev cs + + let bit_at (Scalar s) i = + let byte_num = i / 8 in + let bit_num = i mod 8 in + let byte = Cstruct.get_uint8 s byte_num in + byte land (1 lsl bit_num) <> 0 + + let scalar_mult d p = + let r0 = ref (P.at_infinity ()) in + let r1 = ref p in + for i = Param.byte_length * 8 - 1 downto 0 do + let bit = bit_at d i in + let sum = P.add !r0 !r1 in + let r0_double = P.double !r0 in + let r1_double = P.double !r1 in + r0 := P.select bit ~then_:sum ~else_:r0_double; + r1 := P.select bit ~then_:r1_double ~else_:sum + done; + !r0 +end + +module Make_dh (Param : Parameters) (P : Point) (S : Scalar) : Dh = struct + let point_of_cs c = + match P.of_cstruct c with + | Ok p when not (P.is_infinity p) -> Ok p + | Ok _ -> Error `At_infinity + | Error _ as e -> e + + let point_to_cs = P.to_cstruct + + type secret = scalar + + let secret_of_cs = S.of_cstruct + + let rec generate_private_key ~rng () = + let candidate = rng Param.byte_length in + match secret_of_cs candidate with + | Ok secret -> secret + | Error `Invalid_length -> failwith "Fiat_p256.gen_key: generator returned an invalid length" - | Error _ -> generate_private_key ~rng () - -let gen_key ~rng = - let private_key = generate_private_key ~rng () in - let public_key = public private_key in - let to_send = point_to_cs public_key in - (private_key, to_send) - -let key_exchange secret received = - match point_of_cs received with - | Error _ as err -> err - | Ok other_party_public_key -> - Ok (dh ~scalar:secret ~point:other_party_public_key) + | Error _ -> generate_private_key ~rng () + + let gen_key ~rng = + let private_key = generate_private_key ~rng () in + let public_key = S.scalar_mult private_key P.params_g in + let to_send = point_to_cs public_key in + (private_key, to_send) + + let key_exchange secret received = + match point_of_cs received with + | Error _ as err -> err + | Ok shared -> Ok (P.x_of_finite_point (S.scalar_mult secret shared)) +end + +module type Foreign_n = sig + val mul : field_element -> field_element -> field_element -> unit + val add : field_element -> field_element -> field_element -> unit + val inv : field_element -> field_element -> unit + val one : field_element -> unit + val from_bytes : field_element -> Cstruct.buffer -> unit + val to_bytes : Cstruct.buffer -> field_element -> unit + val from_montgomery : field_element -> field_element -> unit + val to_montgomery : field_element -> field_element -> unit +end + +module Make_dsa (Param : Parameters) (F : Foreign_n) (P : Point) (S : Scalar) (H : Mirage_crypto.Hash.S) : Dsa = struct + let create () = Cstruct.to_bigarray (Cstruct.create Param.fe_length) + + type priv = scalar + + let priv_of_cstruct = S.of_cstruct + + let priv_to_cstruct = S.to_cstruct + + let padded msg = + let l = Cstruct.len msg in + let bl = Param.byte_length in + if l >= bl then + Cstruct.sub msg 0 (min l bl) + else + Cstruct.append (Cstruct.create (bl - l)) msg + + let from_be_cstruct v = + let v' = create () in + F.from_bytes v' (Cstruct.to_bigarray (Cstruct.rev v)); + v' + + let to_be_cstruct v = + let cs = Cstruct.create Param.byte_length in + F.to_bytes (Cstruct.to_bigarray cs) v; + Cstruct.rev cs + + let not_zero = + let zero = Cstruct.create Param.byte_length in + fun n -> not (Cstruct.equal zero n) + + let mod_n v = + let v' = from_be_cstruct v in + F.to_montgomery v' v'; + let o = create () in + F.one o; + F.mul v' v' o; + F.from_montgomery v' v'; + to_be_cstruct v' + + let smaller_n v = + Cstruct.equal v (mod_n v) + + (* RFC 6979: compute a deterministic k *) + module K_gen (H : Mirage_crypto.Hash.S) = struct + + let drbg : 'a Mirage_crypto_rng.generator = + let module M = Mirage_crypto_rng.Hmac_drbg (H) in (module M) + + let g ~key cs = + let g = Mirage_crypto_rng.create ~strict:true drbg in + Mirage_crypto_rng.reseed ~g + (Cstruct.append (S.to_cstruct key) cs); + g + + (* take qbit length, and ensure it is suitable for ECDSA (> 0 & < n) *) + let gen g = + let rec go () = + let r = Mirage_crypto_rng.generate ~g Param.byte_length in + if not_zero r && smaller_n r then r else go () + in + go () + + let generate ~key cs = gen (g ~key (padded cs)) + end + + module K_gen_default = K_gen(H) + + type pub = point + + let pub_of_cstruct = P.of_cstruct + + let pub_to_cstruct = P.to_cstruct + + let generate ~rng = + (* FIPS 186-4 B 4.2 *) + let n = Param.byte_length in + let rec one () = + match S.of_cstruct (rng n) with + | Ok x -> x + | Error _ -> one () + in + let d = one () in + let q = S.scalar_mult d P.params_g in + (d, q) + + let blind mask = + let inv a = + let b = create () in + F.inv b a; + F.to_montgomery b b; + b + in + let rec rng g = + let r = Mirage_crypto_rng.generate ?g Param.byte_length in + if not_zero r && smaller_n r then begin + let ba = from_be_cstruct r in + F.to_montgomery ba ba; + Some (ba, inv ba) + end else + rng g + in + match mask with + | `No -> None + | `Yes -> rng None + | `Yes_with g -> rng (Some g) + + let sign ?(mask = `Yes) ~key ?k msg = + (* blinding: literature: s = k^-1 * (m + r * priv_key) mod n + we blind, similar to OpenSSL (https://github.com/openssl/openssl/commit/a3e9d5aa980f238805970f420adf5e903d35bf09): + s = k^-1 * blind^-1 (blind * m + blind * r * priv_key) mod n + *) + let b = blind mask in + let msg = padded msg in + let e = from_be_cstruct msg in + let g = K_gen_default.g ~key msg in + let rec do_sign g = + let again () = + match k with + | None -> do_sign g + | Some _ -> invalid_arg "k not suitable" + in + let k' = match k with None -> K_gen_default.gen g | Some k -> k in + let ksc = match S.of_cstruct k' with + | Ok ksc -> ksc + | Error _ -> invalid_arg "k not in range" (* if no k is provided, this cannot happen since K_gen_*.gen already preserves the Scalar invariants *) + in + let point = S.scalar_mult ksc P.params_g in + if P.is_infinity point then + again () + else + let x1 = P.x_of_finite_point point in + let r = mod_n x1 in + let r_mon = from_be_cstruct r in + F.to_montgomery r_mon r_mon; + let kinv = create () in + let kmon = from_be_cstruct k' in + F.to_montgomery kmon kmon; + F.inv kinv kmon; + F.to_montgomery kmon kinv; + let rd = create () in + let dmon = from_be_cstruct (S.to_cstruct key) in + F.to_montgomery dmon dmon; + (match b with None -> () | Some (b, _) -> F.mul dmon b dmon); + F.mul rd r_mon dmon; + let cmon = create () in + let zmon = create () in + F.to_montgomery zmon e; + (match b with None -> () | Some (b, _) -> F.mul zmon b zmon); + F.add cmon zmon rd; + let smon = create () in + F.mul smon kmon cmon; + (match b with None -> () | Some (_, b') -> F.mul smon b' smon); + let s = create () in + F.from_montgomery s smon; + let s = to_be_cstruct s in + if not_zero s && not_zero r then + r, s + else + again () + in + do_sign g + + let pub_of_priv priv = S.scalar_mult priv P.params_g + + let verify ~key (r, s) msg = + if not (smaller_n r && not_zero r && smaller_n s && not_zero s) then + false + else + (* take the Ln leftmost bits (with Ln bitsize of group order n = 256) *) + let msg = padded msg in + let z = from_be_cstruct msg in + let s_inv = create () in + let s_mon = from_be_cstruct s in + F.to_montgomery s_mon s_mon; + F.inv s_inv s_mon; + let u1 = create () in + let s_inv_mon = create () in + F.to_montgomery s_inv_mon s_inv; + let z_mon = create () in + F.to_montgomery z_mon z; + F.mul u1 z_mon s_inv_mon; + let u2 = create () in + let r_mon = from_be_cstruct r in + F.to_montgomery r_mon r_mon; + F.mul u2 r_mon s_inv_mon; + let u1_out = create () in + F.from_montgomery u1_out u1; + let u2_out = create () in + F.from_montgomery u2_out u2; + match + S.of_cstruct (to_be_cstruct u1_out), + S.of_cstruct (to_be_cstruct u2_out) + with + | Ok u1, Ok u2 -> + let point = + P.add + (S.scalar_mult u1 P.params_g) + (S.scalar_mult u2 key) + in + not (P.is_infinity point) && + Cstruct.equal (mod_n (P.x_of_finite_point point)) r + | _ -> false +end + +module P224 : Dh_dsa = struct + module Params = struct + let a = Cstruct.of_hex "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE" + let b = Cstruct.of_hex "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4" + let g_x = Cstruct.of_hex "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21" + let g_y = Cstruct.of_hex "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34" + let p = Cstruct.of_hex "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001" + let n = Cstruct.of_hex "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D" + let byte_length = 28 + let fe_length = if Sys.word_size == 64 then 32 else 28 (* TODO: is this congruent with C code? *) + end + + module Foreign = struct + external mul : field_element -> field_element -> field_element -> unit = "mc_p224_mul" [@@noalloc] + external sub : field_element -> field_element -> field_element -> unit = "mc_p224_sub" [@@noalloc] + external add : field_element -> field_element -> field_element -> unit = "mc_p224_add" [@@noalloc] + external to_montgomery : field_element -> unit = "mc_p224_to_montgomery" [@@noalloc] + external from_bytes_buf : field_element -> Cstruct.buffer -> unit = "mc_p224_from_bytes" [@@noalloc] + external set_one : field_element -> unit = "mc_p224_set_one" [@@noalloc] + external nz : field_element -> bool = "mc_p224_nz" [@@noalloc] + external sqr : field_element -> field_element -> unit = "mc_p224_sqr" [@@noalloc] + external from_montgomery : field_element -> unit = "mc_p224_from_montgomery" [@@noalloc] + external to_bytes_buf : Cstruct.buffer -> field_element -> unit = "mc_p224_to_bytes" [@@noalloc] + external inv : field_element -> field_element -> unit = "mc_p224_inv" [@@noalloc] + external select_c : field_element -> bool -> field_element -> field_element -> unit = "mc_p224_select" [@@noalloc] + + external double_c : point -> point -> unit = "mc_p224_point_double" [@@noalloc] + external add_c : point -> point -> point -> unit = "mc_p224_point_add" [@@noalloc] + end + + module Foreign_n = struct + external mul : field_element -> field_element -> field_element -> unit = "mc_np224_mul" [@@noalloc] + external add : field_element -> field_element -> field_element -> unit = "mc_np224_add" [@@noalloc] + external inv : field_element -> field_element -> unit = "mc_np224_inv" [@@noalloc] + external one : field_element -> unit = "mc_np224_one" [@@noalloc] + external from_bytes : field_element -> Cstruct.buffer -> unit = "mc_np224_from_bytes" [@@noalloc] + external to_bytes : Cstruct.buffer -> field_element -> unit = "mc_np224_to_bytes" [@@noalloc] + external from_montgomery : field_element -> field_element -> unit = "mc_np224_from_montgomery" [@@noalloc] + external to_montgomery : field_element -> field_element -> unit = "mc_np224_to_montgomery" [@@noalloc] + end + + module P = Make_point(Params)(Foreign) + module S = Make_scalar(Params)(P) + module Dh = Make_dh(Params)(P)(S) + module Dsa = Make_dsa(Params)(Foreign_n)(P)(S)(Mirage_crypto.Hash.SHA256) +end + +module P256 : Dh_dsa = struct + module Params = struct + let a = Cstruct.of_hex "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC" + let b = Cstruct.of_hex "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B" + let g_x = + Cstruct.of_hex "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296" + let g_y = + Cstruct.of_hex "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5" + let p = Cstruct.of_hex "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF" + let n = Cstruct.of_hex "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551" + let byte_length = 32 + let fe_length = 32 + end + + module Foreign = struct + external mul : field_element -> field_element -> field_element -> unit = "mc_p256_mul" [@@noalloc] + external sub : field_element -> field_element -> field_element -> unit = "mc_p256_sub" [@@noalloc] + external add : field_element -> field_element -> field_element -> unit = "mc_p256_add" [@@noalloc] + external to_montgomery : field_element -> unit = "mc_p256_to_montgomery" [@@noalloc] + external from_bytes_buf : field_element -> Cstruct.buffer -> unit = "mc_p256_from_bytes" [@@noalloc] + external set_one : field_element -> unit = "mc_p256_set_one" [@@noalloc] + external nz : field_element -> bool = "mc_p256_nz" [@@noalloc] + external sqr : field_element -> field_element -> unit = "mc_p256_sqr" [@@noalloc] + external from_montgomery : field_element -> unit = "mc_p256_from_montgomery" [@@noalloc] + external to_bytes_buf : Cstruct.buffer -> field_element -> unit = "mc_p256_to_bytes" [@@noalloc] + external inv : field_element -> field_element -> unit = "mc_p256_inv" [@@noalloc] + external select_c : field_element -> bool -> field_element -> field_element -> unit = "mc_p256_select" [@@noalloc] + + external double_c : point -> point -> unit = "mc_p256_point_double" [@@noalloc] + external add_c : point -> point -> point -> unit = "mc_p256_point_add" [@@noalloc] + end + + module Foreign_n = struct + external mul : field_element -> field_element -> field_element -> unit = "mc_np256_mul" [@@noalloc] + external add : field_element -> field_element -> field_element -> unit = "mc_np256_add" [@@noalloc] + external inv : field_element -> field_element -> unit = "mc_np256_inv" [@@noalloc] + external one : field_element -> unit = "mc_np256_one" [@@noalloc] + external from_bytes : field_element -> Cstruct.buffer -> unit = "mc_np256_from_bytes" [@@noalloc] + external to_bytes : Cstruct.buffer -> field_element -> unit = "mc_np256_to_bytes" [@@noalloc] + external from_montgomery : field_element -> field_element -> unit = "mc_np256_from_montgomery" [@@noalloc] + external to_montgomery : field_element -> field_element -> unit = "mc_np256_to_montgomery" [@@noalloc] + end + + module P = Make_point(Params)(Foreign) + module S = Make_scalar(Params)(P) + module Dh = Make_dh(Params)(P)(S) + module Dsa = Make_dsa(Params)(Foreign_n)(P)(S)(Mirage_crypto.Hash.SHA256) +end + +module P384 : Dh_dsa = struct + module Params = struct + let a = Cstruct.of_hex "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC" + let b = Cstruct.of_hex "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF" + let g_x = + Cstruct.of_hex "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7" + let g_y = + Cstruct.of_hex "3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f" + let p = Cstruct.of_hex "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF" + let n = Cstruct.of_hex "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973" + let byte_length = 48 + let fe_length = 48 + end + + module Foreign = struct + external mul : field_element -> field_element -> field_element -> unit = "mc_p384_mul" [@@noalloc] + external sub : field_element -> field_element -> field_element -> unit = "mc_p384_sub" [@@noalloc] + external add : field_element -> field_element -> field_element -> unit = "mc_p384_add" [@@noalloc] + external to_montgomery : field_element -> unit = "mc_p384_to_montgomery" [@@noalloc] + external from_bytes_buf : field_element -> Cstruct.buffer -> unit = "mc_p384_from_bytes" [@@noalloc] + external set_one : field_element -> unit = "mc_p384_set_one" [@@noalloc] + external nz : field_element -> bool = "mc_p384_nz" [@@noalloc] + external sqr : field_element -> field_element -> unit = "mc_p384_sqr" [@@noalloc] + external from_montgomery : field_element -> unit = "mc_p384_from_montgomery" [@@noalloc] + external to_bytes_buf : Cstruct.buffer -> field_element -> unit = "mc_p384_to_bytes" [@@noalloc] + external inv : field_element -> field_element -> unit = "mc_p384_inv" [@@noalloc] + external select_c : field_element -> bool -> field_element -> field_element -> unit = "mc_p384_select" [@@noalloc] + + external double_c : point -> point -> unit = "mc_p384_point_double" [@@noalloc] + external add_c : point -> point -> point -> unit = "mc_p384_point_add" [@@noalloc] + end + + module Foreign_n = struct + external mul : field_element -> field_element -> field_element -> unit = "mc_np384_mul" [@@noalloc] + external add : field_element -> field_element -> field_element -> unit = "mc_np384_add" [@@noalloc] + external inv : field_element -> field_element -> unit = "mc_np384_inv" [@@noalloc] + external one : field_element -> unit = "mc_np384_one" [@@noalloc] + external from_bytes : field_element -> Cstruct.buffer -> unit = "mc_np384_from_bytes" [@@noalloc] + external to_bytes : Cstruct.buffer -> field_element -> unit = "mc_np384_to_bytes" [@@noalloc] + external from_montgomery : field_element -> field_element -> unit = "mc_np384_from_montgomery" [@@noalloc] + external to_montgomery : field_element -> field_element -> unit = "mc_np384_to_montgomery" [@@noalloc] + end + + module P = Make_point(Params)(Foreign) + module S = Make_scalar(Params)(P) + module Dh = Make_dh(Params)(P)(S) + module Dsa = Make_dsa(Params)(Foreign_n)(P)(S)(Mirage_crypto.Hash.SHA384) +end + +module P521 : Dh_dsa = struct + module Params = struct + let a = Cstruct.of_hex "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC" + let b = Cstruct.of_hex "0051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00" + let g_x = + Cstruct.of_hex "00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66" + let g_y = + Cstruct.of_hex "011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650" + let p = Cstruct.of_hex "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" + let n = Cstruct.of_hex "01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409" + let byte_length = 66 + let fe_length = if Sys.word_size == 64 then 72 else 68 (* TODO: is this congruent with C code? *) + end + + module Foreign = struct + external mul : field_element -> field_element -> field_element -> unit = "mc_p521_mul" [@@noalloc] + external sub : field_element -> field_element -> field_element -> unit = "mc_p521_sub" [@@noalloc] + external add : field_element -> field_element -> field_element -> unit = "mc_p521_add" [@@noalloc] + external to_montgomery : field_element -> unit = "mc_p521_to_montgomery" [@@noalloc] + external from_bytes_buf : field_element -> Cstruct.buffer -> unit = "mc_p521_from_bytes" [@@noalloc] + external set_one : field_element -> unit = "mc_p521_set_one" [@@noalloc] + external nz : field_element -> bool = "mc_p521_nz" [@@noalloc] + external sqr : field_element -> field_element -> unit = "mc_p521_sqr" [@@noalloc] + external from_montgomery : field_element -> unit = "mc_p521_from_montgomery" [@@noalloc] + external to_bytes_buf : Cstruct.buffer -> field_element -> unit = "mc_p521_to_bytes" [@@noalloc] + external inv : field_element -> field_element -> unit = "mc_p521_inv" [@@noalloc] + external select_c : field_element -> bool -> field_element -> field_element -> unit = "mc_p521_select" [@@noalloc] + + external double_c : point -> point -> unit = "mc_p521_point_double" [@@noalloc] + external add_c : point -> point -> point -> unit = "mc_p521_point_add" [@@noalloc] + end + + module Foreign_n = struct + external mul : field_element -> field_element -> field_element -> unit = "mc_np521_mul" [@@noalloc] + external add : field_element -> field_element -> field_element -> unit = "mc_np521_add" [@@noalloc] + external inv : field_element -> field_element -> unit = "mc_np521_inv" [@@noalloc] + external one : field_element -> unit = "mc_np521_one" [@@noalloc] + external from_bytes : field_element -> Cstruct.buffer -> unit = "mc_np521_from_bytes" [@@noalloc] + external to_bytes : Cstruct.buffer -> field_element -> unit = "mc_np521_to_bytes" [@@noalloc] + external from_montgomery : field_element -> field_element -> unit = "mc_np521_from_montgomery" [@@noalloc] + external to_montgomery : field_element -> field_element -> unit = "mc_np521_to_montgomery" [@@noalloc] + end + + module P = Make_point(Params)(Foreign) + module S = Make_scalar(Params)(P) + module Dh = Make_dh(Params)(P)(S) + module Dsa = Make_dsa(Params)(Foreign_n)(P)(S)(Mirage_crypto.Hash.SHA512) +end + diff --git a/ec/mirage_crypto_ec.mli b/ec/mirage_crypto_ec.mli index b8848a50..187e31fd 100644 --- a/ec/mirage_crypto_ec.mli +++ b/ec/mirage_crypto_ec.mli @@ -1,4 +1,13 @@ -(** See {!page-implementation} for a description on how this is implemented. *) +(** {1 Elliptic curve cryptography} *) + +(** Mirage-crypto-ec implements public key cryptography with named elliptic + curves. Ephemeral key exchanges with {{!Dh}Diffie-Hellman} and + {{!Dsa}digital signatures (ECDSA)} are implemented. + + The arithmetic operations uses code generated by + {{:https://github.com/mit-plv/fiat-crypto}fiat-crypto} which is proven to + consume a constant amount of time, independent of the input values. +*) type error = [ `Invalid_range @@ -6,39 +15,133 @@ type error = | `Invalid_length | `Not_on_curve | `At_infinity ] -(** The type for public key parsing errors. *) +(** The type for errors. *) val pp_error : Format.formatter -> error -> unit -(** Pretty printer for public key parsing errors *) +(** Pretty printer for errors *) -type secret -(** Type for P256 private keys. +(** Diffie-Hellman key exchange. *) +module type Dh = sig - In the usual setting, the private key only be generated and used for key - exchange. But it can be useful to create values of type [secret] with a - known value, for example to check against test vectors. - One can use the following pattern to do this: + type secret + (** Type for private keys. - {[ let (secret, _) = gen_key ~rng:(fun _ -> known_data) ]} -*) + In the usual setting, the private key only be generated and used for key + exchange. But it can be useful to create values of type [secret] with a + known value, for example to check against test vectors. + One can use the following pattern to do this: + + {[ let (secret, _) = gen_key ~rng:(fun _ -> known_data) ]} + *) + + val gen_key : rng:(int -> Cstruct.t) -> secret * Cstruct.t + (** [gen_key ~rng] generates a private and a public key for Ephemeral + Diffie-Hellman. The returned key pair MUST only be used for a single + key exchange. + + [rng] is the function used to repeteadly generate a private key until a + valid candidate is obtained. [rng]'s int parameter is the size of the + [Cstruct.t] to generate. If [rng] returns an invalid length buffer, + [Failure _] is raised. + + The generated private key is checked to be greater than zero and lower + than the group order meaning the public key cannot be the point at + inifinity. *) + + val key_exchange : secret -> Cstruct.t -> (Cstruct.t, error) result + (** [key_exchange secret received_public_key] performs Diffie-Hellman key + exchange using your secret and the data received from the other party. + Returns the shared secret or an error if the received data is wrongly + encoded, doesn't represent a point on the curve or represent the point + at infinity. + + The shared secret is returned as is i.e. not stripped from leading 0x00 + bytes. + + The public key encoding is described + {{:http://www.secg.org/sec1-v2.pdf}in SEC 1} from SECG. *) +end + +(** Digital signature algorithm. *) +module type Dsa = sig + + type priv + (** The type for private keys. *) + + type pub + (** The type for public keys. *) + + (** {2 Serialisation} *) + + val priv_of_cstruct : Cstruct.t -> (priv, error) result + (** [priv_of_cstruct cs] decodes a private key from the buffer [cs]. If the + provided data is invalid, an error is returned. *) + + val priv_to_cstruct : priv -> Cstruct.t + (** [priv_to_cstruct p] encode the private key [p] to a buffer. *) + + val pub_of_cstruct : Cstruct.t -> (pub, error) result + (** [pub_of_cstruct cs] decodes a public key from the buffer [cs]. If the + provided data is invalid, an error is returned. *) + + val pub_to_cstruct : pub -> Cstruct.t + (** [pub_to_cstruct p] encodes the public key [p] into a buffer. *) + + (** {2 Deriving the public key} *) + + val pub_of_priv : priv -> pub + (** [pub_of_priv p] extracts the public key from the private key [p]. *) + + (** {2 Key generation} *) + + val generate : rng:(int -> Cstruct.t) -> priv * pub + (** [generate ~rng] generates a key pair using the provided random number + generator. *) + + (** {2 Cryptographic operations} *) + + val sign : ?mask:[ `No | `Yes | `Yes_with of Mirage_crypto_rng.g ] -> + key:priv -> ?k:Cstruct.t -> Cstruct.t -> Cstruct.t * Cstruct.t + (** [sign ~mask ~key ~k digest] signs the message [digest] using the private + [key]. Only the leftmost bits within the curve order are considered. If + [mask] is provided, the computation is blinded to protect the private + key operation. If [k] is not provided, it is computed using the + deterministic construction from RFC 6979. The result is a pair of + [r] and [s]. *) + + val verify : key:pub -> Cstruct.t * Cstruct.t -> Cstruct.t -> bool + (** [verify ~key (r, s) digest] verifies the signature [r, s] on the message + [digest] with the public [key]. The return value is [true] if verification + was successful, [false] otherwise. *) + + (** [K_gen] can be instantiated over a hashing module to obtain an RFC6979 + compliant [k]-generator for that hash. *) + module K_gen (H : Mirage_crypto.Hash.S) : sig + + val generate : key:priv -> Cstruct.t -> Cstruct.t + (** [generate ~key digest] deterministically takes the given private key + and message digest to a [k] suitable for seeding the signing process. *) + end +end + +(** Elliptic curve with Diffie-Hellman and DSA. *) +module type Dh_dsa = sig -val gen_key : rng:(int -> Cstruct.t) -> secret * Cstruct.t -(** [gen_key ~rng] generates a private and a public key for Ephemeral Diffie-Hellman - over P256. The returned key pair MUST only be used for a single key exchange. + (** Diffie-Hellman key exchange. *) + module Dh : Dh - [rng] is the function used to repeteadly generate a private key until a valid candidate - is obtained. [rng]'s int parameter is the size of the [Cstruct.t] to generate. - If [rng] returns an invalid length buffer, [Failure _] is raised. + (** Digital signature algorithm. *) + module Dsa : Dsa +end - The generated private key is checked to be greater than zero and lower than the group - order meaning the public key cannot be the point at inifinity. *) +(** The NIST P-224 curve, also known as SECP224R1. *) +module P224 : Dh_dsa -val key_exchange : secret -> Cstruct.t -> (Cstruct.t, error) result -(** [key_exchange secret received_public_key] performs Diffie-Hellman key exchange - using your secret and the data received from the other party. Returns the shared secret - or an error if the received data is wrongly encoded, doesn't represent a point on the curve - or represent the point at infinity. +(** The NIST P-256 curve, also known as SECP256R1. *) +module P256 : Dh_dsa - The shared secret is returned as is i.e. not stripped from leading 0x00 bytes. +(** The NIST P-384 curve, also known as SECP384R1. *) +module P384 : Dh_dsa - @see for public key encoding format. *) +(** The NIST P-521 curve, also known as SECP521R1. *) +module P521 : Dh_dsa diff --git a/ec/native/GNUmakefile b/ec/native/GNUmakefile new file mode 100644 index 00000000..a1914572 --- /dev/null +++ b/ec/native/GNUmakefile @@ -0,0 +1,119 @@ +# This file is part of mirage-crypto-ec, and used to generate C files +# As a prerequisite, fiat-crypto (https://github.com/mit-plv/fiat-crypto) +# needs to be cloned and "make standalone-ocaml" invoked +# The lowest bound of fiat-crypto is git commit +# 52561d2c59d2ef87af9676ad2039a8c5d8c22a21 (February 24th 2021) + +WBW_MONT ?= ../../../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery --static --use-value-barrier +N_FUNCS=mul add opp from_montgomery to_montgomery one msat divstep_precomp divstep to_bytes from_bytes + +# The NIST curve P-224 (AKA SECP224R1) +P224="2^224 - 2^96 + 1" + +.PHONY: p224_64.h +p224_64.h: + $(WBW_MONT) p224 64 $(P224) > $@ + +.PHONY: p224_32.h +p224_32.h: + $(WBW_MONT) p224 32 $(P224) > $@ + +# The group order N of P-224 +P224N="0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D" + +.PHONY: np224_64.h +np224_64.h: + $(WBW_MONT) np224 64 $(P224N) $(N_FUNCS) > $@ + +.PHONY: np224_32.h +np224_32.h: + $(WBW_MONT) np224 32 $(P224N) $(N_FUNCS) > $@ + +.PHONY: p224 +p224: p224_64.h p224_32.h np224_64.h np224_32.h + + +# The NIST curve P-256 (AKA SECP256R1) +P256="2^256 - 2^224 + 2^192 + 2^96 - 1" + +.PHONY: p256_64.h +p256_64.h: + $(WBW_MONT) p256 64 $(P256) > $@ + +.PHONY: p256_32.h +p256_32.h: + $(WBW_MONT) p256 32 $(P256) > $@ + +# The group order N of P-256 +P256N="0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551" + +.PHONY: np256_64.h +np256_64.h: + $(WBW_MONT) np256 64 $(P256N) $(N_FUNCS) > $@ + +.PHONY: np256_32.h +np256_32.h: + $(WBW_MONT) np256 32 $(P256N) $(N_FUNCS) > $@ + +.PHONY: p256 +p256: p256_64.h p256_32.h np256_64.h np256_32.h + +# The NIST curve P-384 (AKA SECP384R1) +P384="2^384 - 2^128 - 2^96 + 2^32 - 1" + +.PHONY: p384_64.h +p384_64.h: + $(WBW_MONT) p384 64 $(P384) > $@ + +.PHONY: p384_32.h +p384_32.h: + $(WBW_MONT) p384 32 $(P384) > $@ + +# The group order N of P-384 +P384N="0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973" + +.PHONY: np384_64.h +np384_64.h: + $(WBW_MONT) np384 64 $(P384N) $(N_FUNCS) > $@ + +.PHONY: np384_32.h +np384_32.h: + $(WBW_MONT) np384 32 $(P384N) $(N_FUNCS) > $@ + +.PHONY: p384 +p384: p384_64.h p384_32.h np384_64.h np384_32.h + +# The NIST curve P-521 (AKA SECP521R1) +P521="2^521 - 1" + +.PHONY: p521_64.h +p521_64.h: + $(WBW_MONT) p521 64 $(P521) > $@ + +.PHONY: p521_32.h +p521_32.h: + $(WBW_MONT) p521 32 $(P521) > $@ + +# The group order N of P-521 +P521N="0x01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409" + +.PHONY: np521_64.h +np521_64.h: + $(WBW_MONT) np521 64 $(P521N) $(N_FUNCS) > $@ + +.PHONY: np521_32.h +np521_32.h: + $(WBW_MONT) np521 32 $(P521N) $(N_FUNCS) > $@ + +.PHONY: p521 +p521: p521_64.h p521_32.h np521_64.h np521_32.h + +.PHONY: clean +clean: + $(RM) p224_32.h p224_64.h np224_32.h np224_64.h + $(RM) p256_32.h p256_64.h np256_32.h np256_64.h + $(RM) p384_32.h p384_64.h np384_32.h np384_64.h + $(RM) p521_32.h p521_64.h np521_32.h np521_64.h + +.PHONY: all +all: p224 p256 p384 p521 diff --git a/ec/native/README.md b/ec/native/README.md new file mode 100644 index 00000000..890d91e9 --- /dev/null +++ b/ec/native/README.md @@ -0,0 +1,12 @@ +# Generated code from fiat + +This directory includes several files ("p*.h") that are generated by +[fiat](https://github.com/mit-plv/fiat-crypto). The Makefile provides +targets to generate these files. + +The file "inversion_template.h" is copied from the fiat-crypto repository +at e31a36d5f1b20134e67ccc5339d88f0ff3cb0f86 (inversion-c/inversion_template.c), +and has some modifications: the "inversion" function is declared "static", +and the convenience function "inversion" is provided. + +The "*_stubs.c" files are handcrafted. diff --git a/ec/native/inversion_template.h b/ec/native/inversion_template.h new file mode 100644 index 00000000..d02c95d5 --- /dev/null +++ b/ec/native/inversion_template.h @@ -0,0 +1,63 @@ +#define MAKE_FN_NAME1(x,y) x ## y +#define MAKE_FN_NAME(x,y) MAKE_FN_NAME1(x,y) + +#define PRECOMP MAKE_FN_NAME(CURVE_DESCRIPTION,_divstep_precomp) +#define MSAT MAKE_FN_NAME(CURVE_DESCRIPTION,_msat) +#define MONE MAKE_FN_NAME(CURVE_DESCRIPTION,_set_one) +#define DIVSTEP MAKE_FN_NAME(CURVE_DESCRIPTION,_divstep) +#define OPP MAKE_FN_NAME(CURVE_DESCRIPTION,_opp) +#define MUL MAKE_FN_NAME(CURVE_DESCRIPTION,_mul) + +#if LEN_PRIME < 46 +#define ITERATIONS (((49 * LEN_PRIME) + 80) / 17) +#else +#define ITERATIONS (((49 * LEN_PRIME) + 57) / 17) +#endif + +#define SAT_LIMBS LIMBS + 1 /* we might need 2 more bits to represent m in twos complement */ +#define BYTES 8 * (((LEN_PRIME - 1) / 64) + 1) + +static void inverse(WORD out[LIMBS], WORD g[SAT_LIMBS]) { + + WORD precomp[LIMBS]; + PRECOMP(precomp); + + WORD d = 1; + WORD f[SAT_LIMBS]; + WORD v[LIMBS]; + WORD r[LIMBS]; + WORD out1; + WORD out2[SAT_LIMBS], out3[SAT_LIMBS], out4[LIMBS], out5[LIMBS]; + + MSAT(f); + MONE(r); + for (int j = 0; j < LIMBS; j++) v[j] = 0; + + for (int i = 0; i < ITERATIONS - (ITERATIONS % 2); i+=2) { + DIVSTEP(&out1,out2,out3,out4,out5,d,f,g,v,r); + DIVSTEP(&d,f,g,v,r,out1,out2,out3,out4,out5); + } + if (ITERATIONS % 2) { + DIVSTEP(&out1,out2,out3,out4,out5,d,f,g,v,r); + for (int k = 0; k < LIMBS; k++) v[k] = out4[k]; + for (int k = 0; k < SAT_LIMBS; k++) f[k] = out2[k]; + } + + WORD h[LIMBS]; + if (f[SAT_LIMBS - 1] >> (WORDSIZE - 1)) { + OPP(h, v); + for (int k = 0; k < LIMBS; k++) v[k] = h[k]; + } + + MUL(out, v, precomp); + + return; +} + +static void inversion (WORD out[LIMBS], WORD in[LIMBS]) { + WORD in_[SAT_LIMBS]; + for (int i = 0; i < LIMBS; i++) in_[i] = in[i]; + in_[LIMBS] = 0; + inverse(out, in_); + return; +} diff --git a/ec/native/np224_32.h b/ec/native/np224_32.h new file mode 100644 index 00000000..64421fb0 --- /dev/null +++ b/ec/native/np224_32.h @@ -0,0 +1,3596 @@ +/* Autogenerated: '../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery' --static --use-value-barrier np224 32 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D mul add opp from_montgomery to_montgomery one msat divstep_precomp divstep to_bytes from_bytes */ +/* curve description: np224 */ +/* machine_wordsize = 32 (from "32") */ +/* requested operations: mul, add, opp, from_montgomery, to_montgomery, one, msat, divstep_precomp, divstep, to_bytes, from_bytes */ +/* m = 0xffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d (from "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 32) + (z[2] << 64) + (z[3] << 96) + (z[4] << 128) + (z[5] << 160) + (z[6] << 192) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) */ + +#include +typedef unsigned char fiat_np224_uint1; +typedef signed char fiat_np224_int1; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_NP224_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint32_t fiat_np224_value_barrier_u32(uint32_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_np224_value_barrier_u32(x) (x) +#endif + + +/* + * The function fiat_np224_addcarryx_u32 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^32 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_np224_addcarryx_u32(uint32_t* out1, fiat_np224_uint1* out2, fiat_np224_uint1 arg1, uint32_t arg2, uint32_t arg3) { + uint64_t x1; + uint32_t x2; + fiat_np224_uint1 x3; + x1 = ((arg1 + (uint64_t)arg2) + arg3); + x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + x3 = (fiat_np224_uint1)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_np224_subborrowx_u32 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^32 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_np224_subborrowx_u32(uint32_t* out1, fiat_np224_uint1* out2, fiat_np224_uint1 arg1, uint32_t arg2, uint32_t arg3) { + int64_t x1; + fiat_np224_int1 x2; + uint32_t x3; + x1 = ((arg2 - (int64_t)arg1) - arg3); + x2 = (fiat_np224_int1)(x1 >> 32); + x3 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + *out1 = x3; + *out2 = (fiat_np224_uint1)(0x0 - x2); +} + +/* + * The function fiat_np224_mulx_u32 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^32 + * out2 = ⌊arg1 * arg2 / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0xffffffff] + */ +static void fiat_np224_mulx_u32(uint32_t* out1, uint32_t* out2, uint32_t arg1, uint32_t arg2) { + uint64_t x1; + uint32_t x2; + uint32_t x3; + x1 = ((uint64_t)arg1 * arg2); + x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + x3 = (uint32_t)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_np224_cmovznz_u32 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static void fiat_np224_cmovznz_u32(uint32_t* out1, fiat_np224_uint1 arg1, uint32_t arg2, uint32_t arg3) { + fiat_np224_uint1 x1; + uint32_t x2; + uint32_t x3; + x1 = (!(!arg1)); + x2 = ((fiat_np224_int1)(0x0 - x1) & UINT32_C(0xffffffff)); + x3 = ((fiat_np224_value_barrier_u32(x2) & arg3) | (fiat_np224_value_barrier_u32((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_np224_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np224_mul(uint32_t out1[7], const uint32_t arg1[7], const uint32_t arg2[7]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + fiat_np224_uint1 x23; + uint32_t x24; + fiat_np224_uint1 x25; + uint32_t x26; + fiat_np224_uint1 x27; + uint32_t x28; + fiat_np224_uint1 x29; + uint32_t x30; + fiat_np224_uint1 x31; + uint32_t x32; + fiat_np224_uint1 x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + fiat_np224_uint1 x52; + uint32_t x53; + fiat_np224_uint1 x54; + uint32_t x55; + fiat_np224_uint1 x56; + uint32_t x57; + fiat_np224_uint1 x58; + uint32_t x59; + fiat_np224_uint1 x60; + uint32_t x61; + fiat_np224_uint1 x62; + uint32_t x63; + uint32_t x64; + fiat_np224_uint1 x65; + uint32_t x66; + fiat_np224_uint1 x67; + uint32_t x68; + fiat_np224_uint1 x69; + uint32_t x70; + fiat_np224_uint1 x71; + uint32_t x72; + fiat_np224_uint1 x73; + uint32_t x74; + fiat_np224_uint1 x75; + uint32_t x76; + fiat_np224_uint1 x77; + uint32_t x78; + fiat_np224_uint1 x79; + uint32_t x80; + uint32_t x81; + uint32_t x82; + uint32_t x83; + uint32_t x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + uint32_t x88; + uint32_t x89; + uint32_t x90; + uint32_t x91; + uint32_t x92; + uint32_t x93; + uint32_t x94; + fiat_np224_uint1 x95; + uint32_t x96; + fiat_np224_uint1 x97; + uint32_t x98; + fiat_np224_uint1 x99; + uint32_t x100; + fiat_np224_uint1 x101; + uint32_t x102; + fiat_np224_uint1 x103; + uint32_t x104; + fiat_np224_uint1 x105; + uint32_t x106; + uint32_t x107; + fiat_np224_uint1 x108; + uint32_t x109; + fiat_np224_uint1 x110; + uint32_t x111; + fiat_np224_uint1 x112; + uint32_t x113; + fiat_np224_uint1 x114; + uint32_t x115; + fiat_np224_uint1 x116; + uint32_t x117; + fiat_np224_uint1 x118; + uint32_t x119; + fiat_np224_uint1 x120; + uint32_t x121; + fiat_np224_uint1 x122; + uint32_t x123; + uint32_t x124; + uint32_t x125; + uint32_t x126; + uint32_t x127; + uint32_t x128; + uint32_t x129; + uint32_t x130; + uint32_t x131; + uint32_t x132; + uint32_t x133; + uint32_t x134; + uint32_t x135; + uint32_t x136; + uint32_t x137; + uint32_t x138; + uint32_t x139; + fiat_np224_uint1 x140; + uint32_t x141; + fiat_np224_uint1 x142; + uint32_t x143; + fiat_np224_uint1 x144; + uint32_t x145; + fiat_np224_uint1 x146; + uint32_t x147; + fiat_np224_uint1 x148; + uint32_t x149; + fiat_np224_uint1 x150; + uint32_t x151; + uint32_t x152; + fiat_np224_uint1 x153; + uint32_t x154; + fiat_np224_uint1 x155; + uint32_t x156; + fiat_np224_uint1 x157; + uint32_t x158; + fiat_np224_uint1 x159; + uint32_t x160; + fiat_np224_uint1 x161; + uint32_t x162; + fiat_np224_uint1 x163; + uint32_t x164; + fiat_np224_uint1 x165; + uint32_t x166; + fiat_np224_uint1 x167; + uint32_t x168; + uint32_t x169; + uint32_t x170; + uint32_t x171; + uint32_t x172; + uint32_t x173; + uint32_t x174; + uint32_t x175; + uint32_t x176; + uint32_t x177; + uint32_t x178; + uint32_t x179; + uint32_t x180; + uint32_t x181; + uint32_t x182; + uint32_t x183; + fiat_np224_uint1 x184; + uint32_t x185; + fiat_np224_uint1 x186; + uint32_t x187; + fiat_np224_uint1 x188; + uint32_t x189; + fiat_np224_uint1 x190; + uint32_t x191; + fiat_np224_uint1 x192; + uint32_t x193; + fiat_np224_uint1 x194; + uint32_t x195; + uint32_t x196; + fiat_np224_uint1 x197; + uint32_t x198; + fiat_np224_uint1 x199; + uint32_t x200; + fiat_np224_uint1 x201; + uint32_t x202; + fiat_np224_uint1 x203; + uint32_t x204; + fiat_np224_uint1 x205; + uint32_t x206; + fiat_np224_uint1 x207; + uint32_t x208; + fiat_np224_uint1 x209; + uint32_t x210; + fiat_np224_uint1 x211; + uint32_t x212; + uint32_t x213; + uint32_t x214; + uint32_t x215; + uint32_t x216; + uint32_t x217; + uint32_t x218; + uint32_t x219; + uint32_t x220; + uint32_t x221; + uint32_t x222; + uint32_t x223; + uint32_t x224; + uint32_t x225; + uint32_t x226; + uint32_t x227; + uint32_t x228; + fiat_np224_uint1 x229; + uint32_t x230; + fiat_np224_uint1 x231; + uint32_t x232; + fiat_np224_uint1 x233; + uint32_t x234; + fiat_np224_uint1 x235; + uint32_t x236; + fiat_np224_uint1 x237; + uint32_t x238; + fiat_np224_uint1 x239; + uint32_t x240; + uint32_t x241; + fiat_np224_uint1 x242; + uint32_t x243; + fiat_np224_uint1 x244; + uint32_t x245; + fiat_np224_uint1 x246; + uint32_t x247; + fiat_np224_uint1 x248; + uint32_t x249; + fiat_np224_uint1 x250; + uint32_t x251; + fiat_np224_uint1 x252; + uint32_t x253; + fiat_np224_uint1 x254; + uint32_t x255; + fiat_np224_uint1 x256; + uint32_t x257; + uint32_t x258; + uint32_t x259; + uint32_t x260; + uint32_t x261; + uint32_t x262; + uint32_t x263; + uint32_t x264; + uint32_t x265; + uint32_t x266; + uint32_t x267; + uint32_t x268; + uint32_t x269; + uint32_t x270; + uint32_t x271; + uint32_t x272; + fiat_np224_uint1 x273; + uint32_t x274; + fiat_np224_uint1 x275; + uint32_t x276; + fiat_np224_uint1 x277; + uint32_t x278; + fiat_np224_uint1 x279; + uint32_t x280; + fiat_np224_uint1 x281; + uint32_t x282; + fiat_np224_uint1 x283; + uint32_t x284; + uint32_t x285; + fiat_np224_uint1 x286; + uint32_t x287; + fiat_np224_uint1 x288; + uint32_t x289; + fiat_np224_uint1 x290; + uint32_t x291; + fiat_np224_uint1 x292; + uint32_t x293; + fiat_np224_uint1 x294; + uint32_t x295; + fiat_np224_uint1 x296; + uint32_t x297; + fiat_np224_uint1 x298; + uint32_t x299; + fiat_np224_uint1 x300; + uint32_t x301; + uint32_t x302; + uint32_t x303; + uint32_t x304; + uint32_t x305; + uint32_t x306; + uint32_t x307; + uint32_t x308; + uint32_t x309; + uint32_t x310; + uint32_t x311; + uint32_t x312; + uint32_t x313; + uint32_t x314; + uint32_t x315; + uint32_t x316; + uint32_t x317; + fiat_np224_uint1 x318; + uint32_t x319; + fiat_np224_uint1 x320; + uint32_t x321; + fiat_np224_uint1 x322; + uint32_t x323; + fiat_np224_uint1 x324; + uint32_t x325; + fiat_np224_uint1 x326; + uint32_t x327; + fiat_np224_uint1 x328; + uint32_t x329; + uint32_t x330; + fiat_np224_uint1 x331; + uint32_t x332; + fiat_np224_uint1 x333; + uint32_t x334; + fiat_np224_uint1 x335; + uint32_t x336; + fiat_np224_uint1 x337; + uint32_t x338; + fiat_np224_uint1 x339; + uint32_t x340; + fiat_np224_uint1 x341; + uint32_t x342; + fiat_np224_uint1 x343; + uint32_t x344; + fiat_np224_uint1 x345; + uint32_t x346; + uint32_t x347; + uint32_t x348; + uint32_t x349; + uint32_t x350; + uint32_t x351; + uint32_t x352; + uint32_t x353; + uint32_t x354; + uint32_t x355; + uint32_t x356; + uint32_t x357; + uint32_t x358; + uint32_t x359; + uint32_t x360; + uint32_t x361; + fiat_np224_uint1 x362; + uint32_t x363; + fiat_np224_uint1 x364; + uint32_t x365; + fiat_np224_uint1 x366; + uint32_t x367; + fiat_np224_uint1 x368; + uint32_t x369; + fiat_np224_uint1 x370; + uint32_t x371; + fiat_np224_uint1 x372; + uint32_t x373; + uint32_t x374; + fiat_np224_uint1 x375; + uint32_t x376; + fiat_np224_uint1 x377; + uint32_t x378; + fiat_np224_uint1 x379; + uint32_t x380; + fiat_np224_uint1 x381; + uint32_t x382; + fiat_np224_uint1 x383; + uint32_t x384; + fiat_np224_uint1 x385; + uint32_t x386; + fiat_np224_uint1 x387; + uint32_t x388; + fiat_np224_uint1 x389; + uint32_t x390; + uint32_t x391; + uint32_t x392; + uint32_t x393; + uint32_t x394; + uint32_t x395; + uint32_t x396; + uint32_t x397; + uint32_t x398; + uint32_t x399; + uint32_t x400; + uint32_t x401; + uint32_t x402; + uint32_t x403; + uint32_t x404; + uint32_t x405; + uint32_t x406; + fiat_np224_uint1 x407; + uint32_t x408; + fiat_np224_uint1 x409; + uint32_t x410; + fiat_np224_uint1 x411; + uint32_t x412; + fiat_np224_uint1 x413; + uint32_t x414; + fiat_np224_uint1 x415; + uint32_t x416; + fiat_np224_uint1 x417; + uint32_t x418; + uint32_t x419; + fiat_np224_uint1 x420; + uint32_t x421; + fiat_np224_uint1 x422; + uint32_t x423; + fiat_np224_uint1 x424; + uint32_t x425; + fiat_np224_uint1 x426; + uint32_t x427; + fiat_np224_uint1 x428; + uint32_t x429; + fiat_np224_uint1 x430; + uint32_t x431; + fiat_np224_uint1 x432; + uint32_t x433; + fiat_np224_uint1 x434; + uint32_t x435; + uint32_t x436; + uint32_t x437; + uint32_t x438; + uint32_t x439; + uint32_t x440; + uint32_t x441; + uint32_t x442; + uint32_t x443; + uint32_t x444; + uint32_t x445; + uint32_t x446; + uint32_t x447; + uint32_t x448; + uint32_t x449; + uint32_t x450; + fiat_np224_uint1 x451; + uint32_t x452; + fiat_np224_uint1 x453; + uint32_t x454; + fiat_np224_uint1 x455; + uint32_t x456; + fiat_np224_uint1 x457; + uint32_t x458; + fiat_np224_uint1 x459; + uint32_t x460; + fiat_np224_uint1 x461; + uint32_t x462; + uint32_t x463; + fiat_np224_uint1 x464; + uint32_t x465; + fiat_np224_uint1 x466; + uint32_t x467; + fiat_np224_uint1 x468; + uint32_t x469; + fiat_np224_uint1 x470; + uint32_t x471; + fiat_np224_uint1 x472; + uint32_t x473; + fiat_np224_uint1 x474; + uint32_t x475; + fiat_np224_uint1 x476; + uint32_t x477; + fiat_np224_uint1 x478; + uint32_t x479; + uint32_t x480; + uint32_t x481; + uint32_t x482; + uint32_t x483; + uint32_t x484; + uint32_t x485; + uint32_t x486; + uint32_t x487; + uint32_t x488; + uint32_t x489; + uint32_t x490; + uint32_t x491; + uint32_t x492; + uint32_t x493; + uint32_t x494; + uint32_t x495; + fiat_np224_uint1 x496; + uint32_t x497; + fiat_np224_uint1 x498; + uint32_t x499; + fiat_np224_uint1 x500; + uint32_t x501; + fiat_np224_uint1 x502; + uint32_t x503; + fiat_np224_uint1 x504; + uint32_t x505; + fiat_np224_uint1 x506; + uint32_t x507; + uint32_t x508; + fiat_np224_uint1 x509; + uint32_t x510; + fiat_np224_uint1 x511; + uint32_t x512; + fiat_np224_uint1 x513; + uint32_t x514; + fiat_np224_uint1 x515; + uint32_t x516; + fiat_np224_uint1 x517; + uint32_t x518; + fiat_np224_uint1 x519; + uint32_t x520; + fiat_np224_uint1 x521; + uint32_t x522; + fiat_np224_uint1 x523; + uint32_t x524; + uint32_t x525; + uint32_t x526; + uint32_t x527; + uint32_t x528; + uint32_t x529; + uint32_t x530; + uint32_t x531; + uint32_t x532; + uint32_t x533; + uint32_t x534; + uint32_t x535; + uint32_t x536; + uint32_t x537; + uint32_t x538; + uint32_t x539; + fiat_np224_uint1 x540; + uint32_t x541; + fiat_np224_uint1 x542; + uint32_t x543; + fiat_np224_uint1 x544; + uint32_t x545; + fiat_np224_uint1 x546; + uint32_t x547; + fiat_np224_uint1 x548; + uint32_t x549; + fiat_np224_uint1 x550; + uint32_t x551; + uint32_t x552; + fiat_np224_uint1 x553; + uint32_t x554; + fiat_np224_uint1 x555; + uint32_t x556; + fiat_np224_uint1 x557; + uint32_t x558; + fiat_np224_uint1 x559; + uint32_t x560; + fiat_np224_uint1 x561; + uint32_t x562; + fiat_np224_uint1 x563; + uint32_t x564; + fiat_np224_uint1 x565; + uint32_t x566; + fiat_np224_uint1 x567; + uint32_t x568; + uint32_t x569; + uint32_t x570; + uint32_t x571; + uint32_t x572; + uint32_t x573; + uint32_t x574; + uint32_t x575; + uint32_t x576; + uint32_t x577; + uint32_t x578; + uint32_t x579; + uint32_t x580; + uint32_t x581; + uint32_t x582; + uint32_t x583; + uint32_t x584; + fiat_np224_uint1 x585; + uint32_t x586; + fiat_np224_uint1 x587; + uint32_t x588; + fiat_np224_uint1 x589; + uint32_t x590; + fiat_np224_uint1 x591; + uint32_t x592; + fiat_np224_uint1 x593; + uint32_t x594; + fiat_np224_uint1 x595; + uint32_t x596; + uint32_t x597; + fiat_np224_uint1 x598; + uint32_t x599; + fiat_np224_uint1 x600; + uint32_t x601; + fiat_np224_uint1 x602; + uint32_t x603; + fiat_np224_uint1 x604; + uint32_t x605; + fiat_np224_uint1 x606; + uint32_t x607; + fiat_np224_uint1 x608; + uint32_t x609; + fiat_np224_uint1 x610; + uint32_t x611; + fiat_np224_uint1 x612; + uint32_t x613; + uint32_t x614; + fiat_np224_uint1 x615; + uint32_t x616; + fiat_np224_uint1 x617; + uint32_t x618; + fiat_np224_uint1 x619; + uint32_t x620; + fiat_np224_uint1 x621; + uint32_t x622; + fiat_np224_uint1 x623; + uint32_t x624; + fiat_np224_uint1 x625; + uint32_t x626; + fiat_np224_uint1 x627; + uint32_t x628; + fiat_np224_uint1 x629; + uint32_t x630; + uint32_t x631; + uint32_t x632; + uint32_t x633; + uint32_t x634; + uint32_t x635; + uint32_t x636; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[0]); + fiat_np224_mulx_u32(&x8, &x9, x7, (arg2[6])); + fiat_np224_mulx_u32(&x10, &x11, x7, (arg2[5])); + fiat_np224_mulx_u32(&x12, &x13, x7, (arg2[4])); + fiat_np224_mulx_u32(&x14, &x15, x7, (arg2[3])); + fiat_np224_mulx_u32(&x16, &x17, x7, (arg2[2])); + fiat_np224_mulx_u32(&x18, &x19, x7, (arg2[1])); + fiat_np224_mulx_u32(&x20, &x21, x7, (arg2[0])); + fiat_np224_addcarryx_u32(&x22, &x23, 0x0, x21, x18); + fiat_np224_addcarryx_u32(&x24, &x25, x23, x19, x16); + fiat_np224_addcarryx_u32(&x26, &x27, x25, x17, x14); + fiat_np224_addcarryx_u32(&x28, &x29, x27, x15, x12); + fiat_np224_addcarryx_u32(&x30, &x31, x29, x13, x10); + fiat_np224_addcarryx_u32(&x32, &x33, x31, x11, x8); + x34 = (x33 + x9); + fiat_np224_mulx_u32(&x35, &x36, x20, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x37, &x38, x35, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x39, &x40, x35, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x41, &x42, x35, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x43, &x44, x35, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x45, &x46, x35, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x47, &x48, x35, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x49, &x50, x35, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x51, &x52, 0x0, x50, x47); + fiat_np224_addcarryx_u32(&x53, &x54, x52, x48, x45); + fiat_np224_addcarryx_u32(&x55, &x56, x54, x46, x43); + fiat_np224_addcarryx_u32(&x57, &x58, x56, x44, x41); + fiat_np224_addcarryx_u32(&x59, &x60, x58, x42, x39); + fiat_np224_addcarryx_u32(&x61, &x62, x60, x40, x37); + x63 = (x62 + x38); + fiat_np224_addcarryx_u32(&x64, &x65, 0x0, x20, x49); + fiat_np224_addcarryx_u32(&x66, &x67, x65, x22, x51); + fiat_np224_addcarryx_u32(&x68, &x69, x67, x24, x53); + fiat_np224_addcarryx_u32(&x70, &x71, x69, x26, x55); + fiat_np224_addcarryx_u32(&x72, &x73, x71, x28, x57); + fiat_np224_addcarryx_u32(&x74, &x75, x73, x30, x59); + fiat_np224_addcarryx_u32(&x76, &x77, x75, x32, x61); + fiat_np224_addcarryx_u32(&x78, &x79, x77, x34, x63); + fiat_np224_mulx_u32(&x80, &x81, x1, (arg2[6])); + fiat_np224_mulx_u32(&x82, &x83, x1, (arg2[5])); + fiat_np224_mulx_u32(&x84, &x85, x1, (arg2[4])); + fiat_np224_mulx_u32(&x86, &x87, x1, (arg2[3])); + fiat_np224_mulx_u32(&x88, &x89, x1, (arg2[2])); + fiat_np224_mulx_u32(&x90, &x91, x1, (arg2[1])); + fiat_np224_mulx_u32(&x92, &x93, x1, (arg2[0])); + fiat_np224_addcarryx_u32(&x94, &x95, 0x0, x93, x90); + fiat_np224_addcarryx_u32(&x96, &x97, x95, x91, x88); + fiat_np224_addcarryx_u32(&x98, &x99, x97, x89, x86); + fiat_np224_addcarryx_u32(&x100, &x101, x99, x87, x84); + fiat_np224_addcarryx_u32(&x102, &x103, x101, x85, x82); + fiat_np224_addcarryx_u32(&x104, &x105, x103, x83, x80); + x106 = (x105 + x81); + fiat_np224_addcarryx_u32(&x107, &x108, 0x0, x66, x92); + fiat_np224_addcarryx_u32(&x109, &x110, x108, x68, x94); + fiat_np224_addcarryx_u32(&x111, &x112, x110, x70, x96); + fiat_np224_addcarryx_u32(&x113, &x114, x112, x72, x98); + fiat_np224_addcarryx_u32(&x115, &x116, x114, x74, x100); + fiat_np224_addcarryx_u32(&x117, &x118, x116, x76, x102); + fiat_np224_addcarryx_u32(&x119, &x120, x118, x78, x104); + fiat_np224_addcarryx_u32(&x121, &x122, x120, x79, x106); + fiat_np224_mulx_u32(&x123, &x124, x107, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x125, &x126, x123, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x127, &x128, x123, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x129, &x130, x123, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x131, &x132, x123, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x133, &x134, x123, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x135, &x136, x123, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x137, &x138, x123, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x139, &x140, 0x0, x138, x135); + fiat_np224_addcarryx_u32(&x141, &x142, x140, x136, x133); + fiat_np224_addcarryx_u32(&x143, &x144, x142, x134, x131); + fiat_np224_addcarryx_u32(&x145, &x146, x144, x132, x129); + fiat_np224_addcarryx_u32(&x147, &x148, x146, x130, x127); + fiat_np224_addcarryx_u32(&x149, &x150, x148, x128, x125); + x151 = (x150 + x126); + fiat_np224_addcarryx_u32(&x152, &x153, 0x0, x107, x137); + fiat_np224_addcarryx_u32(&x154, &x155, x153, x109, x139); + fiat_np224_addcarryx_u32(&x156, &x157, x155, x111, x141); + fiat_np224_addcarryx_u32(&x158, &x159, x157, x113, x143); + fiat_np224_addcarryx_u32(&x160, &x161, x159, x115, x145); + fiat_np224_addcarryx_u32(&x162, &x163, x161, x117, x147); + fiat_np224_addcarryx_u32(&x164, &x165, x163, x119, x149); + fiat_np224_addcarryx_u32(&x166, &x167, x165, x121, x151); + x168 = ((uint32_t)x167 + x122); + fiat_np224_mulx_u32(&x169, &x170, x2, (arg2[6])); + fiat_np224_mulx_u32(&x171, &x172, x2, (arg2[5])); + fiat_np224_mulx_u32(&x173, &x174, x2, (arg2[4])); + fiat_np224_mulx_u32(&x175, &x176, x2, (arg2[3])); + fiat_np224_mulx_u32(&x177, &x178, x2, (arg2[2])); + fiat_np224_mulx_u32(&x179, &x180, x2, (arg2[1])); + fiat_np224_mulx_u32(&x181, &x182, x2, (arg2[0])); + fiat_np224_addcarryx_u32(&x183, &x184, 0x0, x182, x179); + fiat_np224_addcarryx_u32(&x185, &x186, x184, x180, x177); + fiat_np224_addcarryx_u32(&x187, &x188, x186, x178, x175); + fiat_np224_addcarryx_u32(&x189, &x190, x188, x176, x173); + fiat_np224_addcarryx_u32(&x191, &x192, x190, x174, x171); + fiat_np224_addcarryx_u32(&x193, &x194, x192, x172, x169); + x195 = (x194 + x170); + fiat_np224_addcarryx_u32(&x196, &x197, 0x0, x154, x181); + fiat_np224_addcarryx_u32(&x198, &x199, x197, x156, x183); + fiat_np224_addcarryx_u32(&x200, &x201, x199, x158, x185); + fiat_np224_addcarryx_u32(&x202, &x203, x201, x160, x187); + fiat_np224_addcarryx_u32(&x204, &x205, x203, x162, x189); + fiat_np224_addcarryx_u32(&x206, &x207, x205, x164, x191); + fiat_np224_addcarryx_u32(&x208, &x209, x207, x166, x193); + fiat_np224_addcarryx_u32(&x210, &x211, x209, x168, x195); + fiat_np224_mulx_u32(&x212, &x213, x196, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x214, &x215, x212, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x216, &x217, x212, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x218, &x219, x212, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x220, &x221, x212, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x222, &x223, x212, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x224, &x225, x212, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x226, &x227, x212, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x228, &x229, 0x0, x227, x224); + fiat_np224_addcarryx_u32(&x230, &x231, x229, x225, x222); + fiat_np224_addcarryx_u32(&x232, &x233, x231, x223, x220); + fiat_np224_addcarryx_u32(&x234, &x235, x233, x221, x218); + fiat_np224_addcarryx_u32(&x236, &x237, x235, x219, x216); + fiat_np224_addcarryx_u32(&x238, &x239, x237, x217, x214); + x240 = (x239 + x215); + fiat_np224_addcarryx_u32(&x241, &x242, 0x0, x196, x226); + fiat_np224_addcarryx_u32(&x243, &x244, x242, x198, x228); + fiat_np224_addcarryx_u32(&x245, &x246, x244, x200, x230); + fiat_np224_addcarryx_u32(&x247, &x248, x246, x202, x232); + fiat_np224_addcarryx_u32(&x249, &x250, x248, x204, x234); + fiat_np224_addcarryx_u32(&x251, &x252, x250, x206, x236); + fiat_np224_addcarryx_u32(&x253, &x254, x252, x208, x238); + fiat_np224_addcarryx_u32(&x255, &x256, x254, x210, x240); + x257 = ((uint32_t)x256 + x211); + fiat_np224_mulx_u32(&x258, &x259, x3, (arg2[6])); + fiat_np224_mulx_u32(&x260, &x261, x3, (arg2[5])); + fiat_np224_mulx_u32(&x262, &x263, x3, (arg2[4])); + fiat_np224_mulx_u32(&x264, &x265, x3, (arg2[3])); + fiat_np224_mulx_u32(&x266, &x267, x3, (arg2[2])); + fiat_np224_mulx_u32(&x268, &x269, x3, (arg2[1])); + fiat_np224_mulx_u32(&x270, &x271, x3, (arg2[0])); + fiat_np224_addcarryx_u32(&x272, &x273, 0x0, x271, x268); + fiat_np224_addcarryx_u32(&x274, &x275, x273, x269, x266); + fiat_np224_addcarryx_u32(&x276, &x277, x275, x267, x264); + fiat_np224_addcarryx_u32(&x278, &x279, x277, x265, x262); + fiat_np224_addcarryx_u32(&x280, &x281, x279, x263, x260); + fiat_np224_addcarryx_u32(&x282, &x283, x281, x261, x258); + x284 = (x283 + x259); + fiat_np224_addcarryx_u32(&x285, &x286, 0x0, x243, x270); + fiat_np224_addcarryx_u32(&x287, &x288, x286, x245, x272); + fiat_np224_addcarryx_u32(&x289, &x290, x288, x247, x274); + fiat_np224_addcarryx_u32(&x291, &x292, x290, x249, x276); + fiat_np224_addcarryx_u32(&x293, &x294, x292, x251, x278); + fiat_np224_addcarryx_u32(&x295, &x296, x294, x253, x280); + fiat_np224_addcarryx_u32(&x297, &x298, x296, x255, x282); + fiat_np224_addcarryx_u32(&x299, &x300, x298, x257, x284); + fiat_np224_mulx_u32(&x301, &x302, x285, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x303, &x304, x301, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x305, &x306, x301, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x307, &x308, x301, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x309, &x310, x301, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x311, &x312, x301, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x313, &x314, x301, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x315, &x316, x301, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x317, &x318, 0x0, x316, x313); + fiat_np224_addcarryx_u32(&x319, &x320, x318, x314, x311); + fiat_np224_addcarryx_u32(&x321, &x322, x320, x312, x309); + fiat_np224_addcarryx_u32(&x323, &x324, x322, x310, x307); + fiat_np224_addcarryx_u32(&x325, &x326, x324, x308, x305); + fiat_np224_addcarryx_u32(&x327, &x328, x326, x306, x303); + x329 = (x328 + x304); + fiat_np224_addcarryx_u32(&x330, &x331, 0x0, x285, x315); + fiat_np224_addcarryx_u32(&x332, &x333, x331, x287, x317); + fiat_np224_addcarryx_u32(&x334, &x335, x333, x289, x319); + fiat_np224_addcarryx_u32(&x336, &x337, x335, x291, x321); + fiat_np224_addcarryx_u32(&x338, &x339, x337, x293, x323); + fiat_np224_addcarryx_u32(&x340, &x341, x339, x295, x325); + fiat_np224_addcarryx_u32(&x342, &x343, x341, x297, x327); + fiat_np224_addcarryx_u32(&x344, &x345, x343, x299, x329); + x346 = ((uint32_t)x345 + x300); + fiat_np224_mulx_u32(&x347, &x348, x4, (arg2[6])); + fiat_np224_mulx_u32(&x349, &x350, x4, (arg2[5])); + fiat_np224_mulx_u32(&x351, &x352, x4, (arg2[4])); + fiat_np224_mulx_u32(&x353, &x354, x4, (arg2[3])); + fiat_np224_mulx_u32(&x355, &x356, x4, (arg2[2])); + fiat_np224_mulx_u32(&x357, &x358, x4, (arg2[1])); + fiat_np224_mulx_u32(&x359, &x360, x4, (arg2[0])); + fiat_np224_addcarryx_u32(&x361, &x362, 0x0, x360, x357); + fiat_np224_addcarryx_u32(&x363, &x364, x362, x358, x355); + fiat_np224_addcarryx_u32(&x365, &x366, x364, x356, x353); + fiat_np224_addcarryx_u32(&x367, &x368, x366, x354, x351); + fiat_np224_addcarryx_u32(&x369, &x370, x368, x352, x349); + fiat_np224_addcarryx_u32(&x371, &x372, x370, x350, x347); + x373 = (x372 + x348); + fiat_np224_addcarryx_u32(&x374, &x375, 0x0, x332, x359); + fiat_np224_addcarryx_u32(&x376, &x377, x375, x334, x361); + fiat_np224_addcarryx_u32(&x378, &x379, x377, x336, x363); + fiat_np224_addcarryx_u32(&x380, &x381, x379, x338, x365); + fiat_np224_addcarryx_u32(&x382, &x383, x381, x340, x367); + fiat_np224_addcarryx_u32(&x384, &x385, x383, x342, x369); + fiat_np224_addcarryx_u32(&x386, &x387, x385, x344, x371); + fiat_np224_addcarryx_u32(&x388, &x389, x387, x346, x373); + fiat_np224_mulx_u32(&x390, &x391, x374, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x392, &x393, x390, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x394, &x395, x390, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x396, &x397, x390, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x398, &x399, x390, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x400, &x401, x390, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x402, &x403, x390, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x404, &x405, x390, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x406, &x407, 0x0, x405, x402); + fiat_np224_addcarryx_u32(&x408, &x409, x407, x403, x400); + fiat_np224_addcarryx_u32(&x410, &x411, x409, x401, x398); + fiat_np224_addcarryx_u32(&x412, &x413, x411, x399, x396); + fiat_np224_addcarryx_u32(&x414, &x415, x413, x397, x394); + fiat_np224_addcarryx_u32(&x416, &x417, x415, x395, x392); + x418 = (x417 + x393); + fiat_np224_addcarryx_u32(&x419, &x420, 0x0, x374, x404); + fiat_np224_addcarryx_u32(&x421, &x422, x420, x376, x406); + fiat_np224_addcarryx_u32(&x423, &x424, x422, x378, x408); + fiat_np224_addcarryx_u32(&x425, &x426, x424, x380, x410); + fiat_np224_addcarryx_u32(&x427, &x428, x426, x382, x412); + fiat_np224_addcarryx_u32(&x429, &x430, x428, x384, x414); + fiat_np224_addcarryx_u32(&x431, &x432, x430, x386, x416); + fiat_np224_addcarryx_u32(&x433, &x434, x432, x388, x418); + x435 = ((uint32_t)x434 + x389); + fiat_np224_mulx_u32(&x436, &x437, x5, (arg2[6])); + fiat_np224_mulx_u32(&x438, &x439, x5, (arg2[5])); + fiat_np224_mulx_u32(&x440, &x441, x5, (arg2[4])); + fiat_np224_mulx_u32(&x442, &x443, x5, (arg2[3])); + fiat_np224_mulx_u32(&x444, &x445, x5, (arg2[2])); + fiat_np224_mulx_u32(&x446, &x447, x5, (arg2[1])); + fiat_np224_mulx_u32(&x448, &x449, x5, (arg2[0])); + fiat_np224_addcarryx_u32(&x450, &x451, 0x0, x449, x446); + fiat_np224_addcarryx_u32(&x452, &x453, x451, x447, x444); + fiat_np224_addcarryx_u32(&x454, &x455, x453, x445, x442); + fiat_np224_addcarryx_u32(&x456, &x457, x455, x443, x440); + fiat_np224_addcarryx_u32(&x458, &x459, x457, x441, x438); + fiat_np224_addcarryx_u32(&x460, &x461, x459, x439, x436); + x462 = (x461 + x437); + fiat_np224_addcarryx_u32(&x463, &x464, 0x0, x421, x448); + fiat_np224_addcarryx_u32(&x465, &x466, x464, x423, x450); + fiat_np224_addcarryx_u32(&x467, &x468, x466, x425, x452); + fiat_np224_addcarryx_u32(&x469, &x470, x468, x427, x454); + fiat_np224_addcarryx_u32(&x471, &x472, x470, x429, x456); + fiat_np224_addcarryx_u32(&x473, &x474, x472, x431, x458); + fiat_np224_addcarryx_u32(&x475, &x476, x474, x433, x460); + fiat_np224_addcarryx_u32(&x477, &x478, x476, x435, x462); + fiat_np224_mulx_u32(&x479, &x480, x463, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x481, &x482, x479, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x483, &x484, x479, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x485, &x486, x479, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x487, &x488, x479, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x489, &x490, x479, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x491, &x492, x479, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x493, &x494, x479, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x495, &x496, 0x0, x494, x491); + fiat_np224_addcarryx_u32(&x497, &x498, x496, x492, x489); + fiat_np224_addcarryx_u32(&x499, &x500, x498, x490, x487); + fiat_np224_addcarryx_u32(&x501, &x502, x500, x488, x485); + fiat_np224_addcarryx_u32(&x503, &x504, x502, x486, x483); + fiat_np224_addcarryx_u32(&x505, &x506, x504, x484, x481); + x507 = (x506 + x482); + fiat_np224_addcarryx_u32(&x508, &x509, 0x0, x463, x493); + fiat_np224_addcarryx_u32(&x510, &x511, x509, x465, x495); + fiat_np224_addcarryx_u32(&x512, &x513, x511, x467, x497); + fiat_np224_addcarryx_u32(&x514, &x515, x513, x469, x499); + fiat_np224_addcarryx_u32(&x516, &x517, x515, x471, x501); + fiat_np224_addcarryx_u32(&x518, &x519, x517, x473, x503); + fiat_np224_addcarryx_u32(&x520, &x521, x519, x475, x505); + fiat_np224_addcarryx_u32(&x522, &x523, x521, x477, x507); + x524 = ((uint32_t)x523 + x478); + fiat_np224_mulx_u32(&x525, &x526, x6, (arg2[6])); + fiat_np224_mulx_u32(&x527, &x528, x6, (arg2[5])); + fiat_np224_mulx_u32(&x529, &x530, x6, (arg2[4])); + fiat_np224_mulx_u32(&x531, &x532, x6, (arg2[3])); + fiat_np224_mulx_u32(&x533, &x534, x6, (arg2[2])); + fiat_np224_mulx_u32(&x535, &x536, x6, (arg2[1])); + fiat_np224_mulx_u32(&x537, &x538, x6, (arg2[0])); + fiat_np224_addcarryx_u32(&x539, &x540, 0x0, x538, x535); + fiat_np224_addcarryx_u32(&x541, &x542, x540, x536, x533); + fiat_np224_addcarryx_u32(&x543, &x544, x542, x534, x531); + fiat_np224_addcarryx_u32(&x545, &x546, x544, x532, x529); + fiat_np224_addcarryx_u32(&x547, &x548, x546, x530, x527); + fiat_np224_addcarryx_u32(&x549, &x550, x548, x528, x525); + x551 = (x550 + x526); + fiat_np224_addcarryx_u32(&x552, &x553, 0x0, x510, x537); + fiat_np224_addcarryx_u32(&x554, &x555, x553, x512, x539); + fiat_np224_addcarryx_u32(&x556, &x557, x555, x514, x541); + fiat_np224_addcarryx_u32(&x558, &x559, x557, x516, x543); + fiat_np224_addcarryx_u32(&x560, &x561, x559, x518, x545); + fiat_np224_addcarryx_u32(&x562, &x563, x561, x520, x547); + fiat_np224_addcarryx_u32(&x564, &x565, x563, x522, x549); + fiat_np224_addcarryx_u32(&x566, &x567, x565, x524, x551); + fiat_np224_mulx_u32(&x568, &x569, x552, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x570, &x571, x568, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x572, &x573, x568, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x574, &x575, x568, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x576, &x577, x568, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x578, &x579, x568, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x580, &x581, x568, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x582, &x583, x568, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x584, &x585, 0x0, x583, x580); + fiat_np224_addcarryx_u32(&x586, &x587, x585, x581, x578); + fiat_np224_addcarryx_u32(&x588, &x589, x587, x579, x576); + fiat_np224_addcarryx_u32(&x590, &x591, x589, x577, x574); + fiat_np224_addcarryx_u32(&x592, &x593, x591, x575, x572); + fiat_np224_addcarryx_u32(&x594, &x595, x593, x573, x570); + x596 = (x595 + x571); + fiat_np224_addcarryx_u32(&x597, &x598, 0x0, x552, x582); + fiat_np224_addcarryx_u32(&x599, &x600, x598, x554, x584); + fiat_np224_addcarryx_u32(&x601, &x602, x600, x556, x586); + fiat_np224_addcarryx_u32(&x603, &x604, x602, x558, x588); + fiat_np224_addcarryx_u32(&x605, &x606, x604, x560, x590); + fiat_np224_addcarryx_u32(&x607, &x608, x606, x562, x592); + fiat_np224_addcarryx_u32(&x609, &x610, x608, x564, x594); + fiat_np224_addcarryx_u32(&x611, &x612, x610, x566, x596); + x613 = ((uint32_t)x612 + x567); + fiat_np224_subborrowx_u32(&x614, &x615, 0x0, x599, UINT32_C(0x5c5c2a3d)); + fiat_np224_subborrowx_u32(&x616, &x617, x615, x601, UINT32_C(0x13dd2945)); + fiat_np224_subborrowx_u32(&x618, &x619, x617, x603, UINT32_C(0xe0b8f03e)); + fiat_np224_subborrowx_u32(&x620, &x621, x619, x605, UINT32_C(0xffff16a2)); + fiat_np224_subborrowx_u32(&x622, &x623, x621, x607, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x624, &x625, x623, x609, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x626, &x627, x625, x611, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x628, &x629, x627, x613, 0x0); + fiat_np224_cmovznz_u32(&x630, x629, x614, x599); + fiat_np224_cmovznz_u32(&x631, x629, x616, x601); + fiat_np224_cmovznz_u32(&x632, x629, x618, x603); + fiat_np224_cmovznz_u32(&x633, x629, x620, x605); + fiat_np224_cmovznz_u32(&x634, x629, x622, x607); + fiat_np224_cmovznz_u32(&x635, x629, x624, x609); + fiat_np224_cmovznz_u32(&x636, x629, x626, x611); + out1[0] = x630; + out1[1] = x631; + out1[2] = x632; + out1[3] = x633; + out1[4] = x634; + out1[5] = x635; + out1[6] = x636; +} + +/* + * The function fiat_np224_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np224_add(uint32_t out1[7], const uint32_t arg1[7], const uint32_t arg2[7]) { + uint32_t x1; + fiat_np224_uint1 x2; + uint32_t x3; + fiat_np224_uint1 x4; + uint32_t x5; + fiat_np224_uint1 x6; + uint32_t x7; + fiat_np224_uint1 x8; + uint32_t x9; + fiat_np224_uint1 x10; + uint32_t x11; + fiat_np224_uint1 x12; + uint32_t x13; + fiat_np224_uint1 x14; + uint32_t x15; + fiat_np224_uint1 x16; + uint32_t x17; + fiat_np224_uint1 x18; + uint32_t x19; + fiat_np224_uint1 x20; + uint32_t x21; + fiat_np224_uint1 x22; + uint32_t x23; + fiat_np224_uint1 x24; + uint32_t x25; + fiat_np224_uint1 x26; + uint32_t x27; + fiat_np224_uint1 x28; + uint32_t x29; + fiat_np224_uint1 x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + fiat_np224_addcarryx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_np224_addcarryx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_np224_addcarryx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_np224_addcarryx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_np224_addcarryx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_np224_addcarryx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_np224_addcarryx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); + fiat_np224_subborrowx_u32(&x15, &x16, 0x0, x1, UINT32_C(0x5c5c2a3d)); + fiat_np224_subborrowx_u32(&x17, &x18, x16, x3, UINT32_C(0x13dd2945)); + fiat_np224_subborrowx_u32(&x19, &x20, x18, x5, UINT32_C(0xe0b8f03e)); + fiat_np224_subborrowx_u32(&x21, &x22, x20, x7, UINT32_C(0xffff16a2)); + fiat_np224_subborrowx_u32(&x23, &x24, x22, x9, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x25, &x26, x24, x11, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x27, &x28, x26, x13, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x29, &x30, x28, x14, 0x0); + fiat_np224_cmovznz_u32(&x31, x30, x15, x1); + fiat_np224_cmovznz_u32(&x32, x30, x17, x3); + fiat_np224_cmovznz_u32(&x33, x30, x19, x5); + fiat_np224_cmovznz_u32(&x34, x30, x21, x7); + fiat_np224_cmovznz_u32(&x35, x30, x23, x9); + fiat_np224_cmovznz_u32(&x36, x30, x25, x11); + fiat_np224_cmovznz_u32(&x37, x30, x27, x13); + out1[0] = x31; + out1[1] = x32; + out1[2] = x33; + out1[3] = x34; + out1[4] = x35; + out1[5] = x36; + out1[6] = x37; +} + +/* + * The function fiat_np224_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np224_opp(uint32_t out1[7], const uint32_t arg1[7]) { + uint32_t x1; + fiat_np224_uint1 x2; + uint32_t x3; + fiat_np224_uint1 x4; + uint32_t x5; + fiat_np224_uint1 x6; + uint32_t x7; + fiat_np224_uint1 x8; + uint32_t x9; + fiat_np224_uint1 x10; + uint32_t x11; + fiat_np224_uint1 x12; + uint32_t x13; + fiat_np224_uint1 x14; + uint32_t x15; + uint32_t x16; + fiat_np224_uint1 x17; + uint32_t x18; + fiat_np224_uint1 x19; + uint32_t x20; + fiat_np224_uint1 x21; + uint32_t x22; + fiat_np224_uint1 x23; + uint32_t x24; + fiat_np224_uint1 x25; + uint32_t x26; + fiat_np224_uint1 x27; + uint32_t x28; + fiat_np224_uint1 x29; + fiat_np224_subborrowx_u32(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_np224_subborrowx_u32(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_np224_subborrowx_u32(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_np224_subborrowx_u32(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_np224_subborrowx_u32(&x9, &x10, x8, 0x0, (arg1[4])); + fiat_np224_subborrowx_u32(&x11, &x12, x10, 0x0, (arg1[5])); + fiat_np224_subborrowx_u32(&x13, &x14, x12, 0x0, (arg1[6])); + fiat_np224_cmovznz_u32(&x15, x14, 0x0, UINT32_C(0xffffffff)); + fiat_np224_addcarryx_u32(&x16, &x17, 0x0, x1, (x15 & UINT32_C(0x5c5c2a3d))); + fiat_np224_addcarryx_u32(&x18, &x19, x17, x3, (x15 & UINT32_C(0x13dd2945))); + fiat_np224_addcarryx_u32(&x20, &x21, x19, x5, (x15 & UINT32_C(0xe0b8f03e))); + fiat_np224_addcarryx_u32(&x22, &x23, x21, x7, (x15 & UINT32_C(0xffff16a2))); + fiat_np224_addcarryx_u32(&x24, &x25, x23, x9, x15); + fiat_np224_addcarryx_u32(&x26, &x27, x25, x11, x15); + fiat_np224_addcarryx_u32(&x28, &x29, x27, x13, x15); + out1[0] = x16; + out1[1] = x18; + out1[2] = x20; + out1[3] = x22; + out1[4] = x24; + out1[5] = x26; + out1[6] = x28; +} + +/* + * The function fiat_np224_from_montgomery translates a field element out of the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^32)⁻¹ mod m)^7) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np224_from_montgomery(uint32_t out1[7], const uint32_t arg1[7]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + fiat_np224_uint1 x19; + uint32_t x20; + fiat_np224_uint1 x21; + uint32_t x22; + fiat_np224_uint1 x23; + uint32_t x24; + fiat_np224_uint1 x25; + uint32_t x26; + fiat_np224_uint1 x27; + uint32_t x28; + fiat_np224_uint1 x29; + uint32_t x30; + fiat_np224_uint1 x31; + uint32_t x32; + fiat_np224_uint1 x33; + uint32_t x34; + fiat_np224_uint1 x35; + uint32_t x36; + fiat_np224_uint1 x37; + uint32_t x38; + fiat_np224_uint1 x39; + uint32_t x40; + fiat_np224_uint1 x41; + uint32_t x42; + fiat_np224_uint1 x43; + uint32_t x44; + fiat_np224_uint1 x45; + uint32_t x46; + fiat_np224_uint1 x47; + uint32_t x48; + fiat_np224_uint1 x49; + uint32_t x50; + fiat_np224_uint1 x51; + uint32_t x52; + fiat_np224_uint1 x53; + uint32_t x54; + fiat_np224_uint1 x55; + uint32_t x56; + fiat_np224_uint1 x57; + uint32_t x58; + fiat_np224_uint1 x59; + uint32_t x60; + uint32_t x61; + uint32_t x62; + uint32_t x63; + uint32_t x64; + uint32_t x65; + uint32_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + fiat_np224_uint1 x77; + uint32_t x78; + fiat_np224_uint1 x79; + uint32_t x80; + fiat_np224_uint1 x81; + uint32_t x82; + fiat_np224_uint1 x83; + uint32_t x84; + fiat_np224_uint1 x85; + uint32_t x86; + fiat_np224_uint1 x87; + uint32_t x88; + fiat_np224_uint1 x89; + uint32_t x90; + fiat_np224_uint1 x91; + uint32_t x92; + fiat_np224_uint1 x93; + uint32_t x94; + fiat_np224_uint1 x95; + uint32_t x96; + fiat_np224_uint1 x97; + uint32_t x98; + fiat_np224_uint1 x99; + uint32_t x100; + fiat_np224_uint1 x101; + uint32_t x102; + fiat_np224_uint1 x103; + uint32_t x104; + fiat_np224_uint1 x105; + uint32_t x106; + fiat_np224_uint1 x107; + uint32_t x108; + fiat_np224_uint1 x109; + uint32_t x110; + fiat_np224_uint1 x111; + uint32_t x112; + fiat_np224_uint1 x113; + uint32_t x114; + fiat_np224_uint1 x115; + uint32_t x116; + fiat_np224_uint1 x117; + uint32_t x118; + uint32_t x119; + uint32_t x120; + uint32_t x121; + uint32_t x122; + uint32_t x123; + uint32_t x124; + uint32_t x125; + uint32_t x126; + uint32_t x127; + uint32_t x128; + uint32_t x129; + uint32_t x130; + uint32_t x131; + uint32_t x132; + uint32_t x133; + uint32_t x134; + fiat_np224_uint1 x135; + uint32_t x136; + fiat_np224_uint1 x137; + uint32_t x138; + fiat_np224_uint1 x139; + uint32_t x140; + fiat_np224_uint1 x141; + uint32_t x142; + fiat_np224_uint1 x143; + uint32_t x144; + fiat_np224_uint1 x145; + uint32_t x146; + fiat_np224_uint1 x147; + uint32_t x148; + fiat_np224_uint1 x149; + uint32_t x150; + fiat_np224_uint1 x151; + uint32_t x152; + fiat_np224_uint1 x153; + uint32_t x154; + fiat_np224_uint1 x155; + uint32_t x156; + fiat_np224_uint1 x157; + uint32_t x158; + fiat_np224_uint1 x159; + uint32_t x160; + fiat_np224_uint1 x161; + uint32_t x162; + fiat_np224_uint1 x163; + uint32_t x164; + fiat_np224_uint1 x165; + uint32_t x166; + fiat_np224_uint1 x167; + uint32_t x168; + fiat_np224_uint1 x169; + uint32_t x170; + fiat_np224_uint1 x171; + uint32_t x172; + fiat_np224_uint1 x173; + uint32_t x174; + fiat_np224_uint1 x175; + uint32_t x176; + uint32_t x177; + uint32_t x178; + uint32_t x179; + uint32_t x180; + uint32_t x181; + uint32_t x182; + uint32_t x183; + uint32_t x184; + uint32_t x185; + uint32_t x186; + uint32_t x187; + uint32_t x188; + uint32_t x189; + uint32_t x190; + uint32_t x191; + uint32_t x192; + fiat_np224_uint1 x193; + uint32_t x194; + fiat_np224_uint1 x195; + uint32_t x196; + fiat_np224_uint1 x197; + uint32_t x198; + fiat_np224_uint1 x199; + uint32_t x200; + fiat_np224_uint1 x201; + uint32_t x202; + fiat_np224_uint1 x203; + uint32_t x204; + fiat_np224_uint1 x205; + uint32_t x206; + fiat_np224_uint1 x207; + uint32_t x208; + fiat_np224_uint1 x209; + uint32_t x210; + fiat_np224_uint1 x211; + uint32_t x212; + fiat_np224_uint1 x213; + uint32_t x214; + fiat_np224_uint1 x215; + uint32_t x216; + fiat_np224_uint1 x217; + uint32_t x218; + fiat_np224_uint1 x219; + uint32_t x220; + fiat_np224_uint1 x221; + uint32_t x222; + fiat_np224_uint1 x223; + uint32_t x224; + fiat_np224_uint1 x225; + uint32_t x226; + fiat_np224_uint1 x227; + uint32_t x228; + fiat_np224_uint1 x229; + uint32_t x230; + fiat_np224_uint1 x231; + uint32_t x232; + fiat_np224_uint1 x233; + uint32_t x234; + uint32_t x235; + uint32_t x236; + uint32_t x237; + uint32_t x238; + uint32_t x239; + uint32_t x240; + uint32_t x241; + uint32_t x242; + uint32_t x243; + uint32_t x244; + uint32_t x245; + uint32_t x246; + uint32_t x247; + uint32_t x248; + uint32_t x249; + uint32_t x250; + fiat_np224_uint1 x251; + uint32_t x252; + fiat_np224_uint1 x253; + uint32_t x254; + fiat_np224_uint1 x255; + uint32_t x256; + fiat_np224_uint1 x257; + uint32_t x258; + fiat_np224_uint1 x259; + uint32_t x260; + fiat_np224_uint1 x261; + uint32_t x262; + fiat_np224_uint1 x263; + uint32_t x264; + fiat_np224_uint1 x265; + uint32_t x266; + fiat_np224_uint1 x267; + uint32_t x268; + fiat_np224_uint1 x269; + uint32_t x270; + fiat_np224_uint1 x271; + uint32_t x272; + fiat_np224_uint1 x273; + uint32_t x274; + fiat_np224_uint1 x275; + uint32_t x276; + fiat_np224_uint1 x277; + uint32_t x278; + fiat_np224_uint1 x279; + uint32_t x280; + fiat_np224_uint1 x281; + uint32_t x282; + fiat_np224_uint1 x283; + uint32_t x284; + fiat_np224_uint1 x285; + uint32_t x286; + fiat_np224_uint1 x287; + uint32_t x288; + fiat_np224_uint1 x289; + uint32_t x290; + fiat_np224_uint1 x291; + uint32_t x292; + uint32_t x293; + uint32_t x294; + uint32_t x295; + uint32_t x296; + uint32_t x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + uint32_t x303; + uint32_t x304; + uint32_t x305; + uint32_t x306; + uint32_t x307; + uint32_t x308; + fiat_np224_uint1 x309; + uint32_t x310; + fiat_np224_uint1 x311; + uint32_t x312; + fiat_np224_uint1 x313; + uint32_t x314; + fiat_np224_uint1 x315; + uint32_t x316; + fiat_np224_uint1 x317; + uint32_t x318; + fiat_np224_uint1 x319; + uint32_t x320; + fiat_np224_uint1 x321; + uint32_t x322; + fiat_np224_uint1 x323; + uint32_t x324; + fiat_np224_uint1 x325; + uint32_t x326; + fiat_np224_uint1 x327; + uint32_t x328; + fiat_np224_uint1 x329; + uint32_t x330; + fiat_np224_uint1 x331; + uint32_t x332; + fiat_np224_uint1 x333; + uint32_t x334; + fiat_np224_uint1 x335; + uint32_t x336; + fiat_np224_uint1 x337; + uint32_t x338; + fiat_np224_uint1 x339; + uint32_t x340; + fiat_np224_uint1 x341; + uint32_t x342; + fiat_np224_uint1 x343; + uint32_t x344; + fiat_np224_uint1 x345; + uint32_t x346; + fiat_np224_uint1 x347; + uint32_t x348; + fiat_np224_uint1 x349; + uint32_t x350; + uint32_t x351; + uint32_t x352; + uint32_t x353; + uint32_t x354; + uint32_t x355; + uint32_t x356; + uint32_t x357; + uint32_t x358; + uint32_t x359; + uint32_t x360; + uint32_t x361; + uint32_t x362; + uint32_t x363; + uint32_t x364; + uint32_t x365; + uint32_t x366; + fiat_np224_uint1 x367; + uint32_t x368; + fiat_np224_uint1 x369; + uint32_t x370; + fiat_np224_uint1 x371; + uint32_t x372; + fiat_np224_uint1 x373; + uint32_t x374; + fiat_np224_uint1 x375; + uint32_t x376; + fiat_np224_uint1 x377; + uint32_t x378; + fiat_np224_uint1 x379; + uint32_t x380; + fiat_np224_uint1 x381; + uint32_t x382; + fiat_np224_uint1 x383; + uint32_t x384; + fiat_np224_uint1 x385; + uint32_t x386; + fiat_np224_uint1 x387; + uint32_t x388; + fiat_np224_uint1 x389; + uint32_t x390; + fiat_np224_uint1 x391; + uint32_t x392; + fiat_np224_uint1 x393; + uint32_t x394; + fiat_np224_uint1 x395; + uint32_t x396; + fiat_np224_uint1 x397; + uint32_t x398; + fiat_np224_uint1 x399; + uint32_t x400; + fiat_np224_uint1 x401; + uint32_t x402; + fiat_np224_uint1 x403; + uint32_t x404; + fiat_np224_uint1 x405; + uint32_t x406; + fiat_np224_uint1 x407; + uint32_t x408; + fiat_np224_uint1 x409; + uint32_t x410; + uint32_t x411; + uint32_t x412; + uint32_t x413; + uint32_t x414; + uint32_t x415; + uint32_t x416; + x1 = (arg1[0]); + fiat_np224_mulx_u32(&x2, &x3, x1, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x4, &x5, x2, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x6, &x7, x2, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x8, &x9, x2, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x10, &x11, x2, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x12, &x13, x2, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x14, &x15, x2, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x16, &x17, x2, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x18, &x19, 0x0, x17, x14); + fiat_np224_addcarryx_u32(&x20, &x21, x19, x15, x12); + fiat_np224_addcarryx_u32(&x22, &x23, x21, x13, x10); + fiat_np224_addcarryx_u32(&x24, &x25, x23, x11, x8); + fiat_np224_addcarryx_u32(&x26, &x27, x25, x9, x6); + fiat_np224_addcarryx_u32(&x28, &x29, x27, x7, x4); + fiat_np224_addcarryx_u32(&x30, &x31, 0x0, x1, x16); + fiat_np224_addcarryx_u32(&x32, &x33, x31, 0x0, x18); + fiat_np224_addcarryx_u32(&x34, &x35, x33, 0x0, x20); + fiat_np224_addcarryx_u32(&x36, &x37, x35, 0x0, x22); + fiat_np224_addcarryx_u32(&x38, &x39, x37, 0x0, x24); + fiat_np224_addcarryx_u32(&x40, &x41, x39, 0x0, x26); + fiat_np224_addcarryx_u32(&x42, &x43, x41, 0x0, x28); + fiat_np224_addcarryx_u32(&x44, &x45, x43, 0x0, (x29 + x5)); + fiat_np224_addcarryx_u32(&x46, &x47, 0x0, x32, (arg1[1])); + fiat_np224_addcarryx_u32(&x48, &x49, x47, x34, 0x0); + fiat_np224_addcarryx_u32(&x50, &x51, x49, x36, 0x0); + fiat_np224_addcarryx_u32(&x52, &x53, x51, x38, 0x0); + fiat_np224_addcarryx_u32(&x54, &x55, x53, x40, 0x0); + fiat_np224_addcarryx_u32(&x56, &x57, x55, x42, 0x0); + fiat_np224_addcarryx_u32(&x58, &x59, x57, x44, 0x0); + fiat_np224_mulx_u32(&x60, &x61, x46, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x62, &x63, x60, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x64, &x65, x60, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x66, &x67, x60, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x68, &x69, x60, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x70, &x71, x60, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x72, &x73, x60, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x74, &x75, x60, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x76, &x77, 0x0, x75, x72); + fiat_np224_addcarryx_u32(&x78, &x79, x77, x73, x70); + fiat_np224_addcarryx_u32(&x80, &x81, x79, x71, x68); + fiat_np224_addcarryx_u32(&x82, &x83, x81, x69, x66); + fiat_np224_addcarryx_u32(&x84, &x85, x83, x67, x64); + fiat_np224_addcarryx_u32(&x86, &x87, x85, x65, x62); + fiat_np224_addcarryx_u32(&x88, &x89, 0x0, x46, x74); + fiat_np224_addcarryx_u32(&x90, &x91, x89, x48, x76); + fiat_np224_addcarryx_u32(&x92, &x93, x91, x50, x78); + fiat_np224_addcarryx_u32(&x94, &x95, x93, x52, x80); + fiat_np224_addcarryx_u32(&x96, &x97, x95, x54, x82); + fiat_np224_addcarryx_u32(&x98, &x99, x97, x56, x84); + fiat_np224_addcarryx_u32(&x100, &x101, x99, x58, x86); + fiat_np224_addcarryx_u32(&x102, &x103, x101, ((uint32_t)x59 + x45), (x87 + x63)); + fiat_np224_addcarryx_u32(&x104, &x105, 0x0, x90, (arg1[2])); + fiat_np224_addcarryx_u32(&x106, &x107, x105, x92, 0x0); + fiat_np224_addcarryx_u32(&x108, &x109, x107, x94, 0x0); + fiat_np224_addcarryx_u32(&x110, &x111, x109, x96, 0x0); + fiat_np224_addcarryx_u32(&x112, &x113, x111, x98, 0x0); + fiat_np224_addcarryx_u32(&x114, &x115, x113, x100, 0x0); + fiat_np224_addcarryx_u32(&x116, &x117, x115, x102, 0x0); + fiat_np224_mulx_u32(&x118, &x119, x104, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x120, &x121, x118, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x122, &x123, x118, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x124, &x125, x118, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x126, &x127, x118, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x128, &x129, x118, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x130, &x131, x118, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x132, &x133, x118, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x134, &x135, 0x0, x133, x130); + fiat_np224_addcarryx_u32(&x136, &x137, x135, x131, x128); + fiat_np224_addcarryx_u32(&x138, &x139, x137, x129, x126); + fiat_np224_addcarryx_u32(&x140, &x141, x139, x127, x124); + fiat_np224_addcarryx_u32(&x142, &x143, x141, x125, x122); + fiat_np224_addcarryx_u32(&x144, &x145, x143, x123, x120); + fiat_np224_addcarryx_u32(&x146, &x147, 0x0, x104, x132); + fiat_np224_addcarryx_u32(&x148, &x149, x147, x106, x134); + fiat_np224_addcarryx_u32(&x150, &x151, x149, x108, x136); + fiat_np224_addcarryx_u32(&x152, &x153, x151, x110, x138); + fiat_np224_addcarryx_u32(&x154, &x155, x153, x112, x140); + fiat_np224_addcarryx_u32(&x156, &x157, x155, x114, x142); + fiat_np224_addcarryx_u32(&x158, &x159, x157, x116, x144); + fiat_np224_addcarryx_u32(&x160, &x161, x159, ((uint32_t)x117 + x103), (x145 + x121)); + fiat_np224_addcarryx_u32(&x162, &x163, 0x0, x148, (arg1[3])); + fiat_np224_addcarryx_u32(&x164, &x165, x163, x150, 0x0); + fiat_np224_addcarryx_u32(&x166, &x167, x165, x152, 0x0); + fiat_np224_addcarryx_u32(&x168, &x169, x167, x154, 0x0); + fiat_np224_addcarryx_u32(&x170, &x171, x169, x156, 0x0); + fiat_np224_addcarryx_u32(&x172, &x173, x171, x158, 0x0); + fiat_np224_addcarryx_u32(&x174, &x175, x173, x160, 0x0); + fiat_np224_mulx_u32(&x176, &x177, x162, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x178, &x179, x176, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x180, &x181, x176, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x182, &x183, x176, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x184, &x185, x176, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x186, &x187, x176, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x188, &x189, x176, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x190, &x191, x176, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x192, &x193, 0x0, x191, x188); + fiat_np224_addcarryx_u32(&x194, &x195, x193, x189, x186); + fiat_np224_addcarryx_u32(&x196, &x197, x195, x187, x184); + fiat_np224_addcarryx_u32(&x198, &x199, x197, x185, x182); + fiat_np224_addcarryx_u32(&x200, &x201, x199, x183, x180); + fiat_np224_addcarryx_u32(&x202, &x203, x201, x181, x178); + fiat_np224_addcarryx_u32(&x204, &x205, 0x0, x162, x190); + fiat_np224_addcarryx_u32(&x206, &x207, x205, x164, x192); + fiat_np224_addcarryx_u32(&x208, &x209, x207, x166, x194); + fiat_np224_addcarryx_u32(&x210, &x211, x209, x168, x196); + fiat_np224_addcarryx_u32(&x212, &x213, x211, x170, x198); + fiat_np224_addcarryx_u32(&x214, &x215, x213, x172, x200); + fiat_np224_addcarryx_u32(&x216, &x217, x215, x174, x202); + fiat_np224_addcarryx_u32(&x218, &x219, x217, ((uint32_t)x175 + x161), (x203 + x179)); + fiat_np224_addcarryx_u32(&x220, &x221, 0x0, x206, (arg1[4])); + fiat_np224_addcarryx_u32(&x222, &x223, x221, x208, 0x0); + fiat_np224_addcarryx_u32(&x224, &x225, x223, x210, 0x0); + fiat_np224_addcarryx_u32(&x226, &x227, x225, x212, 0x0); + fiat_np224_addcarryx_u32(&x228, &x229, x227, x214, 0x0); + fiat_np224_addcarryx_u32(&x230, &x231, x229, x216, 0x0); + fiat_np224_addcarryx_u32(&x232, &x233, x231, x218, 0x0); + fiat_np224_mulx_u32(&x234, &x235, x220, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x236, &x237, x234, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x238, &x239, x234, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x240, &x241, x234, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x242, &x243, x234, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x244, &x245, x234, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x246, &x247, x234, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x248, &x249, x234, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x250, &x251, 0x0, x249, x246); + fiat_np224_addcarryx_u32(&x252, &x253, x251, x247, x244); + fiat_np224_addcarryx_u32(&x254, &x255, x253, x245, x242); + fiat_np224_addcarryx_u32(&x256, &x257, x255, x243, x240); + fiat_np224_addcarryx_u32(&x258, &x259, x257, x241, x238); + fiat_np224_addcarryx_u32(&x260, &x261, x259, x239, x236); + fiat_np224_addcarryx_u32(&x262, &x263, 0x0, x220, x248); + fiat_np224_addcarryx_u32(&x264, &x265, x263, x222, x250); + fiat_np224_addcarryx_u32(&x266, &x267, x265, x224, x252); + fiat_np224_addcarryx_u32(&x268, &x269, x267, x226, x254); + fiat_np224_addcarryx_u32(&x270, &x271, x269, x228, x256); + fiat_np224_addcarryx_u32(&x272, &x273, x271, x230, x258); + fiat_np224_addcarryx_u32(&x274, &x275, x273, x232, x260); + fiat_np224_addcarryx_u32(&x276, &x277, x275, ((uint32_t)x233 + x219), (x261 + x237)); + fiat_np224_addcarryx_u32(&x278, &x279, 0x0, x264, (arg1[5])); + fiat_np224_addcarryx_u32(&x280, &x281, x279, x266, 0x0); + fiat_np224_addcarryx_u32(&x282, &x283, x281, x268, 0x0); + fiat_np224_addcarryx_u32(&x284, &x285, x283, x270, 0x0); + fiat_np224_addcarryx_u32(&x286, &x287, x285, x272, 0x0); + fiat_np224_addcarryx_u32(&x288, &x289, x287, x274, 0x0); + fiat_np224_addcarryx_u32(&x290, &x291, x289, x276, 0x0); + fiat_np224_mulx_u32(&x292, &x293, x278, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x294, &x295, x292, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x296, &x297, x292, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x298, &x299, x292, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x300, &x301, x292, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x302, &x303, x292, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x304, &x305, x292, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x306, &x307, x292, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x308, &x309, 0x0, x307, x304); + fiat_np224_addcarryx_u32(&x310, &x311, x309, x305, x302); + fiat_np224_addcarryx_u32(&x312, &x313, x311, x303, x300); + fiat_np224_addcarryx_u32(&x314, &x315, x313, x301, x298); + fiat_np224_addcarryx_u32(&x316, &x317, x315, x299, x296); + fiat_np224_addcarryx_u32(&x318, &x319, x317, x297, x294); + fiat_np224_addcarryx_u32(&x320, &x321, 0x0, x278, x306); + fiat_np224_addcarryx_u32(&x322, &x323, x321, x280, x308); + fiat_np224_addcarryx_u32(&x324, &x325, x323, x282, x310); + fiat_np224_addcarryx_u32(&x326, &x327, x325, x284, x312); + fiat_np224_addcarryx_u32(&x328, &x329, x327, x286, x314); + fiat_np224_addcarryx_u32(&x330, &x331, x329, x288, x316); + fiat_np224_addcarryx_u32(&x332, &x333, x331, x290, x318); + fiat_np224_addcarryx_u32(&x334, &x335, x333, ((uint32_t)x291 + x277), (x319 + x295)); + fiat_np224_addcarryx_u32(&x336, &x337, 0x0, x322, (arg1[6])); + fiat_np224_addcarryx_u32(&x338, &x339, x337, x324, 0x0); + fiat_np224_addcarryx_u32(&x340, &x341, x339, x326, 0x0); + fiat_np224_addcarryx_u32(&x342, &x343, x341, x328, 0x0); + fiat_np224_addcarryx_u32(&x344, &x345, x343, x330, 0x0); + fiat_np224_addcarryx_u32(&x346, &x347, x345, x332, 0x0); + fiat_np224_addcarryx_u32(&x348, &x349, x347, x334, 0x0); + fiat_np224_mulx_u32(&x350, &x351, x336, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x352, &x353, x350, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x354, &x355, x350, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x356, &x357, x350, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x358, &x359, x350, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x360, &x361, x350, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x362, &x363, x350, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x364, &x365, x350, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x366, &x367, 0x0, x365, x362); + fiat_np224_addcarryx_u32(&x368, &x369, x367, x363, x360); + fiat_np224_addcarryx_u32(&x370, &x371, x369, x361, x358); + fiat_np224_addcarryx_u32(&x372, &x373, x371, x359, x356); + fiat_np224_addcarryx_u32(&x374, &x375, x373, x357, x354); + fiat_np224_addcarryx_u32(&x376, &x377, x375, x355, x352); + fiat_np224_addcarryx_u32(&x378, &x379, 0x0, x336, x364); + fiat_np224_addcarryx_u32(&x380, &x381, x379, x338, x366); + fiat_np224_addcarryx_u32(&x382, &x383, x381, x340, x368); + fiat_np224_addcarryx_u32(&x384, &x385, x383, x342, x370); + fiat_np224_addcarryx_u32(&x386, &x387, x385, x344, x372); + fiat_np224_addcarryx_u32(&x388, &x389, x387, x346, x374); + fiat_np224_addcarryx_u32(&x390, &x391, x389, x348, x376); + fiat_np224_addcarryx_u32(&x392, &x393, x391, ((uint32_t)x349 + x335), (x377 + x353)); + fiat_np224_subborrowx_u32(&x394, &x395, 0x0, x380, UINT32_C(0x5c5c2a3d)); + fiat_np224_subborrowx_u32(&x396, &x397, x395, x382, UINT32_C(0x13dd2945)); + fiat_np224_subborrowx_u32(&x398, &x399, x397, x384, UINT32_C(0xe0b8f03e)); + fiat_np224_subborrowx_u32(&x400, &x401, x399, x386, UINT32_C(0xffff16a2)); + fiat_np224_subborrowx_u32(&x402, &x403, x401, x388, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x404, &x405, x403, x390, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x406, &x407, x405, x392, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x408, &x409, x407, x393, 0x0); + fiat_np224_cmovznz_u32(&x410, x409, x394, x380); + fiat_np224_cmovznz_u32(&x411, x409, x396, x382); + fiat_np224_cmovznz_u32(&x412, x409, x398, x384); + fiat_np224_cmovznz_u32(&x413, x409, x400, x386); + fiat_np224_cmovznz_u32(&x414, x409, x402, x388); + fiat_np224_cmovznz_u32(&x415, x409, x404, x390); + fiat_np224_cmovznz_u32(&x416, x409, x406, x392); + out1[0] = x410; + out1[1] = x411; + out1[2] = x412; + out1[3] = x413; + out1[4] = x414; + out1[5] = x415; + out1[6] = x416; +} + +/* + * The function fiat_np224_to_montgomery translates a field element into the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np224_to_montgomery(uint32_t out1[7], const uint32_t arg1[7]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + fiat_np224_uint1 x23; + uint32_t x24; + fiat_np224_uint1 x25; + uint32_t x26; + fiat_np224_uint1 x27; + uint32_t x28; + fiat_np224_uint1 x29; + uint32_t x30; + fiat_np224_uint1 x31; + uint32_t x32; + fiat_np224_uint1 x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + fiat_np224_uint1 x51; + uint32_t x52; + fiat_np224_uint1 x53; + uint32_t x54; + fiat_np224_uint1 x55; + uint32_t x56; + fiat_np224_uint1 x57; + uint32_t x58; + fiat_np224_uint1 x59; + uint32_t x60; + fiat_np224_uint1 x61; + uint32_t x62; + fiat_np224_uint1 x63; + uint32_t x64; + fiat_np224_uint1 x65; + uint32_t x66; + fiat_np224_uint1 x67; + uint32_t x68; + fiat_np224_uint1 x69; + uint32_t x70; + fiat_np224_uint1 x71; + uint32_t x72; + fiat_np224_uint1 x73; + uint32_t x74; + fiat_np224_uint1 x75; + uint32_t x76; + fiat_np224_uint1 x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + uint32_t x81; + uint32_t x82; + uint32_t x83; + uint32_t x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + uint32_t x88; + uint32_t x89; + uint32_t x90; + uint32_t x91; + uint32_t x92; + fiat_np224_uint1 x93; + uint32_t x94; + fiat_np224_uint1 x95; + uint32_t x96; + fiat_np224_uint1 x97; + uint32_t x98; + fiat_np224_uint1 x99; + uint32_t x100; + fiat_np224_uint1 x101; + uint32_t x102; + fiat_np224_uint1 x103; + uint32_t x104; + fiat_np224_uint1 x105; + uint32_t x106; + fiat_np224_uint1 x107; + uint32_t x108; + fiat_np224_uint1 x109; + uint32_t x110; + fiat_np224_uint1 x111; + uint32_t x112; + fiat_np224_uint1 x113; + uint32_t x114; + fiat_np224_uint1 x115; + uint32_t x116; + fiat_np224_uint1 x117; + uint32_t x118; + uint32_t x119; + uint32_t x120; + uint32_t x121; + uint32_t x122; + uint32_t x123; + uint32_t x124; + uint32_t x125; + uint32_t x126; + uint32_t x127; + uint32_t x128; + uint32_t x129; + uint32_t x130; + uint32_t x131; + uint32_t x132; + uint32_t x133; + uint32_t x134; + fiat_np224_uint1 x135; + uint32_t x136; + fiat_np224_uint1 x137; + uint32_t x138; + fiat_np224_uint1 x139; + uint32_t x140; + fiat_np224_uint1 x141; + uint32_t x142; + fiat_np224_uint1 x143; + uint32_t x144; + fiat_np224_uint1 x145; + uint32_t x146; + fiat_np224_uint1 x147; + uint32_t x148; + fiat_np224_uint1 x149; + uint32_t x150; + fiat_np224_uint1 x151; + uint32_t x152; + fiat_np224_uint1 x153; + uint32_t x154; + fiat_np224_uint1 x155; + uint32_t x156; + fiat_np224_uint1 x157; + uint32_t x158; + fiat_np224_uint1 x159; + uint32_t x160; + fiat_np224_uint1 x161; + uint32_t x162; + uint32_t x163; + uint32_t x164; + uint32_t x165; + uint32_t x166; + uint32_t x167; + uint32_t x168; + uint32_t x169; + uint32_t x170; + uint32_t x171; + uint32_t x172; + uint32_t x173; + uint32_t x174; + uint32_t x175; + uint32_t x176; + fiat_np224_uint1 x177; + uint32_t x178; + fiat_np224_uint1 x179; + uint32_t x180; + fiat_np224_uint1 x181; + uint32_t x182; + fiat_np224_uint1 x183; + uint32_t x184; + fiat_np224_uint1 x185; + uint32_t x186; + fiat_np224_uint1 x187; + uint32_t x188; + fiat_np224_uint1 x189; + uint32_t x190; + fiat_np224_uint1 x191; + uint32_t x192; + fiat_np224_uint1 x193; + uint32_t x194; + fiat_np224_uint1 x195; + uint32_t x196; + fiat_np224_uint1 x197; + uint32_t x198; + fiat_np224_uint1 x199; + uint32_t x200; + fiat_np224_uint1 x201; + uint32_t x202; + uint32_t x203; + uint32_t x204; + uint32_t x205; + uint32_t x206; + uint32_t x207; + uint32_t x208; + uint32_t x209; + uint32_t x210; + uint32_t x211; + uint32_t x212; + uint32_t x213; + uint32_t x214; + uint32_t x215; + uint32_t x216; + uint32_t x217; + uint32_t x218; + fiat_np224_uint1 x219; + uint32_t x220; + fiat_np224_uint1 x221; + uint32_t x222; + fiat_np224_uint1 x223; + uint32_t x224; + fiat_np224_uint1 x225; + uint32_t x226; + fiat_np224_uint1 x227; + uint32_t x228; + fiat_np224_uint1 x229; + uint32_t x230; + fiat_np224_uint1 x231; + uint32_t x232; + fiat_np224_uint1 x233; + uint32_t x234; + fiat_np224_uint1 x235; + uint32_t x236; + fiat_np224_uint1 x237; + uint32_t x238; + fiat_np224_uint1 x239; + uint32_t x240; + fiat_np224_uint1 x241; + uint32_t x242; + fiat_np224_uint1 x243; + uint32_t x244; + fiat_np224_uint1 x245; + uint32_t x246; + uint32_t x247; + uint32_t x248; + uint32_t x249; + uint32_t x250; + uint32_t x251; + uint32_t x252; + uint32_t x253; + uint32_t x254; + uint32_t x255; + uint32_t x256; + uint32_t x257; + uint32_t x258; + uint32_t x259; + uint32_t x260; + fiat_np224_uint1 x261; + uint32_t x262; + fiat_np224_uint1 x263; + uint32_t x264; + fiat_np224_uint1 x265; + uint32_t x266; + fiat_np224_uint1 x267; + uint32_t x268; + fiat_np224_uint1 x269; + uint32_t x270; + fiat_np224_uint1 x271; + uint32_t x272; + fiat_np224_uint1 x273; + uint32_t x274; + fiat_np224_uint1 x275; + uint32_t x276; + fiat_np224_uint1 x277; + uint32_t x278; + fiat_np224_uint1 x279; + uint32_t x280; + fiat_np224_uint1 x281; + uint32_t x282; + fiat_np224_uint1 x283; + uint32_t x284; + fiat_np224_uint1 x285; + uint32_t x286; + uint32_t x287; + uint32_t x288; + uint32_t x289; + uint32_t x290; + uint32_t x291; + uint32_t x292; + uint32_t x293; + uint32_t x294; + uint32_t x295; + uint32_t x296; + uint32_t x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + fiat_np224_uint1 x303; + uint32_t x304; + fiat_np224_uint1 x305; + uint32_t x306; + fiat_np224_uint1 x307; + uint32_t x308; + fiat_np224_uint1 x309; + uint32_t x310; + fiat_np224_uint1 x311; + uint32_t x312; + fiat_np224_uint1 x313; + uint32_t x314; + fiat_np224_uint1 x315; + uint32_t x316; + fiat_np224_uint1 x317; + uint32_t x318; + fiat_np224_uint1 x319; + uint32_t x320; + fiat_np224_uint1 x321; + uint32_t x322; + fiat_np224_uint1 x323; + uint32_t x324; + fiat_np224_uint1 x325; + uint32_t x326; + fiat_np224_uint1 x327; + uint32_t x328; + fiat_np224_uint1 x329; + uint32_t x330; + uint32_t x331; + uint32_t x332; + uint32_t x333; + uint32_t x334; + uint32_t x335; + uint32_t x336; + uint32_t x337; + uint32_t x338; + uint32_t x339; + uint32_t x340; + uint32_t x341; + uint32_t x342; + uint32_t x343; + uint32_t x344; + fiat_np224_uint1 x345; + uint32_t x346; + fiat_np224_uint1 x347; + uint32_t x348; + fiat_np224_uint1 x349; + uint32_t x350; + fiat_np224_uint1 x351; + uint32_t x352; + fiat_np224_uint1 x353; + uint32_t x354; + fiat_np224_uint1 x355; + uint32_t x356; + fiat_np224_uint1 x357; + uint32_t x358; + fiat_np224_uint1 x359; + uint32_t x360; + fiat_np224_uint1 x361; + uint32_t x362; + fiat_np224_uint1 x363; + uint32_t x364; + fiat_np224_uint1 x365; + uint32_t x366; + fiat_np224_uint1 x367; + uint32_t x368; + fiat_np224_uint1 x369; + uint32_t x370; + uint32_t x371; + uint32_t x372; + uint32_t x373; + uint32_t x374; + uint32_t x375; + uint32_t x376; + uint32_t x377; + uint32_t x378; + uint32_t x379; + uint32_t x380; + uint32_t x381; + uint32_t x382; + uint32_t x383; + uint32_t x384; + uint32_t x385; + uint32_t x386; + fiat_np224_uint1 x387; + uint32_t x388; + fiat_np224_uint1 x389; + uint32_t x390; + fiat_np224_uint1 x391; + uint32_t x392; + fiat_np224_uint1 x393; + uint32_t x394; + fiat_np224_uint1 x395; + uint32_t x396; + fiat_np224_uint1 x397; + uint32_t x398; + fiat_np224_uint1 x399; + uint32_t x400; + fiat_np224_uint1 x401; + uint32_t x402; + fiat_np224_uint1 x403; + uint32_t x404; + fiat_np224_uint1 x405; + uint32_t x406; + fiat_np224_uint1 x407; + uint32_t x408; + fiat_np224_uint1 x409; + uint32_t x410; + fiat_np224_uint1 x411; + uint32_t x412; + fiat_np224_uint1 x413; + uint32_t x414; + uint32_t x415; + uint32_t x416; + uint32_t x417; + uint32_t x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + uint32_t x422; + uint32_t x423; + uint32_t x424; + uint32_t x425; + uint32_t x426; + uint32_t x427; + uint32_t x428; + fiat_np224_uint1 x429; + uint32_t x430; + fiat_np224_uint1 x431; + uint32_t x432; + fiat_np224_uint1 x433; + uint32_t x434; + fiat_np224_uint1 x435; + uint32_t x436; + fiat_np224_uint1 x437; + uint32_t x438; + fiat_np224_uint1 x439; + uint32_t x440; + fiat_np224_uint1 x441; + uint32_t x442; + fiat_np224_uint1 x443; + uint32_t x444; + fiat_np224_uint1 x445; + uint32_t x446; + fiat_np224_uint1 x447; + uint32_t x448; + fiat_np224_uint1 x449; + uint32_t x450; + fiat_np224_uint1 x451; + uint32_t x452; + fiat_np224_uint1 x453; + uint32_t x454; + uint32_t x455; + uint32_t x456; + uint32_t x457; + uint32_t x458; + uint32_t x459; + uint32_t x460; + uint32_t x461; + uint32_t x462; + uint32_t x463; + uint32_t x464; + uint32_t x465; + uint32_t x466; + uint32_t x467; + uint32_t x468; + uint32_t x469; + uint32_t x470; + fiat_np224_uint1 x471; + uint32_t x472; + fiat_np224_uint1 x473; + uint32_t x474; + fiat_np224_uint1 x475; + uint32_t x476; + fiat_np224_uint1 x477; + uint32_t x478; + fiat_np224_uint1 x479; + uint32_t x480; + fiat_np224_uint1 x481; + uint32_t x482; + fiat_np224_uint1 x483; + uint32_t x484; + fiat_np224_uint1 x485; + uint32_t x486; + fiat_np224_uint1 x487; + uint32_t x488; + fiat_np224_uint1 x489; + uint32_t x490; + fiat_np224_uint1 x491; + uint32_t x492; + fiat_np224_uint1 x493; + uint32_t x494; + fiat_np224_uint1 x495; + uint32_t x496; + fiat_np224_uint1 x497; + uint32_t x498; + uint32_t x499; + uint32_t x500; + uint32_t x501; + uint32_t x502; + uint32_t x503; + uint32_t x504; + uint32_t x505; + uint32_t x506; + uint32_t x507; + uint32_t x508; + uint32_t x509; + uint32_t x510; + uint32_t x511; + uint32_t x512; + fiat_np224_uint1 x513; + uint32_t x514; + fiat_np224_uint1 x515; + uint32_t x516; + fiat_np224_uint1 x517; + uint32_t x518; + fiat_np224_uint1 x519; + uint32_t x520; + fiat_np224_uint1 x521; + uint32_t x522; + fiat_np224_uint1 x523; + uint32_t x524; + fiat_np224_uint1 x525; + uint32_t x526; + fiat_np224_uint1 x527; + uint32_t x528; + fiat_np224_uint1 x529; + uint32_t x530; + fiat_np224_uint1 x531; + uint32_t x532; + fiat_np224_uint1 x533; + uint32_t x534; + fiat_np224_uint1 x535; + uint32_t x536; + fiat_np224_uint1 x537; + uint32_t x538; + uint32_t x539; + uint32_t x540; + uint32_t x541; + uint32_t x542; + uint32_t x543; + uint32_t x544; + uint32_t x545; + uint32_t x546; + uint32_t x547; + uint32_t x548; + uint32_t x549; + uint32_t x550; + uint32_t x551; + uint32_t x552; + uint32_t x553; + uint32_t x554; + fiat_np224_uint1 x555; + uint32_t x556; + fiat_np224_uint1 x557; + uint32_t x558; + fiat_np224_uint1 x559; + uint32_t x560; + fiat_np224_uint1 x561; + uint32_t x562; + fiat_np224_uint1 x563; + uint32_t x564; + fiat_np224_uint1 x565; + uint32_t x566; + fiat_np224_uint1 x567; + uint32_t x568; + fiat_np224_uint1 x569; + uint32_t x570; + fiat_np224_uint1 x571; + uint32_t x572; + fiat_np224_uint1 x573; + uint32_t x574; + fiat_np224_uint1 x575; + uint32_t x576; + fiat_np224_uint1 x577; + uint32_t x578; + fiat_np224_uint1 x579; + uint32_t x580; + fiat_np224_uint1 x581; + uint32_t x582; + fiat_np224_uint1 x583; + uint32_t x584; + fiat_np224_uint1 x585; + uint32_t x586; + fiat_np224_uint1 x587; + uint32_t x588; + fiat_np224_uint1 x589; + uint32_t x590; + fiat_np224_uint1 x591; + uint32_t x592; + fiat_np224_uint1 x593; + uint32_t x594; + fiat_np224_uint1 x595; + uint32_t x596; + fiat_np224_uint1 x597; + uint32_t x598; + uint32_t x599; + uint32_t x600; + uint32_t x601; + uint32_t x602; + uint32_t x603; + uint32_t x604; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[0]); + fiat_np224_mulx_u32(&x8, &x9, x7, UINT32_C(0xd4baa4cf)); + fiat_np224_mulx_u32(&x10, &x11, x7, UINT32_C(0x1822bc47)); + fiat_np224_mulx_u32(&x12, &x13, x7, UINT32_C(0xb1e97961)); + fiat_np224_mulx_u32(&x14, &x15, x7, UINT32_C(0x6ad09d91)); + fiat_np224_mulx_u32(&x16, &x17, x7, UINT32_C(0x97a54552)); + fiat_np224_mulx_u32(&x18, &x19, x7, UINT32_C(0x6bdaae6c)); + fiat_np224_mulx_u32(&x20, &x21, x7, UINT32_C(0x3ad01289)); + fiat_np224_addcarryx_u32(&x22, &x23, 0x0, x21, x18); + fiat_np224_addcarryx_u32(&x24, &x25, x23, x19, x16); + fiat_np224_addcarryx_u32(&x26, &x27, x25, x17, x14); + fiat_np224_addcarryx_u32(&x28, &x29, x27, x15, x12); + fiat_np224_addcarryx_u32(&x30, &x31, x29, x13, x10); + fiat_np224_addcarryx_u32(&x32, &x33, x31, x11, x8); + fiat_np224_mulx_u32(&x34, &x35, x20, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x36, &x37, x34, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x38, &x39, x34, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x40, &x41, x34, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x42, &x43, x34, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x44, &x45, x34, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x46, &x47, x34, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x48, &x49, x34, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x50, &x51, 0x0, x49, x46); + fiat_np224_addcarryx_u32(&x52, &x53, x51, x47, x44); + fiat_np224_addcarryx_u32(&x54, &x55, x53, x45, x42); + fiat_np224_addcarryx_u32(&x56, &x57, x55, x43, x40); + fiat_np224_addcarryx_u32(&x58, &x59, x57, x41, x38); + fiat_np224_addcarryx_u32(&x60, &x61, x59, x39, x36); + fiat_np224_addcarryx_u32(&x62, &x63, 0x0, x20, x48); + fiat_np224_addcarryx_u32(&x64, &x65, x63, x22, x50); + fiat_np224_addcarryx_u32(&x66, &x67, x65, x24, x52); + fiat_np224_addcarryx_u32(&x68, &x69, x67, x26, x54); + fiat_np224_addcarryx_u32(&x70, &x71, x69, x28, x56); + fiat_np224_addcarryx_u32(&x72, &x73, x71, x30, x58); + fiat_np224_addcarryx_u32(&x74, &x75, x73, x32, x60); + fiat_np224_addcarryx_u32(&x76, &x77, x75, (x33 + x9), (x61 + x37)); + fiat_np224_mulx_u32(&x78, &x79, x1, UINT32_C(0xd4baa4cf)); + fiat_np224_mulx_u32(&x80, &x81, x1, UINT32_C(0x1822bc47)); + fiat_np224_mulx_u32(&x82, &x83, x1, UINT32_C(0xb1e97961)); + fiat_np224_mulx_u32(&x84, &x85, x1, UINT32_C(0x6ad09d91)); + fiat_np224_mulx_u32(&x86, &x87, x1, UINT32_C(0x97a54552)); + fiat_np224_mulx_u32(&x88, &x89, x1, UINT32_C(0x6bdaae6c)); + fiat_np224_mulx_u32(&x90, &x91, x1, UINT32_C(0x3ad01289)); + fiat_np224_addcarryx_u32(&x92, &x93, 0x0, x91, x88); + fiat_np224_addcarryx_u32(&x94, &x95, x93, x89, x86); + fiat_np224_addcarryx_u32(&x96, &x97, x95, x87, x84); + fiat_np224_addcarryx_u32(&x98, &x99, x97, x85, x82); + fiat_np224_addcarryx_u32(&x100, &x101, x99, x83, x80); + fiat_np224_addcarryx_u32(&x102, &x103, x101, x81, x78); + fiat_np224_addcarryx_u32(&x104, &x105, 0x0, x64, x90); + fiat_np224_addcarryx_u32(&x106, &x107, x105, x66, x92); + fiat_np224_addcarryx_u32(&x108, &x109, x107, x68, x94); + fiat_np224_addcarryx_u32(&x110, &x111, x109, x70, x96); + fiat_np224_addcarryx_u32(&x112, &x113, x111, x72, x98); + fiat_np224_addcarryx_u32(&x114, &x115, x113, x74, x100); + fiat_np224_addcarryx_u32(&x116, &x117, x115, x76, x102); + fiat_np224_mulx_u32(&x118, &x119, x104, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x120, &x121, x118, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x122, &x123, x118, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x124, &x125, x118, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x126, &x127, x118, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x128, &x129, x118, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x130, &x131, x118, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x132, &x133, x118, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x134, &x135, 0x0, x133, x130); + fiat_np224_addcarryx_u32(&x136, &x137, x135, x131, x128); + fiat_np224_addcarryx_u32(&x138, &x139, x137, x129, x126); + fiat_np224_addcarryx_u32(&x140, &x141, x139, x127, x124); + fiat_np224_addcarryx_u32(&x142, &x143, x141, x125, x122); + fiat_np224_addcarryx_u32(&x144, &x145, x143, x123, x120); + fiat_np224_addcarryx_u32(&x146, &x147, 0x0, x104, x132); + fiat_np224_addcarryx_u32(&x148, &x149, x147, x106, x134); + fiat_np224_addcarryx_u32(&x150, &x151, x149, x108, x136); + fiat_np224_addcarryx_u32(&x152, &x153, x151, x110, x138); + fiat_np224_addcarryx_u32(&x154, &x155, x153, x112, x140); + fiat_np224_addcarryx_u32(&x156, &x157, x155, x114, x142); + fiat_np224_addcarryx_u32(&x158, &x159, x157, x116, x144); + fiat_np224_addcarryx_u32(&x160, &x161, x159, (((uint32_t)x117 + x77) + (x103 + x79)), (x145 + x121)); + fiat_np224_mulx_u32(&x162, &x163, x2, UINT32_C(0xd4baa4cf)); + fiat_np224_mulx_u32(&x164, &x165, x2, UINT32_C(0x1822bc47)); + fiat_np224_mulx_u32(&x166, &x167, x2, UINT32_C(0xb1e97961)); + fiat_np224_mulx_u32(&x168, &x169, x2, UINT32_C(0x6ad09d91)); + fiat_np224_mulx_u32(&x170, &x171, x2, UINT32_C(0x97a54552)); + fiat_np224_mulx_u32(&x172, &x173, x2, UINT32_C(0x6bdaae6c)); + fiat_np224_mulx_u32(&x174, &x175, x2, UINT32_C(0x3ad01289)); + fiat_np224_addcarryx_u32(&x176, &x177, 0x0, x175, x172); + fiat_np224_addcarryx_u32(&x178, &x179, x177, x173, x170); + fiat_np224_addcarryx_u32(&x180, &x181, x179, x171, x168); + fiat_np224_addcarryx_u32(&x182, &x183, x181, x169, x166); + fiat_np224_addcarryx_u32(&x184, &x185, x183, x167, x164); + fiat_np224_addcarryx_u32(&x186, &x187, x185, x165, x162); + fiat_np224_addcarryx_u32(&x188, &x189, 0x0, x148, x174); + fiat_np224_addcarryx_u32(&x190, &x191, x189, x150, x176); + fiat_np224_addcarryx_u32(&x192, &x193, x191, x152, x178); + fiat_np224_addcarryx_u32(&x194, &x195, x193, x154, x180); + fiat_np224_addcarryx_u32(&x196, &x197, x195, x156, x182); + fiat_np224_addcarryx_u32(&x198, &x199, x197, x158, x184); + fiat_np224_addcarryx_u32(&x200, &x201, x199, x160, x186); + fiat_np224_mulx_u32(&x202, &x203, x188, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x204, &x205, x202, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x206, &x207, x202, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x208, &x209, x202, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x210, &x211, x202, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x212, &x213, x202, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x214, &x215, x202, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x216, &x217, x202, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x218, &x219, 0x0, x217, x214); + fiat_np224_addcarryx_u32(&x220, &x221, x219, x215, x212); + fiat_np224_addcarryx_u32(&x222, &x223, x221, x213, x210); + fiat_np224_addcarryx_u32(&x224, &x225, x223, x211, x208); + fiat_np224_addcarryx_u32(&x226, &x227, x225, x209, x206); + fiat_np224_addcarryx_u32(&x228, &x229, x227, x207, x204); + fiat_np224_addcarryx_u32(&x230, &x231, 0x0, x188, x216); + fiat_np224_addcarryx_u32(&x232, &x233, x231, x190, x218); + fiat_np224_addcarryx_u32(&x234, &x235, x233, x192, x220); + fiat_np224_addcarryx_u32(&x236, &x237, x235, x194, x222); + fiat_np224_addcarryx_u32(&x238, &x239, x237, x196, x224); + fiat_np224_addcarryx_u32(&x240, &x241, x239, x198, x226); + fiat_np224_addcarryx_u32(&x242, &x243, x241, x200, x228); + fiat_np224_addcarryx_u32(&x244, &x245, x243, (((uint32_t)x201 + x161) + (x187 + x163)), (x229 + x205)); + fiat_np224_mulx_u32(&x246, &x247, x3, UINT32_C(0xd4baa4cf)); + fiat_np224_mulx_u32(&x248, &x249, x3, UINT32_C(0x1822bc47)); + fiat_np224_mulx_u32(&x250, &x251, x3, UINT32_C(0xb1e97961)); + fiat_np224_mulx_u32(&x252, &x253, x3, UINT32_C(0x6ad09d91)); + fiat_np224_mulx_u32(&x254, &x255, x3, UINT32_C(0x97a54552)); + fiat_np224_mulx_u32(&x256, &x257, x3, UINT32_C(0x6bdaae6c)); + fiat_np224_mulx_u32(&x258, &x259, x3, UINT32_C(0x3ad01289)); + fiat_np224_addcarryx_u32(&x260, &x261, 0x0, x259, x256); + fiat_np224_addcarryx_u32(&x262, &x263, x261, x257, x254); + fiat_np224_addcarryx_u32(&x264, &x265, x263, x255, x252); + fiat_np224_addcarryx_u32(&x266, &x267, x265, x253, x250); + fiat_np224_addcarryx_u32(&x268, &x269, x267, x251, x248); + fiat_np224_addcarryx_u32(&x270, &x271, x269, x249, x246); + fiat_np224_addcarryx_u32(&x272, &x273, 0x0, x232, x258); + fiat_np224_addcarryx_u32(&x274, &x275, x273, x234, x260); + fiat_np224_addcarryx_u32(&x276, &x277, x275, x236, x262); + fiat_np224_addcarryx_u32(&x278, &x279, x277, x238, x264); + fiat_np224_addcarryx_u32(&x280, &x281, x279, x240, x266); + fiat_np224_addcarryx_u32(&x282, &x283, x281, x242, x268); + fiat_np224_addcarryx_u32(&x284, &x285, x283, x244, x270); + fiat_np224_mulx_u32(&x286, &x287, x272, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x288, &x289, x286, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x290, &x291, x286, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x292, &x293, x286, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x294, &x295, x286, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x296, &x297, x286, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x298, &x299, x286, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x300, &x301, x286, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x302, &x303, 0x0, x301, x298); + fiat_np224_addcarryx_u32(&x304, &x305, x303, x299, x296); + fiat_np224_addcarryx_u32(&x306, &x307, x305, x297, x294); + fiat_np224_addcarryx_u32(&x308, &x309, x307, x295, x292); + fiat_np224_addcarryx_u32(&x310, &x311, x309, x293, x290); + fiat_np224_addcarryx_u32(&x312, &x313, x311, x291, x288); + fiat_np224_addcarryx_u32(&x314, &x315, 0x0, x272, x300); + fiat_np224_addcarryx_u32(&x316, &x317, x315, x274, x302); + fiat_np224_addcarryx_u32(&x318, &x319, x317, x276, x304); + fiat_np224_addcarryx_u32(&x320, &x321, x319, x278, x306); + fiat_np224_addcarryx_u32(&x322, &x323, x321, x280, x308); + fiat_np224_addcarryx_u32(&x324, &x325, x323, x282, x310); + fiat_np224_addcarryx_u32(&x326, &x327, x325, x284, x312); + fiat_np224_addcarryx_u32(&x328, &x329, x327, (((uint32_t)x285 + x245) + (x271 + x247)), (x313 + x289)); + fiat_np224_mulx_u32(&x330, &x331, x4, UINT32_C(0xd4baa4cf)); + fiat_np224_mulx_u32(&x332, &x333, x4, UINT32_C(0x1822bc47)); + fiat_np224_mulx_u32(&x334, &x335, x4, UINT32_C(0xb1e97961)); + fiat_np224_mulx_u32(&x336, &x337, x4, UINT32_C(0x6ad09d91)); + fiat_np224_mulx_u32(&x338, &x339, x4, UINT32_C(0x97a54552)); + fiat_np224_mulx_u32(&x340, &x341, x4, UINT32_C(0x6bdaae6c)); + fiat_np224_mulx_u32(&x342, &x343, x4, UINT32_C(0x3ad01289)); + fiat_np224_addcarryx_u32(&x344, &x345, 0x0, x343, x340); + fiat_np224_addcarryx_u32(&x346, &x347, x345, x341, x338); + fiat_np224_addcarryx_u32(&x348, &x349, x347, x339, x336); + fiat_np224_addcarryx_u32(&x350, &x351, x349, x337, x334); + fiat_np224_addcarryx_u32(&x352, &x353, x351, x335, x332); + fiat_np224_addcarryx_u32(&x354, &x355, x353, x333, x330); + fiat_np224_addcarryx_u32(&x356, &x357, 0x0, x316, x342); + fiat_np224_addcarryx_u32(&x358, &x359, x357, x318, x344); + fiat_np224_addcarryx_u32(&x360, &x361, x359, x320, x346); + fiat_np224_addcarryx_u32(&x362, &x363, x361, x322, x348); + fiat_np224_addcarryx_u32(&x364, &x365, x363, x324, x350); + fiat_np224_addcarryx_u32(&x366, &x367, x365, x326, x352); + fiat_np224_addcarryx_u32(&x368, &x369, x367, x328, x354); + fiat_np224_mulx_u32(&x370, &x371, x356, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x372, &x373, x370, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x374, &x375, x370, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x376, &x377, x370, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x378, &x379, x370, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x380, &x381, x370, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x382, &x383, x370, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x384, &x385, x370, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x386, &x387, 0x0, x385, x382); + fiat_np224_addcarryx_u32(&x388, &x389, x387, x383, x380); + fiat_np224_addcarryx_u32(&x390, &x391, x389, x381, x378); + fiat_np224_addcarryx_u32(&x392, &x393, x391, x379, x376); + fiat_np224_addcarryx_u32(&x394, &x395, x393, x377, x374); + fiat_np224_addcarryx_u32(&x396, &x397, x395, x375, x372); + fiat_np224_addcarryx_u32(&x398, &x399, 0x0, x356, x384); + fiat_np224_addcarryx_u32(&x400, &x401, x399, x358, x386); + fiat_np224_addcarryx_u32(&x402, &x403, x401, x360, x388); + fiat_np224_addcarryx_u32(&x404, &x405, x403, x362, x390); + fiat_np224_addcarryx_u32(&x406, &x407, x405, x364, x392); + fiat_np224_addcarryx_u32(&x408, &x409, x407, x366, x394); + fiat_np224_addcarryx_u32(&x410, &x411, x409, x368, x396); + fiat_np224_addcarryx_u32(&x412, &x413, x411, (((uint32_t)x369 + x329) + (x355 + x331)), (x397 + x373)); + fiat_np224_mulx_u32(&x414, &x415, x5, UINT32_C(0xd4baa4cf)); + fiat_np224_mulx_u32(&x416, &x417, x5, UINT32_C(0x1822bc47)); + fiat_np224_mulx_u32(&x418, &x419, x5, UINT32_C(0xb1e97961)); + fiat_np224_mulx_u32(&x420, &x421, x5, UINT32_C(0x6ad09d91)); + fiat_np224_mulx_u32(&x422, &x423, x5, UINT32_C(0x97a54552)); + fiat_np224_mulx_u32(&x424, &x425, x5, UINT32_C(0x6bdaae6c)); + fiat_np224_mulx_u32(&x426, &x427, x5, UINT32_C(0x3ad01289)); + fiat_np224_addcarryx_u32(&x428, &x429, 0x0, x427, x424); + fiat_np224_addcarryx_u32(&x430, &x431, x429, x425, x422); + fiat_np224_addcarryx_u32(&x432, &x433, x431, x423, x420); + fiat_np224_addcarryx_u32(&x434, &x435, x433, x421, x418); + fiat_np224_addcarryx_u32(&x436, &x437, x435, x419, x416); + fiat_np224_addcarryx_u32(&x438, &x439, x437, x417, x414); + fiat_np224_addcarryx_u32(&x440, &x441, 0x0, x400, x426); + fiat_np224_addcarryx_u32(&x442, &x443, x441, x402, x428); + fiat_np224_addcarryx_u32(&x444, &x445, x443, x404, x430); + fiat_np224_addcarryx_u32(&x446, &x447, x445, x406, x432); + fiat_np224_addcarryx_u32(&x448, &x449, x447, x408, x434); + fiat_np224_addcarryx_u32(&x450, &x451, x449, x410, x436); + fiat_np224_addcarryx_u32(&x452, &x453, x451, x412, x438); + fiat_np224_mulx_u32(&x454, &x455, x440, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x456, &x457, x454, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x458, &x459, x454, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x460, &x461, x454, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x462, &x463, x454, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x464, &x465, x454, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x466, &x467, x454, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x468, &x469, x454, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x470, &x471, 0x0, x469, x466); + fiat_np224_addcarryx_u32(&x472, &x473, x471, x467, x464); + fiat_np224_addcarryx_u32(&x474, &x475, x473, x465, x462); + fiat_np224_addcarryx_u32(&x476, &x477, x475, x463, x460); + fiat_np224_addcarryx_u32(&x478, &x479, x477, x461, x458); + fiat_np224_addcarryx_u32(&x480, &x481, x479, x459, x456); + fiat_np224_addcarryx_u32(&x482, &x483, 0x0, x440, x468); + fiat_np224_addcarryx_u32(&x484, &x485, x483, x442, x470); + fiat_np224_addcarryx_u32(&x486, &x487, x485, x444, x472); + fiat_np224_addcarryx_u32(&x488, &x489, x487, x446, x474); + fiat_np224_addcarryx_u32(&x490, &x491, x489, x448, x476); + fiat_np224_addcarryx_u32(&x492, &x493, x491, x450, x478); + fiat_np224_addcarryx_u32(&x494, &x495, x493, x452, x480); + fiat_np224_addcarryx_u32(&x496, &x497, x495, (((uint32_t)x453 + x413) + (x439 + x415)), (x481 + x457)); + fiat_np224_mulx_u32(&x498, &x499, x6, UINT32_C(0xd4baa4cf)); + fiat_np224_mulx_u32(&x500, &x501, x6, UINT32_C(0x1822bc47)); + fiat_np224_mulx_u32(&x502, &x503, x6, UINT32_C(0xb1e97961)); + fiat_np224_mulx_u32(&x504, &x505, x6, UINT32_C(0x6ad09d91)); + fiat_np224_mulx_u32(&x506, &x507, x6, UINT32_C(0x97a54552)); + fiat_np224_mulx_u32(&x508, &x509, x6, UINT32_C(0x6bdaae6c)); + fiat_np224_mulx_u32(&x510, &x511, x6, UINT32_C(0x3ad01289)); + fiat_np224_addcarryx_u32(&x512, &x513, 0x0, x511, x508); + fiat_np224_addcarryx_u32(&x514, &x515, x513, x509, x506); + fiat_np224_addcarryx_u32(&x516, &x517, x515, x507, x504); + fiat_np224_addcarryx_u32(&x518, &x519, x517, x505, x502); + fiat_np224_addcarryx_u32(&x520, &x521, x519, x503, x500); + fiat_np224_addcarryx_u32(&x522, &x523, x521, x501, x498); + fiat_np224_addcarryx_u32(&x524, &x525, 0x0, x484, x510); + fiat_np224_addcarryx_u32(&x526, &x527, x525, x486, x512); + fiat_np224_addcarryx_u32(&x528, &x529, x527, x488, x514); + fiat_np224_addcarryx_u32(&x530, &x531, x529, x490, x516); + fiat_np224_addcarryx_u32(&x532, &x533, x531, x492, x518); + fiat_np224_addcarryx_u32(&x534, &x535, x533, x494, x520); + fiat_np224_addcarryx_u32(&x536, &x537, x535, x496, x522); + fiat_np224_mulx_u32(&x538, &x539, x524, UINT32_C(0x6a1fc2eb)); + fiat_np224_mulx_u32(&x540, &x541, x538, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x542, &x543, x538, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x544, &x545, x538, UINT32_C(0xffffffff)); + fiat_np224_mulx_u32(&x546, &x547, x538, UINT32_C(0xffff16a2)); + fiat_np224_mulx_u32(&x548, &x549, x538, UINT32_C(0xe0b8f03e)); + fiat_np224_mulx_u32(&x550, &x551, x538, UINT32_C(0x13dd2945)); + fiat_np224_mulx_u32(&x552, &x553, x538, UINT32_C(0x5c5c2a3d)); + fiat_np224_addcarryx_u32(&x554, &x555, 0x0, x553, x550); + fiat_np224_addcarryx_u32(&x556, &x557, x555, x551, x548); + fiat_np224_addcarryx_u32(&x558, &x559, x557, x549, x546); + fiat_np224_addcarryx_u32(&x560, &x561, x559, x547, x544); + fiat_np224_addcarryx_u32(&x562, &x563, x561, x545, x542); + fiat_np224_addcarryx_u32(&x564, &x565, x563, x543, x540); + fiat_np224_addcarryx_u32(&x566, &x567, 0x0, x524, x552); + fiat_np224_addcarryx_u32(&x568, &x569, x567, x526, x554); + fiat_np224_addcarryx_u32(&x570, &x571, x569, x528, x556); + fiat_np224_addcarryx_u32(&x572, &x573, x571, x530, x558); + fiat_np224_addcarryx_u32(&x574, &x575, x573, x532, x560); + fiat_np224_addcarryx_u32(&x576, &x577, x575, x534, x562); + fiat_np224_addcarryx_u32(&x578, &x579, x577, x536, x564); + fiat_np224_addcarryx_u32(&x580, &x581, x579, (((uint32_t)x537 + x497) + (x523 + x499)), (x565 + x541)); + fiat_np224_subborrowx_u32(&x582, &x583, 0x0, x568, UINT32_C(0x5c5c2a3d)); + fiat_np224_subborrowx_u32(&x584, &x585, x583, x570, UINT32_C(0x13dd2945)); + fiat_np224_subborrowx_u32(&x586, &x587, x585, x572, UINT32_C(0xe0b8f03e)); + fiat_np224_subborrowx_u32(&x588, &x589, x587, x574, UINT32_C(0xffff16a2)); + fiat_np224_subborrowx_u32(&x590, &x591, x589, x576, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x592, &x593, x591, x578, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x594, &x595, x593, x580, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x596, &x597, x595, x581, 0x0); + fiat_np224_cmovznz_u32(&x598, x597, x582, x568); + fiat_np224_cmovznz_u32(&x599, x597, x584, x570); + fiat_np224_cmovznz_u32(&x600, x597, x586, x572); + fiat_np224_cmovznz_u32(&x601, x597, x588, x574); + fiat_np224_cmovznz_u32(&x602, x597, x590, x576); + fiat_np224_cmovznz_u32(&x603, x597, x592, x578); + fiat_np224_cmovznz_u32(&x604, x597, x594, x580); + out1[0] = x598; + out1[1] = x599; + out1[2] = x600; + out1[3] = x601; + out1[4] = x602; + out1[5] = x603; + out1[6] = x604; +} + +/* + * The function fiat_np224_set_one returns the field element one in the Montgomery domain. + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np224_set_one(uint32_t out1[7]) { + out1[0] = UINT32_C(0xa3a3d5c3); + out1[1] = UINT32_C(0xec22d6ba); + out1[2] = UINT32_C(0x1f470fc1); + out1[3] = UINT16_C(0xe95d); + out1[4] = 0x0; + out1[5] = 0x0; + out1[6] = 0x0; +} + +/* + * The function fiat_np224_msat returns the saturated represtation of the prime modulus. + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np224_msat(uint32_t out1[8]) { + out1[0] = UINT32_C(0x5c5c2a3d); + out1[1] = UINT32_C(0x13dd2945); + out1[2] = UINT32_C(0xe0b8f03e); + out1[3] = UINT32_C(0xffff16a2); + out1[4] = UINT32_C(0xffffffff); + out1[5] = UINT32_C(0xffffffff); + out1[6] = UINT32_C(0xffffffff); + out1[7] = 0x0; +} + +/* + * The function fiat_np224_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if (log2 m) + 1 < 46 then ⌊(49 * ((log2 m) + 1) + 80) / 17⌋ else ⌊(49 * ((log2 m) + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np224_divstep_precomp(uint32_t out1[7]) { + out1[0] = UINT32_C(0xa680ba62); + out1[1] = UINT32_C(0x56d11323); + out1[2] = UINT32_C(0x9289274a); + out1[3] = UINT32_C(0xa334e391); + out1[4] = UINT32_C(0xef16fedb); + out1[5] = UINT32_C(0x4704d6d8); + out1[6] = UINT32_C(0x30476f44); +} + +/* + * The function fiat_np224_divstep computes a divstep. + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg4: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg5: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out4: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out5: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np224_divstep(uint32_t* out1, uint32_t out2[8], uint32_t out3[8], uint32_t out4[7], uint32_t out5[7], uint32_t arg1, const uint32_t arg2[8], const uint32_t arg3[8], const uint32_t arg4[7], const uint32_t arg5[7]) { + uint32_t x1; + fiat_np224_uint1 x2; + fiat_np224_uint1 x3; + uint32_t x4; + fiat_np224_uint1 x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + fiat_np224_uint1 x16; + uint32_t x17; + fiat_np224_uint1 x18; + uint32_t x19; + fiat_np224_uint1 x20; + uint32_t x21; + fiat_np224_uint1 x22; + uint32_t x23; + fiat_np224_uint1 x24; + uint32_t x25; + fiat_np224_uint1 x26; + uint32_t x27; + fiat_np224_uint1 x28; + uint32_t x29; + fiat_np224_uint1 x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + fiat_np224_uint1 x47; + uint32_t x48; + fiat_np224_uint1 x49; + uint32_t x50; + fiat_np224_uint1 x51; + uint32_t x52; + fiat_np224_uint1 x53; + uint32_t x54; + fiat_np224_uint1 x55; + uint32_t x56; + fiat_np224_uint1 x57; + uint32_t x58; + fiat_np224_uint1 x59; + uint32_t x60; + fiat_np224_uint1 x61; + uint32_t x62; + fiat_np224_uint1 x63; + uint32_t x64; + fiat_np224_uint1 x65; + uint32_t x66; + fiat_np224_uint1 x67; + uint32_t x68; + fiat_np224_uint1 x69; + uint32_t x70; + fiat_np224_uint1 x71; + uint32_t x72; + fiat_np224_uint1 x73; + uint32_t x74; + fiat_np224_uint1 x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + uint32_t x81; + uint32_t x82; + uint32_t x83; + fiat_np224_uint1 x84; + uint32_t x85; + fiat_np224_uint1 x86; + uint32_t x87; + fiat_np224_uint1 x88; + uint32_t x89; + fiat_np224_uint1 x90; + uint32_t x91; + fiat_np224_uint1 x92; + uint32_t x93; + fiat_np224_uint1 x94; + uint32_t x95; + fiat_np224_uint1 x96; + uint32_t x97; + uint32_t x98; + fiat_np224_uint1 x99; + uint32_t x100; + fiat_np224_uint1 x101; + uint32_t x102; + fiat_np224_uint1 x103; + uint32_t x104; + fiat_np224_uint1 x105; + uint32_t x106; + fiat_np224_uint1 x107; + uint32_t x108; + fiat_np224_uint1 x109; + uint32_t x110; + fiat_np224_uint1 x111; + uint32_t x112; + uint32_t x113; + uint32_t x114; + uint32_t x115; + uint32_t x116; + uint32_t x117; + uint32_t x118; + fiat_np224_uint1 x119; + uint32_t x120; + uint32_t x121; + uint32_t x122; + uint32_t x123; + uint32_t x124; + uint32_t x125; + uint32_t x126; + uint32_t x127; + uint32_t x128; + fiat_np224_uint1 x129; + uint32_t x130; + fiat_np224_uint1 x131; + uint32_t x132; + fiat_np224_uint1 x133; + uint32_t x134; + fiat_np224_uint1 x135; + uint32_t x136; + fiat_np224_uint1 x137; + uint32_t x138; + fiat_np224_uint1 x139; + uint32_t x140; + fiat_np224_uint1 x141; + uint32_t x142; + fiat_np224_uint1 x143; + uint32_t x144; + uint32_t x145; + uint32_t x146; + uint32_t x147; + uint32_t x148; + uint32_t x149; + uint32_t x150; + uint32_t x151; + fiat_np224_uint1 x152; + uint32_t x153; + fiat_np224_uint1 x154; + uint32_t x155; + fiat_np224_uint1 x156; + uint32_t x157; + fiat_np224_uint1 x158; + uint32_t x159; + fiat_np224_uint1 x160; + uint32_t x161; + fiat_np224_uint1 x162; + uint32_t x163; + fiat_np224_uint1 x164; + uint32_t x165; + fiat_np224_uint1 x166; + uint32_t x167; + fiat_np224_uint1 x168; + uint32_t x169; + fiat_np224_uint1 x170; + uint32_t x171; + fiat_np224_uint1 x172; + uint32_t x173; + fiat_np224_uint1 x174; + uint32_t x175; + fiat_np224_uint1 x176; + uint32_t x177; + fiat_np224_uint1 x178; + uint32_t x179; + fiat_np224_uint1 x180; + uint32_t x181; + fiat_np224_uint1 x182; + uint32_t x183; + uint32_t x184; + uint32_t x185; + uint32_t x186; + uint32_t x187; + uint32_t x188; + uint32_t x189; + uint32_t x190; + uint32_t x191; + uint32_t x192; + uint32_t x193; + uint32_t x194; + uint32_t x195; + uint32_t x196; + uint32_t x197; + uint32_t x198; + uint32_t x199; + uint32_t x200; + uint32_t x201; + uint32_t x202; + uint32_t x203; + uint32_t x204; + fiat_np224_addcarryx_u32(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_np224_uint1)((fiat_np224_uint1)(x1 >> 31) & (fiat_np224_uint1)((arg3[0]) & 0x1)); + fiat_np224_addcarryx_u32(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_np224_cmovznz_u32(&x6, x3, arg1, x4); + fiat_np224_cmovznz_u32(&x7, x3, (arg2[0]), (arg3[0])); + fiat_np224_cmovznz_u32(&x8, x3, (arg2[1]), (arg3[1])); + fiat_np224_cmovznz_u32(&x9, x3, (arg2[2]), (arg3[2])); + fiat_np224_cmovznz_u32(&x10, x3, (arg2[3]), (arg3[3])); + fiat_np224_cmovznz_u32(&x11, x3, (arg2[4]), (arg3[4])); + fiat_np224_cmovznz_u32(&x12, x3, (arg2[5]), (arg3[5])); + fiat_np224_cmovznz_u32(&x13, x3, (arg2[6]), (arg3[6])); + fiat_np224_cmovznz_u32(&x14, x3, (arg2[7]), (arg3[7])); + fiat_np224_addcarryx_u32(&x15, &x16, 0x0, 0x1, (~(arg2[0]))); + fiat_np224_addcarryx_u32(&x17, &x18, x16, 0x0, (~(arg2[1]))); + fiat_np224_addcarryx_u32(&x19, &x20, x18, 0x0, (~(arg2[2]))); + fiat_np224_addcarryx_u32(&x21, &x22, x20, 0x0, (~(arg2[3]))); + fiat_np224_addcarryx_u32(&x23, &x24, x22, 0x0, (~(arg2[4]))); + fiat_np224_addcarryx_u32(&x25, &x26, x24, 0x0, (~(arg2[5]))); + fiat_np224_addcarryx_u32(&x27, &x28, x26, 0x0, (~(arg2[6]))); + fiat_np224_addcarryx_u32(&x29, &x30, x28, 0x0, (~(arg2[7]))); + fiat_np224_cmovznz_u32(&x31, x3, (arg3[0]), x15); + fiat_np224_cmovznz_u32(&x32, x3, (arg3[1]), x17); + fiat_np224_cmovznz_u32(&x33, x3, (arg3[2]), x19); + fiat_np224_cmovznz_u32(&x34, x3, (arg3[3]), x21); + fiat_np224_cmovznz_u32(&x35, x3, (arg3[4]), x23); + fiat_np224_cmovznz_u32(&x36, x3, (arg3[5]), x25); + fiat_np224_cmovznz_u32(&x37, x3, (arg3[6]), x27); + fiat_np224_cmovznz_u32(&x38, x3, (arg3[7]), x29); + fiat_np224_cmovznz_u32(&x39, x3, (arg4[0]), (arg5[0])); + fiat_np224_cmovznz_u32(&x40, x3, (arg4[1]), (arg5[1])); + fiat_np224_cmovznz_u32(&x41, x3, (arg4[2]), (arg5[2])); + fiat_np224_cmovznz_u32(&x42, x3, (arg4[3]), (arg5[3])); + fiat_np224_cmovznz_u32(&x43, x3, (arg4[4]), (arg5[4])); + fiat_np224_cmovznz_u32(&x44, x3, (arg4[5]), (arg5[5])); + fiat_np224_cmovznz_u32(&x45, x3, (arg4[6]), (arg5[6])); + fiat_np224_addcarryx_u32(&x46, &x47, 0x0, x39, x39); + fiat_np224_addcarryx_u32(&x48, &x49, x47, x40, x40); + fiat_np224_addcarryx_u32(&x50, &x51, x49, x41, x41); + fiat_np224_addcarryx_u32(&x52, &x53, x51, x42, x42); + fiat_np224_addcarryx_u32(&x54, &x55, x53, x43, x43); + fiat_np224_addcarryx_u32(&x56, &x57, x55, x44, x44); + fiat_np224_addcarryx_u32(&x58, &x59, x57, x45, x45); + fiat_np224_subborrowx_u32(&x60, &x61, 0x0, x46, UINT32_C(0x5c5c2a3d)); + fiat_np224_subborrowx_u32(&x62, &x63, x61, x48, UINT32_C(0x13dd2945)); + fiat_np224_subborrowx_u32(&x64, &x65, x63, x50, UINT32_C(0xe0b8f03e)); + fiat_np224_subborrowx_u32(&x66, &x67, x65, x52, UINT32_C(0xffff16a2)); + fiat_np224_subborrowx_u32(&x68, &x69, x67, x54, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x70, &x71, x69, x56, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x72, &x73, x71, x58, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x74, &x75, x73, x59, 0x0); + x76 = (arg4[6]); + x77 = (arg4[5]); + x78 = (arg4[4]); + x79 = (arg4[3]); + x80 = (arg4[2]); + x81 = (arg4[1]); + x82 = (arg4[0]); + fiat_np224_subborrowx_u32(&x83, &x84, 0x0, 0x0, x82); + fiat_np224_subborrowx_u32(&x85, &x86, x84, 0x0, x81); + fiat_np224_subborrowx_u32(&x87, &x88, x86, 0x0, x80); + fiat_np224_subborrowx_u32(&x89, &x90, x88, 0x0, x79); + fiat_np224_subborrowx_u32(&x91, &x92, x90, 0x0, x78); + fiat_np224_subborrowx_u32(&x93, &x94, x92, 0x0, x77); + fiat_np224_subborrowx_u32(&x95, &x96, x94, 0x0, x76); + fiat_np224_cmovznz_u32(&x97, x96, 0x0, UINT32_C(0xffffffff)); + fiat_np224_addcarryx_u32(&x98, &x99, 0x0, x83, (x97 & UINT32_C(0x5c5c2a3d))); + fiat_np224_addcarryx_u32(&x100, &x101, x99, x85, (x97 & UINT32_C(0x13dd2945))); + fiat_np224_addcarryx_u32(&x102, &x103, x101, x87, (x97 & UINT32_C(0xe0b8f03e))); + fiat_np224_addcarryx_u32(&x104, &x105, x103, x89, (x97 & UINT32_C(0xffff16a2))); + fiat_np224_addcarryx_u32(&x106, &x107, x105, x91, x97); + fiat_np224_addcarryx_u32(&x108, &x109, x107, x93, x97); + fiat_np224_addcarryx_u32(&x110, &x111, x109, x95, x97); + fiat_np224_cmovznz_u32(&x112, x3, (arg5[0]), x98); + fiat_np224_cmovznz_u32(&x113, x3, (arg5[1]), x100); + fiat_np224_cmovznz_u32(&x114, x3, (arg5[2]), x102); + fiat_np224_cmovznz_u32(&x115, x3, (arg5[3]), x104); + fiat_np224_cmovznz_u32(&x116, x3, (arg5[4]), x106); + fiat_np224_cmovznz_u32(&x117, x3, (arg5[5]), x108); + fiat_np224_cmovznz_u32(&x118, x3, (arg5[6]), x110); + x119 = (fiat_np224_uint1)(x31 & 0x1); + fiat_np224_cmovznz_u32(&x120, x119, 0x0, x7); + fiat_np224_cmovznz_u32(&x121, x119, 0x0, x8); + fiat_np224_cmovznz_u32(&x122, x119, 0x0, x9); + fiat_np224_cmovznz_u32(&x123, x119, 0x0, x10); + fiat_np224_cmovznz_u32(&x124, x119, 0x0, x11); + fiat_np224_cmovznz_u32(&x125, x119, 0x0, x12); + fiat_np224_cmovznz_u32(&x126, x119, 0x0, x13); + fiat_np224_cmovznz_u32(&x127, x119, 0x0, x14); + fiat_np224_addcarryx_u32(&x128, &x129, 0x0, x31, x120); + fiat_np224_addcarryx_u32(&x130, &x131, x129, x32, x121); + fiat_np224_addcarryx_u32(&x132, &x133, x131, x33, x122); + fiat_np224_addcarryx_u32(&x134, &x135, x133, x34, x123); + fiat_np224_addcarryx_u32(&x136, &x137, x135, x35, x124); + fiat_np224_addcarryx_u32(&x138, &x139, x137, x36, x125); + fiat_np224_addcarryx_u32(&x140, &x141, x139, x37, x126); + fiat_np224_addcarryx_u32(&x142, &x143, x141, x38, x127); + fiat_np224_cmovznz_u32(&x144, x119, 0x0, x39); + fiat_np224_cmovznz_u32(&x145, x119, 0x0, x40); + fiat_np224_cmovznz_u32(&x146, x119, 0x0, x41); + fiat_np224_cmovznz_u32(&x147, x119, 0x0, x42); + fiat_np224_cmovznz_u32(&x148, x119, 0x0, x43); + fiat_np224_cmovznz_u32(&x149, x119, 0x0, x44); + fiat_np224_cmovznz_u32(&x150, x119, 0x0, x45); + fiat_np224_addcarryx_u32(&x151, &x152, 0x0, x112, x144); + fiat_np224_addcarryx_u32(&x153, &x154, x152, x113, x145); + fiat_np224_addcarryx_u32(&x155, &x156, x154, x114, x146); + fiat_np224_addcarryx_u32(&x157, &x158, x156, x115, x147); + fiat_np224_addcarryx_u32(&x159, &x160, x158, x116, x148); + fiat_np224_addcarryx_u32(&x161, &x162, x160, x117, x149); + fiat_np224_addcarryx_u32(&x163, &x164, x162, x118, x150); + fiat_np224_subborrowx_u32(&x165, &x166, 0x0, x151, UINT32_C(0x5c5c2a3d)); + fiat_np224_subborrowx_u32(&x167, &x168, x166, x153, UINT32_C(0x13dd2945)); + fiat_np224_subborrowx_u32(&x169, &x170, x168, x155, UINT32_C(0xe0b8f03e)); + fiat_np224_subborrowx_u32(&x171, &x172, x170, x157, UINT32_C(0xffff16a2)); + fiat_np224_subborrowx_u32(&x173, &x174, x172, x159, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x175, &x176, x174, x161, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x177, &x178, x176, x163, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u32(&x179, &x180, x178, x164, 0x0); + fiat_np224_addcarryx_u32(&x181, &x182, 0x0, x6, 0x1); + x183 = ((x128 >> 1) | ((x130 << 31) & UINT32_C(0xffffffff))); + x184 = ((x130 >> 1) | ((x132 << 31) & UINT32_C(0xffffffff))); + x185 = ((x132 >> 1) | ((x134 << 31) & UINT32_C(0xffffffff))); + x186 = ((x134 >> 1) | ((x136 << 31) & UINT32_C(0xffffffff))); + x187 = ((x136 >> 1) | ((x138 << 31) & UINT32_C(0xffffffff))); + x188 = ((x138 >> 1) | ((x140 << 31) & UINT32_C(0xffffffff))); + x189 = ((x140 >> 1) | ((x142 << 31) & UINT32_C(0xffffffff))); + x190 = ((x142 & UINT32_C(0x80000000)) | (x142 >> 1)); + fiat_np224_cmovznz_u32(&x191, x75, x60, x46); + fiat_np224_cmovznz_u32(&x192, x75, x62, x48); + fiat_np224_cmovznz_u32(&x193, x75, x64, x50); + fiat_np224_cmovznz_u32(&x194, x75, x66, x52); + fiat_np224_cmovznz_u32(&x195, x75, x68, x54); + fiat_np224_cmovznz_u32(&x196, x75, x70, x56); + fiat_np224_cmovznz_u32(&x197, x75, x72, x58); + fiat_np224_cmovznz_u32(&x198, x180, x165, x151); + fiat_np224_cmovznz_u32(&x199, x180, x167, x153); + fiat_np224_cmovznz_u32(&x200, x180, x169, x155); + fiat_np224_cmovznz_u32(&x201, x180, x171, x157); + fiat_np224_cmovznz_u32(&x202, x180, x173, x159); + fiat_np224_cmovznz_u32(&x203, x180, x175, x161); + fiat_np224_cmovznz_u32(&x204, x180, x177, x163); + *out1 = x181; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out2[5] = x12; + out2[6] = x13; + out2[7] = x14; + out3[0] = x183; + out3[1] = x184; + out3[2] = x185; + out3[3] = x186; + out3[4] = x187; + out3[5] = x188; + out3[6] = x189; + out3[7] = x190; + out4[0] = x191; + out4[1] = x192; + out4[2] = x193; + out4[3] = x194; + out4[4] = x195; + out4[5] = x196; + out4[6] = x197; + out5[0] = x198; + out5[1] = x199; + out5[2] = x200; + out5[3] = x201; + out5[4] = x202; + out5[5] = x203; + out5[6] = x204; +} + +/* + * The function fiat_np224_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..27] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + */ +static void fiat_np224_to_bytes(uint8_t out1[28], const uint32_t arg1[7]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint8_t x8; + uint32_t x9; + uint8_t x10; + uint32_t x11; + uint8_t x12; + uint8_t x13; + uint8_t x14; + uint32_t x15; + uint8_t x16; + uint32_t x17; + uint8_t x18; + uint8_t x19; + uint8_t x20; + uint32_t x21; + uint8_t x22; + uint32_t x23; + uint8_t x24; + uint8_t x25; + uint8_t x26; + uint32_t x27; + uint8_t x28; + uint32_t x29; + uint8_t x30; + uint8_t x31; + uint8_t x32; + uint32_t x33; + uint8_t x34; + uint32_t x35; + uint8_t x36; + uint8_t x37; + uint8_t x38; + uint32_t x39; + uint8_t x40; + uint32_t x41; + uint8_t x42; + uint8_t x43; + uint8_t x44; + uint32_t x45; + uint8_t x46; + uint32_t x47; + uint8_t x48; + uint8_t x49; + x1 = (arg1[6]); + x2 = (arg1[5]); + x3 = (arg1[4]); + x4 = (arg1[3]); + x5 = (arg1[2]); + x6 = (arg1[1]); + x7 = (arg1[0]); + x8 = (uint8_t)(x7 & UINT8_C(0xff)); + x9 = (x7 >> 8); + x10 = (uint8_t)(x9 & UINT8_C(0xff)); + x11 = (x9 >> 8); + x12 = (uint8_t)(x11 & UINT8_C(0xff)); + x13 = (uint8_t)(x11 >> 8); + x14 = (uint8_t)(x6 & UINT8_C(0xff)); + x15 = (x6 >> 8); + x16 = (uint8_t)(x15 & UINT8_C(0xff)); + x17 = (x15 >> 8); + x18 = (uint8_t)(x17 & UINT8_C(0xff)); + x19 = (uint8_t)(x17 >> 8); + x20 = (uint8_t)(x5 & UINT8_C(0xff)); + x21 = (x5 >> 8); + x22 = (uint8_t)(x21 & UINT8_C(0xff)); + x23 = (x21 >> 8); + x24 = (uint8_t)(x23 & UINT8_C(0xff)); + x25 = (uint8_t)(x23 >> 8); + x26 = (uint8_t)(x4 & UINT8_C(0xff)); + x27 = (x4 >> 8); + x28 = (uint8_t)(x27 & UINT8_C(0xff)); + x29 = (x27 >> 8); + x30 = (uint8_t)(x29 & UINT8_C(0xff)); + x31 = (uint8_t)(x29 >> 8); + x32 = (uint8_t)(x3 & UINT8_C(0xff)); + x33 = (x3 >> 8); + x34 = (uint8_t)(x33 & UINT8_C(0xff)); + x35 = (x33 >> 8); + x36 = (uint8_t)(x35 & UINT8_C(0xff)); + x37 = (uint8_t)(x35 >> 8); + x38 = (uint8_t)(x2 & UINT8_C(0xff)); + x39 = (x2 >> 8); + x40 = (uint8_t)(x39 & UINT8_C(0xff)); + x41 = (x39 >> 8); + x42 = (uint8_t)(x41 & UINT8_C(0xff)); + x43 = (uint8_t)(x41 >> 8); + x44 = (uint8_t)(x1 & UINT8_C(0xff)); + x45 = (x1 >> 8); + x46 = (uint8_t)(x45 & UINT8_C(0xff)); + x47 = (x45 >> 8); + x48 = (uint8_t)(x47 & UINT8_C(0xff)); + x49 = (uint8_t)(x47 >> 8); + out1[0] = x8; + out1[1] = x10; + out1[2] = x12; + out1[3] = x13; + out1[4] = x14; + out1[5] = x16; + out1[6] = x18; + out1[7] = x19; + out1[8] = x20; + out1[9] = x22; + out1[10] = x24; + out1[11] = x25; + out1[12] = x26; + out1[13] = x28; + out1[14] = x30; + out1[15] = x31; + out1[16] = x32; + out1[17] = x34; + out1[18] = x36; + out1[19] = x37; + out1[20] = x38; + out1[21] = x40; + out1[22] = x42; + out1[23] = x43; + out1[24] = x44; + out1[25] = x46; + out1[26] = x48; + out1[27] = x49; +} + +/* + * The function fiat_np224_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np224_from_bytes(uint32_t out1[7], const uint8_t arg1[28]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint8_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint8_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint8_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint8_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint8_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint8_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint8_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + x1 = ((uint32_t)(arg1[27]) << 24); + x2 = ((uint32_t)(arg1[26]) << 16); + x3 = ((uint32_t)(arg1[25]) << 8); + x4 = (arg1[24]); + x5 = ((uint32_t)(arg1[23]) << 24); + x6 = ((uint32_t)(arg1[22]) << 16); + x7 = ((uint32_t)(arg1[21]) << 8); + x8 = (arg1[20]); + x9 = ((uint32_t)(arg1[19]) << 24); + x10 = ((uint32_t)(arg1[18]) << 16); + x11 = ((uint32_t)(arg1[17]) << 8); + x12 = (arg1[16]); + x13 = ((uint32_t)(arg1[15]) << 24); + x14 = ((uint32_t)(arg1[14]) << 16); + x15 = ((uint32_t)(arg1[13]) << 8); + x16 = (arg1[12]); + x17 = ((uint32_t)(arg1[11]) << 24); + x18 = ((uint32_t)(arg1[10]) << 16); + x19 = ((uint32_t)(arg1[9]) << 8); + x20 = (arg1[8]); + x21 = ((uint32_t)(arg1[7]) << 24); + x22 = ((uint32_t)(arg1[6]) << 16); + x23 = ((uint32_t)(arg1[5]) << 8); + x24 = (arg1[4]); + x25 = ((uint32_t)(arg1[3]) << 24); + x26 = ((uint32_t)(arg1[2]) << 16); + x27 = ((uint32_t)(arg1[1]) << 8); + x28 = (arg1[0]); + x29 = (x27 + (uint32_t)x28); + x30 = (x26 + x29); + x31 = (x25 + x30); + x32 = (x23 + (uint32_t)x24); + x33 = (x22 + x32); + x34 = (x21 + x33); + x35 = (x19 + (uint32_t)x20); + x36 = (x18 + x35); + x37 = (x17 + x36); + x38 = (x15 + (uint32_t)x16); + x39 = (x14 + x38); + x40 = (x13 + x39); + x41 = (x11 + (uint32_t)x12); + x42 = (x10 + x41); + x43 = (x9 + x42); + x44 = (x7 + (uint32_t)x8); + x45 = (x6 + x44); + x46 = (x5 + x45); + x47 = (x3 + (uint32_t)x4); + x48 = (x2 + x47); + x49 = (x1 + x48); + out1[0] = x31; + out1[1] = x34; + out1[2] = x37; + out1[3] = x40; + out1[4] = x43; + out1[5] = x46; + out1[6] = x49; +} + diff --git a/ec/native/np224_64.h b/ec/native/np224_64.h new file mode 100644 index 00000000..08a6b752 --- /dev/null +++ b/ec/native/np224_64.h @@ -0,0 +1,1724 @@ +/* Autogenerated: '../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery' --static --use-value-barrier np224 64 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D mul add opp from_montgomery to_montgomery one msat divstep_precomp divstep to_bytes from_bytes */ +/* curve description: np224 */ +/* machine_wordsize = 64 (from "64") */ +/* requested operations: mul, add, opp, from_montgomery, to_montgomery, one, msat, divstep_precomp, divstep, to_bytes, from_bytes */ +/* m = 0xffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d (from "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) */ + +#include +typedef unsigned char fiat_np224_uint1; +typedef signed char fiat_np224_int1; +#ifdef __GNUC__ +# define FIAT_NP224_FIAT_EXTENSION __extension__ +#else +# define FIAT_NP224_FIAT_EXTENSION +#endif + +FIAT_NP224_FIAT_EXTENSION typedef signed __int128 fiat_np224_int128; +FIAT_NP224_FIAT_EXTENSION typedef unsigned __int128 fiat_np224_uint128; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_NP224_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint64_t fiat_np224_value_barrier_u64(uint64_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_np224_value_barrier_u64(x) (x) +#endif + + +/* + * The function fiat_np224_addcarryx_u64 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^64 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_np224_addcarryx_u64(uint64_t* out1, fiat_np224_uint1* out2, fiat_np224_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_np224_uint128 x1; + uint64_t x2; + fiat_np224_uint1 x3; + x1 = ((arg1 + (fiat_np224_uint128)arg2) + arg3); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (fiat_np224_uint1)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_np224_subborrowx_u64 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^64 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_np224_subborrowx_u64(uint64_t* out1, fiat_np224_uint1* out2, fiat_np224_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_np224_int128 x1; + fiat_np224_int1 x2; + uint64_t x3; + x1 = ((arg2 - (fiat_np224_int128)arg1) - arg3); + x2 = (fiat_np224_int1)(x1 >> 64); + x3 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + *out1 = x3; + *out2 = (fiat_np224_uint1)(0x0 - x2); +} + +/* + * The function fiat_np224_mulx_u64 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^64 + * out2 = ⌊arg1 * arg2 / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_np224_mulx_u64(uint64_t* out1, uint64_t* out2, uint64_t arg1, uint64_t arg2) { + fiat_np224_uint128 x1; + uint64_t x2; + uint64_t x3; + x1 = ((fiat_np224_uint128)arg1 * arg2); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (uint64_t)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_np224_cmovznz_u64 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_np224_cmovznz_u64(uint64_t* out1, fiat_np224_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_np224_uint1 x1; + uint64_t x2; + uint64_t x3; + x1 = (!(!arg1)); + x2 = ((fiat_np224_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); + x3 = ((fiat_np224_value_barrier_u64(x2) & arg3) | (fiat_np224_value_barrier_u64((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_np224_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np224_mul(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + fiat_np224_uint1 x14; + uint64_t x15; + fiat_np224_uint1 x16; + uint64_t x17; + fiat_np224_uint1 x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + fiat_np224_uint1 x31; + uint64_t x32; + fiat_np224_uint1 x33; + uint64_t x34; + fiat_np224_uint1 x35; + uint64_t x36; + uint64_t x37; + fiat_np224_uint1 x38; + uint64_t x39; + fiat_np224_uint1 x40; + uint64_t x41; + fiat_np224_uint1 x42; + uint64_t x43; + fiat_np224_uint1 x44; + uint64_t x45; + fiat_np224_uint1 x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + fiat_np224_uint1 x56; + uint64_t x57; + fiat_np224_uint1 x58; + uint64_t x59; + fiat_np224_uint1 x60; + uint64_t x61; + uint64_t x62; + fiat_np224_uint1 x63; + uint64_t x64; + fiat_np224_uint1 x65; + uint64_t x66; + fiat_np224_uint1 x67; + uint64_t x68; + fiat_np224_uint1 x69; + uint64_t x70; + fiat_np224_uint1 x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + uint64_t x81; + uint64_t x82; + fiat_np224_uint1 x83; + uint64_t x84; + fiat_np224_uint1 x85; + uint64_t x86; + fiat_np224_uint1 x87; + uint64_t x88; + uint64_t x89; + fiat_np224_uint1 x90; + uint64_t x91; + fiat_np224_uint1 x92; + uint64_t x93; + fiat_np224_uint1 x94; + uint64_t x95; + fiat_np224_uint1 x96; + uint64_t x97; + fiat_np224_uint1 x98; + uint64_t x99; + uint64_t x100; + uint64_t x101; + uint64_t x102; + uint64_t x103; + uint64_t x104; + uint64_t x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + fiat_np224_uint1 x109; + uint64_t x110; + fiat_np224_uint1 x111; + uint64_t x112; + fiat_np224_uint1 x113; + uint64_t x114; + uint64_t x115; + fiat_np224_uint1 x116; + uint64_t x117; + fiat_np224_uint1 x118; + uint64_t x119; + fiat_np224_uint1 x120; + uint64_t x121; + fiat_np224_uint1 x122; + uint64_t x123; + fiat_np224_uint1 x124; + uint64_t x125; + uint64_t x126; + uint64_t x127; + uint64_t x128; + uint64_t x129; + uint64_t x130; + uint64_t x131; + uint64_t x132; + uint64_t x133; + uint64_t x134; + uint64_t x135; + fiat_np224_uint1 x136; + uint64_t x137; + fiat_np224_uint1 x138; + uint64_t x139; + fiat_np224_uint1 x140; + uint64_t x141; + uint64_t x142; + fiat_np224_uint1 x143; + uint64_t x144; + fiat_np224_uint1 x145; + uint64_t x146; + fiat_np224_uint1 x147; + uint64_t x148; + fiat_np224_uint1 x149; + uint64_t x150; + fiat_np224_uint1 x151; + uint64_t x152; + uint64_t x153; + uint64_t x154; + uint64_t x155; + uint64_t x156; + uint64_t x157; + uint64_t x158; + uint64_t x159; + uint64_t x160; + uint64_t x161; + fiat_np224_uint1 x162; + uint64_t x163; + fiat_np224_uint1 x164; + uint64_t x165; + fiat_np224_uint1 x166; + uint64_t x167; + uint64_t x168; + fiat_np224_uint1 x169; + uint64_t x170; + fiat_np224_uint1 x171; + uint64_t x172; + fiat_np224_uint1 x173; + uint64_t x174; + fiat_np224_uint1 x175; + uint64_t x176; + fiat_np224_uint1 x177; + uint64_t x178; + uint64_t x179; + uint64_t x180; + uint64_t x181; + uint64_t x182; + uint64_t x183; + uint64_t x184; + uint64_t x185; + uint64_t x186; + uint64_t x187; + uint64_t x188; + fiat_np224_uint1 x189; + uint64_t x190; + fiat_np224_uint1 x191; + uint64_t x192; + fiat_np224_uint1 x193; + uint64_t x194; + uint64_t x195; + fiat_np224_uint1 x196; + uint64_t x197; + fiat_np224_uint1 x198; + uint64_t x199; + fiat_np224_uint1 x200; + uint64_t x201; + fiat_np224_uint1 x202; + uint64_t x203; + fiat_np224_uint1 x204; + uint64_t x205; + uint64_t x206; + fiat_np224_uint1 x207; + uint64_t x208; + fiat_np224_uint1 x209; + uint64_t x210; + fiat_np224_uint1 x211; + uint64_t x212; + fiat_np224_uint1 x213; + uint64_t x214; + fiat_np224_uint1 x215; + uint64_t x216; + uint64_t x217; + uint64_t x218; + uint64_t x219; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[0]); + fiat_np224_mulx_u64(&x5, &x6, x4, (arg2[3])); + fiat_np224_mulx_u64(&x7, &x8, x4, (arg2[2])); + fiat_np224_mulx_u64(&x9, &x10, x4, (arg2[1])); + fiat_np224_mulx_u64(&x11, &x12, x4, (arg2[0])); + fiat_np224_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + fiat_np224_addcarryx_u64(&x15, &x16, x14, x10, x7); + fiat_np224_addcarryx_u64(&x17, &x18, x16, x8, x5); + x19 = (x18 + x6); + fiat_np224_mulx_u64(&x20, &x21, x11, UINT64_C(0xd6e242706a1fc2eb)); + fiat_np224_mulx_u64(&x22, &x23, x20, UINT32_C(0xffffffff)); + fiat_np224_mulx_u64(&x24, &x25, x20, UINT64_C(0xffffffffffffffff)); + fiat_np224_mulx_u64(&x26, &x27, x20, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_mulx_u64(&x28, &x29, x20, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_addcarryx_u64(&x30, &x31, 0x0, x29, x26); + fiat_np224_addcarryx_u64(&x32, &x33, x31, x27, x24); + fiat_np224_addcarryx_u64(&x34, &x35, x33, x25, x22); + x36 = (x35 + x23); + fiat_np224_addcarryx_u64(&x37, &x38, 0x0, x11, x28); + fiat_np224_addcarryx_u64(&x39, &x40, x38, x13, x30); + fiat_np224_addcarryx_u64(&x41, &x42, x40, x15, x32); + fiat_np224_addcarryx_u64(&x43, &x44, x42, x17, x34); + fiat_np224_addcarryx_u64(&x45, &x46, x44, x19, x36); + fiat_np224_mulx_u64(&x47, &x48, x1, (arg2[3])); + fiat_np224_mulx_u64(&x49, &x50, x1, (arg2[2])); + fiat_np224_mulx_u64(&x51, &x52, x1, (arg2[1])); + fiat_np224_mulx_u64(&x53, &x54, x1, (arg2[0])); + fiat_np224_addcarryx_u64(&x55, &x56, 0x0, x54, x51); + fiat_np224_addcarryx_u64(&x57, &x58, x56, x52, x49); + fiat_np224_addcarryx_u64(&x59, &x60, x58, x50, x47); + x61 = (x60 + x48); + fiat_np224_addcarryx_u64(&x62, &x63, 0x0, x39, x53); + fiat_np224_addcarryx_u64(&x64, &x65, x63, x41, x55); + fiat_np224_addcarryx_u64(&x66, &x67, x65, x43, x57); + fiat_np224_addcarryx_u64(&x68, &x69, x67, x45, x59); + fiat_np224_addcarryx_u64(&x70, &x71, x69, x46, x61); + fiat_np224_mulx_u64(&x72, &x73, x62, UINT64_C(0xd6e242706a1fc2eb)); + fiat_np224_mulx_u64(&x74, &x75, x72, UINT32_C(0xffffffff)); + fiat_np224_mulx_u64(&x76, &x77, x72, UINT64_C(0xffffffffffffffff)); + fiat_np224_mulx_u64(&x78, &x79, x72, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_mulx_u64(&x80, &x81, x72, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_addcarryx_u64(&x82, &x83, 0x0, x81, x78); + fiat_np224_addcarryx_u64(&x84, &x85, x83, x79, x76); + fiat_np224_addcarryx_u64(&x86, &x87, x85, x77, x74); + x88 = (x87 + x75); + fiat_np224_addcarryx_u64(&x89, &x90, 0x0, x62, x80); + fiat_np224_addcarryx_u64(&x91, &x92, x90, x64, x82); + fiat_np224_addcarryx_u64(&x93, &x94, x92, x66, x84); + fiat_np224_addcarryx_u64(&x95, &x96, x94, x68, x86); + fiat_np224_addcarryx_u64(&x97, &x98, x96, x70, x88); + x99 = ((uint64_t)x98 + x71); + fiat_np224_mulx_u64(&x100, &x101, x2, (arg2[3])); + fiat_np224_mulx_u64(&x102, &x103, x2, (arg2[2])); + fiat_np224_mulx_u64(&x104, &x105, x2, (arg2[1])); + fiat_np224_mulx_u64(&x106, &x107, x2, (arg2[0])); + fiat_np224_addcarryx_u64(&x108, &x109, 0x0, x107, x104); + fiat_np224_addcarryx_u64(&x110, &x111, x109, x105, x102); + fiat_np224_addcarryx_u64(&x112, &x113, x111, x103, x100); + x114 = (x113 + x101); + fiat_np224_addcarryx_u64(&x115, &x116, 0x0, x91, x106); + fiat_np224_addcarryx_u64(&x117, &x118, x116, x93, x108); + fiat_np224_addcarryx_u64(&x119, &x120, x118, x95, x110); + fiat_np224_addcarryx_u64(&x121, &x122, x120, x97, x112); + fiat_np224_addcarryx_u64(&x123, &x124, x122, x99, x114); + fiat_np224_mulx_u64(&x125, &x126, x115, UINT64_C(0xd6e242706a1fc2eb)); + fiat_np224_mulx_u64(&x127, &x128, x125, UINT32_C(0xffffffff)); + fiat_np224_mulx_u64(&x129, &x130, x125, UINT64_C(0xffffffffffffffff)); + fiat_np224_mulx_u64(&x131, &x132, x125, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_mulx_u64(&x133, &x134, x125, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_addcarryx_u64(&x135, &x136, 0x0, x134, x131); + fiat_np224_addcarryx_u64(&x137, &x138, x136, x132, x129); + fiat_np224_addcarryx_u64(&x139, &x140, x138, x130, x127); + x141 = (x140 + x128); + fiat_np224_addcarryx_u64(&x142, &x143, 0x0, x115, x133); + fiat_np224_addcarryx_u64(&x144, &x145, x143, x117, x135); + fiat_np224_addcarryx_u64(&x146, &x147, x145, x119, x137); + fiat_np224_addcarryx_u64(&x148, &x149, x147, x121, x139); + fiat_np224_addcarryx_u64(&x150, &x151, x149, x123, x141); + x152 = ((uint64_t)x151 + x124); + fiat_np224_mulx_u64(&x153, &x154, x3, (arg2[3])); + fiat_np224_mulx_u64(&x155, &x156, x3, (arg2[2])); + fiat_np224_mulx_u64(&x157, &x158, x3, (arg2[1])); + fiat_np224_mulx_u64(&x159, &x160, x3, (arg2[0])); + fiat_np224_addcarryx_u64(&x161, &x162, 0x0, x160, x157); + fiat_np224_addcarryx_u64(&x163, &x164, x162, x158, x155); + fiat_np224_addcarryx_u64(&x165, &x166, x164, x156, x153); + x167 = (x166 + x154); + fiat_np224_addcarryx_u64(&x168, &x169, 0x0, x144, x159); + fiat_np224_addcarryx_u64(&x170, &x171, x169, x146, x161); + fiat_np224_addcarryx_u64(&x172, &x173, x171, x148, x163); + fiat_np224_addcarryx_u64(&x174, &x175, x173, x150, x165); + fiat_np224_addcarryx_u64(&x176, &x177, x175, x152, x167); + fiat_np224_mulx_u64(&x178, &x179, x168, UINT64_C(0xd6e242706a1fc2eb)); + fiat_np224_mulx_u64(&x180, &x181, x178, UINT32_C(0xffffffff)); + fiat_np224_mulx_u64(&x182, &x183, x178, UINT64_C(0xffffffffffffffff)); + fiat_np224_mulx_u64(&x184, &x185, x178, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_mulx_u64(&x186, &x187, x178, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_addcarryx_u64(&x188, &x189, 0x0, x187, x184); + fiat_np224_addcarryx_u64(&x190, &x191, x189, x185, x182); + fiat_np224_addcarryx_u64(&x192, &x193, x191, x183, x180); + x194 = (x193 + x181); + fiat_np224_addcarryx_u64(&x195, &x196, 0x0, x168, x186); + fiat_np224_addcarryx_u64(&x197, &x198, x196, x170, x188); + fiat_np224_addcarryx_u64(&x199, &x200, x198, x172, x190); + fiat_np224_addcarryx_u64(&x201, &x202, x200, x174, x192); + fiat_np224_addcarryx_u64(&x203, &x204, x202, x176, x194); + x205 = ((uint64_t)x204 + x177); + fiat_np224_subborrowx_u64(&x206, &x207, 0x0, x197, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_subborrowx_u64(&x208, &x209, x207, x199, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_subborrowx_u64(&x210, &x211, x209, x201, UINT64_C(0xffffffffffffffff)); + fiat_np224_subborrowx_u64(&x212, &x213, x211, x203, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u64(&x214, &x215, x213, x205, 0x0); + fiat_np224_cmovznz_u64(&x216, x215, x206, x197); + fiat_np224_cmovznz_u64(&x217, x215, x208, x199); + fiat_np224_cmovznz_u64(&x218, x215, x210, x201); + fiat_np224_cmovznz_u64(&x219, x215, x212, x203); + out1[0] = x216; + out1[1] = x217; + out1[2] = x218; + out1[3] = x219; +} + +/* + * The function fiat_np224_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np224_add(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { + uint64_t x1; + fiat_np224_uint1 x2; + uint64_t x3; + fiat_np224_uint1 x4; + uint64_t x5; + fiat_np224_uint1 x6; + uint64_t x7; + fiat_np224_uint1 x8; + uint64_t x9; + fiat_np224_uint1 x10; + uint64_t x11; + fiat_np224_uint1 x12; + uint64_t x13; + fiat_np224_uint1 x14; + uint64_t x15; + fiat_np224_uint1 x16; + uint64_t x17; + fiat_np224_uint1 x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + fiat_np224_addcarryx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_np224_addcarryx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_np224_addcarryx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_np224_addcarryx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_np224_subborrowx_u64(&x9, &x10, 0x0, x1, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_subborrowx_u64(&x11, &x12, x10, x3, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_subborrowx_u64(&x13, &x14, x12, x5, UINT64_C(0xffffffffffffffff)); + fiat_np224_subborrowx_u64(&x15, &x16, x14, x7, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u64(&x17, &x18, x16, x8, 0x0); + fiat_np224_cmovznz_u64(&x19, x18, x9, x1); + fiat_np224_cmovznz_u64(&x20, x18, x11, x3); + fiat_np224_cmovznz_u64(&x21, x18, x13, x5); + fiat_np224_cmovznz_u64(&x22, x18, x15, x7); + out1[0] = x19; + out1[1] = x20; + out1[2] = x21; + out1[3] = x22; +} + +/* + * The function fiat_np224_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np224_opp(uint64_t out1[4], const uint64_t arg1[4]) { + uint64_t x1; + fiat_np224_uint1 x2; + uint64_t x3; + fiat_np224_uint1 x4; + uint64_t x5; + fiat_np224_uint1 x6; + uint64_t x7; + fiat_np224_uint1 x8; + uint64_t x9; + uint64_t x10; + fiat_np224_uint1 x11; + uint64_t x12; + fiat_np224_uint1 x13; + uint64_t x14; + fiat_np224_uint1 x15; + uint64_t x16; + fiat_np224_uint1 x17; + fiat_np224_subborrowx_u64(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_np224_subborrowx_u64(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_np224_subborrowx_u64(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_np224_subborrowx_u64(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_np224_cmovznz_u64(&x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_np224_addcarryx_u64(&x10, &x11, 0x0, x1, (x9 & UINT64_C(0x13dd29455c5c2a3d))); + fiat_np224_addcarryx_u64(&x12, &x13, x11, x3, (x9 & UINT64_C(0xffff16a2e0b8f03e))); + fiat_np224_addcarryx_u64(&x14, &x15, x13, x5, x9); + fiat_np224_addcarryx_u64(&x16, &x17, x15, x7, (x9 & UINT32_C(0xffffffff))); + out1[0] = x10; + out1[1] = x12; + out1[2] = x14; + out1[3] = x16; +} + +/* + * The function fiat_np224_from_montgomery translates a field element out of the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^64)⁻¹ mod m)^4) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np224_from_montgomery(uint64_t out1[4], const uint64_t arg1[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + fiat_np224_uint1 x13; + uint64_t x14; + fiat_np224_uint1 x15; + uint64_t x16; + fiat_np224_uint1 x17; + uint64_t x18; + fiat_np224_uint1 x19; + uint64_t x20; + fiat_np224_uint1 x21; + uint64_t x22; + fiat_np224_uint1 x23; + uint64_t x24; + fiat_np224_uint1 x25; + uint64_t x26; + fiat_np224_uint1 x27; + uint64_t x28; + fiat_np224_uint1 x29; + uint64_t x30; + fiat_np224_uint1 x31; + uint64_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + fiat_np224_uint1 x43; + uint64_t x44; + fiat_np224_uint1 x45; + uint64_t x46; + fiat_np224_uint1 x47; + uint64_t x48; + fiat_np224_uint1 x49; + uint64_t x50; + fiat_np224_uint1 x51; + uint64_t x52; + fiat_np224_uint1 x53; + uint64_t x54; + fiat_np224_uint1 x55; + uint64_t x56; + fiat_np224_uint1 x57; + uint64_t x58; + fiat_np224_uint1 x59; + uint64_t x60; + fiat_np224_uint1 x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + uint64_t x65; + uint64_t x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + fiat_np224_uint1 x73; + uint64_t x74; + fiat_np224_uint1 x75; + uint64_t x76; + fiat_np224_uint1 x77; + uint64_t x78; + fiat_np224_uint1 x79; + uint64_t x80; + fiat_np224_uint1 x81; + uint64_t x82; + fiat_np224_uint1 x83; + uint64_t x84; + fiat_np224_uint1 x85; + uint64_t x86; + fiat_np224_uint1 x87; + uint64_t x88; + fiat_np224_uint1 x89; + uint64_t x90; + fiat_np224_uint1 x91; + uint64_t x92; + uint64_t x93; + uint64_t x94; + uint64_t x95; + uint64_t x96; + uint64_t x97; + uint64_t x98; + uint64_t x99; + uint64_t x100; + uint64_t x101; + uint64_t x102; + fiat_np224_uint1 x103; + uint64_t x104; + fiat_np224_uint1 x105; + uint64_t x106; + fiat_np224_uint1 x107; + uint64_t x108; + fiat_np224_uint1 x109; + uint64_t x110; + fiat_np224_uint1 x111; + uint64_t x112; + fiat_np224_uint1 x113; + uint64_t x114; + fiat_np224_uint1 x115; + uint64_t x116; + uint64_t x117; + fiat_np224_uint1 x118; + uint64_t x119; + fiat_np224_uint1 x120; + uint64_t x121; + fiat_np224_uint1 x122; + uint64_t x123; + fiat_np224_uint1 x124; + uint64_t x125; + fiat_np224_uint1 x126; + uint64_t x127; + uint64_t x128; + uint64_t x129; + uint64_t x130; + x1 = (arg1[0]); + fiat_np224_mulx_u64(&x2, &x3, x1, UINT64_C(0xd6e242706a1fc2eb)); + fiat_np224_mulx_u64(&x4, &x5, x2, UINT32_C(0xffffffff)); + fiat_np224_mulx_u64(&x6, &x7, x2, UINT64_C(0xffffffffffffffff)); + fiat_np224_mulx_u64(&x8, &x9, x2, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_mulx_u64(&x10, &x11, x2, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_addcarryx_u64(&x12, &x13, 0x0, x11, x8); + fiat_np224_addcarryx_u64(&x14, &x15, x13, x9, x6); + fiat_np224_addcarryx_u64(&x16, &x17, x15, x7, x4); + fiat_np224_addcarryx_u64(&x18, &x19, 0x0, x1, x10); + fiat_np224_addcarryx_u64(&x20, &x21, x19, 0x0, x12); + fiat_np224_addcarryx_u64(&x22, &x23, x21, 0x0, x14); + fiat_np224_addcarryx_u64(&x24, &x25, x23, 0x0, x16); + fiat_np224_addcarryx_u64(&x26, &x27, 0x0, x20, (arg1[1])); + fiat_np224_addcarryx_u64(&x28, &x29, x27, x22, 0x0); + fiat_np224_addcarryx_u64(&x30, &x31, x29, x24, 0x0); + fiat_np224_mulx_u64(&x32, &x33, x26, UINT64_C(0xd6e242706a1fc2eb)); + fiat_np224_mulx_u64(&x34, &x35, x32, UINT32_C(0xffffffff)); + fiat_np224_mulx_u64(&x36, &x37, x32, UINT64_C(0xffffffffffffffff)); + fiat_np224_mulx_u64(&x38, &x39, x32, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_mulx_u64(&x40, &x41, x32, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_addcarryx_u64(&x42, &x43, 0x0, x41, x38); + fiat_np224_addcarryx_u64(&x44, &x45, x43, x39, x36); + fiat_np224_addcarryx_u64(&x46, &x47, x45, x37, x34); + fiat_np224_addcarryx_u64(&x48, &x49, 0x0, x26, x40); + fiat_np224_addcarryx_u64(&x50, &x51, x49, x28, x42); + fiat_np224_addcarryx_u64(&x52, &x53, x51, x30, x44); + fiat_np224_addcarryx_u64(&x54, &x55, x53, (x31 + (x25 + (x17 + x5))), x46); + fiat_np224_addcarryx_u64(&x56, &x57, 0x0, x50, (arg1[2])); + fiat_np224_addcarryx_u64(&x58, &x59, x57, x52, 0x0); + fiat_np224_addcarryx_u64(&x60, &x61, x59, x54, 0x0); + fiat_np224_mulx_u64(&x62, &x63, x56, UINT64_C(0xd6e242706a1fc2eb)); + fiat_np224_mulx_u64(&x64, &x65, x62, UINT32_C(0xffffffff)); + fiat_np224_mulx_u64(&x66, &x67, x62, UINT64_C(0xffffffffffffffff)); + fiat_np224_mulx_u64(&x68, &x69, x62, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_mulx_u64(&x70, &x71, x62, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_addcarryx_u64(&x72, &x73, 0x0, x71, x68); + fiat_np224_addcarryx_u64(&x74, &x75, x73, x69, x66); + fiat_np224_addcarryx_u64(&x76, &x77, x75, x67, x64); + fiat_np224_addcarryx_u64(&x78, &x79, 0x0, x56, x70); + fiat_np224_addcarryx_u64(&x80, &x81, x79, x58, x72); + fiat_np224_addcarryx_u64(&x82, &x83, x81, x60, x74); + fiat_np224_addcarryx_u64(&x84, &x85, x83, (x61 + (x55 + (x47 + x35))), x76); + fiat_np224_addcarryx_u64(&x86, &x87, 0x0, x80, (arg1[3])); + fiat_np224_addcarryx_u64(&x88, &x89, x87, x82, 0x0); + fiat_np224_addcarryx_u64(&x90, &x91, x89, x84, 0x0); + fiat_np224_mulx_u64(&x92, &x93, x86, UINT64_C(0xd6e242706a1fc2eb)); + fiat_np224_mulx_u64(&x94, &x95, x92, UINT32_C(0xffffffff)); + fiat_np224_mulx_u64(&x96, &x97, x92, UINT64_C(0xffffffffffffffff)); + fiat_np224_mulx_u64(&x98, &x99, x92, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_mulx_u64(&x100, &x101, x92, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_addcarryx_u64(&x102, &x103, 0x0, x101, x98); + fiat_np224_addcarryx_u64(&x104, &x105, x103, x99, x96); + fiat_np224_addcarryx_u64(&x106, &x107, x105, x97, x94); + fiat_np224_addcarryx_u64(&x108, &x109, 0x0, x86, x100); + fiat_np224_addcarryx_u64(&x110, &x111, x109, x88, x102); + fiat_np224_addcarryx_u64(&x112, &x113, x111, x90, x104); + fiat_np224_addcarryx_u64(&x114, &x115, x113, (x91 + (x85 + (x77 + x65))), x106); + x116 = (x115 + (x107 + x95)); + fiat_np224_subborrowx_u64(&x117, &x118, 0x0, x110, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_subborrowx_u64(&x119, &x120, x118, x112, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_subborrowx_u64(&x121, &x122, x120, x114, UINT64_C(0xffffffffffffffff)); + fiat_np224_subborrowx_u64(&x123, &x124, x122, x116, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u64(&x125, &x126, x124, 0x0, 0x0); + fiat_np224_cmovznz_u64(&x127, x126, x117, x110); + fiat_np224_cmovznz_u64(&x128, x126, x119, x112); + fiat_np224_cmovznz_u64(&x129, x126, x121, x114); + fiat_np224_cmovznz_u64(&x130, x126, x123, x116); + out1[0] = x127; + out1[1] = x128; + out1[2] = x129; + out1[3] = x130; +} + +/* + * The function fiat_np224_to_montgomery translates a field element into the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np224_to_montgomery(uint64_t out1[4], const uint64_t arg1[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + fiat_np224_uint1 x14; + uint64_t x15; + fiat_np224_uint1 x16; + uint64_t x17; + fiat_np224_uint1 x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + fiat_np224_uint1 x30; + uint64_t x31; + fiat_np224_uint1 x32; + uint64_t x33; + fiat_np224_uint1 x34; + uint64_t x35; + fiat_np224_uint1 x36; + uint64_t x37; + fiat_np224_uint1 x38; + uint64_t x39; + fiat_np224_uint1 x40; + uint64_t x41; + fiat_np224_uint1 x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + fiat_np224_uint1 x52; + uint64_t x53; + fiat_np224_uint1 x54; + uint64_t x55; + fiat_np224_uint1 x56; + uint64_t x57; + fiat_np224_uint1 x58; + uint64_t x59; + fiat_np224_uint1 x60; + uint64_t x61; + fiat_np224_uint1 x62; + uint64_t x63; + fiat_np224_uint1 x64; + uint64_t x65; + uint64_t x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + fiat_np224_uint1 x76; + uint64_t x77; + fiat_np224_uint1 x78; + uint64_t x79; + fiat_np224_uint1 x80; + uint64_t x81; + fiat_np224_uint1 x82; + uint64_t x83; + fiat_np224_uint1 x84; + uint64_t x85; + fiat_np224_uint1 x86; + uint64_t x87; + fiat_np224_uint1 x88; + uint64_t x89; + uint64_t x90; + uint64_t x91; + uint64_t x92; + uint64_t x93; + uint64_t x94; + uint64_t x95; + uint64_t x96; + uint64_t x97; + fiat_np224_uint1 x98; + uint64_t x99; + fiat_np224_uint1 x100; + uint64_t x101; + fiat_np224_uint1 x102; + uint64_t x103; + fiat_np224_uint1 x104; + uint64_t x105; + fiat_np224_uint1 x106; + uint64_t x107; + fiat_np224_uint1 x108; + uint64_t x109; + fiat_np224_uint1 x110; + uint64_t x111; + uint64_t x112; + uint64_t x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + uint64_t x121; + fiat_np224_uint1 x122; + uint64_t x123; + fiat_np224_uint1 x124; + uint64_t x125; + fiat_np224_uint1 x126; + uint64_t x127; + fiat_np224_uint1 x128; + uint64_t x129; + fiat_np224_uint1 x130; + uint64_t x131; + fiat_np224_uint1 x132; + uint64_t x133; + fiat_np224_uint1 x134; + uint64_t x135; + uint64_t x136; + uint64_t x137; + uint64_t x138; + uint64_t x139; + uint64_t x140; + uint64_t x141; + uint64_t x142; + uint64_t x143; + fiat_np224_uint1 x144; + uint64_t x145; + fiat_np224_uint1 x146; + uint64_t x147; + fiat_np224_uint1 x148; + uint64_t x149; + fiat_np224_uint1 x150; + uint64_t x151; + fiat_np224_uint1 x152; + uint64_t x153; + fiat_np224_uint1 x154; + uint64_t x155; + fiat_np224_uint1 x156; + uint64_t x157; + uint64_t x158; + uint64_t x159; + uint64_t x160; + uint64_t x161; + uint64_t x162; + uint64_t x163; + uint64_t x164; + uint64_t x165; + uint64_t x166; + uint64_t x167; + fiat_np224_uint1 x168; + uint64_t x169; + fiat_np224_uint1 x170; + uint64_t x171; + fiat_np224_uint1 x172; + uint64_t x173; + fiat_np224_uint1 x174; + uint64_t x175; + fiat_np224_uint1 x176; + uint64_t x177; + fiat_np224_uint1 x178; + uint64_t x179; + fiat_np224_uint1 x180; + uint64_t x181; + uint64_t x182; + fiat_np224_uint1 x183; + uint64_t x184; + fiat_np224_uint1 x185; + uint64_t x186; + fiat_np224_uint1 x187; + uint64_t x188; + fiat_np224_uint1 x189; + uint64_t x190; + fiat_np224_uint1 x191; + uint64_t x192; + uint64_t x193; + uint64_t x194; + uint64_t x195; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[0]); + fiat_np224_mulx_u64(&x5, &x6, x4, UINT32_C(0xb1e97961)); + fiat_np224_mulx_u64(&x7, &x8, x4, UINT64_C(0x6ad15f7cd9714856)); + fiat_np224_mulx_u64(&x9, &x10, x4, UINT64_C(0xabc8ff5931d63f4b)); + fiat_np224_mulx_u64(&x11, &x12, x4, UINT64_C(0x29947a695f517d15)); + fiat_np224_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + fiat_np224_addcarryx_u64(&x15, &x16, x14, x10, x7); + fiat_np224_addcarryx_u64(&x17, &x18, x16, x8, x5); + fiat_np224_mulx_u64(&x19, &x20, x11, UINT64_C(0xd6e242706a1fc2eb)); + fiat_np224_mulx_u64(&x21, &x22, x19, UINT32_C(0xffffffff)); + fiat_np224_mulx_u64(&x23, &x24, x19, UINT64_C(0xffffffffffffffff)); + fiat_np224_mulx_u64(&x25, &x26, x19, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_mulx_u64(&x27, &x28, x19, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_addcarryx_u64(&x29, &x30, 0x0, x28, x25); + fiat_np224_addcarryx_u64(&x31, &x32, x30, x26, x23); + fiat_np224_addcarryx_u64(&x33, &x34, x32, x24, x21); + fiat_np224_addcarryx_u64(&x35, &x36, 0x0, x11, x27); + fiat_np224_addcarryx_u64(&x37, &x38, x36, x13, x29); + fiat_np224_addcarryx_u64(&x39, &x40, x38, x15, x31); + fiat_np224_addcarryx_u64(&x41, &x42, x40, x17, x33); + fiat_np224_mulx_u64(&x43, &x44, x1, UINT32_C(0xb1e97961)); + fiat_np224_mulx_u64(&x45, &x46, x1, UINT64_C(0x6ad15f7cd9714856)); + fiat_np224_mulx_u64(&x47, &x48, x1, UINT64_C(0xabc8ff5931d63f4b)); + fiat_np224_mulx_u64(&x49, &x50, x1, UINT64_C(0x29947a695f517d15)); + fiat_np224_addcarryx_u64(&x51, &x52, 0x0, x50, x47); + fiat_np224_addcarryx_u64(&x53, &x54, x52, x48, x45); + fiat_np224_addcarryx_u64(&x55, &x56, x54, x46, x43); + fiat_np224_addcarryx_u64(&x57, &x58, 0x0, x37, x49); + fiat_np224_addcarryx_u64(&x59, &x60, x58, x39, x51); + fiat_np224_addcarryx_u64(&x61, &x62, x60, x41, x53); + fiat_np224_addcarryx_u64(&x63, &x64, x62, ((x42 + (x18 + x6)) + (x34 + x22)), x55); + fiat_np224_mulx_u64(&x65, &x66, x57, UINT64_C(0xd6e242706a1fc2eb)); + fiat_np224_mulx_u64(&x67, &x68, x65, UINT32_C(0xffffffff)); + fiat_np224_mulx_u64(&x69, &x70, x65, UINT64_C(0xffffffffffffffff)); + fiat_np224_mulx_u64(&x71, &x72, x65, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_mulx_u64(&x73, &x74, x65, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_addcarryx_u64(&x75, &x76, 0x0, x74, x71); + fiat_np224_addcarryx_u64(&x77, &x78, x76, x72, x69); + fiat_np224_addcarryx_u64(&x79, &x80, x78, x70, x67); + fiat_np224_addcarryx_u64(&x81, &x82, 0x0, x57, x73); + fiat_np224_addcarryx_u64(&x83, &x84, x82, x59, x75); + fiat_np224_addcarryx_u64(&x85, &x86, x84, x61, x77); + fiat_np224_addcarryx_u64(&x87, &x88, x86, x63, x79); + fiat_np224_mulx_u64(&x89, &x90, x2, UINT32_C(0xb1e97961)); + fiat_np224_mulx_u64(&x91, &x92, x2, UINT64_C(0x6ad15f7cd9714856)); + fiat_np224_mulx_u64(&x93, &x94, x2, UINT64_C(0xabc8ff5931d63f4b)); + fiat_np224_mulx_u64(&x95, &x96, x2, UINT64_C(0x29947a695f517d15)); + fiat_np224_addcarryx_u64(&x97, &x98, 0x0, x96, x93); + fiat_np224_addcarryx_u64(&x99, &x100, x98, x94, x91); + fiat_np224_addcarryx_u64(&x101, &x102, x100, x92, x89); + fiat_np224_addcarryx_u64(&x103, &x104, 0x0, x83, x95); + fiat_np224_addcarryx_u64(&x105, &x106, x104, x85, x97); + fiat_np224_addcarryx_u64(&x107, &x108, x106, x87, x99); + fiat_np224_addcarryx_u64(&x109, &x110, x108, ((x88 + (x64 + (x56 + x44))) + (x80 + x68)), x101); + fiat_np224_mulx_u64(&x111, &x112, x103, UINT64_C(0xd6e242706a1fc2eb)); + fiat_np224_mulx_u64(&x113, &x114, x111, UINT32_C(0xffffffff)); + fiat_np224_mulx_u64(&x115, &x116, x111, UINT64_C(0xffffffffffffffff)); + fiat_np224_mulx_u64(&x117, &x118, x111, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_mulx_u64(&x119, &x120, x111, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_addcarryx_u64(&x121, &x122, 0x0, x120, x117); + fiat_np224_addcarryx_u64(&x123, &x124, x122, x118, x115); + fiat_np224_addcarryx_u64(&x125, &x126, x124, x116, x113); + fiat_np224_addcarryx_u64(&x127, &x128, 0x0, x103, x119); + fiat_np224_addcarryx_u64(&x129, &x130, x128, x105, x121); + fiat_np224_addcarryx_u64(&x131, &x132, x130, x107, x123); + fiat_np224_addcarryx_u64(&x133, &x134, x132, x109, x125); + fiat_np224_mulx_u64(&x135, &x136, x3, UINT32_C(0xb1e97961)); + fiat_np224_mulx_u64(&x137, &x138, x3, UINT64_C(0x6ad15f7cd9714856)); + fiat_np224_mulx_u64(&x139, &x140, x3, UINT64_C(0xabc8ff5931d63f4b)); + fiat_np224_mulx_u64(&x141, &x142, x3, UINT64_C(0x29947a695f517d15)); + fiat_np224_addcarryx_u64(&x143, &x144, 0x0, x142, x139); + fiat_np224_addcarryx_u64(&x145, &x146, x144, x140, x137); + fiat_np224_addcarryx_u64(&x147, &x148, x146, x138, x135); + fiat_np224_addcarryx_u64(&x149, &x150, 0x0, x129, x141); + fiat_np224_addcarryx_u64(&x151, &x152, x150, x131, x143); + fiat_np224_addcarryx_u64(&x153, &x154, x152, x133, x145); + fiat_np224_addcarryx_u64(&x155, &x156, x154, ((x134 + (x110 + (x102 + x90))) + (x126 + x114)), x147); + fiat_np224_mulx_u64(&x157, &x158, x149, UINT64_C(0xd6e242706a1fc2eb)); + fiat_np224_mulx_u64(&x159, &x160, x157, UINT32_C(0xffffffff)); + fiat_np224_mulx_u64(&x161, &x162, x157, UINT64_C(0xffffffffffffffff)); + fiat_np224_mulx_u64(&x163, &x164, x157, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_mulx_u64(&x165, &x166, x157, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_addcarryx_u64(&x167, &x168, 0x0, x166, x163); + fiat_np224_addcarryx_u64(&x169, &x170, x168, x164, x161); + fiat_np224_addcarryx_u64(&x171, &x172, x170, x162, x159); + fiat_np224_addcarryx_u64(&x173, &x174, 0x0, x149, x165); + fiat_np224_addcarryx_u64(&x175, &x176, x174, x151, x167); + fiat_np224_addcarryx_u64(&x177, &x178, x176, x153, x169); + fiat_np224_addcarryx_u64(&x179, &x180, x178, x155, x171); + x181 = ((x180 + (x156 + (x148 + x136))) + (x172 + x160)); + fiat_np224_subborrowx_u64(&x182, &x183, 0x0, x175, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_subborrowx_u64(&x184, &x185, x183, x177, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_subborrowx_u64(&x186, &x187, x185, x179, UINT64_C(0xffffffffffffffff)); + fiat_np224_subborrowx_u64(&x188, &x189, x187, x181, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u64(&x190, &x191, x189, 0x0, 0x0); + fiat_np224_cmovznz_u64(&x192, x191, x182, x175); + fiat_np224_cmovznz_u64(&x193, x191, x184, x177); + fiat_np224_cmovznz_u64(&x194, x191, x186, x179); + fiat_np224_cmovznz_u64(&x195, x191, x188, x181); + out1[0] = x192; + out1[1] = x193; + out1[2] = x194; + out1[3] = x195; +} + +/* + * The function fiat_np224_set_one returns the field element one in the Montgomery domain. + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np224_set_one(uint64_t out1[4]) { + out1[0] = UINT64_C(0xa3a3d5c300000000); + out1[1] = UINT64_C(0x1f470fc1ec22d6ba); + out1[2] = UINT16_C(0xe95d); + out1[3] = 0x0; +} + +/* + * The function fiat_np224_msat returns the saturated represtation of the prime modulus. + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np224_msat(uint64_t out1[5]) { + out1[0] = UINT64_C(0x13dd29455c5c2a3d); + out1[1] = UINT64_C(0xffff16a2e0b8f03e); + out1[2] = UINT64_C(0xffffffffffffffff); + out1[3] = UINT32_C(0xffffffff); + out1[4] = 0x0; +} + +/* + * The function fiat_np224_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if (log2 m) + 1 < 46 then ⌊(49 * ((log2 m) + 1) + 80) / 17⌋ else ⌊(49 * ((log2 m) + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np224_divstep_precomp(uint64_t out1[4]) { + out1[0] = UINT64_C(0x74ecb6e5a4954cc); + out1[1] = UINT64_C(0x26a7844030955df6); + out1[2] = UINT64_C(0xef16fedba3350f94); + out1[3] = UINT32_C(0x4704d6d8); +} + +/* + * The function fiat_np224_divstep computes a divstep. + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np224_divstep(uint64_t* out1, uint64_t out2[5], uint64_t out3[5], uint64_t out4[4], uint64_t out5[4], uint64_t arg1, const uint64_t arg2[5], const uint64_t arg3[5], const uint64_t arg4[4], const uint64_t arg5[4]) { + uint64_t x1; + fiat_np224_uint1 x2; + fiat_np224_uint1 x3; + uint64_t x4; + fiat_np224_uint1 x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + fiat_np224_uint1 x13; + uint64_t x14; + fiat_np224_uint1 x15; + uint64_t x16; + fiat_np224_uint1 x17; + uint64_t x18; + fiat_np224_uint1 x19; + uint64_t x20; + fiat_np224_uint1 x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + fiat_np224_uint1 x32; + uint64_t x33; + fiat_np224_uint1 x34; + uint64_t x35; + fiat_np224_uint1 x36; + uint64_t x37; + fiat_np224_uint1 x38; + uint64_t x39; + fiat_np224_uint1 x40; + uint64_t x41; + fiat_np224_uint1 x42; + uint64_t x43; + fiat_np224_uint1 x44; + uint64_t x45; + fiat_np224_uint1 x46; + uint64_t x47; + fiat_np224_uint1 x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + fiat_np224_uint1 x54; + uint64_t x55; + fiat_np224_uint1 x56; + uint64_t x57; + fiat_np224_uint1 x58; + uint64_t x59; + fiat_np224_uint1 x60; + uint64_t x61; + uint64_t x62; + fiat_np224_uint1 x63; + uint64_t x64; + fiat_np224_uint1 x65; + uint64_t x66; + fiat_np224_uint1 x67; + uint64_t x68; + fiat_np224_uint1 x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + fiat_np224_uint1 x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + fiat_np224_uint1 x81; + uint64_t x82; + fiat_np224_uint1 x83; + uint64_t x84; + fiat_np224_uint1 x85; + uint64_t x86; + fiat_np224_uint1 x87; + uint64_t x88; + fiat_np224_uint1 x89; + uint64_t x90; + uint64_t x91; + uint64_t x92; + uint64_t x93; + uint64_t x94; + fiat_np224_uint1 x95; + uint64_t x96; + fiat_np224_uint1 x97; + uint64_t x98; + fiat_np224_uint1 x99; + uint64_t x100; + fiat_np224_uint1 x101; + uint64_t x102; + fiat_np224_uint1 x103; + uint64_t x104; + fiat_np224_uint1 x105; + uint64_t x106; + fiat_np224_uint1 x107; + uint64_t x108; + fiat_np224_uint1 x109; + uint64_t x110; + fiat_np224_uint1 x111; + uint64_t x112; + fiat_np224_uint1 x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + uint64_t x121; + uint64_t x122; + uint64_t x123; + uint64_t x124; + uint64_t x125; + uint64_t x126; + fiat_np224_addcarryx_u64(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_np224_uint1)((fiat_np224_uint1)(x1 >> 63) & (fiat_np224_uint1)((arg3[0]) & 0x1)); + fiat_np224_addcarryx_u64(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_np224_cmovznz_u64(&x6, x3, arg1, x4); + fiat_np224_cmovznz_u64(&x7, x3, (arg2[0]), (arg3[0])); + fiat_np224_cmovznz_u64(&x8, x3, (arg2[1]), (arg3[1])); + fiat_np224_cmovznz_u64(&x9, x3, (arg2[2]), (arg3[2])); + fiat_np224_cmovznz_u64(&x10, x3, (arg2[3]), (arg3[3])); + fiat_np224_cmovznz_u64(&x11, x3, (arg2[4]), (arg3[4])); + fiat_np224_addcarryx_u64(&x12, &x13, 0x0, 0x1, (~(arg2[0]))); + fiat_np224_addcarryx_u64(&x14, &x15, x13, 0x0, (~(arg2[1]))); + fiat_np224_addcarryx_u64(&x16, &x17, x15, 0x0, (~(arg2[2]))); + fiat_np224_addcarryx_u64(&x18, &x19, x17, 0x0, (~(arg2[3]))); + fiat_np224_addcarryx_u64(&x20, &x21, x19, 0x0, (~(arg2[4]))); + fiat_np224_cmovznz_u64(&x22, x3, (arg3[0]), x12); + fiat_np224_cmovznz_u64(&x23, x3, (arg3[1]), x14); + fiat_np224_cmovznz_u64(&x24, x3, (arg3[2]), x16); + fiat_np224_cmovznz_u64(&x25, x3, (arg3[3]), x18); + fiat_np224_cmovznz_u64(&x26, x3, (arg3[4]), x20); + fiat_np224_cmovznz_u64(&x27, x3, (arg4[0]), (arg5[0])); + fiat_np224_cmovznz_u64(&x28, x3, (arg4[1]), (arg5[1])); + fiat_np224_cmovznz_u64(&x29, x3, (arg4[2]), (arg5[2])); + fiat_np224_cmovznz_u64(&x30, x3, (arg4[3]), (arg5[3])); + fiat_np224_addcarryx_u64(&x31, &x32, 0x0, x27, x27); + fiat_np224_addcarryx_u64(&x33, &x34, x32, x28, x28); + fiat_np224_addcarryx_u64(&x35, &x36, x34, x29, x29); + fiat_np224_addcarryx_u64(&x37, &x38, x36, x30, x30); + fiat_np224_subborrowx_u64(&x39, &x40, 0x0, x31, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_subborrowx_u64(&x41, &x42, x40, x33, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_subborrowx_u64(&x43, &x44, x42, x35, UINT64_C(0xffffffffffffffff)); + fiat_np224_subborrowx_u64(&x45, &x46, x44, x37, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u64(&x47, &x48, x46, x38, 0x0); + x49 = (arg4[3]); + x50 = (arg4[2]); + x51 = (arg4[1]); + x52 = (arg4[0]); + fiat_np224_subborrowx_u64(&x53, &x54, 0x0, 0x0, x52); + fiat_np224_subborrowx_u64(&x55, &x56, x54, 0x0, x51); + fiat_np224_subborrowx_u64(&x57, &x58, x56, 0x0, x50); + fiat_np224_subborrowx_u64(&x59, &x60, x58, 0x0, x49); + fiat_np224_cmovznz_u64(&x61, x60, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_np224_addcarryx_u64(&x62, &x63, 0x0, x53, (x61 & UINT64_C(0x13dd29455c5c2a3d))); + fiat_np224_addcarryx_u64(&x64, &x65, x63, x55, (x61 & UINT64_C(0xffff16a2e0b8f03e))); + fiat_np224_addcarryx_u64(&x66, &x67, x65, x57, x61); + fiat_np224_addcarryx_u64(&x68, &x69, x67, x59, (x61 & UINT32_C(0xffffffff))); + fiat_np224_cmovznz_u64(&x70, x3, (arg5[0]), x62); + fiat_np224_cmovznz_u64(&x71, x3, (arg5[1]), x64); + fiat_np224_cmovznz_u64(&x72, x3, (arg5[2]), x66); + fiat_np224_cmovznz_u64(&x73, x3, (arg5[3]), x68); + x74 = (fiat_np224_uint1)(x22 & 0x1); + fiat_np224_cmovznz_u64(&x75, x74, 0x0, x7); + fiat_np224_cmovznz_u64(&x76, x74, 0x0, x8); + fiat_np224_cmovznz_u64(&x77, x74, 0x0, x9); + fiat_np224_cmovznz_u64(&x78, x74, 0x0, x10); + fiat_np224_cmovznz_u64(&x79, x74, 0x0, x11); + fiat_np224_addcarryx_u64(&x80, &x81, 0x0, x22, x75); + fiat_np224_addcarryx_u64(&x82, &x83, x81, x23, x76); + fiat_np224_addcarryx_u64(&x84, &x85, x83, x24, x77); + fiat_np224_addcarryx_u64(&x86, &x87, x85, x25, x78); + fiat_np224_addcarryx_u64(&x88, &x89, x87, x26, x79); + fiat_np224_cmovznz_u64(&x90, x74, 0x0, x27); + fiat_np224_cmovznz_u64(&x91, x74, 0x0, x28); + fiat_np224_cmovznz_u64(&x92, x74, 0x0, x29); + fiat_np224_cmovznz_u64(&x93, x74, 0x0, x30); + fiat_np224_addcarryx_u64(&x94, &x95, 0x0, x70, x90); + fiat_np224_addcarryx_u64(&x96, &x97, x95, x71, x91); + fiat_np224_addcarryx_u64(&x98, &x99, x97, x72, x92); + fiat_np224_addcarryx_u64(&x100, &x101, x99, x73, x93); + fiat_np224_subborrowx_u64(&x102, &x103, 0x0, x94, UINT64_C(0x13dd29455c5c2a3d)); + fiat_np224_subborrowx_u64(&x104, &x105, x103, x96, UINT64_C(0xffff16a2e0b8f03e)); + fiat_np224_subborrowx_u64(&x106, &x107, x105, x98, UINT64_C(0xffffffffffffffff)); + fiat_np224_subborrowx_u64(&x108, &x109, x107, x100, UINT32_C(0xffffffff)); + fiat_np224_subborrowx_u64(&x110, &x111, x109, x101, 0x0); + fiat_np224_addcarryx_u64(&x112, &x113, 0x0, x6, 0x1); + x114 = ((x80 >> 1) | ((x82 << 63) & UINT64_C(0xffffffffffffffff))); + x115 = ((x82 >> 1) | ((x84 << 63) & UINT64_C(0xffffffffffffffff))); + x116 = ((x84 >> 1) | ((x86 << 63) & UINT64_C(0xffffffffffffffff))); + x117 = ((x86 >> 1) | ((x88 << 63) & UINT64_C(0xffffffffffffffff))); + x118 = ((x88 & UINT64_C(0x8000000000000000)) | (x88 >> 1)); + fiat_np224_cmovznz_u64(&x119, x48, x39, x31); + fiat_np224_cmovznz_u64(&x120, x48, x41, x33); + fiat_np224_cmovznz_u64(&x121, x48, x43, x35); + fiat_np224_cmovznz_u64(&x122, x48, x45, x37); + fiat_np224_cmovznz_u64(&x123, x111, x102, x94); + fiat_np224_cmovznz_u64(&x124, x111, x104, x96); + fiat_np224_cmovznz_u64(&x125, x111, x106, x98); + fiat_np224_cmovznz_u64(&x126, x111, x108, x100); + *out1 = x112; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out3[0] = x114; + out3[1] = x115; + out3[2] = x116; + out3[3] = x117; + out3[4] = x118; + out4[0] = x119; + out4[1] = x120; + out4[2] = x121; + out4[3] = x122; + out5[0] = x123; + out5[1] = x124; + out5[2] = x125; + out5[3] = x126; +} + +/* + * The function fiat_np224_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..27] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + */ +static void fiat_np224_to_bytes(uint8_t out1[28], const uint64_t arg1[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint8_t x5; + uint64_t x6; + uint8_t x7; + uint64_t x8; + uint8_t x9; + uint64_t x10; + uint8_t x11; + uint64_t x12; + uint8_t x13; + uint64_t x14; + uint8_t x15; + uint64_t x16; + uint8_t x17; + uint8_t x18; + uint8_t x19; + uint64_t x20; + uint8_t x21; + uint64_t x22; + uint8_t x23; + uint64_t x24; + uint8_t x25; + uint64_t x26; + uint8_t x27; + uint64_t x28; + uint8_t x29; + uint64_t x30; + uint8_t x31; + uint8_t x32; + uint8_t x33; + uint64_t x34; + uint8_t x35; + uint64_t x36; + uint8_t x37; + uint64_t x38; + uint8_t x39; + uint64_t x40; + uint8_t x41; + uint64_t x42; + uint8_t x43; + uint64_t x44; + uint8_t x45; + uint8_t x46; + uint8_t x47; + uint64_t x48; + uint8_t x49; + uint64_t x50; + uint8_t x51; + uint8_t x52; + x1 = (arg1[3]); + x2 = (arg1[2]); + x3 = (arg1[1]); + x4 = (arg1[0]); + x5 = (uint8_t)(x4 & UINT8_C(0xff)); + x6 = (x4 >> 8); + x7 = (uint8_t)(x6 & UINT8_C(0xff)); + x8 = (x6 >> 8); + x9 = (uint8_t)(x8 & UINT8_C(0xff)); + x10 = (x8 >> 8); + x11 = (uint8_t)(x10 & UINT8_C(0xff)); + x12 = (x10 >> 8); + x13 = (uint8_t)(x12 & UINT8_C(0xff)); + x14 = (x12 >> 8); + x15 = (uint8_t)(x14 & UINT8_C(0xff)); + x16 = (x14 >> 8); + x17 = (uint8_t)(x16 & UINT8_C(0xff)); + x18 = (uint8_t)(x16 >> 8); + x19 = (uint8_t)(x3 & UINT8_C(0xff)); + x20 = (x3 >> 8); + x21 = (uint8_t)(x20 & UINT8_C(0xff)); + x22 = (x20 >> 8); + x23 = (uint8_t)(x22 & UINT8_C(0xff)); + x24 = (x22 >> 8); + x25 = (uint8_t)(x24 & UINT8_C(0xff)); + x26 = (x24 >> 8); + x27 = (uint8_t)(x26 & UINT8_C(0xff)); + x28 = (x26 >> 8); + x29 = (uint8_t)(x28 & UINT8_C(0xff)); + x30 = (x28 >> 8); + x31 = (uint8_t)(x30 & UINT8_C(0xff)); + x32 = (uint8_t)(x30 >> 8); + x33 = (uint8_t)(x2 & UINT8_C(0xff)); + x34 = (x2 >> 8); + x35 = (uint8_t)(x34 & UINT8_C(0xff)); + x36 = (x34 >> 8); + x37 = (uint8_t)(x36 & UINT8_C(0xff)); + x38 = (x36 >> 8); + x39 = (uint8_t)(x38 & UINT8_C(0xff)); + x40 = (x38 >> 8); + x41 = (uint8_t)(x40 & UINT8_C(0xff)); + x42 = (x40 >> 8); + x43 = (uint8_t)(x42 & UINT8_C(0xff)); + x44 = (x42 >> 8); + x45 = (uint8_t)(x44 & UINT8_C(0xff)); + x46 = (uint8_t)(x44 >> 8); + x47 = (uint8_t)(x1 & UINT8_C(0xff)); + x48 = (x1 >> 8); + x49 = (uint8_t)(x48 & UINT8_C(0xff)); + x50 = (x48 >> 8); + x51 = (uint8_t)(x50 & UINT8_C(0xff)); + x52 = (uint8_t)(x50 >> 8); + out1[0] = x5; + out1[1] = x7; + out1[2] = x9; + out1[3] = x11; + out1[4] = x13; + out1[5] = x15; + out1[6] = x17; + out1[7] = x18; + out1[8] = x19; + out1[9] = x21; + out1[10] = x23; + out1[11] = x25; + out1[12] = x27; + out1[13] = x29; + out1[14] = x31; + out1[15] = x32; + out1[16] = x33; + out1[17] = x35; + out1[18] = x37; + out1[19] = x39; + out1[20] = x41; + out1[21] = x43; + out1[22] = x45; + out1[23] = x46; + out1[24] = x47; + out1[25] = x49; + out1[26] = x51; + out1[27] = x52; +} + +/* + * The function fiat_np224_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np224_from_bytes(uint64_t out1[4], const uint8_t arg1[28]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint8_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint8_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint8_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint8_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint64_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + x1 = ((uint64_t)(arg1[27]) << 24); + x2 = ((uint64_t)(arg1[26]) << 16); + x3 = ((uint64_t)(arg1[25]) << 8); + x4 = (arg1[24]); + x5 = ((uint64_t)(arg1[23]) << 56); + x6 = ((uint64_t)(arg1[22]) << 48); + x7 = ((uint64_t)(arg1[21]) << 40); + x8 = ((uint64_t)(arg1[20]) << 32); + x9 = ((uint64_t)(arg1[19]) << 24); + x10 = ((uint64_t)(arg1[18]) << 16); + x11 = ((uint64_t)(arg1[17]) << 8); + x12 = (arg1[16]); + x13 = ((uint64_t)(arg1[15]) << 56); + x14 = ((uint64_t)(arg1[14]) << 48); + x15 = ((uint64_t)(arg1[13]) << 40); + x16 = ((uint64_t)(arg1[12]) << 32); + x17 = ((uint64_t)(arg1[11]) << 24); + x18 = ((uint64_t)(arg1[10]) << 16); + x19 = ((uint64_t)(arg1[9]) << 8); + x20 = (arg1[8]); + x21 = ((uint64_t)(arg1[7]) << 56); + x22 = ((uint64_t)(arg1[6]) << 48); + x23 = ((uint64_t)(arg1[5]) << 40); + x24 = ((uint64_t)(arg1[4]) << 32); + x25 = ((uint64_t)(arg1[3]) << 24); + x26 = ((uint64_t)(arg1[2]) << 16); + x27 = ((uint64_t)(arg1[1]) << 8); + x28 = (arg1[0]); + x29 = (x27 + (uint64_t)x28); + x30 = (x26 + x29); + x31 = (x25 + x30); + x32 = (x24 + x31); + x33 = (x23 + x32); + x34 = (x22 + x33); + x35 = (x21 + x34); + x36 = (x19 + (uint64_t)x20); + x37 = (x18 + x36); + x38 = (x17 + x37); + x39 = (x16 + x38); + x40 = (x15 + x39); + x41 = (x14 + x40); + x42 = (x13 + x41); + x43 = (x11 + (uint64_t)x12); + x44 = (x10 + x43); + x45 = (x9 + x44); + x46 = (x8 + x45); + x47 = (x7 + x46); + x48 = (x6 + x47); + x49 = (x5 + x48); + x50 = (x3 + (uint64_t)x4); + x51 = (x2 + x50); + x52 = (x1 + x51); + out1[0] = x35; + out1[1] = x42; + out1[2] = x49; + out1[3] = x52; +} + diff --git a/ec/native/np224_stubs.c b/ec/native/np224_stubs.c new file mode 100644 index 00000000..fe64b5b4 --- /dev/null +++ b/ec/native/np224_stubs.c @@ -0,0 +1,76 @@ +#include "mirage_crypto.h" + +#ifdef ARCH_64BIT +#include "np224_64.h" +#define LIMBS 4 +#define WORD uint64_t +#define WORDSIZE 64 +#else +#include "np224_32.h" +#define LIMBS 7 +#define WORD uint32_t +#define WORDSIZE 32 +#endif + +#define LEN_PRIME 224 +#define CURVE_DESCRIPTION fiat_np224 + +#include "inversion_template.h" + +#include + +CAMLprim value mc_np224_inv(value out, value in) +{ + CAMLparam2(out, in); + inversion(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np224_mul(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_np224_mul(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np224_add(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_np224_add(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np224_one(value out) +{ + CAMLparam1(out); + fiat_np224_set_one(Caml_ba_data_val(out)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np224_from_bytes(value out, value in) +{ + CAMLparam2(out, in); + fiat_np224_from_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np224_to_bytes(value out, value in) +{ + CAMLparam2(out, in); + fiat_np224_to_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np224_from_montgomery(value out, value in) +{ + CAMLparam2(out, in); + fiat_np224_from_montgomery(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np224_to_montgomery(value out, value in) +{ + CAMLparam2(out, in); + fiat_np224_to_montgomery(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} diff --git a/ec/native/np256_32.h b/ec/native/np256_32.h new file mode 100644 index 00000000..0a400ae4 --- /dev/null +++ b/ec/native/np256_32.h @@ -0,0 +1,4222 @@ +/* Autogenerated: '../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery' --static --use-value-barrier np256 32 0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 mul add opp from_montgomery to_montgomery one msat divstep_precomp divstep to_bytes from_bytes */ +/* curve description: np256 */ +/* machine_wordsize = 32 (from "32") */ +/* requested operations: mul, add, opp, from_montgomery, to_montgomery, one, msat, divstep_precomp, divstep, to_bytes, from_bytes */ +/* m = 0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 (from "0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 32) + (z[2] << 64) + (z[3] << 96) + (z[4] << 128) + (z[5] << 160) + (z[6] << 192) + (z[7] << 224) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ + +#include +typedef unsigned char fiat_np256_uint1; +typedef signed char fiat_np256_int1; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_NP256_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint32_t fiat_np256_value_barrier_u32(uint32_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_np256_value_barrier_u32(x) (x) +#endif + + +/* + * The function fiat_np256_addcarryx_u32 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^32 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_np256_addcarryx_u32(uint32_t* out1, fiat_np256_uint1* out2, fiat_np256_uint1 arg1, uint32_t arg2, uint32_t arg3) { + uint64_t x1; + uint32_t x2; + fiat_np256_uint1 x3; + x1 = ((arg1 + (uint64_t)arg2) + arg3); + x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + x3 = (fiat_np256_uint1)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_np256_subborrowx_u32 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^32 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_np256_subborrowx_u32(uint32_t* out1, fiat_np256_uint1* out2, fiat_np256_uint1 arg1, uint32_t arg2, uint32_t arg3) { + int64_t x1; + fiat_np256_int1 x2; + uint32_t x3; + x1 = ((arg2 - (int64_t)arg1) - arg3); + x2 = (fiat_np256_int1)(x1 >> 32); + x3 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + *out1 = x3; + *out2 = (fiat_np256_uint1)(0x0 - x2); +} + +/* + * The function fiat_np256_mulx_u32 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^32 + * out2 = ⌊arg1 * arg2 / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0xffffffff] + */ +static void fiat_np256_mulx_u32(uint32_t* out1, uint32_t* out2, uint32_t arg1, uint32_t arg2) { + uint64_t x1; + uint32_t x2; + uint32_t x3; + x1 = ((uint64_t)arg1 * arg2); + x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + x3 = (uint32_t)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_np256_cmovznz_u32 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static void fiat_np256_cmovznz_u32(uint32_t* out1, fiat_np256_uint1 arg1, uint32_t arg2, uint32_t arg3) { + fiat_np256_uint1 x1; + uint32_t x2; + uint32_t x3; + x1 = (!(!arg1)); + x2 = ((fiat_np256_int1)(0x0 - x1) & UINT32_C(0xffffffff)); + x3 = ((fiat_np256_value_barrier_u32(x2) & arg3) | (fiat_np256_value_barrier_u32((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_np256_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np256_mul(uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + fiat_np256_uint1 x26; + uint32_t x27; + fiat_np256_uint1 x28; + uint32_t x29; + fiat_np256_uint1 x30; + uint32_t x31; + fiat_np256_uint1 x32; + uint32_t x33; + fiat_np256_uint1 x34; + uint32_t x35; + fiat_np256_uint1 x36; + uint32_t x37; + fiat_np256_uint1 x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + uint32_t x52; + uint32_t x53; + uint32_t x54; + uint32_t x55; + uint32_t x56; + fiat_np256_uint1 x57; + uint32_t x58; + fiat_np256_uint1 x59; + uint32_t x60; + fiat_np256_uint1 x61; + uint32_t x62; + fiat_np256_uint1 x63; + uint32_t x64; + fiat_np256_uint1 x65; + uint32_t x66; + uint32_t x67; + fiat_np256_uint1 x68; + uint32_t x69; + fiat_np256_uint1 x70; + uint32_t x71; + fiat_np256_uint1 x72; + uint32_t x73; + fiat_np256_uint1 x74; + uint32_t x75; + fiat_np256_uint1 x76; + uint32_t x77; + fiat_np256_uint1 x78; + uint32_t x79; + fiat_np256_uint1 x80; + uint32_t x81; + fiat_np256_uint1 x82; + uint32_t x83; + fiat_np256_uint1 x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + uint32_t x88; + uint32_t x89; + uint32_t x90; + uint32_t x91; + uint32_t x92; + uint32_t x93; + uint32_t x94; + uint32_t x95; + uint32_t x96; + uint32_t x97; + uint32_t x98; + uint32_t x99; + uint32_t x100; + uint32_t x101; + fiat_np256_uint1 x102; + uint32_t x103; + fiat_np256_uint1 x104; + uint32_t x105; + fiat_np256_uint1 x106; + uint32_t x107; + fiat_np256_uint1 x108; + uint32_t x109; + fiat_np256_uint1 x110; + uint32_t x111; + fiat_np256_uint1 x112; + uint32_t x113; + fiat_np256_uint1 x114; + uint32_t x115; + uint32_t x116; + fiat_np256_uint1 x117; + uint32_t x118; + fiat_np256_uint1 x119; + uint32_t x120; + fiat_np256_uint1 x121; + uint32_t x122; + fiat_np256_uint1 x123; + uint32_t x124; + fiat_np256_uint1 x125; + uint32_t x126; + fiat_np256_uint1 x127; + uint32_t x128; + fiat_np256_uint1 x129; + uint32_t x130; + fiat_np256_uint1 x131; + uint32_t x132; + fiat_np256_uint1 x133; + uint32_t x134; + uint32_t x135; + uint32_t x136; + uint32_t x137; + uint32_t x138; + uint32_t x139; + uint32_t x140; + uint32_t x141; + uint32_t x142; + uint32_t x143; + uint32_t x144; + uint32_t x145; + uint32_t x146; + uint32_t x147; + uint32_t x148; + uint32_t x149; + uint32_t x150; + fiat_np256_uint1 x151; + uint32_t x152; + fiat_np256_uint1 x153; + uint32_t x154; + fiat_np256_uint1 x155; + uint32_t x156; + fiat_np256_uint1 x157; + uint32_t x158; + fiat_np256_uint1 x159; + uint32_t x160; + uint32_t x161; + fiat_np256_uint1 x162; + uint32_t x163; + fiat_np256_uint1 x164; + uint32_t x165; + fiat_np256_uint1 x166; + uint32_t x167; + fiat_np256_uint1 x168; + uint32_t x169; + fiat_np256_uint1 x170; + uint32_t x171; + fiat_np256_uint1 x172; + uint32_t x173; + fiat_np256_uint1 x174; + uint32_t x175; + fiat_np256_uint1 x176; + uint32_t x177; + fiat_np256_uint1 x178; + uint32_t x179; + uint32_t x180; + uint32_t x181; + uint32_t x182; + uint32_t x183; + uint32_t x184; + uint32_t x185; + uint32_t x186; + uint32_t x187; + uint32_t x188; + uint32_t x189; + uint32_t x190; + uint32_t x191; + uint32_t x192; + uint32_t x193; + uint32_t x194; + uint32_t x195; + uint32_t x196; + fiat_np256_uint1 x197; + uint32_t x198; + fiat_np256_uint1 x199; + uint32_t x200; + fiat_np256_uint1 x201; + uint32_t x202; + fiat_np256_uint1 x203; + uint32_t x204; + fiat_np256_uint1 x205; + uint32_t x206; + fiat_np256_uint1 x207; + uint32_t x208; + fiat_np256_uint1 x209; + uint32_t x210; + uint32_t x211; + fiat_np256_uint1 x212; + uint32_t x213; + fiat_np256_uint1 x214; + uint32_t x215; + fiat_np256_uint1 x216; + uint32_t x217; + fiat_np256_uint1 x218; + uint32_t x219; + fiat_np256_uint1 x220; + uint32_t x221; + fiat_np256_uint1 x222; + uint32_t x223; + fiat_np256_uint1 x224; + uint32_t x225; + fiat_np256_uint1 x226; + uint32_t x227; + fiat_np256_uint1 x228; + uint32_t x229; + uint32_t x230; + uint32_t x231; + uint32_t x232; + uint32_t x233; + uint32_t x234; + uint32_t x235; + uint32_t x236; + uint32_t x237; + uint32_t x238; + uint32_t x239; + uint32_t x240; + uint32_t x241; + uint32_t x242; + uint32_t x243; + uint32_t x244; + uint32_t x245; + fiat_np256_uint1 x246; + uint32_t x247; + fiat_np256_uint1 x248; + uint32_t x249; + fiat_np256_uint1 x250; + uint32_t x251; + fiat_np256_uint1 x252; + uint32_t x253; + fiat_np256_uint1 x254; + uint32_t x255; + uint32_t x256; + fiat_np256_uint1 x257; + uint32_t x258; + fiat_np256_uint1 x259; + uint32_t x260; + fiat_np256_uint1 x261; + uint32_t x262; + fiat_np256_uint1 x263; + uint32_t x264; + fiat_np256_uint1 x265; + uint32_t x266; + fiat_np256_uint1 x267; + uint32_t x268; + fiat_np256_uint1 x269; + uint32_t x270; + fiat_np256_uint1 x271; + uint32_t x272; + fiat_np256_uint1 x273; + uint32_t x274; + uint32_t x275; + uint32_t x276; + uint32_t x277; + uint32_t x278; + uint32_t x279; + uint32_t x280; + uint32_t x281; + uint32_t x282; + uint32_t x283; + uint32_t x284; + uint32_t x285; + uint32_t x286; + uint32_t x287; + uint32_t x288; + uint32_t x289; + uint32_t x290; + uint32_t x291; + fiat_np256_uint1 x292; + uint32_t x293; + fiat_np256_uint1 x294; + uint32_t x295; + fiat_np256_uint1 x296; + uint32_t x297; + fiat_np256_uint1 x298; + uint32_t x299; + fiat_np256_uint1 x300; + uint32_t x301; + fiat_np256_uint1 x302; + uint32_t x303; + fiat_np256_uint1 x304; + uint32_t x305; + uint32_t x306; + fiat_np256_uint1 x307; + uint32_t x308; + fiat_np256_uint1 x309; + uint32_t x310; + fiat_np256_uint1 x311; + uint32_t x312; + fiat_np256_uint1 x313; + uint32_t x314; + fiat_np256_uint1 x315; + uint32_t x316; + fiat_np256_uint1 x317; + uint32_t x318; + fiat_np256_uint1 x319; + uint32_t x320; + fiat_np256_uint1 x321; + uint32_t x322; + fiat_np256_uint1 x323; + uint32_t x324; + uint32_t x325; + uint32_t x326; + uint32_t x327; + uint32_t x328; + uint32_t x329; + uint32_t x330; + uint32_t x331; + uint32_t x332; + uint32_t x333; + uint32_t x334; + uint32_t x335; + uint32_t x336; + uint32_t x337; + uint32_t x338; + uint32_t x339; + uint32_t x340; + fiat_np256_uint1 x341; + uint32_t x342; + fiat_np256_uint1 x343; + uint32_t x344; + fiat_np256_uint1 x345; + uint32_t x346; + fiat_np256_uint1 x347; + uint32_t x348; + fiat_np256_uint1 x349; + uint32_t x350; + uint32_t x351; + fiat_np256_uint1 x352; + uint32_t x353; + fiat_np256_uint1 x354; + uint32_t x355; + fiat_np256_uint1 x356; + uint32_t x357; + fiat_np256_uint1 x358; + uint32_t x359; + fiat_np256_uint1 x360; + uint32_t x361; + fiat_np256_uint1 x362; + uint32_t x363; + fiat_np256_uint1 x364; + uint32_t x365; + fiat_np256_uint1 x366; + uint32_t x367; + fiat_np256_uint1 x368; + uint32_t x369; + uint32_t x370; + uint32_t x371; + uint32_t x372; + uint32_t x373; + uint32_t x374; + uint32_t x375; + uint32_t x376; + uint32_t x377; + uint32_t x378; + uint32_t x379; + uint32_t x380; + uint32_t x381; + uint32_t x382; + uint32_t x383; + uint32_t x384; + uint32_t x385; + uint32_t x386; + fiat_np256_uint1 x387; + uint32_t x388; + fiat_np256_uint1 x389; + uint32_t x390; + fiat_np256_uint1 x391; + uint32_t x392; + fiat_np256_uint1 x393; + uint32_t x394; + fiat_np256_uint1 x395; + uint32_t x396; + fiat_np256_uint1 x397; + uint32_t x398; + fiat_np256_uint1 x399; + uint32_t x400; + uint32_t x401; + fiat_np256_uint1 x402; + uint32_t x403; + fiat_np256_uint1 x404; + uint32_t x405; + fiat_np256_uint1 x406; + uint32_t x407; + fiat_np256_uint1 x408; + uint32_t x409; + fiat_np256_uint1 x410; + uint32_t x411; + fiat_np256_uint1 x412; + uint32_t x413; + fiat_np256_uint1 x414; + uint32_t x415; + fiat_np256_uint1 x416; + uint32_t x417; + fiat_np256_uint1 x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + uint32_t x422; + uint32_t x423; + uint32_t x424; + uint32_t x425; + uint32_t x426; + uint32_t x427; + uint32_t x428; + uint32_t x429; + uint32_t x430; + uint32_t x431; + uint32_t x432; + uint32_t x433; + uint32_t x434; + uint32_t x435; + fiat_np256_uint1 x436; + uint32_t x437; + fiat_np256_uint1 x438; + uint32_t x439; + fiat_np256_uint1 x440; + uint32_t x441; + fiat_np256_uint1 x442; + uint32_t x443; + fiat_np256_uint1 x444; + uint32_t x445; + uint32_t x446; + fiat_np256_uint1 x447; + uint32_t x448; + fiat_np256_uint1 x449; + uint32_t x450; + fiat_np256_uint1 x451; + uint32_t x452; + fiat_np256_uint1 x453; + uint32_t x454; + fiat_np256_uint1 x455; + uint32_t x456; + fiat_np256_uint1 x457; + uint32_t x458; + fiat_np256_uint1 x459; + uint32_t x460; + fiat_np256_uint1 x461; + uint32_t x462; + fiat_np256_uint1 x463; + uint32_t x464; + uint32_t x465; + uint32_t x466; + uint32_t x467; + uint32_t x468; + uint32_t x469; + uint32_t x470; + uint32_t x471; + uint32_t x472; + uint32_t x473; + uint32_t x474; + uint32_t x475; + uint32_t x476; + uint32_t x477; + uint32_t x478; + uint32_t x479; + uint32_t x480; + uint32_t x481; + fiat_np256_uint1 x482; + uint32_t x483; + fiat_np256_uint1 x484; + uint32_t x485; + fiat_np256_uint1 x486; + uint32_t x487; + fiat_np256_uint1 x488; + uint32_t x489; + fiat_np256_uint1 x490; + uint32_t x491; + fiat_np256_uint1 x492; + uint32_t x493; + fiat_np256_uint1 x494; + uint32_t x495; + uint32_t x496; + fiat_np256_uint1 x497; + uint32_t x498; + fiat_np256_uint1 x499; + uint32_t x500; + fiat_np256_uint1 x501; + uint32_t x502; + fiat_np256_uint1 x503; + uint32_t x504; + fiat_np256_uint1 x505; + uint32_t x506; + fiat_np256_uint1 x507; + uint32_t x508; + fiat_np256_uint1 x509; + uint32_t x510; + fiat_np256_uint1 x511; + uint32_t x512; + fiat_np256_uint1 x513; + uint32_t x514; + uint32_t x515; + uint32_t x516; + uint32_t x517; + uint32_t x518; + uint32_t x519; + uint32_t x520; + uint32_t x521; + uint32_t x522; + uint32_t x523; + uint32_t x524; + uint32_t x525; + uint32_t x526; + uint32_t x527; + uint32_t x528; + uint32_t x529; + uint32_t x530; + fiat_np256_uint1 x531; + uint32_t x532; + fiat_np256_uint1 x533; + uint32_t x534; + fiat_np256_uint1 x535; + uint32_t x536; + fiat_np256_uint1 x537; + uint32_t x538; + fiat_np256_uint1 x539; + uint32_t x540; + uint32_t x541; + fiat_np256_uint1 x542; + uint32_t x543; + fiat_np256_uint1 x544; + uint32_t x545; + fiat_np256_uint1 x546; + uint32_t x547; + fiat_np256_uint1 x548; + uint32_t x549; + fiat_np256_uint1 x550; + uint32_t x551; + fiat_np256_uint1 x552; + uint32_t x553; + fiat_np256_uint1 x554; + uint32_t x555; + fiat_np256_uint1 x556; + uint32_t x557; + fiat_np256_uint1 x558; + uint32_t x559; + uint32_t x560; + uint32_t x561; + uint32_t x562; + uint32_t x563; + uint32_t x564; + uint32_t x565; + uint32_t x566; + uint32_t x567; + uint32_t x568; + uint32_t x569; + uint32_t x570; + uint32_t x571; + uint32_t x572; + uint32_t x573; + uint32_t x574; + uint32_t x575; + uint32_t x576; + fiat_np256_uint1 x577; + uint32_t x578; + fiat_np256_uint1 x579; + uint32_t x580; + fiat_np256_uint1 x581; + uint32_t x582; + fiat_np256_uint1 x583; + uint32_t x584; + fiat_np256_uint1 x585; + uint32_t x586; + fiat_np256_uint1 x587; + uint32_t x588; + fiat_np256_uint1 x589; + uint32_t x590; + uint32_t x591; + fiat_np256_uint1 x592; + uint32_t x593; + fiat_np256_uint1 x594; + uint32_t x595; + fiat_np256_uint1 x596; + uint32_t x597; + fiat_np256_uint1 x598; + uint32_t x599; + fiat_np256_uint1 x600; + uint32_t x601; + fiat_np256_uint1 x602; + uint32_t x603; + fiat_np256_uint1 x604; + uint32_t x605; + fiat_np256_uint1 x606; + uint32_t x607; + fiat_np256_uint1 x608; + uint32_t x609; + uint32_t x610; + uint32_t x611; + uint32_t x612; + uint32_t x613; + uint32_t x614; + uint32_t x615; + uint32_t x616; + uint32_t x617; + uint32_t x618; + uint32_t x619; + uint32_t x620; + uint32_t x621; + uint32_t x622; + uint32_t x623; + uint32_t x624; + uint32_t x625; + fiat_np256_uint1 x626; + uint32_t x627; + fiat_np256_uint1 x628; + uint32_t x629; + fiat_np256_uint1 x630; + uint32_t x631; + fiat_np256_uint1 x632; + uint32_t x633; + fiat_np256_uint1 x634; + uint32_t x635; + uint32_t x636; + fiat_np256_uint1 x637; + uint32_t x638; + fiat_np256_uint1 x639; + uint32_t x640; + fiat_np256_uint1 x641; + uint32_t x642; + fiat_np256_uint1 x643; + uint32_t x644; + fiat_np256_uint1 x645; + uint32_t x646; + fiat_np256_uint1 x647; + uint32_t x648; + fiat_np256_uint1 x649; + uint32_t x650; + fiat_np256_uint1 x651; + uint32_t x652; + fiat_np256_uint1 x653; + uint32_t x654; + uint32_t x655; + uint32_t x656; + uint32_t x657; + uint32_t x658; + uint32_t x659; + uint32_t x660; + uint32_t x661; + uint32_t x662; + uint32_t x663; + uint32_t x664; + uint32_t x665; + uint32_t x666; + uint32_t x667; + uint32_t x668; + uint32_t x669; + uint32_t x670; + uint32_t x671; + fiat_np256_uint1 x672; + uint32_t x673; + fiat_np256_uint1 x674; + uint32_t x675; + fiat_np256_uint1 x676; + uint32_t x677; + fiat_np256_uint1 x678; + uint32_t x679; + fiat_np256_uint1 x680; + uint32_t x681; + fiat_np256_uint1 x682; + uint32_t x683; + fiat_np256_uint1 x684; + uint32_t x685; + uint32_t x686; + fiat_np256_uint1 x687; + uint32_t x688; + fiat_np256_uint1 x689; + uint32_t x690; + fiat_np256_uint1 x691; + uint32_t x692; + fiat_np256_uint1 x693; + uint32_t x694; + fiat_np256_uint1 x695; + uint32_t x696; + fiat_np256_uint1 x697; + uint32_t x698; + fiat_np256_uint1 x699; + uint32_t x700; + fiat_np256_uint1 x701; + uint32_t x702; + fiat_np256_uint1 x703; + uint32_t x704; + uint32_t x705; + uint32_t x706; + uint32_t x707; + uint32_t x708; + uint32_t x709; + uint32_t x710; + uint32_t x711; + uint32_t x712; + uint32_t x713; + uint32_t x714; + uint32_t x715; + uint32_t x716; + uint32_t x717; + uint32_t x718; + uint32_t x719; + uint32_t x720; + fiat_np256_uint1 x721; + uint32_t x722; + fiat_np256_uint1 x723; + uint32_t x724; + fiat_np256_uint1 x725; + uint32_t x726; + fiat_np256_uint1 x727; + uint32_t x728; + fiat_np256_uint1 x729; + uint32_t x730; + uint32_t x731; + fiat_np256_uint1 x732; + uint32_t x733; + fiat_np256_uint1 x734; + uint32_t x735; + fiat_np256_uint1 x736; + uint32_t x737; + fiat_np256_uint1 x738; + uint32_t x739; + fiat_np256_uint1 x740; + uint32_t x741; + fiat_np256_uint1 x742; + uint32_t x743; + fiat_np256_uint1 x744; + uint32_t x745; + fiat_np256_uint1 x746; + uint32_t x747; + fiat_np256_uint1 x748; + uint32_t x749; + uint32_t x750; + fiat_np256_uint1 x751; + uint32_t x752; + fiat_np256_uint1 x753; + uint32_t x754; + fiat_np256_uint1 x755; + uint32_t x756; + fiat_np256_uint1 x757; + uint32_t x758; + fiat_np256_uint1 x759; + uint32_t x760; + fiat_np256_uint1 x761; + uint32_t x762; + fiat_np256_uint1 x763; + uint32_t x764; + fiat_np256_uint1 x765; + uint32_t x766; + fiat_np256_uint1 x767; + uint32_t x768; + uint32_t x769; + uint32_t x770; + uint32_t x771; + uint32_t x772; + uint32_t x773; + uint32_t x774; + uint32_t x775; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[0]); + fiat_np256_mulx_u32(&x9, &x10, x8, (arg2[7])); + fiat_np256_mulx_u32(&x11, &x12, x8, (arg2[6])); + fiat_np256_mulx_u32(&x13, &x14, x8, (arg2[5])); + fiat_np256_mulx_u32(&x15, &x16, x8, (arg2[4])); + fiat_np256_mulx_u32(&x17, &x18, x8, (arg2[3])); + fiat_np256_mulx_u32(&x19, &x20, x8, (arg2[2])); + fiat_np256_mulx_u32(&x21, &x22, x8, (arg2[1])); + fiat_np256_mulx_u32(&x23, &x24, x8, (arg2[0])); + fiat_np256_addcarryx_u32(&x25, &x26, 0x0, x24, x21); + fiat_np256_addcarryx_u32(&x27, &x28, x26, x22, x19); + fiat_np256_addcarryx_u32(&x29, &x30, x28, x20, x17); + fiat_np256_addcarryx_u32(&x31, &x32, x30, x18, x15); + fiat_np256_addcarryx_u32(&x33, &x34, x32, x16, x13); + fiat_np256_addcarryx_u32(&x35, &x36, x34, x14, x11); + fiat_np256_addcarryx_u32(&x37, &x38, x36, x12, x9); + x39 = (x38 + x10); + fiat_np256_mulx_u32(&x40, &x41, x23, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x42, &x43, x40, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x44, &x45, x40, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x46, &x47, x40, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x48, &x49, x40, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x50, &x51, x40, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x52, &x53, x40, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x54, &x55, x40, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x56, &x57, 0x0, x55, x52); + fiat_np256_addcarryx_u32(&x58, &x59, x57, x53, x50); + fiat_np256_addcarryx_u32(&x60, &x61, x59, x51, x48); + fiat_np256_addcarryx_u32(&x62, &x63, x61, x49, x46); + fiat_np256_addcarryx_u32(&x64, &x65, x63, x47, x44); + x66 = (x65 + x45); + fiat_np256_addcarryx_u32(&x67, &x68, 0x0, x23, x54); + fiat_np256_addcarryx_u32(&x69, &x70, x68, x25, x56); + fiat_np256_addcarryx_u32(&x71, &x72, x70, x27, x58); + fiat_np256_addcarryx_u32(&x73, &x74, x72, x29, x60); + fiat_np256_addcarryx_u32(&x75, &x76, x74, x31, x62); + fiat_np256_addcarryx_u32(&x77, &x78, x76, x33, x64); + fiat_np256_addcarryx_u32(&x79, &x80, x78, x35, x66); + fiat_np256_addcarryx_u32(&x81, &x82, x80, x37, x42); + fiat_np256_addcarryx_u32(&x83, &x84, x82, x39, x43); + fiat_np256_mulx_u32(&x85, &x86, x1, (arg2[7])); + fiat_np256_mulx_u32(&x87, &x88, x1, (arg2[6])); + fiat_np256_mulx_u32(&x89, &x90, x1, (arg2[5])); + fiat_np256_mulx_u32(&x91, &x92, x1, (arg2[4])); + fiat_np256_mulx_u32(&x93, &x94, x1, (arg2[3])); + fiat_np256_mulx_u32(&x95, &x96, x1, (arg2[2])); + fiat_np256_mulx_u32(&x97, &x98, x1, (arg2[1])); + fiat_np256_mulx_u32(&x99, &x100, x1, (arg2[0])); + fiat_np256_addcarryx_u32(&x101, &x102, 0x0, x100, x97); + fiat_np256_addcarryx_u32(&x103, &x104, x102, x98, x95); + fiat_np256_addcarryx_u32(&x105, &x106, x104, x96, x93); + fiat_np256_addcarryx_u32(&x107, &x108, x106, x94, x91); + fiat_np256_addcarryx_u32(&x109, &x110, x108, x92, x89); + fiat_np256_addcarryx_u32(&x111, &x112, x110, x90, x87); + fiat_np256_addcarryx_u32(&x113, &x114, x112, x88, x85); + x115 = (x114 + x86); + fiat_np256_addcarryx_u32(&x116, &x117, 0x0, x69, x99); + fiat_np256_addcarryx_u32(&x118, &x119, x117, x71, x101); + fiat_np256_addcarryx_u32(&x120, &x121, x119, x73, x103); + fiat_np256_addcarryx_u32(&x122, &x123, x121, x75, x105); + fiat_np256_addcarryx_u32(&x124, &x125, x123, x77, x107); + fiat_np256_addcarryx_u32(&x126, &x127, x125, x79, x109); + fiat_np256_addcarryx_u32(&x128, &x129, x127, x81, x111); + fiat_np256_addcarryx_u32(&x130, &x131, x129, x83, x113); + fiat_np256_addcarryx_u32(&x132, &x133, x131, x84, x115); + fiat_np256_mulx_u32(&x134, &x135, x116, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x136, &x137, x134, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x138, &x139, x134, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x140, &x141, x134, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x142, &x143, x134, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x144, &x145, x134, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x146, &x147, x134, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x148, &x149, x134, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x150, &x151, 0x0, x149, x146); + fiat_np256_addcarryx_u32(&x152, &x153, x151, x147, x144); + fiat_np256_addcarryx_u32(&x154, &x155, x153, x145, x142); + fiat_np256_addcarryx_u32(&x156, &x157, x155, x143, x140); + fiat_np256_addcarryx_u32(&x158, &x159, x157, x141, x138); + x160 = (x159 + x139); + fiat_np256_addcarryx_u32(&x161, &x162, 0x0, x116, x148); + fiat_np256_addcarryx_u32(&x163, &x164, x162, x118, x150); + fiat_np256_addcarryx_u32(&x165, &x166, x164, x120, x152); + fiat_np256_addcarryx_u32(&x167, &x168, x166, x122, x154); + fiat_np256_addcarryx_u32(&x169, &x170, x168, x124, x156); + fiat_np256_addcarryx_u32(&x171, &x172, x170, x126, x158); + fiat_np256_addcarryx_u32(&x173, &x174, x172, x128, x160); + fiat_np256_addcarryx_u32(&x175, &x176, x174, x130, x136); + fiat_np256_addcarryx_u32(&x177, &x178, x176, x132, x137); + x179 = ((uint32_t)x178 + x133); + fiat_np256_mulx_u32(&x180, &x181, x2, (arg2[7])); + fiat_np256_mulx_u32(&x182, &x183, x2, (arg2[6])); + fiat_np256_mulx_u32(&x184, &x185, x2, (arg2[5])); + fiat_np256_mulx_u32(&x186, &x187, x2, (arg2[4])); + fiat_np256_mulx_u32(&x188, &x189, x2, (arg2[3])); + fiat_np256_mulx_u32(&x190, &x191, x2, (arg2[2])); + fiat_np256_mulx_u32(&x192, &x193, x2, (arg2[1])); + fiat_np256_mulx_u32(&x194, &x195, x2, (arg2[0])); + fiat_np256_addcarryx_u32(&x196, &x197, 0x0, x195, x192); + fiat_np256_addcarryx_u32(&x198, &x199, x197, x193, x190); + fiat_np256_addcarryx_u32(&x200, &x201, x199, x191, x188); + fiat_np256_addcarryx_u32(&x202, &x203, x201, x189, x186); + fiat_np256_addcarryx_u32(&x204, &x205, x203, x187, x184); + fiat_np256_addcarryx_u32(&x206, &x207, x205, x185, x182); + fiat_np256_addcarryx_u32(&x208, &x209, x207, x183, x180); + x210 = (x209 + x181); + fiat_np256_addcarryx_u32(&x211, &x212, 0x0, x163, x194); + fiat_np256_addcarryx_u32(&x213, &x214, x212, x165, x196); + fiat_np256_addcarryx_u32(&x215, &x216, x214, x167, x198); + fiat_np256_addcarryx_u32(&x217, &x218, x216, x169, x200); + fiat_np256_addcarryx_u32(&x219, &x220, x218, x171, x202); + fiat_np256_addcarryx_u32(&x221, &x222, x220, x173, x204); + fiat_np256_addcarryx_u32(&x223, &x224, x222, x175, x206); + fiat_np256_addcarryx_u32(&x225, &x226, x224, x177, x208); + fiat_np256_addcarryx_u32(&x227, &x228, x226, x179, x210); + fiat_np256_mulx_u32(&x229, &x230, x211, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x231, &x232, x229, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x233, &x234, x229, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x235, &x236, x229, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x237, &x238, x229, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x239, &x240, x229, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x241, &x242, x229, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x243, &x244, x229, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x245, &x246, 0x0, x244, x241); + fiat_np256_addcarryx_u32(&x247, &x248, x246, x242, x239); + fiat_np256_addcarryx_u32(&x249, &x250, x248, x240, x237); + fiat_np256_addcarryx_u32(&x251, &x252, x250, x238, x235); + fiat_np256_addcarryx_u32(&x253, &x254, x252, x236, x233); + x255 = (x254 + x234); + fiat_np256_addcarryx_u32(&x256, &x257, 0x0, x211, x243); + fiat_np256_addcarryx_u32(&x258, &x259, x257, x213, x245); + fiat_np256_addcarryx_u32(&x260, &x261, x259, x215, x247); + fiat_np256_addcarryx_u32(&x262, &x263, x261, x217, x249); + fiat_np256_addcarryx_u32(&x264, &x265, x263, x219, x251); + fiat_np256_addcarryx_u32(&x266, &x267, x265, x221, x253); + fiat_np256_addcarryx_u32(&x268, &x269, x267, x223, x255); + fiat_np256_addcarryx_u32(&x270, &x271, x269, x225, x231); + fiat_np256_addcarryx_u32(&x272, &x273, x271, x227, x232); + x274 = ((uint32_t)x273 + x228); + fiat_np256_mulx_u32(&x275, &x276, x3, (arg2[7])); + fiat_np256_mulx_u32(&x277, &x278, x3, (arg2[6])); + fiat_np256_mulx_u32(&x279, &x280, x3, (arg2[5])); + fiat_np256_mulx_u32(&x281, &x282, x3, (arg2[4])); + fiat_np256_mulx_u32(&x283, &x284, x3, (arg2[3])); + fiat_np256_mulx_u32(&x285, &x286, x3, (arg2[2])); + fiat_np256_mulx_u32(&x287, &x288, x3, (arg2[1])); + fiat_np256_mulx_u32(&x289, &x290, x3, (arg2[0])); + fiat_np256_addcarryx_u32(&x291, &x292, 0x0, x290, x287); + fiat_np256_addcarryx_u32(&x293, &x294, x292, x288, x285); + fiat_np256_addcarryx_u32(&x295, &x296, x294, x286, x283); + fiat_np256_addcarryx_u32(&x297, &x298, x296, x284, x281); + fiat_np256_addcarryx_u32(&x299, &x300, x298, x282, x279); + fiat_np256_addcarryx_u32(&x301, &x302, x300, x280, x277); + fiat_np256_addcarryx_u32(&x303, &x304, x302, x278, x275); + x305 = (x304 + x276); + fiat_np256_addcarryx_u32(&x306, &x307, 0x0, x258, x289); + fiat_np256_addcarryx_u32(&x308, &x309, x307, x260, x291); + fiat_np256_addcarryx_u32(&x310, &x311, x309, x262, x293); + fiat_np256_addcarryx_u32(&x312, &x313, x311, x264, x295); + fiat_np256_addcarryx_u32(&x314, &x315, x313, x266, x297); + fiat_np256_addcarryx_u32(&x316, &x317, x315, x268, x299); + fiat_np256_addcarryx_u32(&x318, &x319, x317, x270, x301); + fiat_np256_addcarryx_u32(&x320, &x321, x319, x272, x303); + fiat_np256_addcarryx_u32(&x322, &x323, x321, x274, x305); + fiat_np256_mulx_u32(&x324, &x325, x306, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x326, &x327, x324, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x328, &x329, x324, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x330, &x331, x324, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x332, &x333, x324, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x334, &x335, x324, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x336, &x337, x324, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x338, &x339, x324, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x340, &x341, 0x0, x339, x336); + fiat_np256_addcarryx_u32(&x342, &x343, x341, x337, x334); + fiat_np256_addcarryx_u32(&x344, &x345, x343, x335, x332); + fiat_np256_addcarryx_u32(&x346, &x347, x345, x333, x330); + fiat_np256_addcarryx_u32(&x348, &x349, x347, x331, x328); + x350 = (x349 + x329); + fiat_np256_addcarryx_u32(&x351, &x352, 0x0, x306, x338); + fiat_np256_addcarryx_u32(&x353, &x354, x352, x308, x340); + fiat_np256_addcarryx_u32(&x355, &x356, x354, x310, x342); + fiat_np256_addcarryx_u32(&x357, &x358, x356, x312, x344); + fiat_np256_addcarryx_u32(&x359, &x360, x358, x314, x346); + fiat_np256_addcarryx_u32(&x361, &x362, x360, x316, x348); + fiat_np256_addcarryx_u32(&x363, &x364, x362, x318, x350); + fiat_np256_addcarryx_u32(&x365, &x366, x364, x320, x326); + fiat_np256_addcarryx_u32(&x367, &x368, x366, x322, x327); + x369 = ((uint32_t)x368 + x323); + fiat_np256_mulx_u32(&x370, &x371, x4, (arg2[7])); + fiat_np256_mulx_u32(&x372, &x373, x4, (arg2[6])); + fiat_np256_mulx_u32(&x374, &x375, x4, (arg2[5])); + fiat_np256_mulx_u32(&x376, &x377, x4, (arg2[4])); + fiat_np256_mulx_u32(&x378, &x379, x4, (arg2[3])); + fiat_np256_mulx_u32(&x380, &x381, x4, (arg2[2])); + fiat_np256_mulx_u32(&x382, &x383, x4, (arg2[1])); + fiat_np256_mulx_u32(&x384, &x385, x4, (arg2[0])); + fiat_np256_addcarryx_u32(&x386, &x387, 0x0, x385, x382); + fiat_np256_addcarryx_u32(&x388, &x389, x387, x383, x380); + fiat_np256_addcarryx_u32(&x390, &x391, x389, x381, x378); + fiat_np256_addcarryx_u32(&x392, &x393, x391, x379, x376); + fiat_np256_addcarryx_u32(&x394, &x395, x393, x377, x374); + fiat_np256_addcarryx_u32(&x396, &x397, x395, x375, x372); + fiat_np256_addcarryx_u32(&x398, &x399, x397, x373, x370); + x400 = (x399 + x371); + fiat_np256_addcarryx_u32(&x401, &x402, 0x0, x353, x384); + fiat_np256_addcarryx_u32(&x403, &x404, x402, x355, x386); + fiat_np256_addcarryx_u32(&x405, &x406, x404, x357, x388); + fiat_np256_addcarryx_u32(&x407, &x408, x406, x359, x390); + fiat_np256_addcarryx_u32(&x409, &x410, x408, x361, x392); + fiat_np256_addcarryx_u32(&x411, &x412, x410, x363, x394); + fiat_np256_addcarryx_u32(&x413, &x414, x412, x365, x396); + fiat_np256_addcarryx_u32(&x415, &x416, x414, x367, x398); + fiat_np256_addcarryx_u32(&x417, &x418, x416, x369, x400); + fiat_np256_mulx_u32(&x419, &x420, x401, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x421, &x422, x419, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x423, &x424, x419, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x425, &x426, x419, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x427, &x428, x419, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x429, &x430, x419, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x431, &x432, x419, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x433, &x434, x419, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x435, &x436, 0x0, x434, x431); + fiat_np256_addcarryx_u32(&x437, &x438, x436, x432, x429); + fiat_np256_addcarryx_u32(&x439, &x440, x438, x430, x427); + fiat_np256_addcarryx_u32(&x441, &x442, x440, x428, x425); + fiat_np256_addcarryx_u32(&x443, &x444, x442, x426, x423); + x445 = (x444 + x424); + fiat_np256_addcarryx_u32(&x446, &x447, 0x0, x401, x433); + fiat_np256_addcarryx_u32(&x448, &x449, x447, x403, x435); + fiat_np256_addcarryx_u32(&x450, &x451, x449, x405, x437); + fiat_np256_addcarryx_u32(&x452, &x453, x451, x407, x439); + fiat_np256_addcarryx_u32(&x454, &x455, x453, x409, x441); + fiat_np256_addcarryx_u32(&x456, &x457, x455, x411, x443); + fiat_np256_addcarryx_u32(&x458, &x459, x457, x413, x445); + fiat_np256_addcarryx_u32(&x460, &x461, x459, x415, x421); + fiat_np256_addcarryx_u32(&x462, &x463, x461, x417, x422); + x464 = ((uint32_t)x463 + x418); + fiat_np256_mulx_u32(&x465, &x466, x5, (arg2[7])); + fiat_np256_mulx_u32(&x467, &x468, x5, (arg2[6])); + fiat_np256_mulx_u32(&x469, &x470, x5, (arg2[5])); + fiat_np256_mulx_u32(&x471, &x472, x5, (arg2[4])); + fiat_np256_mulx_u32(&x473, &x474, x5, (arg2[3])); + fiat_np256_mulx_u32(&x475, &x476, x5, (arg2[2])); + fiat_np256_mulx_u32(&x477, &x478, x5, (arg2[1])); + fiat_np256_mulx_u32(&x479, &x480, x5, (arg2[0])); + fiat_np256_addcarryx_u32(&x481, &x482, 0x0, x480, x477); + fiat_np256_addcarryx_u32(&x483, &x484, x482, x478, x475); + fiat_np256_addcarryx_u32(&x485, &x486, x484, x476, x473); + fiat_np256_addcarryx_u32(&x487, &x488, x486, x474, x471); + fiat_np256_addcarryx_u32(&x489, &x490, x488, x472, x469); + fiat_np256_addcarryx_u32(&x491, &x492, x490, x470, x467); + fiat_np256_addcarryx_u32(&x493, &x494, x492, x468, x465); + x495 = (x494 + x466); + fiat_np256_addcarryx_u32(&x496, &x497, 0x0, x448, x479); + fiat_np256_addcarryx_u32(&x498, &x499, x497, x450, x481); + fiat_np256_addcarryx_u32(&x500, &x501, x499, x452, x483); + fiat_np256_addcarryx_u32(&x502, &x503, x501, x454, x485); + fiat_np256_addcarryx_u32(&x504, &x505, x503, x456, x487); + fiat_np256_addcarryx_u32(&x506, &x507, x505, x458, x489); + fiat_np256_addcarryx_u32(&x508, &x509, x507, x460, x491); + fiat_np256_addcarryx_u32(&x510, &x511, x509, x462, x493); + fiat_np256_addcarryx_u32(&x512, &x513, x511, x464, x495); + fiat_np256_mulx_u32(&x514, &x515, x496, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x516, &x517, x514, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x518, &x519, x514, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x520, &x521, x514, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x522, &x523, x514, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x524, &x525, x514, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x526, &x527, x514, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x528, &x529, x514, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x530, &x531, 0x0, x529, x526); + fiat_np256_addcarryx_u32(&x532, &x533, x531, x527, x524); + fiat_np256_addcarryx_u32(&x534, &x535, x533, x525, x522); + fiat_np256_addcarryx_u32(&x536, &x537, x535, x523, x520); + fiat_np256_addcarryx_u32(&x538, &x539, x537, x521, x518); + x540 = (x539 + x519); + fiat_np256_addcarryx_u32(&x541, &x542, 0x0, x496, x528); + fiat_np256_addcarryx_u32(&x543, &x544, x542, x498, x530); + fiat_np256_addcarryx_u32(&x545, &x546, x544, x500, x532); + fiat_np256_addcarryx_u32(&x547, &x548, x546, x502, x534); + fiat_np256_addcarryx_u32(&x549, &x550, x548, x504, x536); + fiat_np256_addcarryx_u32(&x551, &x552, x550, x506, x538); + fiat_np256_addcarryx_u32(&x553, &x554, x552, x508, x540); + fiat_np256_addcarryx_u32(&x555, &x556, x554, x510, x516); + fiat_np256_addcarryx_u32(&x557, &x558, x556, x512, x517); + x559 = ((uint32_t)x558 + x513); + fiat_np256_mulx_u32(&x560, &x561, x6, (arg2[7])); + fiat_np256_mulx_u32(&x562, &x563, x6, (arg2[6])); + fiat_np256_mulx_u32(&x564, &x565, x6, (arg2[5])); + fiat_np256_mulx_u32(&x566, &x567, x6, (arg2[4])); + fiat_np256_mulx_u32(&x568, &x569, x6, (arg2[3])); + fiat_np256_mulx_u32(&x570, &x571, x6, (arg2[2])); + fiat_np256_mulx_u32(&x572, &x573, x6, (arg2[1])); + fiat_np256_mulx_u32(&x574, &x575, x6, (arg2[0])); + fiat_np256_addcarryx_u32(&x576, &x577, 0x0, x575, x572); + fiat_np256_addcarryx_u32(&x578, &x579, x577, x573, x570); + fiat_np256_addcarryx_u32(&x580, &x581, x579, x571, x568); + fiat_np256_addcarryx_u32(&x582, &x583, x581, x569, x566); + fiat_np256_addcarryx_u32(&x584, &x585, x583, x567, x564); + fiat_np256_addcarryx_u32(&x586, &x587, x585, x565, x562); + fiat_np256_addcarryx_u32(&x588, &x589, x587, x563, x560); + x590 = (x589 + x561); + fiat_np256_addcarryx_u32(&x591, &x592, 0x0, x543, x574); + fiat_np256_addcarryx_u32(&x593, &x594, x592, x545, x576); + fiat_np256_addcarryx_u32(&x595, &x596, x594, x547, x578); + fiat_np256_addcarryx_u32(&x597, &x598, x596, x549, x580); + fiat_np256_addcarryx_u32(&x599, &x600, x598, x551, x582); + fiat_np256_addcarryx_u32(&x601, &x602, x600, x553, x584); + fiat_np256_addcarryx_u32(&x603, &x604, x602, x555, x586); + fiat_np256_addcarryx_u32(&x605, &x606, x604, x557, x588); + fiat_np256_addcarryx_u32(&x607, &x608, x606, x559, x590); + fiat_np256_mulx_u32(&x609, &x610, x591, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x611, &x612, x609, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x613, &x614, x609, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x615, &x616, x609, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x617, &x618, x609, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x619, &x620, x609, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x621, &x622, x609, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x623, &x624, x609, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x625, &x626, 0x0, x624, x621); + fiat_np256_addcarryx_u32(&x627, &x628, x626, x622, x619); + fiat_np256_addcarryx_u32(&x629, &x630, x628, x620, x617); + fiat_np256_addcarryx_u32(&x631, &x632, x630, x618, x615); + fiat_np256_addcarryx_u32(&x633, &x634, x632, x616, x613); + x635 = (x634 + x614); + fiat_np256_addcarryx_u32(&x636, &x637, 0x0, x591, x623); + fiat_np256_addcarryx_u32(&x638, &x639, x637, x593, x625); + fiat_np256_addcarryx_u32(&x640, &x641, x639, x595, x627); + fiat_np256_addcarryx_u32(&x642, &x643, x641, x597, x629); + fiat_np256_addcarryx_u32(&x644, &x645, x643, x599, x631); + fiat_np256_addcarryx_u32(&x646, &x647, x645, x601, x633); + fiat_np256_addcarryx_u32(&x648, &x649, x647, x603, x635); + fiat_np256_addcarryx_u32(&x650, &x651, x649, x605, x611); + fiat_np256_addcarryx_u32(&x652, &x653, x651, x607, x612); + x654 = ((uint32_t)x653 + x608); + fiat_np256_mulx_u32(&x655, &x656, x7, (arg2[7])); + fiat_np256_mulx_u32(&x657, &x658, x7, (arg2[6])); + fiat_np256_mulx_u32(&x659, &x660, x7, (arg2[5])); + fiat_np256_mulx_u32(&x661, &x662, x7, (arg2[4])); + fiat_np256_mulx_u32(&x663, &x664, x7, (arg2[3])); + fiat_np256_mulx_u32(&x665, &x666, x7, (arg2[2])); + fiat_np256_mulx_u32(&x667, &x668, x7, (arg2[1])); + fiat_np256_mulx_u32(&x669, &x670, x7, (arg2[0])); + fiat_np256_addcarryx_u32(&x671, &x672, 0x0, x670, x667); + fiat_np256_addcarryx_u32(&x673, &x674, x672, x668, x665); + fiat_np256_addcarryx_u32(&x675, &x676, x674, x666, x663); + fiat_np256_addcarryx_u32(&x677, &x678, x676, x664, x661); + fiat_np256_addcarryx_u32(&x679, &x680, x678, x662, x659); + fiat_np256_addcarryx_u32(&x681, &x682, x680, x660, x657); + fiat_np256_addcarryx_u32(&x683, &x684, x682, x658, x655); + x685 = (x684 + x656); + fiat_np256_addcarryx_u32(&x686, &x687, 0x0, x638, x669); + fiat_np256_addcarryx_u32(&x688, &x689, x687, x640, x671); + fiat_np256_addcarryx_u32(&x690, &x691, x689, x642, x673); + fiat_np256_addcarryx_u32(&x692, &x693, x691, x644, x675); + fiat_np256_addcarryx_u32(&x694, &x695, x693, x646, x677); + fiat_np256_addcarryx_u32(&x696, &x697, x695, x648, x679); + fiat_np256_addcarryx_u32(&x698, &x699, x697, x650, x681); + fiat_np256_addcarryx_u32(&x700, &x701, x699, x652, x683); + fiat_np256_addcarryx_u32(&x702, &x703, x701, x654, x685); + fiat_np256_mulx_u32(&x704, &x705, x686, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x706, &x707, x704, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x708, &x709, x704, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x710, &x711, x704, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x712, &x713, x704, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x714, &x715, x704, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x716, &x717, x704, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x718, &x719, x704, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x720, &x721, 0x0, x719, x716); + fiat_np256_addcarryx_u32(&x722, &x723, x721, x717, x714); + fiat_np256_addcarryx_u32(&x724, &x725, x723, x715, x712); + fiat_np256_addcarryx_u32(&x726, &x727, x725, x713, x710); + fiat_np256_addcarryx_u32(&x728, &x729, x727, x711, x708); + x730 = (x729 + x709); + fiat_np256_addcarryx_u32(&x731, &x732, 0x0, x686, x718); + fiat_np256_addcarryx_u32(&x733, &x734, x732, x688, x720); + fiat_np256_addcarryx_u32(&x735, &x736, x734, x690, x722); + fiat_np256_addcarryx_u32(&x737, &x738, x736, x692, x724); + fiat_np256_addcarryx_u32(&x739, &x740, x738, x694, x726); + fiat_np256_addcarryx_u32(&x741, &x742, x740, x696, x728); + fiat_np256_addcarryx_u32(&x743, &x744, x742, x698, x730); + fiat_np256_addcarryx_u32(&x745, &x746, x744, x700, x706); + fiat_np256_addcarryx_u32(&x747, &x748, x746, x702, x707); + x749 = ((uint32_t)x748 + x703); + fiat_np256_subborrowx_u32(&x750, &x751, 0x0, x733, UINT32_C(0xfc632551)); + fiat_np256_subborrowx_u32(&x752, &x753, x751, x735, UINT32_C(0xf3b9cac2)); + fiat_np256_subborrowx_u32(&x754, &x755, x753, x737, UINT32_C(0xa7179e84)); + fiat_np256_subborrowx_u32(&x756, &x757, x755, x739, UINT32_C(0xbce6faad)); + fiat_np256_subborrowx_u32(&x758, &x759, x757, x741, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x760, &x761, x759, x743, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x762, &x763, x761, x745, 0x0); + fiat_np256_subborrowx_u32(&x764, &x765, x763, x747, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x766, &x767, x765, x749, 0x0); + fiat_np256_cmovznz_u32(&x768, x767, x750, x733); + fiat_np256_cmovznz_u32(&x769, x767, x752, x735); + fiat_np256_cmovznz_u32(&x770, x767, x754, x737); + fiat_np256_cmovznz_u32(&x771, x767, x756, x739); + fiat_np256_cmovznz_u32(&x772, x767, x758, x741); + fiat_np256_cmovznz_u32(&x773, x767, x760, x743); + fiat_np256_cmovznz_u32(&x774, x767, x762, x745); + fiat_np256_cmovznz_u32(&x775, x767, x764, x747); + out1[0] = x768; + out1[1] = x769; + out1[2] = x770; + out1[3] = x771; + out1[4] = x772; + out1[5] = x773; + out1[6] = x774; + out1[7] = x775; +} + +/* + * The function fiat_np256_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np256_add(uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { + uint32_t x1; + fiat_np256_uint1 x2; + uint32_t x3; + fiat_np256_uint1 x4; + uint32_t x5; + fiat_np256_uint1 x6; + uint32_t x7; + fiat_np256_uint1 x8; + uint32_t x9; + fiat_np256_uint1 x10; + uint32_t x11; + fiat_np256_uint1 x12; + uint32_t x13; + fiat_np256_uint1 x14; + uint32_t x15; + fiat_np256_uint1 x16; + uint32_t x17; + fiat_np256_uint1 x18; + uint32_t x19; + fiat_np256_uint1 x20; + uint32_t x21; + fiat_np256_uint1 x22; + uint32_t x23; + fiat_np256_uint1 x24; + uint32_t x25; + fiat_np256_uint1 x26; + uint32_t x27; + fiat_np256_uint1 x28; + uint32_t x29; + fiat_np256_uint1 x30; + uint32_t x31; + fiat_np256_uint1 x32; + uint32_t x33; + fiat_np256_uint1 x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + fiat_np256_addcarryx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_np256_addcarryx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_np256_addcarryx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_np256_addcarryx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_np256_addcarryx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_np256_addcarryx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_np256_addcarryx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); + fiat_np256_addcarryx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); + fiat_np256_subborrowx_u32(&x17, &x18, 0x0, x1, UINT32_C(0xfc632551)); + fiat_np256_subborrowx_u32(&x19, &x20, x18, x3, UINT32_C(0xf3b9cac2)); + fiat_np256_subborrowx_u32(&x21, &x22, x20, x5, UINT32_C(0xa7179e84)); + fiat_np256_subborrowx_u32(&x23, &x24, x22, x7, UINT32_C(0xbce6faad)); + fiat_np256_subborrowx_u32(&x25, &x26, x24, x9, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x27, &x28, x26, x11, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x29, &x30, x28, x13, 0x0); + fiat_np256_subborrowx_u32(&x31, &x32, x30, x15, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x33, &x34, x32, x16, 0x0); + fiat_np256_cmovznz_u32(&x35, x34, x17, x1); + fiat_np256_cmovznz_u32(&x36, x34, x19, x3); + fiat_np256_cmovznz_u32(&x37, x34, x21, x5); + fiat_np256_cmovznz_u32(&x38, x34, x23, x7); + fiat_np256_cmovznz_u32(&x39, x34, x25, x9); + fiat_np256_cmovznz_u32(&x40, x34, x27, x11); + fiat_np256_cmovznz_u32(&x41, x34, x29, x13); + fiat_np256_cmovznz_u32(&x42, x34, x31, x15); + out1[0] = x35; + out1[1] = x36; + out1[2] = x37; + out1[3] = x38; + out1[4] = x39; + out1[5] = x40; + out1[6] = x41; + out1[7] = x42; +} + +/* + * The function fiat_np256_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np256_opp(uint32_t out1[8], const uint32_t arg1[8]) { + uint32_t x1; + fiat_np256_uint1 x2; + uint32_t x3; + fiat_np256_uint1 x4; + uint32_t x5; + fiat_np256_uint1 x6; + uint32_t x7; + fiat_np256_uint1 x8; + uint32_t x9; + fiat_np256_uint1 x10; + uint32_t x11; + fiat_np256_uint1 x12; + uint32_t x13; + fiat_np256_uint1 x14; + uint32_t x15; + fiat_np256_uint1 x16; + uint32_t x17; + uint32_t x18; + fiat_np256_uint1 x19; + uint32_t x20; + fiat_np256_uint1 x21; + uint32_t x22; + fiat_np256_uint1 x23; + uint32_t x24; + fiat_np256_uint1 x25; + uint32_t x26; + fiat_np256_uint1 x27; + uint32_t x28; + fiat_np256_uint1 x29; + uint32_t x30; + fiat_np256_uint1 x31; + uint32_t x32; + fiat_np256_uint1 x33; + fiat_np256_subborrowx_u32(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_np256_subborrowx_u32(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_np256_subborrowx_u32(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_np256_subborrowx_u32(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_np256_subborrowx_u32(&x9, &x10, x8, 0x0, (arg1[4])); + fiat_np256_subborrowx_u32(&x11, &x12, x10, 0x0, (arg1[5])); + fiat_np256_subborrowx_u32(&x13, &x14, x12, 0x0, (arg1[6])); + fiat_np256_subborrowx_u32(&x15, &x16, x14, 0x0, (arg1[7])); + fiat_np256_cmovznz_u32(&x17, x16, 0x0, UINT32_C(0xffffffff)); + fiat_np256_addcarryx_u32(&x18, &x19, 0x0, x1, (x17 & UINT32_C(0xfc632551))); + fiat_np256_addcarryx_u32(&x20, &x21, x19, x3, (x17 & UINT32_C(0xf3b9cac2))); + fiat_np256_addcarryx_u32(&x22, &x23, x21, x5, (x17 & UINT32_C(0xa7179e84))); + fiat_np256_addcarryx_u32(&x24, &x25, x23, x7, (x17 & UINT32_C(0xbce6faad))); + fiat_np256_addcarryx_u32(&x26, &x27, x25, x9, x17); + fiat_np256_addcarryx_u32(&x28, &x29, x27, x11, x17); + fiat_np256_addcarryx_u32(&x30, &x31, x29, x13, 0x0); + fiat_np256_addcarryx_u32(&x32, &x33, x31, x15, x17); + out1[0] = x18; + out1[1] = x20; + out1[2] = x22; + out1[3] = x24; + out1[4] = x26; + out1[5] = x28; + out1[6] = x30; + out1[7] = x32; +} + +/* + * The function fiat_np256_from_montgomery translates a field element out of the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^32)⁻¹ mod m)^8) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np256_from_montgomery(uint32_t out1[8], const uint32_t arg1[8]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + fiat_np256_uint1 x19; + uint32_t x20; + fiat_np256_uint1 x21; + uint32_t x22; + fiat_np256_uint1 x23; + uint32_t x24; + fiat_np256_uint1 x25; + uint32_t x26; + fiat_np256_uint1 x27; + uint32_t x28; + fiat_np256_uint1 x29; + uint32_t x30; + fiat_np256_uint1 x31; + uint32_t x32; + fiat_np256_uint1 x33; + uint32_t x34; + fiat_np256_uint1 x35; + uint32_t x36; + fiat_np256_uint1 x37; + uint32_t x38; + fiat_np256_uint1 x39; + uint32_t x40; + fiat_np256_uint1 x41; + uint32_t x42; + fiat_np256_uint1 x43; + uint32_t x44; + fiat_np256_uint1 x45; + uint32_t x46; + fiat_np256_uint1 x47; + uint32_t x48; + fiat_np256_uint1 x49; + uint32_t x50; + fiat_np256_uint1 x51; + uint32_t x52; + fiat_np256_uint1 x53; + uint32_t x54; + fiat_np256_uint1 x55; + uint32_t x56; + fiat_np256_uint1 x57; + uint32_t x58; + fiat_np256_uint1 x59; + uint32_t x60; + uint32_t x61; + uint32_t x62; + uint32_t x63; + uint32_t x64; + uint32_t x65; + uint32_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + fiat_np256_uint1 x77; + uint32_t x78; + fiat_np256_uint1 x79; + uint32_t x80; + fiat_np256_uint1 x81; + uint32_t x82; + fiat_np256_uint1 x83; + uint32_t x84; + fiat_np256_uint1 x85; + uint32_t x86; + fiat_np256_uint1 x87; + uint32_t x88; + fiat_np256_uint1 x89; + uint32_t x90; + fiat_np256_uint1 x91; + uint32_t x92; + fiat_np256_uint1 x93; + uint32_t x94; + fiat_np256_uint1 x95; + uint32_t x96; + fiat_np256_uint1 x97; + uint32_t x98; + fiat_np256_uint1 x99; + uint32_t x100; + fiat_np256_uint1 x101; + uint32_t x102; + fiat_np256_uint1 x103; + uint32_t x104; + fiat_np256_uint1 x105; + uint32_t x106; + fiat_np256_uint1 x107; + uint32_t x108; + fiat_np256_uint1 x109; + uint32_t x110; + fiat_np256_uint1 x111; + uint32_t x112; + fiat_np256_uint1 x113; + uint32_t x114; + fiat_np256_uint1 x115; + uint32_t x116; + fiat_np256_uint1 x117; + uint32_t x118; + fiat_np256_uint1 x119; + uint32_t x120; + uint32_t x121; + uint32_t x122; + uint32_t x123; + uint32_t x124; + uint32_t x125; + uint32_t x126; + uint32_t x127; + uint32_t x128; + uint32_t x129; + uint32_t x130; + uint32_t x131; + uint32_t x132; + uint32_t x133; + uint32_t x134; + uint32_t x135; + uint32_t x136; + fiat_np256_uint1 x137; + uint32_t x138; + fiat_np256_uint1 x139; + uint32_t x140; + fiat_np256_uint1 x141; + uint32_t x142; + fiat_np256_uint1 x143; + uint32_t x144; + fiat_np256_uint1 x145; + uint32_t x146; + fiat_np256_uint1 x147; + uint32_t x148; + fiat_np256_uint1 x149; + uint32_t x150; + fiat_np256_uint1 x151; + uint32_t x152; + fiat_np256_uint1 x153; + uint32_t x154; + fiat_np256_uint1 x155; + uint32_t x156; + fiat_np256_uint1 x157; + uint32_t x158; + fiat_np256_uint1 x159; + uint32_t x160; + fiat_np256_uint1 x161; + uint32_t x162; + fiat_np256_uint1 x163; + uint32_t x164; + fiat_np256_uint1 x165; + uint32_t x166; + fiat_np256_uint1 x167; + uint32_t x168; + fiat_np256_uint1 x169; + uint32_t x170; + fiat_np256_uint1 x171; + uint32_t x172; + fiat_np256_uint1 x173; + uint32_t x174; + fiat_np256_uint1 x175; + uint32_t x176; + fiat_np256_uint1 x177; + uint32_t x178; + fiat_np256_uint1 x179; + uint32_t x180; + uint32_t x181; + uint32_t x182; + uint32_t x183; + uint32_t x184; + uint32_t x185; + uint32_t x186; + uint32_t x187; + uint32_t x188; + uint32_t x189; + uint32_t x190; + uint32_t x191; + uint32_t x192; + uint32_t x193; + uint32_t x194; + uint32_t x195; + uint32_t x196; + fiat_np256_uint1 x197; + uint32_t x198; + fiat_np256_uint1 x199; + uint32_t x200; + fiat_np256_uint1 x201; + uint32_t x202; + fiat_np256_uint1 x203; + uint32_t x204; + fiat_np256_uint1 x205; + uint32_t x206; + fiat_np256_uint1 x207; + uint32_t x208; + fiat_np256_uint1 x209; + uint32_t x210; + fiat_np256_uint1 x211; + uint32_t x212; + fiat_np256_uint1 x213; + uint32_t x214; + fiat_np256_uint1 x215; + uint32_t x216; + fiat_np256_uint1 x217; + uint32_t x218; + fiat_np256_uint1 x219; + uint32_t x220; + fiat_np256_uint1 x221; + uint32_t x222; + fiat_np256_uint1 x223; + uint32_t x224; + fiat_np256_uint1 x225; + uint32_t x226; + fiat_np256_uint1 x227; + uint32_t x228; + fiat_np256_uint1 x229; + uint32_t x230; + fiat_np256_uint1 x231; + uint32_t x232; + fiat_np256_uint1 x233; + uint32_t x234; + fiat_np256_uint1 x235; + uint32_t x236; + fiat_np256_uint1 x237; + uint32_t x238; + fiat_np256_uint1 x239; + uint32_t x240; + uint32_t x241; + uint32_t x242; + uint32_t x243; + uint32_t x244; + uint32_t x245; + uint32_t x246; + uint32_t x247; + uint32_t x248; + uint32_t x249; + uint32_t x250; + uint32_t x251; + uint32_t x252; + uint32_t x253; + uint32_t x254; + uint32_t x255; + uint32_t x256; + fiat_np256_uint1 x257; + uint32_t x258; + fiat_np256_uint1 x259; + uint32_t x260; + fiat_np256_uint1 x261; + uint32_t x262; + fiat_np256_uint1 x263; + uint32_t x264; + fiat_np256_uint1 x265; + uint32_t x266; + fiat_np256_uint1 x267; + uint32_t x268; + fiat_np256_uint1 x269; + uint32_t x270; + fiat_np256_uint1 x271; + uint32_t x272; + fiat_np256_uint1 x273; + uint32_t x274; + fiat_np256_uint1 x275; + uint32_t x276; + fiat_np256_uint1 x277; + uint32_t x278; + fiat_np256_uint1 x279; + uint32_t x280; + fiat_np256_uint1 x281; + uint32_t x282; + fiat_np256_uint1 x283; + uint32_t x284; + fiat_np256_uint1 x285; + uint32_t x286; + fiat_np256_uint1 x287; + uint32_t x288; + fiat_np256_uint1 x289; + uint32_t x290; + fiat_np256_uint1 x291; + uint32_t x292; + fiat_np256_uint1 x293; + uint32_t x294; + fiat_np256_uint1 x295; + uint32_t x296; + fiat_np256_uint1 x297; + uint32_t x298; + fiat_np256_uint1 x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + uint32_t x303; + uint32_t x304; + uint32_t x305; + uint32_t x306; + uint32_t x307; + uint32_t x308; + uint32_t x309; + uint32_t x310; + uint32_t x311; + uint32_t x312; + uint32_t x313; + uint32_t x314; + uint32_t x315; + uint32_t x316; + fiat_np256_uint1 x317; + uint32_t x318; + fiat_np256_uint1 x319; + uint32_t x320; + fiat_np256_uint1 x321; + uint32_t x322; + fiat_np256_uint1 x323; + uint32_t x324; + fiat_np256_uint1 x325; + uint32_t x326; + fiat_np256_uint1 x327; + uint32_t x328; + fiat_np256_uint1 x329; + uint32_t x330; + fiat_np256_uint1 x331; + uint32_t x332; + fiat_np256_uint1 x333; + uint32_t x334; + fiat_np256_uint1 x335; + uint32_t x336; + fiat_np256_uint1 x337; + uint32_t x338; + fiat_np256_uint1 x339; + uint32_t x340; + fiat_np256_uint1 x341; + uint32_t x342; + fiat_np256_uint1 x343; + uint32_t x344; + fiat_np256_uint1 x345; + uint32_t x346; + fiat_np256_uint1 x347; + uint32_t x348; + fiat_np256_uint1 x349; + uint32_t x350; + fiat_np256_uint1 x351; + uint32_t x352; + fiat_np256_uint1 x353; + uint32_t x354; + fiat_np256_uint1 x355; + uint32_t x356; + fiat_np256_uint1 x357; + uint32_t x358; + fiat_np256_uint1 x359; + uint32_t x360; + uint32_t x361; + uint32_t x362; + uint32_t x363; + uint32_t x364; + uint32_t x365; + uint32_t x366; + uint32_t x367; + uint32_t x368; + uint32_t x369; + uint32_t x370; + uint32_t x371; + uint32_t x372; + uint32_t x373; + uint32_t x374; + uint32_t x375; + uint32_t x376; + fiat_np256_uint1 x377; + uint32_t x378; + fiat_np256_uint1 x379; + uint32_t x380; + fiat_np256_uint1 x381; + uint32_t x382; + fiat_np256_uint1 x383; + uint32_t x384; + fiat_np256_uint1 x385; + uint32_t x386; + fiat_np256_uint1 x387; + uint32_t x388; + fiat_np256_uint1 x389; + uint32_t x390; + fiat_np256_uint1 x391; + uint32_t x392; + fiat_np256_uint1 x393; + uint32_t x394; + fiat_np256_uint1 x395; + uint32_t x396; + fiat_np256_uint1 x397; + uint32_t x398; + fiat_np256_uint1 x399; + uint32_t x400; + fiat_np256_uint1 x401; + uint32_t x402; + fiat_np256_uint1 x403; + uint32_t x404; + fiat_np256_uint1 x405; + uint32_t x406; + fiat_np256_uint1 x407; + uint32_t x408; + fiat_np256_uint1 x409; + uint32_t x410; + fiat_np256_uint1 x411; + uint32_t x412; + fiat_np256_uint1 x413; + uint32_t x414; + fiat_np256_uint1 x415; + uint32_t x416; + fiat_np256_uint1 x417; + uint32_t x418; + fiat_np256_uint1 x419; + uint32_t x420; + uint32_t x421; + uint32_t x422; + uint32_t x423; + uint32_t x424; + uint32_t x425; + uint32_t x426; + uint32_t x427; + uint32_t x428; + uint32_t x429; + uint32_t x430; + uint32_t x431; + uint32_t x432; + uint32_t x433; + uint32_t x434; + uint32_t x435; + uint32_t x436; + fiat_np256_uint1 x437; + uint32_t x438; + fiat_np256_uint1 x439; + uint32_t x440; + fiat_np256_uint1 x441; + uint32_t x442; + fiat_np256_uint1 x443; + uint32_t x444; + fiat_np256_uint1 x445; + uint32_t x446; + fiat_np256_uint1 x447; + uint32_t x448; + fiat_np256_uint1 x449; + uint32_t x450; + fiat_np256_uint1 x451; + uint32_t x452; + fiat_np256_uint1 x453; + uint32_t x454; + fiat_np256_uint1 x455; + uint32_t x456; + fiat_np256_uint1 x457; + uint32_t x458; + fiat_np256_uint1 x459; + uint32_t x460; + fiat_np256_uint1 x461; + uint32_t x462; + fiat_np256_uint1 x463; + uint32_t x464; + fiat_np256_uint1 x465; + uint32_t x466; + fiat_np256_uint1 x467; + uint32_t x468; + fiat_np256_uint1 x469; + uint32_t x470; + fiat_np256_uint1 x471; + uint32_t x472; + fiat_np256_uint1 x473; + uint32_t x474; + fiat_np256_uint1 x475; + uint32_t x476; + fiat_np256_uint1 x477; + uint32_t x478; + fiat_np256_uint1 x479; + uint32_t x480; + fiat_np256_uint1 x481; + uint32_t x482; + uint32_t x483; + uint32_t x484; + uint32_t x485; + uint32_t x486; + uint32_t x487; + uint32_t x488; + uint32_t x489; + x1 = (arg1[0]); + fiat_np256_mulx_u32(&x2, &x3, x1, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x4, &x5, x2, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x6, &x7, x2, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x8, &x9, x2, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x10, &x11, x2, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x12, &x13, x2, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x14, &x15, x2, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x16, &x17, x2, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x18, &x19, 0x0, x17, x14); + fiat_np256_addcarryx_u32(&x20, &x21, x19, x15, x12); + fiat_np256_addcarryx_u32(&x22, &x23, x21, x13, x10); + fiat_np256_addcarryx_u32(&x24, &x25, x23, x11, x8); + fiat_np256_addcarryx_u32(&x26, &x27, x25, x9, x6); + fiat_np256_addcarryx_u32(&x28, &x29, 0x0, x1, x16); + fiat_np256_addcarryx_u32(&x30, &x31, x29, 0x0, x18); + fiat_np256_addcarryx_u32(&x32, &x33, x31, 0x0, x20); + fiat_np256_addcarryx_u32(&x34, &x35, x33, 0x0, x22); + fiat_np256_addcarryx_u32(&x36, &x37, x35, 0x0, x24); + fiat_np256_addcarryx_u32(&x38, &x39, x37, 0x0, x26); + fiat_np256_addcarryx_u32(&x40, &x41, x39, 0x0, (x27 + x7)); + fiat_np256_addcarryx_u32(&x42, &x43, x41, 0x0, x4); + fiat_np256_addcarryx_u32(&x44, &x45, 0x0, x30, (arg1[1])); + fiat_np256_addcarryx_u32(&x46, &x47, x45, x32, 0x0); + fiat_np256_addcarryx_u32(&x48, &x49, x47, x34, 0x0); + fiat_np256_addcarryx_u32(&x50, &x51, x49, x36, 0x0); + fiat_np256_addcarryx_u32(&x52, &x53, x51, x38, 0x0); + fiat_np256_addcarryx_u32(&x54, &x55, x53, x40, 0x0); + fiat_np256_addcarryx_u32(&x56, &x57, x55, x42, 0x0); + fiat_np256_addcarryx_u32(&x58, &x59, x57, (x43 + x5), 0x0); + fiat_np256_mulx_u32(&x60, &x61, x44, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x62, &x63, x60, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x64, &x65, x60, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x66, &x67, x60, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x68, &x69, x60, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x70, &x71, x60, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x72, &x73, x60, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x74, &x75, x60, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x76, &x77, 0x0, x75, x72); + fiat_np256_addcarryx_u32(&x78, &x79, x77, x73, x70); + fiat_np256_addcarryx_u32(&x80, &x81, x79, x71, x68); + fiat_np256_addcarryx_u32(&x82, &x83, x81, x69, x66); + fiat_np256_addcarryx_u32(&x84, &x85, x83, x67, x64); + fiat_np256_addcarryx_u32(&x86, &x87, 0x0, x44, x74); + fiat_np256_addcarryx_u32(&x88, &x89, x87, x46, x76); + fiat_np256_addcarryx_u32(&x90, &x91, x89, x48, x78); + fiat_np256_addcarryx_u32(&x92, &x93, x91, x50, x80); + fiat_np256_addcarryx_u32(&x94, &x95, x93, x52, x82); + fiat_np256_addcarryx_u32(&x96, &x97, x95, x54, x84); + fiat_np256_addcarryx_u32(&x98, &x99, x97, x56, (x85 + x65)); + fiat_np256_addcarryx_u32(&x100, &x101, x99, x58, x62); + fiat_np256_addcarryx_u32(&x102, &x103, x101, x59, x63); + fiat_np256_addcarryx_u32(&x104, &x105, 0x0, x88, (arg1[2])); + fiat_np256_addcarryx_u32(&x106, &x107, x105, x90, 0x0); + fiat_np256_addcarryx_u32(&x108, &x109, x107, x92, 0x0); + fiat_np256_addcarryx_u32(&x110, &x111, x109, x94, 0x0); + fiat_np256_addcarryx_u32(&x112, &x113, x111, x96, 0x0); + fiat_np256_addcarryx_u32(&x114, &x115, x113, x98, 0x0); + fiat_np256_addcarryx_u32(&x116, &x117, x115, x100, 0x0); + fiat_np256_addcarryx_u32(&x118, &x119, x117, x102, 0x0); + fiat_np256_mulx_u32(&x120, &x121, x104, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x122, &x123, x120, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x124, &x125, x120, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x126, &x127, x120, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x128, &x129, x120, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x130, &x131, x120, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x132, &x133, x120, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x134, &x135, x120, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x136, &x137, 0x0, x135, x132); + fiat_np256_addcarryx_u32(&x138, &x139, x137, x133, x130); + fiat_np256_addcarryx_u32(&x140, &x141, x139, x131, x128); + fiat_np256_addcarryx_u32(&x142, &x143, x141, x129, x126); + fiat_np256_addcarryx_u32(&x144, &x145, x143, x127, x124); + fiat_np256_addcarryx_u32(&x146, &x147, 0x0, x104, x134); + fiat_np256_addcarryx_u32(&x148, &x149, x147, x106, x136); + fiat_np256_addcarryx_u32(&x150, &x151, x149, x108, x138); + fiat_np256_addcarryx_u32(&x152, &x153, x151, x110, x140); + fiat_np256_addcarryx_u32(&x154, &x155, x153, x112, x142); + fiat_np256_addcarryx_u32(&x156, &x157, x155, x114, x144); + fiat_np256_addcarryx_u32(&x158, &x159, x157, x116, (x145 + x125)); + fiat_np256_addcarryx_u32(&x160, &x161, x159, x118, x122); + fiat_np256_addcarryx_u32(&x162, &x163, x161, ((uint32_t)x119 + x103), x123); + fiat_np256_addcarryx_u32(&x164, &x165, 0x0, x148, (arg1[3])); + fiat_np256_addcarryx_u32(&x166, &x167, x165, x150, 0x0); + fiat_np256_addcarryx_u32(&x168, &x169, x167, x152, 0x0); + fiat_np256_addcarryx_u32(&x170, &x171, x169, x154, 0x0); + fiat_np256_addcarryx_u32(&x172, &x173, x171, x156, 0x0); + fiat_np256_addcarryx_u32(&x174, &x175, x173, x158, 0x0); + fiat_np256_addcarryx_u32(&x176, &x177, x175, x160, 0x0); + fiat_np256_addcarryx_u32(&x178, &x179, x177, x162, 0x0); + fiat_np256_mulx_u32(&x180, &x181, x164, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x182, &x183, x180, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x184, &x185, x180, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x186, &x187, x180, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x188, &x189, x180, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x190, &x191, x180, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x192, &x193, x180, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x194, &x195, x180, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x196, &x197, 0x0, x195, x192); + fiat_np256_addcarryx_u32(&x198, &x199, x197, x193, x190); + fiat_np256_addcarryx_u32(&x200, &x201, x199, x191, x188); + fiat_np256_addcarryx_u32(&x202, &x203, x201, x189, x186); + fiat_np256_addcarryx_u32(&x204, &x205, x203, x187, x184); + fiat_np256_addcarryx_u32(&x206, &x207, 0x0, x164, x194); + fiat_np256_addcarryx_u32(&x208, &x209, x207, x166, x196); + fiat_np256_addcarryx_u32(&x210, &x211, x209, x168, x198); + fiat_np256_addcarryx_u32(&x212, &x213, x211, x170, x200); + fiat_np256_addcarryx_u32(&x214, &x215, x213, x172, x202); + fiat_np256_addcarryx_u32(&x216, &x217, x215, x174, x204); + fiat_np256_addcarryx_u32(&x218, &x219, x217, x176, (x205 + x185)); + fiat_np256_addcarryx_u32(&x220, &x221, x219, x178, x182); + fiat_np256_addcarryx_u32(&x222, &x223, x221, ((uint32_t)x179 + x163), x183); + fiat_np256_addcarryx_u32(&x224, &x225, 0x0, x208, (arg1[4])); + fiat_np256_addcarryx_u32(&x226, &x227, x225, x210, 0x0); + fiat_np256_addcarryx_u32(&x228, &x229, x227, x212, 0x0); + fiat_np256_addcarryx_u32(&x230, &x231, x229, x214, 0x0); + fiat_np256_addcarryx_u32(&x232, &x233, x231, x216, 0x0); + fiat_np256_addcarryx_u32(&x234, &x235, x233, x218, 0x0); + fiat_np256_addcarryx_u32(&x236, &x237, x235, x220, 0x0); + fiat_np256_addcarryx_u32(&x238, &x239, x237, x222, 0x0); + fiat_np256_mulx_u32(&x240, &x241, x224, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x242, &x243, x240, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x244, &x245, x240, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x246, &x247, x240, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x248, &x249, x240, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x250, &x251, x240, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x252, &x253, x240, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x254, &x255, x240, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x256, &x257, 0x0, x255, x252); + fiat_np256_addcarryx_u32(&x258, &x259, x257, x253, x250); + fiat_np256_addcarryx_u32(&x260, &x261, x259, x251, x248); + fiat_np256_addcarryx_u32(&x262, &x263, x261, x249, x246); + fiat_np256_addcarryx_u32(&x264, &x265, x263, x247, x244); + fiat_np256_addcarryx_u32(&x266, &x267, 0x0, x224, x254); + fiat_np256_addcarryx_u32(&x268, &x269, x267, x226, x256); + fiat_np256_addcarryx_u32(&x270, &x271, x269, x228, x258); + fiat_np256_addcarryx_u32(&x272, &x273, x271, x230, x260); + fiat_np256_addcarryx_u32(&x274, &x275, x273, x232, x262); + fiat_np256_addcarryx_u32(&x276, &x277, x275, x234, x264); + fiat_np256_addcarryx_u32(&x278, &x279, x277, x236, (x265 + x245)); + fiat_np256_addcarryx_u32(&x280, &x281, x279, x238, x242); + fiat_np256_addcarryx_u32(&x282, &x283, x281, ((uint32_t)x239 + x223), x243); + fiat_np256_addcarryx_u32(&x284, &x285, 0x0, x268, (arg1[5])); + fiat_np256_addcarryx_u32(&x286, &x287, x285, x270, 0x0); + fiat_np256_addcarryx_u32(&x288, &x289, x287, x272, 0x0); + fiat_np256_addcarryx_u32(&x290, &x291, x289, x274, 0x0); + fiat_np256_addcarryx_u32(&x292, &x293, x291, x276, 0x0); + fiat_np256_addcarryx_u32(&x294, &x295, x293, x278, 0x0); + fiat_np256_addcarryx_u32(&x296, &x297, x295, x280, 0x0); + fiat_np256_addcarryx_u32(&x298, &x299, x297, x282, 0x0); + fiat_np256_mulx_u32(&x300, &x301, x284, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x302, &x303, x300, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x304, &x305, x300, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x306, &x307, x300, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x308, &x309, x300, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x310, &x311, x300, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x312, &x313, x300, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x314, &x315, x300, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x316, &x317, 0x0, x315, x312); + fiat_np256_addcarryx_u32(&x318, &x319, x317, x313, x310); + fiat_np256_addcarryx_u32(&x320, &x321, x319, x311, x308); + fiat_np256_addcarryx_u32(&x322, &x323, x321, x309, x306); + fiat_np256_addcarryx_u32(&x324, &x325, x323, x307, x304); + fiat_np256_addcarryx_u32(&x326, &x327, 0x0, x284, x314); + fiat_np256_addcarryx_u32(&x328, &x329, x327, x286, x316); + fiat_np256_addcarryx_u32(&x330, &x331, x329, x288, x318); + fiat_np256_addcarryx_u32(&x332, &x333, x331, x290, x320); + fiat_np256_addcarryx_u32(&x334, &x335, x333, x292, x322); + fiat_np256_addcarryx_u32(&x336, &x337, x335, x294, x324); + fiat_np256_addcarryx_u32(&x338, &x339, x337, x296, (x325 + x305)); + fiat_np256_addcarryx_u32(&x340, &x341, x339, x298, x302); + fiat_np256_addcarryx_u32(&x342, &x343, x341, ((uint32_t)x299 + x283), x303); + fiat_np256_addcarryx_u32(&x344, &x345, 0x0, x328, (arg1[6])); + fiat_np256_addcarryx_u32(&x346, &x347, x345, x330, 0x0); + fiat_np256_addcarryx_u32(&x348, &x349, x347, x332, 0x0); + fiat_np256_addcarryx_u32(&x350, &x351, x349, x334, 0x0); + fiat_np256_addcarryx_u32(&x352, &x353, x351, x336, 0x0); + fiat_np256_addcarryx_u32(&x354, &x355, x353, x338, 0x0); + fiat_np256_addcarryx_u32(&x356, &x357, x355, x340, 0x0); + fiat_np256_addcarryx_u32(&x358, &x359, x357, x342, 0x0); + fiat_np256_mulx_u32(&x360, &x361, x344, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x362, &x363, x360, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x364, &x365, x360, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x366, &x367, x360, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x368, &x369, x360, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x370, &x371, x360, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x372, &x373, x360, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x374, &x375, x360, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x376, &x377, 0x0, x375, x372); + fiat_np256_addcarryx_u32(&x378, &x379, x377, x373, x370); + fiat_np256_addcarryx_u32(&x380, &x381, x379, x371, x368); + fiat_np256_addcarryx_u32(&x382, &x383, x381, x369, x366); + fiat_np256_addcarryx_u32(&x384, &x385, x383, x367, x364); + fiat_np256_addcarryx_u32(&x386, &x387, 0x0, x344, x374); + fiat_np256_addcarryx_u32(&x388, &x389, x387, x346, x376); + fiat_np256_addcarryx_u32(&x390, &x391, x389, x348, x378); + fiat_np256_addcarryx_u32(&x392, &x393, x391, x350, x380); + fiat_np256_addcarryx_u32(&x394, &x395, x393, x352, x382); + fiat_np256_addcarryx_u32(&x396, &x397, x395, x354, x384); + fiat_np256_addcarryx_u32(&x398, &x399, x397, x356, (x385 + x365)); + fiat_np256_addcarryx_u32(&x400, &x401, x399, x358, x362); + fiat_np256_addcarryx_u32(&x402, &x403, x401, ((uint32_t)x359 + x343), x363); + fiat_np256_addcarryx_u32(&x404, &x405, 0x0, x388, (arg1[7])); + fiat_np256_addcarryx_u32(&x406, &x407, x405, x390, 0x0); + fiat_np256_addcarryx_u32(&x408, &x409, x407, x392, 0x0); + fiat_np256_addcarryx_u32(&x410, &x411, x409, x394, 0x0); + fiat_np256_addcarryx_u32(&x412, &x413, x411, x396, 0x0); + fiat_np256_addcarryx_u32(&x414, &x415, x413, x398, 0x0); + fiat_np256_addcarryx_u32(&x416, &x417, x415, x400, 0x0); + fiat_np256_addcarryx_u32(&x418, &x419, x417, x402, 0x0); + fiat_np256_mulx_u32(&x420, &x421, x404, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x422, &x423, x420, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x424, &x425, x420, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x426, &x427, x420, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x428, &x429, x420, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x430, &x431, x420, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x432, &x433, x420, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x434, &x435, x420, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x436, &x437, 0x0, x435, x432); + fiat_np256_addcarryx_u32(&x438, &x439, x437, x433, x430); + fiat_np256_addcarryx_u32(&x440, &x441, x439, x431, x428); + fiat_np256_addcarryx_u32(&x442, &x443, x441, x429, x426); + fiat_np256_addcarryx_u32(&x444, &x445, x443, x427, x424); + fiat_np256_addcarryx_u32(&x446, &x447, 0x0, x404, x434); + fiat_np256_addcarryx_u32(&x448, &x449, x447, x406, x436); + fiat_np256_addcarryx_u32(&x450, &x451, x449, x408, x438); + fiat_np256_addcarryx_u32(&x452, &x453, x451, x410, x440); + fiat_np256_addcarryx_u32(&x454, &x455, x453, x412, x442); + fiat_np256_addcarryx_u32(&x456, &x457, x455, x414, x444); + fiat_np256_addcarryx_u32(&x458, &x459, x457, x416, (x445 + x425)); + fiat_np256_addcarryx_u32(&x460, &x461, x459, x418, x422); + fiat_np256_addcarryx_u32(&x462, &x463, x461, ((uint32_t)x419 + x403), x423); + fiat_np256_subborrowx_u32(&x464, &x465, 0x0, x448, UINT32_C(0xfc632551)); + fiat_np256_subborrowx_u32(&x466, &x467, x465, x450, UINT32_C(0xf3b9cac2)); + fiat_np256_subborrowx_u32(&x468, &x469, x467, x452, UINT32_C(0xa7179e84)); + fiat_np256_subborrowx_u32(&x470, &x471, x469, x454, UINT32_C(0xbce6faad)); + fiat_np256_subborrowx_u32(&x472, &x473, x471, x456, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x474, &x475, x473, x458, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x476, &x477, x475, x460, 0x0); + fiat_np256_subborrowx_u32(&x478, &x479, x477, x462, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x480, &x481, x479, x463, 0x0); + fiat_np256_cmovznz_u32(&x482, x481, x464, x448); + fiat_np256_cmovznz_u32(&x483, x481, x466, x450); + fiat_np256_cmovznz_u32(&x484, x481, x468, x452); + fiat_np256_cmovznz_u32(&x485, x481, x470, x454); + fiat_np256_cmovznz_u32(&x486, x481, x472, x456); + fiat_np256_cmovznz_u32(&x487, x481, x474, x458); + fiat_np256_cmovznz_u32(&x488, x481, x476, x460); + fiat_np256_cmovznz_u32(&x489, x481, x478, x462); + out1[0] = x482; + out1[1] = x483; + out1[2] = x484; + out1[3] = x485; + out1[4] = x486; + out1[5] = x487; + out1[6] = x488; + out1[7] = x489; +} + +/* + * The function fiat_np256_to_montgomery translates a field element into the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np256_to_montgomery(uint32_t out1[8], const uint32_t arg1[8]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + fiat_np256_uint1 x26; + uint32_t x27; + fiat_np256_uint1 x28; + uint32_t x29; + fiat_np256_uint1 x30; + uint32_t x31; + fiat_np256_uint1 x32; + uint32_t x33; + fiat_np256_uint1 x34; + uint32_t x35; + fiat_np256_uint1 x36; + uint32_t x37; + fiat_np256_uint1 x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + uint32_t x52; + uint32_t x53; + uint32_t x54; + uint32_t x55; + fiat_np256_uint1 x56; + uint32_t x57; + fiat_np256_uint1 x58; + uint32_t x59; + fiat_np256_uint1 x60; + uint32_t x61; + fiat_np256_uint1 x62; + uint32_t x63; + fiat_np256_uint1 x64; + uint32_t x65; + fiat_np256_uint1 x66; + uint32_t x67; + fiat_np256_uint1 x68; + uint32_t x69; + fiat_np256_uint1 x70; + uint32_t x71; + fiat_np256_uint1 x72; + uint32_t x73; + fiat_np256_uint1 x74; + uint32_t x75; + fiat_np256_uint1 x76; + uint32_t x77; + fiat_np256_uint1 x78; + uint32_t x79; + fiat_np256_uint1 x80; + uint32_t x81; + fiat_np256_uint1 x82; + uint32_t x83; + uint32_t x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + uint32_t x88; + uint32_t x89; + uint32_t x90; + uint32_t x91; + uint32_t x92; + uint32_t x93; + uint32_t x94; + uint32_t x95; + uint32_t x96; + uint32_t x97; + uint32_t x98; + uint32_t x99; + fiat_np256_uint1 x100; + uint32_t x101; + fiat_np256_uint1 x102; + uint32_t x103; + fiat_np256_uint1 x104; + uint32_t x105; + fiat_np256_uint1 x106; + uint32_t x107; + fiat_np256_uint1 x108; + uint32_t x109; + fiat_np256_uint1 x110; + uint32_t x111; + fiat_np256_uint1 x112; + uint32_t x113; + fiat_np256_uint1 x114; + uint32_t x115; + fiat_np256_uint1 x116; + uint32_t x117; + fiat_np256_uint1 x118; + uint32_t x119; + fiat_np256_uint1 x120; + uint32_t x121; + fiat_np256_uint1 x122; + uint32_t x123; + fiat_np256_uint1 x124; + uint32_t x125; + fiat_np256_uint1 x126; + uint32_t x127; + fiat_np256_uint1 x128; + uint32_t x129; + uint32_t x130; + uint32_t x131; + uint32_t x132; + uint32_t x133; + uint32_t x134; + uint32_t x135; + uint32_t x136; + uint32_t x137; + uint32_t x138; + uint32_t x139; + uint32_t x140; + uint32_t x141; + uint32_t x142; + uint32_t x143; + uint32_t x144; + uint32_t x145; + fiat_np256_uint1 x146; + uint32_t x147; + fiat_np256_uint1 x148; + uint32_t x149; + fiat_np256_uint1 x150; + uint32_t x151; + fiat_np256_uint1 x152; + uint32_t x153; + fiat_np256_uint1 x154; + uint32_t x155; + fiat_np256_uint1 x156; + uint32_t x157; + fiat_np256_uint1 x158; + uint32_t x159; + fiat_np256_uint1 x160; + uint32_t x161; + fiat_np256_uint1 x162; + uint32_t x163; + fiat_np256_uint1 x164; + uint32_t x165; + fiat_np256_uint1 x166; + uint32_t x167; + fiat_np256_uint1 x168; + uint32_t x169; + fiat_np256_uint1 x170; + uint32_t x171; + fiat_np256_uint1 x172; + uint32_t x173; + uint32_t x174; + uint32_t x175; + uint32_t x176; + uint32_t x177; + uint32_t x178; + uint32_t x179; + uint32_t x180; + uint32_t x181; + uint32_t x182; + uint32_t x183; + uint32_t x184; + uint32_t x185; + uint32_t x186; + uint32_t x187; + uint32_t x188; + uint32_t x189; + fiat_np256_uint1 x190; + uint32_t x191; + fiat_np256_uint1 x192; + uint32_t x193; + fiat_np256_uint1 x194; + uint32_t x195; + fiat_np256_uint1 x196; + uint32_t x197; + fiat_np256_uint1 x198; + uint32_t x199; + fiat_np256_uint1 x200; + uint32_t x201; + fiat_np256_uint1 x202; + uint32_t x203; + fiat_np256_uint1 x204; + uint32_t x205; + fiat_np256_uint1 x206; + uint32_t x207; + fiat_np256_uint1 x208; + uint32_t x209; + fiat_np256_uint1 x210; + uint32_t x211; + fiat_np256_uint1 x212; + uint32_t x213; + fiat_np256_uint1 x214; + uint32_t x215; + fiat_np256_uint1 x216; + uint32_t x217; + fiat_np256_uint1 x218; + uint32_t x219; + uint32_t x220; + uint32_t x221; + uint32_t x222; + uint32_t x223; + uint32_t x224; + uint32_t x225; + uint32_t x226; + uint32_t x227; + uint32_t x228; + uint32_t x229; + uint32_t x230; + uint32_t x231; + uint32_t x232; + uint32_t x233; + uint32_t x234; + uint32_t x235; + fiat_np256_uint1 x236; + uint32_t x237; + fiat_np256_uint1 x238; + uint32_t x239; + fiat_np256_uint1 x240; + uint32_t x241; + fiat_np256_uint1 x242; + uint32_t x243; + fiat_np256_uint1 x244; + uint32_t x245; + fiat_np256_uint1 x246; + uint32_t x247; + fiat_np256_uint1 x248; + uint32_t x249; + fiat_np256_uint1 x250; + uint32_t x251; + fiat_np256_uint1 x252; + uint32_t x253; + fiat_np256_uint1 x254; + uint32_t x255; + fiat_np256_uint1 x256; + uint32_t x257; + fiat_np256_uint1 x258; + uint32_t x259; + fiat_np256_uint1 x260; + uint32_t x261; + fiat_np256_uint1 x262; + uint32_t x263; + uint32_t x264; + uint32_t x265; + uint32_t x266; + uint32_t x267; + uint32_t x268; + uint32_t x269; + uint32_t x270; + uint32_t x271; + uint32_t x272; + uint32_t x273; + uint32_t x274; + uint32_t x275; + uint32_t x276; + uint32_t x277; + uint32_t x278; + uint32_t x279; + fiat_np256_uint1 x280; + uint32_t x281; + fiat_np256_uint1 x282; + uint32_t x283; + fiat_np256_uint1 x284; + uint32_t x285; + fiat_np256_uint1 x286; + uint32_t x287; + fiat_np256_uint1 x288; + uint32_t x289; + fiat_np256_uint1 x290; + uint32_t x291; + fiat_np256_uint1 x292; + uint32_t x293; + fiat_np256_uint1 x294; + uint32_t x295; + fiat_np256_uint1 x296; + uint32_t x297; + fiat_np256_uint1 x298; + uint32_t x299; + fiat_np256_uint1 x300; + uint32_t x301; + fiat_np256_uint1 x302; + uint32_t x303; + fiat_np256_uint1 x304; + uint32_t x305; + fiat_np256_uint1 x306; + uint32_t x307; + fiat_np256_uint1 x308; + uint32_t x309; + uint32_t x310; + uint32_t x311; + uint32_t x312; + uint32_t x313; + uint32_t x314; + uint32_t x315; + uint32_t x316; + uint32_t x317; + uint32_t x318; + uint32_t x319; + uint32_t x320; + uint32_t x321; + uint32_t x322; + uint32_t x323; + uint32_t x324; + uint32_t x325; + fiat_np256_uint1 x326; + uint32_t x327; + fiat_np256_uint1 x328; + uint32_t x329; + fiat_np256_uint1 x330; + uint32_t x331; + fiat_np256_uint1 x332; + uint32_t x333; + fiat_np256_uint1 x334; + uint32_t x335; + fiat_np256_uint1 x336; + uint32_t x337; + fiat_np256_uint1 x338; + uint32_t x339; + fiat_np256_uint1 x340; + uint32_t x341; + fiat_np256_uint1 x342; + uint32_t x343; + fiat_np256_uint1 x344; + uint32_t x345; + fiat_np256_uint1 x346; + uint32_t x347; + fiat_np256_uint1 x348; + uint32_t x349; + fiat_np256_uint1 x350; + uint32_t x351; + fiat_np256_uint1 x352; + uint32_t x353; + uint32_t x354; + uint32_t x355; + uint32_t x356; + uint32_t x357; + uint32_t x358; + uint32_t x359; + uint32_t x360; + uint32_t x361; + uint32_t x362; + uint32_t x363; + uint32_t x364; + uint32_t x365; + uint32_t x366; + uint32_t x367; + uint32_t x368; + uint32_t x369; + fiat_np256_uint1 x370; + uint32_t x371; + fiat_np256_uint1 x372; + uint32_t x373; + fiat_np256_uint1 x374; + uint32_t x375; + fiat_np256_uint1 x376; + uint32_t x377; + fiat_np256_uint1 x378; + uint32_t x379; + fiat_np256_uint1 x380; + uint32_t x381; + fiat_np256_uint1 x382; + uint32_t x383; + fiat_np256_uint1 x384; + uint32_t x385; + fiat_np256_uint1 x386; + uint32_t x387; + fiat_np256_uint1 x388; + uint32_t x389; + fiat_np256_uint1 x390; + uint32_t x391; + fiat_np256_uint1 x392; + uint32_t x393; + fiat_np256_uint1 x394; + uint32_t x395; + fiat_np256_uint1 x396; + uint32_t x397; + fiat_np256_uint1 x398; + uint32_t x399; + uint32_t x400; + uint32_t x401; + uint32_t x402; + uint32_t x403; + uint32_t x404; + uint32_t x405; + uint32_t x406; + uint32_t x407; + uint32_t x408; + uint32_t x409; + uint32_t x410; + uint32_t x411; + uint32_t x412; + uint32_t x413; + uint32_t x414; + uint32_t x415; + fiat_np256_uint1 x416; + uint32_t x417; + fiat_np256_uint1 x418; + uint32_t x419; + fiat_np256_uint1 x420; + uint32_t x421; + fiat_np256_uint1 x422; + uint32_t x423; + fiat_np256_uint1 x424; + uint32_t x425; + fiat_np256_uint1 x426; + uint32_t x427; + fiat_np256_uint1 x428; + uint32_t x429; + fiat_np256_uint1 x430; + uint32_t x431; + fiat_np256_uint1 x432; + uint32_t x433; + fiat_np256_uint1 x434; + uint32_t x435; + fiat_np256_uint1 x436; + uint32_t x437; + fiat_np256_uint1 x438; + uint32_t x439; + fiat_np256_uint1 x440; + uint32_t x441; + fiat_np256_uint1 x442; + uint32_t x443; + uint32_t x444; + uint32_t x445; + uint32_t x446; + uint32_t x447; + uint32_t x448; + uint32_t x449; + uint32_t x450; + uint32_t x451; + uint32_t x452; + uint32_t x453; + uint32_t x454; + uint32_t x455; + uint32_t x456; + uint32_t x457; + uint32_t x458; + uint32_t x459; + fiat_np256_uint1 x460; + uint32_t x461; + fiat_np256_uint1 x462; + uint32_t x463; + fiat_np256_uint1 x464; + uint32_t x465; + fiat_np256_uint1 x466; + uint32_t x467; + fiat_np256_uint1 x468; + uint32_t x469; + fiat_np256_uint1 x470; + uint32_t x471; + fiat_np256_uint1 x472; + uint32_t x473; + fiat_np256_uint1 x474; + uint32_t x475; + fiat_np256_uint1 x476; + uint32_t x477; + fiat_np256_uint1 x478; + uint32_t x479; + fiat_np256_uint1 x480; + uint32_t x481; + fiat_np256_uint1 x482; + uint32_t x483; + fiat_np256_uint1 x484; + uint32_t x485; + fiat_np256_uint1 x486; + uint32_t x487; + fiat_np256_uint1 x488; + uint32_t x489; + uint32_t x490; + uint32_t x491; + uint32_t x492; + uint32_t x493; + uint32_t x494; + uint32_t x495; + uint32_t x496; + uint32_t x497; + uint32_t x498; + uint32_t x499; + uint32_t x500; + uint32_t x501; + uint32_t x502; + uint32_t x503; + uint32_t x504; + uint32_t x505; + fiat_np256_uint1 x506; + uint32_t x507; + fiat_np256_uint1 x508; + uint32_t x509; + fiat_np256_uint1 x510; + uint32_t x511; + fiat_np256_uint1 x512; + uint32_t x513; + fiat_np256_uint1 x514; + uint32_t x515; + fiat_np256_uint1 x516; + uint32_t x517; + fiat_np256_uint1 x518; + uint32_t x519; + fiat_np256_uint1 x520; + uint32_t x521; + fiat_np256_uint1 x522; + uint32_t x523; + fiat_np256_uint1 x524; + uint32_t x525; + fiat_np256_uint1 x526; + uint32_t x527; + fiat_np256_uint1 x528; + uint32_t x529; + fiat_np256_uint1 x530; + uint32_t x531; + fiat_np256_uint1 x532; + uint32_t x533; + uint32_t x534; + uint32_t x535; + uint32_t x536; + uint32_t x537; + uint32_t x538; + uint32_t x539; + uint32_t x540; + uint32_t x541; + uint32_t x542; + uint32_t x543; + uint32_t x544; + uint32_t x545; + uint32_t x546; + uint32_t x547; + uint32_t x548; + uint32_t x549; + fiat_np256_uint1 x550; + uint32_t x551; + fiat_np256_uint1 x552; + uint32_t x553; + fiat_np256_uint1 x554; + uint32_t x555; + fiat_np256_uint1 x556; + uint32_t x557; + fiat_np256_uint1 x558; + uint32_t x559; + fiat_np256_uint1 x560; + uint32_t x561; + fiat_np256_uint1 x562; + uint32_t x563; + fiat_np256_uint1 x564; + uint32_t x565; + fiat_np256_uint1 x566; + uint32_t x567; + fiat_np256_uint1 x568; + uint32_t x569; + fiat_np256_uint1 x570; + uint32_t x571; + fiat_np256_uint1 x572; + uint32_t x573; + fiat_np256_uint1 x574; + uint32_t x575; + fiat_np256_uint1 x576; + uint32_t x577; + fiat_np256_uint1 x578; + uint32_t x579; + uint32_t x580; + uint32_t x581; + uint32_t x582; + uint32_t x583; + uint32_t x584; + uint32_t x585; + uint32_t x586; + uint32_t x587; + uint32_t x588; + uint32_t x589; + uint32_t x590; + uint32_t x591; + uint32_t x592; + uint32_t x593; + uint32_t x594; + uint32_t x595; + fiat_np256_uint1 x596; + uint32_t x597; + fiat_np256_uint1 x598; + uint32_t x599; + fiat_np256_uint1 x600; + uint32_t x601; + fiat_np256_uint1 x602; + uint32_t x603; + fiat_np256_uint1 x604; + uint32_t x605; + fiat_np256_uint1 x606; + uint32_t x607; + fiat_np256_uint1 x608; + uint32_t x609; + fiat_np256_uint1 x610; + uint32_t x611; + fiat_np256_uint1 x612; + uint32_t x613; + fiat_np256_uint1 x614; + uint32_t x615; + fiat_np256_uint1 x616; + uint32_t x617; + fiat_np256_uint1 x618; + uint32_t x619; + fiat_np256_uint1 x620; + uint32_t x621; + fiat_np256_uint1 x622; + uint32_t x623; + uint32_t x624; + uint32_t x625; + uint32_t x626; + uint32_t x627; + uint32_t x628; + uint32_t x629; + uint32_t x630; + uint32_t x631; + uint32_t x632; + uint32_t x633; + uint32_t x634; + uint32_t x635; + uint32_t x636; + uint32_t x637; + uint32_t x638; + uint32_t x639; + fiat_np256_uint1 x640; + uint32_t x641; + fiat_np256_uint1 x642; + uint32_t x643; + fiat_np256_uint1 x644; + uint32_t x645; + fiat_np256_uint1 x646; + uint32_t x647; + fiat_np256_uint1 x648; + uint32_t x649; + fiat_np256_uint1 x650; + uint32_t x651; + fiat_np256_uint1 x652; + uint32_t x653; + fiat_np256_uint1 x654; + uint32_t x655; + fiat_np256_uint1 x656; + uint32_t x657; + fiat_np256_uint1 x658; + uint32_t x659; + fiat_np256_uint1 x660; + uint32_t x661; + fiat_np256_uint1 x662; + uint32_t x663; + fiat_np256_uint1 x664; + uint32_t x665; + fiat_np256_uint1 x666; + uint32_t x667; + fiat_np256_uint1 x668; + uint32_t x669; + uint32_t x670; + uint32_t x671; + uint32_t x672; + uint32_t x673; + uint32_t x674; + uint32_t x675; + uint32_t x676; + uint32_t x677; + uint32_t x678; + uint32_t x679; + uint32_t x680; + uint32_t x681; + uint32_t x682; + uint32_t x683; + uint32_t x684; + uint32_t x685; + fiat_np256_uint1 x686; + uint32_t x687; + fiat_np256_uint1 x688; + uint32_t x689; + fiat_np256_uint1 x690; + uint32_t x691; + fiat_np256_uint1 x692; + uint32_t x693; + fiat_np256_uint1 x694; + uint32_t x695; + fiat_np256_uint1 x696; + uint32_t x697; + fiat_np256_uint1 x698; + uint32_t x699; + fiat_np256_uint1 x700; + uint32_t x701; + fiat_np256_uint1 x702; + uint32_t x703; + fiat_np256_uint1 x704; + uint32_t x705; + fiat_np256_uint1 x706; + uint32_t x707; + fiat_np256_uint1 x708; + uint32_t x709; + fiat_np256_uint1 x710; + uint32_t x711; + fiat_np256_uint1 x712; + uint32_t x713; + fiat_np256_uint1 x714; + uint32_t x715; + fiat_np256_uint1 x716; + uint32_t x717; + fiat_np256_uint1 x718; + uint32_t x719; + fiat_np256_uint1 x720; + uint32_t x721; + fiat_np256_uint1 x722; + uint32_t x723; + fiat_np256_uint1 x724; + uint32_t x725; + fiat_np256_uint1 x726; + uint32_t x727; + fiat_np256_uint1 x728; + uint32_t x729; + fiat_np256_uint1 x730; + uint32_t x731; + uint32_t x732; + uint32_t x733; + uint32_t x734; + uint32_t x735; + uint32_t x736; + uint32_t x737; + uint32_t x738; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[0]); + fiat_np256_mulx_u32(&x9, &x10, x8, UINT32_C(0x66e12d94)); + fiat_np256_mulx_u32(&x11, &x12, x8, UINT32_C(0xf3d95620)); + fiat_np256_mulx_u32(&x13, &x14, x8, UINT32_C(0x2845b239)); + fiat_np256_mulx_u32(&x15, &x16, x8, UINT32_C(0x2b6bec59)); + fiat_np256_mulx_u32(&x17, &x18, x8, UINT32_C(0x4699799c)); + fiat_np256_mulx_u32(&x19, &x20, x8, UINT32_C(0x49bd6fa6)); + fiat_np256_mulx_u32(&x21, &x22, x8, UINT32_C(0x83244c95)); + fiat_np256_mulx_u32(&x23, &x24, x8, UINT32_C(0xbe79eea2)); + fiat_np256_addcarryx_u32(&x25, &x26, 0x0, x24, x21); + fiat_np256_addcarryx_u32(&x27, &x28, x26, x22, x19); + fiat_np256_addcarryx_u32(&x29, &x30, x28, x20, x17); + fiat_np256_addcarryx_u32(&x31, &x32, x30, x18, x15); + fiat_np256_addcarryx_u32(&x33, &x34, x32, x16, x13); + fiat_np256_addcarryx_u32(&x35, &x36, x34, x14, x11); + fiat_np256_addcarryx_u32(&x37, &x38, x36, x12, x9); + fiat_np256_mulx_u32(&x39, &x40, x23, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x41, &x42, x39, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x43, &x44, x39, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x45, &x46, x39, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x47, &x48, x39, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x49, &x50, x39, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x51, &x52, x39, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x53, &x54, x39, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x55, &x56, 0x0, x54, x51); + fiat_np256_addcarryx_u32(&x57, &x58, x56, x52, x49); + fiat_np256_addcarryx_u32(&x59, &x60, x58, x50, x47); + fiat_np256_addcarryx_u32(&x61, &x62, x60, x48, x45); + fiat_np256_addcarryx_u32(&x63, &x64, x62, x46, x43); + fiat_np256_addcarryx_u32(&x65, &x66, 0x0, x23, x53); + fiat_np256_addcarryx_u32(&x67, &x68, x66, x25, x55); + fiat_np256_addcarryx_u32(&x69, &x70, x68, x27, x57); + fiat_np256_addcarryx_u32(&x71, &x72, x70, x29, x59); + fiat_np256_addcarryx_u32(&x73, &x74, x72, x31, x61); + fiat_np256_addcarryx_u32(&x75, &x76, x74, x33, x63); + fiat_np256_addcarryx_u32(&x77, &x78, x76, x35, (x64 + x44)); + fiat_np256_addcarryx_u32(&x79, &x80, x78, x37, x41); + fiat_np256_addcarryx_u32(&x81, &x82, x80, (x38 + x10), x42); + fiat_np256_mulx_u32(&x83, &x84, x1, UINT32_C(0x66e12d94)); + fiat_np256_mulx_u32(&x85, &x86, x1, UINT32_C(0xf3d95620)); + fiat_np256_mulx_u32(&x87, &x88, x1, UINT32_C(0x2845b239)); + fiat_np256_mulx_u32(&x89, &x90, x1, UINT32_C(0x2b6bec59)); + fiat_np256_mulx_u32(&x91, &x92, x1, UINT32_C(0x4699799c)); + fiat_np256_mulx_u32(&x93, &x94, x1, UINT32_C(0x49bd6fa6)); + fiat_np256_mulx_u32(&x95, &x96, x1, UINT32_C(0x83244c95)); + fiat_np256_mulx_u32(&x97, &x98, x1, UINT32_C(0xbe79eea2)); + fiat_np256_addcarryx_u32(&x99, &x100, 0x0, x98, x95); + fiat_np256_addcarryx_u32(&x101, &x102, x100, x96, x93); + fiat_np256_addcarryx_u32(&x103, &x104, x102, x94, x91); + fiat_np256_addcarryx_u32(&x105, &x106, x104, x92, x89); + fiat_np256_addcarryx_u32(&x107, &x108, x106, x90, x87); + fiat_np256_addcarryx_u32(&x109, &x110, x108, x88, x85); + fiat_np256_addcarryx_u32(&x111, &x112, x110, x86, x83); + fiat_np256_addcarryx_u32(&x113, &x114, 0x0, x67, x97); + fiat_np256_addcarryx_u32(&x115, &x116, x114, x69, x99); + fiat_np256_addcarryx_u32(&x117, &x118, x116, x71, x101); + fiat_np256_addcarryx_u32(&x119, &x120, x118, x73, x103); + fiat_np256_addcarryx_u32(&x121, &x122, x120, x75, x105); + fiat_np256_addcarryx_u32(&x123, &x124, x122, x77, x107); + fiat_np256_addcarryx_u32(&x125, &x126, x124, x79, x109); + fiat_np256_addcarryx_u32(&x127, &x128, x126, x81, x111); + fiat_np256_mulx_u32(&x129, &x130, x113, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x131, &x132, x129, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x133, &x134, x129, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x135, &x136, x129, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x137, &x138, x129, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x139, &x140, x129, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x141, &x142, x129, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x143, &x144, x129, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x145, &x146, 0x0, x144, x141); + fiat_np256_addcarryx_u32(&x147, &x148, x146, x142, x139); + fiat_np256_addcarryx_u32(&x149, &x150, x148, x140, x137); + fiat_np256_addcarryx_u32(&x151, &x152, x150, x138, x135); + fiat_np256_addcarryx_u32(&x153, &x154, x152, x136, x133); + fiat_np256_addcarryx_u32(&x155, &x156, 0x0, x113, x143); + fiat_np256_addcarryx_u32(&x157, &x158, x156, x115, x145); + fiat_np256_addcarryx_u32(&x159, &x160, x158, x117, x147); + fiat_np256_addcarryx_u32(&x161, &x162, x160, x119, x149); + fiat_np256_addcarryx_u32(&x163, &x164, x162, x121, x151); + fiat_np256_addcarryx_u32(&x165, &x166, x164, x123, x153); + fiat_np256_addcarryx_u32(&x167, &x168, x166, x125, (x154 + x134)); + fiat_np256_addcarryx_u32(&x169, &x170, x168, x127, x131); + fiat_np256_addcarryx_u32(&x171, &x172, x170, (((uint32_t)x128 + x82) + (x112 + x84)), x132); + fiat_np256_mulx_u32(&x173, &x174, x2, UINT32_C(0x66e12d94)); + fiat_np256_mulx_u32(&x175, &x176, x2, UINT32_C(0xf3d95620)); + fiat_np256_mulx_u32(&x177, &x178, x2, UINT32_C(0x2845b239)); + fiat_np256_mulx_u32(&x179, &x180, x2, UINT32_C(0x2b6bec59)); + fiat_np256_mulx_u32(&x181, &x182, x2, UINT32_C(0x4699799c)); + fiat_np256_mulx_u32(&x183, &x184, x2, UINT32_C(0x49bd6fa6)); + fiat_np256_mulx_u32(&x185, &x186, x2, UINT32_C(0x83244c95)); + fiat_np256_mulx_u32(&x187, &x188, x2, UINT32_C(0xbe79eea2)); + fiat_np256_addcarryx_u32(&x189, &x190, 0x0, x188, x185); + fiat_np256_addcarryx_u32(&x191, &x192, x190, x186, x183); + fiat_np256_addcarryx_u32(&x193, &x194, x192, x184, x181); + fiat_np256_addcarryx_u32(&x195, &x196, x194, x182, x179); + fiat_np256_addcarryx_u32(&x197, &x198, x196, x180, x177); + fiat_np256_addcarryx_u32(&x199, &x200, x198, x178, x175); + fiat_np256_addcarryx_u32(&x201, &x202, x200, x176, x173); + fiat_np256_addcarryx_u32(&x203, &x204, 0x0, x157, x187); + fiat_np256_addcarryx_u32(&x205, &x206, x204, x159, x189); + fiat_np256_addcarryx_u32(&x207, &x208, x206, x161, x191); + fiat_np256_addcarryx_u32(&x209, &x210, x208, x163, x193); + fiat_np256_addcarryx_u32(&x211, &x212, x210, x165, x195); + fiat_np256_addcarryx_u32(&x213, &x214, x212, x167, x197); + fiat_np256_addcarryx_u32(&x215, &x216, x214, x169, x199); + fiat_np256_addcarryx_u32(&x217, &x218, x216, x171, x201); + fiat_np256_mulx_u32(&x219, &x220, x203, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x221, &x222, x219, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x223, &x224, x219, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x225, &x226, x219, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x227, &x228, x219, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x229, &x230, x219, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x231, &x232, x219, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x233, &x234, x219, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x235, &x236, 0x0, x234, x231); + fiat_np256_addcarryx_u32(&x237, &x238, x236, x232, x229); + fiat_np256_addcarryx_u32(&x239, &x240, x238, x230, x227); + fiat_np256_addcarryx_u32(&x241, &x242, x240, x228, x225); + fiat_np256_addcarryx_u32(&x243, &x244, x242, x226, x223); + fiat_np256_addcarryx_u32(&x245, &x246, 0x0, x203, x233); + fiat_np256_addcarryx_u32(&x247, &x248, x246, x205, x235); + fiat_np256_addcarryx_u32(&x249, &x250, x248, x207, x237); + fiat_np256_addcarryx_u32(&x251, &x252, x250, x209, x239); + fiat_np256_addcarryx_u32(&x253, &x254, x252, x211, x241); + fiat_np256_addcarryx_u32(&x255, &x256, x254, x213, x243); + fiat_np256_addcarryx_u32(&x257, &x258, x256, x215, (x244 + x224)); + fiat_np256_addcarryx_u32(&x259, &x260, x258, x217, x221); + fiat_np256_addcarryx_u32(&x261, &x262, x260, (((uint32_t)x218 + x172) + (x202 + x174)), x222); + fiat_np256_mulx_u32(&x263, &x264, x3, UINT32_C(0x66e12d94)); + fiat_np256_mulx_u32(&x265, &x266, x3, UINT32_C(0xf3d95620)); + fiat_np256_mulx_u32(&x267, &x268, x3, UINT32_C(0x2845b239)); + fiat_np256_mulx_u32(&x269, &x270, x3, UINT32_C(0x2b6bec59)); + fiat_np256_mulx_u32(&x271, &x272, x3, UINT32_C(0x4699799c)); + fiat_np256_mulx_u32(&x273, &x274, x3, UINT32_C(0x49bd6fa6)); + fiat_np256_mulx_u32(&x275, &x276, x3, UINT32_C(0x83244c95)); + fiat_np256_mulx_u32(&x277, &x278, x3, UINT32_C(0xbe79eea2)); + fiat_np256_addcarryx_u32(&x279, &x280, 0x0, x278, x275); + fiat_np256_addcarryx_u32(&x281, &x282, x280, x276, x273); + fiat_np256_addcarryx_u32(&x283, &x284, x282, x274, x271); + fiat_np256_addcarryx_u32(&x285, &x286, x284, x272, x269); + fiat_np256_addcarryx_u32(&x287, &x288, x286, x270, x267); + fiat_np256_addcarryx_u32(&x289, &x290, x288, x268, x265); + fiat_np256_addcarryx_u32(&x291, &x292, x290, x266, x263); + fiat_np256_addcarryx_u32(&x293, &x294, 0x0, x247, x277); + fiat_np256_addcarryx_u32(&x295, &x296, x294, x249, x279); + fiat_np256_addcarryx_u32(&x297, &x298, x296, x251, x281); + fiat_np256_addcarryx_u32(&x299, &x300, x298, x253, x283); + fiat_np256_addcarryx_u32(&x301, &x302, x300, x255, x285); + fiat_np256_addcarryx_u32(&x303, &x304, x302, x257, x287); + fiat_np256_addcarryx_u32(&x305, &x306, x304, x259, x289); + fiat_np256_addcarryx_u32(&x307, &x308, x306, x261, x291); + fiat_np256_mulx_u32(&x309, &x310, x293, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x311, &x312, x309, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x313, &x314, x309, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x315, &x316, x309, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x317, &x318, x309, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x319, &x320, x309, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x321, &x322, x309, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x323, &x324, x309, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x325, &x326, 0x0, x324, x321); + fiat_np256_addcarryx_u32(&x327, &x328, x326, x322, x319); + fiat_np256_addcarryx_u32(&x329, &x330, x328, x320, x317); + fiat_np256_addcarryx_u32(&x331, &x332, x330, x318, x315); + fiat_np256_addcarryx_u32(&x333, &x334, x332, x316, x313); + fiat_np256_addcarryx_u32(&x335, &x336, 0x0, x293, x323); + fiat_np256_addcarryx_u32(&x337, &x338, x336, x295, x325); + fiat_np256_addcarryx_u32(&x339, &x340, x338, x297, x327); + fiat_np256_addcarryx_u32(&x341, &x342, x340, x299, x329); + fiat_np256_addcarryx_u32(&x343, &x344, x342, x301, x331); + fiat_np256_addcarryx_u32(&x345, &x346, x344, x303, x333); + fiat_np256_addcarryx_u32(&x347, &x348, x346, x305, (x334 + x314)); + fiat_np256_addcarryx_u32(&x349, &x350, x348, x307, x311); + fiat_np256_addcarryx_u32(&x351, &x352, x350, (((uint32_t)x308 + x262) + (x292 + x264)), x312); + fiat_np256_mulx_u32(&x353, &x354, x4, UINT32_C(0x66e12d94)); + fiat_np256_mulx_u32(&x355, &x356, x4, UINT32_C(0xf3d95620)); + fiat_np256_mulx_u32(&x357, &x358, x4, UINT32_C(0x2845b239)); + fiat_np256_mulx_u32(&x359, &x360, x4, UINT32_C(0x2b6bec59)); + fiat_np256_mulx_u32(&x361, &x362, x4, UINT32_C(0x4699799c)); + fiat_np256_mulx_u32(&x363, &x364, x4, UINT32_C(0x49bd6fa6)); + fiat_np256_mulx_u32(&x365, &x366, x4, UINT32_C(0x83244c95)); + fiat_np256_mulx_u32(&x367, &x368, x4, UINT32_C(0xbe79eea2)); + fiat_np256_addcarryx_u32(&x369, &x370, 0x0, x368, x365); + fiat_np256_addcarryx_u32(&x371, &x372, x370, x366, x363); + fiat_np256_addcarryx_u32(&x373, &x374, x372, x364, x361); + fiat_np256_addcarryx_u32(&x375, &x376, x374, x362, x359); + fiat_np256_addcarryx_u32(&x377, &x378, x376, x360, x357); + fiat_np256_addcarryx_u32(&x379, &x380, x378, x358, x355); + fiat_np256_addcarryx_u32(&x381, &x382, x380, x356, x353); + fiat_np256_addcarryx_u32(&x383, &x384, 0x0, x337, x367); + fiat_np256_addcarryx_u32(&x385, &x386, x384, x339, x369); + fiat_np256_addcarryx_u32(&x387, &x388, x386, x341, x371); + fiat_np256_addcarryx_u32(&x389, &x390, x388, x343, x373); + fiat_np256_addcarryx_u32(&x391, &x392, x390, x345, x375); + fiat_np256_addcarryx_u32(&x393, &x394, x392, x347, x377); + fiat_np256_addcarryx_u32(&x395, &x396, x394, x349, x379); + fiat_np256_addcarryx_u32(&x397, &x398, x396, x351, x381); + fiat_np256_mulx_u32(&x399, &x400, x383, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x401, &x402, x399, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x403, &x404, x399, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x405, &x406, x399, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x407, &x408, x399, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x409, &x410, x399, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x411, &x412, x399, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x413, &x414, x399, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x415, &x416, 0x0, x414, x411); + fiat_np256_addcarryx_u32(&x417, &x418, x416, x412, x409); + fiat_np256_addcarryx_u32(&x419, &x420, x418, x410, x407); + fiat_np256_addcarryx_u32(&x421, &x422, x420, x408, x405); + fiat_np256_addcarryx_u32(&x423, &x424, x422, x406, x403); + fiat_np256_addcarryx_u32(&x425, &x426, 0x0, x383, x413); + fiat_np256_addcarryx_u32(&x427, &x428, x426, x385, x415); + fiat_np256_addcarryx_u32(&x429, &x430, x428, x387, x417); + fiat_np256_addcarryx_u32(&x431, &x432, x430, x389, x419); + fiat_np256_addcarryx_u32(&x433, &x434, x432, x391, x421); + fiat_np256_addcarryx_u32(&x435, &x436, x434, x393, x423); + fiat_np256_addcarryx_u32(&x437, &x438, x436, x395, (x424 + x404)); + fiat_np256_addcarryx_u32(&x439, &x440, x438, x397, x401); + fiat_np256_addcarryx_u32(&x441, &x442, x440, (((uint32_t)x398 + x352) + (x382 + x354)), x402); + fiat_np256_mulx_u32(&x443, &x444, x5, UINT32_C(0x66e12d94)); + fiat_np256_mulx_u32(&x445, &x446, x5, UINT32_C(0xf3d95620)); + fiat_np256_mulx_u32(&x447, &x448, x5, UINT32_C(0x2845b239)); + fiat_np256_mulx_u32(&x449, &x450, x5, UINT32_C(0x2b6bec59)); + fiat_np256_mulx_u32(&x451, &x452, x5, UINT32_C(0x4699799c)); + fiat_np256_mulx_u32(&x453, &x454, x5, UINT32_C(0x49bd6fa6)); + fiat_np256_mulx_u32(&x455, &x456, x5, UINT32_C(0x83244c95)); + fiat_np256_mulx_u32(&x457, &x458, x5, UINT32_C(0xbe79eea2)); + fiat_np256_addcarryx_u32(&x459, &x460, 0x0, x458, x455); + fiat_np256_addcarryx_u32(&x461, &x462, x460, x456, x453); + fiat_np256_addcarryx_u32(&x463, &x464, x462, x454, x451); + fiat_np256_addcarryx_u32(&x465, &x466, x464, x452, x449); + fiat_np256_addcarryx_u32(&x467, &x468, x466, x450, x447); + fiat_np256_addcarryx_u32(&x469, &x470, x468, x448, x445); + fiat_np256_addcarryx_u32(&x471, &x472, x470, x446, x443); + fiat_np256_addcarryx_u32(&x473, &x474, 0x0, x427, x457); + fiat_np256_addcarryx_u32(&x475, &x476, x474, x429, x459); + fiat_np256_addcarryx_u32(&x477, &x478, x476, x431, x461); + fiat_np256_addcarryx_u32(&x479, &x480, x478, x433, x463); + fiat_np256_addcarryx_u32(&x481, &x482, x480, x435, x465); + fiat_np256_addcarryx_u32(&x483, &x484, x482, x437, x467); + fiat_np256_addcarryx_u32(&x485, &x486, x484, x439, x469); + fiat_np256_addcarryx_u32(&x487, &x488, x486, x441, x471); + fiat_np256_mulx_u32(&x489, &x490, x473, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x491, &x492, x489, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x493, &x494, x489, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x495, &x496, x489, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x497, &x498, x489, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x499, &x500, x489, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x501, &x502, x489, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x503, &x504, x489, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x505, &x506, 0x0, x504, x501); + fiat_np256_addcarryx_u32(&x507, &x508, x506, x502, x499); + fiat_np256_addcarryx_u32(&x509, &x510, x508, x500, x497); + fiat_np256_addcarryx_u32(&x511, &x512, x510, x498, x495); + fiat_np256_addcarryx_u32(&x513, &x514, x512, x496, x493); + fiat_np256_addcarryx_u32(&x515, &x516, 0x0, x473, x503); + fiat_np256_addcarryx_u32(&x517, &x518, x516, x475, x505); + fiat_np256_addcarryx_u32(&x519, &x520, x518, x477, x507); + fiat_np256_addcarryx_u32(&x521, &x522, x520, x479, x509); + fiat_np256_addcarryx_u32(&x523, &x524, x522, x481, x511); + fiat_np256_addcarryx_u32(&x525, &x526, x524, x483, x513); + fiat_np256_addcarryx_u32(&x527, &x528, x526, x485, (x514 + x494)); + fiat_np256_addcarryx_u32(&x529, &x530, x528, x487, x491); + fiat_np256_addcarryx_u32(&x531, &x532, x530, (((uint32_t)x488 + x442) + (x472 + x444)), x492); + fiat_np256_mulx_u32(&x533, &x534, x6, UINT32_C(0x66e12d94)); + fiat_np256_mulx_u32(&x535, &x536, x6, UINT32_C(0xf3d95620)); + fiat_np256_mulx_u32(&x537, &x538, x6, UINT32_C(0x2845b239)); + fiat_np256_mulx_u32(&x539, &x540, x6, UINT32_C(0x2b6bec59)); + fiat_np256_mulx_u32(&x541, &x542, x6, UINT32_C(0x4699799c)); + fiat_np256_mulx_u32(&x543, &x544, x6, UINT32_C(0x49bd6fa6)); + fiat_np256_mulx_u32(&x545, &x546, x6, UINT32_C(0x83244c95)); + fiat_np256_mulx_u32(&x547, &x548, x6, UINT32_C(0xbe79eea2)); + fiat_np256_addcarryx_u32(&x549, &x550, 0x0, x548, x545); + fiat_np256_addcarryx_u32(&x551, &x552, x550, x546, x543); + fiat_np256_addcarryx_u32(&x553, &x554, x552, x544, x541); + fiat_np256_addcarryx_u32(&x555, &x556, x554, x542, x539); + fiat_np256_addcarryx_u32(&x557, &x558, x556, x540, x537); + fiat_np256_addcarryx_u32(&x559, &x560, x558, x538, x535); + fiat_np256_addcarryx_u32(&x561, &x562, x560, x536, x533); + fiat_np256_addcarryx_u32(&x563, &x564, 0x0, x517, x547); + fiat_np256_addcarryx_u32(&x565, &x566, x564, x519, x549); + fiat_np256_addcarryx_u32(&x567, &x568, x566, x521, x551); + fiat_np256_addcarryx_u32(&x569, &x570, x568, x523, x553); + fiat_np256_addcarryx_u32(&x571, &x572, x570, x525, x555); + fiat_np256_addcarryx_u32(&x573, &x574, x572, x527, x557); + fiat_np256_addcarryx_u32(&x575, &x576, x574, x529, x559); + fiat_np256_addcarryx_u32(&x577, &x578, x576, x531, x561); + fiat_np256_mulx_u32(&x579, &x580, x563, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x581, &x582, x579, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x583, &x584, x579, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x585, &x586, x579, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x587, &x588, x579, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x589, &x590, x579, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x591, &x592, x579, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x593, &x594, x579, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x595, &x596, 0x0, x594, x591); + fiat_np256_addcarryx_u32(&x597, &x598, x596, x592, x589); + fiat_np256_addcarryx_u32(&x599, &x600, x598, x590, x587); + fiat_np256_addcarryx_u32(&x601, &x602, x600, x588, x585); + fiat_np256_addcarryx_u32(&x603, &x604, x602, x586, x583); + fiat_np256_addcarryx_u32(&x605, &x606, 0x0, x563, x593); + fiat_np256_addcarryx_u32(&x607, &x608, x606, x565, x595); + fiat_np256_addcarryx_u32(&x609, &x610, x608, x567, x597); + fiat_np256_addcarryx_u32(&x611, &x612, x610, x569, x599); + fiat_np256_addcarryx_u32(&x613, &x614, x612, x571, x601); + fiat_np256_addcarryx_u32(&x615, &x616, x614, x573, x603); + fiat_np256_addcarryx_u32(&x617, &x618, x616, x575, (x604 + x584)); + fiat_np256_addcarryx_u32(&x619, &x620, x618, x577, x581); + fiat_np256_addcarryx_u32(&x621, &x622, x620, (((uint32_t)x578 + x532) + (x562 + x534)), x582); + fiat_np256_mulx_u32(&x623, &x624, x7, UINT32_C(0x66e12d94)); + fiat_np256_mulx_u32(&x625, &x626, x7, UINT32_C(0xf3d95620)); + fiat_np256_mulx_u32(&x627, &x628, x7, UINT32_C(0x2845b239)); + fiat_np256_mulx_u32(&x629, &x630, x7, UINT32_C(0x2b6bec59)); + fiat_np256_mulx_u32(&x631, &x632, x7, UINT32_C(0x4699799c)); + fiat_np256_mulx_u32(&x633, &x634, x7, UINT32_C(0x49bd6fa6)); + fiat_np256_mulx_u32(&x635, &x636, x7, UINT32_C(0x83244c95)); + fiat_np256_mulx_u32(&x637, &x638, x7, UINT32_C(0xbe79eea2)); + fiat_np256_addcarryx_u32(&x639, &x640, 0x0, x638, x635); + fiat_np256_addcarryx_u32(&x641, &x642, x640, x636, x633); + fiat_np256_addcarryx_u32(&x643, &x644, x642, x634, x631); + fiat_np256_addcarryx_u32(&x645, &x646, x644, x632, x629); + fiat_np256_addcarryx_u32(&x647, &x648, x646, x630, x627); + fiat_np256_addcarryx_u32(&x649, &x650, x648, x628, x625); + fiat_np256_addcarryx_u32(&x651, &x652, x650, x626, x623); + fiat_np256_addcarryx_u32(&x653, &x654, 0x0, x607, x637); + fiat_np256_addcarryx_u32(&x655, &x656, x654, x609, x639); + fiat_np256_addcarryx_u32(&x657, &x658, x656, x611, x641); + fiat_np256_addcarryx_u32(&x659, &x660, x658, x613, x643); + fiat_np256_addcarryx_u32(&x661, &x662, x660, x615, x645); + fiat_np256_addcarryx_u32(&x663, &x664, x662, x617, x647); + fiat_np256_addcarryx_u32(&x665, &x666, x664, x619, x649); + fiat_np256_addcarryx_u32(&x667, &x668, x666, x621, x651); + fiat_np256_mulx_u32(&x669, &x670, x653, UINT32_C(0xee00bc4f)); + fiat_np256_mulx_u32(&x671, &x672, x669, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x673, &x674, x669, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x675, &x676, x669, UINT32_C(0xffffffff)); + fiat_np256_mulx_u32(&x677, &x678, x669, UINT32_C(0xbce6faad)); + fiat_np256_mulx_u32(&x679, &x680, x669, UINT32_C(0xa7179e84)); + fiat_np256_mulx_u32(&x681, &x682, x669, UINT32_C(0xf3b9cac2)); + fiat_np256_mulx_u32(&x683, &x684, x669, UINT32_C(0xfc632551)); + fiat_np256_addcarryx_u32(&x685, &x686, 0x0, x684, x681); + fiat_np256_addcarryx_u32(&x687, &x688, x686, x682, x679); + fiat_np256_addcarryx_u32(&x689, &x690, x688, x680, x677); + fiat_np256_addcarryx_u32(&x691, &x692, x690, x678, x675); + fiat_np256_addcarryx_u32(&x693, &x694, x692, x676, x673); + fiat_np256_addcarryx_u32(&x695, &x696, 0x0, x653, x683); + fiat_np256_addcarryx_u32(&x697, &x698, x696, x655, x685); + fiat_np256_addcarryx_u32(&x699, &x700, x698, x657, x687); + fiat_np256_addcarryx_u32(&x701, &x702, x700, x659, x689); + fiat_np256_addcarryx_u32(&x703, &x704, x702, x661, x691); + fiat_np256_addcarryx_u32(&x705, &x706, x704, x663, x693); + fiat_np256_addcarryx_u32(&x707, &x708, x706, x665, (x694 + x674)); + fiat_np256_addcarryx_u32(&x709, &x710, x708, x667, x671); + fiat_np256_addcarryx_u32(&x711, &x712, x710, (((uint32_t)x668 + x622) + (x652 + x624)), x672); + fiat_np256_subborrowx_u32(&x713, &x714, 0x0, x697, UINT32_C(0xfc632551)); + fiat_np256_subborrowx_u32(&x715, &x716, x714, x699, UINT32_C(0xf3b9cac2)); + fiat_np256_subborrowx_u32(&x717, &x718, x716, x701, UINT32_C(0xa7179e84)); + fiat_np256_subborrowx_u32(&x719, &x720, x718, x703, UINT32_C(0xbce6faad)); + fiat_np256_subborrowx_u32(&x721, &x722, x720, x705, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x723, &x724, x722, x707, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x725, &x726, x724, x709, 0x0); + fiat_np256_subborrowx_u32(&x727, &x728, x726, x711, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x729, &x730, x728, x712, 0x0); + fiat_np256_cmovznz_u32(&x731, x730, x713, x697); + fiat_np256_cmovznz_u32(&x732, x730, x715, x699); + fiat_np256_cmovznz_u32(&x733, x730, x717, x701); + fiat_np256_cmovznz_u32(&x734, x730, x719, x703); + fiat_np256_cmovznz_u32(&x735, x730, x721, x705); + fiat_np256_cmovznz_u32(&x736, x730, x723, x707); + fiat_np256_cmovznz_u32(&x737, x730, x725, x709); + fiat_np256_cmovznz_u32(&x738, x730, x727, x711); + out1[0] = x731; + out1[1] = x732; + out1[2] = x733; + out1[3] = x734; + out1[4] = x735; + out1[5] = x736; + out1[6] = x737; + out1[7] = x738; +} + +/* + * The function fiat_np256_set_one returns the field element one in the Montgomery domain. + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np256_set_one(uint32_t out1[8]) { + out1[0] = UINT32_C(0x39cdaaf); + out1[1] = UINT32_C(0xc46353d); + out1[2] = UINT32_C(0x58e8617b); + out1[3] = UINT32_C(0x43190552); + out1[4] = 0x0; + out1[5] = 0x0; + out1[6] = UINT32_C(0xffffffff); + out1[7] = 0x0; +} + +/* + * The function fiat_np256_msat returns the saturated represtation of the prime modulus. + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np256_msat(uint32_t out1[9]) { + out1[0] = UINT32_C(0xfc632551); + out1[1] = UINT32_C(0xf3b9cac2); + out1[2] = UINT32_C(0xa7179e84); + out1[3] = UINT32_C(0xbce6faad); + out1[4] = UINT32_C(0xffffffff); + out1[5] = UINT32_C(0xffffffff); + out1[6] = 0x0; + out1[7] = UINT32_C(0xffffffff); + out1[8] = 0x0; +} + +/* + * The function fiat_np256_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if (log2 m) + 1 < 46 then ⌊(49 * ((log2 m) + 1) + 80) / 17⌋ else ⌊(49 * ((log2 m) + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np256_divstep_precomp(uint32_t out1[8]) { + out1[0] = UINT32_C(0xb7fcfbb5); + out1[1] = UINT32_C(0xd739262f); + out1[2] = UINT32_C(0x20074414); + out1[3] = UINT32_C(0x8ac6f75d); + out1[4] = UINT32_C(0xb5e3c256); + out1[5] = UINT32_C(0xc67428bf); + out1[6] = UINT32_C(0xeda7aedf); + out1[7] = UINT32_C(0x444962f2); +} + +/* + * The function fiat_np256_divstep computes a divstep. + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg4: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg5: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out4: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out5: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np256_divstep(uint32_t* out1, uint32_t out2[9], uint32_t out3[9], uint32_t out4[8], uint32_t out5[8], uint32_t arg1, const uint32_t arg2[9], const uint32_t arg3[9], const uint32_t arg4[8], const uint32_t arg5[8]) { + uint32_t x1; + fiat_np256_uint1 x2; + fiat_np256_uint1 x3; + uint32_t x4; + fiat_np256_uint1 x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + fiat_np256_uint1 x17; + uint32_t x18; + fiat_np256_uint1 x19; + uint32_t x20; + fiat_np256_uint1 x21; + uint32_t x22; + fiat_np256_uint1 x23; + uint32_t x24; + fiat_np256_uint1 x25; + uint32_t x26; + fiat_np256_uint1 x27; + uint32_t x28; + fiat_np256_uint1 x29; + uint32_t x30; + fiat_np256_uint1 x31; + uint32_t x32; + fiat_np256_uint1 x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + fiat_np256_uint1 x52; + uint32_t x53; + fiat_np256_uint1 x54; + uint32_t x55; + fiat_np256_uint1 x56; + uint32_t x57; + fiat_np256_uint1 x58; + uint32_t x59; + fiat_np256_uint1 x60; + uint32_t x61; + fiat_np256_uint1 x62; + uint32_t x63; + fiat_np256_uint1 x64; + uint32_t x65; + fiat_np256_uint1 x66; + uint32_t x67; + fiat_np256_uint1 x68; + uint32_t x69; + fiat_np256_uint1 x70; + uint32_t x71; + fiat_np256_uint1 x72; + uint32_t x73; + fiat_np256_uint1 x74; + uint32_t x75; + fiat_np256_uint1 x76; + uint32_t x77; + fiat_np256_uint1 x78; + uint32_t x79; + fiat_np256_uint1 x80; + uint32_t x81; + fiat_np256_uint1 x82; + uint32_t x83; + fiat_np256_uint1 x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + uint32_t x88; + uint32_t x89; + uint32_t x90; + uint32_t x91; + uint32_t x92; + uint32_t x93; + fiat_np256_uint1 x94; + uint32_t x95; + fiat_np256_uint1 x96; + uint32_t x97; + fiat_np256_uint1 x98; + uint32_t x99; + fiat_np256_uint1 x100; + uint32_t x101; + fiat_np256_uint1 x102; + uint32_t x103; + fiat_np256_uint1 x104; + uint32_t x105; + fiat_np256_uint1 x106; + uint32_t x107; + fiat_np256_uint1 x108; + uint32_t x109; + uint32_t x110; + fiat_np256_uint1 x111; + uint32_t x112; + fiat_np256_uint1 x113; + uint32_t x114; + fiat_np256_uint1 x115; + uint32_t x116; + fiat_np256_uint1 x117; + uint32_t x118; + fiat_np256_uint1 x119; + uint32_t x120; + fiat_np256_uint1 x121; + uint32_t x122; + fiat_np256_uint1 x123; + uint32_t x124; + fiat_np256_uint1 x125; + uint32_t x126; + uint32_t x127; + uint32_t x128; + uint32_t x129; + uint32_t x130; + uint32_t x131; + uint32_t x132; + uint32_t x133; + fiat_np256_uint1 x134; + uint32_t x135; + uint32_t x136; + uint32_t x137; + uint32_t x138; + uint32_t x139; + uint32_t x140; + uint32_t x141; + uint32_t x142; + uint32_t x143; + uint32_t x144; + fiat_np256_uint1 x145; + uint32_t x146; + fiat_np256_uint1 x147; + uint32_t x148; + fiat_np256_uint1 x149; + uint32_t x150; + fiat_np256_uint1 x151; + uint32_t x152; + fiat_np256_uint1 x153; + uint32_t x154; + fiat_np256_uint1 x155; + uint32_t x156; + fiat_np256_uint1 x157; + uint32_t x158; + fiat_np256_uint1 x159; + uint32_t x160; + fiat_np256_uint1 x161; + uint32_t x162; + uint32_t x163; + uint32_t x164; + uint32_t x165; + uint32_t x166; + uint32_t x167; + uint32_t x168; + uint32_t x169; + uint32_t x170; + fiat_np256_uint1 x171; + uint32_t x172; + fiat_np256_uint1 x173; + uint32_t x174; + fiat_np256_uint1 x175; + uint32_t x176; + fiat_np256_uint1 x177; + uint32_t x178; + fiat_np256_uint1 x179; + uint32_t x180; + fiat_np256_uint1 x181; + uint32_t x182; + fiat_np256_uint1 x183; + uint32_t x184; + fiat_np256_uint1 x185; + uint32_t x186; + fiat_np256_uint1 x187; + uint32_t x188; + fiat_np256_uint1 x189; + uint32_t x190; + fiat_np256_uint1 x191; + uint32_t x192; + fiat_np256_uint1 x193; + uint32_t x194; + fiat_np256_uint1 x195; + uint32_t x196; + fiat_np256_uint1 x197; + uint32_t x198; + fiat_np256_uint1 x199; + uint32_t x200; + fiat_np256_uint1 x201; + uint32_t x202; + fiat_np256_uint1 x203; + uint32_t x204; + fiat_np256_uint1 x205; + uint32_t x206; + uint32_t x207; + uint32_t x208; + uint32_t x209; + uint32_t x210; + uint32_t x211; + uint32_t x212; + uint32_t x213; + uint32_t x214; + uint32_t x215; + uint32_t x216; + uint32_t x217; + uint32_t x218; + uint32_t x219; + uint32_t x220; + uint32_t x221; + uint32_t x222; + uint32_t x223; + uint32_t x224; + uint32_t x225; + uint32_t x226; + uint32_t x227; + uint32_t x228; + uint32_t x229; + uint32_t x230; + fiat_np256_addcarryx_u32(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_np256_uint1)((fiat_np256_uint1)(x1 >> 31) & (fiat_np256_uint1)((arg3[0]) & 0x1)); + fiat_np256_addcarryx_u32(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_np256_cmovznz_u32(&x6, x3, arg1, x4); + fiat_np256_cmovznz_u32(&x7, x3, (arg2[0]), (arg3[0])); + fiat_np256_cmovznz_u32(&x8, x3, (arg2[1]), (arg3[1])); + fiat_np256_cmovznz_u32(&x9, x3, (arg2[2]), (arg3[2])); + fiat_np256_cmovznz_u32(&x10, x3, (arg2[3]), (arg3[3])); + fiat_np256_cmovznz_u32(&x11, x3, (arg2[4]), (arg3[4])); + fiat_np256_cmovznz_u32(&x12, x3, (arg2[5]), (arg3[5])); + fiat_np256_cmovznz_u32(&x13, x3, (arg2[6]), (arg3[6])); + fiat_np256_cmovznz_u32(&x14, x3, (arg2[7]), (arg3[7])); + fiat_np256_cmovznz_u32(&x15, x3, (arg2[8]), (arg3[8])); + fiat_np256_addcarryx_u32(&x16, &x17, 0x0, 0x1, (~(arg2[0]))); + fiat_np256_addcarryx_u32(&x18, &x19, x17, 0x0, (~(arg2[1]))); + fiat_np256_addcarryx_u32(&x20, &x21, x19, 0x0, (~(arg2[2]))); + fiat_np256_addcarryx_u32(&x22, &x23, x21, 0x0, (~(arg2[3]))); + fiat_np256_addcarryx_u32(&x24, &x25, x23, 0x0, (~(arg2[4]))); + fiat_np256_addcarryx_u32(&x26, &x27, x25, 0x0, (~(arg2[5]))); + fiat_np256_addcarryx_u32(&x28, &x29, x27, 0x0, (~(arg2[6]))); + fiat_np256_addcarryx_u32(&x30, &x31, x29, 0x0, (~(arg2[7]))); + fiat_np256_addcarryx_u32(&x32, &x33, x31, 0x0, (~(arg2[8]))); + fiat_np256_cmovznz_u32(&x34, x3, (arg3[0]), x16); + fiat_np256_cmovznz_u32(&x35, x3, (arg3[1]), x18); + fiat_np256_cmovznz_u32(&x36, x3, (arg3[2]), x20); + fiat_np256_cmovznz_u32(&x37, x3, (arg3[3]), x22); + fiat_np256_cmovznz_u32(&x38, x3, (arg3[4]), x24); + fiat_np256_cmovznz_u32(&x39, x3, (arg3[5]), x26); + fiat_np256_cmovznz_u32(&x40, x3, (arg3[6]), x28); + fiat_np256_cmovznz_u32(&x41, x3, (arg3[7]), x30); + fiat_np256_cmovznz_u32(&x42, x3, (arg3[8]), x32); + fiat_np256_cmovznz_u32(&x43, x3, (arg4[0]), (arg5[0])); + fiat_np256_cmovznz_u32(&x44, x3, (arg4[1]), (arg5[1])); + fiat_np256_cmovznz_u32(&x45, x3, (arg4[2]), (arg5[2])); + fiat_np256_cmovznz_u32(&x46, x3, (arg4[3]), (arg5[3])); + fiat_np256_cmovznz_u32(&x47, x3, (arg4[4]), (arg5[4])); + fiat_np256_cmovznz_u32(&x48, x3, (arg4[5]), (arg5[5])); + fiat_np256_cmovznz_u32(&x49, x3, (arg4[6]), (arg5[6])); + fiat_np256_cmovznz_u32(&x50, x3, (arg4[7]), (arg5[7])); + fiat_np256_addcarryx_u32(&x51, &x52, 0x0, x43, x43); + fiat_np256_addcarryx_u32(&x53, &x54, x52, x44, x44); + fiat_np256_addcarryx_u32(&x55, &x56, x54, x45, x45); + fiat_np256_addcarryx_u32(&x57, &x58, x56, x46, x46); + fiat_np256_addcarryx_u32(&x59, &x60, x58, x47, x47); + fiat_np256_addcarryx_u32(&x61, &x62, x60, x48, x48); + fiat_np256_addcarryx_u32(&x63, &x64, x62, x49, x49); + fiat_np256_addcarryx_u32(&x65, &x66, x64, x50, x50); + fiat_np256_subborrowx_u32(&x67, &x68, 0x0, x51, UINT32_C(0xfc632551)); + fiat_np256_subborrowx_u32(&x69, &x70, x68, x53, UINT32_C(0xf3b9cac2)); + fiat_np256_subborrowx_u32(&x71, &x72, x70, x55, UINT32_C(0xa7179e84)); + fiat_np256_subborrowx_u32(&x73, &x74, x72, x57, UINT32_C(0xbce6faad)); + fiat_np256_subborrowx_u32(&x75, &x76, x74, x59, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x77, &x78, x76, x61, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x79, &x80, x78, x63, 0x0); + fiat_np256_subborrowx_u32(&x81, &x82, x80, x65, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x83, &x84, x82, x66, 0x0); + x85 = (arg4[7]); + x86 = (arg4[6]); + x87 = (arg4[5]); + x88 = (arg4[4]); + x89 = (arg4[3]); + x90 = (arg4[2]); + x91 = (arg4[1]); + x92 = (arg4[0]); + fiat_np256_subborrowx_u32(&x93, &x94, 0x0, 0x0, x92); + fiat_np256_subborrowx_u32(&x95, &x96, x94, 0x0, x91); + fiat_np256_subborrowx_u32(&x97, &x98, x96, 0x0, x90); + fiat_np256_subborrowx_u32(&x99, &x100, x98, 0x0, x89); + fiat_np256_subborrowx_u32(&x101, &x102, x100, 0x0, x88); + fiat_np256_subborrowx_u32(&x103, &x104, x102, 0x0, x87); + fiat_np256_subborrowx_u32(&x105, &x106, x104, 0x0, x86); + fiat_np256_subborrowx_u32(&x107, &x108, x106, 0x0, x85); + fiat_np256_cmovznz_u32(&x109, x108, 0x0, UINT32_C(0xffffffff)); + fiat_np256_addcarryx_u32(&x110, &x111, 0x0, x93, (x109 & UINT32_C(0xfc632551))); + fiat_np256_addcarryx_u32(&x112, &x113, x111, x95, (x109 & UINT32_C(0xf3b9cac2))); + fiat_np256_addcarryx_u32(&x114, &x115, x113, x97, (x109 & UINT32_C(0xa7179e84))); + fiat_np256_addcarryx_u32(&x116, &x117, x115, x99, (x109 & UINT32_C(0xbce6faad))); + fiat_np256_addcarryx_u32(&x118, &x119, x117, x101, x109); + fiat_np256_addcarryx_u32(&x120, &x121, x119, x103, x109); + fiat_np256_addcarryx_u32(&x122, &x123, x121, x105, 0x0); + fiat_np256_addcarryx_u32(&x124, &x125, x123, x107, x109); + fiat_np256_cmovznz_u32(&x126, x3, (arg5[0]), x110); + fiat_np256_cmovznz_u32(&x127, x3, (arg5[1]), x112); + fiat_np256_cmovznz_u32(&x128, x3, (arg5[2]), x114); + fiat_np256_cmovznz_u32(&x129, x3, (arg5[3]), x116); + fiat_np256_cmovznz_u32(&x130, x3, (arg5[4]), x118); + fiat_np256_cmovznz_u32(&x131, x3, (arg5[5]), x120); + fiat_np256_cmovznz_u32(&x132, x3, (arg5[6]), x122); + fiat_np256_cmovznz_u32(&x133, x3, (arg5[7]), x124); + x134 = (fiat_np256_uint1)(x34 & 0x1); + fiat_np256_cmovznz_u32(&x135, x134, 0x0, x7); + fiat_np256_cmovznz_u32(&x136, x134, 0x0, x8); + fiat_np256_cmovznz_u32(&x137, x134, 0x0, x9); + fiat_np256_cmovznz_u32(&x138, x134, 0x0, x10); + fiat_np256_cmovznz_u32(&x139, x134, 0x0, x11); + fiat_np256_cmovznz_u32(&x140, x134, 0x0, x12); + fiat_np256_cmovznz_u32(&x141, x134, 0x0, x13); + fiat_np256_cmovznz_u32(&x142, x134, 0x0, x14); + fiat_np256_cmovznz_u32(&x143, x134, 0x0, x15); + fiat_np256_addcarryx_u32(&x144, &x145, 0x0, x34, x135); + fiat_np256_addcarryx_u32(&x146, &x147, x145, x35, x136); + fiat_np256_addcarryx_u32(&x148, &x149, x147, x36, x137); + fiat_np256_addcarryx_u32(&x150, &x151, x149, x37, x138); + fiat_np256_addcarryx_u32(&x152, &x153, x151, x38, x139); + fiat_np256_addcarryx_u32(&x154, &x155, x153, x39, x140); + fiat_np256_addcarryx_u32(&x156, &x157, x155, x40, x141); + fiat_np256_addcarryx_u32(&x158, &x159, x157, x41, x142); + fiat_np256_addcarryx_u32(&x160, &x161, x159, x42, x143); + fiat_np256_cmovznz_u32(&x162, x134, 0x0, x43); + fiat_np256_cmovznz_u32(&x163, x134, 0x0, x44); + fiat_np256_cmovznz_u32(&x164, x134, 0x0, x45); + fiat_np256_cmovznz_u32(&x165, x134, 0x0, x46); + fiat_np256_cmovznz_u32(&x166, x134, 0x0, x47); + fiat_np256_cmovznz_u32(&x167, x134, 0x0, x48); + fiat_np256_cmovznz_u32(&x168, x134, 0x0, x49); + fiat_np256_cmovznz_u32(&x169, x134, 0x0, x50); + fiat_np256_addcarryx_u32(&x170, &x171, 0x0, x126, x162); + fiat_np256_addcarryx_u32(&x172, &x173, x171, x127, x163); + fiat_np256_addcarryx_u32(&x174, &x175, x173, x128, x164); + fiat_np256_addcarryx_u32(&x176, &x177, x175, x129, x165); + fiat_np256_addcarryx_u32(&x178, &x179, x177, x130, x166); + fiat_np256_addcarryx_u32(&x180, &x181, x179, x131, x167); + fiat_np256_addcarryx_u32(&x182, &x183, x181, x132, x168); + fiat_np256_addcarryx_u32(&x184, &x185, x183, x133, x169); + fiat_np256_subborrowx_u32(&x186, &x187, 0x0, x170, UINT32_C(0xfc632551)); + fiat_np256_subborrowx_u32(&x188, &x189, x187, x172, UINT32_C(0xf3b9cac2)); + fiat_np256_subborrowx_u32(&x190, &x191, x189, x174, UINT32_C(0xa7179e84)); + fiat_np256_subborrowx_u32(&x192, &x193, x191, x176, UINT32_C(0xbce6faad)); + fiat_np256_subborrowx_u32(&x194, &x195, x193, x178, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x196, &x197, x195, x180, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x198, &x199, x197, x182, 0x0); + fiat_np256_subborrowx_u32(&x200, &x201, x199, x184, UINT32_C(0xffffffff)); + fiat_np256_subborrowx_u32(&x202, &x203, x201, x185, 0x0); + fiat_np256_addcarryx_u32(&x204, &x205, 0x0, x6, 0x1); + x206 = ((x144 >> 1) | ((x146 << 31) & UINT32_C(0xffffffff))); + x207 = ((x146 >> 1) | ((x148 << 31) & UINT32_C(0xffffffff))); + x208 = ((x148 >> 1) | ((x150 << 31) & UINT32_C(0xffffffff))); + x209 = ((x150 >> 1) | ((x152 << 31) & UINT32_C(0xffffffff))); + x210 = ((x152 >> 1) | ((x154 << 31) & UINT32_C(0xffffffff))); + x211 = ((x154 >> 1) | ((x156 << 31) & UINT32_C(0xffffffff))); + x212 = ((x156 >> 1) | ((x158 << 31) & UINT32_C(0xffffffff))); + x213 = ((x158 >> 1) | ((x160 << 31) & UINT32_C(0xffffffff))); + x214 = ((x160 & UINT32_C(0x80000000)) | (x160 >> 1)); + fiat_np256_cmovznz_u32(&x215, x84, x67, x51); + fiat_np256_cmovznz_u32(&x216, x84, x69, x53); + fiat_np256_cmovznz_u32(&x217, x84, x71, x55); + fiat_np256_cmovznz_u32(&x218, x84, x73, x57); + fiat_np256_cmovznz_u32(&x219, x84, x75, x59); + fiat_np256_cmovznz_u32(&x220, x84, x77, x61); + fiat_np256_cmovznz_u32(&x221, x84, x79, x63); + fiat_np256_cmovznz_u32(&x222, x84, x81, x65); + fiat_np256_cmovznz_u32(&x223, x203, x186, x170); + fiat_np256_cmovznz_u32(&x224, x203, x188, x172); + fiat_np256_cmovznz_u32(&x225, x203, x190, x174); + fiat_np256_cmovznz_u32(&x226, x203, x192, x176); + fiat_np256_cmovznz_u32(&x227, x203, x194, x178); + fiat_np256_cmovznz_u32(&x228, x203, x196, x180); + fiat_np256_cmovznz_u32(&x229, x203, x198, x182); + fiat_np256_cmovznz_u32(&x230, x203, x200, x184); + *out1 = x204; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out2[5] = x12; + out2[6] = x13; + out2[7] = x14; + out2[8] = x15; + out3[0] = x206; + out3[1] = x207; + out3[2] = x208; + out3[3] = x209; + out3[4] = x210; + out3[5] = x211; + out3[6] = x212; + out3[7] = x213; + out3[8] = x214; + out4[0] = x215; + out4[1] = x216; + out4[2] = x217; + out4[3] = x218; + out4[4] = x219; + out4[5] = x220; + out4[6] = x221; + out4[7] = x222; + out5[0] = x223; + out5[1] = x224; + out5[2] = x225; + out5[3] = x226; + out5[4] = x227; + out5[5] = x228; + out5[6] = x229; + out5[7] = x230; +} + +/* + * The function fiat_np256_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + */ +static void fiat_np256_to_bytes(uint8_t out1[32], const uint32_t arg1[8]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint8_t x9; + uint32_t x10; + uint8_t x11; + uint32_t x12; + uint8_t x13; + uint8_t x14; + uint8_t x15; + uint32_t x16; + uint8_t x17; + uint32_t x18; + uint8_t x19; + uint8_t x20; + uint8_t x21; + uint32_t x22; + uint8_t x23; + uint32_t x24; + uint8_t x25; + uint8_t x26; + uint8_t x27; + uint32_t x28; + uint8_t x29; + uint32_t x30; + uint8_t x31; + uint8_t x32; + uint8_t x33; + uint32_t x34; + uint8_t x35; + uint32_t x36; + uint8_t x37; + uint8_t x38; + uint8_t x39; + uint32_t x40; + uint8_t x41; + uint32_t x42; + uint8_t x43; + uint8_t x44; + uint8_t x45; + uint32_t x46; + uint8_t x47; + uint32_t x48; + uint8_t x49; + uint8_t x50; + uint8_t x51; + uint32_t x52; + uint8_t x53; + uint32_t x54; + uint8_t x55; + uint8_t x56; + x1 = (arg1[7]); + x2 = (arg1[6]); + x3 = (arg1[5]); + x4 = (arg1[4]); + x5 = (arg1[3]); + x6 = (arg1[2]); + x7 = (arg1[1]); + x8 = (arg1[0]); + x9 = (uint8_t)(x8 & UINT8_C(0xff)); + x10 = (x8 >> 8); + x11 = (uint8_t)(x10 & UINT8_C(0xff)); + x12 = (x10 >> 8); + x13 = (uint8_t)(x12 & UINT8_C(0xff)); + x14 = (uint8_t)(x12 >> 8); + x15 = (uint8_t)(x7 & UINT8_C(0xff)); + x16 = (x7 >> 8); + x17 = (uint8_t)(x16 & UINT8_C(0xff)); + x18 = (x16 >> 8); + x19 = (uint8_t)(x18 & UINT8_C(0xff)); + x20 = (uint8_t)(x18 >> 8); + x21 = (uint8_t)(x6 & UINT8_C(0xff)); + x22 = (x6 >> 8); + x23 = (uint8_t)(x22 & UINT8_C(0xff)); + x24 = (x22 >> 8); + x25 = (uint8_t)(x24 & UINT8_C(0xff)); + x26 = (uint8_t)(x24 >> 8); + x27 = (uint8_t)(x5 & UINT8_C(0xff)); + x28 = (x5 >> 8); + x29 = (uint8_t)(x28 & UINT8_C(0xff)); + x30 = (x28 >> 8); + x31 = (uint8_t)(x30 & UINT8_C(0xff)); + x32 = (uint8_t)(x30 >> 8); + x33 = (uint8_t)(x4 & UINT8_C(0xff)); + x34 = (x4 >> 8); + x35 = (uint8_t)(x34 & UINT8_C(0xff)); + x36 = (x34 >> 8); + x37 = (uint8_t)(x36 & UINT8_C(0xff)); + x38 = (uint8_t)(x36 >> 8); + x39 = (uint8_t)(x3 & UINT8_C(0xff)); + x40 = (x3 >> 8); + x41 = (uint8_t)(x40 & UINT8_C(0xff)); + x42 = (x40 >> 8); + x43 = (uint8_t)(x42 & UINT8_C(0xff)); + x44 = (uint8_t)(x42 >> 8); + x45 = (uint8_t)(x2 & UINT8_C(0xff)); + x46 = (x2 >> 8); + x47 = (uint8_t)(x46 & UINT8_C(0xff)); + x48 = (x46 >> 8); + x49 = (uint8_t)(x48 & UINT8_C(0xff)); + x50 = (uint8_t)(x48 >> 8); + x51 = (uint8_t)(x1 & UINT8_C(0xff)); + x52 = (x1 >> 8); + x53 = (uint8_t)(x52 & UINT8_C(0xff)); + x54 = (x52 >> 8); + x55 = (uint8_t)(x54 & UINT8_C(0xff)); + x56 = (uint8_t)(x54 >> 8); + out1[0] = x9; + out1[1] = x11; + out1[2] = x13; + out1[3] = x14; + out1[4] = x15; + out1[5] = x17; + out1[6] = x19; + out1[7] = x20; + out1[8] = x21; + out1[9] = x23; + out1[10] = x25; + out1[11] = x26; + out1[12] = x27; + out1[13] = x29; + out1[14] = x31; + out1[15] = x32; + out1[16] = x33; + out1[17] = x35; + out1[18] = x37; + out1[19] = x38; + out1[20] = x39; + out1[21] = x41; + out1[22] = x43; + out1[23] = x44; + out1[24] = x45; + out1[25] = x47; + out1[26] = x49; + out1[27] = x50; + out1[28] = x51; + out1[29] = x53; + out1[30] = x55; + out1[31] = x56; +} + +/* + * The function fiat_np256_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np256_from_bytes(uint32_t out1[8], const uint8_t arg1[32]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint8_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint8_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint8_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint8_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint8_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint8_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint8_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint8_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + uint32_t x52; + uint32_t x53; + uint32_t x54; + uint32_t x55; + uint32_t x56; + x1 = ((uint32_t)(arg1[31]) << 24); + x2 = ((uint32_t)(arg1[30]) << 16); + x3 = ((uint32_t)(arg1[29]) << 8); + x4 = (arg1[28]); + x5 = ((uint32_t)(arg1[27]) << 24); + x6 = ((uint32_t)(arg1[26]) << 16); + x7 = ((uint32_t)(arg1[25]) << 8); + x8 = (arg1[24]); + x9 = ((uint32_t)(arg1[23]) << 24); + x10 = ((uint32_t)(arg1[22]) << 16); + x11 = ((uint32_t)(arg1[21]) << 8); + x12 = (arg1[20]); + x13 = ((uint32_t)(arg1[19]) << 24); + x14 = ((uint32_t)(arg1[18]) << 16); + x15 = ((uint32_t)(arg1[17]) << 8); + x16 = (arg1[16]); + x17 = ((uint32_t)(arg1[15]) << 24); + x18 = ((uint32_t)(arg1[14]) << 16); + x19 = ((uint32_t)(arg1[13]) << 8); + x20 = (arg1[12]); + x21 = ((uint32_t)(arg1[11]) << 24); + x22 = ((uint32_t)(arg1[10]) << 16); + x23 = ((uint32_t)(arg1[9]) << 8); + x24 = (arg1[8]); + x25 = ((uint32_t)(arg1[7]) << 24); + x26 = ((uint32_t)(arg1[6]) << 16); + x27 = ((uint32_t)(arg1[5]) << 8); + x28 = (arg1[4]); + x29 = ((uint32_t)(arg1[3]) << 24); + x30 = ((uint32_t)(arg1[2]) << 16); + x31 = ((uint32_t)(arg1[1]) << 8); + x32 = (arg1[0]); + x33 = (x31 + (uint32_t)x32); + x34 = (x30 + x33); + x35 = (x29 + x34); + x36 = (x27 + (uint32_t)x28); + x37 = (x26 + x36); + x38 = (x25 + x37); + x39 = (x23 + (uint32_t)x24); + x40 = (x22 + x39); + x41 = (x21 + x40); + x42 = (x19 + (uint32_t)x20); + x43 = (x18 + x42); + x44 = (x17 + x43); + x45 = (x15 + (uint32_t)x16); + x46 = (x14 + x45); + x47 = (x13 + x46); + x48 = (x11 + (uint32_t)x12); + x49 = (x10 + x48); + x50 = (x9 + x49); + x51 = (x7 + (uint32_t)x8); + x52 = (x6 + x51); + x53 = (x5 + x52); + x54 = (x3 + (uint32_t)x4); + x55 = (x2 + x54); + x56 = (x1 + x55); + out1[0] = x35; + out1[1] = x38; + out1[2] = x41; + out1[3] = x44; + out1[4] = x47; + out1[5] = x50; + out1[6] = x53; + out1[7] = x56; +} + diff --git a/ec/native/np256_64.h b/ec/native/np256_64.h new file mode 100644 index 00000000..981d0033 --- /dev/null +++ b/ec/native/np256_64.h @@ -0,0 +1,1770 @@ +/* Autogenerated: '../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery' --static --use-value-barrier np256 64 0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 mul add opp from_montgomery to_montgomery one msat divstep_precomp divstep to_bytes from_bytes */ +/* curve description: np256 */ +/* machine_wordsize = 64 (from "64") */ +/* requested operations: mul, add, opp, from_montgomery, to_montgomery, one, msat, divstep_precomp, divstep, to_bytes, from_bytes */ +/* m = 0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 (from "0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ + +#include +typedef unsigned char fiat_np256_uint1; +typedef signed char fiat_np256_int1; +#ifdef __GNUC__ +# define FIAT_NP256_FIAT_EXTENSION __extension__ +#else +# define FIAT_NP256_FIAT_EXTENSION +#endif + +FIAT_NP256_FIAT_EXTENSION typedef signed __int128 fiat_np256_int128; +FIAT_NP256_FIAT_EXTENSION typedef unsigned __int128 fiat_np256_uint128; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_NP256_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint64_t fiat_np256_value_barrier_u64(uint64_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_np256_value_barrier_u64(x) (x) +#endif + + +/* + * The function fiat_np256_addcarryx_u64 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^64 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_np256_addcarryx_u64(uint64_t* out1, fiat_np256_uint1* out2, fiat_np256_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_np256_uint128 x1; + uint64_t x2; + fiat_np256_uint1 x3; + x1 = ((arg1 + (fiat_np256_uint128)arg2) + arg3); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (fiat_np256_uint1)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_np256_subborrowx_u64 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^64 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_np256_subborrowx_u64(uint64_t* out1, fiat_np256_uint1* out2, fiat_np256_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_np256_int128 x1; + fiat_np256_int1 x2; + uint64_t x3; + x1 = ((arg2 - (fiat_np256_int128)arg1) - arg3); + x2 = (fiat_np256_int1)(x1 >> 64); + x3 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + *out1 = x3; + *out2 = (fiat_np256_uint1)(0x0 - x2); +} + +/* + * The function fiat_np256_mulx_u64 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^64 + * out2 = ⌊arg1 * arg2 / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_np256_mulx_u64(uint64_t* out1, uint64_t* out2, uint64_t arg1, uint64_t arg2) { + fiat_np256_uint128 x1; + uint64_t x2; + uint64_t x3; + x1 = ((fiat_np256_uint128)arg1 * arg2); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (uint64_t)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_np256_cmovznz_u64 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_np256_cmovznz_u64(uint64_t* out1, fiat_np256_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_np256_uint1 x1; + uint64_t x2; + uint64_t x3; + x1 = (!(!arg1)); + x2 = ((fiat_np256_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); + x3 = ((fiat_np256_value_barrier_u64(x2) & arg3) | (fiat_np256_value_barrier_u64((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_np256_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np256_mul(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + fiat_np256_uint1 x14; + uint64_t x15; + fiat_np256_uint1 x16; + uint64_t x17; + fiat_np256_uint1 x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + fiat_np256_uint1 x31; + uint64_t x32; + fiat_np256_uint1 x33; + uint64_t x34; + fiat_np256_uint1 x35; + uint64_t x36; + uint64_t x37; + fiat_np256_uint1 x38; + uint64_t x39; + fiat_np256_uint1 x40; + uint64_t x41; + fiat_np256_uint1 x42; + uint64_t x43; + fiat_np256_uint1 x44; + uint64_t x45; + fiat_np256_uint1 x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + fiat_np256_uint1 x56; + uint64_t x57; + fiat_np256_uint1 x58; + uint64_t x59; + fiat_np256_uint1 x60; + uint64_t x61; + uint64_t x62; + fiat_np256_uint1 x63; + uint64_t x64; + fiat_np256_uint1 x65; + uint64_t x66; + fiat_np256_uint1 x67; + uint64_t x68; + fiat_np256_uint1 x69; + uint64_t x70; + fiat_np256_uint1 x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + uint64_t x81; + uint64_t x82; + fiat_np256_uint1 x83; + uint64_t x84; + fiat_np256_uint1 x85; + uint64_t x86; + fiat_np256_uint1 x87; + uint64_t x88; + uint64_t x89; + fiat_np256_uint1 x90; + uint64_t x91; + fiat_np256_uint1 x92; + uint64_t x93; + fiat_np256_uint1 x94; + uint64_t x95; + fiat_np256_uint1 x96; + uint64_t x97; + fiat_np256_uint1 x98; + uint64_t x99; + uint64_t x100; + uint64_t x101; + uint64_t x102; + uint64_t x103; + uint64_t x104; + uint64_t x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + fiat_np256_uint1 x109; + uint64_t x110; + fiat_np256_uint1 x111; + uint64_t x112; + fiat_np256_uint1 x113; + uint64_t x114; + uint64_t x115; + fiat_np256_uint1 x116; + uint64_t x117; + fiat_np256_uint1 x118; + uint64_t x119; + fiat_np256_uint1 x120; + uint64_t x121; + fiat_np256_uint1 x122; + uint64_t x123; + fiat_np256_uint1 x124; + uint64_t x125; + uint64_t x126; + uint64_t x127; + uint64_t x128; + uint64_t x129; + uint64_t x130; + uint64_t x131; + uint64_t x132; + uint64_t x133; + uint64_t x134; + uint64_t x135; + fiat_np256_uint1 x136; + uint64_t x137; + fiat_np256_uint1 x138; + uint64_t x139; + fiat_np256_uint1 x140; + uint64_t x141; + uint64_t x142; + fiat_np256_uint1 x143; + uint64_t x144; + fiat_np256_uint1 x145; + uint64_t x146; + fiat_np256_uint1 x147; + uint64_t x148; + fiat_np256_uint1 x149; + uint64_t x150; + fiat_np256_uint1 x151; + uint64_t x152; + uint64_t x153; + uint64_t x154; + uint64_t x155; + uint64_t x156; + uint64_t x157; + uint64_t x158; + uint64_t x159; + uint64_t x160; + uint64_t x161; + fiat_np256_uint1 x162; + uint64_t x163; + fiat_np256_uint1 x164; + uint64_t x165; + fiat_np256_uint1 x166; + uint64_t x167; + uint64_t x168; + fiat_np256_uint1 x169; + uint64_t x170; + fiat_np256_uint1 x171; + uint64_t x172; + fiat_np256_uint1 x173; + uint64_t x174; + fiat_np256_uint1 x175; + uint64_t x176; + fiat_np256_uint1 x177; + uint64_t x178; + uint64_t x179; + uint64_t x180; + uint64_t x181; + uint64_t x182; + uint64_t x183; + uint64_t x184; + uint64_t x185; + uint64_t x186; + uint64_t x187; + uint64_t x188; + fiat_np256_uint1 x189; + uint64_t x190; + fiat_np256_uint1 x191; + uint64_t x192; + fiat_np256_uint1 x193; + uint64_t x194; + uint64_t x195; + fiat_np256_uint1 x196; + uint64_t x197; + fiat_np256_uint1 x198; + uint64_t x199; + fiat_np256_uint1 x200; + uint64_t x201; + fiat_np256_uint1 x202; + uint64_t x203; + fiat_np256_uint1 x204; + uint64_t x205; + uint64_t x206; + fiat_np256_uint1 x207; + uint64_t x208; + fiat_np256_uint1 x209; + uint64_t x210; + fiat_np256_uint1 x211; + uint64_t x212; + fiat_np256_uint1 x213; + uint64_t x214; + fiat_np256_uint1 x215; + uint64_t x216; + uint64_t x217; + uint64_t x218; + uint64_t x219; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[0]); + fiat_np256_mulx_u64(&x5, &x6, x4, (arg2[3])); + fiat_np256_mulx_u64(&x7, &x8, x4, (arg2[2])); + fiat_np256_mulx_u64(&x9, &x10, x4, (arg2[1])); + fiat_np256_mulx_u64(&x11, &x12, x4, (arg2[0])); + fiat_np256_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + fiat_np256_addcarryx_u64(&x15, &x16, x14, x10, x7); + fiat_np256_addcarryx_u64(&x17, &x18, x16, x8, x5); + x19 = (x18 + x6); + fiat_np256_mulx_u64(&x20, &x21, x11, UINT64_C(0xccd1c8aaee00bc4f)); + fiat_np256_mulx_u64(&x22, &x23, x20, UINT64_C(0xffffffff00000000)); + fiat_np256_mulx_u64(&x24, &x25, x20, UINT64_C(0xffffffffffffffff)); + fiat_np256_mulx_u64(&x26, &x27, x20, UINT64_C(0xbce6faada7179e84)); + fiat_np256_mulx_u64(&x28, &x29, x20, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_addcarryx_u64(&x30, &x31, 0x0, x29, x26); + fiat_np256_addcarryx_u64(&x32, &x33, x31, x27, x24); + fiat_np256_addcarryx_u64(&x34, &x35, x33, x25, x22); + x36 = (x35 + x23); + fiat_np256_addcarryx_u64(&x37, &x38, 0x0, x11, x28); + fiat_np256_addcarryx_u64(&x39, &x40, x38, x13, x30); + fiat_np256_addcarryx_u64(&x41, &x42, x40, x15, x32); + fiat_np256_addcarryx_u64(&x43, &x44, x42, x17, x34); + fiat_np256_addcarryx_u64(&x45, &x46, x44, x19, x36); + fiat_np256_mulx_u64(&x47, &x48, x1, (arg2[3])); + fiat_np256_mulx_u64(&x49, &x50, x1, (arg2[2])); + fiat_np256_mulx_u64(&x51, &x52, x1, (arg2[1])); + fiat_np256_mulx_u64(&x53, &x54, x1, (arg2[0])); + fiat_np256_addcarryx_u64(&x55, &x56, 0x0, x54, x51); + fiat_np256_addcarryx_u64(&x57, &x58, x56, x52, x49); + fiat_np256_addcarryx_u64(&x59, &x60, x58, x50, x47); + x61 = (x60 + x48); + fiat_np256_addcarryx_u64(&x62, &x63, 0x0, x39, x53); + fiat_np256_addcarryx_u64(&x64, &x65, x63, x41, x55); + fiat_np256_addcarryx_u64(&x66, &x67, x65, x43, x57); + fiat_np256_addcarryx_u64(&x68, &x69, x67, x45, x59); + fiat_np256_addcarryx_u64(&x70, &x71, x69, x46, x61); + fiat_np256_mulx_u64(&x72, &x73, x62, UINT64_C(0xccd1c8aaee00bc4f)); + fiat_np256_mulx_u64(&x74, &x75, x72, UINT64_C(0xffffffff00000000)); + fiat_np256_mulx_u64(&x76, &x77, x72, UINT64_C(0xffffffffffffffff)); + fiat_np256_mulx_u64(&x78, &x79, x72, UINT64_C(0xbce6faada7179e84)); + fiat_np256_mulx_u64(&x80, &x81, x72, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_addcarryx_u64(&x82, &x83, 0x0, x81, x78); + fiat_np256_addcarryx_u64(&x84, &x85, x83, x79, x76); + fiat_np256_addcarryx_u64(&x86, &x87, x85, x77, x74); + x88 = (x87 + x75); + fiat_np256_addcarryx_u64(&x89, &x90, 0x0, x62, x80); + fiat_np256_addcarryx_u64(&x91, &x92, x90, x64, x82); + fiat_np256_addcarryx_u64(&x93, &x94, x92, x66, x84); + fiat_np256_addcarryx_u64(&x95, &x96, x94, x68, x86); + fiat_np256_addcarryx_u64(&x97, &x98, x96, x70, x88); + x99 = ((uint64_t)x98 + x71); + fiat_np256_mulx_u64(&x100, &x101, x2, (arg2[3])); + fiat_np256_mulx_u64(&x102, &x103, x2, (arg2[2])); + fiat_np256_mulx_u64(&x104, &x105, x2, (arg2[1])); + fiat_np256_mulx_u64(&x106, &x107, x2, (arg2[0])); + fiat_np256_addcarryx_u64(&x108, &x109, 0x0, x107, x104); + fiat_np256_addcarryx_u64(&x110, &x111, x109, x105, x102); + fiat_np256_addcarryx_u64(&x112, &x113, x111, x103, x100); + x114 = (x113 + x101); + fiat_np256_addcarryx_u64(&x115, &x116, 0x0, x91, x106); + fiat_np256_addcarryx_u64(&x117, &x118, x116, x93, x108); + fiat_np256_addcarryx_u64(&x119, &x120, x118, x95, x110); + fiat_np256_addcarryx_u64(&x121, &x122, x120, x97, x112); + fiat_np256_addcarryx_u64(&x123, &x124, x122, x99, x114); + fiat_np256_mulx_u64(&x125, &x126, x115, UINT64_C(0xccd1c8aaee00bc4f)); + fiat_np256_mulx_u64(&x127, &x128, x125, UINT64_C(0xffffffff00000000)); + fiat_np256_mulx_u64(&x129, &x130, x125, UINT64_C(0xffffffffffffffff)); + fiat_np256_mulx_u64(&x131, &x132, x125, UINT64_C(0xbce6faada7179e84)); + fiat_np256_mulx_u64(&x133, &x134, x125, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_addcarryx_u64(&x135, &x136, 0x0, x134, x131); + fiat_np256_addcarryx_u64(&x137, &x138, x136, x132, x129); + fiat_np256_addcarryx_u64(&x139, &x140, x138, x130, x127); + x141 = (x140 + x128); + fiat_np256_addcarryx_u64(&x142, &x143, 0x0, x115, x133); + fiat_np256_addcarryx_u64(&x144, &x145, x143, x117, x135); + fiat_np256_addcarryx_u64(&x146, &x147, x145, x119, x137); + fiat_np256_addcarryx_u64(&x148, &x149, x147, x121, x139); + fiat_np256_addcarryx_u64(&x150, &x151, x149, x123, x141); + x152 = ((uint64_t)x151 + x124); + fiat_np256_mulx_u64(&x153, &x154, x3, (arg2[3])); + fiat_np256_mulx_u64(&x155, &x156, x3, (arg2[2])); + fiat_np256_mulx_u64(&x157, &x158, x3, (arg2[1])); + fiat_np256_mulx_u64(&x159, &x160, x3, (arg2[0])); + fiat_np256_addcarryx_u64(&x161, &x162, 0x0, x160, x157); + fiat_np256_addcarryx_u64(&x163, &x164, x162, x158, x155); + fiat_np256_addcarryx_u64(&x165, &x166, x164, x156, x153); + x167 = (x166 + x154); + fiat_np256_addcarryx_u64(&x168, &x169, 0x0, x144, x159); + fiat_np256_addcarryx_u64(&x170, &x171, x169, x146, x161); + fiat_np256_addcarryx_u64(&x172, &x173, x171, x148, x163); + fiat_np256_addcarryx_u64(&x174, &x175, x173, x150, x165); + fiat_np256_addcarryx_u64(&x176, &x177, x175, x152, x167); + fiat_np256_mulx_u64(&x178, &x179, x168, UINT64_C(0xccd1c8aaee00bc4f)); + fiat_np256_mulx_u64(&x180, &x181, x178, UINT64_C(0xffffffff00000000)); + fiat_np256_mulx_u64(&x182, &x183, x178, UINT64_C(0xffffffffffffffff)); + fiat_np256_mulx_u64(&x184, &x185, x178, UINT64_C(0xbce6faada7179e84)); + fiat_np256_mulx_u64(&x186, &x187, x178, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_addcarryx_u64(&x188, &x189, 0x0, x187, x184); + fiat_np256_addcarryx_u64(&x190, &x191, x189, x185, x182); + fiat_np256_addcarryx_u64(&x192, &x193, x191, x183, x180); + x194 = (x193 + x181); + fiat_np256_addcarryx_u64(&x195, &x196, 0x0, x168, x186); + fiat_np256_addcarryx_u64(&x197, &x198, x196, x170, x188); + fiat_np256_addcarryx_u64(&x199, &x200, x198, x172, x190); + fiat_np256_addcarryx_u64(&x201, &x202, x200, x174, x192); + fiat_np256_addcarryx_u64(&x203, &x204, x202, x176, x194); + x205 = ((uint64_t)x204 + x177); + fiat_np256_subborrowx_u64(&x206, &x207, 0x0, x197, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_subborrowx_u64(&x208, &x209, x207, x199, UINT64_C(0xbce6faada7179e84)); + fiat_np256_subborrowx_u64(&x210, &x211, x209, x201, UINT64_C(0xffffffffffffffff)); + fiat_np256_subborrowx_u64(&x212, &x213, x211, x203, UINT64_C(0xffffffff00000000)); + fiat_np256_subborrowx_u64(&x214, &x215, x213, x205, 0x0); + fiat_np256_cmovznz_u64(&x216, x215, x206, x197); + fiat_np256_cmovznz_u64(&x217, x215, x208, x199); + fiat_np256_cmovznz_u64(&x218, x215, x210, x201); + fiat_np256_cmovznz_u64(&x219, x215, x212, x203); + out1[0] = x216; + out1[1] = x217; + out1[2] = x218; + out1[3] = x219; +} + +/* + * The function fiat_np256_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np256_add(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { + uint64_t x1; + fiat_np256_uint1 x2; + uint64_t x3; + fiat_np256_uint1 x4; + uint64_t x5; + fiat_np256_uint1 x6; + uint64_t x7; + fiat_np256_uint1 x8; + uint64_t x9; + fiat_np256_uint1 x10; + uint64_t x11; + fiat_np256_uint1 x12; + uint64_t x13; + fiat_np256_uint1 x14; + uint64_t x15; + fiat_np256_uint1 x16; + uint64_t x17; + fiat_np256_uint1 x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + fiat_np256_addcarryx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_np256_addcarryx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_np256_addcarryx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_np256_addcarryx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_np256_subborrowx_u64(&x9, &x10, 0x0, x1, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_subborrowx_u64(&x11, &x12, x10, x3, UINT64_C(0xbce6faada7179e84)); + fiat_np256_subborrowx_u64(&x13, &x14, x12, x5, UINT64_C(0xffffffffffffffff)); + fiat_np256_subborrowx_u64(&x15, &x16, x14, x7, UINT64_C(0xffffffff00000000)); + fiat_np256_subborrowx_u64(&x17, &x18, x16, x8, 0x0); + fiat_np256_cmovznz_u64(&x19, x18, x9, x1); + fiat_np256_cmovznz_u64(&x20, x18, x11, x3); + fiat_np256_cmovznz_u64(&x21, x18, x13, x5); + fiat_np256_cmovznz_u64(&x22, x18, x15, x7); + out1[0] = x19; + out1[1] = x20; + out1[2] = x21; + out1[3] = x22; +} + +/* + * The function fiat_np256_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np256_opp(uint64_t out1[4], const uint64_t arg1[4]) { + uint64_t x1; + fiat_np256_uint1 x2; + uint64_t x3; + fiat_np256_uint1 x4; + uint64_t x5; + fiat_np256_uint1 x6; + uint64_t x7; + fiat_np256_uint1 x8; + uint64_t x9; + uint64_t x10; + fiat_np256_uint1 x11; + uint64_t x12; + fiat_np256_uint1 x13; + uint64_t x14; + fiat_np256_uint1 x15; + uint64_t x16; + fiat_np256_uint1 x17; + fiat_np256_subborrowx_u64(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_np256_subborrowx_u64(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_np256_subborrowx_u64(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_np256_subborrowx_u64(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_np256_cmovznz_u64(&x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_np256_addcarryx_u64(&x10, &x11, 0x0, x1, (x9 & UINT64_C(0xf3b9cac2fc632551))); + fiat_np256_addcarryx_u64(&x12, &x13, x11, x3, (x9 & UINT64_C(0xbce6faada7179e84))); + fiat_np256_addcarryx_u64(&x14, &x15, x13, x5, x9); + fiat_np256_addcarryx_u64(&x16, &x17, x15, x7, (x9 & UINT64_C(0xffffffff00000000))); + out1[0] = x10; + out1[1] = x12; + out1[2] = x14; + out1[3] = x16; +} + +/* + * The function fiat_np256_from_montgomery translates a field element out of the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^64)⁻¹ mod m)^4) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np256_from_montgomery(uint64_t out1[4], const uint64_t arg1[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + fiat_np256_uint1 x13; + uint64_t x14; + fiat_np256_uint1 x15; + uint64_t x16; + fiat_np256_uint1 x17; + uint64_t x18; + fiat_np256_uint1 x19; + uint64_t x20; + fiat_np256_uint1 x21; + uint64_t x22; + fiat_np256_uint1 x23; + uint64_t x24; + fiat_np256_uint1 x25; + uint64_t x26; + fiat_np256_uint1 x27; + uint64_t x28; + fiat_np256_uint1 x29; + uint64_t x30; + fiat_np256_uint1 x31; + uint64_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + fiat_np256_uint1 x43; + uint64_t x44; + fiat_np256_uint1 x45; + uint64_t x46; + fiat_np256_uint1 x47; + uint64_t x48; + fiat_np256_uint1 x49; + uint64_t x50; + fiat_np256_uint1 x51; + uint64_t x52; + fiat_np256_uint1 x53; + uint64_t x54; + fiat_np256_uint1 x55; + uint64_t x56; + fiat_np256_uint1 x57; + uint64_t x58; + fiat_np256_uint1 x59; + uint64_t x60; + fiat_np256_uint1 x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + uint64_t x65; + uint64_t x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + fiat_np256_uint1 x73; + uint64_t x74; + fiat_np256_uint1 x75; + uint64_t x76; + fiat_np256_uint1 x77; + uint64_t x78; + fiat_np256_uint1 x79; + uint64_t x80; + fiat_np256_uint1 x81; + uint64_t x82; + fiat_np256_uint1 x83; + uint64_t x84; + fiat_np256_uint1 x85; + uint64_t x86; + fiat_np256_uint1 x87; + uint64_t x88; + fiat_np256_uint1 x89; + uint64_t x90; + fiat_np256_uint1 x91; + uint64_t x92; + uint64_t x93; + uint64_t x94; + uint64_t x95; + uint64_t x96; + uint64_t x97; + uint64_t x98; + uint64_t x99; + uint64_t x100; + uint64_t x101; + uint64_t x102; + fiat_np256_uint1 x103; + uint64_t x104; + fiat_np256_uint1 x105; + uint64_t x106; + fiat_np256_uint1 x107; + uint64_t x108; + fiat_np256_uint1 x109; + uint64_t x110; + fiat_np256_uint1 x111; + uint64_t x112; + fiat_np256_uint1 x113; + uint64_t x114; + fiat_np256_uint1 x115; + uint64_t x116; + uint64_t x117; + fiat_np256_uint1 x118; + uint64_t x119; + fiat_np256_uint1 x120; + uint64_t x121; + fiat_np256_uint1 x122; + uint64_t x123; + fiat_np256_uint1 x124; + uint64_t x125; + fiat_np256_uint1 x126; + uint64_t x127; + uint64_t x128; + uint64_t x129; + uint64_t x130; + x1 = (arg1[0]); + fiat_np256_mulx_u64(&x2, &x3, x1, UINT64_C(0xccd1c8aaee00bc4f)); + fiat_np256_mulx_u64(&x4, &x5, x2, UINT64_C(0xffffffff00000000)); + fiat_np256_mulx_u64(&x6, &x7, x2, UINT64_C(0xffffffffffffffff)); + fiat_np256_mulx_u64(&x8, &x9, x2, UINT64_C(0xbce6faada7179e84)); + fiat_np256_mulx_u64(&x10, &x11, x2, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_addcarryx_u64(&x12, &x13, 0x0, x11, x8); + fiat_np256_addcarryx_u64(&x14, &x15, x13, x9, x6); + fiat_np256_addcarryx_u64(&x16, &x17, x15, x7, x4); + fiat_np256_addcarryx_u64(&x18, &x19, 0x0, x1, x10); + fiat_np256_addcarryx_u64(&x20, &x21, x19, 0x0, x12); + fiat_np256_addcarryx_u64(&x22, &x23, x21, 0x0, x14); + fiat_np256_addcarryx_u64(&x24, &x25, x23, 0x0, x16); + fiat_np256_addcarryx_u64(&x26, &x27, 0x0, x20, (arg1[1])); + fiat_np256_addcarryx_u64(&x28, &x29, x27, x22, 0x0); + fiat_np256_addcarryx_u64(&x30, &x31, x29, x24, 0x0); + fiat_np256_mulx_u64(&x32, &x33, x26, UINT64_C(0xccd1c8aaee00bc4f)); + fiat_np256_mulx_u64(&x34, &x35, x32, UINT64_C(0xffffffff00000000)); + fiat_np256_mulx_u64(&x36, &x37, x32, UINT64_C(0xffffffffffffffff)); + fiat_np256_mulx_u64(&x38, &x39, x32, UINT64_C(0xbce6faada7179e84)); + fiat_np256_mulx_u64(&x40, &x41, x32, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_addcarryx_u64(&x42, &x43, 0x0, x41, x38); + fiat_np256_addcarryx_u64(&x44, &x45, x43, x39, x36); + fiat_np256_addcarryx_u64(&x46, &x47, x45, x37, x34); + fiat_np256_addcarryx_u64(&x48, &x49, 0x0, x26, x40); + fiat_np256_addcarryx_u64(&x50, &x51, x49, x28, x42); + fiat_np256_addcarryx_u64(&x52, &x53, x51, x30, x44); + fiat_np256_addcarryx_u64(&x54, &x55, x53, (x31 + (x25 + (x17 + x5))), x46); + fiat_np256_addcarryx_u64(&x56, &x57, 0x0, x50, (arg1[2])); + fiat_np256_addcarryx_u64(&x58, &x59, x57, x52, 0x0); + fiat_np256_addcarryx_u64(&x60, &x61, x59, x54, 0x0); + fiat_np256_mulx_u64(&x62, &x63, x56, UINT64_C(0xccd1c8aaee00bc4f)); + fiat_np256_mulx_u64(&x64, &x65, x62, UINT64_C(0xffffffff00000000)); + fiat_np256_mulx_u64(&x66, &x67, x62, UINT64_C(0xffffffffffffffff)); + fiat_np256_mulx_u64(&x68, &x69, x62, UINT64_C(0xbce6faada7179e84)); + fiat_np256_mulx_u64(&x70, &x71, x62, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_addcarryx_u64(&x72, &x73, 0x0, x71, x68); + fiat_np256_addcarryx_u64(&x74, &x75, x73, x69, x66); + fiat_np256_addcarryx_u64(&x76, &x77, x75, x67, x64); + fiat_np256_addcarryx_u64(&x78, &x79, 0x0, x56, x70); + fiat_np256_addcarryx_u64(&x80, &x81, x79, x58, x72); + fiat_np256_addcarryx_u64(&x82, &x83, x81, x60, x74); + fiat_np256_addcarryx_u64(&x84, &x85, x83, (x61 + (x55 + (x47 + x35))), x76); + fiat_np256_addcarryx_u64(&x86, &x87, 0x0, x80, (arg1[3])); + fiat_np256_addcarryx_u64(&x88, &x89, x87, x82, 0x0); + fiat_np256_addcarryx_u64(&x90, &x91, x89, x84, 0x0); + fiat_np256_mulx_u64(&x92, &x93, x86, UINT64_C(0xccd1c8aaee00bc4f)); + fiat_np256_mulx_u64(&x94, &x95, x92, UINT64_C(0xffffffff00000000)); + fiat_np256_mulx_u64(&x96, &x97, x92, UINT64_C(0xffffffffffffffff)); + fiat_np256_mulx_u64(&x98, &x99, x92, UINT64_C(0xbce6faada7179e84)); + fiat_np256_mulx_u64(&x100, &x101, x92, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_addcarryx_u64(&x102, &x103, 0x0, x101, x98); + fiat_np256_addcarryx_u64(&x104, &x105, x103, x99, x96); + fiat_np256_addcarryx_u64(&x106, &x107, x105, x97, x94); + fiat_np256_addcarryx_u64(&x108, &x109, 0x0, x86, x100); + fiat_np256_addcarryx_u64(&x110, &x111, x109, x88, x102); + fiat_np256_addcarryx_u64(&x112, &x113, x111, x90, x104); + fiat_np256_addcarryx_u64(&x114, &x115, x113, (x91 + (x85 + (x77 + x65))), x106); + x116 = (x115 + (x107 + x95)); + fiat_np256_subborrowx_u64(&x117, &x118, 0x0, x110, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_subborrowx_u64(&x119, &x120, x118, x112, UINT64_C(0xbce6faada7179e84)); + fiat_np256_subborrowx_u64(&x121, &x122, x120, x114, UINT64_C(0xffffffffffffffff)); + fiat_np256_subborrowx_u64(&x123, &x124, x122, x116, UINT64_C(0xffffffff00000000)); + fiat_np256_subborrowx_u64(&x125, &x126, x124, 0x0, 0x0); + fiat_np256_cmovznz_u64(&x127, x126, x117, x110); + fiat_np256_cmovznz_u64(&x128, x126, x119, x112); + fiat_np256_cmovznz_u64(&x129, x126, x121, x114); + fiat_np256_cmovznz_u64(&x130, x126, x123, x116); + out1[0] = x127; + out1[1] = x128; + out1[2] = x129; + out1[3] = x130; +} + +/* + * The function fiat_np256_to_montgomery translates a field element into the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np256_to_montgomery(uint64_t out1[4], const uint64_t arg1[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + fiat_np256_uint1 x14; + uint64_t x15; + fiat_np256_uint1 x16; + uint64_t x17; + fiat_np256_uint1 x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + fiat_np256_uint1 x30; + uint64_t x31; + fiat_np256_uint1 x32; + uint64_t x33; + fiat_np256_uint1 x34; + uint64_t x35; + fiat_np256_uint1 x36; + uint64_t x37; + fiat_np256_uint1 x38; + uint64_t x39; + fiat_np256_uint1 x40; + uint64_t x41; + fiat_np256_uint1 x42; + uint64_t x43; + fiat_np256_uint1 x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + fiat_np256_uint1 x54; + uint64_t x55; + fiat_np256_uint1 x56; + uint64_t x57; + fiat_np256_uint1 x58; + uint64_t x59; + fiat_np256_uint1 x60; + uint64_t x61; + fiat_np256_uint1 x62; + uint64_t x63; + fiat_np256_uint1 x64; + uint64_t x65; + fiat_np256_uint1 x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + fiat_np256_uint1 x78; + uint64_t x79; + fiat_np256_uint1 x80; + uint64_t x81; + fiat_np256_uint1 x82; + uint64_t x83; + fiat_np256_uint1 x84; + uint64_t x85; + fiat_np256_uint1 x86; + uint64_t x87; + fiat_np256_uint1 x88; + uint64_t x89; + fiat_np256_uint1 x90; + uint64_t x91; + fiat_np256_uint1 x92; + uint64_t x93; + uint64_t x94; + uint64_t x95; + uint64_t x96; + uint64_t x97; + uint64_t x98; + uint64_t x99; + uint64_t x100; + uint64_t x101; + fiat_np256_uint1 x102; + uint64_t x103; + fiat_np256_uint1 x104; + uint64_t x105; + fiat_np256_uint1 x106; + uint64_t x107; + fiat_np256_uint1 x108; + uint64_t x109; + fiat_np256_uint1 x110; + uint64_t x111; + fiat_np256_uint1 x112; + uint64_t x113; + fiat_np256_uint1 x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + uint64_t x121; + uint64_t x122; + uint64_t x123; + uint64_t x124; + uint64_t x125; + fiat_np256_uint1 x126; + uint64_t x127; + fiat_np256_uint1 x128; + uint64_t x129; + fiat_np256_uint1 x130; + uint64_t x131; + fiat_np256_uint1 x132; + uint64_t x133; + fiat_np256_uint1 x134; + uint64_t x135; + fiat_np256_uint1 x136; + uint64_t x137; + fiat_np256_uint1 x138; + uint64_t x139; + fiat_np256_uint1 x140; + uint64_t x141; + uint64_t x142; + uint64_t x143; + uint64_t x144; + uint64_t x145; + uint64_t x146; + uint64_t x147; + uint64_t x148; + uint64_t x149; + fiat_np256_uint1 x150; + uint64_t x151; + fiat_np256_uint1 x152; + uint64_t x153; + fiat_np256_uint1 x154; + uint64_t x155; + fiat_np256_uint1 x156; + uint64_t x157; + fiat_np256_uint1 x158; + uint64_t x159; + fiat_np256_uint1 x160; + uint64_t x161; + fiat_np256_uint1 x162; + uint64_t x163; + uint64_t x164; + uint64_t x165; + uint64_t x166; + uint64_t x167; + uint64_t x168; + uint64_t x169; + uint64_t x170; + uint64_t x171; + uint64_t x172; + uint64_t x173; + fiat_np256_uint1 x174; + uint64_t x175; + fiat_np256_uint1 x176; + uint64_t x177; + fiat_np256_uint1 x178; + uint64_t x179; + fiat_np256_uint1 x180; + uint64_t x181; + fiat_np256_uint1 x182; + uint64_t x183; + fiat_np256_uint1 x184; + uint64_t x185; + fiat_np256_uint1 x186; + uint64_t x187; + fiat_np256_uint1 x188; + uint64_t x189; + fiat_np256_uint1 x190; + uint64_t x191; + fiat_np256_uint1 x192; + uint64_t x193; + fiat_np256_uint1 x194; + uint64_t x195; + fiat_np256_uint1 x196; + uint64_t x197; + fiat_np256_uint1 x198; + uint64_t x199; + uint64_t x200; + uint64_t x201; + uint64_t x202; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[0]); + fiat_np256_mulx_u64(&x5, &x6, x4, UINT64_C(0x66e12d94f3d95620)); + fiat_np256_mulx_u64(&x7, &x8, x4, UINT64_C(0x2845b2392b6bec59)); + fiat_np256_mulx_u64(&x9, &x10, x4, UINT64_C(0x4699799c49bd6fa6)); + fiat_np256_mulx_u64(&x11, &x12, x4, UINT64_C(0x83244c95be79eea2)); + fiat_np256_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + fiat_np256_addcarryx_u64(&x15, &x16, x14, x10, x7); + fiat_np256_addcarryx_u64(&x17, &x18, x16, x8, x5); + fiat_np256_mulx_u64(&x19, &x20, x11, UINT64_C(0xccd1c8aaee00bc4f)); + fiat_np256_mulx_u64(&x21, &x22, x19, UINT64_C(0xffffffff00000000)); + fiat_np256_mulx_u64(&x23, &x24, x19, UINT64_C(0xffffffffffffffff)); + fiat_np256_mulx_u64(&x25, &x26, x19, UINT64_C(0xbce6faada7179e84)); + fiat_np256_mulx_u64(&x27, &x28, x19, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_addcarryx_u64(&x29, &x30, 0x0, x28, x25); + fiat_np256_addcarryx_u64(&x31, &x32, x30, x26, x23); + fiat_np256_addcarryx_u64(&x33, &x34, x32, x24, x21); + fiat_np256_addcarryx_u64(&x35, &x36, 0x0, x11, x27); + fiat_np256_addcarryx_u64(&x37, &x38, x36, x13, x29); + fiat_np256_addcarryx_u64(&x39, &x40, x38, x15, x31); + fiat_np256_addcarryx_u64(&x41, &x42, x40, x17, x33); + fiat_np256_addcarryx_u64(&x43, &x44, x42, (x18 + x6), (x34 + x22)); + fiat_np256_mulx_u64(&x45, &x46, x1, UINT64_C(0x66e12d94f3d95620)); + fiat_np256_mulx_u64(&x47, &x48, x1, UINT64_C(0x2845b2392b6bec59)); + fiat_np256_mulx_u64(&x49, &x50, x1, UINT64_C(0x4699799c49bd6fa6)); + fiat_np256_mulx_u64(&x51, &x52, x1, UINT64_C(0x83244c95be79eea2)); + fiat_np256_addcarryx_u64(&x53, &x54, 0x0, x52, x49); + fiat_np256_addcarryx_u64(&x55, &x56, x54, x50, x47); + fiat_np256_addcarryx_u64(&x57, &x58, x56, x48, x45); + fiat_np256_addcarryx_u64(&x59, &x60, 0x0, x37, x51); + fiat_np256_addcarryx_u64(&x61, &x62, x60, x39, x53); + fiat_np256_addcarryx_u64(&x63, &x64, x62, x41, x55); + fiat_np256_addcarryx_u64(&x65, &x66, x64, x43, x57); + fiat_np256_mulx_u64(&x67, &x68, x59, UINT64_C(0xccd1c8aaee00bc4f)); + fiat_np256_mulx_u64(&x69, &x70, x67, UINT64_C(0xffffffff00000000)); + fiat_np256_mulx_u64(&x71, &x72, x67, UINT64_C(0xffffffffffffffff)); + fiat_np256_mulx_u64(&x73, &x74, x67, UINT64_C(0xbce6faada7179e84)); + fiat_np256_mulx_u64(&x75, &x76, x67, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_addcarryx_u64(&x77, &x78, 0x0, x76, x73); + fiat_np256_addcarryx_u64(&x79, &x80, x78, x74, x71); + fiat_np256_addcarryx_u64(&x81, &x82, x80, x72, x69); + fiat_np256_addcarryx_u64(&x83, &x84, 0x0, x59, x75); + fiat_np256_addcarryx_u64(&x85, &x86, x84, x61, x77); + fiat_np256_addcarryx_u64(&x87, &x88, x86, x63, x79); + fiat_np256_addcarryx_u64(&x89, &x90, x88, x65, x81); + fiat_np256_addcarryx_u64(&x91, &x92, x90, (((uint64_t)x66 + x44) + (x58 + x46)), (x82 + x70)); + fiat_np256_mulx_u64(&x93, &x94, x2, UINT64_C(0x66e12d94f3d95620)); + fiat_np256_mulx_u64(&x95, &x96, x2, UINT64_C(0x2845b2392b6bec59)); + fiat_np256_mulx_u64(&x97, &x98, x2, UINT64_C(0x4699799c49bd6fa6)); + fiat_np256_mulx_u64(&x99, &x100, x2, UINT64_C(0x83244c95be79eea2)); + fiat_np256_addcarryx_u64(&x101, &x102, 0x0, x100, x97); + fiat_np256_addcarryx_u64(&x103, &x104, x102, x98, x95); + fiat_np256_addcarryx_u64(&x105, &x106, x104, x96, x93); + fiat_np256_addcarryx_u64(&x107, &x108, 0x0, x85, x99); + fiat_np256_addcarryx_u64(&x109, &x110, x108, x87, x101); + fiat_np256_addcarryx_u64(&x111, &x112, x110, x89, x103); + fiat_np256_addcarryx_u64(&x113, &x114, x112, x91, x105); + fiat_np256_mulx_u64(&x115, &x116, x107, UINT64_C(0xccd1c8aaee00bc4f)); + fiat_np256_mulx_u64(&x117, &x118, x115, UINT64_C(0xffffffff00000000)); + fiat_np256_mulx_u64(&x119, &x120, x115, UINT64_C(0xffffffffffffffff)); + fiat_np256_mulx_u64(&x121, &x122, x115, UINT64_C(0xbce6faada7179e84)); + fiat_np256_mulx_u64(&x123, &x124, x115, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_addcarryx_u64(&x125, &x126, 0x0, x124, x121); + fiat_np256_addcarryx_u64(&x127, &x128, x126, x122, x119); + fiat_np256_addcarryx_u64(&x129, &x130, x128, x120, x117); + fiat_np256_addcarryx_u64(&x131, &x132, 0x0, x107, x123); + fiat_np256_addcarryx_u64(&x133, &x134, x132, x109, x125); + fiat_np256_addcarryx_u64(&x135, &x136, x134, x111, x127); + fiat_np256_addcarryx_u64(&x137, &x138, x136, x113, x129); + fiat_np256_addcarryx_u64(&x139, &x140, x138, (((uint64_t)x114 + x92) + (x106 + x94)), (x130 + x118)); + fiat_np256_mulx_u64(&x141, &x142, x3, UINT64_C(0x66e12d94f3d95620)); + fiat_np256_mulx_u64(&x143, &x144, x3, UINT64_C(0x2845b2392b6bec59)); + fiat_np256_mulx_u64(&x145, &x146, x3, UINT64_C(0x4699799c49bd6fa6)); + fiat_np256_mulx_u64(&x147, &x148, x3, UINT64_C(0x83244c95be79eea2)); + fiat_np256_addcarryx_u64(&x149, &x150, 0x0, x148, x145); + fiat_np256_addcarryx_u64(&x151, &x152, x150, x146, x143); + fiat_np256_addcarryx_u64(&x153, &x154, x152, x144, x141); + fiat_np256_addcarryx_u64(&x155, &x156, 0x0, x133, x147); + fiat_np256_addcarryx_u64(&x157, &x158, x156, x135, x149); + fiat_np256_addcarryx_u64(&x159, &x160, x158, x137, x151); + fiat_np256_addcarryx_u64(&x161, &x162, x160, x139, x153); + fiat_np256_mulx_u64(&x163, &x164, x155, UINT64_C(0xccd1c8aaee00bc4f)); + fiat_np256_mulx_u64(&x165, &x166, x163, UINT64_C(0xffffffff00000000)); + fiat_np256_mulx_u64(&x167, &x168, x163, UINT64_C(0xffffffffffffffff)); + fiat_np256_mulx_u64(&x169, &x170, x163, UINT64_C(0xbce6faada7179e84)); + fiat_np256_mulx_u64(&x171, &x172, x163, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_addcarryx_u64(&x173, &x174, 0x0, x172, x169); + fiat_np256_addcarryx_u64(&x175, &x176, x174, x170, x167); + fiat_np256_addcarryx_u64(&x177, &x178, x176, x168, x165); + fiat_np256_addcarryx_u64(&x179, &x180, 0x0, x155, x171); + fiat_np256_addcarryx_u64(&x181, &x182, x180, x157, x173); + fiat_np256_addcarryx_u64(&x183, &x184, x182, x159, x175); + fiat_np256_addcarryx_u64(&x185, &x186, x184, x161, x177); + fiat_np256_addcarryx_u64(&x187, &x188, x186, (((uint64_t)x162 + x140) + (x154 + x142)), (x178 + x166)); + fiat_np256_subborrowx_u64(&x189, &x190, 0x0, x181, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_subborrowx_u64(&x191, &x192, x190, x183, UINT64_C(0xbce6faada7179e84)); + fiat_np256_subborrowx_u64(&x193, &x194, x192, x185, UINT64_C(0xffffffffffffffff)); + fiat_np256_subborrowx_u64(&x195, &x196, x194, x187, UINT64_C(0xffffffff00000000)); + fiat_np256_subborrowx_u64(&x197, &x198, x196, x188, 0x0); + fiat_np256_cmovznz_u64(&x199, x198, x189, x181); + fiat_np256_cmovznz_u64(&x200, x198, x191, x183); + fiat_np256_cmovznz_u64(&x201, x198, x193, x185); + fiat_np256_cmovznz_u64(&x202, x198, x195, x187); + out1[0] = x199; + out1[1] = x200; + out1[2] = x201; + out1[3] = x202; +} + +/* + * The function fiat_np256_set_one returns the field element one in the Montgomery domain. + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np256_set_one(uint64_t out1[4]) { + out1[0] = UINT64_C(0xc46353d039cdaaf); + out1[1] = UINT64_C(0x4319055258e8617b); + out1[2] = 0x0; + out1[3] = UINT32_C(0xffffffff); +} + +/* + * The function fiat_np256_msat returns the saturated represtation of the prime modulus. + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np256_msat(uint64_t out1[5]) { + out1[0] = UINT64_C(0xf3b9cac2fc632551); + out1[1] = UINT64_C(0xbce6faada7179e84); + out1[2] = UINT64_C(0xffffffffffffffff); + out1[3] = UINT64_C(0xffffffff00000000); + out1[4] = 0x0; +} + +/* + * The function fiat_np256_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if (log2 m) + 1 < 46 then ⌊(49 * ((log2 m) + 1) + 80) / 17⌋ else ⌊(49 * ((log2 m) + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np256_divstep_precomp(uint64_t out1[4]) { + out1[0] = UINT64_C(0xd739262fb7fcfbb5); + out1[1] = UINT64_C(0x8ac6f75d20074414); + out1[2] = UINT64_C(0xc67428bfb5e3c256); + out1[3] = UINT64_C(0x444962f2eda7aedf); +} + +/* + * The function fiat_np256_divstep computes a divstep. + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np256_divstep(uint64_t* out1, uint64_t out2[5], uint64_t out3[5], uint64_t out4[4], uint64_t out5[4], uint64_t arg1, const uint64_t arg2[5], const uint64_t arg3[5], const uint64_t arg4[4], const uint64_t arg5[4]) { + uint64_t x1; + fiat_np256_uint1 x2; + fiat_np256_uint1 x3; + uint64_t x4; + fiat_np256_uint1 x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + fiat_np256_uint1 x13; + uint64_t x14; + fiat_np256_uint1 x15; + uint64_t x16; + fiat_np256_uint1 x17; + uint64_t x18; + fiat_np256_uint1 x19; + uint64_t x20; + fiat_np256_uint1 x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + fiat_np256_uint1 x32; + uint64_t x33; + fiat_np256_uint1 x34; + uint64_t x35; + fiat_np256_uint1 x36; + uint64_t x37; + fiat_np256_uint1 x38; + uint64_t x39; + fiat_np256_uint1 x40; + uint64_t x41; + fiat_np256_uint1 x42; + uint64_t x43; + fiat_np256_uint1 x44; + uint64_t x45; + fiat_np256_uint1 x46; + uint64_t x47; + fiat_np256_uint1 x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + fiat_np256_uint1 x54; + uint64_t x55; + fiat_np256_uint1 x56; + uint64_t x57; + fiat_np256_uint1 x58; + uint64_t x59; + fiat_np256_uint1 x60; + uint64_t x61; + uint64_t x62; + fiat_np256_uint1 x63; + uint64_t x64; + fiat_np256_uint1 x65; + uint64_t x66; + fiat_np256_uint1 x67; + uint64_t x68; + fiat_np256_uint1 x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + fiat_np256_uint1 x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + fiat_np256_uint1 x81; + uint64_t x82; + fiat_np256_uint1 x83; + uint64_t x84; + fiat_np256_uint1 x85; + uint64_t x86; + fiat_np256_uint1 x87; + uint64_t x88; + fiat_np256_uint1 x89; + uint64_t x90; + uint64_t x91; + uint64_t x92; + uint64_t x93; + uint64_t x94; + fiat_np256_uint1 x95; + uint64_t x96; + fiat_np256_uint1 x97; + uint64_t x98; + fiat_np256_uint1 x99; + uint64_t x100; + fiat_np256_uint1 x101; + uint64_t x102; + fiat_np256_uint1 x103; + uint64_t x104; + fiat_np256_uint1 x105; + uint64_t x106; + fiat_np256_uint1 x107; + uint64_t x108; + fiat_np256_uint1 x109; + uint64_t x110; + fiat_np256_uint1 x111; + uint64_t x112; + fiat_np256_uint1 x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + uint64_t x121; + uint64_t x122; + uint64_t x123; + uint64_t x124; + uint64_t x125; + uint64_t x126; + fiat_np256_addcarryx_u64(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_np256_uint1)((fiat_np256_uint1)(x1 >> 63) & (fiat_np256_uint1)((arg3[0]) & 0x1)); + fiat_np256_addcarryx_u64(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_np256_cmovznz_u64(&x6, x3, arg1, x4); + fiat_np256_cmovznz_u64(&x7, x3, (arg2[0]), (arg3[0])); + fiat_np256_cmovznz_u64(&x8, x3, (arg2[1]), (arg3[1])); + fiat_np256_cmovznz_u64(&x9, x3, (arg2[2]), (arg3[2])); + fiat_np256_cmovznz_u64(&x10, x3, (arg2[3]), (arg3[3])); + fiat_np256_cmovznz_u64(&x11, x3, (arg2[4]), (arg3[4])); + fiat_np256_addcarryx_u64(&x12, &x13, 0x0, 0x1, (~(arg2[0]))); + fiat_np256_addcarryx_u64(&x14, &x15, x13, 0x0, (~(arg2[1]))); + fiat_np256_addcarryx_u64(&x16, &x17, x15, 0x0, (~(arg2[2]))); + fiat_np256_addcarryx_u64(&x18, &x19, x17, 0x0, (~(arg2[3]))); + fiat_np256_addcarryx_u64(&x20, &x21, x19, 0x0, (~(arg2[4]))); + fiat_np256_cmovznz_u64(&x22, x3, (arg3[0]), x12); + fiat_np256_cmovznz_u64(&x23, x3, (arg3[1]), x14); + fiat_np256_cmovznz_u64(&x24, x3, (arg3[2]), x16); + fiat_np256_cmovznz_u64(&x25, x3, (arg3[3]), x18); + fiat_np256_cmovznz_u64(&x26, x3, (arg3[4]), x20); + fiat_np256_cmovznz_u64(&x27, x3, (arg4[0]), (arg5[0])); + fiat_np256_cmovznz_u64(&x28, x3, (arg4[1]), (arg5[1])); + fiat_np256_cmovznz_u64(&x29, x3, (arg4[2]), (arg5[2])); + fiat_np256_cmovznz_u64(&x30, x3, (arg4[3]), (arg5[3])); + fiat_np256_addcarryx_u64(&x31, &x32, 0x0, x27, x27); + fiat_np256_addcarryx_u64(&x33, &x34, x32, x28, x28); + fiat_np256_addcarryx_u64(&x35, &x36, x34, x29, x29); + fiat_np256_addcarryx_u64(&x37, &x38, x36, x30, x30); + fiat_np256_subborrowx_u64(&x39, &x40, 0x0, x31, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_subborrowx_u64(&x41, &x42, x40, x33, UINT64_C(0xbce6faada7179e84)); + fiat_np256_subborrowx_u64(&x43, &x44, x42, x35, UINT64_C(0xffffffffffffffff)); + fiat_np256_subborrowx_u64(&x45, &x46, x44, x37, UINT64_C(0xffffffff00000000)); + fiat_np256_subborrowx_u64(&x47, &x48, x46, x38, 0x0); + x49 = (arg4[3]); + x50 = (arg4[2]); + x51 = (arg4[1]); + x52 = (arg4[0]); + fiat_np256_subborrowx_u64(&x53, &x54, 0x0, 0x0, x52); + fiat_np256_subborrowx_u64(&x55, &x56, x54, 0x0, x51); + fiat_np256_subborrowx_u64(&x57, &x58, x56, 0x0, x50); + fiat_np256_subborrowx_u64(&x59, &x60, x58, 0x0, x49); + fiat_np256_cmovznz_u64(&x61, x60, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_np256_addcarryx_u64(&x62, &x63, 0x0, x53, (x61 & UINT64_C(0xf3b9cac2fc632551))); + fiat_np256_addcarryx_u64(&x64, &x65, x63, x55, (x61 & UINT64_C(0xbce6faada7179e84))); + fiat_np256_addcarryx_u64(&x66, &x67, x65, x57, x61); + fiat_np256_addcarryx_u64(&x68, &x69, x67, x59, (x61 & UINT64_C(0xffffffff00000000))); + fiat_np256_cmovznz_u64(&x70, x3, (arg5[0]), x62); + fiat_np256_cmovznz_u64(&x71, x3, (arg5[1]), x64); + fiat_np256_cmovznz_u64(&x72, x3, (arg5[2]), x66); + fiat_np256_cmovznz_u64(&x73, x3, (arg5[3]), x68); + x74 = (fiat_np256_uint1)(x22 & 0x1); + fiat_np256_cmovznz_u64(&x75, x74, 0x0, x7); + fiat_np256_cmovznz_u64(&x76, x74, 0x0, x8); + fiat_np256_cmovznz_u64(&x77, x74, 0x0, x9); + fiat_np256_cmovznz_u64(&x78, x74, 0x0, x10); + fiat_np256_cmovznz_u64(&x79, x74, 0x0, x11); + fiat_np256_addcarryx_u64(&x80, &x81, 0x0, x22, x75); + fiat_np256_addcarryx_u64(&x82, &x83, x81, x23, x76); + fiat_np256_addcarryx_u64(&x84, &x85, x83, x24, x77); + fiat_np256_addcarryx_u64(&x86, &x87, x85, x25, x78); + fiat_np256_addcarryx_u64(&x88, &x89, x87, x26, x79); + fiat_np256_cmovznz_u64(&x90, x74, 0x0, x27); + fiat_np256_cmovznz_u64(&x91, x74, 0x0, x28); + fiat_np256_cmovznz_u64(&x92, x74, 0x0, x29); + fiat_np256_cmovznz_u64(&x93, x74, 0x0, x30); + fiat_np256_addcarryx_u64(&x94, &x95, 0x0, x70, x90); + fiat_np256_addcarryx_u64(&x96, &x97, x95, x71, x91); + fiat_np256_addcarryx_u64(&x98, &x99, x97, x72, x92); + fiat_np256_addcarryx_u64(&x100, &x101, x99, x73, x93); + fiat_np256_subborrowx_u64(&x102, &x103, 0x0, x94, UINT64_C(0xf3b9cac2fc632551)); + fiat_np256_subborrowx_u64(&x104, &x105, x103, x96, UINT64_C(0xbce6faada7179e84)); + fiat_np256_subborrowx_u64(&x106, &x107, x105, x98, UINT64_C(0xffffffffffffffff)); + fiat_np256_subborrowx_u64(&x108, &x109, x107, x100, UINT64_C(0xffffffff00000000)); + fiat_np256_subborrowx_u64(&x110, &x111, x109, x101, 0x0); + fiat_np256_addcarryx_u64(&x112, &x113, 0x0, x6, 0x1); + x114 = ((x80 >> 1) | ((x82 << 63) & UINT64_C(0xffffffffffffffff))); + x115 = ((x82 >> 1) | ((x84 << 63) & UINT64_C(0xffffffffffffffff))); + x116 = ((x84 >> 1) | ((x86 << 63) & UINT64_C(0xffffffffffffffff))); + x117 = ((x86 >> 1) | ((x88 << 63) & UINT64_C(0xffffffffffffffff))); + x118 = ((x88 & UINT64_C(0x8000000000000000)) | (x88 >> 1)); + fiat_np256_cmovznz_u64(&x119, x48, x39, x31); + fiat_np256_cmovznz_u64(&x120, x48, x41, x33); + fiat_np256_cmovznz_u64(&x121, x48, x43, x35); + fiat_np256_cmovznz_u64(&x122, x48, x45, x37); + fiat_np256_cmovznz_u64(&x123, x111, x102, x94); + fiat_np256_cmovznz_u64(&x124, x111, x104, x96); + fiat_np256_cmovznz_u64(&x125, x111, x106, x98); + fiat_np256_cmovznz_u64(&x126, x111, x108, x100); + *out1 = x112; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out3[0] = x114; + out3[1] = x115; + out3[2] = x116; + out3[3] = x117; + out3[4] = x118; + out4[0] = x119; + out4[1] = x120; + out4[2] = x121; + out4[3] = x122; + out5[0] = x123; + out5[1] = x124; + out5[2] = x125; + out5[3] = x126; +} + +/* + * The function fiat_np256_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + */ +static void fiat_np256_to_bytes(uint8_t out1[32], const uint64_t arg1[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint8_t x5; + uint64_t x6; + uint8_t x7; + uint64_t x8; + uint8_t x9; + uint64_t x10; + uint8_t x11; + uint64_t x12; + uint8_t x13; + uint64_t x14; + uint8_t x15; + uint64_t x16; + uint8_t x17; + uint8_t x18; + uint8_t x19; + uint64_t x20; + uint8_t x21; + uint64_t x22; + uint8_t x23; + uint64_t x24; + uint8_t x25; + uint64_t x26; + uint8_t x27; + uint64_t x28; + uint8_t x29; + uint64_t x30; + uint8_t x31; + uint8_t x32; + uint8_t x33; + uint64_t x34; + uint8_t x35; + uint64_t x36; + uint8_t x37; + uint64_t x38; + uint8_t x39; + uint64_t x40; + uint8_t x41; + uint64_t x42; + uint8_t x43; + uint64_t x44; + uint8_t x45; + uint8_t x46; + uint8_t x47; + uint64_t x48; + uint8_t x49; + uint64_t x50; + uint8_t x51; + uint64_t x52; + uint8_t x53; + uint64_t x54; + uint8_t x55; + uint64_t x56; + uint8_t x57; + uint64_t x58; + uint8_t x59; + uint8_t x60; + x1 = (arg1[3]); + x2 = (arg1[2]); + x3 = (arg1[1]); + x4 = (arg1[0]); + x5 = (uint8_t)(x4 & UINT8_C(0xff)); + x6 = (x4 >> 8); + x7 = (uint8_t)(x6 & UINT8_C(0xff)); + x8 = (x6 >> 8); + x9 = (uint8_t)(x8 & UINT8_C(0xff)); + x10 = (x8 >> 8); + x11 = (uint8_t)(x10 & UINT8_C(0xff)); + x12 = (x10 >> 8); + x13 = (uint8_t)(x12 & UINT8_C(0xff)); + x14 = (x12 >> 8); + x15 = (uint8_t)(x14 & UINT8_C(0xff)); + x16 = (x14 >> 8); + x17 = (uint8_t)(x16 & UINT8_C(0xff)); + x18 = (uint8_t)(x16 >> 8); + x19 = (uint8_t)(x3 & UINT8_C(0xff)); + x20 = (x3 >> 8); + x21 = (uint8_t)(x20 & UINT8_C(0xff)); + x22 = (x20 >> 8); + x23 = (uint8_t)(x22 & UINT8_C(0xff)); + x24 = (x22 >> 8); + x25 = (uint8_t)(x24 & UINT8_C(0xff)); + x26 = (x24 >> 8); + x27 = (uint8_t)(x26 & UINT8_C(0xff)); + x28 = (x26 >> 8); + x29 = (uint8_t)(x28 & UINT8_C(0xff)); + x30 = (x28 >> 8); + x31 = (uint8_t)(x30 & UINT8_C(0xff)); + x32 = (uint8_t)(x30 >> 8); + x33 = (uint8_t)(x2 & UINT8_C(0xff)); + x34 = (x2 >> 8); + x35 = (uint8_t)(x34 & UINT8_C(0xff)); + x36 = (x34 >> 8); + x37 = (uint8_t)(x36 & UINT8_C(0xff)); + x38 = (x36 >> 8); + x39 = (uint8_t)(x38 & UINT8_C(0xff)); + x40 = (x38 >> 8); + x41 = (uint8_t)(x40 & UINT8_C(0xff)); + x42 = (x40 >> 8); + x43 = (uint8_t)(x42 & UINT8_C(0xff)); + x44 = (x42 >> 8); + x45 = (uint8_t)(x44 & UINT8_C(0xff)); + x46 = (uint8_t)(x44 >> 8); + x47 = (uint8_t)(x1 & UINT8_C(0xff)); + x48 = (x1 >> 8); + x49 = (uint8_t)(x48 & UINT8_C(0xff)); + x50 = (x48 >> 8); + x51 = (uint8_t)(x50 & UINT8_C(0xff)); + x52 = (x50 >> 8); + x53 = (uint8_t)(x52 & UINT8_C(0xff)); + x54 = (x52 >> 8); + x55 = (uint8_t)(x54 & UINT8_C(0xff)); + x56 = (x54 >> 8); + x57 = (uint8_t)(x56 & UINT8_C(0xff)); + x58 = (x56 >> 8); + x59 = (uint8_t)(x58 & UINT8_C(0xff)); + x60 = (uint8_t)(x58 >> 8); + out1[0] = x5; + out1[1] = x7; + out1[2] = x9; + out1[3] = x11; + out1[4] = x13; + out1[5] = x15; + out1[6] = x17; + out1[7] = x18; + out1[8] = x19; + out1[9] = x21; + out1[10] = x23; + out1[11] = x25; + out1[12] = x27; + out1[13] = x29; + out1[14] = x31; + out1[15] = x32; + out1[16] = x33; + out1[17] = x35; + out1[18] = x37; + out1[19] = x39; + out1[20] = x41; + out1[21] = x43; + out1[22] = x45; + out1[23] = x46; + out1[24] = x47; + out1[25] = x49; + out1[26] = x51; + out1[27] = x53; + out1[28] = x55; + out1[29] = x57; + out1[30] = x59; + out1[31] = x60; +} + +/* + * The function fiat_np256_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np256_from_bytes(uint64_t out1[4], const uint8_t arg1[32]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint8_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint8_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint8_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint8_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint64_t x57; + uint64_t x58; + uint64_t x59; + uint64_t x60; + x1 = ((uint64_t)(arg1[31]) << 56); + x2 = ((uint64_t)(arg1[30]) << 48); + x3 = ((uint64_t)(arg1[29]) << 40); + x4 = ((uint64_t)(arg1[28]) << 32); + x5 = ((uint64_t)(arg1[27]) << 24); + x6 = ((uint64_t)(arg1[26]) << 16); + x7 = ((uint64_t)(arg1[25]) << 8); + x8 = (arg1[24]); + x9 = ((uint64_t)(arg1[23]) << 56); + x10 = ((uint64_t)(arg1[22]) << 48); + x11 = ((uint64_t)(arg1[21]) << 40); + x12 = ((uint64_t)(arg1[20]) << 32); + x13 = ((uint64_t)(arg1[19]) << 24); + x14 = ((uint64_t)(arg1[18]) << 16); + x15 = ((uint64_t)(arg1[17]) << 8); + x16 = (arg1[16]); + x17 = ((uint64_t)(arg1[15]) << 56); + x18 = ((uint64_t)(arg1[14]) << 48); + x19 = ((uint64_t)(arg1[13]) << 40); + x20 = ((uint64_t)(arg1[12]) << 32); + x21 = ((uint64_t)(arg1[11]) << 24); + x22 = ((uint64_t)(arg1[10]) << 16); + x23 = ((uint64_t)(arg1[9]) << 8); + x24 = (arg1[8]); + x25 = ((uint64_t)(arg1[7]) << 56); + x26 = ((uint64_t)(arg1[6]) << 48); + x27 = ((uint64_t)(arg1[5]) << 40); + x28 = ((uint64_t)(arg1[4]) << 32); + x29 = ((uint64_t)(arg1[3]) << 24); + x30 = ((uint64_t)(arg1[2]) << 16); + x31 = ((uint64_t)(arg1[1]) << 8); + x32 = (arg1[0]); + x33 = (x31 + (uint64_t)x32); + x34 = (x30 + x33); + x35 = (x29 + x34); + x36 = (x28 + x35); + x37 = (x27 + x36); + x38 = (x26 + x37); + x39 = (x25 + x38); + x40 = (x23 + (uint64_t)x24); + x41 = (x22 + x40); + x42 = (x21 + x41); + x43 = (x20 + x42); + x44 = (x19 + x43); + x45 = (x18 + x44); + x46 = (x17 + x45); + x47 = (x15 + (uint64_t)x16); + x48 = (x14 + x47); + x49 = (x13 + x48); + x50 = (x12 + x49); + x51 = (x11 + x50); + x52 = (x10 + x51); + x53 = (x9 + x52); + x54 = (x7 + (uint64_t)x8); + x55 = (x6 + x54); + x56 = (x5 + x55); + x57 = (x4 + x56); + x58 = (x3 + x57); + x59 = (x2 + x58); + x60 = (x1 + x59); + out1[0] = x39; + out1[1] = x46; + out1[2] = x53; + out1[3] = x60; +} + diff --git a/ec/native/np256_stubs.c b/ec/native/np256_stubs.c new file mode 100644 index 00000000..cd4aa30d --- /dev/null +++ b/ec/native/np256_stubs.c @@ -0,0 +1,76 @@ +#include "mirage_crypto.h" + +#ifdef ARCH_64BIT +#include "np256_64.h" +#define LIMBS 4 +#define WORD uint64_t +#define WORDSIZE 64 +#else +#include "np256_32.h" +#define LIMBS 8 +#define WORD uint32_t +#define WORDSIZE 32 +#endif + +#define LEN_PRIME 256 +#define CURVE_DESCRIPTION fiat_np256 + +#include "inversion_template.h" + +#include + +CAMLprim value mc_np256_inv(value out, value in) +{ + CAMLparam2(out, in); + inversion(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np256_mul(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_np256_mul(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np256_add(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_np256_add(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np256_one(value out) +{ + CAMLparam1(out); + fiat_np256_set_one(Caml_ba_data_val(out)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np256_from_bytes(value out, value in) +{ + CAMLparam2(out, in); + fiat_np256_from_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np256_to_bytes(value out, value in) +{ + CAMLparam2(out, in); + fiat_np256_to_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np256_from_montgomery(value out, value in) +{ + CAMLparam2(out, in); + fiat_np256_from_montgomery(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np256_to_montgomery(value out, value in) +{ + CAMLparam2(out, in); + fiat_np256_to_montgomery(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} diff --git a/ec/native/np384_32.h b/ec/native/np384_32.h new file mode 100644 index 00000000..dd52bdca --- /dev/null +++ b/ec/native/np384_32.h @@ -0,0 +1,8781 @@ +/* Autogenerated: '../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery' --static --use-value-barrier np384 32 0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 mul add opp from_montgomery to_montgomery one msat divstep_precomp divstep to_bytes from_bytes */ +/* curve description: np384 */ +/* machine_wordsize = 32 (from "32") */ +/* requested operations: mul, add, opp, from_montgomery, to_montgomery, one, msat, divstep_precomp, divstep, to_bytes, from_bytes */ +/* m = 0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 (from "0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 32) + (z[2] << 64) + (z[3] << 96) + (z[4] << 128) + (z[5] << 160) + (z[6] << 192) + (z[7] << 224) + (z[8] << 256) + (z[9] << 0x120) + (z[10] << 0x140) + (z[11] << 0x160) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) + (z[32] << 256) + (z[33] << 0x108) + (z[34] << 0x110) + (z[35] << 0x118) + (z[36] << 0x120) + (z[37] << 0x128) + (z[38] << 0x130) + (z[39] << 0x138) + (z[40] << 0x140) + (z[41] << 0x148) + (z[42] << 0x150) + (z[43] << 0x158) + (z[44] << 0x160) + (z[45] << 0x168) + (z[46] << 0x170) + (z[47] << 0x178) */ + +#include +typedef unsigned char fiat_np384_uint1; +typedef signed char fiat_np384_int1; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_NP384_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint32_t fiat_np384_value_barrier_u32(uint32_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_np384_value_barrier_u32(x) (x) +#endif + + +/* + * The function fiat_np384_addcarryx_u32 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^32 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_np384_addcarryx_u32(uint32_t* out1, fiat_np384_uint1* out2, fiat_np384_uint1 arg1, uint32_t arg2, uint32_t arg3) { + uint64_t x1; + uint32_t x2; + fiat_np384_uint1 x3; + x1 = ((arg1 + (uint64_t)arg2) + arg3); + x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + x3 = (fiat_np384_uint1)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_np384_subborrowx_u32 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^32 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_np384_subborrowx_u32(uint32_t* out1, fiat_np384_uint1* out2, fiat_np384_uint1 arg1, uint32_t arg2, uint32_t arg3) { + int64_t x1; + fiat_np384_int1 x2; + uint32_t x3; + x1 = ((arg2 - (int64_t)arg1) - arg3); + x2 = (fiat_np384_int1)(x1 >> 32); + x3 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + *out1 = x3; + *out2 = (fiat_np384_uint1)(0x0 - x2); +} + +/* + * The function fiat_np384_mulx_u32 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^32 + * out2 = ⌊arg1 * arg2 / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0xffffffff] + */ +static void fiat_np384_mulx_u32(uint32_t* out1, uint32_t* out2, uint32_t arg1, uint32_t arg2) { + uint64_t x1; + uint32_t x2; + uint32_t x3; + x1 = ((uint64_t)arg1 * arg2); + x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + x3 = (uint32_t)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_np384_cmovznz_u32 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static void fiat_np384_cmovznz_u32(uint32_t* out1, fiat_np384_uint1 arg1, uint32_t arg2, uint32_t arg3) { + fiat_np384_uint1 x1; + uint32_t x2; + uint32_t x3; + x1 = (!(!arg1)); + x2 = ((fiat_np384_int1)(0x0 - x1) & UINT32_C(0xffffffff)); + x3 = ((fiat_np384_value_barrier_u32(x2) & arg3) | (fiat_np384_value_barrier_u32((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_np384_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np384_mul(uint32_t out1[12], const uint32_t arg1[12], const uint32_t arg2[12]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint32_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + fiat_np384_uint1 x38; + uint32_t x39; + fiat_np384_uint1 x40; + uint32_t x41; + fiat_np384_uint1 x42; + uint32_t x43; + fiat_np384_uint1 x44; + uint32_t x45; + fiat_np384_uint1 x46; + uint32_t x47; + fiat_np384_uint1 x48; + uint32_t x49; + fiat_np384_uint1 x50; + uint32_t x51; + fiat_np384_uint1 x52; + uint32_t x53; + fiat_np384_uint1 x54; + uint32_t x55; + fiat_np384_uint1 x56; + uint32_t x57; + fiat_np384_uint1 x58; + uint32_t x59; + uint32_t x60; + uint32_t x61; + uint32_t x62; + uint32_t x63; + uint32_t x64; + uint32_t x65; + uint32_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + uint32_t x81; + uint32_t x82; + uint32_t x83; + uint32_t x84; + uint32_t x85; + uint32_t x86; + fiat_np384_uint1 x87; + uint32_t x88; + fiat_np384_uint1 x89; + uint32_t x90; + fiat_np384_uint1 x91; + uint32_t x92; + fiat_np384_uint1 x93; + uint32_t x94; + fiat_np384_uint1 x95; + uint32_t x96; + fiat_np384_uint1 x97; + uint32_t x98; + fiat_np384_uint1 x99; + uint32_t x100; + fiat_np384_uint1 x101; + uint32_t x102; + fiat_np384_uint1 x103; + uint32_t x104; + fiat_np384_uint1 x105; + uint32_t x106; + fiat_np384_uint1 x107; + uint32_t x108; + uint32_t x109; + fiat_np384_uint1 x110; + uint32_t x111; + fiat_np384_uint1 x112; + uint32_t x113; + fiat_np384_uint1 x114; + uint32_t x115; + fiat_np384_uint1 x116; + uint32_t x117; + fiat_np384_uint1 x118; + uint32_t x119; + fiat_np384_uint1 x120; + uint32_t x121; + fiat_np384_uint1 x122; + uint32_t x123; + fiat_np384_uint1 x124; + uint32_t x125; + fiat_np384_uint1 x126; + uint32_t x127; + fiat_np384_uint1 x128; + uint32_t x129; + fiat_np384_uint1 x130; + uint32_t x131; + fiat_np384_uint1 x132; + uint32_t x133; + fiat_np384_uint1 x134; + uint32_t x135; + uint32_t x136; + uint32_t x137; + uint32_t x138; + uint32_t x139; + uint32_t x140; + uint32_t x141; + uint32_t x142; + uint32_t x143; + uint32_t x144; + uint32_t x145; + uint32_t x146; + uint32_t x147; + uint32_t x148; + uint32_t x149; + uint32_t x150; + uint32_t x151; + uint32_t x152; + uint32_t x153; + uint32_t x154; + uint32_t x155; + uint32_t x156; + uint32_t x157; + uint32_t x158; + uint32_t x159; + fiat_np384_uint1 x160; + uint32_t x161; + fiat_np384_uint1 x162; + uint32_t x163; + fiat_np384_uint1 x164; + uint32_t x165; + fiat_np384_uint1 x166; + uint32_t x167; + fiat_np384_uint1 x168; + uint32_t x169; + fiat_np384_uint1 x170; + uint32_t x171; + fiat_np384_uint1 x172; + uint32_t x173; + fiat_np384_uint1 x174; + uint32_t x175; + fiat_np384_uint1 x176; + uint32_t x177; + fiat_np384_uint1 x178; + uint32_t x179; + fiat_np384_uint1 x180; + uint32_t x181; + uint32_t x182; + fiat_np384_uint1 x183; + uint32_t x184; + fiat_np384_uint1 x185; + uint32_t x186; + fiat_np384_uint1 x187; + uint32_t x188; + fiat_np384_uint1 x189; + uint32_t x190; + fiat_np384_uint1 x191; + uint32_t x192; + fiat_np384_uint1 x193; + uint32_t x194; + fiat_np384_uint1 x195; + uint32_t x196; + fiat_np384_uint1 x197; + uint32_t x198; + fiat_np384_uint1 x199; + uint32_t x200; + fiat_np384_uint1 x201; + uint32_t x202; + fiat_np384_uint1 x203; + uint32_t x204; + fiat_np384_uint1 x205; + uint32_t x206; + fiat_np384_uint1 x207; + uint32_t x208; + uint32_t x209; + uint32_t x210; + uint32_t x211; + uint32_t x212; + uint32_t x213; + uint32_t x214; + uint32_t x215; + uint32_t x216; + uint32_t x217; + uint32_t x218; + uint32_t x219; + uint32_t x220; + uint32_t x221; + uint32_t x222; + uint32_t x223; + uint32_t x224; + uint32_t x225; + uint32_t x226; + uint32_t x227; + uint32_t x228; + uint32_t x229; + uint32_t x230; + uint32_t x231; + uint32_t x232; + uint32_t x233; + uint32_t x234; + fiat_np384_uint1 x235; + uint32_t x236; + fiat_np384_uint1 x237; + uint32_t x238; + fiat_np384_uint1 x239; + uint32_t x240; + fiat_np384_uint1 x241; + uint32_t x242; + fiat_np384_uint1 x243; + uint32_t x244; + fiat_np384_uint1 x245; + uint32_t x246; + fiat_np384_uint1 x247; + uint32_t x248; + fiat_np384_uint1 x249; + uint32_t x250; + fiat_np384_uint1 x251; + uint32_t x252; + fiat_np384_uint1 x253; + uint32_t x254; + fiat_np384_uint1 x255; + uint32_t x256; + uint32_t x257; + fiat_np384_uint1 x258; + uint32_t x259; + fiat_np384_uint1 x260; + uint32_t x261; + fiat_np384_uint1 x262; + uint32_t x263; + fiat_np384_uint1 x264; + uint32_t x265; + fiat_np384_uint1 x266; + uint32_t x267; + fiat_np384_uint1 x268; + uint32_t x269; + fiat_np384_uint1 x270; + uint32_t x271; + fiat_np384_uint1 x272; + uint32_t x273; + fiat_np384_uint1 x274; + uint32_t x275; + fiat_np384_uint1 x276; + uint32_t x277; + fiat_np384_uint1 x278; + uint32_t x279; + fiat_np384_uint1 x280; + uint32_t x281; + fiat_np384_uint1 x282; + uint32_t x283; + uint32_t x284; + uint32_t x285; + uint32_t x286; + uint32_t x287; + uint32_t x288; + uint32_t x289; + uint32_t x290; + uint32_t x291; + uint32_t x292; + uint32_t x293; + uint32_t x294; + uint32_t x295; + uint32_t x296; + uint32_t x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + uint32_t x303; + uint32_t x304; + uint32_t x305; + uint32_t x306; + uint32_t x307; + uint32_t x308; + fiat_np384_uint1 x309; + uint32_t x310; + fiat_np384_uint1 x311; + uint32_t x312; + fiat_np384_uint1 x313; + uint32_t x314; + fiat_np384_uint1 x315; + uint32_t x316; + fiat_np384_uint1 x317; + uint32_t x318; + fiat_np384_uint1 x319; + uint32_t x320; + fiat_np384_uint1 x321; + uint32_t x322; + fiat_np384_uint1 x323; + uint32_t x324; + fiat_np384_uint1 x325; + uint32_t x326; + fiat_np384_uint1 x327; + uint32_t x328; + fiat_np384_uint1 x329; + uint32_t x330; + uint32_t x331; + fiat_np384_uint1 x332; + uint32_t x333; + fiat_np384_uint1 x334; + uint32_t x335; + fiat_np384_uint1 x336; + uint32_t x337; + fiat_np384_uint1 x338; + uint32_t x339; + fiat_np384_uint1 x340; + uint32_t x341; + fiat_np384_uint1 x342; + uint32_t x343; + fiat_np384_uint1 x344; + uint32_t x345; + fiat_np384_uint1 x346; + uint32_t x347; + fiat_np384_uint1 x348; + uint32_t x349; + fiat_np384_uint1 x350; + uint32_t x351; + fiat_np384_uint1 x352; + uint32_t x353; + fiat_np384_uint1 x354; + uint32_t x355; + fiat_np384_uint1 x356; + uint32_t x357; + uint32_t x358; + uint32_t x359; + uint32_t x360; + uint32_t x361; + uint32_t x362; + uint32_t x363; + uint32_t x364; + uint32_t x365; + uint32_t x366; + uint32_t x367; + uint32_t x368; + uint32_t x369; + uint32_t x370; + uint32_t x371; + uint32_t x372; + uint32_t x373; + uint32_t x374; + uint32_t x375; + uint32_t x376; + uint32_t x377; + uint32_t x378; + uint32_t x379; + uint32_t x380; + uint32_t x381; + uint32_t x382; + uint32_t x383; + fiat_np384_uint1 x384; + uint32_t x385; + fiat_np384_uint1 x386; + uint32_t x387; + fiat_np384_uint1 x388; + uint32_t x389; + fiat_np384_uint1 x390; + uint32_t x391; + fiat_np384_uint1 x392; + uint32_t x393; + fiat_np384_uint1 x394; + uint32_t x395; + fiat_np384_uint1 x396; + uint32_t x397; + fiat_np384_uint1 x398; + uint32_t x399; + fiat_np384_uint1 x400; + uint32_t x401; + fiat_np384_uint1 x402; + uint32_t x403; + fiat_np384_uint1 x404; + uint32_t x405; + uint32_t x406; + fiat_np384_uint1 x407; + uint32_t x408; + fiat_np384_uint1 x409; + uint32_t x410; + fiat_np384_uint1 x411; + uint32_t x412; + fiat_np384_uint1 x413; + uint32_t x414; + fiat_np384_uint1 x415; + uint32_t x416; + fiat_np384_uint1 x417; + uint32_t x418; + fiat_np384_uint1 x419; + uint32_t x420; + fiat_np384_uint1 x421; + uint32_t x422; + fiat_np384_uint1 x423; + uint32_t x424; + fiat_np384_uint1 x425; + uint32_t x426; + fiat_np384_uint1 x427; + uint32_t x428; + fiat_np384_uint1 x429; + uint32_t x430; + fiat_np384_uint1 x431; + uint32_t x432; + uint32_t x433; + uint32_t x434; + uint32_t x435; + uint32_t x436; + uint32_t x437; + uint32_t x438; + uint32_t x439; + uint32_t x440; + uint32_t x441; + uint32_t x442; + uint32_t x443; + uint32_t x444; + uint32_t x445; + uint32_t x446; + uint32_t x447; + uint32_t x448; + uint32_t x449; + uint32_t x450; + uint32_t x451; + uint32_t x452; + uint32_t x453; + uint32_t x454; + uint32_t x455; + uint32_t x456; + uint32_t x457; + fiat_np384_uint1 x458; + uint32_t x459; + fiat_np384_uint1 x460; + uint32_t x461; + fiat_np384_uint1 x462; + uint32_t x463; + fiat_np384_uint1 x464; + uint32_t x465; + fiat_np384_uint1 x466; + uint32_t x467; + fiat_np384_uint1 x468; + uint32_t x469; + fiat_np384_uint1 x470; + uint32_t x471; + fiat_np384_uint1 x472; + uint32_t x473; + fiat_np384_uint1 x474; + uint32_t x475; + fiat_np384_uint1 x476; + uint32_t x477; + fiat_np384_uint1 x478; + uint32_t x479; + uint32_t x480; + fiat_np384_uint1 x481; + uint32_t x482; + fiat_np384_uint1 x483; + uint32_t x484; + fiat_np384_uint1 x485; + uint32_t x486; + fiat_np384_uint1 x487; + uint32_t x488; + fiat_np384_uint1 x489; + uint32_t x490; + fiat_np384_uint1 x491; + uint32_t x492; + fiat_np384_uint1 x493; + uint32_t x494; + fiat_np384_uint1 x495; + uint32_t x496; + fiat_np384_uint1 x497; + uint32_t x498; + fiat_np384_uint1 x499; + uint32_t x500; + fiat_np384_uint1 x501; + uint32_t x502; + fiat_np384_uint1 x503; + uint32_t x504; + fiat_np384_uint1 x505; + uint32_t x506; + uint32_t x507; + uint32_t x508; + uint32_t x509; + uint32_t x510; + uint32_t x511; + uint32_t x512; + uint32_t x513; + uint32_t x514; + uint32_t x515; + uint32_t x516; + uint32_t x517; + uint32_t x518; + uint32_t x519; + uint32_t x520; + uint32_t x521; + uint32_t x522; + uint32_t x523; + uint32_t x524; + uint32_t x525; + uint32_t x526; + uint32_t x527; + uint32_t x528; + uint32_t x529; + uint32_t x530; + uint32_t x531; + uint32_t x532; + fiat_np384_uint1 x533; + uint32_t x534; + fiat_np384_uint1 x535; + uint32_t x536; + fiat_np384_uint1 x537; + uint32_t x538; + fiat_np384_uint1 x539; + uint32_t x540; + fiat_np384_uint1 x541; + uint32_t x542; + fiat_np384_uint1 x543; + uint32_t x544; + fiat_np384_uint1 x545; + uint32_t x546; + fiat_np384_uint1 x547; + uint32_t x548; + fiat_np384_uint1 x549; + uint32_t x550; + fiat_np384_uint1 x551; + uint32_t x552; + fiat_np384_uint1 x553; + uint32_t x554; + uint32_t x555; + fiat_np384_uint1 x556; + uint32_t x557; + fiat_np384_uint1 x558; + uint32_t x559; + fiat_np384_uint1 x560; + uint32_t x561; + fiat_np384_uint1 x562; + uint32_t x563; + fiat_np384_uint1 x564; + uint32_t x565; + fiat_np384_uint1 x566; + uint32_t x567; + fiat_np384_uint1 x568; + uint32_t x569; + fiat_np384_uint1 x570; + uint32_t x571; + fiat_np384_uint1 x572; + uint32_t x573; + fiat_np384_uint1 x574; + uint32_t x575; + fiat_np384_uint1 x576; + uint32_t x577; + fiat_np384_uint1 x578; + uint32_t x579; + fiat_np384_uint1 x580; + uint32_t x581; + uint32_t x582; + uint32_t x583; + uint32_t x584; + uint32_t x585; + uint32_t x586; + uint32_t x587; + uint32_t x588; + uint32_t x589; + uint32_t x590; + uint32_t x591; + uint32_t x592; + uint32_t x593; + uint32_t x594; + uint32_t x595; + uint32_t x596; + uint32_t x597; + uint32_t x598; + uint32_t x599; + uint32_t x600; + uint32_t x601; + uint32_t x602; + uint32_t x603; + uint32_t x604; + uint32_t x605; + uint32_t x606; + fiat_np384_uint1 x607; + uint32_t x608; + fiat_np384_uint1 x609; + uint32_t x610; + fiat_np384_uint1 x611; + uint32_t x612; + fiat_np384_uint1 x613; + uint32_t x614; + fiat_np384_uint1 x615; + uint32_t x616; + fiat_np384_uint1 x617; + uint32_t x618; + fiat_np384_uint1 x619; + uint32_t x620; + fiat_np384_uint1 x621; + uint32_t x622; + fiat_np384_uint1 x623; + uint32_t x624; + fiat_np384_uint1 x625; + uint32_t x626; + fiat_np384_uint1 x627; + uint32_t x628; + uint32_t x629; + fiat_np384_uint1 x630; + uint32_t x631; + fiat_np384_uint1 x632; + uint32_t x633; + fiat_np384_uint1 x634; + uint32_t x635; + fiat_np384_uint1 x636; + uint32_t x637; + fiat_np384_uint1 x638; + uint32_t x639; + fiat_np384_uint1 x640; + uint32_t x641; + fiat_np384_uint1 x642; + uint32_t x643; + fiat_np384_uint1 x644; + uint32_t x645; + fiat_np384_uint1 x646; + uint32_t x647; + fiat_np384_uint1 x648; + uint32_t x649; + fiat_np384_uint1 x650; + uint32_t x651; + fiat_np384_uint1 x652; + uint32_t x653; + fiat_np384_uint1 x654; + uint32_t x655; + uint32_t x656; + uint32_t x657; + uint32_t x658; + uint32_t x659; + uint32_t x660; + uint32_t x661; + uint32_t x662; + uint32_t x663; + uint32_t x664; + uint32_t x665; + uint32_t x666; + uint32_t x667; + uint32_t x668; + uint32_t x669; + uint32_t x670; + uint32_t x671; + uint32_t x672; + uint32_t x673; + uint32_t x674; + uint32_t x675; + uint32_t x676; + uint32_t x677; + uint32_t x678; + uint32_t x679; + uint32_t x680; + uint32_t x681; + fiat_np384_uint1 x682; + uint32_t x683; + fiat_np384_uint1 x684; + uint32_t x685; + fiat_np384_uint1 x686; + uint32_t x687; + fiat_np384_uint1 x688; + uint32_t x689; + fiat_np384_uint1 x690; + uint32_t x691; + fiat_np384_uint1 x692; + uint32_t x693; + fiat_np384_uint1 x694; + uint32_t x695; + fiat_np384_uint1 x696; + uint32_t x697; + fiat_np384_uint1 x698; + uint32_t x699; + fiat_np384_uint1 x700; + uint32_t x701; + fiat_np384_uint1 x702; + uint32_t x703; + uint32_t x704; + fiat_np384_uint1 x705; + uint32_t x706; + fiat_np384_uint1 x707; + uint32_t x708; + fiat_np384_uint1 x709; + uint32_t x710; + fiat_np384_uint1 x711; + uint32_t x712; + fiat_np384_uint1 x713; + uint32_t x714; + fiat_np384_uint1 x715; + uint32_t x716; + fiat_np384_uint1 x717; + uint32_t x718; + fiat_np384_uint1 x719; + uint32_t x720; + fiat_np384_uint1 x721; + uint32_t x722; + fiat_np384_uint1 x723; + uint32_t x724; + fiat_np384_uint1 x725; + uint32_t x726; + fiat_np384_uint1 x727; + uint32_t x728; + fiat_np384_uint1 x729; + uint32_t x730; + uint32_t x731; + uint32_t x732; + uint32_t x733; + uint32_t x734; + uint32_t x735; + uint32_t x736; + uint32_t x737; + uint32_t x738; + uint32_t x739; + uint32_t x740; + uint32_t x741; + uint32_t x742; + uint32_t x743; + uint32_t x744; + uint32_t x745; + uint32_t x746; + uint32_t x747; + uint32_t x748; + uint32_t x749; + uint32_t x750; + uint32_t x751; + uint32_t x752; + uint32_t x753; + uint32_t x754; + uint32_t x755; + fiat_np384_uint1 x756; + uint32_t x757; + fiat_np384_uint1 x758; + uint32_t x759; + fiat_np384_uint1 x760; + uint32_t x761; + fiat_np384_uint1 x762; + uint32_t x763; + fiat_np384_uint1 x764; + uint32_t x765; + fiat_np384_uint1 x766; + uint32_t x767; + fiat_np384_uint1 x768; + uint32_t x769; + fiat_np384_uint1 x770; + uint32_t x771; + fiat_np384_uint1 x772; + uint32_t x773; + fiat_np384_uint1 x774; + uint32_t x775; + fiat_np384_uint1 x776; + uint32_t x777; + uint32_t x778; + fiat_np384_uint1 x779; + uint32_t x780; + fiat_np384_uint1 x781; + uint32_t x782; + fiat_np384_uint1 x783; + uint32_t x784; + fiat_np384_uint1 x785; + uint32_t x786; + fiat_np384_uint1 x787; + uint32_t x788; + fiat_np384_uint1 x789; + uint32_t x790; + fiat_np384_uint1 x791; + uint32_t x792; + fiat_np384_uint1 x793; + uint32_t x794; + fiat_np384_uint1 x795; + uint32_t x796; + fiat_np384_uint1 x797; + uint32_t x798; + fiat_np384_uint1 x799; + uint32_t x800; + fiat_np384_uint1 x801; + uint32_t x802; + fiat_np384_uint1 x803; + uint32_t x804; + uint32_t x805; + uint32_t x806; + uint32_t x807; + uint32_t x808; + uint32_t x809; + uint32_t x810; + uint32_t x811; + uint32_t x812; + uint32_t x813; + uint32_t x814; + uint32_t x815; + uint32_t x816; + uint32_t x817; + uint32_t x818; + uint32_t x819; + uint32_t x820; + uint32_t x821; + uint32_t x822; + uint32_t x823; + uint32_t x824; + uint32_t x825; + uint32_t x826; + uint32_t x827; + uint32_t x828; + uint32_t x829; + uint32_t x830; + fiat_np384_uint1 x831; + uint32_t x832; + fiat_np384_uint1 x833; + uint32_t x834; + fiat_np384_uint1 x835; + uint32_t x836; + fiat_np384_uint1 x837; + uint32_t x838; + fiat_np384_uint1 x839; + uint32_t x840; + fiat_np384_uint1 x841; + uint32_t x842; + fiat_np384_uint1 x843; + uint32_t x844; + fiat_np384_uint1 x845; + uint32_t x846; + fiat_np384_uint1 x847; + uint32_t x848; + fiat_np384_uint1 x849; + uint32_t x850; + fiat_np384_uint1 x851; + uint32_t x852; + uint32_t x853; + fiat_np384_uint1 x854; + uint32_t x855; + fiat_np384_uint1 x856; + uint32_t x857; + fiat_np384_uint1 x858; + uint32_t x859; + fiat_np384_uint1 x860; + uint32_t x861; + fiat_np384_uint1 x862; + uint32_t x863; + fiat_np384_uint1 x864; + uint32_t x865; + fiat_np384_uint1 x866; + uint32_t x867; + fiat_np384_uint1 x868; + uint32_t x869; + fiat_np384_uint1 x870; + uint32_t x871; + fiat_np384_uint1 x872; + uint32_t x873; + fiat_np384_uint1 x874; + uint32_t x875; + fiat_np384_uint1 x876; + uint32_t x877; + fiat_np384_uint1 x878; + uint32_t x879; + uint32_t x880; + uint32_t x881; + uint32_t x882; + uint32_t x883; + uint32_t x884; + uint32_t x885; + uint32_t x886; + uint32_t x887; + uint32_t x888; + uint32_t x889; + uint32_t x890; + uint32_t x891; + uint32_t x892; + uint32_t x893; + uint32_t x894; + uint32_t x895; + uint32_t x896; + uint32_t x897; + uint32_t x898; + uint32_t x899; + uint32_t x900; + uint32_t x901; + uint32_t x902; + uint32_t x903; + uint32_t x904; + fiat_np384_uint1 x905; + uint32_t x906; + fiat_np384_uint1 x907; + uint32_t x908; + fiat_np384_uint1 x909; + uint32_t x910; + fiat_np384_uint1 x911; + uint32_t x912; + fiat_np384_uint1 x913; + uint32_t x914; + fiat_np384_uint1 x915; + uint32_t x916; + fiat_np384_uint1 x917; + uint32_t x918; + fiat_np384_uint1 x919; + uint32_t x920; + fiat_np384_uint1 x921; + uint32_t x922; + fiat_np384_uint1 x923; + uint32_t x924; + fiat_np384_uint1 x925; + uint32_t x926; + uint32_t x927; + fiat_np384_uint1 x928; + uint32_t x929; + fiat_np384_uint1 x930; + uint32_t x931; + fiat_np384_uint1 x932; + uint32_t x933; + fiat_np384_uint1 x934; + uint32_t x935; + fiat_np384_uint1 x936; + uint32_t x937; + fiat_np384_uint1 x938; + uint32_t x939; + fiat_np384_uint1 x940; + uint32_t x941; + fiat_np384_uint1 x942; + uint32_t x943; + fiat_np384_uint1 x944; + uint32_t x945; + fiat_np384_uint1 x946; + uint32_t x947; + fiat_np384_uint1 x948; + uint32_t x949; + fiat_np384_uint1 x950; + uint32_t x951; + fiat_np384_uint1 x952; + uint32_t x953; + uint32_t x954; + uint32_t x955; + uint32_t x956; + uint32_t x957; + uint32_t x958; + uint32_t x959; + uint32_t x960; + uint32_t x961; + uint32_t x962; + uint32_t x963; + uint32_t x964; + uint32_t x965; + uint32_t x966; + uint32_t x967; + uint32_t x968; + uint32_t x969; + uint32_t x970; + uint32_t x971; + uint32_t x972; + uint32_t x973; + uint32_t x974; + uint32_t x975; + uint32_t x976; + uint32_t x977; + uint32_t x978; + uint32_t x979; + fiat_np384_uint1 x980; + uint32_t x981; + fiat_np384_uint1 x982; + uint32_t x983; + fiat_np384_uint1 x984; + uint32_t x985; + fiat_np384_uint1 x986; + uint32_t x987; + fiat_np384_uint1 x988; + uint32_t x989; + fiat_np384_uint1 x990; + uint32_t x991; + fiat_np384_uint1 x992; + uint32_t x993; + fiat_np384_uint1 x994; + uint32_t x995; + fiat_np384_uint1 x996; + uint32_t x997; + fiat_np384_uint1 x998; + uint32_t x999; + fiat_np384_uint1 x1000; + uint32_t x1001; + uint32_t x1002; + fiat_np384_uint1 x1003; + uint32_t x1004; + fiat_np384_uint1 x1005; + uint32_t x1006; + fiat_np384_uint1 x1007; + uint32_t x1008; + fiat_np384_uint1 x1009; + uint32_t x1010; + fiat_np384_uint1 x1011; + uint32_t x1012; + fiat_np384_uint1 x1013; + uint32_t x1014; + fiat_np384_uint1 x1015; + uint32_t x1016; + fiat_np384_uint1 x1017; + uint32_t x1018; + fiat_np384_uint1 x1019; + uint32_t x1020; + fiat_np384_uint1 x1021; + uint32_t x1022; + fiat_np384_uint1 x1023; + uint32_t x1024; + fiat_np384_uint1 x1025; + uint32_t x1026; + fiat_np384_uint1 x1027; + uint32_t x1028; + uint32_t x1029; + uint32_t x1030; + uint32_t x1031; + uint32_t x1032; + uint32_t x1033; + uint32_t x1034; + uint32_t x1035; + uint32_t x1036; + uint32_t x1037; + uint32_t x1038; + uint32_t x1039; + uint32_t x1040; + uint32_t x1041; + uint32_t x1042; + uint32_t x1043; + uint32_t x1044; + uint32_t x1045; + uint32_t x1046; + uint32_t x1047; + uint32_t x1048; + uint32_t x1049; + uint32_t x1050; + uint32_t x1051; + uint32_t x1052; + uint32_t x1053; + fiat_np384_uint1 x1054; + uint32_t x1055; + fiat_np384_uint1 x1056; + uint32_t x1057; + fiat_np384_uint1 x1058; + uint32_t x1059; + fiat_np384_uint1 x1060; + uint32_t x1061; + fiat_np384_uint1 x1062; + uint32_t x1063; + fiat_np384_uint1 x1064; + uint32_t x1065; + fiat_np384_uint1 x1066; + uint32_t x1067; + fiat_np384_uint1 x1068; + uint32_t x1069; + fiat_np384_uint1 x1070; + uint32_t x1071; + fiat_np384_uint1 x1072; + uint32_t x1073; + fiat_np384_uint1 x1074; + uint32_t x1075; + uint32_t x1076; + fiat_np384_uint1 x1077; + uint32_t x1078; + fiat_np384_uint1 x1079; + uint32_t x1080; + fiat_np384_uint1 x1081; + uint32_t x1082; + fiat_np384_uint1 x1083; + uint32_t x1084; + fiat_np384_uint1 x1085; + uint32_t x1086; + fiat_np384_uint1 x1087; + uint32_t x1088; + fiat_np384_uint1 x1089; + uint32_t x1090; + fiat_np384_uint1 x1091; + uint32_t x1092; + fiat_np384_uint1 x1093; + uint32_t x1094; + fiat_np384_uint1 x1095; + uint32_t x1096; + fiat_np384_uint1 x1097; + uint32_t x1098; + fiat_np384_uint1 x1099; + uint32_t x1100; + fiat_np384_uint1 x1101; + uint32_t x1102; + uint32_t x1103; + uint32_t x1104; + uint32_t x1105; + uint32_t x1106; + uint32_t x1107; + uint32_t x1108; + uint32_t x1109; + uint32_t x1110; + uint32_t x1111; + uint32_t x1112; + uint32_t x1113; + uint32_t x1114; + uint32_t x1115; + uint32_t x1116; + uint32_t x1117; + uint32_t x1118; + uint32_t x1119; + uint32_t x1120; + uint32_t x1121; + uint32_t x1122; + uint32_t x1123; + uint32_t x1124; + uint32_t x1125; + uint32_t x1126; + uint32_t x1127; + uint32_t x1128; + fiat_np384_uint1 x1129; + uint32_t x1130; + fiat_np384_uint1 x1131; + uint32_t x1132; + fiat_np384_uint1 x1133; + uint32_t x1134; + fiat_np384_uint1 x1135; + uint32_t x1136; + fiat_np384_uint1 x1137; + uint32_t x1138; + fiat_np384_uint1 x1139; + uint32_t x1140; + fiat_np384_uint1 x1141; + uint32_t x1142; + fiat_np384_uint1 x1143; + uint32_t x1144; + fiat_np384_uint1 x1145; + uint32_t x1146; + fiat_np384_uint1 x1147; + uint32_t x1148; + fiat_np384_uint1 x1149; + uint32_t x1150; + uint32_t x1151; + fiat_np384_uint1 x1152; + uint32_t x1153; + fiat_np384_uint1 x1154; + uint32_t x1155; + fiat_np384_uint1 x1156; + uint32_t x1157; + fiat_np384_uint1 x1158; + uint32_t x1159; + fiat_np384_uint1 x1160; + uint32_t x1161; + fiat_np384_uint1 x1162; + uint32_t x1163; + fiat_np384_uint1 x1164; + uint32_t x1165; + fiat_np384_uint1 x1166; + uint32_t x1167; + fiat_np384_uint1 x1168; + uint32_t x1169; + fiat_np384_uint1 x1170; + uint32_t x1171; + fiat_np384_uint1 x1172; + uint32_t x1173; + fiat_np384_uint1 x1174; + uint32_t x1175; + fiat_np384_uint1 x1176; + uint32_t x1177; + uint32_t x1178; + uint32_t x1179; + uint32_t x1180; + uint32_t x1181; + uint32_t x1182; + uint32_t x1183; + uint32_t x1184; + uint32_t x1185; + uint32_t x1186; + uint32_t x1187; + uint32_t x1188; + uint32_t x1189; + uint32_t x1190; + uint32_t x1191; + uint32_t x1192; + uint32_t x1193; + uint32_t x1194; + uint32_t x1195; + uint32_t x1196; + uint32_t x1197; + uint32_t x1198; + uint32_t x1199; + uint32_t x1200; + uint32_t x1201; + uint32_t x1202; + fiat_np384_uint1 x1203; + uint32_t x1204; + fiat_np384_uint1 x1205; + uint32_t x1206; + fiat_np384_uint1 x1207; + uint32_t x1208; + fiat_np384_uint1 x1209; + uint32_t x1210; + fiat_np384_uint1 x1211; + uint32_t x1212; + fiat_np384_uint1 x1213; + uint32_t x1214; + fiat_np384_uint1 x1215; + uint32_t x1216; + fiat_np384_uint1 x1217; + uint32_t x1218; + fiat_np384_uint1 x1219; + uint32_t x1220; + fiat_np384_uint1 x1221; + uint32_t x1222; + fiat_np384_uint1 x1223; + uint32_t x1224; + uint32_t x1225; + fiat_np384_uint1 x1226; + uint32_t x1227; + fiat_np384_uint1 x1228; + uint32_t x1229; + fiat_np384_uint1 x1230; + uint32_t x1231; + fiat_np384_uint1 x1232; + uint32_t x1233; + fiat_np384_uint1 x1234; + uint32_t x1235; + fiat_np384_uint1 x1236; + uint32_t x1237; + fiat_np384_uint1 x1238; + uint32_t x1239; + fiat_np384_uint1 x1240; + uint32_t x1241; + fiat_np384_uint1 x1242; + uint32_t x1243; + fiat_np384_uint1 x1244; + uint32_t x1245; + fiat_np384_uint1 x1246; + uint32_t x1247; + fiat_np384_uint1 x1248; + uint32_t x1249; + fiat_np384_uint1 x1250; + uint32_t x1251; + uint32_t x1252; + uint32_t x1253; + uint32_t x1254; + uint32_t x1255; + uint32_t x1256; + uint32_t x1257; + uint32_t x1258; + uint32_t x1259; + uint32_t x1260; + uint32_t x1261; + uint32_t x1262; + uint32_t x1263; + uint32_t x1264; + uint32_t x1265; + uint32_t x1266; + uint32_t x1267; + uint32_t x1268; + uint32_t x1269; + uint32_t x1270; + uint32_t x1271; + uint32_t x1272; + uint32_t x1273; + uint32_t x1274; + uint32_t x1275; + uint32_t x1276; + uint32_t x1277; + fiat_np384_uint1 x1278; + uint32_t x1279; + fiat_np384_uint1 x1280; + uint32_t x1281; + fiat_np384_uint1 x1282; + uint32_t x1283; + fiat_np384_uint1 x1284; + uint32_t x1285; + fiat_np384_uint1 x1286; + uint32_t x1287; + fiat_np384_uint1 x1288; + uint32_t x1289; + fiat_np384_uint1 x1290; + uint32_t x1291; + fiat_np384_uint1 x1292; + uint32_t x1293; + fiat_np384_uint1 x1294; + uint32_t x1295; + fiat_np384_uint1 x1296; + uint32_t x1297; + fiat_np384_uint1 x1298; + uint32_t x1299; + uint32_t x1300; + fiat_np384_uint1 x1301; + uint32_t x1302; + fiat_np384_uint1 x1303; + uint32_t x1304; + fiat_np384_uint1 x1305; + uint32_t x1306; + fiat_np384_uint1 x1307; + uint32_t x1308; + fiat_np384_uint1 x1309; + uint32_t x1310; + fiat_np384_uint1 x1311; + uint32_t x1312; + fiat_np384_uint1 x1313; + uint32_t x1314; + fiat_np384_uint1 x1315; + uint32_t x1316; + fiat_np384_uint1 x1317; + uint32_t x1318; + fiat_np384_uint1 x1319; + uint32_t x1320; + fiat_np384_uint1 x1321; + uint32_t x1322; + fiat_np384_uint1 x1323; + uint32_t x1324; + fiat_np384_uint1 x1325; + uint32_t x1326; + uint32_t x1327; + uint32_t x1328; + uint32_t x1329; + uint32_t x1330; + uint32_t x1331; + uint32_t x1332; + uint32_t x1333; + uint32_t x1334; + uint32_t x1335; + uint32_t x1336; + uint32_t x1337; + uint32_t x1338; + uint32_t x1339; + uint32_t x1340; + uint32_t x1341; + uint32_t x1342; + uint32_t x1343; + uint32_t x1344; + uint32_t x1345; + uint32_t x1346; + uint32_t x1347; + uint32_t x1348; + uint32_t x1349; + uint32_t x1350; + uint32_t x1351; + fiat_np384_uint1 x1352; + uint32_t x1353; + fiat_np384_uint1 x1354; + uint32_t x1355; + fiat_np384_uint1 x1356; + uint32_t x1357; + fiat_np384_uint1 x1358; + uint32_t x1359; + fiat_np384_uint1 x1360; + uint32_t x1361; + fiat_np384_uint1 x1362; + uint32_t x1363; + fiat_np384_uint1 x1364; + uint32_t x1365; + fiat_np384_uint1 x1366; + uint32_t x1367; + fiat_np384_uint1 x1368; + uint32_t x1369; + fiat_np384_uint1 x1370; + uint32_t x1371; + fiat_np384_uint1 x1372; + uint32_t x1373; + uint32_t x1374; + fiat_np384_uint1 x1375; + uint32_t x1376; + fiat_np384_uint1 x1377; + uint32_t x1378; + fiat_np384_uint1 x1379; + uint32_t x1380; + fiat_np384_uint1 x1381; + uint32_t x1382; + fiat_np384_uint1 x1383; + uint32_t x1384; + fiat_np384_uint1 x1385; + uint32_t x1386; + fiat_np384_uint1 x1387; + uint32_t x1388; + fiat_np384_uint1 x1389; + uint32_t x1390; + fiat_np384_uint1 x1391; + uint32_t x1392; + fiat_np384_uint1 x1393; + uint32_t x1394; + fiat_np384_uint1 x1395; + uint32_t x1396; + fiat_np384_uint1 x1397; + uint32_t x1398; + fiat_np384_uint1 x1399; + uint32_t x1400; + uint32_t x1401; + uint32_t x1402; + uint32_t x1403; + uint32_t x1404; + uint32_t x1405; + uint32_t x1406; + uint32_t x1407; + uint32_t x1408; + uint32_t x1409; + uint32_t x1410; + uint32_t x1411; + uint32_t x1412; + uint32_t x1413; + uint32_t x1414; + uint32_t x1415; + uint32_t x1416; + uint32_t x1417; + uint32_t x1418; + uint32_t x1419; + uint32_t x1420; + uint32_t x1421; + uint32_t x1422; + uint32_t x1423; + uint32_t x1424; + uint32_t x1425; + uint32_t x1426; + fiat_np384_uint1 x1427; + uint32_t x1428; + fiat_np384_uint1 x1429; + uint32_t x1430; + fiat_np384_uint1 x1431; + uint32_t x1432; + fiat_np384_uint1 x1433; + uint32_t x1434; + fiat_np384_uint1 x1435; + uint32_t x1436; + fiat_np384_uint1 x1437; + uint32_t x1438; + fiat_np384_uint1 x1439; + uint32_t x1440; + fiat_np384_uint1 x1441; + uint32_t x1442; + fiat_np384_uint1 x1443; + uint32_t x1444; + fiat_np384_uint1 x1445; + uint32_t x1446; + fiat_np384_uint1 x1447; + uint32_t x1448; + uint32_t x1449; + fiat_np384_uint1 x1450; + uint32_t x1451; + fiat_np384_uint1 x1452; + uint32_t x1453; + fiat_np384_uint1 x1454; + uint32_t x1455; + fiat_np384_uint1 x1456; + uint32_t x1457; + fiat_np384_uint1 x1458; + uint32_t x1459; + fiat_np384_uint1 x1460; + uint32_t x1461; + fiat_np384_uint1 x1462; + uint32_t x1463; + fiat_np384_uint1 x1464; + uint32_t x1465; + fiat_np384_uint1 x1466; + uint32_t x1467; + fiat_np384_uint1 x1468; + uint32_t x1469; + fiat_np384_uint1 x1470; + uint32_t x1471; + fiat_np384_uint1 x1472; + uint32_t x1473; + fiat_np384_uint1 x1474; + uint32_t x1475; + uint32_t x1476; + uint32_t x1477; + uint32_t x1478; + uint32_t x1479; + uint32_t x1480; + uint32_t x1481; + uint32_t x1482; + uint32_t x1483; + uint32_t x1484; + uint32_t x1485; + uint32_t x1486; + uint32_t x1487; + uint32_t x1488; + uint32_t x1489; + uint32_t x1490; + uint32_t x1491; + uint32_t x1492; + uint32_t x1493; + uint32_t x1494; + uint32_t x1495; + uint32_t x1496; + uint32_t x1497; + uint32_t x1498; + uint32_t x1499; + uint32_t x1500; + fiat_np384_uint1 x1501; + uint32_t x1502; + fiat_np384_uint1 x1503; + uint32_t x1504; + fiat_np384_uint1 x1505; + uint32_t x1506; + fiat_np384_uint1 x1507; + uint32_t x1508; + fiat_np384_uint1 x1509; + uint32_t x1510; + fiat_np384_uint1 x1511; + uint32_t x1512; + fiat_np384_uint1 x1513; + uint32_t x1514; + fiat_np384_uint1 x1515; + uint32_t x1516; + fiat_np384_uint1 x1517; + uint32_t x1518; + fiat_np384_uint1 x1519; + uint32_t x1520; + fiat_np384_uint1 x1521; + uint32_t x1522; + uint32_t x1523; + fiat_np384_uint1 x1524; + uint32_t x1525; + fiat_np384_uint1 x1526; + uint32_t x1527; + fiat_np384_uint1 x1528; + uint32_t x1529; + fiat_np384_uint1 x1530; + uint32_t x1531; + fiat_np384_uint1 x1532; + uint32_t x1533; + fiat_np384_uint1 x1534; + uint32_t x1535; + fiat_np384_uint1 x1536; + uint32_t x1537; + fiat_np384_uint1 x1538; + uint32_t x1539; + fiat_np384_uint1 x1540; + uint32_t x1541; + fiat_np384_uint1 x1542; + uint32_t x1543; + fiat_np384_uint1 x1544; + uint32_t x1545; + fiat_np384_uint1 x1546; + uint32_t x1547; + fiat_np384_uint1 x1548; + uint32_t x1549; + uint32_t x1550; + uint32_t x1551; + uint32_t x1552; + uint32_t x1553; + uint32_t x1554; + uint32_t x1555; + uint32_t x1556; + uint32_t x1557; + uint32_t x1558; + uint32_t x1559; + uint32_t x1560; + uint32_t x1561; + uint32_t x1562; + uint32_t x1563; + uint32_t x1564; + uint32_t x1565; + uint32_t x1566; + uint32_t x1567; + uint32_t x1568; + uint32_t x1569; + uint32_t x1570; + uint32_t x1571; + uint32_t x1572; + uint32_t x1573; + uint32_t x1574; + uint32_t x1575; + fiat_np384_uint1 x1576; + uint32_t x1577; + fiat_np384_uint1 x1578; + uint32_t x1579; + fiat_np384_uint1 x1580; + uint32_t x1581; + fiat_np384_uint1 x1582; + uint32_t x1583; + fiat_np384_uint1 x1584; + uint32_t x1585; + fiat_np384_uint1 x1586; + uint32_t x1587; + fiat_np384_uint1 x1588; + uint32_t x1589; + fiat_np384_uint1 x1590; + uint32_t x1591; + fiat_np384_uint1 x1592; + uint32_t x1593; + fiat_np384_uint1 x1594; + uint32_t x1595; + fiat_np384_uint1 x1596; + uint32_t x1597; + uint32_t x1598; + fiat_np384_uint1 x1599; + uint32_t x1600; + fiat_np384_uint1 x1601; + uint32_t x1602; + fiat_np384_uint1 x1603; + uint32_t x1604; + fiat_np384_uint1 x1605; + uint32_t x1606; + fiat_np384_uint1 x1607; + uint32_t x1608; + fiat_np384_uint1 x1609; + uint32_t x1610; + fiat_np384_uint1 x1611; + uint32_t x1612; + fiat_np384_uint1 x1613; + uint32_t x1614; + fiat_np384_uint1 x1615; + uint32_t x1616; + fiat_np384_uint1 x1617; + uint32_t x1618; + fiat_np384_uint1 x1619; + uint32_t x1620; + fiat_np384_uint1 x1621; + uint32_t x1622; + fiat_np384_uint1 x1623; + uint32_t x1624; + uint32_t x1625; + uint32_t x1626; + uint32_t x1627; + uint32_t x1628; + uint32_t x1629; + uint32_t x1630; + uint32_t x1631; + uint32_t x1632; + uint32_t x1633; + uint32_t x1634; + uint32_t x1635; + uint32_t x1636; + uint32_t x1637; + uint32_t x1638; + uint32_t x1639; + uint32_t x1640; + uint32_t x1641; + uint32_t x1642; + uint32_t x1643; + uint32_t x1644; + uint32_t x1645; + uint32_t x1646; + uint32_t x1647; + uint32_t x1648; + uint32_t x1649; + fiat_np384_uint1 x1650; + uint32_t x1651; + fiat_np384_uint1 x1652; + uint32_t x1653; + fiat_np384_uint1 x1654; + uint32_t x1655; + fiat_np384_uint1 x1656; + uint32_t x1657; + fiat_np384_uint1 x1658; + uint32_t x1659; + fiat_np384_uint1 x1660; + uint32_t x1661; + fiat_np384_uint1 x1662; + uint32_t x1663; + fiat_np384_uint1 x1664; + uint32_t x1665; + fiat_np384_uint1 x1666; + uint32_t x1667; + fiat_np384_uint1 x1668; + uint32_t x1669; + fiat_np384_uint1 x1670; + uint32_t x1671; + uint32_t x1672; + fiat_np384_uint1 x1673; + uint32_t x1674; + fiat_np384_uint1 x1675; + uint32_t x1676; + fiat_np384_uint1 x1677; + uint32_t x1678; + fiat_np384_uint1 x1679; + uint32_t x1680; + fiat_np384_uint1 x1681; + uint32_t x1682; + fiat_np384_uint1 x1683; + uint32_t x1684; + fiat_np384_uint1 x1685; + uint32_t x1686; + fiat_np384_uint1 x1687; + uint32_t x1688; + fiat_np384_uint1 x1689; + uint32_t x1690; + fiat_np384_uint1 x1691; + uint32_t x1692; + fiat_np384_uint1 x1693; + uint32_t x1694; + fiat_np384_uint1 x1695; + uint32_t x1696; + fiat_np384_uint1 x1697; + uint32_t x1698; + uint32_t x1699; + uint32_t x1700; + uint32_t x1701; + uint32_t x1702; + uint32_t x1703; + uint32_t x1704; + uint32_t x1705; + uint32_t x1706; + uint32_t x1707; + uint32_t x1708; + uint32_t x1709; + uint32_t x1710; + uint32_t x1711; + uint32_t x1712; + uint32_t x1713; + uint32_t x1714; + uint32_t x1715; + uint32_t x1716; + uint32_t x1717; + uint32_t x1718; + uint32_t x1719; + uint32_t x1720; + uint32_t x1721; + uint32_t x1722; + uint32_t x1723; + uint32_t x1724; + fiat_np384_uint1 x1725; + uint32_t x1726; + fiat_np384_uint1 x1727; + uint32_t x1728; + fiat_np384_uint1 x1729; + uint32_t x1730; + fiat_np384_uint1 x1731; + uint32_t x1732; + fiat_np384_uint1 x1733; + uint32_t x1734; + fiat_np384_uint1 x1735; + uint32_t x1736; + fiat_np384_uint1 x1737; + uint32_t x1738; + fiat_np384_uint1 x1739; + uint32_t x1740; + fiat_np384_uint1 x1741; + uint32_t x1742; + fiat_np384_uint1 x1743; + uint32_t x1744; + fiat_np384_uint1 x1745; + uint32_t x1746; + uint32_t x1747; + fiat_np384_uint1 x1748; + uint32_t x1749; + fiat_np384_uint1 x1750; + uint32_t x1751; + fiat_np384_uint1 x1752; + uint32_t x1753; + fiat_np384_uint1 x1754; + uint32_t x1755; + fiat_np384_uint1 x1756; + uint32_t x1757; + fiat_np384_uint1 x1758; + uint32_t x1759; + fiat_np384_uint1 x1760; + uint32_t x1761; + fiat_np384_uint1 x1762; + uint32_t x1763; + fiat_np384_uint1 x1764; + uint32_t x1765; + fiat_np384_uint1 x1766; + uint32_t x1767; + fiat_np384_uint1 x1768; + uint32_t x1769; + fiat_np384_uint1 x1770; + uint32_t x1771; + fiat_np384_uint1 x1772; + uint32_t x1773; + uint32_t x1774; + fiat_np384_uint1 x1775; + uint32_t x1776; + fiat_np384_uint1 x1777; + uint32_t x1778; + fiat_np384_uint1 x1779; + uint32_t x1780; + fiat_np384_uint1 x1781; + uint32_t x1782; + fiat_np384_uint1 x1783; + uint32_t x1784; + fiat_np384_uint1 x1785; + uint32_t x1786; + fiat_np384_uint1 x1787; + uint32_t x1788; + fiat_np384_uint1 x1789; + uint32_t x1790; + fiat_np384_uint1 x1791; + uint32_t x1792; + fiat_np384_uint1 x1793; + uint32_t x1794; + fiat_np384_uint1 x1795; + uint32_t x1796; + fiat_np384_uint1 x1797; + uint32_t x1798; + fiat_np384_uint1 x1799; + uint32_t x1800; + uint32_t x1801; + uint32_t x1802; + uint32_t x1803; + uint32_t x1804; + uint32_t x1805; + uint32_t x1806; + uint32_t x1807; + uint32_t x1808; + uint32_t x1809; + uint32_t x1810; + uint32_t x1811; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[8]); + x9 = (arg1[9]); + x10 = (arg1[10]); + x11 = (arg1[11]); + x12 = (arg1[0]); + fiat_np384_mulx_u32(&x13, &x14, x12, (arg2[11])); + fiat_np384_mulx_u32(&x15, &x16, x12, (arg2[10])); + fiat_np384_mulx_u32(&x17, &x18, x12, (arg2[9])); + fiat_np384_mulx_u32(&x19, &x20, x12, (arg2[8])); + fiat_np384_mulx_u32(&x21, &x22, x12, (arg2[7])); + fiat_np384_mulx_u32(&x23, &x24, x12, (arg2[6])); + fiat_np384_mulx_u32(&x25, &x26, x12, (arg2[5])); + fiat_np384_mulx_u32(&x27, &x28, x12, (arg2[4])); + fiat_np384_mulx_u32(&x29, &x30, x12, (arg2[3])); + fiat_np384_mulx_u32(&x31, &x32, x12, (arg2[2])); + fiat_np384_mulx_u32(&x33, &x34, x12, (arg2[1])); + fiat_np384_mulx_u32(&x35, &x36, x12, (arg2[0])); + fiat_np384_addcarryx_u32(&x37, &x38, 0x0, x36, x33); + fiat_np384_addcarryx_u32(&x39, &x40, x38, x34, x31); + fiat_np384_addcarryx_u32(&x41, &x42, x40, x32, x29); + fiat_np384_addcarryx_u32(&x43, &x44, x42, x30, x27); + fiat_np384_addcarryx_u32(&x45, &x46, x44, x28, x25); + fiat_np384_addcarryx_u32(&x47, &x48, x46, x26, x23); + fiat_np384_addcarryx_u32(&x49, &x50, x48, x24, x21); + fiat_np384_addcarryx_u32(&x51, &x52, x50, x22, x19); + fiat_np384_addcarryx_u32(&x53, &x54, x52, x20, x17); + fiat_np384_addcarryx_u32(&x55, &x56, x54, x18, x15); + fiat_np384_addcarryx_u32(&x57, &x58, x56, x16, x13); + x59 = (x58 + x14); + fiat_np384_mulx_u32(&x60, &x61, x35, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x62, &x63, x60, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x64, &x65, x60, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x66, &x67, x60, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x68, &x69, x60, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x70, &x71, x60, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x72, &x73, x60, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x74, &x75, x60, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x76, &x77, x60, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x78, &x79, x60, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x80, &x81, x60, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x82, &x83, x60, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x84, &x85, x60, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x86, &x87, 0x0, x85, x82); + fiat_np384_addcarryx_u32(&x88, &x89, x87, x83, x80); + fiat_np384_addcarryx_u32(&x90, &x91, x89, x81, x78); + fiat_np384_addcarryx_u32(&x92, &x93, x91, x79, x76); + fiat_np384_addcarryx_u32(&x94, &x95, x93, x77, x74); + fiat_np384_addcarryx_u32(&x96, &x97, x95, x75, x72); + fiat_np384_addcarryx_u32(&x98, &x99, x97, x73, x70); + fiat_np384_addcarryx_u32(&x100, &x101, x99, x71, x68); + fiat_np384_addcarryx_u32(&x102, &x103, x101, x69, x66); + fiat_np384_addcarryx_u32(&x104, &x105, x103, x67, x64); + fiat_np384_addcarryx_u32(&x106, &x107, x105, x65, x62); + x108 = (x107 + x63); + fiat_np384_addcarryx_u32(&x109, &x110, 0x0, x35, x84); + fiat_np384_addcarryx_u32(&x111, &x112, x110, x37, x86); + fiat_np384_addcarryx_u32(&x113, &x114, x112, x39, x88); + fiat_np384_addcarryx_u32(&x115, &x116, x114, x41, x90); + fiat_np384_addcarryx_u32(&x117, &x118, x116, x43, x92); + fiat_np384_addcarryx_u32(&x119, &x120, x118, x45, x94); + fiat_np384_addcarryx_u32(&x121, &x122, x120, x47, x96); + fiat_np384_addcarryx_u32(&x123, &x124, x122, x49, x98); + fiat_np384_addcarryx_u32(&x125, &x126, x124, x51, x100); + fiat_np384_addcarryx_u32(&x127, &x128, x126, x53, x102); + fiat_np384_addcarryx_u32(&x129, &x130, x128, x55, x104); + fiat_np384_addcarryx_u32(&x131, &x132, x130, x57, x106); + fiat_np384_addcarryx_u32(&x133, &x134, x132, x59, x108); + fiat_np384_mulx_u32(&x135, &x136, x1, (arg2[11])); + fiat_np384_mulx_u32(&x137, &x138, x1, (arg2[10])); + fiat_np384_mulx_u32(&x139, &x140, x1, (arg2[9])); + fiat_np384_mulx_u32(&x141, &x142, x1, (arg2[8])); + fiat_np384_mulx_u32(&x143, &x144, x1, (arg2[7])); + fiat_np384_mulx_u32(&x145, &x146, x1, (arg2[6])); + fiat_np384_mulx_u32(&x147, &x148, x1, (arg2[5])); + fiat_np384_mulx_u32(&x149, &x150, x1, (arg2[4])); + fiat_np384_mulx_u32(&x151, &x152, x1, (arg2[3])); + fiat_np384_mulx_u32(&x153, &x154, x1, (arg2[2])); + fiat_np384_mulx_u32(&x155, &x156, x1, (arg2[1])); + fiat_np384_mulx_u32(&x157, &x158, x1, (arg2[0])); + fiat_np384_addcarryx_u32(&x159, &x160, 0x0, x158, x155); + fiat_np384_addcarryx_u32(&x161, &x162, x160, x156, x153); + fiat_np384_addcarryx_u32(&x163, &x164, x162, x154, x151); + fiat_np384_addcarryx_u32(&x165, &x166, x164, x152, x149); + fiat_np384_addcarryx_u32(&x167, &x168, x166, x150, x147); + fiat_np384_addcarryx_u32(&x169, &x170, x168, x148, x145); + fiat_np384_addcarryx_u32(&x171, &x172, x170, x146, x143); + fiat_np384_addcarryx_u32(&x173, &x174, x172, x144, x141); + fiat_np384_addcarryx_u32(&x175, &x176, x174, x142, x139); + fiat_np384_addcarryx_u32(&x177, &x178, x176, x140, x137); + fiat_np384_addcarryx_u32(&x179, &x180, x178, x138, x135); + x181 = (x180 + x136); + fiat_np384_addcarryx_u32(&x182, &x183, 0x0, x111, x157); + fiat_np384_addcarryx_u32(&x184, &x185, x183, x113, x159); + fiat_np384_addcarryx_u32(&x186, &x187, x185, x115, x161); + fiat_np384_addcarryx_u32(&x188, &x189, x187, x117, x163); + fiat_np384_addcarryx_u32(&x190, &x191, x189, x119, x165); + fiat_np384_addcarryx_u32(&x192, &x193, x191, x121, x167); + fiat_np384_addcarryx_u32(&x194, &x195, x193, x123, x169); + fiat_np384_addcarryx_u32(&x196, &x197, x195, x125, x171); + fiat_np384_addcarryx_u32(&x198, &x199, x197, x127, x173); + fiat_np384_addcarryx_u32(&x200, &x201, x199, x129, x175); + fiat_np384_addcarryx_u32(&x202, &x203, x201, x131, x177); + fiat_np384_addcarryx_u32(&x204, &x205, x203, x133, x179); + fiat_np384_addcarryx_u32(&x206, &x207, x205, x134, x181); + fiat_np384_mulx_u32(&x208, &x209, x182, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x210, &x211, x208, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x212, &x213, x208, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x214, &x215, x208, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x216, &x217, x208, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x218, &x219, x208, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x220, &x221, x208, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x222, &x223, x208, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x224, &x225, x208, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x226, &x227, x208, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x228, &x229, x208, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x230, &x231, x208, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x232, &x233, x208, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x234, &x235, 0x0, x233, x230); + fiat_np384_addcarryx_u32(&x236, &x237, x235, x231, x228); + fiat_np384_addcarryx_u32(&x238, &x239, x237, x229, x226); + fiat_np384_addcarryx_u32(&x240, &x241, x239, x227, x224); + fiat_np384_addcarryx_u32(&x242, &x243, x241, x225, x222); + fiat_np384_addcarryx_u32(&x244, &x245, x243, x223, x220); + fiat_np384_addcarryx_u32(&x246, &x247, x245, x221, x218); + fiat_np384_addcarryx_u32(&x248, &x249, x247, x219, x216); + fiat_np384_addcarryx_u32(&x250, &x251, x249, x217, x214); + fiat_np384_addcarryx_u32(&x252, &x253, x251, x215, x212); + fiat_np384_addcarryx_u32(&x254, &x255, x253, x213, x210); + x256 = (x255 + x211); + fiat_np384_addcarryx_u32(&x257, &x258, 0x0, x182, x232); + fiat_np384_addcarryx_u32(&x259, &x260, x258, x184, x234); + fiat_np384_addcarryx_u32(&x261, &x262, x260, x186, x236); + fiat_np384_addcarryx_u32(&x263, &x264, x262, x188, x238); + fiat_np384_addcarryx_u32(&x265, &x266, x264, x190, x240); + fiat_np384_addcarryx_u32(&x267, &x268, x266, x192, x242); + fiat_np384_addcarryx_u32(&x269, &x270, x268, x194, x244); + fiat_np384_addcarryx_u32(&x271, &x272, x270, x196, x246); + fiat_np384_addcarryx_u32(&x273, &x274, x272, x198, x248); + fiat_np384_addcarryx_u32(&x275, &x276, x274, x200, x250); + fiat_np384_addcarryx_u32(&x277, &x278, x276, x202, x252); + fiat_np384_addcarryx_u32(&x279, &x280, x278, x204, x254); + fiat_np384_addcarryx_u32(&x281, &x282, x280, x206, x256); + x283 = ((uint32_t)x282 + x207); + fiat_np384_mulx_u32(&x284, &x285, x2, (arg2[11])); + fiat_np384_mulx_u32(&x286, &x287, x2, (arg2[10])); + fiat_np384_mulx_u32(&x288, &x289, x2, (arg2[9])); + fiat_np384_mulx_u32(&x290, &x291, x2, (arg2[8])); + fiat_np384_mulx_u32(&x292, &x293, x2, (arg2[7])); + fiat_np384_mulx_u32(&x294, &x295, x2, (arg2[6])); + fiat_np384_mulx_u32(&x296, &x297, x2, (arg2[5])); + fiat_np384_mulx_u32(&x298, &x299, x2, (arg2[4])); + fiat_np384_mulx_u32(&x300, &x301, x2, (arg2[3])); + fiat_np384_mulx_u32(&x302, &x303, x2, (arg2[2])); + fiat_np384_mulx_u32(&x304, &x305, x2, (arg2[1])); + fiat_np384_mulx_u32(&x306, &x307, x2, (arg2[0])); + fiat_np384_addcarryx_u32(&x308, &x309, 0x0, x307, x304); + fiat_np384_addcarryx_u32(&x310, &x311, x309, x305, x302); + fiat_np384_addcarryx_u32(&x312, &x313, x311, x303, x300); + fiat_np384_addcarryx_u32(&x314, &x315, x313, x301, x298); + fiat_np384_addcarryx_u32(&x316, &x317, x315, x299, x296); + fiat_np384_addcarryx_u32(&x318, &x319, x317, x297, x294); + fiat_np384_addcarryx_u32(&x320, &x321, x319, x295, x292); + fiat_np384_addcarryx_u32(&x322, &x323, x321, x293, x290); + fiat_np384_addcarryx_u32(&x324, &x325, x323, x291, x288); + fiat_np384_addcarryx_u32(&x326, &x327, x325, x289, x286); + fiat_np384_addcarryx_u32(&x328, &x329, x327, x287, x284); + x330 = (x329 + x285); + fiat_np384_addcarryx_u32(&x331, &x332, 0x0, x259, x306); + fiat_np384_addcarryx_u32(&x333, &x334, x332, x261, x308); + fiat_np384_addcarryx_u32(&x335, &x336, x334, x263, x310); + fiat_np384_addcarryx_u32(&x337, &x338, x336, x265, x312); + fiat_np384_addcarryx_u32(&x339, &x340, x338, x267, x314); + fiat_np384_addcarryx_u32(&x341, &x342, x340, x269, x316); + fiat_np384_addcarryx_u32(&x343, &x344, x342, x271, x318); + fiat_np384_addcarryx_u32(&x345, &x346, x344, x273, x320); + fiat_np384_addcarryx_u32(&x347, &x348, x346, x275, x322); + fiat_np384_addcarryx_u32(&x349, &x350, x348, x277, x324); + fiat_np384_addcarryx_u32(&x351, &x352, x350, x279, x326); + fiat_np384_addcarryx_u32(&x353, &x354, x352, x281, x328); + fiat_np384_addcarryx_u32(&x355, &x356, x354, x283, x330); + fiat_np384_mulx_u32(&x357, &x358, x331, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x359, &x360, x357, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x361, &x362, x357, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x363, &x364, x357, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x365, &x366, x357, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x367, &x368, x357, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x369, &x370, x357, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x371, &x372, x357, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x373, &x374, x357, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x375, &x376, x357, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x377, &x378, x357, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x379, &x380, x357, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x381, &x382, x357, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x383, &x384, 0x0, x382, x379); + fiat_np384_addcarryx_u32(&x385, &x386, x384, x380, x377); + fiat_np384_addcarryx_u32(&x387, &x388, x386, x378, x375); + fiat_np384_addcarryx_u32(&x389, &x390, x388, x376, x373); + fiat_np384_addcarryx_u32(&x391, &x392, x390, x374, x371); + fiat_np384_addcarryx_u32(&x393, &x394, x392, x372, x369); + fiat_np384_addcarryx_u32(&x395, &x396, x394, x370, x367); + fiat_np384_addcarryx_u32(&x397, &x398, x396, x368, x365); + fiat_np384_addcarryx_u32(&x399, &x400, x398, x366, x363); + fiat_np384_addcarryx_u32(&x401, &x402, x400, x364, x361); + fiat_np384_addcarryx_u32(&x403, &x404, x402, x362, x359); + x405 = (x404 + x360); + fiat_np384_addcarryx_u32(&x406, &x407, 0x0, x331, x381); + fiat_np384_addcarryx_u32(&x408, &x409, x407, x333, x383); + fiat_np384_addcarryx_u32(&x410, &x411, x409, x335, x385); + fiat_np384_addcarryx_u32(&x412, &x413, x411, x337, x387); + fiat_np384_addcarryx_u32(&x414, &x415, x413, x339, x389); + fiat_np384_addcarryx_u32(&x416, &x417, x415, x341, x391); + fiat_np384_addcarryx_u32(&x418, &x419, x417, x343, x393); + fiat_np384_addcarryx_u32(&x420, &x421, x419, x345, x395); + fiat_np384_addcarryx_u32(&x422, &x423, x421, x347, x397); + fiat_np384_addcarryx_u32(&x424, &x425, x423, x349, x399); + fiat_np384_addcarryx_u32(&x426, &x427, x425, x351, x401); + fiat_np384_addcarryx_u32(&x428, &x429, x427, x353, x403); + fiat_np384_addcarryx_u32(&x430, &x431, x429, x355, x405); + x432 = ((uint32_t)x431 + x356); + fiat_np384_mulx_u32(&x433, &x434, x3, (arg2[11])); + fiat_np384_mulx_u32(&x435, &x436, x3, (arg2[10])); + fiat_np384_mulx_u32(&x437, &x438, x3, (arg2[9])); + fiat_np384_mulx_u32(&x439, &x440, x3, (arg2[8])); + fiat_np384_mulx_u32(&x441, &x442, x3, (arg2[7])); + fiat_np384_mulx_u32(&x443, &x444, x3, (arg2[6])); + fiat_np384_mulx_u32(&x445, &x446, x3, (arg2[5])); + fiat_np384_mulx_u32(&x447, &x448, x3, (arg2[4])); + fiat_np384_mulx_u32(&x449, &x450, x3, (arg2[3])); + fiat_np384_mulx_u32(&x451, &x452, x3, (arg2[2])); + fiat_np384_mulx_u32(&x453, &x454, x3, (arg2[1])); + fiat_np384_mulx_u32(&x455, &x456, x3, (arg2[0])); + fiat_np384_addcarryx_u32(&x457, &x458, 0x0, x456, x453); + fiat_np384_addcarryx_u32(&x459, &x460, x458, x454, x451); + fiat_np384_addcarryx_u32(&x461, &x462, x460, x452, x449); + fiat_np384_addcarryx_u32(&x463, &x464, x462, x450, x447); + fiat_np384_addcarryx_u32(&x465, &x466, x464, x448, x445); + fiat_np384_addcarryx_u32(&x467, &x468, x466, x446, x443); + fiat_np384_addcarryx_u32(&x469, &x470, x468, x444, x441); + fiat_np384_addcarryx_u32(&x471, &x472, x470, x442, x439); + fiat_np384_addcarryx_u32(&x473, &x474, x472, x440, x437); + fiat_np384_addcarryx_u32(&x475, &x476, x474, x438, x435); + fiat_np384_addcarryx_u32(&x477, &x478, x476, x436, x433); + x479 = (x478 + x434); + fiat_np384_addcarryx_u32(&x480, &x481, 0x0, x408, x455); + fiat_np384_addcarryx_u32(&x482, &x483, x481, x410, x457); + fiat_np384_addcarryx_u32(&x484, &x485, x483, x412, x459); + fiat_np384_addcarryx_u32(&x486, &x487, x485, x414, x461); + fiat_np384_addcarryx_u32(&x488, &x489, x487, x416, x463); + fiat_np384_addcarryx_u32(&x490, &x491, x489, x418, x465); + fiat_np384_addcarryx_u32(&x492, &x493, x491, x420, x467); + fiat_np384_addcarryx_u32(&x494, &x495, x493, x422, x469); + fiat_np384_addcarryx_u32(&x496, &x497, x495, x424, x471); + fiat_np384_addcarryx_u32(&x498, &x499, x497, x426, x473); + fiat_np384_addcarryx_u32(&x500, &x501, x499, x428, x475); + fiat_np384_addcarryx_u32(&x502, &x503, x501, x430, x477); + fiat_np384_addcarryx_u32(&x504, &x505, x503, x432, x479); + fiat_np384_mulx_u32(&x506, &x507, x480, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x508, &x509, x506, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x510, &x511, x506, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x512, &x513, x506, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x514, &x515, x506, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x516, &x517, x506, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x518, &x519, x506, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x520, &x521, x506, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x522, &x523, x506, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x524, &x525, x506, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x526, &x527, x506, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x528, &x529, x506, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x530, &x531, x506, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x532, &x533, 0x0, x531, x528); + fiat_np384_addcarryx_u32(&x534, &x535, x533, x529, x526); + fiat_np384_addcarryx_u32(&x536, &x537, x535, x527, x524); + fiat_np384_addcarryx_u32(&x538, &x539, x537, x525, x522); + fiat_np384_addcarryx_u32(&x540, &x541, x539, x523, x520); + fiat_np384_addcarryx_u32(&x542, &x543, x541, x521, x518); + fiat_np384_addcarryx_u32(&x544, &x545, x543, x519, x516); + fiat_np384_addcarryx_u32(&x546, &x547, x545, x517, x514); + fiat_np384_addcarryx_u32(&x548, &x549, x547, x515, x512); + fiat_np384_addcarryx_u32(&x550, &x551, x549, x513, x510); + fiat_np384_addcarryx_u32(&x552, &x553, x551, x511, x508); + x554 = (x553 + x509); + fiat_np384_addcarryx_u32(&x555, &x556, 0x0, x480, x530); + fiat_np384_addcarryx_u32(&x557, &x558, x556, x482, x532); + fiat_np384_addcarryx_u32(&x559, &x560, x558, x484, x534); + fiat_np384_addcarryx_u32(&x561, &x562, x560, x486, x536); + fiat_np384_addcarryx_u32(&x563, &x564, x562, x488, x538); + fiat_np384_addcarryx_u32(&x565, &x566, x564, x490, x540); + fiat_np384_addcarryx_u32(&x567, &x568, x566, x492, x542); + fiat_np384_addcarryx_u32(&x569, &x570, x568, x494, x544); + fiat_np384_addcarryx_u32(&x571, &x572, x570, x496, x546); + fiat_np384_addcarryx_u32(&x573, &x574, x572, x498, x548); + fiat_np384_addcarryx_u32(&x575, &x576, x574, x500, x550); + fiat_np384_addcarryx_u32(&x577, &x578, x576, x502, x552); + fiat_np384_addcarryx_u32(&x579, &x580, x578, x504, x554); + x581 = ((uint32_t)x580 + x505); + fiat_np384_mulx_u32(&x582, &x583, x4, (arg2[11])); + fiat_np384_mulx_u32(&x584, &x585, x4, (arg2[10])); + fiat_np384_mulx_u32(&x586, &x587, x4, (arg2[9])); + fiat_np384_mulx_u32(&x588, &x589, x4, (arg2[8])); + fiat_np384_mulx_u32(&x590, &x591, x4, (arg2[7])); + fiat_np384_mulx_u32(&x592, &x593, x4, (arg2[6])); + fiat_np384_mulx_u32(&x594, &x595, x4, (arg2[5])); + fiat_np384_mulx_u32(&x596, &x597, x4, (arg2[4])); + fiat_np384_mulx_u32(&x598, &x599, x4, (arg2[3])); + fiat_np384_mulx_u32(&x600, &x601, x4, (arg2[2])); + fiat_np384_mulx_u32(&x602, &x603, x4, (arg2[1])); + fiat_np384_mulx_u32(&x604, &x605, x4, (arg2[0])); + fiat_np384_addcarryx_u32(&x606, &x607, 0x0, x605, x602); + fiat_np384_addcarryx_u32(&x608, &x609, x607, x603, x600); + fiat_np384_addcarryx_u32(&x610, &x611, x609, x601, x598); + fiat_np384_addcarryx_u32(&x612, &x613, x611, x599, x596); + fiat_np384_addcarryx_u32(&x614, &x615, x613, x597, x594); + fiat_np384_addcarryx_u32(&x616, &x617, x615, x595, x592); + fiat_np384_addcarryx_u32(&x618, &x619, x617, x593, x590); + fiat_np384_addcarryx_u32(&x620, &x621, x619, x591, x588); + fiat_np384_addcarryx_u32(&x622, &x623, x621, x589, x586); + fiat_np384_addcarryx_u32(&x624, &x625, x623, x587, x584); + fiat_np384_addcarryx_u32(&x626, &x627, x625, x585, x582); + x628 = (x627 + x583); + fiat_np384_addcarryx_u32(&x629, &x630, 0x0, x557, x604); + fiat_np384_addcarryx_u32(&x631, &x632, x630, x559, x606); + fiat_np384_addcarryx_u32(&x633, &x634, x632, x561, x608); + fiat_np384_addcarryx_u32(&x635, &x636, x634, x563, x610); + fiat_np384_addcarryx_u32(&x637, &x638, x636, x565, x612); + fiat_np384_addcarryx_u32(&x639, &x640, x638, x567, x614); + fiat_np384_addcarryx_u32(&x641, &x642, x640, x569, x616); + fiat_np384_addcarryx_u32(&x643, &x644, x642, x571, x618); + fiat_np384_addcarryx_u32(&x645, &x646, x644, x573, x620); + fiat_np384_addcarryx_u32(&x647, &x648, x646, x575, x622); + fiat_np384_addcarryx_u32(&x649, &x650, x648, x577, x624); + fiat_np384_addcarryx_u32(&x651, &x652, x650, x579, x626); + fiat_np384_addcarryx_u32(&x653, &x654, x652, x581, x628); + fiat_np384_mulx_u32(&x655, &x656, x629, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x657, &x658, x655, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x659, &x660, x655, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x661, &x662, x655, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x663, &x664, x655, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x665, &x666, x655, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x667, &x668, x655, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x669, &x670, x655, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x671, &x672, x655, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x673, &x674, x655, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x675, &x676, x655, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x677, &x678, x655, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x679, &x680, x655, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x681, &x682, 0x0, x680, x677); + fiat_np384_addcarryx_u32(&x683, &x684, x682, x678, x675); + fiat_np384_addcarryx_u32(&x685, &x686, x684, x676, x673); + fiat_np384_addcarryx_u32(&x687, &x688, x686, x674, x671); + fiat_np384_addcarryx_u32(&x689, &x690, x688, x672, x669); + fiat_np384_addcarryx_u32(&x691, &x692, x690, x670, x667); + fiat_np384_addcarryx_u32(&x693, &x694, x692, x668, x665); + fiat_np384_addcarryx_u32(&x695, &x696, x694, x666, x663); + fiat_np384_addcarryx_u32(&x697, &x698, x696, x664, x661); + fiat_np384_addcarryx_u32(&x699, &x700, x698, x662, x659); + fiat_np384_addcarryx_u32(&x701, &x702, x700, x660, x657); + x703 = (x702 + x658); + fiat_np384_addcarryx_u32(&x704, &x705, 0x0, x629, x679); + fiat_np384_addcarryx_u32(&x706, &x707, x705, x631, x681); + fiat_np384_addcarryx_u32(&x708, &x709, x707, x633, x683); + fiat_np384_addcarryx_u32(&x710, &x711, x709, x635, x685); + fiat_np384_addcarryx_u32(&x712, &x713, x711, x637, x687); + fiat_np384_addcarryx_u32(&x714, &x715, x713, x639, x689); + fiat_np384_addcarryx_u32(&x716, &x717, x715, x641, x691); + fiat_np384_addcarryx_u32(&x718, &x719, x717, x643, x693); + fiat_np384_addcarryx_u32(&x720, &x721, x719, x645, x695); + fiat_np384_addcarryx_u32(&x722, &x723, x721, x647, x697); + fiat_np384_addcarryx_u32(&x724, &x725, x723, x649, x699); + fiat_np384_addcarryx_u32(&x726, &x727, x725, x651, x701); + fiat_np384_addcarryx_u32(&x728, &x729, x727, x653, x703); + x730 = ((uint32_t)x729 + x654); + fiat_np384_mulx_u32(&x731, &x732, x5, (arg2[11])); + fiat_np384_mulx_u32(&x733, &x734, x5, (arg2[10])); + fiat_np384_mulx_u32(&x735, &x736, x5, (arg2[9])); + fiat_np384_mulx_u32(&x737, &x738, x5, (arg2[8])); + fiat_np384_mulx_u32(&x739, &x740, x5, (arg2[7])); + fiat_np384_mulx_u32(&x741, &x742, x5, (arg2[6])); + fiat_np384_mulx_u32(&x743, &x744, x5, (arg2[5])); + fiat_np384_mulx_u32(&x745, &x746, x5, (arg2[4])); + fiat_np384_mulx_u32(&x747, &x748, x5, (arg2[3])); + fiat_np384_mulx_u32(&x749, &x750, x5, (arg2[2])); + fiat_np384_mulx_u32(&x751, &x752, x5, (arg2[1])); + fiat_np384_mulx_u32(&x753, &x754, x5, (arg2[0])); + fiat_np384_addcarryx_u32(&x755, &x756, 0x0, x754, x751); + fiat_np384_addcarryx_u32(&x757, &x758, x756, x752, x749); + fiat_np384_addcarryx_u32(&x759, &x760, x758, x750, x747); + fiat_np384_addcarryx_u32(&x761, &x762, x760, x748, x745); + fiat_np384_addcarryx_u32(&x763, &x764, x762, x746, x743); + fiat_np384_addcarryx_u32(&x765, &x766, x764, x744, x741); + fiat_np384_addcarryx_u32(&x767, &x768, x766, x742, x739); + fiat_np384_addcarryx_u32(&x769, &x770, x768, x740, x737); + fiat_np384_addcarryx_u32(&x771, &x772, x770, x738, x735); + fiat_np384_addcarryx_u32(&x773, &x774, x772, x736, x733); + fiat_np384_addcarryx_u32(&x775, &x776, x774, x734, x731); + x777 = (x776 + x732); + fiat_np384_addcarryx_u32(&x778, &x779, 0x0, x706, x753); + fiat_np384_addcarryx_u32(&x780, &x781, x779, x708, x755); + fiat_np384_addcarryx_u32(&x782, &x783, x781, x710, x757); + fiat_np384_addcarryx_u32(&x784, &x785, x783, x712, x759); + fiat_np384_addcarryx_u32(&x786, &x787, x785, x714, x761); + fiat_np384_addcarryx_u32(&x788, &x789, x787, x716, x763); + fiat_np384_addcarryx_u32(&x790, &x791, x789, x718, x765); + fiat_np384_addcarryx_u32(&x792, &x793, x791, x720, x767); + fiat_np384_addcarryx_u32(&x794, &x795, x793, x722, x769); + fiat_np384_addcarryx_u32(&x796, &x797, x795, x724, x771); + fiat_np384_addcarryx_u32(&x798, &x799, x797, x726, x773); + fiat_np384_addcarryx_u32(&x800, &x801, x799, x728, x775); + fiat_np384_addcarryx_u32(&x802, &x803, x801, x730, x777); + fiat_np384_mulx_u32(&x804, &x805, x778, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x806, &x807, x804, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x808, &x809, x804, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x810, &x811, x804, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x812, &x813, x804, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x814, &x815, x804, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x816, &x817, x804, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x818, &x819, x804, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x820, &x821, x804, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x822, &x823, x804, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x824, &x825, x804, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x826, &x827, x804, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x828, &x829, x804, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x830, &x831, 0x0, x829, x826); + fiat_np384_addcarryx_u32(&x832, &x833, x831, x827, x824); + fiat_np384_addcarryx_u32(&x834, &x835, x833, x825, x822); + fiat_np384_addcarryx_u32(&x836, &x837, x835, x823, x820); + fiat_np384_addcarryx_u32(&x838, &x839, x837, x821, x818); + fiat_np384_addcarryx_u32(&x840, &x841, x839, x819, x816); + fiat_np384_addcarryx_u32(&x842, &x843, x841, x817, x814); + fiat_np384_addcarryx_u32(&x844, &x845, x843, x815, x812); + fiat_np384_addcarryx_u32(&x846, &x847, x845, x813, x810); + fiat_np384_addcarryx_u32(&x848, &x849, x847, x811, x808); + fiat_np384_addcarryx_u32(&x850, &x851, x849, x809, x806); + x852 = (x851 + x807); + fiat_np384_addcarryx_u32(&x853, &x854, 0x0, x778, x828); + fiat_np384_addcarryx_u32(&x855, &x856, x854, x780, x830); + fiat_np384_addcarryx_u32(&x857, &x858, x856, x782, x832); + fiat_np384_addcarryx_u32(&x859, &x860, x858, x784, x834); + fiat_np384_addcarryx_u32(&x861, &x862, x860, x786, x836); + fiat_np384_addcarryx_u32(&x863, &x864, x862, x788, x838); + fiat_np384_addcarryx_u32(&x865, &x866, x864, x790, x840); + fiat_np384_addcarryx_u32(&x867, &x868, x866, x792, x842); + fiat_np384_addcarryx_u32(&x869, &x870, x868, x794, x844); + fiat_np384_addcarryx_u32(&x871, &x872, x870, x796, x846); + fiat_np384_addcarryx_u32(&x873, &x874, x872, x798, x848); + fiat_np384_addcarryx_u32(&x875, &x876, x874, x800, x850); + fiat_np384_addcarryx_u32(&x877, &x878, x876, x802, x852); + x879 = ((uint32_t)x878 + x803); + fiat_np384_mulx_u32(&x880, &x881, x6, (arg2[11])); + fiat_np384_mulx_u32(&x882, &x883, x6, (arg2[10])); + fiat_np384_mulx_u32(&x884, &x885, x6, (arg2[9])); + fiat_np384_mulx_u32(&x886, &x887, x6, (arg2[8])); + fiat_np384_mulx_u32(&x888, &x889, x6, (arg2[7])); + fiat_np384_mulx_u32(&x890, &x891, x6, (arg2[6])); + fiat_np384_mulx_u32(&x892, &x893, x6, (arg2[5])); + fiat_np384_mulx_u32(&x894, &x895, x6, (arg2[4])); + fiat_np384_mulx_u32(&x896, &x897, x6, (arg2[3])); + fiat_np384_mulx_u32(&x898, &x899, x6, (arg2[2])); + fiat_np384_mulx_u32(&x900, &x901, x6, (arg2[1])); + fiat_np384_mulx_u32(&x902, &x903, x6, (arg2[0])); + fiat_np384_addcarryx_u32(&x904, &x905, 0x0, x903, x900); + fiat_np384_addcarryx_u32(&x906, &x907, x905, x901, x898); + fiat_np384_addcarryx_u32(&x908, &x909, x907, x899, x896); + fiat_np384_addcarryx_u32(&x910, &x911, x909, x897, x894); + fiat_np384_addcarryx_u32(&x912, &x913, x911, x895, x892); + fiat_np384_addcarryx_u32(&x914, &x915, x913, x893, x890); + fiat_np384_addcarryx_u32(&x916, &x917, x915, x891, x888); + fiat_np384_addcarryx_u32(&x918, &x919, x917, x889, x886); + fiat_np384_addcarryx_u32(&x920, &x921, x919, x887, x884); + fiat_np384_addcarryx_u32(&x922, &x923, x921, x885, x882); + fiat_np384_addcarryx_u32(&x924, &x925, x923, x883, x880); + x926 = (x925 + x881); + fiat_np384_addcarryx_u32(&x927, &x928, 0x0, x855, x902); + fiat_np384_addcarryx_u32(&x929, &x930, x928, x857, x904); + fiat_np384_addcarryx_u32(&x931, &x932, x930, x859, x906); + fiat_np384_addcarryx_u32(&x933, &x934, x932, x861, x908); + fiat_np384_addcarryx_u32(&x935, &x936, x934, x863, x910); + fiat_np384_addcarryx_u32(&x937, &x938, x936, x865, x912); + fiat_np384_addcarryx_u32(&x939, &x940, x938, x867, x914); + fiat_np384_addcarryx_u32(&x941, &x942, x940, x869, x916); + fiat_np384_addcarryx_u32(&x943, &x944, x942, x871, x918); + fiat_np384_addcarryx_u32(&x945, &x946, x944, x873, x920); + fiat_np384_addcarryx_u32(&x947, &x948, x946, x875, x922); + fiat_np384_addcarryx_u32(&x949, &x950, x948, x877, x924); + fiat_np384_addcarryx_u32(&x951, &x952, x950, x879, x926); + fiat_np384_mulx_u32(&x953, &x954, x927, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x955, &x956, x953, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x957, &x958, x953, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x959, &x960, x953, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x961, &x962, x953, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x963, &x964, x953, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x965, &x966, x953, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x967, &x968, x953, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x969, &x970, x953, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x971, &x972, x953, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x973, &x974, x953, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x975, &x976, x953, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x977, &x978, x953, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x979, &x980, 0x0, x978, x975); + fiat_np384_addcarryx_u32(&x981, &x982, x980, x976, x973); + fiat_np384_addcarryx_u32(&x983, &x984, x982, x974, x971); + fiat_np384_addcarryx_u32(&x985, &x986, x984, x972, x969); + fiat_np384_addcarryx_u32(&x987, &x988, x986, x970, x967); + fiat_np384_addcarryx_u32(&x989, &x990, x988, x968, x965); + fiat_np384_addcarryx_u32(&x991, &x992, x990, x966, x963); + fiat_np384_addcarryx_u32(&x993, &x994, x992, x964, x961); + fiat_np384_addcarryx_u32(&x995, &x996, x994, x962, x959); + fiat_np384_addcarryx_u32(&x997, &x998, x996, x960, x957); + fiat_np384_addcarryx_u32(&x999, &x1000, x998, x958, x955); + x1001 = (x1000 + x956); + fiat_np384_addcarryx_u32(&x1002, &x1003, 0x0, x927, x977); + fiat_np384_addcarryx_u32(&x1004, &x1005, x1003, x929, x979); + fiat_np384_addcarryx_u32(&x1006, &x1007, x1005, x931, x981); + fiat_np384_addcarryx_u32(&x1008, &x1009, x1007, x933, x983); + fiat_np384_addcarryx_u32(&x1010, &x1011, x1009, x935, x985); + fiat_np384_addcarryx_u32(&x1012, &x1013, x1011, x937, x987); + fiat_np384_addcarryx_u32(&x1014, &x1015, x1013, x939, x989); + fiat_np384_addcarryx_u32(&x1016, &x1017, x1015, x941, x991); + fiat_np384_addcarryx_u32(&x1018, &x1019, x1017, x943, x993); + fiat_np384_addcarryx_u32(&x1020, &x1021, x1019, x945, x995); + fiat_np384_addcarryx_u32(&x1022, &x1023, x1021, x947, x997); + fiat_np384_addcarryx_u32(&x1024, &x1025, x1023, x949, x999); + fiat_np384_addcarryx_u32(&x1026, &x1027, x1025, x951, x1001); + x1028 = ((uint32_t)x1027 + x952); + fiat_np384_mulx_u32(&x1029, &x1030, x7, (arg2[11])); + fiat_np384_mulx_u32(&x1031, &x1032, x7, (arg2[10])); + fiat_np384_mulx_u32(&x1033, &x1034, x7, (arg2[9])); + fiat_np384_mulx_u32(&x1035, &x1036, x7, (arg2[8])); + fiat_np384_mulx_u32(&x1037, &x1038, x7, (arg2[7])); + fiat_np384_mulx_u32(&x1039, &x1040, x7, (arg2[6])); + fiat_np384_mulx_u32(&x1041, &x1042, x7, (arg2[5])); + fiat_np384_mulx_u32(&x1043, &x1044, x7, (arg2[4])); + fiat_np384_mulx_u32(&x1045, &x1046, x7, (arg2[3])); + fiat_np384_mulx_u32(&x1047, &x1048, x7, (arg2[2])); + fiat_np384_mulx_u32(&x1049, &x1050, x7, (arg2[1])); + fiat_np384_mulx_u32(&x1051, &x1052, x7, (arg2[0])); + fiat_np384_addcarryx_u32(&x1053, &x1054, 0x0, x1052, x1049); + fiat_np384_addcarryx_u32(&x1055, &x1056, x1054, x1050, x1047); + fiat_np384_addcarryx_u32(&x1057, &x1058, x1056, x1048, x1045); + fiat_np384_addcarryx_u32(&x1059, &x1060, x1058, x1046, x1043); + fiat_np384_addcarryx_u32(&x1061, &x1062, x1060, x1044, x1041); + fiat_np384_addcarryx_u32(&x1063, &x1064, x1062, x1042, x1039); + fiat_np384_addcarryx_u32(&x1065, &x1066, x1064, x1040, x1037); + fiat_np384_addcarryx_u32(&x1067, &x1068, x1066, x1038, x1035); + fiat_np384_addcarryx_u32(&x1069, &x1070, x1068, x1036, x1033); + fiat_np384_addcarryx_u32(&x1071, &x1072, x1070, x1034, x1031); + fiat_np384_addcarryx_u32(&x1073, &x1074, x1072, x1032, x1029); + x1075 = (x1074 + x1030); + fiat_np384_addcarryx_u32(&x1076, &x1077, 0x0, x1004, x1051); + fiat_np384_addcarryx_u32(&x1078, &x1079, x1077, x1006, x1053); + fiat_np384_addcarryx_u32(&x1080, &x1081, x1079, x1008, x1055); + fiat_np384_addcarryx_u32(&x1082, &x1083, x1081, x1010, x1057); + fiat_np384_addcarryx_u32(&x1084, &x1085, x1083, x1012, x1059); + fiat_np384_addcarryx_u32(&x1086, &x1087, x1085, x1014, x1061); + fiat_np384_addcarryx_u32(&x1088, &x1089, x1087, x1016, x1063); + fiat_np384_addcarryx_u32(&x1090, &x1091, x1089, x1018, x1065); + fiat_np384_addcarryx_u32(&x1092, &x1093, x1091, x1020, x1067); + fiat_np384_addcarryx_u32(&x1094, &x1095, x1093, x1022, x1069); + fiat_np384_addcarryx_u32(&x1096, &x1097, x1095, x1024, x1071); + fiat_np384_addcarryx_u32(&x1098, &x1099, x1097, x1026, x1073); + fiat_np384_addcarryx_u32(&x1100, &x1101, x1099, x1028, x1075); + fiat_np384_mulx_u32(&x1102, &x1103, x1076, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x1104, &x1105, x1102, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1106, &x1107, x1102, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1108, &x1109, x1102, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1110, &x1111, x1102, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1112, &x1113, x1102, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1114, &x1115, x1102, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1116, &x1117, x1102, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x1118, &x1119, x1102, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x1120, &x1121, x1102, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x1122, &x1123, x1102, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x1124, &x1125, x1102, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x1126, &x1127, x1102, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x1128, &x1129, 0x0, x1127, x1124); + fiat_np384_addcarryx_u32(&x1130, &x1131, x1129, x1125, x1122); + fiat_np384_addcarryx_u32(&x1132, &x1133, x1131, x1123, x1120); + fiat_np384_addcarryx_u32(&x1134, &x1135, x1133, x1121, x1118); + fiat_np384_addcarryx_u32(&x1136, &x1137, x1135, x1119, x1116); + fiat_np384_addcarryx_u32(&x1138, &x1139, x1137, x1117, x1114); + fiat_np384_addcarryx_u32(&x1140, &x1141, x1139, x1115, x1112); + fiat_np384_addcarryx_u32(&x1142, &x1143, x1141, x1113, x1110); + fiat_np384_addcarryx_u32(&x1144, &x1145, x1143, x1111, x1108); + fiat_np384_addcarryx_u32(&x1146, &x1147, x1145, x1109, x1106); + fiat_np384_addcarryx_u32(&x1148, &x1149, x1147, x1107, x1104); + x1150 = (x1149 + x1105); + fiat_np384_addcarryx_u32(&x1151, &x1152, 0x0, x1076, x1126); + fiat_np384_addcarryx_u32(&x1153, &x1154, x1152, x1078, x1128); + fiat_np384_addcarryx_u32(&x1155, &x1156, x1154, x1080, x1130); + fiat_np384_addcarryx_u32(&x1157, &x1158, x1156, x1082, x1132); + fiat_np384_addcarryx_u32(&x1159, &x1160, x1158, x1084, x1134); + fiat_np384_addcarryx_u32(&x1161, &x1162, x1160, x1086, x1136); + fiat_np384_addcarryx_u32(&x1163, &x1164, x1162, x1088, x1138); + fiat_np384_addcarryx_u32(&x1165, &x1166, x1164, x1090, x1140); + fiat_np384_addcarryx_u32(&x1167, &x1168, x1166, x1092, x1142); + fiat_np384_addcarryx_u32(&x1169, &x1170, x1168, x1094, x1144); + fiat_np384_addcarryx_u32(&x1171, &x1172, x1170, x1096, x1146); + fiat_np384_addcarryx_u32(&x1173, &x1174, x1172, x1098, x1148); + fiat_np384_addcarryx_u32(&x1175, &x1176, x1174, x1100, x1150); + x1177 = ((uint32_t)x1176 + x1101); + fiat_np384_mulx_u32(&x1178, &x1179, x8, (arg2[11])); + fiat_np384_mulx_u32(&x1180, &x1181, x8, (arg2[10])); + fiat_np384_mulx_u32(&x1182, &x1183, x8, (arg2[9])); + fiat_np384_mulx_u32(&x1184, &x1185, x8, (arg2[8])); + fiat_np384_mulx_u32(&x1186, &x1187, x8, (arg2[7])); + fiat_np384_mulx_u32(&x1188, &x1189, x8, (arg2[6])); + fiat_np384_mulx_u32(&x1190, &x1191, x8, (arg2[5])); + fiat_np384_mulx_u32(&x1192, &x1193, x8, (arg2[4])); + fiat_np384_mulx_u32(&x1194, &x1195, x8, (arg2[3])); + fiat_np384_mulx_u32(&x1196, &x1197, x8, (arg2[2])); + fiat_np384_mulx_u32(&x1198, &x1199, x8, (arg2[1])); + fiat_np384_mulx_u32(&x1200, &x1201, x8, (arg2[0])); + fiat_np384_addcarryx_u32(&x1202, &x1203, 0x0, x1201, x1198); + fiat_np384_addcarryx_u32(&x1204, &x1205, x1203, x1199, x1196); + fiat_np384_addcarryx_u32(&x1206, &x1207, x1205, x1197, x1194); + fiat_np384_addcarryx_u32(&x1208, &x1209, x1207, x1195, x1192); + fiat_np384_addcarryx_u32(&x1210, &x1211, x1209, x1193, x1190); + fiat_np384_addcarryx_u32(&x1212, &x1213, x1211, x1191, x1188); + fiat_np384_addcarryx_u32(&x1214, &x1215, x1213, x1189, x1186); + fiat_np384_addcarryx_u32(&x1216, &x1217, x1215, x1187, x1184); + fiat_np384_addcarryx_u32(&x1218, &x1219, x1217, x1185, x1182); + fiat_np384_addcarryx_u32(&x1220, &x1221, x1219, x1183, x1180); + fiat_np384_addcarryx_u32(&x1222, &x1223, x1221, x1181, x1178); + x1224 = (x1223 + x1179); + fiat_np384_addcarryx_u32(&x1225, &x1226, 0x0, x1153, x1200); + fiat_np384_addcarryx_u32(&x1227, &x1228, x1226, x1155, x1202); + fiat_np384_addcarryx_u32(&x1229, &x1230, x1228, x1157, x1204); + fiat_np384_addcarryx_u32(&x1231, &x1232, x1230, x1159, x1206); + fiat_np384_addcarryx_u32(&x1233, &x1234, x1232, x1161, x1208); + fiat_np384_addcarryx_u32(&x1235, &x1236, x1234, x1163, x1210); + fiat_np384_addcarryx_u32(&x1237, &x1238, x1236, x1165, x1212); + fiat_np384_addcarryx_u32(&x1239, &x1240, x1238, x1167, x1214); + fiat_np384_addcarryx_u32(&x1241, &x1242, x1240, x1169, x1216); + fiat_np384_addcarryx_u32(&x1243, &x1244, x1242, x1171, x1218); + fiat_np384_addcarryx_u32(&x1245, &x1246, x1244, x1173, x1220); + fiat_np384_addcarryx_u32(&x1247, &x1248, x1246, x1175, x1222); + fiat_np384_addcarryx_u32(&x1249, &x1250, x1248, x1177, x1224); + fiat_np384_mulx_u32(&x1251, &x1252, x1225, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x1253, &x1254, x1251, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1255, &x1256, x1251, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1257, &x1258, x1251, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1259, &x1260, x1251, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1261, &x1262, x1251, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1263, &x1264, x1251, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1265, &x1266, x1251, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x1267, &x1268, x1251, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x1269, &x1270, x1251, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x1271, &x1272, x1251, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x1273, &x1274, x1251, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x1275, &x1276, x1251, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x1277, &x1278, 0x0, x1276, x1273); + fiat_np384_addcarryx_u32(&x1279, &x1280, x1278, x1274, x1271); + fiat_np384_addcarryx_u32(&x1281, &x1282, x1280, x1272, x1269); + fiat_np384_addcarryx_u32(&x1283, &x1284, x1282, x1270, x1267); + fiat_np384_addcarryx_u32(&x1285, &x1286, x1284, x1268, x1265); + fiat_np384_addcarryx_u32(&x1287, &x1288, x1286, x1266, x1263); + fiat_np384_addcarryx_u32(&x1289, &x1290, x1288, x1264, x1261); + fiat_np384_addcarryx_u32(&x1291, &x1292, x1290, x1262, x1259); + fiat_np384_addcarryx_u32(&x1293, &x1294, x1292, x1260, x1257); + fiat_np384_addcarryx_u32(&x1295, &x1296, x1294, x1258, x1255); + fiat_np384_addcarryx_u32(&x1297, &x1298, x1296, x1256, x1253); + x1299 = (x1298 + x1254); + fiat_np384_addcarryx_u32(&x1300, &x1301, 0x0, x1225, x1275); + fiat_np384_addcarryx_u32(&x1302, &x1303, x1301, x1227, x1277); + fiat_np384_addcarryx_u32(&x1304, &x1305, x1303, x1229, x1279); + fiat_np384_addcarryx_u32(&x1306, &x1307, x1305, x1231, x1281); + fiat_np384_addcarryx_u32(&x1308, &x1309, x1307, x1233, x1283); + fiat_np384_addcarryx_u32(&x1310, &x1311, x1309, x1235, x1285); + fiat_np384_addcarryx_u32(&x1312, &x1313, x1311, x1237, x1287); + fiat_np384_addcarryx_u32(&x1314, &x1315, x1313, x1239, x1289); + fiat_np384_addcarryx_u32(&x1316, &x1317, x1315, x1241, x1291); + fiat_np384_addcarryx_u32(&x1318, &x1319, x1317, x1243, x1293); + fiat_np384_addcarryx_u32(&x1320, &x1321, x1319, x1245, x1295); + fiat_np384_addcarryx_u32(&x1322, &x1323, x1321, x1247, x1297); + fiat_np384_addcarryx_u32(&x1324, &x1325, x1323, x1249, x1299); + x1326 = ((uint32_t)x1325 + x1250); + fiat_np384_mulx_u32(&x1327, &x1328, x9, (arg2[11])); + fiat_np384_mulx_u32(&x1329, &x1330, x9, (arg2[10])); + fiat_np384_mulx_u32(&x1331, &x1332, x9, (arg2[9])); + fiat_np384_mulx_u32(&x1333, &x1334, x9, (arg2[8])); + fiat_np384_mulx_u32(&x1335, &x1336, x9, (arg2[7])); + fiat_np384_mulx_u32(&x1337, &x1338, x9, (arg2[6])); + fiat_np384_mulx_u32(&x1339, &x1340, x9, (arg2[5])); + fiat_np384_mulx_u32(&x1341, &x1342, x9, (arg2[4])); + fiat_np384_mulx_u32(&x1343, &x1344, x9, (arg2[3])); + fiat_np384_mulx_u32(&x1345, &x1346, x9, (arg2[2])); + fiat_np384_mulx_u32(&x1347, &x1348, x9, (arg2[1])); + fiat_np384_mulx_u32(&x1349, &x1350, x9, (arg2[0])); + fiat_np384_addcarryx_u32(&x1351, &x1352, 0x0, x1350, x1347); + fiat_np384_addcarryx_u32(&x1353, &x1354, x1352, x1348, x1345); + fiat_np384_addcarryx_u32(&x1355, &x1356, x1354, x1346, x1343); + fiat_np384_addcarryx_u32(&x1357, &x1358, x1356, x1344, x1341); + fiat_np384_addcarryx_u32(&x1359, &x1360, x1358, x1342, x1339); + fiat_np384_addcarryx_u32(&x1361, &x1362, x1360, x1340, x1337); + fiat_np384_addcarryx_u32(&x1363, &x1364, x1362, x1338, x1335); + fiat_np384_addcarryx_u32(&x1365, &x1366, x1364, x1336, x1333); + fiat_np384_addcarryx_u32(&x1367, &x1368, x1366, x1334, x1331); + fiat_np384_addcarryx_u32(&x1369, &x1370, x1368, x1332, x1329); + fiat_np384_addcarryx_u32(&x1371, &x1372, x1370, x1330, x1327); + x1373 = (x1372 + x1328); + fiat_np384_addcarryx_u32(&x1374, &x1375, 0x0, x1302, x1349); + fiat_np384_addcarryx_u32(&x1376, &x1377, x1375, x1304, x1351); + fiat_np384_addcarryx_u32(&x1378, &x1379, x1377, x1306, x1353); + fiat_np384_addcarryx_u32(&x1380, &x1381, x1379, x1308, x1355); + fiat_np384_addcarryx_u32(&x1382, &x1383, x1381, x1310, x1357); + fiat_np384_addcarryx_u32(&x1384, &x1385, x1383, x1312, x1359); + fiat_np384_addcarryx_u32(&x1386, &x1387, x1385, x1314, x1361); + fiat_np384_addcarryx_u32(&x1388, &x1389, x1387, x1316, x1363); + fiat_np384_addcarryx_u32(&x1390, &x1391, x1389, x1318, x1365); + fiat_np384_addcarryx_u32(&x1392, &x1393, x1391, x1320, x1367); + fiat_np384_addcarryx_u32(&x1394, &x1395, x1393, x1322, x1369); + fiat_np384_addcarryx_u32(&x1396, &x1397, x1395, x1324, x1371); + fiat_np384_addcarryx_u32(&x1398, &x1399, x1397, x1326, x1373); + fiat_np384_mulx_u32(&x1400, &x1401, x1374, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x1402, &x1403, x1400, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1404, &x1405, x1400, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1406, &x1407, x1400, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1408, &x1409, x1400, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1410, &x1411, x1400, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1412, &x1413, x1400, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1414, &x1415, x1400, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x1416, &x1417, x1400, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x1418, &x1419, x1400, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x1420, &x1421, x1400, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x1422, &x1423, x1400, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x1424, &x1425, x1400, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x1426, &x1427, 0x0, x1425, x1422); + fiat_np384_addcarryx_u32(&x1428, &x1429, x1427, x1423, x1420); + fiat_np384_addcarryx_u32(&x1430, &x1431, x1429, x1421, x1418); + fiat_np384_addcarryx_u32(&x1432, &x1433, x1431, x1419, x1416); + fiat_np384_addcarryx_u32(&x1434, &x1435, x1433, x1417, x1414); + fiat_np384_addcarryx_u32(&x1436, &x1437, x1435, x1415, x1412); + fiat_np384_addcarryx_u32(&x1438, &x1439, x1437, x1413, x1410); + fiat_np384_addcarryx_u32(&x1440, &x1441, x1439, x1411, x1408); + fiat_np384_addcarryx_u32(&x1442, &x1443, x1441, x1409, x1406); + fiat_np384_addcarryx_u32(&x1444, &x1445, x1443, x1407, x1404); + fiat_np384_addcarryx_u32(&x1446, &x1447, x1445, x1405, x1402); + x1448 = (x1447 + x1403); + fiat_np384_addcarryx_u32(&x1449, &x1450, 0x0, x1374, x1424); + fiat_np384_addcarryx_u32(&x1451, &x1452, x1450, x1376, x1426); + fiat_np384_addcarryx_u32(&x1453, &x1454, x1452, x1378, x1428); + fiat_np384_addcarryx_u32(&x1455, &x1456, x1454, x1380, x1430); + fiat_np384_addcarryx_u32(&x1457, &x1458, x1456, x1382, x1432); + fiat_np384_addcarryx_u32(&x1459, &x1460, x1458, x1384, x1434); + fiat_np384_addcarryx_u32(&x1461, &x1462, x1460, x1386, x1436); + fiat_np384_addcarryx_u32(&x1463, &x1464, x1462, x1388, x1438); + fiat_np384_addcarryx_u32(&x1465, &x1466, x1464, x1390, x1440); + fiat_np384_addcarryx_u32(&x1467, &x1468, x1466, x1392, x1442); + fiat_np384_addcarryx_u32(&x1469, &x1470, x1468, x1394, x1444); + fiat_np384_addcarryx_u32(&x1471, &x1472, x1470, x1396, x1446); + fiat_np384_addcarryx_u32(&x1473, &x1474, x1472, x1398, x1448); + x1475 = ((uint32_t)x1474 + x1399); + fiat_np384_mulx_u32(&x1476, &x1477, x10, (arg2[11])); + fiat_np384_mulx_u32(&x1478, &x1479, x10, (arg2[10])); + fiat_np384_mulx_u32(&x1480, &x1481, x10, (arg2[9])); + fiat_np384_mulx_u32(&x1482, &x1483, x10, (arg2[8])); + fiat_np384_mulx_u32(&x1484, &x1485, x10, (arg2[7])); + fiat_np384_mulx_u32(&x1486, &x1487, x10, (arg2[6])); + fiat_np384_mulx_u32(&x1488, &x1489, x10, (arg2[5])); + fiat_np384_mulx_u32(&x1490, &x1491, x10, (arg2[4])); + fiat_np384_mulx_u32(&x1492, &x1493, x10, (arg2[3])); + fiat_np384_mulx_u32(&x1494, &x1495, x10, (arg2[2])); + fiat_np384_mulx_u32(&x1496, &x1497, x10, (arg2[1])); + fiat_np384_mulx_u32(&x1498, &x1499, x10, (arg2[0])); + fiat_np384_addcarryx_u32(&x1500, &x1501, 0x0, x1499, x1496); + fiat_np384_addcarryx_u32(&x1502, &x1503, x1501, x1497, x1494); + fiat_np384_addcarryx_u32(&x1504, &x1505, x1503, x1495, x1492); + fiat_np384_addcarryx_u32(&x1506, &x1507, x1505, x1493, x1490); + fiat_np384_addcarryx_u32(&x1508, &x1509, x1507, x1491, x1488); + fiat_np384_addcarryx_u32(&x1510, &x1511, x1509, x1489, x1486); + fiat_np384_addcarryx_u32(&x1512, &x1513, x1511, x1487, x1484); + fiat_np384_addcarryx_u32(&x1514, &x1515, x1513, x1485, x1482); + fiat_np384_addcarryx_u32(&x1516, &x1517, x1515, x1483, x1480); + fiat_np384_addcarryx_u32(&x1518, &x1519, x1517, x1481, x1478); + fiat_np384_addcarryx_u32(&x1520, &x1521, x1519, x1479, x1476); + x1522 = (x1521 + x1477); + fiat_np384_addcarryx_u32(&x1523, &x1524, 0x0, x1451, x1498); + fiat_np384_addcarryx_u32(&x1525, &x1526, x1524, x1453, x1500); + fiat_np384_addcarryx_u32(&x1527, &x1528, x1526, x1455, x1502); + fiat_np384_addcarryx_u32(&x1529, &x1530, x1528, x1457, x1504); + fiat_np384_addcarryx_u32(&x1531, &x1532, x1530, x1459, x1506); + fiat_np384_addcarryx_u32(&x1533, &x1534, x1532, x1461, x1508); + fiat_np384_addcarryx_u32(&x1535, &x1536, x1534, x1463, x1510); + fiat_np384_addcarryx_u32(&x1537, &x1538, x1536, x1465, x1512); + fiat_np384_addcarryx_u32(&x1539, &x1540, x1538, x1467, x1514); + fiat_np384_addcarryx_u32(&x1541, &x1542, x1540, x1469, x1516); + fiat_np384_addcarryx_u32(&x1543, &x1544, x1542, x1471, x1518); + fiat_np384_addcarryx_u32(&x1545, &x1546, x1544, x1473, x1520); + fiat_np384_addcarryx_u32(&x1547, &x1548, x1546, x1475, x1522); + fiat_np384_mulx_u32(&x1549, &x1550, x1523, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x1551, &x1552, x1549, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1553, &x1554, x1549, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1555, &x1556, x1549, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1557, &x1558, x1549, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1559, &x1560, x1549, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1561, &x1562, x1549, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1563, &x1564, x1549, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x1565, &x1566, x1549, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x1567, &x1568, x1549, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x1569, &x1570, x1549, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x1571, &x1572, x1549, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x1573, &x1574, x1549, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x1575, &x1576, 0x0, x1574, x1571); + fiat_np384_addcarryx_u32(&x1577, &x1578, x1576, x1572, x1569); + fiat_np384_addcarryx_u32(&x1579, &x1580, x1578, x1570, x1567); + fiat_np384_addcarryx_u32(&x1581, &x1582, x1580, x1568, x1565); + fiat_np384_addcarryx_u32(&x1583, &x1584, x1582, x1566, x1563); + fiat_np384_addcarryx_u32(&x1585, &x1586, x1584, x1564, x1561); + fiat_np384_addcarryx_u32(&x1587, &x1588, x1586, x1562, x1559); + fiat_np384_addcarryx_u32(&x1589, &x1590, x1588, x1560, x1557); + fiat_np384_addcarryx_u32(&x1591, &x1592, x1590, x1558, x1555); + fiat_np384_addcarryx_u32(&x1593, &x1594, x1592, x1556, x1553); + fiat_np384_addcarryx_u32(&x1595, &x1596, x1594, x1554, x1551); + x1597 = (x1596 + x1552); + fiat_np384_addcarryx_u32(&x1598, &x1599, 0x0, x1523, x1573); + fiat_np384_addcarryx_u32(&x1600, &x1601, x1599, x1525, x1575); + fiat_np384_addcarryx_u32(&x1602, &x1603, x1601, x1527, x1577); + fiat_np384_addcarryx_u32(&x1604, &x1605, x1603, x1529, x1579); + fiat_np384_addcarryx_u32(&x1606, &x1607, x1605, x1531, x1581); + fiat_np384_addcarryx_u32(&x1608, &x1609, x1607, x1533, x1583); + fiat_np384_addcarryx_u32(&x1610, &x1611, x1609, x1535, x1585); + fiat_np384_addcarryx_u32(&x1612, &x1613, x1611, x1537, x1587); + fiat_np384_addcarryx_u32(&x1614, &x1615, x1613, x1539, x1589); + fiat_np384_addcarryx_u32(&x1616, &x1617, x1615, x1541, x1591); + fiat_np384_addcarryx_u32(&x1618, &x1619, x1617, x1543, x1593); + fiat_np384_addcarryx_u32(&x1620, &x1621, x1619, x1545, x1595); + fiat_np384_addcarryx_u32(&x1622, &x1623, x1621, x1547, x1597); + x1624 = ((uint32_t)x1623 + x1548); + fiat_np384_mulx_u32(&x1625, &x1626, x11, (arg2[11])); + fiat_np384_mulx_u32(&x1627, &x1628, x11, (arg2[10])); + fiat_np384_mulx_u32(&x1629, &x1630, x11, (arg2[9])); + fiat_np384_mulx_u32(&x1631, &x1632, x11, (arg2[8])); + fiat_np384_mulx_u32(&x1633, &x1634, x11, (arg2[7])); + fiat_np384_mulx_u32(&x1635, &x1636, x11, (arg2[6])); + fiat_np384_mulx_u32(&x1637, &x1638, x11, (arg2[5])); + fiat_np384_mulx_u32(&x1639, &x1640, x11, (arg2[4])); + fiat_np384_mulx_u32(&x1641, &x1642, x11, (arg2[3])); + fiat_np384_mulx_u32(&x1643, &x1644, x11, (arg2[2])); + fiat_np384_mulx_u32(&x1645, &x1646, x11, (arg2[1])); + fiat_np384_mulx_u32(&x1647, &x1648, x11, (arg2[0])); + fiat_np384_addcarryx_u32(&x1649, &x1650, 0x0, x1648, x1645); + fiat_np384_addcarryx_u32(&x1651, &x1652, x1650, x1646, x1643); + fiat_np384_addcarryx_u32(&x1653, &x1654, x1652, x1644, x1641); + fiat_np384_addcarryx_u32(&x1655, &x1656, x1654, x1642, x1639); + fiat_np384_addcarryx_u32(&x1657, &x1658, x1656, x1640, x1637); + fiat_np384_addcarryx_u32(&x1659, &x1660, x1658, x1638, x1635); + fiat_np384_addcarryx_u32(&x1661, &x1662, x1660, x1636, x1633); + fiat_np384_addcarryx_u32(&x1663, &x1664, x1662, x1634, x1631); + fiat_np384_addcarryx_u32(&x1665, &x1666, x1664, x1632, x1629); + fiat_np384_addcarryx_u32(&x1667, &x1668, x1666, x1630, x1627); + fiat_np384_addcarryx_u32(&x1669, &x1670, x1668, x1628, x1625); + x1671 = (x1670 + x1626); + fiat_np384_addcarryx_u32(&x1672, &x1673, 0x0, x1600, x1647); + fiat_np384_addcarryx_u32(&x1674, &x1675, x1673, x1602, x1649); + fiat_np384_addcarryx_u32(&x1676, &x1677, x1675, x1604, x1651); + fiat_np384_addcarryx_u32(&x1678, &x1679, x1677, x1606, x1653); + fiat_np384_addcarryx_u32(&x1680, &x1681, x1679, x1608, x1655); + fiat_np384_addcarryx_u32(&x1682, &x1683, x1681, x1610, x1657); + fiat_np384_addcarryx_u32(&x1684, &x1685, x1683, x1612, x1659); + fiat_np384_addcarryx_u32(&x1686, &x1687, x1685, x1614, x1661); + fiat_np384_addcarryx_u32(&x1688, &x1689, x1687, x1616, x1663); + fiat_np384_addcarryx_u32(&x1690, &x1691, x1689, x1618, x1665); + fiat_np384_addcarryx_u32(&x1692, &x1693, x1691, x1620, x1667); + fiat_np384_addcarryx_u32(&x1694, &x1695, x1693, x1622, x1669); + fiat_np384_addcarryx_u32(&x1696, &x1697, x1695, x1624, x1671); + fiat_np384_mulx_u32(&x1698, &x1699, x1672, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x1700, &x1701, x1698, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1702, &x1703, x1698, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1704, &x1705, x1698, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1706, &x1707, x1698, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1708, &x1709, x1698, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1710, &x1711, x1698, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1712, &x1713, x1698, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x1714, &x1715, x1698, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x1716, &x1717, x1698, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x1718, &x1719, x1698, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x1720, &x1721, x1698, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x1722, &x1723, x1698, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x1724, &x1725, 0x0, x1723, x1720); + fiat_np384_addcarryx_u32(&x1726, &x1727, x1725, x1721, x1718); + fiat_np384_addcarryx_u32(&x1728, &x1729, x1727, x1719, x1716); + fiat_np384_addcarryx_u32(&x1730, &x1731, x1729, x1717, x1714); + fiat_np384_addcarryx_u32(&x1732, &x1733, x1731, x1715, x1712); + fiat_np384_addcarryx_u32(&x1734, &x1735, x1733, x1713, x1710); + fiat_np384_addcarryx_u32(&x1736, &x1737, x1735, x1711, x1708); + fiat_np384_addcarryx_u32(&x1738, &x1739, x1737, x1709, x1706); + fiat_np384_addcarryx_u32(&x1740, &x1741, x1739, x1707, x1704); + fiat_np384_addcarryx_u32(&x1742, &x1743, x1741, x1705, x1702); + fiat_np384_addcarryx_u32(&x1744, &x1745, x1743, x1703, x1700); + x1746 = (x1745 + x1701); + fiat_np384_addcarryx_u32(&x1747, &x1748, 0x0, x1672, x1722); + fiat_np384_addcarryx_u32(&x1749, &x1750, x1748, x1674, x1724); + fiat_np384_addcarryx_u32(&x1751, &x1752, x1750, x1676, x1726); + fiat_np384_addcarryx_u32(&x1753, &x1754, x1752, x1678, x1728); + fiat_np384_addcarryx_u32(&x1755, &x1756, x1754, x1680, x1730); + fiat_np384_addcarryx_u32(&x1757, &x1758, x1756, x1682, x1732); + fiat_np384_addcarryx_u32(&x1759, &x1760, x1758, x1684, x1734); + fiat_np384_addcarryx_u32(&x1761, &x1762, x1760, x1686, x1736); + fiat_np384_addcarryx_u32(&x1763, &x1764, x1762, x1688, x1738); + fiat_np384_addcarryx_u32(&x1765, &x1766, x1764, x1690, x1740); + fiat_np384_addcarryx_u32(&x1767, &x1768, x1766, x1692, x1742); + fiat_np384_addcarryx_u32(&x1769, &x1770, x1768, x1694, x1744); + fiat_np384_addcarryx_u32(&x1771, &x1772, x1770, x1696, x1746); + x1773 = ((uint32_t)x1772 + x1697); + fiat_np384_subborrowx_u32(&x1774, &x1775, 0x0, x1749, UINT32_C(0xccc52973)); + fiat_np384_subborrowx_u32(&x1776, &x1777, x1775, x1751, UINT32_C(0xecec196a)); + fiat_np384_subborrowx_u32(&x1778, &x1779, x1777, x1753, UINT32_C(0x48b0a77a)); + fiat_np384_subborrowx_u32(&x1780, &x1781, x1779, x1755, UINT32_C(0x581a0db2)); + fiat_np384_subborrowx_u32(&x1782, &x1783, x1781, x1757, UINT32_C(0xf4372ddf)); + fiat_np384_subborrowx_u32(&x1784, &x1785, x1783, x1759, UINT32_C(0xc7634d81)); + fiat_np384_subborrowx_u32(&x1786, &x1787, x1785, x1761, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1788, &x1789, x1787, x1763, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1790, &x1791, x1789, x1765, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1792, &x1793, x1791, x1767, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1794, &x1795, x1793, x1769, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1796, &x1797, x1795, x1771, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1798, &x1799, x1797, x1773, 0x0); + fiat_np384_cmovznz_u32(&x1800, x1799, x1774, x1749); + fiat_np384_cmovznz_u32(&x1801, x1799, x1776, x1751); + fiat_np384_cmovznz_u32(&x1802, x1799, x1778, x1753); + fiat_np384_cmovznz_u32(&x1803, x1799, x1780, x1755); + fiat_np384_cmovznz_u32(&x1804, x1799, x1782, x1757); + fiat_np384_cmovznz_u32(&x1805, x1799, x1784, x1759); + fiat_np384_cmovznz_u32(&x1806, x1799, x1786, x1761); + fiat_np384_cmovznz_u32(&x1807, x1799, x1788, x1763); + fiat_np384_cmovznz_u32(&x1808, x1799, x1790, x1765); + fiat_np384_cmovznz_u32(&x1809, x1799, x1792, x1767); + fiat_np384_cmovznz_u32(&x1810, x1799, x1794, x1769); + fiat_np384_cmovznz_u32(&x1811, x1799, x1796, x1771); + out1[0] = x1800; + out1[1] = x1801; + out1[2] = x1802; + out1[3] = x1803; + out1[4] = x1804; + out1[5] = x1805; + out1[6] = x1806; + out1[7] = x1807; + out1[8] = x1808; + out1[9] = x1809; + out1[10] = x1810; + out1[11] = x1811; +} + +/* + * The function fiat_np384_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np384_add(uint32_t out1[12], const uint32_t arg1[12], const uint32_t arg2[12]) { + uint32_t x1; + fiat_np384_uint1 x2; + uint32_t x3; + fiat_np384_uint1 x4; + uint32_t x5; + fiat_np384_uint1 x6; + uint32_t x7; + fiat_np384_uint1 x8; + uint32_t x9; + fiat_np384_uint1 x10; + uint32_t x11; + fiat_np384_uint1 x12; + uint32_t x13; + fiat_np384_uint1 x14; + uint32_t x15; + fiat_np384_uint1 x16; + uint32_t x17; + fiat_np384_uint1 x18; + uint32_t x19; + fiat_np384_uint1 x20; + uint32_t x21; + fiat_np384_uint1 x22; + uint32_t x23; + fiat_np384_uint1 x24; + uint32_t x25; + fiat_np384_uint1 x26; + uint32_t x27; + fiat_np384_uint1 x28; + uint32_t x29; + fiat_np384_uint1 x30; + uint32_t x31; + fiat_np384_uint1 x32; + uint32_t x33; + fiat_np384_uint1 x34; + uint32_t x35; + fiat_np384_uint1 x36; + uint32_t x37; + fiat_np384_uint1 x38; + uint32_t x39; + fiat_np384_uint1 x40; + uint32_t x41; + fiat_np384_uint1 x42; + uint32_t x43; + fiat_np384_uint1 x44; + uint32_t x45; + fiat_np384_uint1 x46; + uint32_t x47; + fiat_np384_uint1 x48; + uint32_t x49; + fiat_np384_uint1 x50; + uint32_t x51; + uint32_t x52; + uint32_t x53; + uint32_t x54; + uint32_t x55; + uint32_t x56; + uint32_t x57; + uint32_t x58; + uint32_t x59; + uint32_t x60; + uint32_t x61; + uint32_t x62; + fiat_np384_addcarryx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_np384_addcarryx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_np384_addcarryx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_np384_addcarryx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_np384_addcarryx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_np384_addcarryx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_np384_addcarryx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); + fiat_np384_addcarryx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); + fiat_np384_addcarryx_u32(&x17, &x18, x16, (arg1[8]), (arg2[8])); + fiat_np384_addcarryx_u32(&x19, &x20, x18, (arg1[9]), (arg2[9])); + fiat_np384_addcarryx_u32(&x21, &x22, x20, (arg1[10]), (arg2[10])); + fiat_np384_addcarryx_u32(&x23, &x24, x22, (arg1[11]), (arg2[11])); + fiat_np384_subborrowx_u32(&x25, &x26, 0x0, x1, UINT32_C(0xccc52973)); + fiat_np384_subborrowx_u32(&x27, &x28, x26, x3, UINT32_C(0xecec196a)); + fiat_np384_subborrowx_u32(&x29, &x30, x28, x5, UINT32_C(0x48b0a77a)); + fiat_np384_subborrowx_u32(&x31, &x32, x30, x7, UINT32_C(0x581a0db2)); + fiat_np384_subborrowx_u32(&x33, &x34, x32, x9, UINT32_C(0xf4372ddf)); + fiat_np384_subborrowx_u32(&x35, &x36, x34, x11, UINT32_C(0xc7634d81)); + fiat_np384_subborrowx_u32(&x37, &x38, x36, x13, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x39, &x40, x38, x15, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x41, &x42, x40, x17, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x43, &x44, x42, x19, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x45, &x46, x44, x21, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x47, &x48, x46, x23, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x49, &x50, x48, x24, 0x0); + fiat_np384_cmovznz_u32(&x51, x50, x25, x1); + fiat_np384_cmovznz_u32(&x52, x50, x27, x3); + fiat_np384_cmovznz_u32(&x53, x50, x29, x5); + fiat_np384_cmovznz_u32(&x54, x50, x31, x7); + fiat_np384_cmovznz_u32(&x55, x50, x33, x9); + fiat_np384_cmovznz_u32(&x56, x50, x35, x11); + fiat_np384_cmovznz_u32(&x57, x50, x37, x13); + fiat_np384_cmovznz_u32(&x58, x50, x39, x15); + fiat_np384_cmovznz_u32(&x59, x50, x41, x17); + fiat_np384_cmovznz_u32(&x60, x50, x43, x19); + fiat_np384_cmovznz_u32(&x61, x50, x45, x21); + fiat_np384_cmovznz_u32(&x62, x50, x47, x23); + out1[0] = x51; + out1[1] = x52; + out1[2] = x53; + out1[3] = x54; + out1[4] = x55; + out1[5] = x56; + out1[6] = x57; + out1[7] = x58; + out1[8] = x59; + out1[9] = x60; + out1[10] = x61; + out1[11] = x62; +} + +/* + * The function fiat_np384_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np384_opp(uint32_t out1[12], const uint32_t arg1[12]) { + uint32_t x1; + fiat_np384_uint1 x2; + uint32_t x3; + fiat_np384_uint1 x4; + uint32_t x5; + fiat_np384_uint1 x6; + uint32_t x7; + fiat_np384_uint1 x8; + uint32_t x9; + fiat_np384_uint1 x10; + uint32_t x11; + fiat_np384_uint1 x12; + uint32_t x13; + fiat_np384_uint1 x14; + uint32_t x15; + fiat_np384_uint1 x16; + uint32_t x17; + fiat_np384_uint1 x18; + uint32_t x19; + fiat_np384_uint1 x20; + uint32_t x21; + fiat_np384_uint1 x22; + uint32_t x23; + fiat_np384_uint1 x24; + uint32_t x25; + uint32_t x26; + fiat_np384_uint1 x27; + uint32_t x28; + fiat_np384_uint1 x29; + uint32_t x30; + fiat_np384_uint1 x31; + uint32_t x32; + fiat_np384_uint1 x33; + uint32_t x34; + fiat_np384_uint1 x35; + uint32_t x36; + fiat_np384_uint1 x37; + uint32_t x38; + fiat_np384_uint1 x39; + uint32_t x40; + fiat_np384_uint1 x41; + uint32_t x42; + fiat_np384_uint1 x43; + uint32_t x44; + fiat_np384_uint1 x45; + uint32_t x46; + fiat_np384_uint1 x47; + uint32_t x48; + fiat_np384_uint1 x49; + fiat_np384_subborrowx_u32(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_np384_subborrowx_u32(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_np384_subborrowx_u32(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_np384_subborrowx_u32(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_np384_subborrowx_u32(&x9, &x10, x8, 0x0, (arg1[4])); + fiat_np384_subborrowx_u32(&x11, &x12, x10, 0x0, (arg1[5])); + fiat_np384_subborrowx_u32(&x13, &x14, x12, 0x0, (arg1[6])); + fiat_np384_subborrowx_u32(&x15, &x16, x14, 0x0, (arg1[7])); + fiat_np384_subborrowx_u32(&x17, &x18, x16, 0x0, (arg1[8])); + fiat_np384_subborrowx_u32(&x19, &x20, x18, 0x0, (arg1[9])); + fiat_np384_subborrowx_u32(&x21, &x22, x20, 0x0, (arg1[10])); + fiat_np384_subborrowx_u32(&x23, &x24, x22, 0x0, (arg1[11])); + fiat_np384_cmovznz_u32(&x25, x24, 0x0, UINT32_C(0xffffffff)); + fiat_np384_addcarryx_u32(&x26, &x27, 0x0, x1, (x25 & UINT32_C(0xccc52973))); + fiat_np384_addcarryx_u32(&x28, &x29, x27, x3, (x25 & UINT32_C(0xecec196a))); + fiat_np384_addcarryx_u32(&x30, &x31, x29, x5, (x25 & UINT32_C(0x48b0a77a))); + fiat_np384_addcarryx_u32(&x32, &x33, x31, x7, (x25 & UINT32_C(0x581a0db2))); + fiat_np384_addcarryx_u32(&x34, &x35, x33, x9, (x25 & UINT32_C(0xf4372ddf))); + fiat_np384_addcarryx_u32(&x36, &x37, x35, x11, (x25 & UINT32_C(0xc7634d81))); + fiat_np384_addcarryx_u32(&x38, &x39, x37, x13, x25); + fiat_np384_addcarryx_u32(&x40, &x41, x39, x15, x25); + fiat_np384_addcarryx_u32(&x42, &x43, x41, x17, x25); + fiat_np384_addcarryx_u32(&x44, &x45, x43, x19, x25); + fiat_np384_addcarryx_u32(&x46, &x47, x45, x21, x25); + fiat_np384_addcarryx_u32(&x48, &x49, x47, x23, x25); + out1[0] = x26; + out1[1] = x28; + out1[2] = x30; + out1[3] = x32; + out1[4] = x34; + out1[5] = x36; + out1[6] = x38; + out1[7] = x40; + out1[8] = x42; + out1[9] = x44; + out1[10] = x46; + out1[11] = x48; +} + +/* + * The function fiat_np384_from_montgomery translates a field element out of the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^32)⁻¹ mod m)^12) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np384_from_montgomery(uint32_t out1[12], const uint32_t arg1[12]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint32_t x28; + fiat_np384_uint1 x29; + uint32_t x30; + fiat_np384_uint1 x31; + uint32_t x32; + fiat_np384_uint1 x33; + uint32_t x34; + fiat_np384_uint1 x35; + uint32_t x36; + fiat_np384_uint1 x37; + uint32_t x38; + fiat_np384_uint1 x39; + uint32_t x40; + fiat_np384_uint1 x41; + uint32_t x42; + fiat_np384_uint1 x43; + uint32_t x44; + fiat_np384_uint1 x45; + uint32_t x46; + fiat_np384_uint1 x47; + uint32_t x48; + fiat_np384_uint1 x49; + uint32_t x50; + fiat_np384_uint1 x51; + uint32_t x52; + fiat_np384_uint1 x53; + uint32_t x54; + fiat_np384_uint1 x55; + uint32_t x56; + fiat_np384_uint1 x57; + uint32_t x58; + fiat_np384_uint1 x59; + uint32_t x60; + fiat_np384_uint1 x61; + uint32_t x62; + fiat_np384_uint1 x63; + uint32_t x64; + fiat_np384_uint1 x65; + uint32_t x66; + fiat_np384_uint1 x67; + uint32_t x68; + fiat_np384_uint1 x69; + uint32_t x70; + fiat_np384_uint1 x71; + uint32_t x72; + fiat_np384_uint1 x73; + uint32_t x74; + fiat_np384_uint1 x75; + uint32_t x76; + fiat_np384_uint1 x77; + uint32_t x78; + fiat_np384_uint1 x79; + uint32_t x80; + fiat_np384_uint1 x81; + uint32_t x82; + fiat_np384_uint1 x83; + uint32_t x84; + fiat_np384_uint1 x85; + uint32_t x86; + fiat_np384_uint1 x87; + uint32_t x88; + fiat_np384_uint1 x89; + uint32_t x90; + fiat_np384_uint1 x91; + uint32_t x92; + fiat_np384_uint1 x93; + uint32_t x94; + fiat_np384_uint1 x95; + uint32_t x96; + fiat_np384_uint1 x97; + uint32_t x98; + fiat_np384_uint1 x99; + uint32_t x100; + uint32_t x101; + uint32_t x102; + uint32_t x103; + uint32_t x104; + uint32_t x105; + uint32_t x106; + uint32_t x107; + uint32_t x108; + uint32_t x109; + uint32_t x110; + uint32_t x111; + uint32_t x112; + uint32_t x113; + uint32_t x114; + uint32_t x115; + uint32_t x116; + uint32_t x117; + uint32_t x118; + uint32_t x119; + uint32_t x120; + uint32_t x121; + uint32_t x122; + uint32_t x123; + uint32_t x124; + uint32_t x125; + uint32_t x126; + fiat_np384_uint1 x127; + uint32_t x128; + fiat_np384_uint1 x129; + uint32_t x130; + fiat_np384_uint1 x131; + uint32_t x132; + fiat_np384_uint1 x133; + uint32_t x134; + fiat_np384_uint1 x135; + uint32_t x136; + fiat_np384_uint1 x137; + uint32_t x138; + fiat_np384_uint1 x139; + uint32_t x140; + fiat_np384_uint1 x141; + uint32_t x142; + fiat_np384_uint1 x143; + uint32_t x144; + fiat_np384_uint1 x145; + uint32_t x146; + fiat_np384_uint1 x147; + uint32_t x148; + fiat_np384_uint1 x149; + uint32_t x150; + fiat_np384_uint1 x151; + uint32_t x152; + fiat_np384_uint1 x153; + uint32_t x154; + fiat_np384_uint1 x155; + uint32_t x156; + fiat_np384_uint1 x157; + uint32_t x158; + fiat_np384_uint1 x159; + uint32_t x160; + fiat_np384_uint1 x161; + uint32_t x162; + fiat_np384_uint1 x163; + uint32_t x164; + fiat_np384_uint1 x165; + uint32_t x166; + fiat_np384_uint1 x167; + uint32_t x168; + fiat_np384_uint1 x169; + uint32_t x170; + fiat_np384_uint1 x171; + uint32_t x172; + fiat_np384_uint1 x173; + uint32_t x174; + fiat_np384_uint1 x175; + uint32_t x176; + fiat_np384_uint1 x177; + uint32_t x178; + fiat_np384_uint1 x179; + uint32_t x180; + fiat_np384_uint1 x181; + uint32_t x182; + fiat_np384_uint1 x183; + uint32_t x184; + fiat_np384_uint1 x185; + uint32_t x186; + fiat_np384_uint1 x187; + uint32_t x188; + fiat_np384_uint1 x189; + uint32_t x190; + fiat_np384_uint1 x191; + uint32_t x192; + fiat_np384_uint1 x193; + uint32_t x194; + fiat_np384_uint1 x195; + uint32_t x196; + fiat_np384_uint1 x197; + uint32_t x198; + uint32_t x199; + uint32_t x200; + uint32_t x201; + uint32_t x202; + uint32_t x203; + uint32_t x204; + uint32_t x205; + uint32_t x206; + uint32_t x207; + uint32_t x208; + uint32_t x209; + uint32_t x210; + uint32_t x211; + uint32_t x212; + uint32_t x213; + uint32_t x214; + uint32_t x215; + uint32_t x216; + uint32_t x217; + uint32_t x218; + uint32_t x219; + uint32_t x220; + uint32_t x221; + uint32_t x222; + uint32_t x223; + uint32_t x224; + fiat_np384_uint1 x225; + uint32_t x226; + fiat_np384_uint1 x227; + uint32_t x228; + fiat_np384_uint1 x229; + uint32_t x230; + fiat_np384_uint1 x231; + uint32_t x232; + fiat_np384_uint1 x233; + uint32_t x234; + fiat_np384_uint1 x235; + uint32_t x236; + fiat_np384_uint1 x237; + uint32_t x238; + fiat_np384_uint1 x239; + uint32_t x240; + fiat_np384_uint1 x241; + uint32_t x242; + fiat_np384_uint1 x243; + uint32_t x244; + fiat_np384_uint1 x245; + uint32_t x246; + fiat_np384_uint1 x247; + uint32_t x248; + fiat_np384_uint1 x249; + uint32_t x250; + fiat_np384_uint1 x251; + uint32_t x252; + fiat_np384_uint1 x253; + uint32_t x254; + fiat_np384_uint1 x255; + uint32_t x256; + fiat_np384_uint1 x257; + uint32_t x258; + fiat_np384_uint1 x259; + uint32_t x260; + fiat_np384_uint1 x261; + uint32_t x262; + fiat_np384_uint1 x263; + uint32_t x264; + fiat_np384_uint1 x265; + uint32_t x266; + fiat_np384_uint1 x267; + uint32_t x268; + fiat_np384_uint1 x269; + uint32_t x270; + fiat_np384_uint1 x271; + uint32_t x272; + fiat_np384_uint1 x273; + uint32_t x274; + fiat_np384_uint1 x275; + uint32_t x276; + fiat_np384_uint1 x277; + uint32_t x278; + fiat_np384_uint1 x279; + uint32_t x280; + fiat_np384_uint1 x281; + uint32_t x282; + fiat_np384_uint1 x283; + uint32_t x284; + fiat_np384_uint1 x285; + uint32_t x286; + fiat_np384_uint1 x287; + uint32_t x288; + fiat_np384_uint1 x289; + uint32_t x290; + fiat_np384_uint1 x291; + uint32_t x292; + fiat_np384_uint1 x293; + uint32_t x294; + fiat_np384_uint1 x295; + uint32_t x296; + uint32_t x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + uint32_t x303; + uint32_t x304; + uint32_t x305; + uint32_t x306; + uint32_t x307; + uint32_t x308; + uint32_t x309; + uint32_t x310; + uint32_t x311; + uint32_t x312; + uint32_t x313; + uint32_t x314; + uint32_t x315; + uint32_t x316; + uint32_t x317; + uint32_t x318; + uint32_t x319; + uint32_t x320; + uint32_t x321; + uint32_t x322; + fiat_np384_uint1 x323; + uint32_t x324; + fiat_np384_uint1 x325; + uint32_t x326; + fiat_np384_uint1 x327; + uint32_t x328; + fiat_np384_uint1 x329; + uint32_t x330; + fiat_np384_uint1 x331; + uint32_t x332; + fiat_np384_uint1 x333; + uint32_t x334; + fiat_np384_uint1 x335; + uint32_t x336; + fiat_np384_uint1 x337; + uint32_t x338; + fiat_np384_uint1 x339; + uint32_t x340; + fiat_np384_uint1 x341; + uint32_t x342; + fiat_np384_uint1 x343; + uint32_t x344; + fiat_np384_uint1 x345; + uint32_t x346; + fiat_np384_uint1 x347; + uint32_t x348; + fiat_np384_uint1 x349; + uint32_t x350; + fiat_np384_uint1 x351; + uint32_t x352; + fiat_np384_uint1 x353; + uint32_t x354; + fiat_np384_uint1 x355; + uint32_t x356; + fiat_np384_uint1 x357; + uint32_t x358; + fiat_np384_uint1 x359; + uint32_t x360; + fiat_np384_uint1 x361; + uint32_t x362; + fiat_np384_uint1 x363; + uint32_t x364; + fiat_np384_uint1 x365; + uint32_t x366; + fiat_np384_uint1 x367; + uint32_t x368; + fiat_np384_uint1 x369; + uint32_t x370; + fiat_np384_uint1 x371; + uint32_t x372; + fiat_np384_uint1 x373; + uint32_t x374; + fiat_np384_uint1 x375; + uint32_t x376; + fiat_np384_uint1 x377; + uint32_t x378; + fiat_np384_uint1 x379; + uint32_t x380; + fiat_np384_uint1 x381; + uint32_t x382; + fiat_np384_uint1 x383; + uint32_t x384; + fiat_np384_uint1 x385; + uint32_t x386; + fiat_np384_uint1 x387; + uint32_t x388; + fiat_np384_uint1 x389; + uint32_t x390; + fiat_np384_uint1 x391; + uint32_t x392; + fiat_np384_uint1 x393; + uint32_t x394; + uint32_t x395; + uint32_t x396; + uint32_t x397; + uint32_t x398; + uint32_t x399; + uint32_t x400; + uint32_t x401; + uint32_t x402; + uint32_t x403; + uint32_t x404; + uint32_t x405; + uint32_t x406; + uint32_t x407; + uint32_t x408; + uint32_t x409; + uint32_t x410; + uint32_t x411; + uint32_t x412; + uint32_t x413; + uint32_t x414; + uint32_t x415; + uint32_t x416; + uint32_t x417; + uint32_t x418; + uint32_t x419; + uint32_t x420; + fiat_np384_uint1 x421; + uint32_t x422; + fiat_np384_uint1 x423; + uint32_t x424; + fiat_np384_uint1 x425; + uint32_t x426; + fiat_np384_uint1 x427; + uint32_t x428; + fiat_np384_uint1 x429; + uint32_t x430; + fiat_np384_uint1 x431; + uint32_t x432; + fiat_np384_uint1 x433; + uint32_t x434; + fiat_np384_uint1 x435; + uint32_t x436; + fiat_np384_uint1 x437; + uint32_t x438; + fiat_np384_uint1 x439; + uint32_t x440; + fiat_np384_uint1 x441; + uint32_t x442; + fiat_np384_uint1 x443; + uint32_t x444; + fiat_np384_uint1 x445; + uint32_t x446; + fiat_np384_uint1 x447; + uint32_t x448; + fiat_np384_uint1 x449; + uint32_t x450; + fiat_np384_uint1 x451; + uint32_t x452; + fiat_np384_uint1 x453; + uint32_t x454; + fiat_np384_uint1 x455; + uint32_t x456; + fiat_np384_uint1 x457; + uint32_t x458; + fiat_np384_uint1 x459; + uint32_t x460; + fiat_np384_uint1 x461; + uint32_t x462; + fiat_np384_uint1 x463; + uint32_t x464; + fiat_np384_uint1 x465; + uint32_t x466; + fiat_np384_uint1 x467; + uint32_t x468; + fiat_np384_uint1 x469; + uint32_t x470; + fiat_np384_uint1 x471; + uint32_t x472; + fiat_np384_uint1 x473; + uint32_t x474; + fiat_np384_uint1 x475; + uint32_t x476; + fiat_np384_uint1 x477; + uint32_t x478; + fiat_np384_uint1 x479; + uint32_t x480; + fiat_np384_uint1 x481; + uint32_t x482; + fiat_np384_uint1 x483; + uint32_t x484; + fiat_np384_uint1 x485; + uint32_t x486; + fiat_np384_uint1 x487; + uint32_t x488; + fiat_np384_uint1 x489; + uint32_t x490; + fiat_np384_uint1 x491; + uint32_t x492; + uint32_t x493; + uint32_t x494; + uint32_t x495; + uint32_t x496; + uint32_t x497; + uint32_t x498; + uint32_t x499; + uint32_t x500; + uint32_t x501; + uint32_t x502; + uint32_t x503; + uint32_t x504; + uint32_t x505; + uint32_t x506; + uint32_t x507; + uint32_t x508; + uint32_t x509; + uint32_t x510; + uint32_t x511; + uint32_t x512; + uint32_t x513; + uint32_t x514; + uint32_t x515; + uint32_t x516; + uint32_t x517; + uint32_t x518; + fiat_np384_uint1 x519; + uint32_t x520; + fiat_np384_uint1 x521; + uint32_t x522; + fiat_np384_uint1 x523; + uint32_t x524; + fiat_np384_uint1 x525; + uint32_t x526; + fiat_np384_uint1 x527; + uint32_t x528; + fiat_np384_uint1 x529; + uint32_t x530; + fiat_np384_uint1 x531; + uint32_t x532; + fiat_np384_uint1 x533; + uint32_t x534; + fiat_np384_uint1 x535; + uint32_t x536; + fiat_np384_uint1 x537; + uint32_t x538; + fiat_np384_uint1 x539; + uint32_t x540; + fiat_np384_uint1 x541; + uint32_t x542; + fiat_np384_uint1 x543; + uint32_t x544; + fiat_np384_uint1 x545; + uint32_t x546; + fiat_np384_uint1 x547; + uint32_t x548; + fiat_np384_uint1 x549; + uint32_t x550; + fiat_np384_uint1 x551; + uint32_t x552; + fiat_np384_uint1 x553; + uint32_t x554; + fiat_np384_uint1 x555; + uint32_t x556; + fiat_np384_uint1 x557; + uint32_t x558; + fiat_np384_uint1 x559; + uint32_t x560; + fiat_np384_uint1 x561; + uint32_t x562; + fiat_np384_uint1 x563; + uint32_t x564; + fiat_np384_uint1 x565; + uint32_t x566; + fiat_np384_uint1 x567; + uint32_t x568; + fiat_np384_uint1 x569; + uint32_t x570; + fiat_np384_uint1 x571; + uint32_t x572; + fiat_np384_uint1 x573; + uint32_t x574; + fiat_np384_uint1 x575; + uint32_t x576; + fiat_np384_uint1 x577; + uint32_t x578; + fiat_np384_uint1 x579; + uint32_t x580; + fiat_np384_uint1 x581; + uint32_t x582; + fiat_np384_uint1 x583; + uint32_t x584; + fiat_np384_uint1 x585; + uint32_t x586; + fiat_np384_uint1 x587; + uint32_t x588; + fiat_np384_uint1 x589; + uint32_t x590; + uint32_t x591; + uint32_t x592; + uint32_t x593; + uint32_t x594; + uint32_t x595; + uint32_t x596; + uint32_t x597; + uint32_t x598; + uint32_t x599; + uint32_t x600; + uint32_t x601; + uint32_t x602; + uint32_t x603; + uint32_t x604; + uint32_t x605; + uint32_t x606; + uint32_t x607; + uint32_t x608; + uint32_t x609; + uint32_t x610; + uint32_t x611; + uint32_t x612; + uint32_t x613; + uint32_t x614; + uint32_t x615; + uint32_t x616; + fiat_np384_uint1 x617; + uint32_t x618; + fiat_np384_uint1 x619; + uint32_t x620; + fiat_np384_uint1 x621; + uint32_t x622; + fiat_np384_uint1 x623; + uint32_t x624; + fiat_np384_uint1 x625; + uint32_t x626; + fiat_np384_uint1 x627; + uint32_t x628; + fiat_np384_uint1 x629; + uint32_t x630; + fiat_np384_uint1 x631; + uint32_t x632; + fiat_np384_uint1 x633; + uint32_t x634; + fiat_np384_uint1 x635; + uint32_t x636; + fiat_np384_uint1 x637; + uint32_t x638; + fiat_np384_uint1 x639; + uint32_t x640; + fiat_np384_uint1 x641; + uint32_t x642; + fiat_np384_uint1 x643; + uint32_t x644; + fiat_np384_uint1 x645; + uint32_t x646; + fiat_np384_uint1 x647; + uint32_t x648; + fiat_np384_uint1 x649; + uint32_t x650; + fiat_np384_uint1 x651; + uint32_t x652; + fiat_np384_uint1 x653; + uint32_t x654; + fiat_np384_uint1 x655; + uint32_t x656; + fiat_np384_uint1 x657; + uint32_t x658; + fiat_np384_uint1 x659; + uint32_t x660; + fiat_np384_uint1 x661; + uint32_t x662; + fiat_np384_uint1 x663; + uint32_t x664; + fiat_np384_uint1 x665; + uint32_t x666; + fiat_np384_uint1 x667; + uint32_t x668; + fiat_np384_uint1 x669; + uint32_t x670; + fiat_np384_uint1 x671; + uint32_t x672; + fiat_np384_uint1 x673; + uint32_t x674; + fiat_np384_uint1 x675; + uint32_t x676; + fiat_np384_uint1 x677; + uint32_t x678; + fiat_np384_uint1 x679; + uint32_t x680; + fiat_np384_uint1 x681; + uint32_t x682; + fiat_np384_uint1 x683; + uint32_t x684; + fiat_np384_uint1 x685; + uint32_t x686; + fiat_np384_uint1 x687; + uint32_t x688; + uint32_t x689; + uint32_t x690; + uint32_t x691; + uint32_t x692; + uint32_t x693; + uint32_t x694; + uint32_t x695; + uint32_t x696; + uint32_t x697; + uint32_t x698; + uint32_t x699; + uint32_t x700; + uint32_t x701; + uint32_t x702; + uint32_t x703; + uint32_t x704; + uint32_t x705; + uint32_t x706; + uint32_t x707; + uint32_t x708; + uint32_t x709; + uint32_t x710; + uint32_t x711; + uint32_t x712; + uint32_t x713; + uint32_t x714; + fiat_np384_uint1 x715; + uint32_t x716; + fiat_np384_uint1 x717; + uint32_t x718; + fiat_np384_uint1 x719; + uint32_t x720; + fiat_np384_uint1 x721; + uint32_t x722; + fiat_np384_uint1 x723; + uint32_t x724; + fiat_np384_uint1 x725; + uint32_t x726; + fiat_np384_uint1 x727; + uint32_t x728; + fiat_np384_uint1 x729; + uint32_t x730; + fiat_np384_uint1 x731; + uint32_t x732; + fiat_np384_uint1 x733; + uint32_t x734; + fiat_np384_uint1 x735; + uint32_t x736; + fiat_np384_uint1 x737; + uint32_t x738; + fiat_np384_uint1 x739; + uint32_t x740; + fiat_np384_uint1 x741; + uint32_t x742; + fiat_np384_uint1 x743; + uint32_t x744; + fiat_np384_uint1 x745; + uint32_t x746; + fiat_np384_uint1 x747; + uint32_t x748; + fiat_np384_uint1 x749; + uint32_t x750; + fiat_np384_uint1 x751; + uint32_t x752; + fiat_np384_uint1 x753; + uint32_t x754; + fiat_np384_uint1 x755; + uint32_t x756; + fiat_np384_uint1 x757; + uint32_t x758; + fiat_np384_uint1 x759; + uint32_t x760; + fiat_np384_uint1 x761; + uint32_t x762; + fiat_np384_uint1 x763; + uint32_t x764; + fiat_np384_uint1 x765; + uint32_t x766; + fiat_np384_uint1 x767; + uint32_t x768; + fiat_np384_uint1 x769; + uint32_t x770; + fiat_np384_uint1 x771; + uint32_t x772; + fiat_np384_uint1 x773; + uint32_t x774; + fiat_np384_uint1 x775; + uint32_t x776; + fiat_np384_uint1 x777; + uint32_t x778; + fiat_np384_uint1 x779; + uint32_t x780; + fiat_np384_uint1 x781; + uint32_t x782; + fiat_np384_uint1 x783; + uint32_t x784; + fiat_np384_uint1 x785; + uint32_t x786; + uint32_t x787; + uint32_t x788; + uint32_t x789; + uint32_t x790; + uint32_t x791; + uint32_t x792; + uint32_t x793; + uint32_t x794; + uint32_t x795; + uint32_t x796; + uint32_t x797; + uint32_t x798; + uint32_t x799; + uint32_t x800; + uint32_t x801; + uint32_t x802; + uint32_t x803; + uint32_t x804; + uint32_t x805; + uint32_t x806; + uint32_t x807; + uint32_t x808; + uint32_t x809; + uint32_t x810; + uint32_t x811; + uint32_t x812; + fiat_np384_uint1 x813; + uint32_t x814; + fiat_np384_uint1 x815; + uint32_t x816; + fiat_np384_uint1 x817; + uint32_t x818; + fiat_np384_uint1 x819; + uint32_t x820; + fiat_np384_uint1 x821; + uint32_t x822; + fiat_np384_uint1 x823; + uint32_t x824; + fiat_np384_uint1 x825; + uint32_t x826; + fiat_np384_uint1 x827; + uint32_t x828; + fiat_np384_uint1 x829; + uint32_t x830; + fiat_np384_uint1 x831; + uint32_t x832; + fiat_np384_uint1 x833; + uint32_t x834; + fiat_np384_uint1 x835; + uint32_t x836; + fiat_np384_uint1 x837; + uint32_t x838; + fiat_np384_uint1 x839; + uint32_t x840; + fiat_np384_uint1 x841; + uint32_t x842; + fiat_np384_uint1 x843; + uint32_t x844; + fiat_np384_uint1 x845; + uint32_t x846; + fiat_np384_uint1 x847; + uint32_t x848; + fiat_np384_uint1 x849; + uint32_t x850; + fiat_np384_uint1 x851; + uint32_t x852; + fiat_np384_uint1 x853; + uint32_t x854; + fiat_np384_uint1 x855; + uint32_t x856; + fiat_np384_uint1 x857; + uint32_t x858; + fiat_np384_uint1 x859; + uint32_t x860; + fiat_np384_uint1 x861; + uint32_t x862; + fiat_np384_uint1 x863; + uint32_t x864; + fiat_np384_uint1 x865; + uint32_t x866; + fiat_np384_uint1 x867; + uint32_t x868; + fiat_np384_uint1 x869; + uint32_t x870; + fiat_np384_uint1 x871; + uint32_t x872; + fiat_np384_uint1 x873; + uint32_t x874; + fiat_np384_uint1 x875; + uint32_t x876; + fiat_np384_uint1 x877; + uint32_t x878; + fiat_np384_uint1 x879; + uint32_t x880; + fiat_np384_uint1 x881; + uint32_t x882; + fiat_np384_uint1 x883; + uint32_t x884; + uint32_t x885; + uint32_t x886; + uint32_t x887; + uint32_t x888; + uint32_t x889; + uint32_t x890; + uint32_t x891; + uint32_t x892; + uint32_t x893; + uint32_t x894; + uint32_t x895; + uint32_t x896; + uint32_t x897; + uint32_t x898; + uint32_t x899; + uint32_t x900; + uint32_t x901; + uint32_t x902; + uint32_t x903; + uint32_t x904; + uint32_t x905; + uint32_t x906; + uint32_t x907; + uint32_t x908; + uint32_t x909; + uint32_t x910; + fiat_np384_uint1 x911; + uint32_t x912; + fiat_np384_uint1 x913; + uint32_t x914; + fiat_np384_uint1 x915; + uint32_t x916; + fiat_np384_uint1 x917; + uint32_t x918; + fiat_np384_uint1 x919; + uint32_t x920; + fiat_np384_uint1 x921; + uint32_t x922; + fiat_np384_uint1 x923; + uint32_t x924; + fiat_np384_uint1 x925; + uint32_t x926; + fiat_np384_uint1 x927; + uint32_t x928; + fiat_np384_uint1 x929; + uint32_t x930; + fiat_np384_uint1 x931; + uint32_t x932; + fiat_np384_uint1 x933; + uint32_t x934; + fiat_np384_uint1 x935; + uint32_t x936; + fiat_np384_uint1 x937; + uint32_t x938; + fiat_np384_uint1 x939; + uint32_t x940; + fiat_np384_uint1 x941; + uint32_t x942; + fiat_np384_uint1 x943; + uint32_t x944; + fiat_np384_uint1 x945; + uint32_t x946; + fiat_np384_uint1 x947; + uint32_t x948; + fiat_np384_uint1 x949; + uint32_t x950; + fiat_np384_uint1 x951; + uint32_t x952; + fiat_np384_uint1 x953; + uint32_t x954; + fiat_np384_uint1 x955; + uint32_t x956; + fiat_np384_uint1 x957; + uint32_t x958; + fiat_np384_uint1 x959; + uint32_t x960; + fiat_np384_uint1 x961; + uint32_t x962; + fiat_np384_uint1 x963; + uint32_t x964; + fiat_np384_uint1 x965; + uint32_t x966; + fiat_np384_uint1 x967; + uint32_t x968; + fiat_np384_uint1 x969; + uint32_t x970; + fiat_np384_uint1 x971; + uint32_t x972; + fiat_np384_uint1 x973; + uint32_t x974; + fiat_np384_uint1 x975; + uint32_t x976; + fiat_np384_uint1 x977; + uint32_t x978; + fiat_np384_uint1 x979; + uint32_t x980; + fiat_np384_uint1 x981; + uint32_t x982; + uint32_t x983; + uint32_t x984; + uint32_t x985; + uint32_t x986; + uint32_t x987; + uint32_t x988; + uint32_t x989; + uint32_t x990; + uint32_t x991; + uint32_t x992; + uint32_t x993; + uint32_t x994; + uint32_t x995; + uint32_t x996; + uint32_t x997; + uint32_t x998; + uint32_t x999; + uint32_t x1000; + uint32_t x1001; + uint32_t x1002; + uint32_t x1003; + uint32_t x1004; + uint32_t x1005; + uint32_t x1006; + uint32_t x1007; + uint32_t x1008; + fiat_np384_uint1 x1009; + uint32_t x1010; + fiat_np384_uint1 x1011; + uint32_t x1012; + fiat_np384_uint1 x1013; + uint32_t x1014; + fiat_np384_uint1 x1015; + uint32_t x1016; + fiat_np384_uint1 x1017; + uint32_t x1018; + fiat_np384_uint1 x1019; + uint32_t x1020; + fiat_np384_uint1 x1021; + uint32_t x1022; + fiat_np384_uint1 x1023; + uint32_t x1024; + fiat_np384_uint1 x1025; + uint32_t x1026; + fiat_np384_uint1 x1027; + uint32_t x1028; + fiat_np384_uint1 x1029; + uint32_t x1030; + fiat_np384_uint1 x1031; + uint32_t x1032; + fiat_np384_uint1 x1033; + uint32_t x1034; + fiat_np384_uint1 x1035; + uint32_t x1036; + fiat_np384_uint1 x1037; + uint32_t x1038; + fiat_np384_uint1 x1039; + uint32_t x1040; + fiat_np384_uint1 x1041; + uint32_t x1042; + fiat_np384_uint1 x1043; + uint32_t x1044; + fiat_np384_uint1 x1045; + uint32_t x1046; + fiat_np384_uint1 x1047; + uint32_t x1048; + fiat_np384_uint1 x1049; + uint32_t x1050; + fiat_np384_uint1 x1051; + uint32_t x1052; + fiat_np384_uint1 x1053; + uint32_t x1054; + fiat_np384_uint1 x1055; + uint32_t x1056; + fiat_np384_uint1 x1057; + uint32_t x1058; + fiat_np384_uint1 x1059; + uint32_t x1060; + fiat_np384_uint1 x1061; + uint32_t x1062; + fiat_np384_uint1 x1063; + uint32_t x1064; + fiat_np384_uint1 x1065; + uint32_t x1066; + fiat_np384_uint1 x1067; + uint32_t x1068; + fiat_np384_uint1 x1069; + uint32_t x1070; + fiat_np384_uint1 x1071; + uint32_t x1072; + fiat_np384_uint1 x1073; + uint32_t x1074; + fiat_np384_uint1 x1075; + uint32_t x1076; + fiat_np384_uint1 x1077; + uint32_t x1078; + fiat_np384_uint1 x1079; + uint32_t x1080; + uint32_t x1081; + uint32_t x1082; + uint32_t x1083; + uint32_t x1084; + uint32_t x1085; + uint32_t x1086; + uint32_t x1087; + uint32_t x1088; + uint32_t x1089; + uint32_t x1090; + uint32_t x1091; + uint32_t x1092; + uint32_t x1093; + uint32_t x1094; + uint32_t x1095; + uint32_t x1096; + uint32_t x1097; + uint32_t x1098; + uint32_t x1099; + uint32_t x1100; + uint32_t x1101; + uint32_t x1102; + uint32_t x1103; + uint32_t x1104; + uint32_t x1105; + uint32_t x1106; + fiat_np384_uint1 x1107; + uint32_t x1108; + fiat_np384_uint1 x1109; + uint32_t x1110; + fiat_np384_uint1 x1111; + uint32_t x1112; + fiat_np384_uint1 x1113; + uint32_t x1114; + fiat_np384_uint1 x1115; + uint32_t x1116; + fiat_np384_uint1 x1117; + uint32_t x1118; + fiat_np384_uint1 x1119; + uint32_t x1120; + fiat_np384_uint1 x1121; + uint32_t x1122; + fiat_np384_uint1 x1123; + uint32_t x1124; + fiat_np384_uint1 x1125; + uint32_t x1126; + fiat_np384_uint1 x1127; + uint32_t x1128; + fiat_np384_uint1 x1129; + uint32_t x1130; + fiat_np384_uint1 x1131; + uint32_t x1132; + fiat_np384_uint1 x1133; + uint32_t x1134; + fiat_np384_uint1 x1135; + uint32_t x1136; + fiat_np384_uint1 x1137; + uint32_t x1138; + fiat_np384_uint1 x1139; + uint32_t x1140; + fiat_np384_uint1 x1141; + uint32_t x1142; + fiat_np384_uint1 x1143; + uint32_t x1144; + fiat_np384_uint1 x1145; + uint32_t x1146; + fiat_np384_uint1 x1147; + uint32_t x1148; + fiat_np384_uint1 x1149; + uint32_t x1150; + fiat_np384_uint1 x1151; + uint32_t x1152; + fiat_np384_uint1 x1153; + uint32_t x1154; + fiat_np384_uint1 x1155; + uint32_t x1156; + fiat_np384_uint1 x1157; + uint32_t x1158; + fiat_np384_uint1 x1159; + uint32_t x1160; + fiat_np384_uint1 x1161; + uint32_t x1162; + fiat_np384_uint1 x1163; + uint32_t x1164; + fiat_np384_uint1 x1165; + uint32_t x1166; + fiat_np384_uint1 x1167; + uint32_t x1168; + fiat_np384_uint1 x1169; + uint32_t x1170; + fiat_np384_uint1 x1171; + uint32_t x1172; + fiat_np384_uint1 x1173; + uint32_t x1174; + fiat_np384_uint1 x1175; + uint32_t x1176; + fiat_np384_uint1 x1177; + uint32_t x1178; + fiat_np384_uint1 x1179; + uint32_t x1180; + uint32_t x1181; + uint32_t x1182; + uint32_t x1183; + uint32_t x1184; + uint32_t x1185; + uint32_t x1186; + uint32_t x1187; + uint32_t x1188; + uint32_t x1189; + uint32_t x1190; + uint32_t x1191; + x1 = (arg1[0]); + fiat_np384_mulx_u32(&x2, &x3, x1, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x4, &x5, x2, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x6, &x7, x2, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x8, &x9, x2, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x10, &x11, x2, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x12, &x13, x2, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x14, &x15, x2, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x16, &x17, x2, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x18, &x19, x2, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x20, &x21, x2, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x22, &x23, x2, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x24, &x25, x2, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x26, &x27, x2, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x28, &x29, 0x0, x27, x24); + fiat_np384_addcarryx_u32(&x30, &x31, x29, x25, x22); + fiat_np384_addcarryx_u32(&x32, &x33, x31, x23, x20); + fiat_np384_addcarryx_u32(&x34, &x35, x33, x21, x18); + fiat_np384_addcarryx_u32(&x36, &x37, x35, x19, x16); + fiat_np384_addcarryx_u32(&x38, &x39, x37, x17, x14); + fiat_np384_addcarryx_u32(&x40, &x41, x39, x15, x12); + fiat_np384_addcarryx_u32(&x42, &x43, x41, x13, x10); + fiat_np384_addcarryx_u32(&x44, &x45, x43, x11, x8); + fiat_np384_addcarryx_u32(&x46, &x47, x45, x9, x6); + fiat_np384_addcarryx_u32(&x48, &x49, x47, x7, x4); + fiat_np384_addcarryx_u32(&x50, &x51, 0x0, x1, x26); + fiat_np384_addcarryx_u32(&x52, &x53, x51, 0x0, x28); + fiat_np384_addcarryx_u32(&x54, &x55, x53, 0x0, x30); + fiat_np384_addcarryx_u32(&x56, &x57, x55, 0x0, x32); + fiat_np384_addcarryx_u32(&x58, &x59, x57, 0x0, x34); + fiat_np384_addcarryx_u32(&x60, &x61, x59, 0x0, x36); + fiat_np384_addcarryx_u32(&x62, &x63, x61, 0x0, x38); + fiat_np384_addcarryx_u32(&x64, &x65, x63, 0x0, x40); + fiat_np384_addcarryx_u32(&x66, &x67, x65, 0x0, x42); + fiat_np384_addcarryx_u32(&x68, &x69, x67, 0x0, x44); + fiat_np384_addcarryx_u32(&x70, &x71, x69, 0x0, x46); + fiat_np384_addcarryx_u32(&x72, &x73, x71, 0x0, x48); + fiat_np384_addcarryx_u32(&x74, &x75, x73, 0x0, (x49 + x5)); + fiat_np384_addcarryx_u32(&x76, &x77, 0x0, x52, (arg1[1])); + fiat_np384_addcarryx_u32(&x78, &x79, x77, x54, 0x0); + fiat_np384_addcarryx_u32(&x80, &x81, x79, x56, 0x0); + fiat_np384_addcarryx_u32(&x82, &x83, x81, x58, 0x0); + fiat_np384_addcarryx_u32(&x84, &x85, x83, x60, 0x0); + fiat_np384_addcarryx_u32(&x86, &x87, x85, x62, 0x0); + fiat_np384_addcarryx_u32(&x88, &x89, x87, x64, 0x0); + fiat_np384_addcarryx_u32(&x90, &x91, x89, x66, 0x0); + fiat_np384_addcarryx_u32(&x92, &x93, x91, x68, 0x0); + fiat_np384_addcarryx_u32(&x94, &x95, x93, x70, 0x0); + fiat_np384_addcarryx_u32(&x96, &x97, x95, x72, 0x0); + fiat_np384_addcarryx_u32(&x98, &x99, x97, x74, 0x0); + fiat_np384_mulx_u32(&x100, &x101, x76, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x102, &x103, x100, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x104, &x105, x100, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x106, &x107, x100, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x108, &x109, x100, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x110, &x111, x100, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x112, &x113, x100, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x114, &x115, x100, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x116, &x117, x100, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x118, &x119, x100, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x120, &x121, x100, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x122, &x123, x100, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x124, &x125, x100, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x126, &x127, 0x0, x125, x122); + fiat_np384_addcarryx_u32(&x128, &x129, x127, x123, x120); + fiat_np384_addcarryx_u32(&x130, &x131, x129, x121, x118); + fiat_np384_addcarryx_u32(&x132, &x133, x131, x119, x116); + fiat_np384_addcarryx_u32(&x134, &x135, x133, x117, x114); + fiat_np384_addcarryx_u32(&x136, &x137, x135, x115, x112); + fiat_np384_addcarryx_u32(&x138, &x139, x137, x113, x110); + fiat_np384_addcarryx_u32(&x140, &x141, x139, x111, x108); + fiat_np384_addcarryx_u32(&x142, &x143, x141, x109, x106); + fiat_np384_addcarryx_u32(&x144, &x145, x143, x107, x104); + fiat_np384_addcarryx_u32(&x146, &x147, x145, x105, x102); + fiat_np384_addcarryx_u32(&x148, &x149, 0x0, x76, x124); + fiat_np384_addcarryx_u32(&x150, &x151, x149, x78, x126); + fiat_np384_addcarryx_u32(&x152, &x153, x151, x80, x128); + fiat_np384_addcarryx_u32(&x154, &x155, x153, x82, x130); + fiat_np384_addcarryx_u32(&x156, &x157, x155, x84, x132); + fiat_np384_addcarryx_u32(&x158, &x159, x157, x86, x134); + fiat_np384_addcarryx_u32(&x160, &x161, x159, x88, x136); + fiat_np384_addcarryx_u32(&x162, &x163, x161, x90, x138); + fiat_np384_addcarryx_u32(&x164, &x165, x163, x92, x140); + fiat_np384_addcarryx_u32(&x166, &x167, x165, x94, x142); + fiat_np384_addcarryx_u32(&x168, &x169, x167, x96, x144); + fiat_np384_addcarryx_u32(&x170, &x171, x169, x98, x146); + fiat_np384_addcarryx_u32(&x172, &x173, x171, ((uint32_t)x99 + x75), (x147 + x103)); + fiat_np384_addcarryx_u32(&x174, &x175, 0x0, x150, (arg1[2])); + fiat_np384_addcarryx_u32(&x176, &x177, x175, x152, 0x0); + fiat_np384_addcarryx_u32(&x178, &x179, x177, x154, 0x0); + fiat_np384_addcarryx_u32(&x180, &x181, x179, x156, 0x0); + fiat_np384_addcarryx_u32(&x182, &x183, x181, x158, 0x0); + fiat_np384_addcarryx_u32(&x184, &x185, x183, x160, 0x0); + fiat_np384_addcarryx_u32(&x186, &x187, x185, x162, 0x0); + fiat_np384_addcarryx_u32(&x188, &x189, x187, x164, 0x0); + fiat_np384_addcarryx_u32(&x190, &x191, x189, x166, 0x0); + fiat_np384_addcarryx_u32(&x192, &x193, x191, x168, 0x0); + fiat_np384_addcarryx_u32(&x194, &x195, x193, x170, 0x0); + fiat_np384_addcarryx_u32(&x196, &x197, x195, x172, 0x0); + fiat_np384_mulx_u32(&x198, &x199, x174, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x200, &x201, x198, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x202, &x203, x198, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x204, &x205, x198, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x206, &x207, x198, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x208, &x209, x198, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x210, &x211, x198, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x212, &x213, x198, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x214, &x215, x198, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x216, &x217, x198, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x218, &x219, x198, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x220, &x221, x198, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x222, &x223, x198, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x224, &x225, 0x0, x223, x220); + fiat_np384_addcarryx_u32(&x226, &x227, x225, x221, x218); + fiat_np384_addcarryx_u32(&x228, &x229, x227, x219, x216); + fiat_np384_addcarryx_u32(&x230, &x231, x229, x217, x214); + fiat_np384_addcarryx_u32(&x232, &x233, x231, x215, x212); + fiat_np384_addcarryx_u32(&x234, &x235, x233, x213, x210); + fiat_np384_addcarryx_u32(&x236, &x237, x235, x211, x208); + fiat_np384_addcarryx_u32(&x238, &x239, x237, x209, x206); + fiat_np384_addcarryx_u32(&x240, &x241, x239, x207, x204); + fiat_np384_addcarryx_u32(&x242, &x243, x241, x205, x202); + fiat_np384_addcarryx_u32(&x244, &x245, x243, x203, x200); + fiat_np384_addcarryx_u32(&x246, &x247, 0x0, x174, x222); + fiat_np384_addcarryx_u32(&x248, &x249, x247, x176, x224); + fiat_np384_addcarryx_u32(&x250, &x251, x249, x178, x226); + fiat_np384_addcarryx_u32(&x252, &x253, x251, x180, x228); + fiat_np384_addcarryx_u32(&x254, &x255, x253, x182, x230); + fiat_np384_addcarryx_u32(&x256, &x257, x255, x184, x232); + fiat_np384_addcarryx_u32(&x258, &x259, x257, x186, x234); + fiat_np384_addcarryx_u32(&x260, &x261, x259, x188, x236); + fiat_np384_addcarryx_u32(&x262, &x263, x261, x190, x238); + fiat_np384_addcarryx_u32(&x264, &x265, x263, x192, x240); + fiat_np384_addcarryx_u32(&x266, &x267, x265, x194, x242); + fiat_np384_addcarryx_u32(&x268, &x269, x267, x196, x244); + fiat_np384_addcarryx_u32(&x270, &x271, x269, ((uint32_t)x197 + x173), (x245 + x201)); + fiat_np384_addcarryx_u32(&x272, &x273, 0x0, x248, (arg1[3])); + fiat_np384_addcarryx_u32(&x274, &x275, x273, x250, 0x0); + fiat_np384_addcarryx_u32(&x276, &x277, x275, x252, 0x0); + fiat_np384_addcarryx_u32(&x278, &x279, x277, x254, 0x0); + fiat_np384_addcarryx_u32(&x280, &x281, x279, x256, 0x0); + fiat_np384_addcarryx_u32(&x282, &x283, x281, x258, 0x0); + fiat_np384_addcarryx_u32(&x284, &x285, x283, x260, 0x0); + fiat_np384_addcarryx_u32(&x286, &x287, x285, x262, 0x0); + fiat_np384_addcarryx_u32(&x288, &x289, x287, x264, 0x0); + fiat_np384_addcarryx_u32(&x290, &x291, x289, x266, 0x0); + fiat_np384_addcarryx_u32(&x292, &x293, x291, x268, 0x0); + fiat_np384_addcarryx_u32(&x294, &x295, x293, x270, 0x0); + fiat_np384_mulx_u32(&x296, &x297, x272, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x298, &x299, x296, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x300, &x301, x296, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x302, &x303, x296, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x304, &x305, x296, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x306, &x307, x296, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x308, &x309, x296, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x310, &x311, x296, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x312, &x313, x296, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x314, &x315, x296, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x316, &x317, x296, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x318, &x319, x296, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x320, &x321, x296, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x322, &x323, 0x0, x321, x318); + fiat_np384_addcarryx_u32(&x324, &x325, x323, x319, x316); + fiat_np384_addcarryx_u32(&x326, &x327, x325, x317, x314); + fiat_np384_addcarryx_u32(&x328, &x329, x327, x315, x312); + fiat_np384_addcarryx_u32(&x330, &x331, x329, x313, x310); + fiat_np384_addcarryx_u32(&x332, &x333, x331, x311, x308); + fiat_np384_addcarryx_u32(&x334, &x335, x333, x309, x306); + fiat_np384_addcarryx_u32(&x336, &x337, x335, x307, x304); + fiat_np384_addcarryx_u32(&x338, &x339, x337, x305, x302); + fiat_np384_addcarryx_u32(&x340, &x341, x339, x303, x300); + fiat_np384_addcarryx_u32(&x342, &x343, x341, x301, x298); + fiat_np384_addcarryx_u32(&x344, &x345, 0x0, x272, x320); + fiat_np384_addcarryx_u32(&x346, &x347, x345, x274, x322); + fiat_np384_addcarryx_u32(&x348, &x349, x347, x276, x324); + fiat_np384_addcarryx_u32(&x350, &x351, x349, x278, x326); + fiat_np384_addcarryx_u32(&x352, &x353, x351, x280, x328); + fiat_np384_addcarryx_u32(&x354, &x355, x353, x282, x330); + fiat_np384_addcarryx_u32(&x356, &x357, x355, x284, x332); + fiat_np384_addcarryx_u32(&x358, &x359, x357, x286, x334); + fiat_np384_addcarryx_u32(&x360, &x361, x359, x288, x336); + fiat_np384_addcarryx_u32(&x362, &x363, x361, x290, x338); + fiat_np384_addcarryx_u32(&x364, &x365, x363, x292, x340); + fiat_np384_addcarryx_u32(&x366, &x367, x365, x294, x342); + fiat_np384_addcarryx_u32(&x368, &x369, x367, ((uint32_t)x295 + x271), (x343 + x299)); + fiat_np384_addcarryx_u32(&x370, &x371, 0x0, x346, (arg1[4])); + fiat_np384_addcarryx_u32(&x372, &x373, x371, x348, 0x0); + fiat_np384_addcarryx_u32(&x374, &x375, x373, x350, 0x0); + fiat_np384_addcarryx_u32(&x376, &x377, x375, x352, 0x0); + fiat_np384_addcarryx_u32(&x378, &x379, x377, x354, 0x0); + fiat_np384_addcarryx_u32(&x380, &x381, x379, x356, 0x0); + fiat_np384_addcarryx_u32(&x382, &x383, x381, x358, 0x0); + fiat_np384_addcarryx_u32(&x384, &x385, x383, x360, 0x0); + fiat_np384_addcarryx_u32(&x386, &x387, x385, x362, 0x0); + fiat_np384_addcarryx_u32(&x388, &x389, x387, x364, 0x0); + fiat_np384_addcarryx_u32(&x390, &x391, x389, x366, 0x0); + fiat_np384_addcarryx_u32(&x392, &x393, x391, x368, 0x0); + fiat_np384_mulx_u32(&x394, &x395, x370, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x396, &x397, x394, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x398, &x399, x394, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x400, &x401, x394, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x402, &x403, x394, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x404, &x405, x394, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x406, &x407, x394, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x408, &x409, x394, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x410, &x411, x394, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x412, &x413, x394, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x414, &x415, x394, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x416, &x417, x394, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x418, &x419, x394, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x420, &x421, 0x0, x419, x416); + fiat_np384_addcarryx_u32(&x422, &x423, x421, x417, x414); + fiat_np384_addcarryx_u32(&x424, &x425, x423, x415, x412); + fiat_np384_addcarryx_u32(&x426, &x427, x425, x413, x410); + fiat_np384_addcarryx_u32(&x428, &x429, x427, x411, x408); + fiat_np384_addcarryx_u32(&x430, &x431, x429, x409, x406); + fiat_np384_addcarryx_u32(&x432, &x433, x431, x407, x404); + fiat_np384_addcarryx_u32(&x434, &x435, x433, x405, x402); + fiat_np384_addcarryx_u32(&x436, &x437, x435, x403, x400); + fiat_np384_addcarryx_u32(&x438, &x439, x437, x401, x398); + fiat_np384_addcarryx_u32(&x440, &x441, x439, x399, x396); + fiat_np384_addcarryx_u32(&x442, &x443, 0x0, x370, x418); + fiat_np384_addcarryx_u32(&x444, &x445, x443, x372, x420); + fiat_np384_addcarryx_u32(&x446, &x447, x445, x374, x422); + fiat_np384_addcarryx_u32(&x448, &x449, x447, x376, x424); + fiat_np384_addcarryx_u32(&x450, &x451, x449, x378, x426); + fiat_np384_addcarryx_u32(&x452, &x453, x451, x380, x428); + fiat_np384_addcarryx_u32(&x454, &x455, x453, x382, x430); + fiat_np384_addcarryx_u32(&x456, &x457, x455, x384, x432); + fiat_np384_addcarryx_u32(&x458, &x459, x457, x386, x434); + fiat_np384_addcarryx_u32(&x460, &x461, x459, x388, x436); + fiat_np384_addcarryx_u32(&x462, &x463, x461, x390, x438); + fiat_np384_addcarryx_u32(&x464, &x465, x463, x392, x440); + fiat_np384_addcarryx_u32(&x466, &x467, x465, ((uint32_t)x393 + x369), (x441 + x397)); + fiat_np384_addcarryx_u32(&x468, &x469, 0x0, x444, (arg1[5])); + fiat_np384_addcarryx_u32(&x470, &x471, x469, x446, 0x0); + fiat_np384_addcarryx_u32(&x472, &x473, x471, x448, 0x0); + fiat_np384_addcarryx_u32(&x474, &x475, x473, x450, 0x0); + fiat_np384_addcarryx_u32(&x476, &x477, x475, x452, 0x0); + fiat_np384_addcarryx_u32(&x478, &x479, x477, x454, 0x0); + fiat_np384_addcarryx_u32(&x480, &x481, x479, x456, 0x0); + fiat_np384_addcarryx_u32(&x482, &x483, x481, x458, 0x0); + fiat_np384_addcarryx_u32(&x484, &x485, x483, x460, 0x0); + fiat_np384_addcarryx_u32(&x486, &x487, x485, x462, 0x0); + fiat_np384_addcarryx_u32(&x488, &x489, x487, x464, 0x0); + fiat_np384_addcarryx_u32(&x490, &x491, x489, x466, 0x0); + fiat_np384_mulx_u32(&x492, &x493, x468, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x494, &x495, x492, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x496, &x497, x492, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x498, &x499, x492, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x500, &x501, x492, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x502, &x503, x492, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x504, &x505, x492, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x506, &x507, x492, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x508, &x509, x492, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x510, &x511, x492, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x512, &x513, x492, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x514, &x515, x492, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x516, &x517, x492, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x518, &x519, 0x0, x517, x514); + fiat_np384_addcarryx_u32(&x520, &x521, x519, x515, x512); + fiat_np384_addcarryx_u32(&x522, &x523, x521, x513, x510); + fiat_np384_addcarryx_u32(&x524, &x525, x523, x511, x508); + fiat_np384_addcarryx_u32(&x526, &x527, x525, x509, x506); + fiat_np384_addcarryx_u32(&x528, &x529, x527, x507, x504); + fiat_np384_addcarryx_u32(&x530, &x531, x529, x505, x502); + fiat_np384_addcarryx_u32(&x532, &x533, x531, x503, x500); + fiat_np384_addcarryx_u32(&x534, &x535, x533, x501, x498); + fiat_np384_addcarryx_u32(&x536, &x537, x535, x499, x496); + fiat_np384_addcarryx_u32(&x538, &x539, x537, x497, x494); + fiat_np384_addcarryx_u32(&x540, &x541, 0x0, x468, x516); + fiat_np384_addcarryx_u32(&x542, &x543, x541, x470, x518); + fiat_np384_addcarryx_u32(&x544, &x545, x543, x472, x520); + fiat_np384_addcarryx_u32(&x546, &x547, x545, x474, x522); + fiat_np384_addcarryx_u32(&x548, &x549, x547, x476, x524); + fiat_np384_addcarryx_u32(&x550, &x551, x549, x478, x526); + fiat_np384_addcarryx_u32(&x552, &x553, x551, x480, x528); + fiat_np384_addcarryx_u32(&x554, &x555, x553, x482, x530); + fiat_np384_addcarryx_u32(&x556, &x557, x555, x484, x532); + fiat_np384_addcarryx_u32(&x558, &x559, x557, x486, x534); + fiat_np384_addcarryx_u32(&x560, &x561, x559, x488, x536); + fiat_np384_addcarryx_u32(&x562, &x563, x561, x490, x538); + fiat_np384_addcarryx_u32(&x564, &x565, x563, ((uint32_t)x491 + x467), (x539 + x495)); + fiat_np384_addcarryx_u32(&x566, &x567, 0x0, x542, (arg1[6])); + fiat_np384_addcarryx_u32(&x568, &x569, x567, x544, 0x0); + fiat_np384_addcarryx_u32(&x570, &x571, x569, x546, 0x0); + fiat_np384_addcarryx_u32(&x572, &x573, x571, x548, 0x0); + fiat_np384_addcarryx_u32(&x574, &x575, x573, x550, 0x0); + fiat_np384_addcarryx_u32(&x576, &x577, x575, x552, 0x0); + fiat_np384_addcarryx_u32(&x578, &x579, x577, x554, 0x0); + fiat_np384_addcarryx_u32(&x580, &x581, x579, x556, 0x0); + fiat_np384_addcarryx_u32(&x582, &x583, x581, x558, 0x0); + fiat_np384_addcarryx_u32(&x584, &x585, x583, x560, 0x0); + fiat_np384_addcarryx_u32(&x586, &x587, x585, x562, 0x0); + fiat_np384_addcarryx_u32(&x588, &x589, x587, x564, 0x0); + fiat_np384_mulx_u32(&x590, &x591, x566, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x592, &x593, x590, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x594, &x595, x590, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x596, &x597, x590, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x598, &x599, x590, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x600, &x601, x590, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x602, &x603, x590, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x604, &x605, x590, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x606, &x607, x590, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x608, &x609, x590, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x610, &x611, x590, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x612, &x613, x590, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x614, &x615, x590, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x616, &x617, 0x0, x615, x612); + fiat_np384_addcarryx_u32(&x618, &x619, x617, x613, x610); + fiat_np384_addcarryx_u32(&x620, &x621, x619, x611, x608); + fiat_np384_addcarryx_u32(&x622, &x623, x621, x609, x606); + fiat_np384_addcarryx_u32(&x624, &x625, x623, x607, x604); + fiat_np384_addcarryx_u32(&x626, &x627, x625, x605, x602); + fiat_np384_addcarryx_u32(&x628, &x629, x627, x603, x600); + fiat_np384_addcarryx_u32(&x630, &x631, x629, x601, x598); + fiat_np384_addcarryx_u32(&x632, &x633, x631, x599, x596); + fiat_np384_addcarryx_u32(&x634, &x635, x633, x597, x594); + fiat_np384_addcarryx_u32(&x636, &x637, x635, x595, x592); + fiat_np384_addcarryx_u32(&x638, &x639, 0x0, x566, x614); + fiat_np384_addcarryx_u32(&x640, &x641, x639, x568, x616); + fiat_np384_addcarryx_u32(&x642, &x643, x641, x570, x618); + fiat_np384_addcarryx_u32(&x644, &x645, x643, x572, x620); + fiat_np384_addcarryx_u32(&x646, &x647, x645, x574, x622); + fiat_np384_addcarryx_u32(&x648, &x649, x647, x576, x624); + fiat_np384_addcarryx_u32(&x650, &x651, x649, x578, x626); + fiat_np384_addcarryx_u32(&x652, &x653, x651, x580, x628); + fiat_np384_addcarryx_u32(&x654, &x655, x653, x582, x630); + fiat_np384_addcarryx_u32(&x656, &x657, x655, x584, x632); + fiat_np384_addcarryx_u32(&x658, &x659, x657, x586, x634); + fiat_np384_addcarryx_u32(&x660, &x661, x659, x588, x636); + fiat_np384_addcarryx_u32(&x662, &x663, x661, ((uint32_t)x589 + x565), (x637 + x593)); + fiat_np384_addcarryx_u32(&x664, &x665, 0x0, x640, (arg1[7])); + fiat_np384_addcarryx_u32(&x666, &x667, x665, x642, 0x0); + fiat_np384_addcarryx_u32(&x668, &x669, x667, x644, 0x0); + fiat_np384_addcarryx_u32(&x670, &x671, x669, x646, 0x0); + fiat_np384_addcarryx_u32(&x672, &x673, x671, x648, 0x0); + fiat_np384_addcarryx_u32(&x674, &x675, x673, x650, 0x0); + fiat_np384_addcarryx_u32(&x676, &x677, x675, x652, 0x0); + fiat_np384_addcarryx_u32(&x678, &x679, x677, x654, 0x0); + fiat_np384_addcarryx_u32(&x680, &x681, x679, x656, 0x0); + fiat_np384_addcarryx_u32(&x682, &x683, x681, x658, 0x0); + fiat_np384_addcarryx_u32(&x684, &x685, x683, x660, 0x0); + fiat_np384_addcarryx_u32(&x686, &x687, x685, x662, 0x0); + fiat_np384_mulx_u32(&x688, &x689, x664, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x690, &x691, x688, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x692, &x693, x688, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x694, &x695, x688, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x696, &x697, x688, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x698, &x699, x688, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x700, &x701, x688, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x702, &x703, x688, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x704, &x705, x688, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x706, &x707, x688, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x708, &x709, x688, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x710, &x711, x688, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x712, &x713, x688, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x714, &x715, 0x0, x713, x710); + fiat_np384_addcarryx_u32(&x716, &x717, x715, x711, x708); + fiat_np384_addcarryx_u32(&x718, &x719, x717, x709, x706); + fiat_np384_addcarryx_u32(&x720, &x721, x719, x707, x704); + fiat_np384_addcarryx_u32(&x722, &x723, x721, x705, x702); + fiat_np384_addcarryx_u32(&x724, &x725, x723, x703, x700); + fiat_np384_addcarryx_u32(&x726, &x727, x725, x701, x698); + fiat_np384_addcarryx_u32(&x728, &x729, x727, x699, x696); + fiat_np384_addcarryx_u32(&x730, &x731, x729, x697, x694); + fiat_np384_addcarryx_u32(&x732, &x733, x731, x695, x692); + fiat_np384_addcarryx_u32(&x734, &x735, x733, x693, x690); + fiat_np384_addcarryx_u32(&x736, &x737, 0x0, x664, x712); + fiat_np384_addcarryx_u32(&x738, &x739, x737, x666, x714); + fiat_np384_addcarryx_u32(&x740, &x741, x739, x668, x716); + fiat_np384_addcarryx_u32(&x742, &x743, x741, x670, x718); + fiat_np384_addcarryx_u32(&x744, &x745, x743, x672, x720); + fiat_np384_addcarryx_u32(&x746, &x747, x745, x674, x722); + fiat_np384_addcarryx_u32(&x748, &x749, x747, x676, x724); + fiat_np384_addcarryx_u32(&x750, &x751, x749, x678, x726); + fiat_np384_addcarryx_u32(&x752, &x753, x751, x680, x728); + fiat_np384_addcarryx_u32(&x754, &x755, x753, x682, x730); + fiat_np384_addcarryx_u32(&x756, &x757, x755, x684, x732); + fiat_np384_addcarryx_u32(&x758, &x759, x757, x686, x734); + fiat_np384_addcarryx_u32(&x760, &x761, x759, ((uint32_t)x687 + x663), (x735 + x691)); + fiat_np384_addcarryx_u32(&x762, &x763, 0x0, x738, (arg1[8])); + fiat_np384_addcarryx_u32(&x764, &x765, x763, x740, 0x0); + fiat_np384_addcarryx_u32(&x766, &x767, x765, x742, 0x0); + fiat_np384_addcarryx_u32(&x768, &x769, x767, x744, 0x0); + fiat_np384_addcarryx_u32(&x770, &x771, x769, x746, 0x0); + fiat_np384_addcarryx_u32(&x772, &x773, x771, x748, 0x0); + fiat_np384_addcarryx_u32(&x774, &x775, x773, x750, 0x0); + fiat_np384_addcarryx_u32(&x776, &x777, x775, x752, 0x0); + fiat_np384_addcarryx_u32(&x778, &x779, x777, x754, 0x0); + fiat_np384_addcarryx_u32(&x780, &x781, x779, x756, 0x0); + fiat_np384_addcarryx_u32(&x782, &x783, x781, x758, 0x0); + fiat_np384_addcarryx_u32(&x784, &x785, x783, x760, 0x0); + fiat_np384_mulx_u32(&x786, &x787, x762, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x788, &x789, x786, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x790, &x791, x786, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x792, &x793, x786, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x794, &x795, x786, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x796, &x797, x786, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x798, &x799, x786, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x800, &x801, x786, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x802, &x803, x786, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x804, &x805, x786, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x806, &x807, x786, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x808, &x809, x786, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x810, &x811, x786, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x812, &x813, 0x0, x811, x808); + fiat_np384_addcarryx_u32(&x814, &x815, x813, x809, x806); + fiat_np384_addcarryx_u32(&x816, &x817, x815, x807, x804); + fiat_np384_addcarryx_u32(&x818, &x819, x817, x805, x802); + fiat_np384_addcarryx_u32(&x820, &x821, x819, x803, x800); + fiat_np384_addcarryx_u32(&x822, &x823, x821, x801, x798); + fiat_np384_addcarryx_u32(&x824, &x825, x823, x799, x796); + fiat_np384_addcarryx_u32(&x826, &x827, x825, x797, x794); + fiat_np384_addcarryx_u32(&x828, &x829, x827, x795, x792); + fiat_np384_addcarryx_u32(&x830, &x831, x829, x793, x790); + fiat_np384_addcarryx_u32(&x832, &x833, x831, x791, x788); + fiat_np384_addcarryx_u32(&x834, &x835, 0x0, x762, x810); + fiat_np384_addcarryx_u32(&x836, &x837, x835, x764, x812); + fiat_np384_addcarryx_u32(&x838, &x839, x837, x766, x814); + fiat_np384_addcarryx_u32(&x840, &x841, x839, x768, x816); + fiat_np384_addcarryx_u32(&x842, &x843, x841, x770, x818); + fiat_np384_addcarryx_u32(&x844, &x845, x843, x772, x820); + fiat_np384_addcarryx_u32(&x846, &x847, x845, x774, x822); + fiat_np384_addcarryx_u32(&x848, &x849, x847, x776, x824); + fiat_np384_addcarryx_u32(&x850, &x851, x849, x778, x826); + fiat_np384_addcarryx_u32(&x852, &x853, x851, x780, x828); + fiat_np384_addcarryx_u32(&x854, &x855, x853, x782, x830); + fiat_np384_addcarryx_u32(&x856, &x857, x855, x784, x832); + fiat_np384_addcarryx_u32(&x858, &x859, x857, ((uint32_t)x785 + x761), (x833 + x789)); + fiat_np384_addcarryx_u32(&x860, &x861, 0x0, x836, (arg1[9])); + fiat_np384_addcarryx_u32(&x862, &x863, x861, x838, 0x0); + fiat_np384_addcarryx_u32(&x864, &x865, x863, x840, 0x0); + fiat_np384_addcarryx_u32(&x866, &x867, x865, x842, 0x0); + fiat_np384_addcarryx_u32(&x868, &x869, x867, x844, 0x0); + fiat_np384_addcarryx_u32(&x870, &x871, x869, x846, 0x0); + fiat_np384_addcarryx_u32(&x872, &x873, x871, x848, 0x0); + fiat_np384_addcarryx_u32(&x874, &x875, x873, x850, 0x0); + fiat_np384_addcarryx_u32(&x876, &x877, x875, x852, 0x0); + fiat_np384_addcarryx_u32(&x878, &x879, x877, x854, 0x0); + fiat_np384_addcarryx_u32(&x880, &x881, x879, x856, 0x0); + fiat_np384_addcarryx_u32(&x882, &x883, x881, x858, 0x0); + fiat_np384_mulx_u32(&x884, &x885, x860, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x886, &x887, x884, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x888, &x889, x884, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x890, &x891, x884, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x892, &x893, x884, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x894, &x895, x884, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x896, &x897, x884, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x898, &x899, x884, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x900, &x901, x884, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x902, &x903, x884, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x904, &x905, x884, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x906, &x907, x884, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x908, &x909, x884, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x910, &x911, 0x0, x909, x906); + fiat_np384_addcarryx_u32(&x912, &x913, x911, x907, x904); + fiat_np384_addcarryx_u32(&x914, &x915, x913, x905, x902); + fiat_np384_addcarryx_u32(&x916, &x917, x915, x903, x900); + fiat_np384_addcarryx_u32(&x918, &x919, x917, x901, x898); + fiat_np384_addcarryx_u32(&x920, &x921, x919, x899, x896); + fiat_np384_addcarryx_u32(&x922, &x923, x921, x897, x894); + fiat_np384_addcarryx_u32(&x924, &x925, x923, x895, x892); + fiat_np384_addcarryx_u32(&x926, &x927, x925, x893, x890); + fiat_np384_addcarryx_u32(&x928, &x929, x927, x891, x888); + fiat_np384_addcarryx_u32(&x930, &x931, x929, x889, x886); + fiat_np384_addcarryx_u32(&x932, &x933, 0x0, x860, x908); + fiat_np384_addcarryx_u32(&x934, &x935, x933, x862, x910); + fiat_np384_addcarryx_u32(&x936, &x937, x935, x864, x912); + fiat_np384_addcarryx_u32(&x938, &x939, x937, x866, x914); + fiat_np384_addcarryx_u32(&x940, &x941, x939, x868, x916); + fiat_np384_addcarryx_u32(&x942, &x943, x941, x870, x918); + fiat_np384_addcarryx_u32(&x944, &x945, x943, x872, x920); + fiat_np384_addcarryx_u32(&x946, &x947, x945, x874, x922); + fiat_np384_addcarryx_u32(&x948, &x949, x947, x876, x924); + fiat_np384_addcarryx_u32(&x950, &x951, x949, x878, x926); + fiat_np384_addcarryx_u32(&x952, &x953, x951, x880, x928); + fiat_np384_addcarryx_u32(&x954, &x955, x953, x882, x930); + fiat_np384_addcarryx_u32(&x956, &x957, x955, ((uint32_t)x883 + x859), (x931 + x887)); + fiat_np384_addcarryx_u32(&x958, &x959, 0x0, x934, (arg1[10])); + fiat_np384_addcarryx_u32(&x960, &x961, x959, x936, 0x0); + fiat_np384_addcarryx_u32(&x962, &x963, x961, x938, 0x0); + fiat_np384_addcarryx_u32(&x964, &x965, x963, x940, 0x0); + fiat_np384_addcarryx_u32(&x966, &x967, x965, x942, 0x0); + fiat_np384_addcarryx_u32(&x968, &x969, x967, x944, 0x0); + fiat_np384_addcarryx_u32(&x970, &x971, x969, x946, 0x0); + fiat_np384_addcarryx_u32(&x972, &x973, x971, x948, 0x0); + fiat_np384_addcarryx_u32(&x974, &x975, x973, x950, 0x0); + fiat_np384_addcarryx_u32(&x976, &x977, x975, x952, 0x0); + fiat_np384_addcarryx_u32(&x978, &x979, x977, x954, 0x0); + fiat_np384_addcarryx_u32(&x980, &x981, x979, x956, 0x0); + fiat_np384_mulx_u32(&x982, &x983, x958, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x984, &x985, x982, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x986, &x987, x982, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x988, &x989, x982, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x990, &x991, x982, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x992, &x993, x982, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x994, &x995, x982, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x996, &x997, x982, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x998, &x999, x982, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x1000, &x1001, x982, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x1002, &x1003, x982, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x1004, &x1005, x982, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x1006, &x1007, x982, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x1008, &x1009, 0x0, x1007, x1004); + fiat_np384_addcarryx_u32(&x1010, &x1011, x1009, x1005, x1002); + fiat_np384_addcarryx_u32(&x1012, &x1013, x1011, x1003, x1000); + fiat_np384_addcarryx_u32(&x1014, &x1015, x1013, x1001, x998); + fiat_np384_addcarryx_u32(&x1016, &x1017, x1015, x999, x996); + fiat_np384_addcarryx_u32(&x1018, &x1019, x1017, x997, x994); + fiat_np384_addcarryx_u32(&x1020, &x1021, x1019, x995, x992); + fiat_np384_addcarryx_u32(&x1022, &x1023, x1021, x993, x990); + fiat_np384_addcarryx_u32(&x1024, &x1025, x1023, x991, x988); + fiat_np384_addcarryx_u32(&x1026, &x1027, x1025, x989, x986); + fiat_np384_addcarryx_u32(&x1028, &x1029, x1027, x987, x984); + fiat_np384_addcarryx_u32(&x1030, &x1031, 0x0, x958, x1006); + fiat_np384_addcarryx_u32(&x1032, &x1033, x1031, x960, x1008); + fiat_np384_addcarryx_u32(&x1034, &x1035, x1033, x962, x1010); + fiat_np384_addcarryx_u32(&x1036, &x1037, x1035, x964, x1012); + fiat_np384_addcarryx_u32(&x1038, &x1039, x1037, x966, x1014); + fiat_np384_addcarryx_u32(&x1040, &x1041, x1039, x968, x1016); + fiat_np384_addcarryx_u32(&x1042, &x1043, x1041, x970, x1018); + fiat_np384_addcarryx_u32(&x1044, &x1045, x1043, x972, x1020); + fiat_np384_addcarryx_u32(&x1046, &x1047, x1045, x974, x1022); + fiat_np384_addcarryx_u32(&x1048, &x1049, x1047, x976, x1024); + fiat_np384_addcarryx_u32(&x1050, &x1051, x1049, x978, x1026); + fiat_np384_addcarryx_u32(&x1052, &x1053, x1051, x980, x1028); + fiat_np384_addcarryx_u32(&x1054, &x1055, x1053, ((uint32_t)x981 + x957), (x1029 + x985)); + fiat_np384_addcarryx_u32(&x1056, &x1057, 0x0, x1032, (arg1[11])); + fiat_np384_addcarryx_u32(&x1058, &x1059, x1057, x1034, 0x0); + fiat_np384_addcarryx_u32(&x1060, &x1061, x1059, x1036, 0x0); + fiat_np384_addcarryx_u32(&x1062, &x1063, x1061, x1038, 0x0); + fiat_np384_addcarryx_u32(&x1064, &x1065, x1063, x1040, 0x0); + fiat_np384_addcarryx_u32(&x1066, &x1067, x1065, x1042, 0x0); + fiat_np384_addcarryx_u32(&x1068, &x1069, x1067, x1044, 0x0); + fiat_np384_addcarryx_u32(&x1070, &x1071, x1069, x1046, 0x0); + fiat_np384_addcarryx_u32(&x1072, &x1073, x1071, x1048, 0x0); + fiat_np384_addcarryx_u32(&x1074, &x1075, x1073, x1050, 0x0); + fiat_np384_addcarryx_u32(&x1076, &x1077, x1075, x1052, 0x0); + fiat_np384_addcarryx_u32(&x1078, &x1079, x1077, x1054, 0x0); + fiat_np384_mulx_u32(&x1080, &x1081, x1056, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x1082, &x1083, x1080, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1084, &x1085, x1080, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1086, &x1087, x1080, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1088, &x1089, x1080, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1090, &x1091, x1080, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1092, &x1093, x1080, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1094, &x1095, x1080, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x1096, &x1097, x1080, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x1098, &x1099, x1080, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x1100, &x1101, x1080, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x1102, &x1103, x1080, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x1104, &x1105, x1080, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x1106, &x1107, 0x0, x1105, x1102); + fiat_np384_addcarryx_u32(&x1108, &x1109, x1107, x1103, x1100); + fiat_np384_addcarryx_u32(&x1110, &x1111, x1109, x1101, x1098); + fiat_np384_addcarryx_u32(&x1112, &x1113, x1111, x1099, x1096); + fiat_np384_addcarryx_u32(&x1114, &x1115, x1113, x1097, x1094); + fiat_np384_addcarryx_u32(&x1116, &x1117, x1115, x1095, x1092); + fiat_np384_addcarryx_u32(&x1118, &x1119, x1117, x1093, x1090); + fiat_np384_addcarryx_u32(&x1120, &x1121, x1119, x1091, x1088); + fiat_np384_addcarryx_u32(&x1122, &x1123, x1121, x1089, x1086); + fiat_np384_addcarryx_u32(&x1124, &x1125, x1123, x1087, x1084); + fiat_np384_addcarryx_u32(&x1126, &x1127, x1125, x1085, x1082); + fiat_np384_addcarryx_u32(&x1128, &x1129, 0x0, x1056, x1104); + fiat_np384_addcarryx_u32(&x1130, &x1131, x1129, x1058, x1106); + fiat_np384_addcarryx_u32(&x1132, &x1133, x1131, x1060, x1108); + fiat_np384_addcarryx_u32(&x1134, &x1135, x1133, x1062, x1110); + fiat_np384_addcarryx_u32(&x1136, &x1137, x1135, x1064, x1112); + fiat_np384_addcarryx_u32(&x1138, &x1139, x1137, x1066, x1114); + fiat_np384_addcarryx_u32(&x1140, &x1141, x1139, x1068, x1116); + fiat_np384_addcarryx_u32(&x1142, &x1143, x1141, x1070, x1118); + fiat_np384_addcarryx_u32(&x1144, &x1145, x1143, x1072, x1120); + fiat_np384_addcarryx_u32(&x1146, &x1147, x1145, x1074, x1122); + fiat_np384_addcarryx_u32(&x1148, &x1149, x1147, x1076, x1124); + fiat_np384_addcarryx_u32(&x1150, &x1151, x1149, x1078, x1126); + fiat_np384_addcarryx_u32(&x1152, &x1153, x1151, ((uint32_t)x1079 + x1055), (x1127 + x1083)); + fiat_np384_subborrowx_u32(&x1154, &x1155, 0x0, x1130, UINT32_C(0xccc52973)); + fiat_np384_subborrowx_u32(&x1156, &x1157, x1155, x1132, UINT32_C(0xecec196a)); + fiat_np384_subborrowx_u32(&x1158, &x1159, x1157, x1134, UINT32_C(0x48b0a77a)); + fiat_np384_subborrowx_u32(&x1160, &x1161, x1159, x1136, UINT32_C(0x581a0db2)); + fiat_np384_subborrowx_u32(&x1162, &x1163, x1161, x1138, UINT32_C(0xf4372ddf)); + fiat_np384_subborrowx_u32(&x1164, &x1165, x1163, x1140, UINT32_C(0xc7634d81)); + fiat_np384_subborrowx_u32(&x1166, &x1167, x1165, x1142, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1168, &x1169, x1167, x1144, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1170, &x1171, x1169, x1146, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1172, &x1173, x1171, x1148, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1174, &x1175, x1173, x1150, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1176, &x1177, x1175, x1152, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1178, &x1179, x1177, x1153, 0x0); + fiat_np384_cmovznz_u32(&x1180, x1179, x1154, x1130); + fiat_np384_cmovznz_u32(&x1181, x1179, x1156, x1132); + fiat_np384_cmovznz_u32(&x1182, x1179, x1158, x1134); + fiat_np384_cmovznz_u32(&x1183, x1179, x1160, x1136); + fiat_np384_cmovznz_u32(&x1184, x1179, x1162, x1138); + fiat_np384_cmovznz_u32(&x1185, x1179, x1164, x1140); + fiat_np384_cmovznz_u32(&x1186, x1179, x1166, x1142); + fiat_np384_cmovznz_u32(&x1187, x1179, x1168, x1144); + fiat_np384_cmovznz_u32(&x1188, x1179, x1170, x1146); + fiat_np384_cmovznz_u32(&x1189, x1179, x1172, x1148); + fiat_np384_cmovznz_u32(&x1190, x1179, x1174, x1150); + fiat_np384_cmovznz_u32(&x1191, x1179, x1176, x1152); + out1[0] = x1180; + out1[1] = x1181; + out1[2] = x1182; + out1[3] = x1183; + out1[4] = x1184; + out1[5] = x1185; + out1[6] = x1186; + out1[7] = x1187; + out1[8] = x1188; + out1[9] = x1189; + out1[10] = x1190; + out1[11] = x1191; +} + +/* + * The function fiat_np384_to_montgomery translates a field element into the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np384_to_montgomery(uint32_t out1[12], const uint32_t arg1[12]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint32_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + fiat_np384_uint1 x38; + uint32_t x39; + fiat_np384_uint1 x40; + uint32_t x41; + fiat_np384_uint1 x42; + uint32_t x43; + fiat_np384_uint1 x44; + uint32_t x45; + fiat_np384_uint1 x46; + uint32_t x47; + fiat_np384_uint1 x48; + uint32_t x49; + fiat_np384_uint1 x50; + uint32_t x51; + fiat_np384_uint1 x52; + uint32_t x53; + fiat_np384_uint1 x54; + uint32_t x55; + fiat_np384_uint1 x56; + uint32_t x57; + fiat_np384_uint1 x58; + uint32_t x59; + uint32_t x60; + uint32_t x61; + uint32_t x62; + uint32_t x63; + uint32_t x64; + uint32_t x65; + uint32_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + uint32_t x81; + uint32_t x82; + uint32_t x83; + uint32_t x84; + uint32_t x85; + fiat_np384_uint1 x86; + uint32_t x87; + fiat_np384_uint1 x88; + uint32_t x89; + fiat_np384_uint1 x90; + uint32_t x91; + fiat_np384_uint1 x92; + uint32_t x93; + fiat_np384_uint1 x94; + uint32_t x95; + fiat_np384_uint1 x96; + uint32_t x97; + fiat_np384_uint1 x98; + uint32_t x99; + fiat_np384_uint1 x100; + uint32_t x101; + fiat_np384_uint1 x102; + uint32_t x103; + fiat_np384_uint1 x104; + uint32_t x105; + fiat_np384_uint1 x106; + uint32_t x107; + fiat_np384_uint1 x108; + uint32_t x109; + fiat_np384_uint1 x110; + uint32_t x111; + fiat_np384_uint1 x112; + uint32_t x113; + fiat_np384_uint1 x114; + uint32_t x115; + fiat_np384_uint1 x116; + uint32_t x117; + fiat_np384_uint1 x118; + uint32_t x119; + fiat_np384_uint1 x120; + uint32_t x121; + fiat_np384_uint1 x122; + uint32_t x123; + fiat_np384_uint1 x124; + uint32_t x125; + fiat_np384_uint1 x126; + uint32_t x127; + fiat_np384_uint1 x128; + uint32_t x129; + fiat_np384_uint1 x130; + uint32_t x131; + fiat_np384_uint1 x132; + uint32_t x133; + uint32_t x134; + uint32_t x135; + uint32_t x136; + uint32_t x137; + uint32_t x138; + uint32_t x139; + uint32_t x140; + uint32_t x141; + uint32_t x142; + uint32_t x143; + uint32_t x144; + uint32_t x145; + uint32_t x146; + uint32_t x147; + uint32_t x148; + uint32_t x149; + uint32_t x150; + uint32_t x151; + uint32_t x152; + uint32_t x153; + uint32_t x154; + uint32_t x155; + uint32_t x156; + uint32_t x157; + fiat_np384_uint1 x158; + uint32_t x159; + fiat_np384_uint1 x160; + uint32_t x161; + fiat_np384_uint1 x162; + uint32_t x163; + fiat_np384_uint1 x164; + uint32_t x165; + fiat_np384_uint1 x166; + uint32_t x167; + fiat_np384_uint1 x168; + uint32_t x169; + fiat_np384_uint1 x170; + uint32_t x171; + fiat_np384_uint1 x172; + uint32_t x173; + fiat_np384_uint1 x174; + uint32_t x175; + fiat_np384_uint1 x176; + uint32_t x177; + fiat_np384_uint1 x178; + uint32_t x179; + fiat_np384_uint1 x180; + uint32_t x181; + fiat_np384_uint1 x182; + uint32_t x183; + fiat_np384_uint1 x184; + uint32_t x185; + fiat_np384_uint1 x186; + uint32_t x187; + fiat_np384_uint1 x188; + uint32_t x189; + fiat_np384_uint1 x190; + uint32_t x191; + fiat_np384_uint1 x192; + uint32_t x193; + fiat_np384_uint1 x194; + uint32_t x195; + fiat_np384_uint1 x196; + uint32_t x197; + fiat_np384_uint1 x198; + uint32_t x199; + fiat_np384_uint1 x200; + uint32_t x201; + fiat_np384_uint1 x202; + uint32_t x203; + uint32_t x204; + uint32_t x205; + uint32_t x206; + uint32_t x207; + uint32_t x208; + uint32_t x209; + uint32_t x210; + uint32_t x211; + uint32_t x212; + uint32_t x213; + uint32_t x214; + uint32_t x215; + uint32_t x216; + uint32_t x217; + uint32_t x218; + uint32_t x219; + uint32_t x220; + uint32_t x221; + uint32_t x222; + uint32_t x223; + uint32_t x224; + uint32_t x225; + uint32_t x226; + uint32_t x227; + uint32_t x228; + uint32_t x229; + fiat_np384_uint1 x230; + uint32_t x231; + fiat_np384_uint1 x232; + uint32_t x233; + fiat_np384_uint1 x234; + uint32_t x235; + fiat_np384_uint1 x236; + uint32_t x237; + fiat_np384_uint1 x238; + uint32_t x239; + fiat_np384_uint1 x240; + uint32_t x241; + fiat_np384_uint1 x242; + uint32_t x243; + fiat_np384_uint1 x244; + uint32_t x245; + fiat_np384_uint1 x246; + uint32_t x247; + fiat_np384_uint1 x248; + uint32_t x249; + fiat_np384_uint1 x250; + uint32_t x251; + fiat_np384_uint1 x252; + uint32_t x253; + fiat_np384_uint1 x254; + uint32_t x255; + fiat_np384_uint1 x256; + uint32_t x257; + fiat_np384_uint1 x258; + uint32_t x259; + fiat_np384_uint1 x260; + uint32_t x261; + fiat_np384_uint1 x262; + uint32_t x263; + fiat_np384_uint1 x264; + uint32_t x265; + fiat_np384_uint1 x266; + uint32_t x267; + fiat_np384_uint1 x268; + uint32_t x269; + fiat_np384_uint1 x270; + uint32_t x271; + fiat_np384_uint1 x272; + uint32_t x273; + fiat_np384_uint1 x274; + uint32_t x275; + fiat_np384_uint1 x276; + uint32_t x277; + uint32_t x278; + uint32_t x279; + uint32_t x280; + uint32_t x281; + uint32_t x282; + uint32_t x283; + uint32_t x284; + uint32_t x285; + uint32_t x286; + uint32_t x287; + uint32_t x288; + uint32_t x289; + uint32_t x290; + uint32_t x291; + uint32_t x292; + uint32_t x293; + uint32_t x294; + uint32_t x295; + uint32_t x296; + uint32_t x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + uint32_t x301; + fiat_np384_uint1 x302; + uint32_t x303; + fiat_np384_uint1 x304; + uint32_t x305; + fiat_np384_uint1 x306; + uint32_t x307; + fiat_np384_uint1 x308; + uint32_t x309; + fiat_np384_uint1 x310; + uint32_t x311; + fiat_np384_uint1 x312; + uint32_t x313; + fiat_np384_uint1 x314; + uint32_t x315; + fiat_np384_uint1 x316; + uint32_t x317; + fiat_np384_uint1 x318; + uint32_t x319; + fiat_np384_uint1 x320; + uint32_t x321; + fiat_np384_uint1 x322; + uint32_t x323; + fiat_np384_uint1 x324; + uint32_t x325; + fiat_np384_uint1 x326; + uint32_t x327; + fiat_np384_uint1 x328; + uint32_t x329; + fiat_np384_uint1 x330; + uint32_t x331; + fiat_np384_uint1 x332; + uint32_t x333; + fiat_np384_uint1 x334; + uint32_t x335; + fiat_np384_uint1 x336; + uint32_t x337; + fiat_np384_uint1 x338; + uint32_t x339; + fiat_np384_uint1 x340; + uint32_t x341; + fiat_np384_uint1 x342; + uint32_t x343; + fiat_np384_uint1 x344; + uint32_t x345; + fiat_np384_uint1 x346; + uint32_t x347; + uint32_t x348; + uint32_t x349; + uint32_t x350; + uint32_t x351; + uint32_t x352; + uint32_t x353; + uint32_t x354; + uint32_t x355; + uint32_t x356; + uint32_t x357; + uint32_t x358; + uint32_t x359; + uint32_t x360; + uint32_t x361; + uint32_t x362; + uint32_t x363; + uint32_t x364; + uint32_t x365; + uint32_t x366; + uint32_t x367; + uint32_t x368; + uint32_t x369; + uint32_t x370; + uint32_t x371; + uint32_t x372; + uint32_t x373; + fiat_np384_uint1 x374; + uint32_t x375; + fiat_np384_uint1 x376; + uint32_t x377; + fiat_np384_uint1 x378; + uint32_t x379; + fiat_np384_uint1 x380; + uint32_t x381; + fiat_np384_uint1 x382; + uint32_t x383; + fiat_np384_uint1 x384; + uint32_t x385; + fiat_np384_uint1 x386; + uint32_t x387; + fiat_np384_uint1 x388; + uint32_t x389; + fiat_np384_uint1 x390; + uint32_t x391; + fiat_np384_uint1 x392; + uint32_t x393; + fiat_np384_uint1 x394; + uint32_t x395; + fiat_np384_uint1 x396; + uint32_t x397; + fiat_np384_uint1 x398; + uint32_t x399; + fiat_np384_uint1 x400; + uint32_t x401; + fiat_np384_uint1 x402; + uint32_t x403; + fiat_np384_uint1 x404; + uint32_t x405; + fiat_np384_uint1 x406; + uint32_t x407; + fiat_np384_uint1 x408; + uint32_t x409; + fiat_np384_uint1 x410; + uint32_t x411; + fiat_np384_uint1 x412; + uint32_t x413; + fiat_np384_uint1 x414; + uint32_t x415; + fiat_np384_uint1 x416; + uint32_t x417; + fiat_np384_uint1 x418; + uint32_t x419; + fiat_np384_uint1 x420; + uint32_t x421; + uint32_t x422; + uint32_t x423; + uint32_t x424; + uint32_t x425; + uint32_t x426; + uint32_t x427; + uint32_t x428; + uint32_t x429; + uint32_t x430; + uint32_t x431; + uint32_t x432; + uint32_t x433; + uint32_t x434; + uint32_t x435; + uint32_t x436; + uint32_t x437; + uint32_t x438; + uint32_t x439; + uint32_t x440; + uint32_t x441; + uint32_t x442; + uint32_t x443; + uint32_t x444; + uint32_t x445; + fiat_np384_uint1 x446; + uint32_t x447; + fiat_np384_uint1 x448; + uint32_t x449; + fiat_np384_uint1 x450; + uint32_t x451; + fiat_np384_uint1 x452; + uint32_t x453; + fiat_np384_uint1 x454; + uint32_t x455; + fiat_np384_uint1 x456; + uint32_t x457; + fiat_np384_uint1 x458; + uint32_t x459; + fiat_np384_uint1 x460; + uint32_t x461; + fiat_np384_uint1 x462; + uint32_t x463; + fiat_np384_uint1 x464; + uint32_t x465; + fiat_np384_uint1 x466; + uint32_t x467; + fiat_np384_uint1 x468; + uint32_t x469; + fiat_np384_uint1 x470; + uint32_t x471; + fiat_np384_uint1 x472; + uint32_t x473; + fiat_np384_uint1 x474; + uint32_t x475; + fiat_np384_uint1 x476; + uint32_t x477; + fiat_np384_uint1 x478; + uint32_t x479; + fiat_np384_uint1 x480; + uint32_t x481; + fiat_np384_uint1 x482; + uint32_t x483; + fiat_np384_uint1 x484; + uint32_t x485; + fiat_np384_uint1 x486; + uint32_t x487; + fiat_np384_uint1 x488; + uint32_t x489; + fiat_np384_uint1 x490; + uint32_t x491; + uint32_t x492; + uint32_t x493; + uint32_t x494; + uint32_t x495; + uint32_t x496; + uint32_t x497; + uint32_t x498; + uint32_t x499; + uint32_t x500; + uint32_t x501; + uint32_t x502; + uint32_t x503; + uint32_t x504; + uint32_t x505; + uint32_t x506; + uint32_t x507; + uint32_t x508; + uint32_t x509; + uint32_t x510; + uint32_t x511; + uint32_t x512; + uint32_t x513; + uint32_t x514; + uint32_t x515; + uint32_t x516; + uint32_t x517; + fiat_np384_uint1 x518; + uint32_t x519; + fiat_np384_uint1 x520; + uint32_t x521; + fiat_np384_uint1 x522; + uint32_t x523; + fiat_np384_uint1 x524; + uint32_t x525; + fiat_np384_uint1 x526; + uint32_t x527; + fiat_np384_uint1 x528; + uint32_t x529; + fiat_np384_uint1 x530; + uint32_t x531; + fiat_np384_uint1 x532; + uint32_t x533; + fiat_np384_uint1 x534; + uint32_t x535; + fiat_np384_uint1 x536; + uint32_t x537; + fiat_np384_uint1 x538; + uint32_t x539; + fiat_np384_uint1 x540; + uint32_t x541; + fiat_np384_uint1 x542; + uint32_t x543; + fiat_np384_uint1 x544; + uint32_t x545; + fiat_np384_uint1 x546; + uint32_t x547; + fiat_np384_uint1 x548; + uint32_t x549; + fiat_np384_uint1 x550; + uint32_t x551; + fiat_np384_uint1 x552; + uint32_t x553; + fiat_np384_uint1 x554; + uint32_t x555; + fiat_np384_uint1 x556; + uint32_t x557; + fiat_np384_uint1 x558; + uint32_t x559; + fiat_np384_uint1 x560; + uint32_t x561; + fiat_np384_uint1 x562; + uint32_t x563; + fiat_np384_uint1 x564; + uint32_t x565; + uint32_t x566; + uint32_t x567; + uint32_t x568; + uint32_t x569; + uint32_t x570; + uint32_t x571; + uint32_t x572; + uint32_t x573; + uint32_t x574; + uint32_t x575; + uint32_t x576; + uint32_t x577; + uint32_t x578; + uint32_t x579; + uint32_t x580; + uint32_t x581; + uint32_t x582; + uint32_t x583; + uint32_t x584; + uint32_t x585; + uint32_t x586; + uint32_t x587; + uint32_t x588; + uint32_t x589; + fiat_np384_uint1 x590; + uint32_t x591; + fiat_np384_uint1 x592; + uint32_t x593; + fiat_np384_uint1 x594; + uint32_t x595; + fiat_np384_uint1 x596; + uint32_t x597; + fiat_np384_uint1 x598; + uint32_t x599; + fiat_np384_uint1 x600; + uint32_t x601; + fiat_np384_uint1 x602; + uint32_t x603; + fiat_np384_uint1 x604; + uint32_t x605; + fiat_np384_uint1 x606; + uint32_t x607; + fiat_np384_uint1 x608; + uint32_t x609; + fiat_np384_uint1 x610; + uint32_t x611; + fiat_np384_uint1 x612; + uint32_t x613; + fiat_np384_uint1 x614; + uint32_t x615; + fiat_np384_uint1 x616; + uint32_t x617; + fiat_np384_uint1 x618; + uint32_t x619; + fiat_np384_uint1 x620; + uint32_t x621; + fiat_np384_uint1 x622; + uint32_t x623; + fiat_np384_uint1 x624; + uint32_t x625; + fiat_np384_uint1 x626; + uint32_t x627; + fiat_np384_uint1 x628; + uint32_t x629; + fiat_np384_uint1 x630; + uint32_t x631; + fiat_np384_uint1 x632; + uint32_t x633; + fiat_np384_uint1 x634; + uint32_t x635; + uint32_t x636; + uint32_t x637; + uint32_t x638; + uint32_t x639; + uint32_t x640; + uint32_t x641; + uint32_t x642; + uint32_t x643; + uint32_t x644; + uint32_t x645; + uint32_t x646; + uint32_t x647; + uint32_t x648; + uint32_t x649; + uint32_t x650; + uint32_t x651; + uint32_t x652; + uint32_t x653; + uint32_t x654; + uint32_t x655; + uint32_t x656; + uint32_t x657; + uint32_t x658; + uint32_t x659; + uint32_t x660; + uint32_t x661; + fiat_np384_uint1 x662; + uint32_t x663; + fiat_np384_uint1 x664; + uint32_t x665; + fiat_np384_uint1 x666; + uint32_t x667; + fiat_np384_uint1 x668; + uint32_t x669; + fiat_np384_uint1 x670; + uint32_t x671; + fiat_np384_uint1 x672; + uint32_t x673; + fiat_np384_uint1 x674; + uint32_t x675; + fiat_np384_uint1 x676; + uint32_t x677; + fiat_np384_uint1 x678; + uint32_t x679; + fiat_np384_uint1 x680; + uint32_t x681; + fiat_np384_uint1 x682; + uint32_t x683; + fiat_np384_uint1 x684; + uint32_t x685; + fiat_np384_uint1 x686; + uint32_t x687; + fiat_np384_uint1 x688; + uint32_t x689; + fiat_np384_uint1 x690; + uint32_t x691; + fiat_np384_uint1 x692; + uint32_t x693; + fiat_np384_uint1 x694; + uint32_t x695; + fiat_np384_uint1 x696; + uint32_t x697; + fiat_np384_uint1 x698; + uint32_t x699; + fiat_np384_uint1 x700; + uint32_t x701; + fiat_np384_uint1 x702; + uint32_t x703; + fiat_np384_uint1 x704; + uint32_t x705; + fiat_np384_uint1 x706; + uint32_t x707; + fiat_np384_uint1 x708; + uint32_t x709; + uint32_t x710; + uint32_t x711; + uint32_t x712; + uint32_t x713; + uint32_t x714; + uint32_t x715; + uint32_t x716; + uint32_t x717; + uint32_t x718; + uint32_t x719; + uint32_t x720; + uint32_t x721; + uint32_t x722; + uint32_t x723; + uint32_t x724; + uint32_t x725; + uint32_t x726; + uint32_t x727; + uint32_t x728; + uint32_t x729; + uint32_t x730; + uint32_t x731; + uint32_t x732; + uint32_t x733; + fiat_np384_uint1 x734; + uint32_t x735; + fiat_np384_uint1 x736; + uint32_t x737; + fiat_np384_uint1 x738; + uint32_t x739; + fiat_np384_uint1 x740; + uint32_t x741; + fiat_np384_uint1 x742; + uint32_t x743; + fiat_np384_uint1 x744; + uint32_t x745; + fiat_np384_uint1 x746; + uint32_t x747; + fiat_np384_uint1 x748; + uint32_t x749; + fiat_np384_uint1 x750; + uint32_t x751; + fiat_np384_uint1 x752; + uint32_t x753; + fiat_np384_uint1 x754; + uint32_t x755; + fiat_np384_uint1 x756; + uint32_t x757; + fiat_np384_uint1 x758; + uint32_t x759; + fiat_np384_uint1 x760; + uint32_t x761; + fiat_np384_uint1 x762; + uint32_t x763; + fiat_np384_uint1 x764; + uint32_t x765; + fiat_np384_uint1 x766; + uint32_t x767; + fiat_np384_uint1 x768; + uint32_t x769; + fiat_np384_uint1 x770; + uint32_t x771; + fiat_np384_uint1 x772; + uint32_t x773; + fiat_np384_uint1 x774; + uint32_t x775; + fiat_np384_uint1 x776; + uint32_t x777; + fiat_np384_uint1 x778; + uint32_t x779; + uint32_t x780; + uint32_t x781; + uint32_t x782; + uint32_t x783; + uint32_t x784; + uint32_t x785; + uint32_t x786; + uint32_t x787; + uint32_t x788; + uint32_t x789; + uint32_t x790; + uint32_t x791; + uint32_t x792; + uint32_t x793; + uint32_t x794; + uint32_t x795; + uint32_t x796; + uint32_t x797; + uint32_t x798; + uint32_t x799; + uint32_t x800; + uint32_t x801; + uint32_t x802; + uint32_t x803; + uint32_t x804; + uint32_t x805; + fiat_np384_uint1 x806; + uint32_t x807; + fiat_np384_uint1 x808; + uint32_t x809; + fiat_np384_uint1 x810; + uint32_t x811; + fiat_np384_uint1 x812; + uint32_t x813; + fiat_np384_uint1 x814; + uint32_t x815; + fiat_np384_uint1 x816; + uint32_t x817; + fiat_np384_uint1 x818; + uint32_t x819; + fiat_np384_uint1 x820; + uint32_t x821; + fiat_np384_uint1 x822; + uint32_t x823; + fiat_np384_uint1 x824; + uint32_t x825; + fiat_np384_uint1 x826; + uint32_t x827; + fiat_np384_uint1 x828; + uint32_t x829; + fiat_np384_uint1 x830; + uint32_t x831; + fiat_np384_uint1 x832; + uint32_t x833; + fiat_np384_uint1 x834; + uint32_t x835; + fiat_np384_uint1 x836; + uint32_t x837; + fiat_np384_uint1 x838; + uint32_t x839; + fiat_np384_uint1 x840; + uint32_t x841; + fiat_np384_uint1 x842; + uint32_t x843; + fiat_np384_uint1 x844; + uint32_t x845; + fiat_np384_uint1 x846; + uint32_t x847; + fiat_np384_uint1 x848; + uint32_t x849; + fiat_np384_uint1 x850; + uint32_t x851; + fiat_np384_uint1 x852; + uint32_t x853; + uint32_t x854; + uint32_t x855; + uint32_t x856; + uint32_t x857; + uint32_t x858; + uint32_t x859; + uint32_t x860; + uint32_t x861; + uint32_t x862; + uint32_t x863; + uint32_t x864; + uint32_t x865; + uint32_t x866; + uint32_t x867; + uint32_t x868; + uint32_t x869; + uint32_t x870; + uint32_t x871; + uint32_t x872; + uint32_t x873; + uint32_t x874; + uint32_t x875; + uint32_t x876; + uint32_t x877; + fiat_np384_uint1 x878; + uint32_t x879; + fiat_np384_uint1 x880; + uint32_t x881; + fiat_np384_uint1 x882; + uint32_t x883; + fiat_np384_uint1 x884; + uint32_t x885; + fiat_np384_uint1 x886; + uint32_t x887; + fiat_np384_uint1 x888; + uint32_t x889; + fiat_np384_uint1 x890; + uint32_t x891; + fiat_np384_uint1 x892; + uint32_t x893; + fiat_np384_uint1 x894; + uint32_t x895; + fiat_np384_uint1 x896; + uint32_t x897; + fiat_np384_uint1 x898; + uint32_t x899; + fiat_np384_uint1 x900; + uint32_t x901; + fiat_np384_uint1 x902; + uint32_t x903; + fiat_np384_uint1 x904; + uint32_t x905; + fiat_np384_uint1 x906; + uint32_t x907; + fiat_np384_uint1 x908; + uint32_t x909; + fiat_np384_uint1 x910; + uint32_t x911; + fiat_np384_uint1 x912; + uint32_t x913; + fiat_np384_uint1 x914; + uint32_t x915; + fiat_np384_uint1 x916; + uint32_t x917; + fiat_np384_uint1 x918; + uint32_t x919; + fiat_np384_uint1 x920; + uint32_t x921; + fiat_np384_uint1 x922; + uint32_t x923; + uint32_t x924; + uint32_t x925; + uint32_t x926; + uint32_t x927; + uint32_t x928; + uint32_t x929; + uint32_t x930; + uint32_t x931; + uint32_t x932; + uint32_t x933; + uint32_t x934; + uint32_t x935; + uint32_t x936; + uint32_t x937; + uint32_t x938; + uint32_t x939; + uint32_t x940; + uint32_t x941; + uint32_t x942; + uint32_t x943; + uint32_t x944; + uint32_t x945; + uint32_t x946; + uint32_t x947; + uint32_t x948; + uint32_t x949; + fiat_np384_uint1 x950; + uint32_t x951; + fiat_np384_uint1 x952; + uint32_t x953; + fiat_np384_uint1 x954; + uint32_t x955; + fiat_np384_uint1 x956; + uint32_t x957; + fiat_np384_uint1 x958; + uint32_t x959; + fiat_np384_uint1 x960; + uint32_t x961; + fiat_np384_uint1 x962; + uint32_t x963; + fiat_np384_uint1 x964; + uint32_t x965; + fiat_np384_uint1 x966; + uint32_t x967; + fiat_np384_uint1 x968; + uint32_t x969; + fiat_np384_uint1 x970; + uint32_t x971; + fiat_np384_uint1 x972; + uint32_t x973; + fiat_np384_uint1 x974; + uint32_t x975; + fiat_np384_uint1 x976; + uint32_t x977; + fiat_np384_uint1 x978; + uint32_t x979; + fiat_np384_uint1 x980; + uint32_t x981; + fiat_np384_uint1 x982; + uint32_t x983; + fiat_np384_uint1 x984; + uint32_t x985; + fiat_np384_uint1 x986; + uint32_t x987; + fiat_np384_uint1 x988; + uint32_t x989; + fiat_np384_uint1 x990; + uint32_t x991; + fiat_np384_uint1 x992; + uint32_t x993; + fiat_np384_uint1 x994; + uint32_t x995; + fiat_np384_uint1 x996; + uint32_t x997; + uint32_t x998; + uint32_t x999; + uint32_t x1000; + uint32_t x1001; + uint32_t x1002; + uint32_t x1003; + uint32_t x1004; + uint32_t x1005; + uint32_t x1006; + uint32_t x1007; + uint32_t x1008; + uint32_t x1009; + uint32_t x1010; + uint32_t x1011; + uint32_t x1012; + uint32_t x1013; + uint32_t x1014; + uint32_t x1015; + uint32_t x1016; + uint32_t x1017; + uint32_t x1018; + uint32_t x1019; + uint32_t x1020; + uint32_t x1021; + fiat_np384_uint1 x1022; + uint32_t x1023; + fiat_np384_uint1 x1024; + uint32_t x1025; + fiat_np384_uint1 x1026; + uint32_t x1027; + fiat_np384_uint1 x1028; + uint32_t x1029; + fiat_np384_uint1 x1030; + uint32_t x1031; + fiat_np384_uint1 x1032; + uint32_t x1033; + fiat_np384_uint1 x1034; + uint32_t x1035; + fiat_np384_uint1 x1036; + uint32_t x1037; + fiat_np384_uint1 x1038; + uint32_t x1039; + fiat_np384_uint1 x1040; + uint32_t x1041; + fiat_np384_uint1 x1042; + uint32_t x1043; + fiat_np384_uint1 x1044; + uint32_t x1045; + fiat_np384_uint1 x1046; + uint32_t x1047; + fiat_np384_uint1 x1048; + uint32_t x1049; + fiat_np384_uint1 x1050; + uint32_t x1051; + fiat_np384_uint1 x1052; + uint32_t x1053; + fiat_np384_uint1 x1054; + uint32_t x1055; + fiat_np384_uint1 x1056; + uint32_t x1057; + fiat_np384_uint1 x1058; + uint32_t x1059; + fiat_np384_uint1 x1060; + uint32_t x1061; + fiat_np384_uint1 x1062; + uint32_t x1063; + fiat_np384_uint1 x1064; + uint32_t x1065; + fiat_np384_uint1 x1066; + uint32_t x1067; + uint32_t x1068; + uint32_t x1069; + uint32_t x1070; + uint32_t x1071; + uint32_t x1072; + uint32_t x1073; + uint32_t x1074; + uint32_t x1075; + uint32_t x1076; + uint32_t x1077; + uint32_t x1078; + uint32_t x1079; + uint32_t x1080; + uint32_t x1081; + uint32_t x1082; + uint32_t x1083; + uint32_t x1084; + uint32_t x1085; + uint32_t x1086; + uint32_t x1087; + uint32_t x1088; + uint32_t x1089; + uint32_t x1090; + uint32_t x1091; + uint32_t x1092; + uint32_t x1093; + fiat_np384_uint1 x1094; + uint32_t x1095; + fiat_np384_uint1 x1096; + uint32_t x1097; + fiat_np384_uint1 x1098; + uint32_t x1099; + fiat_np384_uint1 x1100; + uint32_t x1101; + fiat_np384_uint1 x1102; + uint32_t x1103; + fiat_np384_uint1 x1104; + uint32_t x1105; + fiat_np384_uint1 x1106; + uint32_t x1107; + fiat_np384_uint1 x1108; + uint32_t x1109; + fiat_np384_uint1 x1110; + uint32_t x1111; + fiat_np384_uint1 x1112; + uint32_t x1113; + fiat_np384_uint1 x1114; + uint32_t x1115; + fiat_np384_uint1 x1116; + uint32_t x1117; + fiat_np384_uint1 x1118; + uint32_t x1119; + fiat_np384_uint1 x1120; + uint32_t x1121; + fiat_np384_uint1 x1122; + uint32_t x1123; + fiat_np384_uint1 x1124; + uint32_t x1125; + fiat_np384_uint1 x1126; + uint32_t x1127; + fiat_np384_uint1 x1128; + uint32_t x1129; + fiat_np384_uint1 x1130; + uint32_t x1131; + fiat_np384_uint1 x1132; + uint32_t x1133; + fiat_np384_uint1 x1134; + uint32_t x1135; + fiat_np384_uint1 x1136; + uint32_t x1137; + fiat_np384_uint1 x1138; + uint32_t x1139; + fiat_np384_uint1 x1140; + uint32_t x1141; + uint32_t x1142; + uint32_t x1143; + uint32_t x1144; + uint32_t x1145; + uint32_t x1146; + uint32_t x1147; + uint32_t x1148; + uint32_t x1149; + uint32_t x1150; + uint32_t x1151; + uint32_t x1152; + uint32_t x1153; + uint32_t x1154; + uint32_t x1155; + uint32_t x1156; + uint32_t x1157; + uint32_t x1158; + uint32_t x1159; + uint32_t x1160; + uint32_t x1161; + uint32_t x1162; + uint32_t x1163; + uint32_t x1164; + uint32_t x1165; + fiat_np384_uint1 x1166; + uint32_t x1167; + fiat_np384_uint1 x1168; + uint32_t x1169; + fiat_np384_uint1 x1170; + uint32_t x1171; + fiat_np384_uint1 x1172; + uint32_t x1173; + fiat_np384_uint1 x1174; + uint32_t x1175; + fiat_np384_uint1 x1176; + uint32_t x1177; + fiat_np384_uint1 x1178; + uint32_t x1179; + fiat_np384_uint1 x1180; + uint32_t x1181; + fiat_np384_uint1 x1182; + uint32_t x1183; + fiat_np384_uint1 x1184; + uint32_t x1185; + fiat_np384_uint1 x1186; + uint32_t x1187; + fiat_np384_uint1 x1188; + uint32_t x1189; + fiat_np384_uint1 x1190; + uint32_t x1191; + fiat_np384_uint1 x1192; + uint32_t x1193; + fiat_np384_uint1 x1194; + uint32_t x1195; + fiat_np384_uint1 x1196; + uint32_t x1197; + fiat_np384_uint1 x1198; + uint32_t x1199; + fiat_np384_uint1 x1200; + uint32_t x1201; + fiat_np384_uint1 x1202; + uint32_t x1203; + fiat_np384_uint1 x1204; + uint32_t x1205; + fiat_np384_uint1 x1206; + uint32_t x1207; + fiat_np384_uint1 x1208; + uint32_t x1209; + fiat_np384_uint1 x1210; + uint32_t x1211; + uint32_t x1212; + uint32_t x1213; + uint32_t x1214; + uint32_t x1215; + uint32_t x1216; + uint32_t x1217; + uint32_t x1218; + uint32_t x1219; + uint32_t x1220; + uint32_t x1221; + uint32_t x1222; + uint32_t x1223; + uint32_t x1224; + uint32_t x1225; + uint32_t x1226; + uint32_t x1227; + uint32_t x1228; + uint32_t x1229; + uint32_t x1230; + uint32_t x1231; + uint32_t x1232; + uint32_t x1233; + uint32_t x1234; + uint32_t x1235; + uint32_t x1236; + uint32_t x1237; + fiat_np384_uint1 x1238; + uint32_t x1239; + fiat_np384_uint1 x1240; + uint32_t x1241; + fiat_np384_uint1 x1242; + uint32_t x1243; + fiat_np384_uint1 x1244; + uint32_t x1245; + fiat_np384_uint1 x1246; + uint32_t x1247; + fiat_np384_uint1 x1248; + uint32_t x1249; + fiat_np384_uint1 x1250; + uint32_t x1251; + fiat_np384_uint1 x1252; + uint32_t x1253; + fiat_np384_uint1 x1254; + uint32_t x1255; + fiat_np384_uint1 x1256; + uint32_t x1257; + fiat_np384_uint1 x1258; + uint32_t x1259; + fiat_np384_uint1 x1260; + uint32_t x1261; + fiat_np384_uint1 x1262; + uint32_t x1263; + fiat_np384_uint1 x1264; + uint32_t x1265; + fiat_np384_uint1 x1266; + uint32_t x1267; + fiat_np384_uint1 x1268; + uint32_t x1269; + fiat_np384_uint1 x1270; + uint32_t x1271; + fiat_np384_uint1 x1272; + uint32_t x1273; + fiat_np384_uint1 x1274; + uint32_t x1275; + fiat_np384_uint1 x1276; + uint32_t x1277; + fiat_np384_uint1 x1278; + uint32_t x1279; + fiat_np384_uint1 x1280; + uint32_t x1281; + fiat_np384_uint1 x1282; + uint32_t x1283; + fiat_np384_uint1 x1284; + uint32_t x1285; + uint32_t x1286; + uint32_t x1287; + uint32_t x1288; + uint32_t x1289; + uint32_t x1290; + uint32_t x1291; + uint32_t x1292; + uint32_t x1293; + uint32_t x1294; + uint32_t x1295; + uint32_t x1296; + uint32_t x1297; + uint32_t x1298; + uint32_t x1299; + uint32_t x1300; + uint32_t x1301; + uint32_t x1302; + uint32_t x1303; + uint32_t x1304; + uint32_t x1305; + uint32_t x1306; + uint32_t x1307; + uint32_t x1308; + uint32_t x1309; + fiat_np384_uint1 x1310; + uint32_t x1311; + fiat_np384_uint1 x1312; + uint32_t x1313; + fiat_np384_uint1 x1314; + uint32_t x1315; + fiat_np384_uint1 x1316; + uint32_t x1317; + fiat_np384_uint1 x1318; + uint32_t x1319; + fiat_np384_uint1 x1320; + uint32_t x1321; + fiat_np384_uint1 x1322; + uint32_t x1323; + fiat_np384_uint1 x1324; + uint32_t x1325; + fiat_np384_uint1 x1326; + uint32_t x1327; + fiat_np384_uint1 x1328; + uint32_t x1329; + fiat_np384_uint1 x1330; + uint32_t x1331; + fiat_np384_uint1 x1332; + uint32_t x1333; + fiat_np384_uint1 x1334; + uint32_t x1335; + fiat_np384_uint1 x1336; + uint32_t x1337; + fiat_np384_uint1 x1338; + uint32_t x1339; + fiat_np384_uint1 x1340; + uint32_t x1341; + fiat_np384_uint1 x1342; + uint32_t x1343; + fiat_np384_uint1 x1344; + uint32_t x1345; + fiat_np384_uint1 x1346; + uint32_t x1347; + fiat_np384_uint1 x1348; + uint32_t x1349; + fiat_np384_uint1 x1350; + uint32_t x1351; + fiat_np384_uint1 x1352; + uint32_t x1353; + fiat_np384_uint1 x1354; + uint32_t x1355; + uint32_t x1356; + uint32_t x1357; + uint32_t x1358; + uint32_t x1359; + uint32_t x1360; + uint32_t x1361; + uint32_t x1362; + uint32_t x1363; + uint32_t x1364; + uint32_t x1365; + uint32_t x1366; + uint32_t x1367; + uint32_t x1368; + uint32_t x1369; + uint32_t x1370; + uint32_t x1371; + uint32_t x1372; + uint32_t x1373; + uint32_t x1374; + uint32_t x1375; + uint32_t x1376; + uint32_t x1377; + uint32_t x1378; + uint32_t x1379; + uint32_t x1380; + uint32_t x1381; + fiat_np384_uint1 x1382; + uint32_t x1383; + fiat_np384_uint1 x1384; + uint32_t x1385; + fiat_np384_uint1 x1386; + uint32_t x1387; + fiat_np384_uint1 x1388; + uint32_t x1389; + fiat_np384_uint1 x1390; + uint32_t x1391; + fiat_np384_uint1 x1392; + uint32_t x1393; + fiat_np384_uint1 x1394; + uint32_t x1395; + fiat_np384_uint1 x1396; + uint32_t x1397; + fiat_np384_uint1 x1398; + uint32_t x1399; + fiat_np384_uint1 x1400; + uint32_t x1401; + fiat_np384_uint1 x1402; + uint32_t x1403; + fiat_np384_uint1 x1404; + uint32_t x1405; + fiat_np384_uint1 x1406; + uint32_t x1407; + fiat_np384_uint1 x1408; + uint32_t x1409; + fiat_np384_uint1 x1410; + uint32_t x1411; + fiat_np384_uint1 x1412; + uint32_t x1413; + fiat_np384_uint1 x1414; + uint32_t x1415; + fiat_np384_uint1 x1416; + uint32_t x1417; + fiat_np384_uint1 x1418; + uint32_t x1419; + fiat_np384_uint1 x1420; + uint32_t x1421; + fiat_np384_uint1 x1422; + uint32_t x1423; + fiat_np384_uint1 x1424; + uint32_t x1425; + fiat_np384_uint1 x1426; + uint32_t x1427; + fiat_np384_uint1 x1428; + uint32_t x1429; + uint32_t x1430; + uint32_t x1431; + uint32_t x1432; + uint32_t x1433; + uint32_t x1434; + uint32_t x1435; + uint32_t x1436; + uint32_t x1437; + uint32_t x1438; + uint32_t x1439; + uint32_t x1440; + uint32_t x1441; + uint32_t x1442; + uint32_t x1443; + uint32_t x1444; + uint32_t x1445; + uint32_t x1446; + uint32_t x1447; + uint32_t x1448; + uint32_t x1449; + uint32_t x1450; + uint32_t x1451; + uint32_t x1452; + uint32_t x1453; + fiat_np384_uint1 x1454; + uint32_t x1455; + fiat_np384_uint1 x1456; + uint32_t x1457; + fiat_np384_uint1 x1458; + uint32_t x1459; + fiat_np384_uint1 x1460; + uint32_t x1461; + fiat_np384_uint1 x1462; + uint32_t x1463; + fiat_np384_uint1 x1464; + uint32_t x1465; + fiat_np384_uint1 x1466; + uint32_t x1467; + fiat_np384_uint1 x1468; + uint32_t x1469; + fiat_np384_uint1 x1470; + uint32_t x1471; + fiat_np384_uint1 x1472; + uint32_t x1473; + fiat_np384_uint1 x1474; + uint32_t x1475; + fiat_np384_uint1 x1476; + uint32_t x1477; + fiat_np384_uint1 x1478; + uint32_t x1479; + fiat_np384_uint1 x1480; + uint32_t x1481; + fiat_np384_uint1 x1482; + uint32_t x1483; + fiat_np384_uint1 x1484; + uint32_t x1485; + fiat_np384_uint1 x1486; + uint32_t x1487; + fiat_np384_uint1 x1488; + uint32_t x1489; + fiat_np384_uint1 x1490; + uint32_t x1491; + fiat_np384_uint1 x1492; + uint32_t x1493; + fiat_np384_uint1 x1494; + uint32_t x1495; + fiat_np384_uint1 x1496; + uint32_t x1497; + fiat_np384_uint1 x1498; + uint32_t x1499; + uint32_t x1500; + uint32_t x1501; + uint32_t x1502; + uint32_t x1503; + uint32_t x1504; + uint32_t x1505; + uint32_t x1506; + uint32_t x1507; + uint32_t x1508; + uint32_t x1509; + uint32_t x1510; + uint32_t x1511; + uint32_t x1512; + uint32_t x1513; + uint32_t x1514; + uint32_t x1515; + uint32_t x1516; + uint32_t x1517; + uint32_t x1518; + uint32_t x1519; + uint32_t x1520; + uint32_t x1521; + uint32_t x1522; + uint32_t x1523; + uint32_t x1524; + uint32_t x1525; + fiat_np384_uint1 x1526; + uint32_t x1527; + fiat_np384_uint1 x1528; + uint32_t x1529; + fiat_np384_uint1 x1530; + uint32_t x1531; + fiat_np384_uint1 x1532; + uint32_t x1533; + fiat_np384_uint1 x1534; + uint32_t x1535; + fiat_np384_uint1 x1536; + uint32_t x1537; + fiat_np384_uint1 x1538; + uint32_t x1539; + fiat_np384_uint1 x1540; + uint32_t x1541; + fiat_np384_uint1 x1542; + uint32_t x1543; + fiat_np384_uint1 x1544; + uint32_t x1545; + fiat_np384_uint1 x1546; + uint32_t x1547; + fiat_np384_uint1 x1548; + uint32_t x1549; + fiat_np384_uint1 x1550; + uint32_t x1551; + fiat_np384_uint1 x1552; + uint32_t x1553; + fiat_np384_uint1 x1554; + uint32_t x1555; + fiat_np384_uint1 x1556; + uint32_t x1557; + fiat_np384_uint1 x1558; + uint32_t x1559; + fiat_np384_uint1 x1560; + uint32_t x1561; + fiat_np384_uint1 x1562; + uint32_t x1563; + fiat_np384_uint1 x1564; + uint32_t x1565; + fiat_np384_uint1 x1566; + uint32_t x1567; + fiat_np384_uint1 x1568; + uint32_t x1569; + fiat_np384_uint1 x1570; + uint32_t x1571; + fiat_np384_uint1 x1572; + uint32_t x1573; + uint32_t x1574; + uint32_t x1575; + uint32_t x1576; + uint32_t x1577; + uint32_t x1578; + uint32_t x1579; + uint32_t x1580; + uint32_t x1581; + uint32_t x1582; + uint32_t x1583; + uint32_t x1584; + uint32_t x1585; + uint32_t x1586; + uint32_t x1587; + uint32_t x1588; + uint32_t x1589; + uint32_t x1590; + uint32_t x1591; + uint32_t x1592; + uint32_t x1593; + uint32_t x1594; + uint32_t x1595; + uint32_t x1596; + uint32_t x1597; + fiat_np384_uint1 x1598; + uint32_t x1599; + fiat_np384_uint1 x1600; + uint32_t x1601; + fiat_np384_uint1 x1602; + uint32_t x1603; + fiat_np384_uint1 x1604; + uint32_t x1605; + fiat_np384_uint1 x1606; + uint32_t x1607; + fiat_np384_uint1 x1608; + uint32_t x1609; + fiat_np384_uint1 x1610; + uint32_t x1611; + fiat_np384_uint1 x1612; + uint32_t x1613; + fiat_np384_uint1 x1614; + uint32_t x1615; + fiat_np384_uint1 x1616; + uint32_t x1617; + fiat_np384_uint1 x1618; + uint32_t x1619; + fiat_np384_uint1 x1620; + uint32_t x1621; + fiat_np384_uint1 x1622; + uint32_t x1623; + fiat_np384_uint1 x1624; + uint32_t x1625; + fiat_np384_uint1 x1626; + uint32_t x1627; + fiat_np384_uint1 x1628; + uint32_t x1629; + fiat_np384_uint1 x1630; + uint32_t x1631; + fiat_np384_uint1 x1632; + uint32_t x1633; + fiat_np384_uint1 x1634; + uint32_t x1635; + fiat_np384_uint1 x1636; + uint32_t x1637; + fiat_np384_uint1 x1638; + uint32_t x1639; + fiat_np384_uint1 x1640; + uint32_t x1641; + fiat_np384_uint1 x1642; + uint32_t x1643; + uint32_t x1644; + uint32_t x1645; + uint32_t x1646; + uint32_t x1647; + uint32_t x1648; + uint32_t x1649; + uint32_t x1650; + uint32_t x1651; + uint32_t x1652; + uint32_t x1653; + uint32_t x1654; + uint32_t x1655; + uint32_t x1656; + uint32_t x1657; + uint32_t x1658; + uint32_t x1659; + uint32_t x1660; + uint32_t x1661; + uint32_t x1662; + uint32_t x1663; + uint32_t x1664; + uint32_t x1665; + uint32_t x1666; + uint32_t x1667; + uint32_t x1668; + uint32_t x1669; + fiat_np384_uint1 x1670; + uint32_t x1671; + fiat_np384_uint1 x1672; + uint32_t x1673; + fiat_np384_uint1 x1674; + uint32_t x1675; + fiat_np384_uint1 x1676; + uint32_t x1677; + fiat_np384_uint1 x1678; + uint32_t x1679; + fiat_np384_uint1 x1680; + uint32_t x1681; + fiat_np384_uint1 x1682; + uint32_t x1683; + fiat_np384_uint1 x1684; + uint32_t x1685; + fiat_np384_uint1 x1686; + uint32_t x1687; + fiat_np384_uint1 x1688; + uint32_t x1689; + fiat_np384_uint1 x1690; + uint32_t x1691; + fiat_np384_uint1 x1692; + uint32_t x1693; + fiat_np384_uint1 x1694; + uint32_t x1695; + fiat_np384_uint1 x1696; + uint32_t x1697; + fiat_np384_uint1 x1698; + uint32_t x1699; + fiat_np384_uint1 x1700; + uint32_t x1701; + fiat_np384_uint1 x1702; + uint32_t x1703; + fiat_np384_uint1 x1704; + uint32_t x1705; + fiat_np384_uint1 x1706; + uint32_t x1707; + fiat_np384_uint1 x1708; + uint32_t x1709; + fiat_np384_uint1 x1710; + uint32_t x1711; + fiat_np384_uint1 x1712; + uint32_t x1713; + fiat_np384_uint1 x1714; + uint32_t x1715; + fiat_np384_uint1 x1716; + uint32_t x1717; + fiat_np384_uint1 x1718; + uint32_t x1719; + fiat_np384_uint1 x1720; + uint32_t x1721; + fiat_np384_uint1 x1722; + uint32_t x1723; + fiat_np384_uint1 x1724; + uint32_t x1725; + fiat_np384_uint1 x1726; + uint32_t x1727; + fiat_np384_uint1 x1728; + uint32_t x1729; + fiat_np384_uint1 x1730; + uint32_t x1731; + fiat_np384_uint1 x1732; + uint32_t x1733; + fiat_np384_uint1 x1734; + uint32_t x1735; + fiat_np384_uint1 x1736; + uint32_t x1737; + fiat_np384_uint1 x1738; + uint32_t x1739; + fiat_np384_uint1 x1740; + uint32_t x1741; + fiat_np384_uint1 x1742; + uint32_t x1743; + uint32_t x1744; + uint32_t x1745; + uint32_t x1746; + uint32_t x1747; + uint32_t x1748; + uint32_t x1749; + uint32_t x1750; + uint32_t x1751; + uint32_t x1752; + uint32_t x1753; + uint32_t x1754; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[8]); + x9 = (arg1[9]); + x10 = (arg1[10]); + x11 = (arg1[11]); + x12 = (arg1[0]); + fiat_np384_mulx_u32(&x13, &x14, x12, UINT32_C(0xc84ee01)); + fiat_np384_mulx_u32(&x15, &x16, x12, UINT32_C(0x2b39bf21)); + fiat_np384_mulx_u32(&x17, &x18, x12, UINT32_C(0x3fb05b7a)); + fiat_np384_mulx_u32(&x19, &x20, x12, UINT32_C(0x28266895)); + fiat_np384_mulx_u32(&x21, &x22, x12, UINT32_C(0xd40d4917)); + fiat_np384_mulx_u32(&x23, &x24, x12, UINT32_C(0x4aab1cc5)); + fiat_np384_mulx_u32(&x25, &x26, x12, UINT32_C(0xbc3e483a)); + fiat_np384_mulx_u32(&x27, &x28, x12, UINT32_C(0xfcb82947)); + fiat_np384_mulx_u32(&x29, &x30, x12, UINT32_C(0xff3d81e5)); + fiat_np384_mulx_u32(&x31, &x32, x12, UINT32_C(0xdf1aa419)); + fiat_np384_mulx_u32(&x33, &x34, x12, UINT32_C(0x2d319b24)); + fiat_np384_mulx_u32(&x35, &x36, x12, UINT32_C(0x19b409a9)); + fiat_np384_addcarryx_u32(&x37, &x38, 0x0, x36, x33); + fiat_np384_addcarryx_u32(&x39, &x40, x38, x34, x31); + fiat_np384_addcarryx_u32(&x41, &x42, x40, x32, x29); + fiat_np384_addcarryx_u32(&x43, &x44, x42, x30, x27); + fiat_np384_addcarryx_u32(&x45, &x46, x44, x28, x25); + fiat_np384_addcarryx_u32(&x47, &x48, x46, x26, x23); + fiat_np384_addcarryx_u32(&x49, &x50, x48, x24, x21); + fiat_np384_addcarryx_u32(&x51, &x52, x50, x22, x19); + fiat_np384_addcarryx_u32(&x53, &x54, x52, x20, x17); + fiat_np384_addcarryx_u32(&x55, &x56, x54, x18, x15); + fiat_np384_addcarryx_u32(&x57, &x58, x56, x16, x13); + fiat_np384_mulx_u32(&x59, &x60, x35, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x61, &x62, x59, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x63, &x64, x59, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x65, &x66, x59, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x67, &x68, x59, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x69, &x70, x59, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x71, &x72, x59, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x73, &x74, x59, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x75, &x76, x59, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x77, &x78, x59, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x79, &x80, x59, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x81, &x82, x59, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x83, &x84, x59, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x85, &x86, 0x0, x84, x81); + fiat_np384_addcarryx_u32(&x87, &x88, x86, x82, x79); + fiat_np384_addcarryx_u32(&x89, &x90, x88, x80, x77); + fiat_np384_addcarryx_u32(&x91, &x92, x90, x78, x75); + fiat_np384_addcarryx_u32(&x93, &x94, x92, x76, x73); + fiat_np384_addcarryx_u32(&x95, &x96, x94, x74, x71); + fiat_np384_addcarryx_u32(&x97, &x98, x96, x72, x69); + fiat_np384_addcarryx_u32(&x99, &x100, x98, x70, x67); + fiat_np384_addcarryx_u32(&x101, &x102, x100, x68, x65); + fiat_np384_addcarryx_u32(&x103, &x104, x102, x66, x63); + fiat_np384_addcarryx_u32(&x105, &x106, x104, x64, x61); + fiat_np384_addcarryx_u32(&x107, &x108, 0x0, x35, x83); + fiat_np384_addcarryx_u32(&x109, &x110, x108, x37, x85); + fiat_np384_addcarryx_u32(&x111, &x112, x110, x39, x87); + fiat_np384_addcarryx_u32(&x113, &x114, x112, x41, x89); + fiat_np384_addcarryx_u32(&x115, &x116, x114, x43, x91); + fiat_np384_addcarryx_u32(&x117, &x118, x116, x45, x93); + fiat_np384_addcarryx_u32(&x119, &x120, x118, x47, x95); + fiat_np384_addcarryx_u32(&x121, &x122, x120, x49, x97); + fiat_np384_addcarryx_u32(&x123, &x124, x122, x51, x99); + fiat_np384_addcarryx_u32(&x125, &x126, x124, x53, x101); + fiat_np384_addcarryx_u32(&x127, &x128, x126, x55, x103); + fiat_np384_addcarryx_u32(&x129, &x130, x128, x57, x105); + fiat_np384_addcarryx_u32(&x131, &x132, x130, (x58 + x14), (x106 + x62)); + fiat_np384_mulx_u32(&x133, &x134, x1, UINT32_C(0xc84ee01)); + fiat_np384_mulx_u32(&x135, &x136, x1, UINT32_C(0x2b39bf21)); + fiat_np384_mulx_u32(&x137, &x138, x1, UINT32_C(0x3fb05b7a)); + fiat_np384_mulx_u32(&x139, &x140, x1, UINT32_C(0x28266895)); + fiat_np384_mulx_u32(&x141, &x142, x1, UINT32_C(0xd40d4917)); + fiat_np384_mulx_u32(&x143, &x144, x1, UINT32_C(0x4aab1cc5)); + fiat_np384_mulx_u32(&x145, &x146, x1, UINT32_C(0xbc3e483a)); + fiat_np384_mulx_u32(&x147, &x148, x1, UINT32_C(0xfcb82947)); + fiat_np384_mulx_u32(&x149, &x150, x1, UINT32_C(0xff3d81e5)); + fiat_np384_mulx_u32(&x151, &x152, x1, UINT32_C(0xdf1aa419)); + fiat_np384_mulx_u32(&x153, &x154, x1, UINT32_C(0x2d319b24)); + fiat_np384_mulx_u32(&x155, &x156, x1, UINT32_C(0x19b409a9)); + fiat_np384_addcarryx_u32(&x157, &x158, 0x0, x156, x153); + fiat_np384_addcarryx_u32(&x159, &x160, x158, x154, x151); + fiat_np384_addcarryx_u32(&x161, &x162, x160, x152, x149); + fiat_np384_addcarryx_u32(&x163, &x164, x162, x150, x147); + fiat_np384_addcarryx_u32(&x165, &x166, x164, x148, x145); + fiat_np384_addcarryx_u32(&x167, &x168, x166, x146, x143); + fiat_np384_addcarryx_u32(&x169, &x170, x168, x144, x141); + fiat_np384_addcarryx_u32(&x171, &x172, x170, x142, x139); + fiat_np384_addcarryx_u32(&x173, &x174, x172, x140, x137); + fiat_np384_addcarryx_u32(&x175, &x176, x174, x138, x135); + fiat_np384_addcarryx_u32(&x177, &x178, x176, x136, x133); + fiat_np384_addcarryx_u32(&x179, &x180, 0x0, x109, x155); + fiat_np384_addcarryx_u32(&x181, &x182, x180, x111, x157); + fiat_np384_addcarryx_u32(&x183, &x184, x182, x113, x159); + fiat_np384_addcarryx_u32(&x185, &x186, x184, x115, x161); + fiat_np384_addcarryx_u32(&x187, &x188, x186, x117, x163); + fiat_np384_addcarryx_u32(&x189, &x190, x188, x119, x165); + fiat_np384_addcarryx_u32(&x191, &x192, x190, x121, x167); + fiat_np384_addcarryx_u32(&x193, &x194, x192, x123, x169); + fiat_np384_addcarryx_u32(&x195, &x196, x194, x125, x171); + fiat_np384_addcarryx_u32(&x197, &x198, x196, x127, x173); + fiat_np384_addcarryx_u32(&x199, &x200, x198, x129, x175); + fiat_np384_addcarryx_u32(&x201, &x202, x200, x131, x177); + fiat_np384_mulx_u32(&x203, &x204, x179, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x205, &x206, x203, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x207, &x208, x203, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x209, &x210, x203, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x211, &x212, x203, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x213, &x214, x203, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x215, &x216, x203, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x217, &x218, x203, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x219, &x220, x203, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x221, &x222, x203, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x223, &x224, x203, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x225, &x226, x203, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x227, &x228, x203, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x229, &x230, 0x0, x228, x225); + fiat_np384_addcarryx_u32(&x231, &x232, x230, x226, x223); + fiat_np384_addcarryx_u32(&x233, &x234, x232, x224, x221); + fiat_np384_addcarryx_u32(&x235, &x236, x234, x222, x219); + fiat_np384_addcarryx_u32(&x237, &x238, x236, x220, x217); + fiat_np384_addcarryx_u32(&x239, &x240, x238, x218, x215); + fiat_np384_addcarryx_u32(&x241, &x242, x240, x216, x213); + fiat_np384_addcarryx_u32(&x243, &x244, x242, x214, x211); + fiat_np384_addcarryx_u32(&x245, &x246, x244, x212, x209); + fiat_np384_addcarryx_u32(&x247, &x248, x246, x210, x207); + fiat_np384_addcarryx_u32(&x249, &x250, x248, x208, x205); + fiat_np384_addcarryx_u32(&x251, &x252, 0x0, x179, x227); + fiat_np384_addcarryx_u32(&x253, &x254, x252, x181, x229); + fiat_np384_addcarryx_u32(&x255, &x256, x254, x183, x231); + fiat_np384_addcarryx_u32(&x257, &x258, x256, x185, x233); + fiat_np384_addcarryx_u32(&x259, &x260, x258, x187, x235); + fiat_np384_addcarryx_u32(&x261, &x262, x260, x189, x237); + fiat_np384_addcarryx_u32(&x263, &x264, x262, x191, x239); + fiat_np384_addcarryx_u32(&x265, &x266, x264, x193, x241); + fiat_np384_addcarryx_u32(&x267, &x268, x266, x195, x243); + fiat_np384_addcarryx_u32(&x269, &x270, x268, x197, x245); + fiat_np384_addcarryx_u32(&x271, &x272, x270, x199, x247); + fiat_np384_addcarryx_u32(&x273, &x274, x272, x201, x249); + fiat_np384_addcarryx_u32(&x275, &x276, x274, (((uint32_t)x202 + x132) + (x178 + x134)), (x250 + x206)); + fiat_np384_mulx_u32(&x277, &x278, x2, UINT32_C(0xc84ee01)); + fiat_np384_mulx_u32(&x279, &x280, x2, UINT32_C(0x2b39bf21)); + fiat_np384_mulx_u32(&x281, &x282, x2, UINT32_C(0x3fb05b7a)); + fiat_np384_mulx_u32(&x283, &x284, x2, UINT32_C(0x28266895)); + fiat_np384_mulx_u32(&x285, &x286, x2, UINT32_C(0xd40d4917)); + fiat_np384_mulx_u32(&x287, &x288, x2, UINT32_C(0x4aab1cc5)); + fiat_np384_mulx_u32(&x289, &x290, x2, UINT32_C(0xbc3e483a)); + fiat_np384_mulx_u32(&x291, &x292, x2, UINT32_C(0xfcb82947)); + fiat_np384_mulx_u32(&x293, &x294, x2, UINT32_C(0xff3d81e5)); + fiat_np384_mulx_u32(&x295, &x296, x2, UINT32_C(0xdf1aa419)); + fiat_np384_mulx_u32(&x297, &x298, x2, UINT32_C(0x2d319b24)); + fiat_np384_mulx_u32(&x299, &x300, x2, UINT32_C(0x19b409a9)); + fiat_np384_addcarryx_u32(&x301, &x302, 0x0, x300, x297); + fiat_np384_addcarryx_u32(&x303, &x304, x302, x298, x295); + fiat_np384_addcarryx_u32(&x305, &x306, x304, x296, x293); + fiat_np384_addcarryx_u32(&x307, &x308, x306, x294, x291); + fiat_np384_addcarryx_u32(&x309, &x310, x308, x292, x289); + fiat_np384_addcarryx_u32(&x311, &x312, x310, x290, x287); + fiat_np384_addcarryx_u32(&x313, &x314, x312, x288, x285); + fiat_np384_addcarryx_u32(&x315, &x316, x314, x286, x283); + fiat_np384_addcarryx_u32(&x317, &x318, x316, x284, x281); + fiat_np384_addcarryx_u32(&x319, &x320, x318, x282, x279); + fiat_np384_addcarryx_u32(&x321, &x322, x320, x280, x277); + fiat_np384_addcarryx_u32(&x323, &x324, 0x0, x253, x299); + fiat_np384_addcarryx_u32(&x325, &x326, x324, x255, x301); + fiat_np384_addcarryx_u32(&x327, &x328, x326, x257, x303); + fiat_np384_addcarryx_u32(&x329, &x330, x328, x259, x305); + fiat_np384_addcarryx_u32(&x331, &x332, x330, x261, x307); + fiat_np384_addcarryx_u32(&x333, &x334, x332, x263, x309); + fiat_np384_addcarryx_u32(&x335, &x336, x334, x265, x311); + fiat_np384_addcarryx_u32(&x337, &x338, x336, x267, x313); + fiat_np384_addcarryx_u32(&x339, &x340, x338, x269, x315); + fiat_np384_addcarryx_u32(&x341, &x342, x340, x271, x317); + fiat_np384_addcarryx_u32(&x343, &x344, x342, x273, x319); + fiat_np384_addcarryx_u32(&x345, &x346, x344, x275, x321); + fiat_np384_mulx_u32(&x347, &x348, x323, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x349, &x350, x347, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x351, &x352, x347, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x353, &x354, x347, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x355, &x356, x347, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x357, &x358, x347, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x359, &x360, x347, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x361, &x362, x347, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x363, &x364, x347, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x365, &x366, x347, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x367, &x368, x347, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x369, &x370, x347, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x371, &x372, x347, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x373, &x374, 0x0, x372, x369); + fiat_np384_addcarryx_u32(&x375, &x376, x374, x370, x367); + fiat_np384_addcarryx_u32(&x377, &x378, x376, x368, x365); + fiat_np384_addcarryx_u32(&x379, &x380, x378, x366, x363); + fiat_np384_addcarryx_u32(&x381, &x382, x380, x364, x361); + fiat_np384_addcarryx_u32(&x383, &x384, x382, x362, x359); + fiat_np384_addcarryx_u32(&x385, &x386, x384, x360, x357); + fiat_np384_addcarryx_u32(&x387, &x388, x386, x358, x355); + fiat_np384_addcarryx_u32(&x389, &x390, x388, x356, x353); + fiat_np384_addcarryx_u32(&x391, &x392, x390, x354, x351); + fiat_np384_addcarryx_u32(&x393, &x394, x392, x352, x349); + fiat_np384_addcarryx_u32(&x395, &x396, 0x0, x323, x371); + fiat_np384_addcarryx_u32(&x397, &x398, x396, x325, x373); + fiat_np384_addcarryx_u32(&x399, &x400, x398, x327, x375); + fiat_np384_addcarryx_u32(&x401, &x402, x400, x329, x377); + fiat_np384_addcarryx_u32(&x403, &x404, x402, x331, x379); + fiat_np384_addcarryx_u32(&x405, &x406, x404, x333, x381); + fiat_np384_addcarryx_u32(&x407, &x408, x406, x335, x383); + fiat_np384_addcarryx_u32(&x409, &x410, x408, x337, x385); + fiat_np384_addcarryx_u32(&x411, &x412, x410, x339, x387); + fiat_np384_addcarryx_u32(&x413, &x414, x412, x341, x389); + fiat_np384_addcarryx_u32(&x415, &x416, x414, x343, x391); + fiat_np384_addcarryx_u32(&x417, &x418, x416, x345, x393); + fiat_np384_addcarryx_u32(&x419, &x420, x418, (((uint32_t)x346 + x276) + (x322 + x278)), (x394 + x350)); + fiat_np384_mulx_u32(&x421, &x422, x3, UINT32_C(0xc84ee01)); + fiat_np384_mulx_u32(&x423, &x424, x3, UINT32_C(0x2b39bf21)); + fiat_np384_mulx_u32(&x425, &x426, x3, UINT32_C(0x3fb05b7a)); + fiat_np384_mulx_u32(&x427, &x428, x3, UINT32_C(0x28266895)); + fiat_np384_mulx_u32(&x429, &x430, x3, UINT32_C(0xd40d4917)); + fiat_np384_mulx_u32(&x431, &x432, x3, UINT32_C(0x4aab1cc5)); + fiat_np384_mulx_u32(&x433, &x434, x3, UINT32_C(0xbc3e483a)); + fiat_np384_mulx_u32(&x435, &x436, x3, UINT32_C(0xfcb82947)); + fiat_np384_mulx_u32(&x437, &x438, x3, UINT32_C(0xff3d81e5)); + fiat_np384_mulx_u32(&x439, &x440, x3, UINT32_C(0xdf1aa419)); + fiat_np384_mulx_u32(&x441, &x442, x3, UINT32_C(0x2d319b24)); + fiat_np384_mulx_u32(&x443, &x444, x3, UINT32_C(0x19b409a9)); + fiat_np384_addcarryx_u32(&x445, &x446, 0x0, x444, x441); + fiat_np384_addcarryx_u32(&x447, &x448, x446, x442, x439); + fiat_np384_addcarryx_u32(&x449, &x450, x448, x440, x437); + fiat_np384_addcarryx_u32(&x451, &x452, x450, x438, x435); + fiat_np384_addcarryx_u32(&x453, &x454, x452, x436, x433); + fiat_np384_addcarryx_u32(&x455, &x456, x454, x434, x431); + fiat_np384_addcarryx_u32(&x457, &x458, x456, x432, x429); + fiat_np384_addcarryx_u32(&x459, &x460, x458, x430, x427); + fiat_np384_addcarryx_u32(&x461, &x462, x460, x428, x425); + fiat_np384_addcarryx_u32(&x463, &x464, x462, x426, x423); + fiat_np384_addcarryx_u32(&x465, &x466, x464, x424, x421); + fiat_np384_addcarryx_u32(&x467, &x468, 0x0, x397, x443); + fiat_np384_addcarryx_u32(&x469, &x470, x468, x399, x445); + fiat_np384_addcarryx_u32(&x471, &x472, x470, x401, x447); + fiat_np384_addcarryx_u32(&x473, &x474, x472, x403, x449); + fiat_np384_addcarryx_u32(&x475, &x476, x474, x405, x451); + fiat_np384_addcarryx_u32(&x477, &x478, x476, x407, x453); + fiat_np384_addcarryx_u32(&x479, &x480, x478, x409, x455); + fiat_np384_addcarryx_u32(&x481, &x482, x480, x411, x457); + fiat_np384_addcarryx_u32(&x483, &x484, x482, x413, x459); + fiat_np384_addcarryx_u32(&x485, &x486, x484, x415, x461); + fiat_np384_addcarryx_u32(&x487, &x488, x486, x417, x463); + fiat_np384_addcarryx_u32(&x489, &x490, x488, x419, x465); + fiat_np384_mulx_u32(&x491, &x492, x467, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x493, &x494, x491, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x495, &x496, x491, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x497, &x498, x491, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x499, &x500, x491, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x501, &x502, x491, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x503, &x504, x491, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x505, &x506, x491, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x507, &x508, x491, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x509, &x510, x491, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x511, &x512, x491, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x513, &x514, x491, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x515, &x516, x491, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x517, &x518, 0x0, x516, x513); + fiat_np384_addcarryx_u32(&x519, &x520, x518, x514, x511); + fiat_np384_addcarryx_u32(&x521, &x522, x520, x512, x509); + fiat_np384_addcarryx_u32(&x523, &x524, x522, x510, x507); + fiat_np384_addcarryx_u32(&x525, &x526, x524, x508, x505); + fiat_np384_addcarryx_u32(&x527, &x528, x526, x506, x503); + fiat_np384_addcarryx_u32(&x529, &x530, x528, x504, x501); + fiat_np384_addcarryx_u32(&x531, &x532, x530, x502, x499); + fiat_np384_addcarryx_u32(&x533, &x534, x532, x500, x497); + fiat_np384_addcarryx_u32(&x535, &x536, x534, x498, x495); + fiat_np384_addcarryx_u32(&x537, &x538, x536, x496, x493); + fiat_np384_addcarryx_u32(&x539, &x540, 0x0, x467, x515); + fiat_np384_addcarryx_u32(&x541, &x542, x540, x469, x517); + fiat_np384_addcarryx_u32(&x543, &x544, x542, x471, x519); + fiat_np384_addcarryx_u32(&x545, &x546, x544, x473, x521); + fiat_np384_addcarryx_u32(&x547, &x548, x546, x475, x523); + fiat_np384_addcarryx_u32(&x549, &x550, x548, x477, x525); + fiat_np384_addcarryx_u32(&x551, &x552, x550, x479, x527); + fiat_np384_addcarryx_u32(&x553, &x554, x552, x481, x529); + fiat_np384_addcarryx_u32(&x555, &x556, x554, x483, x531); + fiat_np384_addcarryx_u32(&x557, &x558, x556, x485, x533); + fiat_np384_addcarryx_u32(&x559, &x560, x558, x487, x535); + fiat_np384_addcarryx_u32(&x561, &x562, x560, x489, x537); + fiat_np384_addcarryx_u32(&x563, &x564, x562, (((uint32_t)x490 + x420) + (x466 + x422)), (x538 + x494)); + fiat_np384_mulx_u32(&x565, &x566, x4, UINT32_C(0xc84ee01)); + fiat_np384_mulx_u32(&x567, &x568, x4, UINT32_C(0x2b39bf21)); + fiat_np384_mulx_u32(&x569, &x570, x4, UINT32_C(0x3fb05b7a)); + fiat_np384_mulx_u32(&x571, &x572, x4, UINT32_C(0x28266895)); + fiat_np384_mulx_u32(&x573, &x574, x4, UINT32_C(0xd40d4917)); + fiat_np384_mulx_u32(&x575, &x576, x4, UINT32_C(0x4aab1cc5)); + fiat_np384_mulx_u32(&x577, &x578, x4, UINT32_C(0xbc3e483a)); + fiat_np384_mulx_u32(&x579, &x580, x4, UINT32_C(0xfcb82947)); + fiat_np384_mulx_u32(&x581, &x582, x4, UINT32_C(0xff3d81e5)); + fiat_np384_mulx_u32(&x583, &x584, x4, UINT32_C(0xdf1aa419)); + fiat_np384_mulx_u32(&x585, &x586, x4, UINT32_C(0x2d319b24)); + fiat_np384_mulx_u32(&x587, &x588, x4, UINT32_C(0x19b409a9)); + fiat_np384_addcarryx_u32(&x589, &x590, 0x0, x588, x585); + fiat_np384_addcarryx_u32(&x591, &x592, x590, x586, x583); + fiat_np384_addcarryx_u32(&x593, &x594, x592, x584, x581); + fiat_np384_addcarryx_u32(&x595, &x596, x594, x582, x579); + fiat_np384_addcarryx_u32(&x597, &x598, x596, x580, x577); + fiat_np384_addcarryx_u32(&x599, &x600, x598, x578, x575); + fiat_np384_addcarryx_u32(&x601, &x602, x600, x576, x573); + fiat_np384_addcarryx_u32(&x603, &x604, x602, x574, x571); + fiat_np384_addcarryx_u32(&x605, &x606, x604, x572, x569); + fiat_np384_addcarryx_u32(&x607, &x608, x606, x570, x567); + fiat_np384_addcarryx_u32(&x609, &x610, x608, x568, x565); + fiat_np384_addcarryx_u32(&x611, &x612, 0x0, x541, x587); + fiat_np384_addcarryx_u32(&x613, &x614, x612, x543, x589); + fiat_np384_addcarryx_u32(&x615, &x616, x614, x545, x591); + fiat_np384_addcarryx_u32(&x617, &x618, x616, x547, x593); + fiat_np384_addcarryx_u32(&x619, &x620, x618, x549, x595); + fiat_np384_addcarryx_u32(&x621, &x622, x620, x551, x597); + fiat_np384_addcarryx_u32(&x623, &x624, x622, x553, x599); + fiat_np384_addcarryx_u32(&x625, &x626, x624, x555, x601); + fiat_np384_addcarryx_u32(&x627, &x628, x626, x557, x603); + fiat_np384_addcarryx_u32(&x629, &x630, x628, x559, x605); + fiat_np384_addcarryx_u32(&x631, &x632, x630, x561, x607); + fiat_np384_addcarryx_u32(&x633, &x634, x632, x563, x609); + fiat_np384_mulx_u32(&x635, &x636, x611, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x637, &x638, x635, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x639, &x640, x635, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x641, &x642, x635, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x643, &x644, x635, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x645, &x646, x635, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x647, &x648, x635, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x649, &x650, x635, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x651, &x652, x635, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x653, &x654, x635, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x655, &x656, x635, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x657, &x658, x635, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x659, &x660, x635, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x661, &x662, 0x0, x660, x657); + fiat_np384_addcarryx_u32(&x663, &x664, x662, x658, x655); + fiat_np384_addcarryx_u32(&x665, &x666, x664, x656, x653); + fiat_np384_addcarryx_u32(&x667, &x668, x666, x654, x651); + fiat_np384_addcarryx_u32(&x669, &x670, x668, x652, x649); + fiat_np384_addcarryx_u32(&x671, &x672, x670, x650, x647); + fiat_np384_addcarryx_u32(&x673, &x674, x672, x648, x645); + fiat_np384_addcarryx_u32(&x675, &x676, x674, x646, x643); + fiat_np384_addcarryx_u32(&x677, &x678, x676, x644, x641); + fiat_np384_addcarryx_u32(&x679, &x680, x678, x642, x639); + fiat_np384_addcarryx_u32(&x681, &x682, x680, x640, x637); + fiat_np384_addcarryx_u32(&x683, &x684, 0x0, x611, x659); + fiat_np384_addcarryx_u32(&x685, &x686, x684, x613, x661); + fiat_np384_addcarryx_u32(&x687, &x688, x686, x615, x663); + fiat_np384_addcarryx_u32(&x689, &x690, x688, x617, x665); + fiat_np384_addcarryx_u32(&x691, &x692, x690, x619, x667); + fiat_np384_addcarryx_u32(&x693, &x694, x692, x621, x669); + fiat_np384_addcarryx_u32(&x695, &x696, x694, x623, x671); + fiat_np384_addcarryx_u32(&x697, &x698, x696, x625, x673); + fiat_np384_addcarryx_u32(&x699, &x700, x698, x627, x675); + fiat_np384_addcarryx_u32(&x701, &x702, x700, x629, x677); + fiat_np384_addcarryx_u32(&x703, &x704, x702, x631, x679); + fiat_np384_addcarryx_u32(&x705, &x706, x704, x633, x681); + fiat_np384_addcarryx_u32(&x707, &x708, x706, (((uint32_t)x634 + x564) + (x610 + x566)), (x682 + x638)); + fiat_np384_mulx_u32(&x709, &x710, x5, UINT32_C(0xc84ee01)); + fiat_np384_mulx_u32(&x711, &x712, x5, UINT32_C(0x2b39bf21)); + fiat_np384_mulx_u32(&x713, &x714, x5, UINT32_C(0x3fb05b7a)); + fiat_np384_mulx_u32(&x715, &x716, x5, UINT32_C(0x28266895)); + fiat_np384_mulx_u32(&x717, &x718, x5, UINT32_C(0xd40d4917)); + fiat_np384_mulx_u32(&x719, &x720, x5, UINT32_C(0x4aab1cc5)); + fiat_np384_mulx_u32(&x721, &x722, x5, UINT32_C(0xbc3e483a)); + fiat_np384_mulx_u32(&x723, &x724, x5, UINT32_C(0xfcb82947)); + fiat_np384_mulx_u32(&x725, &x726, x5, UINT32_C(0xff3d81e5)); + fiat_np384_mulx_u32(&x727, &x728, x5, UINT32_C(0xdf1aa419)); + fiat_np384_mulx_u32(&x729, &x730, x5, UINT32_C(0x2d319b24)); + fiat_np384_mulx_u32(&x731, &x732, x5, UINT32_C(0x19b409a9)); + fiat_np384_addcarryx_u32(&x733, &x734, 0x0, x732, x729); + fiat_np384_addcarryx_u32(&x735, &x736, x734, x730, x727); + fiat_np384_addcarryx_u32(&x737, &x738, x736, x728, x725); + fiat_np384_addcarryx_u32(&x739, &x740, x738, x726, x723); + fiat_np384_addcarryx_u32(&x741, &x742, x740, x724, x721); + fiat_np384_addcarryx_u32(&x743, &x744, x742, x722, x719); + fiat_np384_addcarryx_u32(&x745, &x746, x744, x720, x717); + fiat_np384_addcarryx_u32(&x747, &x748, x746, x718, x715); + fiat_np384_addcarryx_u32(&x749, &x750, x748, x716, x713); + fiat_np384_addcarryx_u32(&x751, &x752, x750, x714, x711); + fiat_np384_addcarryx_u32(&x753, &x754, x752, x712, x709); + fiat_np384_addcarryx_u32(&x755, &x756, 0x0, x685, x731); + fiat_np384_addcarryx_u32(&x757, &x758, x756, x687, x733); + fiat_np384_addcarryx_u32(&x759, &x760, x758, x689, x735); + fiat_np384_addcarryx_u32(&x761, &x762, x760, x691, x737); + fiat_np384_addcarryx_u32(&x763, &x764, x762, x693, x739); + fiat_np384_addcarryx_u32(&x765, &x766, x764, x695, x741); + fiat_np384_addcarryx_u32(&x767, &x768, x766, x697, x743); + fiat_np384_addcarryx_u32(&x769, &x770, x768, x699, x745); + fiat_np384_addcarryx_u32(&x771, &x772, x770, x701, x747); + fiat_np384_addcarryx_u32(&x773, &x774, x772, x703, x749); + fiat_np384_addcarryx_u32(&x775, &x776, x774, x705, x751); + fiat_np384_addcarryx_u32(&x777, &x778, x776, x707, x753); + fiat_np384_mulx_u32(&x779, &x780, x755, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x781, &x782, x779, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x783, &x784, x779, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x785, &x786, x779, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x787, &x788, x779, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x789, &x790, x779, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x791, &x792, x779, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x793, &x794, x779, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x795, &x796, x779, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x797, &x798, x779, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x799, &x800, x779, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x801, &x802, x779, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x803, &x804, x779, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x805, &x806, 0x0, x804, x801); + fiat_np384_addcarryx_u32(&x807, &x808, x806, x802, x799); + fiat_np384_addcarryx_u32(&x809, &x810, x808, x800, x797); + fiat_np384_addcarryx_u32(&x811, &x812, x810, x798, x795); + fiat_np384_addcarryx_u32(&x813, &x814, x812, x796, x793); + fiat_np384_addcarryx_u32(&x815, &x816, x814, x794, x791); + fiat_np384_addcarryx_u32(&x817, &x818, x816, x792, x789); + fiat_np384_addcarryx_u32(&x819, &x820, x818, x790, x787); + fiat_np384_addcarryx_u32(&x821, &x822, x820, x788, x785); + fiat_np384_addcarryx_u32(&x823, &x824, x822, x786, x783); + fiat_np384_addcarryx_u32(&x825, &x826, x824, x784, x781); + fiat_np384_addcarryx_u32(&x827, &x828, 0x0, x755, x803); + fiat_np384_addcarryx_u32(&x829, &x830, x828, x757, x805); + fiat_np384_addcarryx_u32(&x831, &x832, x830, x759, x807); + fiat_np384_addcarryx_u32(&x833, &x834, x832, x761, x809); + fiat_np384_addcarryx_u32(&x835, &x836, x834, x763, x811); + fiat_np384_addcarryx_u32(&x837, &x838, x836, x765, x813); + fiat_np384_addcarryx_u32(&x839, &x840, x838, x767, x815); + fiat_np384_addcarryx_u32(&x841, &x842, x840, x769, x817); + fiat_np384_addcarryx_u32(&x843, &x844, x842, x771, x819); + fiat_np384_addcarryx_u32(&x845, &x846, x844, x773, x821); + fiat_np384_addcarryx_u32(&x847, &x848, x846, x775, x823); + fiat_np384_addcarryx_u32(&x849, &x850, x848, x777, x825); + fiat_np384_addcarryx_u32(&x851, &x852, x850, (((uint32_t)x778 + x708) + (x754 + x710)), (x826 + x782)); + fiat_np384_mulx_u32(&x853, &x854, x6, UINT32_C(0xc84ee01)); + fiat_np384_mulx_u32(&x855, &x856, x6, UINT32_C(0x2b39bf21)); + fiat_np384_mulx_u32(&x857, &x858, x6, UINT32_C(0x3fb05b7a)); + fiat_np384_mulx_u32(&x859, &x860, x6, UINT32_C(0x28266895)); + fiat_np384_mulx_u32(&x861, &x862, x6, UINT32_C(0xd40d4917)); + fiat_np384_mulx_u32(&x863, &x864, x6, UINT32_C(0x4aab1cc5)); + fiat_np384_mulx_u32(&x865, &x866, x6, UINT32_C(0xbc3e483a)); + fiat_np384_mulx_u32(&x867, &x868, x6, UINT32_C(0xfcb82947)); + fiat_np384_mulx_u32(&x869, &x870, x6, UINT32_C(0xff3d81e5)); + fiat_np384_mulx_u32(&x871, &x872, x6, UINT32_C(0xdf1aa419)); + fiat_np384_mulx_u32(&x873, &x874, x6, UINT32_C(0x2d319b24)); + fiat_np384_mulx_u32(&x875, &x876, x6, UINT32_C(0x19b409a9)); + fiat_np384_addcarryx_u32(&x877, &x878, 0x0, x876, x873); + fiat_np384_addcarryx_u32(&x879, &x880, x878, x874, x871); + fiat_np384_addcarryx_u32(&x881, &x882, x880, x872, x869); + fiat_np384_addcarryx_u32(&x883, &x884, x882, x870, x867); + fiat_np384_addcarryx_u32(&x885, &x886, x884, x868, x865); + fiat_np384_addcarryx_u32(&x887, &x888, x886, x866, x863); + fiat_np384_addcarryx_u32(&x889, &x890, x888, x864, x861); + fiat_np384_addcarryx_u32(&x891, &x892, x890, x862, x859); + fiat_np384_addcarryx_u32(&x893, &x894, x892, x860, x857); + fiat_np384_addcarryx_u32(&x895, &x896, x894, x858, x855); + fiat_np384_addcarryx_u32(&x897, &x898, x896, x856, x853); + fiat_np384_addcarryx_u32(&x899, &x900, 0x0, x829, x875); + fiat_np384_addcarryx_u32(&x901, &x902, x900, x831, x877); + fiat_np384_addcarryx_u32(&x903, &x904, x902, x833, x879); + fiat_np384_addcarryx_u32(&x905, &x906, x904, x835, x881); + fiat_np384_addcarryx_u32(&x907, &x908, x906, x837, x883); + fiat_np384_addcarryx_u32(&x909, &x910, x908, x839, x885); + fiat_np384_addcarryx_u32(&x911, &x912, x910, x841, x887); + fiat_np384_addcarryx_u32(&x913, &x914, x912, x843, x889); + fiat_np384_addcarryx_u32(&x915, &x916, x914, x845, x891); + fiat_np384_addcarryx_u32(&x917, &x918, x916, x847, x893); + fiat_np384_addcarryx_u32(&x919, &x920, x918, x849, x895); + fiat_np384_addcarryx_u32(&x921, &x922, x920, x851, x897); + fiat_np384_mulx_u32(&x923, &x924, x899, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x925, &x926, x923, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x927, &x928, x923, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x929, &x930, x923, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x931, &x932, x923, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x933, &x934, x923, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x935, &x936, x923, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x937, &x938, x923, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x939, &x940, x923, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x941, &x942, x923, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x943, &x944, x923, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x945, &x946, x923, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x947, &x948, x923, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x949, &x950, 0x0, x948, x945); + fiat_np384_addcarryx_u32(&x951, &x952, x950, x946, x943); + fiat_np384_addcarryx_u32(&x953, &x954, x952, x944, x941); + fiat_np384_addcarryx_u32(&x955, &x956, x954, x942, x939); + fiat_np384_addcarryx_u32(&x957, &x958, x956, x940, x937); + fiat_np384_addcarryx_u32(&x959, &x960, x958, x938, x935); + fiat_np384_addcarryx_u32(&x961, &x962, x960, x936, x933); + fiat_np384_addcarryx_u32(&x963, &x964, x962, x934, x931); + fiat_np384_addcarryx_u32(&x965, &x966, x964, x932, x929); + fiat_np384_addcarryx_u32(&x967, &x968, x966, x930, x927); + fiat_np384_addcarryx_u32(&x969, &x970, x968, x928, x925); + fiat_np384_addcarryx_u32(&x971, &x972, 0x0, x899, x947); + fiat_np384_addcarryx_u32(&x973, &x974, x972, x901, x949); + fiat_np384_addcarryx_u32(&x975, &x976, x974, x903, x951); + fiat_np384_addcarryx_u32(&x977, &x978, x976, x905, x953); + fiat_np384_addcarryx_u32(&x979, &x980, x978, x907, x955); + fiat_np384_addcarryx_u32(&x981, &x982, x980, x909, x957); + fiat_np384_addcarryx_u32(&x983, &x984, x982, x911, x959); + fiat_np384_addcarryx_u32(&x985, &x986, x984, x913, x961); + fiat_np384_addcarryx_u32(&x987, &x988, x986, x915, x963); + fiat_np384_addcarryx_u32(&x989, &x990, x988, x917, x965); + fiat_np384_addcarryx_u32(&x991, &x992, x990, x919, x967); + fiat_np384_addcarryx_u32(&x993, &x994, x992, x921, x969); + fiat_np384_addcarryx_u32(&x995, &x996, x994, (((uint32_t)x922 + x852) + (x898 + x854)), (x970 + x926)); + fiat_np384_mulx_u32(&x997, &x998, x7, UINT32_C(0xc84ee01)); + fiat_np384_mulx_u32(&x999, &x1000, x7, UINT32_C(0x2b39bf21)); + fiat_np384_mulx_u32(&x1001, &x1002, x7, UINT32_C(0x3fb05b7a)); + fiat_np384_mulx_u32(&x1003, &x1004, x7, UINT32_C(0x28266895)); + fiat_np384_mulx_u32(&x1005, &x1006, x7, UINT32_C(0xd40d4917)); + fiat_np384_mulx_u32(&x1007, &x1008, x7, UINT32_C(0x4aab1cc5)); + fiat_np384_mulx_u32(&x1009, &x1010, x7, UINT32_C(0xbc3e483a)); + fiat_np384_mulx_u32(&x1011, &x1012, x7, UINT32_C(0xfcb82947)); + fiat_np384_mulx_u32(&x1013, &x1014, x7, UINT32_C(0xff3d81e5)); + fiat_np384_mulx_u32(&x1015, &x1016, x7, UINT32_C(0xdf1aa419)); + fiat_np384_mulx_u32(&x1017, &x1018, x7, UINT32_C(0x2d319b24)); + fiat_np384_mulx_u32(&x1019, &x1020, x7, UINT32_C(0x19b409a9)); + fiat_np384_addcarryx_u32(&x1021, &x1022, 0x0, x1020, x1017); + fiat_np384_addcarryx_u32(&x1023, &x1024, x1022, x1018, x1015); + fiat_np384_addcarryx_u32(&x1025, &x1026, x1024, x1016, x1013); + fiat_np384_addcarryx_u32(&x1027, &x1028, x1026, x1014, x1011); + fiat_np384_addcarryx_u32(&x1029, &x1030, x1028, x1012, x1009); + fiat_np384_addcarryx_u32(&x1031, &x1032, x1030, x1010, x1007); + fiat_np384_addcarryx_u32(&x1033, &x1034, x1032, x1008, x1005); + fiat_np384_addcarryx_u32(&x1035, &x1036, x1034, x1006, x1003); + fiat_np384_addcarryx_u32(&x1037, &x1038, x1036, x1004, x1001); + fiat_np384_addcarryx_u32(&x1039, &x1040, x1038, x1002, x999); + fiat_np384_addcarryx_u32(&x1041, &x1042, x1040, x1000, x997); + fiat_np384_addcarryx_u32(&x1043, &x1044, 0x0, x973, x1019); + fiat_np384_addcarryx_u32(&x1045, &x1046, x1044, x975, x1021); + fiat_np384_addcarryx_u32(&x1047, &x1048, x1046, x977, x1023); + fiat_np384_addcarryx_u32(&x1049, &x1050, x1048, x979, x1025); + fiat_np384_addcarryx_u32(&x1051, &x1052, x1050, x981, x1027); + fiat_np384_addcarryx_u32(&x1053, &x1054, x1052, x983, x1029); + fiat_np384_addcarryx_u32(&x1055, &x1056, x1054, x985, x1031); + fiat_np384_addcarryx_u32(&x1057, &x1058, x1056, x987, x1033); + fiat_np384_addcarryx_u32(&x1059, &x1060, x1058, x989, x1035); + fiat_np384_addcarryx_u32(&x1061, &x1062, x1060, x991, x1037); + fiat_np384_addcarryx_u32(&x1063, &x1064, x1062, x993, x1039); + fiat_np384_addcarryx_u32(&x1065, &x1066, x1064, x995, x1041); + fiat_np384_mulx_u32(&x1067, &x1068, x1043, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x1069, &x1070, x1067, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1071, &x1072, x1067, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1073, &x1074, x1067, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1075, &x1076, x1067, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1077, &x1078, x1067, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1079, &x1080, x1067, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1081, &x1082, x1067, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x1083, &x1084, x1067, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x1085, &x1086, x1067, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x1087, &x1088, x1067, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x1089, &x1090, x1067, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x1091, &x1092, x1067, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x1093, &x1094, 0x0, x1092, x1089); + fiat_np384_addcarryx_u32(&x1095, &x1096, x1094, x1090, x1087); + fiat_np384_addcarryx_u32(&x1097, &x1098, x1096, x1088, x1085); + fiat_np384_addcarryx_u32(&x1099, &x1100, x1098, x1086, x1083); + fiat_np384_addcarryx_u32(&x1101, &x1102, x1100, x1084, x1081); + fiat_np384_addcarryx_u32(&x1103, &x1104, x1102, x1082, x1079); + fiat_np384_addcarryx_u32(&x1105, &x1106, x1104, x1080, x1077); + fiat_np384_addcarryx_u32(&x1107, &x1108, x1106, x1078, x1075); + fiat_np384_addcarryx_u32(&x1109, &x1110, x1108, x1076, x1073); + fiat_np384_addcarryx_u32(&x1111, &x1112, x1110, x1074, x1071); + fiat_np384_addcarryx_u32(&x1113, &x1114, x1112, x1072, x1069); + fiat_np384_addcarryx_u32(&x1115, &x1116, 0x0, x1043, x1091); + fiat_np384_addcarryx_u32(&x1117, &x1118, x1116, x1045, x1093); + fiat_np384_addcarryx_u32(&x1119, &x1120, x1118, x1047, x1095); + fiat_np384_addcarryx_u32(&x1121, &x1122, x1120, x1049, x1097); + fiat_np384_addcarryx_u32(&x1123, &x1124, x1122, x1051, x1099); + fiat_np384_addcarryx_u32(&x1125, &x1126, x1124, x1053, x1101); + fiat_np384_addcarryx_u32(&x1127, &x1128, x1126, x1055, x1103); + fiat_np384_addcarryx_u32(&x1129, &x1130, x1128, x1057, x1105); + fiat_np384_addcarryx_u32(&x1131, &x1132, x1130, x1059, x1107); + fiat_np384_addcarryx_u32(&x1133, &x1134, x1132, x1061, x1109); + fiat_np384_addcarryx_u32(&x1135, &x1136, x1134, x1063, x1111); + fiat_np384_addcarryx_u32(&x1137, &x1138, x1136, x1065, x1113); + fiat_np384_addcarryx_u32(&x1139, &x1140, x1138, (((uint32_t)x1066 + x996) + (x1042 + x998)), (x1114 + x1070)); + fiat_np384_mulx_u32(&x1141, &x1142, x8, UINT32_C(0xc84ee01)); + fiat_np384_mulx_u32(&x1143, &x1144, x8, UINT32_C(0x2b39bf21)); + fiat_np384_mulx_u32(&x1145, &x1146, x8, UINT32_C(0x3fb05b7a)); + fiat_np384_mulx_u32(&x1147, &x1148, x8, UINT32_C(0x28266895)); + fiat_np384_mulx_u32(&x1149, &x1150, x8, UINT32_C(0xd40d4917)); + fiat_np384_mulx_u32(&x1151, &x1152, x8, UINT32_C(0x4aab1cc5)); + fiat_np384_mulx_u32(&x1153, &x1154, x8, UINT32_C(0xbc3e483a)); + fiat_np384_mulx_u32(&x1155, &x1156, x8, UINT32_C(0xfcb82947)); + fiat_np384_mulx_u32(&x1157, &x1158, x8, UINT32_C(0xff3d81e5)); + fiat_np384_mulx_u32(&x1159, &x1160, x8, UINT32_C(0xdf1aa419)); + fiat_np384_mulx_u32(&x1161, &x1162, x8, UINT32_C(0x2d319b24)); + fiat_np384_mulx_u32(&x1163, &x1164, x8, UINT32_C(0x19b409a9)); + fiat_np384_addcarryx_u32(&x1165, &x1166, 0x0, x1164, x1161); + fiat_np384_addcarryx_u32(&x1167, &x1168, x1166, x1162, x1159); + fiat_np384_addcarryx_u32(&x1169, &x1170, x1168, x1160, x1157); + fiat_np384_addcarryx_u32(&x1171, &x1172, x1170, x1158, x1155); + fiat_np384_addcarryx_u32(&x1173, &x1174, x1172, x1156, x1153); + fiat_np384_addcarryx_u32(&x1175, &x1176, x1174, x1154, x1151); + fiat_np384_addcarryx_u32(&x1177, &x1178, x1176, x1152, x1149); + fiat_np384_addcarryx_u32(&x1179, &x1180, x1178, x1150, x1147); + fiat_np384_addcarryx_u32(&x1181, &x1182, x1180, x1148, x1145); + fiat_np384_addcarryx_u32(&x1183, &x1184, x1182, x1146, x1143); + fiat_np384_addcarryx_u32(&x1185, &x1186, x1184, x1144, x1141); + fiat_np384_addcarryx_u32(&x1187, &x1188, 0x0, x1117, x1163); + fiat_np384_addcarryx_u32(&x1189, &x1190, x1188, x1119, x1165); + fiat_np384_addcarryx_u32(&x1191, &x1192, x1190, x1121, x1167); + fiat_np384_addcarryx_u32(&x1193, &x1194, x1192, x1123, x1169); + fiat_np384_addcarryx_u32(&x1195, &x1196, x1194, x1125, x1171); + fiat_np384_addcarryx_u32(&x1197, &x1198, x1196, x1127, x1173); + fiat_np384_addcarryx_u32(&x1199, &x1200, x1198, x1129, x1175); + fiat_np384_addcarryx_u32(&x1201, &x1202, x1200, x1131, x1177); + fiat_np384_addcarryx_u32(&x1203, &x1204, x1202, x1133, x1179); + fiat_np384_addcarryx_u32(&x1205, &x1206, x1204, x1135, x1181); + fiat_np384_addcarryx_u32(&x1207, &x1208, x1206, x1137, x1183); + fiat_np384_addcarryx_u32(&x1209, &x1210, x1208, x1139, x1185); + fiat_np384_mulx_u32(&x1211, &x1212, x1187, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x1213, &x1214, x1211, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1215, &x1216, x1211, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1217, &x1218, x1211, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1219, &x1220, x1211, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1221, &x1222, x1211, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1223, &x1224, x1211, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1225, &x1226, x1211, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x1227, &x1228, x1211, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x1229, &x1230, x1211, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x1231, &x1232, x1211, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x1233, &x1234, x1211, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x1235, &x1236, x1211, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x1237, &x1238, 0x0, x1236, x1233); + fiat_np384_addcarryx_u32(&x1239, &x1240, x1238, x1234, x1231); + fiat_np384_addcarryx_u32(&x1241, &x1242, x1240, x1232, x1229); + fiat_np384_addcarryx_u32(&x1243, &x1244, x1242, x1230, x1227); + fiat_np384_addcarryx_u32(&x1245, &x1246, x1244, x1228, x1225); + fiat_np384_addcarryx_u32(&x1247, &x1248, x1246, x1226, x1223); + fiat_np384_addcarryx_u32(&x1249, &x1250, x1248, x1224, x1221); + fiat_np384_addcarryx_u32(&x1251, &x1252, x1250, x1222, x1219); + fiat_np384_addcarryx_u32(&x1253, &x1254, x1252, x1220, x1217); + fiat_np384_addcarryx_u32(&x1255, &x1256, x1254, x1218, x1215); + fiat_np384_addcarryx_u32(&x1257, &x1258, x1256, x1216, x1213); + fiat_np384_addcarryx_u32(&x1259, &x1260, 0x0, x1187, x1235); + fiat_np384_addcarryx_u32(&x1261, &x1262, x1260, x1189, x1237); + fiat_np384_addcarryx_u32(&x1263, &x1264, x1262, x1191, x1239); + fiat_np384_addcarryx_u32(&x1265, &x1266, x1264, x1193, x1241); + fiat_np384_addcarryx_u32(&x1267, &x1268, x1266, x1195, x1243); + fiat_np384_addcarryx_u32(&x1269, &x1270, x1268, x1197, x1245); + fiat_np384_addcarryx_u32(&x1271, &x1272, x1270, x1199, x1247); + fiat_np384_addcarryx_u32(&x1273, &x1274, x1272, x1201, x1249); + fiat_np384_addcarryx_u32(&x1275, &x1276, x1274, x1203, x1251); + fiat_np384_addcarryx_u32(&x1277, &x1278, x1276, x1205, x1253); + fiat_np384_addcarryx_u32(&x1279, &x1280, x1278, x1207, x1255); + fiat_np384_addcarryx_u32(&x1281, &x1282, x1280, x1209, x1257); + fiat_np384_addcarryx_u32(&x1283, &x1284, x1282, (((uint32_t)x1210 + x1140) + (x1186 + x1142)), (x1258 + x1214)); + fiat_np384_mulx_u32(&x1285, &x1286, x9, UINT32_C(0xc84ee01)); + fiat_np384_mulx_u32(&x1287, &x1288, x9, UINT32_C(0x2b39bf21)); + fiat_np384_mulx_u32(&x1289, &x1290, x9, UINT32_C(0x3fb05b7a)); + fiat_np384_mulx_u32(&x1291, &x1292, x9, UINT32_C(0x28266895)); + fiat_np384_mulx_u32(&x1293, &x1294, x9, UINT32_C(0xd40d4917)); + fiat_np384_mulx_u32(&x1295, &x1296, x9, UINT32_C(0x4aab1cc5)); + fiat_np384_mulx_u32(&x1297, &x1298, x9, UINT32_C(0xbc3e483a)); + fiat_np384_mulx_u32(&x1299, &x1300, x9, UINT32_C(0xfcb82947)); + fiat_np384_mulx_u32(&x1301, &x1302, x9, UINT32_C(0xff3d81e5)); + fiat_np384_mulx_u32(&x1303, &x1304, x9, UINT32_C(0xdf1aa419)); + fiat_np384_mulx_u32(&x1305, &x1306, x9, UINT32_C(0x2d319b24)); + fiat_np384_mulx_u32(&x1307, &x1308, x9, UINT32_C(0x19b409a9)); + fiat_np384_addcarryx_u32(&x1309, &x1310, 0x0, x1308, x1305); + fiat_np384_addcarryx_u32(&x1311, &x1312, x1310, x1306, x1303); + fiat_np384_addcarryx_u32(&x1313, &x1314, x1312, x1304, x1301); + fiat_np384_addcarryx_u32(&x1315, &x1316, x1314, x1302, x1299); + fiat_np384_addcarryx_u32(&x1317, &x1318, x1316, x1300, x1297); + fiat_np384_addcarryx_u32(&x1319, &x1320, x1318, x1298, x1295); + fiat_np384_addcarryx_u32(&x1321, &x1322, x1320, x1296, x1293); + fiat_np384_addcarryx_u32(&x1323, &x1324, x1322, x1294, x1291); + fiat_np384_addcarryx_u32(&x1325, &x1326, x1324, x1292, x1289); + fiat_np384_addcarryx_u32(&x1327, &x1328, x1326, x1290, x1287); + fiat_np384_addcarryx_u32(&x1329, &x1330, x1328, x1288, x1285); + fiat_np384_addcarryx_u32(&x1331, &x1332, 0x0, x1261, x1307); + fiat_np384_addcarryx_u32(&x1333, &x1334, x1332, x1263, x1309); + fiat_np384_addcarryx_u32(&x1335, &x1336, x1334, x1265, x1311); + fiat_np384_addcarryx_u32(&x1337, &x1338, x1336, x1267, x1313); + fiat_np384_addcarryx_u32(&x1339, &x1340, x1338, x1269, x1315); + fiat_np384_addcarryx_u32(&x1341, &x1342, x1340, x1271, x1317); + fiat_np384_addcarryx_u32(&x1343, &x1344, x1342, x1273, x1319); + fiat_np384_addcarryx_u32(&x1345, &x1346, x1344, x1275, x1321); + fiat_np384_addcarryx_u32(&x1347, &x1348, x1346, x1277, x1323); + fiat_np384_addcarryx_u32(&x1349, &x1350, x1348, x1279, x1325); + fiat_np384_addcarryx_u32(&x1351, &x1352, x1350, x1281, x1327); + fiat_np384_addcarryx_u32(&x1353, &x1354, x1352, x1283, x1329); + fiat_np384_mulx_u32(&x1355, &x1356, x1331, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x1357, &x1358, x1355, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1359, &x1360, x1355, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1361, &x1362, x1355, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1363, &x1364, x1355, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1365, &x1366, x1355, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1367, &x1368, x1355, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1369, &x1370, x1355, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x1371, &x1372, x1355, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x1373, &x1374, x1355, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x1375, &x1376, x1355, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x1377, &x1378, x1355, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x1379, &x1380, x1355, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x1381, &x1382, 0x0, x1380, x1377); + fiat_np384_addcarryx_u32(&x1383, &x1384, x1382, x1378, x1375); + fiat_np384_addcarryx_u32(&x1385, &x1386, x1384, x1376, x1373); + fiat_np384_addcarryx_u32(&x1387, &x1388, x1386, x1374, x1371); + fiat_np384_addcarryx_u32(&x1389, &x1390, x1388, x1372, x1369); + fiat_np384_addcarryx_u32(&x1391, &x1392, x1390, x1370, x1367); + fiat_np384_addcarryx_u32(&x1393, &x1394, x1392, x1368, x1365); + fiat_np384_addcarryx_u32(&x1395, &x1396, x1394, x1366, x1363); + fiat_np384_addcarryx_u32(&x1397, &x1398, x1396, x1364, x1361); + fiat_np384_addcarryx_u32(&x1399, &x1400, x1398, x1362, x1359); + fiat_np384_addcarryx_u32(&x1401, &x1402, x1400, x1360, x1357); + fiat_np384_addcarryx_u32(&x1403, &x1404, 0x0, x1331, x1379); + fiat_np384_addcarryx_u32(&x1405, &x1406, x1404, x1333, x1381); + fiat_np384_addcarryx_u32(&x1407, &x1408, x1406, x1335, x1383); + fiat_np384_addcarryx_u32(&x1409, &x1410, x1408, x1337, x1385); + fiat_np384_addcarryx_u32(&x1411, &x1412, x1410, x1339, x1387); + fiat_np384_addcarryx_u32(&x1413, &x1414, x1412, x1341, x1389); + fiat_np384_addcarryx_u32(&x1415, &x1416, x1414, x1343, x1391); + fiat_np384_addcarryx_u32(&x1417, &x1418, x1416, x1345, x1393); + fiat_np384_addcarryx_u32(&x1419, &x1420, x1418, x1347, x1395); + fiat_np384_addcarryx_u32(&x1421, &x1422, x1420, x1349, x1397); + fiat_np384_addcarryx_u32(&x1423, &x1424, x1422, x1351, x1399); + fiat_np384_addcarryx_u32(&x1425, &x1426, x1424, x1353, x1401); + fiat_np384_addcarryx_u32(&x1427, &x1428, x1426, (((uint32_t)x1354 + x1284) + (x1330 + x1286)), (x1402 + x1358)); + fiat_np384_mulx_u32(&x1429, &x1430, x10, UINT32_C(0xc84ee01)); + fiat_np384_mulx_u32(&x1431, &x1432, x10, UINT32_C(0x2b39bf21)); + fiat_np384_mulx_u32(&x1433, &x1434, x10, UINT32_C(0x3fb05b7a)); + fiat_np384_mulx_u32(&x1435, &x1436, x10, UINT32_C(0x28266895)); + fiat_np384_mulx_u32(&x1437, &x1438, x10, UINT32_C(0xd40d4917)); + fiat_np384_mulx_u32(&x1439, &x1440, x10, UINT32_C(0x4aab1cc5)); + fiat_np384_mulx_u32(&x1441, &x1442, x10, UINT32_C(0xbc3e483a)); + fiat_np384_mulx_u32(&x1443, &x1444, x10, UINT32_C(0xfcb82947)); + fiat_np384_mulx_u32(&x1445, &x1446, x10, UINT32_C(0xff3d81e5)); + fiat_np384_mulx_u32(&x1447, &x1448, x10, UINT32_C(0xdf1aa419)); + fiat_np384_mulx_u32(&x1449, &x1450, x10, UINT32_C(0x2d319b24)); + fiat_np384_mulx_u32(&x1451, &x1452, x10, UINT32_C(0x19b409a9)); + fiat_np384_addcarryx_u32(&x1453, &x1454, 0x0, x1452, x1449); + fiat_np384_addcarryx_u32(&x1455, &x1456, x1454, x1450, x1447); + fiat_np384_addcarryx_u32(&x1457, &x1458, x1456, x1448, x1445); + fiat_np384_addcarryx_u32(&x1459, &x1460, x1458, x1446, x1443); + fiat_np384_addcarryx_u32(&x1461, &x1462, x1460, x1444, x1441); + fiat_np384_addcarryx_u32(&x1463, &x1464, x1462, x1442, x1439); + fiat_np384_addcarryx_u32(&x1465, &x1466, x1464, x1440, x1437); + fiat_np384_addcarryx_u32(&x1467, &x1468, x1466, x1438, x1435); + fiat_np384_addcarryx_u32(&x1469, &x1470, x1468, x1436, x1433); + fiat_np384_addcarryx_u32(&x1471, &x1472, x1470, x1434, x1431); + fiat_np384_addcarryx_u32(&x1473, &x1474, x1472, x1432, x1429); + fiat_np384_addcarryx_u32(&x1475, &x1476, 0x0, x1405, x1451); + fiat_np384_addcarryx_u32(&x1477, &x1478, x1476, x1407, x1453); + fiat_np384_addcarryx_u32(&x1479, &x1480, x1478, x1409, x1455); + fiat_np384_addcarryx_u32(&x1481, &x1482, x1480, x1411, x1457); + fiat_np384_addcarryx_u32(&x1483, &x1484, x1482, x1413, x1459); + fiat_np384_addcarryx_u32(&x1485, &x1486, x1484, x1415, x1461); + fiat_np384_addcarryx_u32(&x1487, &x1488, x1486, x1417, x1463); + fiat_np384_addcarryx_u32(&x1489, &x1490, x1488, x1419, x1465); + fiat_np384_addcarryx_u32(&x1491, &x1492, x1490, x1421, x1467); + fiat_np384_addcarryx_u32(&x1493, &x1494, x1492, x1423, x1469); + fiat_np384_addcarryx_u32(&x1495, &x1496, x1494, x1425, x1471); + fiat_np384_addcarryx_u32(&x1497, &x1498, x1496, x1427, x1473); + fiat_np384_mulx_u32(&x1499, &x1500, x1475, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x1501, &x1502, x1499, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1503, &x1504, x1499, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1505, &x1506, x1499, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1507, &x1508, x1499, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1509, &x1510, x1499, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1511, &x1512, x1499, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1513, &x1514, x1499, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x1515, &x1516, x1499, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x1517, &x1518, x1499, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x1519, &x1520, x1499, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x1521, &x1522, x1499, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x1523, &x1524, x1499, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x1525, &x1526, 0x0, x1524, x1521); + fiat_np384_addcarryx_u32(&x1527, &x1528, x1526, x1522, x1519); + fiat_np384_addcarryx_u32(&x1529, &x1530, x1528, x1520, x1517); + fiat_np384_addcarryx_u32(&x1531, &x1532, x1530, x1518, x1515); + fiat_np384_addcarryx_u32(&x1533, &x1534, x1532, x1516, x1513); + fiat_np384_addcarryx_u32(&x1535, &x1536, x1534, x1514, x1511); + fiat_np384_addcarryx_u32(&x1537, &x1538, x1536, x1512, x1509); + fiat_np384_addcarryx_u32(&x1539, &x1540, x1538, x1510, x1507); + fiat_np384_addcarryx_u32(&x1541, &x1542, x1540, x1508, x1505); + fiat_np384_addcarryx_u32(&x1543, &x1544, x1542, x1506, x1503); + fiat_np384_addcarryx_u32(&x1545, &x1546, x1544, x1504, x1501); + fiat_np384_addcarryx_u32(&x1547, &x1548, 0x0, x1475, x1523); + fiat_np384_addcarryx_u32(&x1549, &x1550, x1548, x1477, x1525); + fiat_np384_addcarryx_u32(&x1551, &x1552, x1550, x1479, x1527); + fiat_np384_addcarryx_u32(&x1553, &x1554, x1552, x1481, x1529); + fiat_np384_addcarryx_u32(&x1555, &x1556, x1554, x1483, x1531); + fiat_np384_addcarryx_u32(&x1557, &x1558, x1556, x1485, x1533); + fiat_np384_addcarryx_u32(&x1559, &x1560, x1558, x1487, x1535); + fiat_np384_addcarryx_u32(&x1561, &x1562, x1560, x1489, x1537); + fiat_np384_addcarryx_u32(&x1563, &x1564, x1562, x1491, x1539); + fiat_np384_addcarryx_u32(&x1565, &x1566, x1564, x1493, x1541); + fiat_np384_addcarryx_u32(&x1567, &x1568, x1566, x1495, x1543); + fiat_np384_addcarryx_u32(&x1569, &x1570, x1568, x1497, x1545); + fiat_np384_addcarryx_u32(&x1571, &x1572, x1570, (((uint32_t)x1498 + x1428) + (x1474 + x1430)), (x1546 + x1502)); + fiat_np384_mulx_u32(&x1573, &x1574, x11, UINT32_C(0xc84ee01)); + fiat_np384_mulx_u32(&x1575, &x1576, x11, UINT32_C(0x2b39bf21)); + fiat_np384_mulx_u32(&x1577, &x1578, x11, UINT32_C(0x3fb05b7a)); + fiat_np384_mulx_u32(&x1579, &x1580, x11, UINT32_C(0x28266895)); + fiat_np384_mulx_u32(&x1581, &x1582, x11, UINT32_C(0xd40d4917)); + fiat_np384_mulx_u32(&x1583, &x1584, x11, UINT32_C(0x4aab1cc5)); + fiat_np384_mulx_u32(&x1585, &x1586, x11, UINT32_C(0xbc3e483a)); + fiat_np384_mulx_u32(&x1587, &x1588, x11, UINT32_C(0xfcb82947)); + fiat_np384_mulx_u32(&x1589, &x1590, x11, UINT32_C(0xff3d81e5)); + fiat_np384_mulx_u32(&x1591, &x1592, x11, UINT32_C(0xdf1aa419)); + fiat_np384_mulx_u32(&x1593, &x1594, x11, UINT32_C(0x2d319b24)); + fiat_np384_mulx_u32(&x1595, &x1596, x11, UINT32_C(0x19b409a9)); + fiat_np384_addcarryx_u32(&x1597, &x1598, 0x0, x1596, x1593); + fiat_np384_addcarryx_u32(&x1599, &x1600, x1598, x1594, x1591); + fiat_np384_addcarryx_u32(&x1601, &x1602, x1600, x1592, x1589); + fiat_np384_addcarryx_u32(&x1603, &x1604, x1602, x1590, x1587); + fiat_np384_addcarryx_u32(&x1605, &x1606, x1604, x1588, x1585); + fiat_np384_addcarryx_u32(&x1607, &x1608, x1606, x1586, x1583); + fiat_np384_addcarryx_u32(&x1609, &x1610, x1608, x1584, x1581); + fiat_np384_addcarryx_u32(&x1611, &x1612, x1610, x1582, x1579); + fiat_np384_addcarryx_u32(&x1613, &x1614, x1612, x1580, x1577); + fiat_np384_addcarryx_u32(&x1615, &x1616, x1614, x1578, x1575); + fiat_np384_addcarryx_u32(&x1617, &x1618, x1616, x1576, x1573); + fiat_np384_addcarryx_u32(&x1619, &x1620, 0x0, x1549, x1595); + fiat_np384_addcarryx_u32(&x1621, &x1622, x1620, x1551, x1597); + fiat_np384_addcarryx_u32(&x1623, &x1624, x1622, x1553, x1599); + fiat_np384_addcarryx_u32(&x1625, &x1626, x1624, x1555, x1601); + fiat_np384_addcarryx_u32(&x1627, &x1628, x1626, x1557, x1603); + fiat_np384_addcarryx_u32(&x1629, &x1630, x1628, x1559, x1605); + fiat_np384_addcarryx_u32(&x1631, &x1632, x1630, x1561, x1607); + fiat_np384_addcarryx_u32(&x1633, &x1634, x1632, x1563, x1609); + fiat_np384_addcarryx_u32(&x1635, &x1636, x1634, x1565, x1611); + fiat_np384_addcarryx_u32(&x1637, &x1638, x1636, x1567, x1613); + fiat_np384_addcarryx_u32(&x1639, &x1640, x1638, x1569, x1615); + fiat_np384_addcarryx_u32(&x1641, &x1642, x1640, x1571, x1617); + fiat_np384_mulx_u32(&x1643, &x1644, x1619, UINT32_C(0xe88fdc45)); + fiat_np384_mulx_u32(&x1645, &x1646, x1643, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1647, &x1648, x1643, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1649, &x1650, x1643, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1651, &x1652, x1643, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1653, &x1654, x1643, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1655, &x1656, x1643, UINT32_C(0xffffffff)); + fiat_np384_mulx_u32(&x1657, &x1658, x1643, UINT32_C(0xc7634d81)); + fiat_np384_mulx_u32(&x1659, &x1660, x1643, UINT32_C(0xf4372ddf)); + fiat_np384_mulx_u32(&x1661, &x1662, x1643, UINT32_C(0x581a0db2)); + fiat_np384_mulx_u32(&x1663, &x1664, x1643, UINT32_C(0x48b0a77a)); + fiat_np384_mulx_u32(&x1665, &x1666, x1643, UINT32_C(0xecec196a)); + fiat_np384_mulx_u32(&x1667, &x1668, x1643, UINT32_C(0xccc52973)); + fiat_np384_addcarryx_u32(&x1669, &x1670, 0x0, x1668, x1665); + fiat_np384_addcarryx_u32(&x1671, &x1672, x1670, x1666, x1663); + fiat_np384_addcarryx_u32(&x1673, &x1674, x1672, x1664, x1661); + fiat_np384_addcarryx_u32(&x1675, &x1676, x1674, x1662, x1659); + fiat_np384_addcarryx_u32(&x1677, &x1678, x1676, x1660, x1657); + fiat_np384_addcarryx_u32(&x1679, &x1680, x1678, x1658, x1655); + fiat_np384_addcarryx_u32(&x1681, &x1682, x1680, x1656, x1653); + fiat_np384_addcarryx_u32(&x1683, &x1684, x1682, x1654, x1651); + fiat_np384_addcarryx_u32(&x1685, &x1686, x1684, x1652, x1649); + fiat_np384_addcarryx_u32(&x1687, &x1688, x1686, x1650, x1647); + fiat_np384_addcarryx_u32(&x1689, &x1690, x1688, x1648, x1645); + fiat_np384_addcarryx_u32(&x1691, &x1692, 0x0, x1619, x1667); + fiat_np384_addcarryx_u32(&x1693, &x1694, x1692, x1621, x1669); + fiat_np384_addcarryx_u32(&x1695, &x1696, x1694, x1623, x1671); + fiat_np384_addcarryx_u32(&x1697, &x1698, x1696, x1625, x1673); + fiat_np384_addcarryx_u32(&x1699, &x1700, x1698, x1627, x1675); + fiat_np384_addcarryx_u32(&x1701, &x1702, x1700, x1629, x1677); + fiat_np384_addcarryx_u32(&x1703, &x1704, x1702, x1631, x1679); + fiat_np384_addcarryx_u32(&x1705, &x1706, x1704, x1633, x1681); + fiat_np384_addcarryx_u32(&x1707, &x1708, x1706, x1635, x1683); + fiat_np384_addcarryx_u32(&x1709, &x1710, x1708, x1637, x1685); + fiat_np384_addcarryx_u32(&x1711, &x1712, x1710, x1639, x1687); + fiat_np384_addcarryx_u32(&x1713, &x1714, x1712, x1641, x1689); + fiat_np384_addcarryx_u32(&x1715, &x1716, x1714, (((uint32_t)x1642 + x1572) + (x1618 + x1574)), (x1690 + x1646)); + fiat_np384_subborrowx_u32(&x1717, &x1718, 0x0, x1693, UINT32_C(0xccc52973)); + fiat_np384_subborrowx_u32(&x1719, &x1720, x1718, x1695, UINT32_C(0xecec196a)); + fiat_np384_subborrowx_u32(&x1721, &x1722, x1720, x1697, UINT32_C(0x48b0a77a)); + fiat_np384_subborrowx_u32(&x1723, &x1724, x1722, x1699, UINT32_C(0x581a0db2)); + fiat_np384_subborrowx_u32(&x1725, &x1726, x1724, x1701, UINT32_C(0xf4372ddf)); + fiat_np384_subborrowx_u32(&x1727, &x1728, x1726, x1703, UINT32_C(0xc7634d81)); + fiat_np384_subborrowx_u32(&x1729, &x1730, x1728, x1705, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1731, &x1732, x1730, x1707, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1733, &x1734, x1732, x1709, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1735, &x1736, x1734, x1711, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1737, &x1738, x1736, x1713, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1739, &x1740, x1738, x1715, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x1741, &x1742, x1740, x1716, 0x0); + fiat_np384_cmovznz_u32(&x1743, x1742, x1717, x1693); + fiat_np384_cmovznz_u32(&x1744, x1742, x1719, x1695); + fiat_np384_cmovznz_u32(&x1745, x1742, x1721, x1697); + fiat_np384_cmovznz_u32(&x1746, x1742, x1723, x1699); + fiat_np384_cmovznz_u32(&x1747, x1742, x1725, x1701); + fiat_np384_cmovznz_u32(&x1748, x1742, x1727, x1703); + fiat_np384_cmovznz_u32(&x1749, x1742, x1729, x1705); + fiat_np384_cmovznz_u32(&x1750, x1742, x1731, x1707); + fiat_np384_cmovznz_u32(&x1751, x1742, x1733, x1709); + fiat_np384_cmovznz_u32(&x1752, x1742, x1735, x1711); + fiat_np384_cmovznz_u32(&x1753, x1742, x1737, x1713); + fiat_np384_cmovznz_u32(&x1754, x1742, x1739, x1715); + out1[0] = x1743; + out1[1] = x1744; + out1[2] = x1745; + out1[3] = x1746; + out1[4] = x1747; + out1[5] = x1748; + out1[6] = x1749; + out1[7] = x1750; + out1[8] = x1751; + out1[9] = x1752; + out1[10] = x1753; + out1[11] = x1754; +} + +/* + * The function fiat_np384_set_one returns the field element one in the Montgomery domain. + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np384_set_one(uint32_t out1[12]) { + out1[0] = UINT32_C(0x333ad68d); + out1[1] = UINT32_C(0x1313e695); + out1[2] = UINT32_C(0xb74f5885); + out1[3] = UINT32_C(0xa7e5f24d); + out1[4] = UINT32_C(0xbc8d220); + out1[5] = UINT32_C(0x389cb27e); + out1[6] = 0x0; + out1[7] = 0x0; + out1[8] = 0x0; + out1[9] = 0x0; + out1[10] = 0x0; + out1[11] = 0x0; +} + +/* + * The function fiat_np384_msat returns the saturated represtation of the prime modulus. + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np384_msat(uint32_t out1[13]) { + out1[0] = UINT32_C(0xccc52973); + out1[1] = UINT32_C(0xecec196a); + out1[2] = UINT32_C(0x48b0a77a); + out1[3] = UINT32_C(0x581a0db2); + out1[4] = UINT32_C(0xf4372ddf); + out1[5] = UINT32_C(0xc7634d81); + out1[6] = UINT32_C(0xffffffff); + out1[7] = UINT32_C(0xffffffff); + out1[8] = UINT32_C(0xffffffff); + out1[9] = UINT32_C(0xffffffff); + out1[10] = UINT32_C(0xffffffff); + out1[11] = UINT32_C(0xffffffff); + out1[12] = 0x0; +} + +/* + * The function fiat_np384_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if (log2 m) + 1 < 46 then ⌊(49 * ((log2 m) + 1) + 80) / 17⌋ else ⌊(49 * ((log2 m) + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np384_divstep_precomp(uint32_t out1[12]) { + out1[0] = UINT32_C(0xe6045b6a); + out1[1] = UINT32_C(0x49589ae0); + out1[2] = UINT32_C(0x870040ed); + out1[3] = UINT32_C(0x3c9a5352); + out1[4] = UINT32_C(0x977dc242); + out1[5] = UINT32_C(0xdacb097e); + out1[6] = UINT32_C(0xd1ecbe36); + out1[7] = UINT32_C(0xb5ab30a6); + out1[8] = UINT32_C(0x1f959973); + out1[9] = UINT32_C(0x97d7a108); + out1[10] = UINT32_C(0xd27192bc); + out1[11] = UINT32_C(0x2ba012f8); +} + +/* + * The function fiat_np384_divstep computes a divstep. + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg4: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg5: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out4: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out5: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np384_divstep(uint32_t* out1, uint32_t out2[13], uint32_t out3[13], uint32_t out4[12], uint32_t out5[12], uint32_t arg1, const uint32_t arg2[13], const uint32_t arg3[13], const uint32_t arg4[12], const uint32_t arg5[12]) { + uint32_t x1; + fiat_np384_uint1 x2; + fiat_np384_uint1 x3; + uint32_t x4; + fiat_np384_uint1 x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + fiat_np384_uint1 x21; + uint32_t x22; + fiat_np384_uint1 x23; + uint32_t x24; + fiat_np384_uint1 x25; + uint32_t x26; + fiat_np384_uint1 x27; + uint32_t x28; + fiat_np384_uint1 x29; + uint32_t x30; + fiat_np384_uint1 x31; + uint32_t x32; + fiat_np384_uint1 x33; + uint32_t x34; + fiat_np384_uint1 x35; + uint32_t x36; + fiat_np384_uint1 x37; + uint32_t x38; + fiat_np384_uint1 x39; + uint32_t x40; + fiat_np384_uint1 x41; + uint32_t x42; + fiat_np384_uint1 x43; + uint32_t x44; + fiat_np384_uint1 x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + uint32_t x52; + uint32_t x53; + uint32_t x54; + uint32_t x55; + uint32_t x56; + uint32_t x57; + uint32_t x58; + uint32_t x59; + uint32_t x60; + uint32_t x61; + uint32_t x62; + uint32_t x63; + uint32_t x64; + uint32_t x65; + uint32_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + fiat_np384_uint1 x72; + uint32_t x73; + fiat_np384_uint1 x74; + uint32_t x75; + fiat_np384_uint1 x76; + uint32_t x77; + fiat_np384_uint1 x78; + uint32_t x79; + fiat_np384_uint1 x80; + uint32_t x81; + fiat_np384_uint1 x82; + uint32_t x83; + fiat_np384_uint1 x84; + uint32_t x85; + fiat_np384_uint1 x86; + uint32_t x87; + fiat_np384_uint1 x88; + uint32_t x89; + fiat_np384_uint1 x90; + uint32_t x91; + fiat_np384_uint1 x92; + uint32_t x93; + fiat_np384_uint1 x94; + uint32_t x95; + fiat_np384_uint1 x96; + uint32_t x97; + fiat_np384_uint1 x98; + uint32_t x99; + fiat_np384_uint1 x100; + uint32_t x101; + fiat_np384_uint1 x102; + uint32_t x103; + fiat_np384_uint1 x104; + uint32_t x105; + fiat_np384_uint1 x106; + uint32_t x107; + fiat_np384_uint1 x108; + uint32_t x109; + fiat_np384_uint1 x110; + uint32_t x111; + fiat_np384_uint1 x112; + uint32_t x113; + fiat_np384_uint1 x114; + uint32_t x115; + fiat_np384_uint1 x116; + uint32_t x117; + fiat_np384_uint1 x118; + uint32_t x119; + fiat_np384_uint1 x120; + uint32_t x121; + uint32_t x122; + uint32_t x123; + uint32_t x124; + uint32_t x125; + uint32_t x126; + uint32_t x127; + uint32_t x128; + uint32_t x129; + uint32_t x130; + uint32_t x131; + uint32_t x132; + uint32_t x133; + fiat_np384_uint1 x134; + uint32_t x135; + fiat_np384_uint1 x136; + uint32_t x137; + fiat_np384_uint1 x138; + uint32_t x139; + fiat_np384_uint1 x140; + uint32_t x141; + fiat_np384_uint1 x142; + uint32_t x143; + fiat_np384_uint1 x144; + uint32_t x145; + fiat_np384_uint1 x146; + uint32_t x147; + fiat_np384_uint1 x148; + uint32_t x149; + fiat_np384_uint1 x150; + uint32_t x151; + fiat_np384_uint1 x152; + uint32_t x153; + fiat_np384_uint1 x154; + uint32_t x155; + fiat_np384_uint1 x156; + uint32_t x157; + uint32_t x158; + fiat_np384_uint1 x159; + uint32_t x160; + fiat_np384_uint1 x161; + uint32_t x162; + fiat_np384_uint1 x163; + uint32_t x164; + fiat_np384_uint1 x165; + uint32_t x166; + fiat_np384_uint1 x167; + uint32_t x168; + fiat_np384_uint1 x169; + uint32_t x170; + fiat_np384_uint1 x171; + uint32_t x172; + fiat_np384_uint1 x173; + uint32_t x174; + fiat_np384_uint1 x175; + uint32_t x176; + fiat_np384_uint1 x177; + uint32_t x178; + fiat_np384_uint1 x179; + uint32_t x180; + fiat_np384_uint1 x181; + uint32_t x182; + uint32_t x183; + uint32_t x184; + uint32_t x185; + uint32_t x186; + uint32_t x187; + uint32_t x188; + uint32_t x189; + uint32_t x190; + uint32_t x191; + uint32_t x192; + uint32_t x193; + fiat_np384_uint1 x194; + uint32_t x195; + uint32_t x196; + uint32_t x197; + uint32_t x198; + uint32_t x199; + uint32_t x200; + uint32_t x201; + uint32_t x202; + uint32_t x203; + uint32_t x204; + uint32_t x205; + uint32_t x206; + uint32_t x207; + uint32_t x208; + fiat_np384_uint1 x209; + uint32_t x210; + fiat_np384_uint1 x211; + uint32_t x212; + fiat_np384_uint1 x213; + uint32_t x214; + fiat_np384_uint1 x215; + uint32_t x216; + fiat_np384_uint1 x217; + uint32_t x218; + fiat_np384_uint1 x219; + uint32_t x220; + fiat_np384_uint1 x221; + uint32_t x222; + fiat_np384_uint1 x223; + uint32_t x224; + fiat_np384_uint1 x225; + uint32_t x226; + fiat_np384_uint1 x227; + uint32_t x228; + fiat_np384_uint1 x229; + uint32_t x230; + fiat_np384_uint1 x231; + uint32_t x232; + fiat_np384_uint1 x233; + uint32_t x234; + uint32_t x235; + uint32_t x236; + uint32_t x237; + uint32_t x238; + uint32_t x239; + uint32_t x240; + uint32_t x241; + uint32_t x242; + uint32_t x243; + uint32_t x244; + uint32_t x245; + uint32_t x246; + fiat_np384_uint1 x247; + uint32_t x248; + fiat_np384_uint1 x249; + uint32_t x250; + fiat_np384_uint1 x251; + uint32_t x252; + fiat_np384_uint1 x253; + uint32_t x254; + fiat_np384_uint1 x255; + uint32_t x256; + fiat_np384_uint1 x257; + uint32_t x258; + fiat_np384_uint1 x259; + uint32_t x260; + fiat_np384_uint1 x261; + uint32_t x262; + fiat_np384_uint1 x263; + uint32_t x264; + fiat_np384_uint1 x265; + uint32_t x266; + fiat_np384_uint1 x267; + uint32_t x268; + fiat_np384_uint1 x269; + uint32_t x270; + fiat_np384_uint1 x271; + uint32_t x272; + fiat_np384_uint1 x273; + uint32_t x274; + fiat_np384_uint1 x275; + uint32_t x276; + fiat_np384_uint1 x277; + uint32_t x278; + fiat_np384_uint1 x279; + uint32_t x280; + fiat_np384_uint1 x281; + uint32_t x282; + fiat_np384_uint1 x283; + uint32_t x284; + fiat_np384_uint1 x285; + uint32_t x286; + fiat_np384_uint1 x287; + uint32_t x288; + fiat_np384_uint1 x289; + uint32_t x290; + fiat_np384_uint1 x291; + uint32_t x292; + fiat_np384_uint1 x293; + uint32_t x294; + fiat_np384_uint1 x295; + uint32_t x296; + fiat_np384_uint1 x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + uint32_t x303; + uint32_t x304; + uint32_t x305; + uint32_t x306; + uint32_t x307; + uint32_t x308; + uint32_t x309; + uint32_t x310; + uint32_t x311; + uint32_t x312; + uint32_t x313; + uint32_t x314; + uint32_t x315; + uint32_t x316; + uint32_t x317; + uint32_t x318; + uint32_t x319; + uint32_t x320; + uint32_t x321; + uint32_t x322; + uint32_t x323; + uint32_t x324; + uint32_t x325; + uint32_t x326; + uint32_t x327; + uint32_t x328; + uint32_t x329; + uint32_t x330; + uint32_t x331; + uint32_t x332; + uint32_t x333; + uint32_t x334; + fiat_np384_addcarryx_u32(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_np384_uint1)((fiat_np384_uint1)(x1 >> 31) & (fiat_np384_uint1)((arg3[0]) & 0x1)); + fiat_np384_addcarryx_u32(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_np384_cmovznz_u32(&x6, x3, arg1, x4); + fiat_np384_cmovznz_u32(&x7, x3, (arg2[0]), (arg3[0])); + fiat_np384_cmovznz_u32(&x8, x3, (arg2[1]), (arg3[1])); + fiat_np384_cmovznz_u32(&x9, x3, (arg2[2]), (arg3[2])); + fiat_np384_cmovznz_u32(&x10, x3, (arg2[3]), (arg3[3])); + fiat_np384_cmovznz_u32(&x11, x3, (arg2[4]), (arg3[4])); + fiat_np384_cmovznz_u32(&x12, x3, (arg2[5]), (arg3[5])); + fiat_np384_cmovznz_u32(&x13, x3, (arg2[6]), (arg3[6])); + fiat_np384_cmovznz_u32(&x14, x3, (arg2[7]), (arg3[7])); + fiat_np384_cmovznz_u32(&x15, x3, (arg2[8]), (arg3[8])); + fiat_np384_cmovznz_u32(&x16, x3, (arg2[9]), (arg3[9])); + fiat_np384_cmovznz_u32(&x17, x3, (arg2[10]), (arg3[10])); + fiat_np384_cmovznz_u32(&x18, x3, (arg2[11]), (arg3[11])); + fiat_np384_cmovznz_u32(&x19, x3, (arg2[12]), (arg3[12])); + fiat_np384_addcarryx_u32(&x20, &x21, 0x0, 0x1, (~(arg2[0]))); + fiat_np384_addcarryx_u32(&x22, &x23, x21, 0x0, (~(arg2[1]))); + fiat_np384_addcarryx_u32(&x24, &x25, x23, 0x0, (~(arg2[2]))); + fiat_np384_addcarryx_u32(&x26, &x27, x25, 0x0, (~(arg2[3]))); + fiat_np384_addcarryx_u32(&x28, &x29, x27, 0x0, (~(arg2[4]))); + fiat_np384_addcarryx_u32(&x30, &x31, x29, 0x0, (~(arg2[5]))); + fiat_np384_addcarryx_u32(&x32, &x33, x31, 0x0, (~(arg2[6]))); + fiat_np384_addcarryx_u32(&x34, &x35, x33, 0x0, (~(arg2[7]))); + fiat_np384_addcarryx_u32(&x36, &x37, x35, 0x0, (~(arg2[8]))); + fiat_np384_addcarryx_u32(&x38, &x39, x37, 0x0, (~(arg2[9]))); + fiat_np384_addcarryx_u32(&x40, &x41, x39, 0x0, (~(arg2[10]))); + fiat_np384_addcarryx_u32(&x42, &x43, x41, 0x0, (~(arg2[11]))); + fiat_np384_addcarryx_u32(&x44, &x45, x43, 0x0, (~(arg2[12]))); + fiat_np384_cmovznz_u32(&x46, x3, (arg3[0]), x20); + fiat_np384_cmovznz_u32(&x47, x3, (arg3[1]), x22); + fiat_np384_cmovznz_u32(&x48, x3, (arg3[2]), x24); + fiat_np384_cmovznz_u32(&x49, x3, (arg3[3]), x26); + fiat_np384_cmovznz_u32(&x50, x3, (arg3[4]), x28); + fiat_np384_cmovznz_u32(&x51, x3, (arg3[5]), x30); + fiat_np384_cmovznz_u32(&x52, x3, (arg3[6]), x32); + fiat_np384_cmovznz_u32(&x53, x3, (arg3[7]), x34); + fiat_np384_cmovznz_u32(&x54, x3, (arg3[8]), x36); + fiat_np384_cmovznz_u32(&x55, x3, (arg3[9]), x38); + fiat_np384_cmovznz_u32(&x56, x3, (arg3[10]), x40); + fiat_np384_cmovznz_u32(&x57, x3, (arg3[11]), x42); + fiat_np384_cmovznz_u32(&x58, x3, (arg3[12]), x44); + fiat_np384_cmovznz_u32(&x59, x3, (arg4[0]), (arg5[0])); + fiat_np384_cmovznz_u32(&x60, x3, (arg4[1]), (arg5[1])); + fiat_np384_cmovznz_u32(&x61, x3, (arg4[2]), (arg5[2])); + fiat_np384_cmovznz_u32(&x62, x3, (arg4[3]), (arg5[3])); + fiat_np384_cmovznz_u32(&x63, x3, (arg4[4]), (arg5[4])); + fiat_np384_cmovznz_u32(&x64, x3, (arg4[5]), (arg5[5])); + fiat_np384_cmovznz_u32(&x65, x3, (arg4[6]), (arg5[6])); + fiat_np384_cmovznz_u32(&x66, x3, (arg4[7]), (arg5[7])); + fiat_np384_cmovznz_u32(&x67, x3, (arg4[8]), (arg5[8])); + fiat_np384_cmovznz_u32(&x68, x3, (arg4[9]), (arg5[9])); + fiat_np384_cmovznz_u32(&x69, x3, (arg4[10]), (arg5[10])); + fiat_np384_cmovznz_u32(&x70, x3, (arg4[11]), (arg5[11])); + fiat_np384_addcarryx_u32(&x71, &x72, 0x0, x59, x59); + fiat_np384_addcarryx_u32(&x73, &x74, x72, x60, x60); + fiat_np384_addcarryx_u32(&x75, &x76, x74, x61, x61); + fiat_np384_addcarryx_u32(&x77, &x78, x76, x62, x62); + fiat_np384_addcarryx_u32(&x79, &x80, x78, x63, x63); + fiat_np384_addcarryx_u32(&x81, &x82, x80, x64, x64); + fiat_np384_addcarryx_u32(&x83, &x84, x82, x65, x65); + fiat_np384_addcarryx_u32(&x85, &x86, x84, x66, x66); + fiat_np384_addcarryx_u32(&x87, &x88, x86, x67, x67); + fiat_np384_addcarryx_u32(&x89, &x90, x88, x68, x68); + fiat_np384_addcarryx_u32(&x91, &x92, x90, x69, x69); + fiat_np384_addcarryx_u32(&x93, &x94, x92, x70, x70); + fiat_np384_subborrowx_u32(&x95, &x96, 0x0, x71, UINT32_C(0xccc52973)); + fiat_np384_subborrowx_u32(&x97, &x98, x96, x73, UINT32_C(0xecec196a)); + fiat_np384_subborrowx_u32(&x99, &x100, x98, x75, UINT32_C(0x48b0a77a)); + fiat_np384_subborrowx_u32(&x101, &x102, x100, x77, UINT32_C(0x581a0db2)); + fiat_np384_subborrowx_u32(&x103, &x104, x102, x79, UINT32_C(0xf4372ddf)); + fiat_np384_subborrowx_u32(&x105, &x106, x104, x81, UINT32_C(0xc7634d81)); + fiat_np384_subborrowx_u32(&x107, &x108, x106, x83, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x109, &x110, x108, x85, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x111, &x112, x110, x87, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x113, &x114, x112, x89, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x115, &x116, x114, x91, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x117, &x118, x116, x93, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x119, &x120, x118, x94, 0x0); + x121 = (arg4[11]); + x122 = (arg4[10]); + x123 = (arg4[9]); + x124 = (arg4[8]); + x125 = (arg4[7]); + x126 = (arg4[6]); + x127 = (arg4[5]); + x128 = (arg4[4]); + x129 = (arg4[3]); + x130 = (arg4[2]); + x131 = (arg4[1]); + x132 = (arg4[0]); + fiat_np384_subborrowx_u32(&x133, &x134, 0x0, 0x0, x132); + fiat_np384_subborrowx_u32(&x135, &x136, x134, 0x0, x131); + fiat_np384_subborrowx_u32(&x137, &x138, x136, 0x0, x130); + fiat_np384_subborrowx_u32(&x139, &x140, x138, 0x0, x129); + fiat_np384_subborrowx_u32(&x141, &x142, x140, 0x0, x128); + fiat_np384_subborrowx_u32(&x143, &x144, x142, 0x0, x127); + fiat_np384_subborrowx_u32(&x145, &x146, x144, 0x0, x126); + fiat_np384_subborrowx_u32(&x147, &x148, x146, 0x0, x125); + fiat_np384_subborrowx_u32(&x149, &x150, x148, 0x0, x124); + fiat_np384_subborrowx_u32(&x151, &x152, x150, 0x0, x123); + fiat_np384_subborrowx_u32(&x153, &x154, x152, 0x0, x122); + fiat_np384_subborrowx_u32(&x155, &x156, x154, 0x0, x121); + fiat_np384_cmovznz_u32(&x157, x156, 0x0, UINT32_C(0xffffffff)); + fiat_np384_addcarryx_u32(&x158, &x159, 0x0, x133, (x157 & UINT32_C(0xccc52973))); + fiat_np384_addcarryx_u32(&x160, &x161, x159, x135, (x157 & UINT32_C(0xecec196a))); + fiat_np384_addcarryx_u32(&x162, &x163, x161, x137, (x157 & UINT32_C(0x48b0a77a))); + fiat_np384_addcarryx_u32(&x164, &x165, x163, x139, (x157 & UINT32_C(0x581a0db2))); + fiat_np384_addcarryx_u32(&x166, &x167, x165, x141, (x157 & UINT32_C(0xf4372ddf))); + fiat_np384_addcarryx_u32(&x168, &x169, x167, x143, (x157 & UINT32_C(0xc7634d81))); + fiat_np384_addcarryx_u32(&x170, &x171, x169, x145, x157); + fiat_np384_addcarryx_u32(&x172, &x173, x171, x147, x157); + fiat_np384_addcarryx_u32(&x174, &x175, x173, x149, x157); + fiat_np384_addcarryx_u32(&x176, &x177, x175, x151, x157); + fiat_np384_addcarryx_u32(&x178, &x179, x177, x153, x157); + fiat_np384_addcarryx_u32(&x180, &x181, x179, x155, x157); + fiat_np384_cmovznz_u32(&x182, x3, (arg5[0]), x158); + fiat_np384_cmovznz_u32(&x183, x3, (arg5[1]), x160); + fiat_np384_cmovznz_u32(&x184, x3, (arg5[2]), x162); + fiat_np384_cmovznz_u32(&x185, x3, (arg5[3]), x164); + fiat_np384_cmovznz_u32(&x186, x3, (arg5[4]), x166); + fiat_np384_cmovznz_u32(&x187, x3, (arg5[5]), x168); + fiat_np384_cmovznz_u32(&x188, x3, (arg5[6]), x170); + fiat_np384_cmovznz_u32(&x189, x3, (arg5[7]), x172); + fiat_np384_cmovznz_u32(&x190, x3, (arg5[8]), x174); + fiat_np384_cmovznz_u32(&x191, x3, (arg5[9]), x176); + fiat_np384_cmovznz_u32(&x192, x3, (arg5[10]), x178); + fiat_np384_cmovznz_u32(&x193, x3, (arg5[11]), x180); + x194 = (fiat_np384_uint1)(x46 & 0x1); + fiat_np384_cmovznz_u32(&x195, x194, 0x0, x7); + fiat_np384_cmovznz_u32(&x196, x194, 0x0, x8); + fiat_np384_cmovznz_u32(&x197, x194, 0x0, x9); + fiat_np384_cmovznz_u32(&x198, x194, 0x0, x10); + fiat_np384_cmovznz_u32(&x199, x194, 0x0, x11); + fiat_np384_cmovznz_u32(&x200, x194, 0x0, x12); + fiat_np384_cmovznz_u32(&x201, x194, 0x0, x13); + fiat_np384_cmovznz_u32(&x202, x194, 0x0, x14); + fiat_np384_cmovznz_u32(&x203, x194, 0x0, x15); + fiat_np384_cmovznz_u32(&x204, x194, 0x0, x16); + fiat_np384_cmovznz_u32(&x205, x194, 0x0, x17); + fiat_np384_cmovznz_u32(&x206, x194, 0x0, x18); + fiat_np384_cmovznz_u32(&x207, x194, 0x0, x19); + fiat_np384_addcarryx_u32(&x208, &x209, 0x0, x46, x195); + fiat_np384_addcarryx_u32(&x210, &x211, x209, x47, x196); + fiat_np384_addcarryx_u32(&x212, &x213, x211, x48, x197); + fiat_np384_addcarryx_u32(&x214, &x215, x213, x49, x198); + fiat_np384_addcarryx_u32(&x216, &x217, x215, x50, x199); + fiat_np384_addcarryx_u32(&x218, &x219, x217, x51, x200); + fiat_np384_addcarryx_u32(&x220, &x221, x219, x52, x201); + fiat_np384_addcarryx_u32(&x222, &x223, x221, x53, x202); + fiat_np384_addcarryx_u32(&x224, &x225, x223, x54, x203); + fiat_np384_addcarryx_u32(&x226, &x227, x225, x55, x204); + fiat_np384_addcarryx_u32(&x228, &x229, x227, x56, x205); + fiat_np384_addcarryx_u32(&x230, &x231, x229, x57, x206); + fiat_np384_addcarryx_u32(&x232, &x233, x231, x58, x207); + fiat_np384_cmovznz_u32(&x234, x194, 0x0, x59); + fiat_np384_cmovznz_u32(&x235, x194, 0x0, x60); + fiat_np384_cmovznz_u32(&x236, x194, 0x0, x61); + fiat_np384_cmovznz_u32(&x237, x194, 0x0, x62); + fiat_np384_cmovznz_u32(&x238, x194, 0x0, x63); + fiat_np384_cmovznz_u32(&x239, x194, 0x0, x64); + fiat_np384_cmovznz_u32(&x240, x194, 0x0, x65); + fiat_np384_cmovznz_u32(&x241, x194, 0x0, x66); + fiat_np384_cmovznz_u32(&x242, x194, 0x0, x67); + fiat_np384_cmovznz_u32(&x243, x194, 0x0, x68); + fiat_np384_cmovznz_u32(&x244, x194, 0x0, x69); + fiat_np384_cmovznz_u32(&x245, x194, 0x0, x70); + fiat_np384_addcarryx_u32(&x246, &x247, 0x0, x182, x234); + fiat_np384_addcarryx_u32(&x248, &x249, x247, x183, x235); + fiat_np384_addcarryx_u32(&x250, &x251, x249, x184, x236); + fiat_np384_addcarryx_u32(&x252, &x253, x251, x185, x237); + fiat_np384_addcarryx_u32(&x254, &x255, x253, x186, x238); + fiat_np384_addcarryx_u32(&x256, &x257, x255, x187, x239); + fiat_np384_addcarryx_u32(&x258, &x259, x257, x188, x240); + fiat_np384_addcarryx_u32(&x260, &x261, x259, x189, x241); + fiat_np384_addcarryx_u32(&x262, &x263, x261, x190, x242); + fiat_np384_addcarryx_u32(&x264, &x265, x263, x191, x243); + fiat_np384_addcarryx_u32(&x266, &x267, x265, x192, x244); + fiat_np384_addcarryx_u32(&x268, &x269, x267, x193, x245); + fiat_np384_subborrowx_u32(&x270, &x271, 0x0, x246, UINT32_C(0xccc52973)); + fiat_np384_subborrowx_u32(&x272, &x273, x271, x248, UINT32_C(0xecec196a)); + fiat_np384_subborrowx_u32(&x274, &x275, x273, x250, UINT32_C(0x48b0a77a)); + fiat_np384_subborrowx_u32(&x276, &x277, x275, x252, UINT32_C(0x581a0db2)); + fiat_np384_subborrowx_u32(&x278, &x279, x277, x254, UINT32_C(0xf4372ddf)); + fiat_np384_subborrowx_u32(&x280, &x281, x279, x256, UINT32_C(0xc7634d81)); + fiat_np384_subborrowx_u32(&x282, &x283, x281, x258, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x284, &x285, x283, x260, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x286, &x287, x285, x262, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x288, &x289, x287, x264, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x290, &x291, x289, x266, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x292, &x293, x291, x268, UINT32_C(0xffffffff)); + fiat_np384_subborrowx_u32(&x294, &x295, x293, x269, 0x0); + fiat_np384_addcarryx_u32(&x296, &x297, 0x0, x6, 0x1); + x298 = ((x208 >> 1) | ((x210 << 31) & UINT32_C(0xffffffff))); + x299 = ((x210 >> 1) | ((x212 << 31) & UINT32_C(0xffffffff))); + x300 = ((x212 >> 1) | ((x214 << 31) & UINT32_C(0xffffffff))); + x301 = ((x214 >> 1) | ((x216 << 31) & UINT32_C(0xffffffff))); + x302 = ((x216 >> 1) | ((x218 << 31) & UINT32_C(0xffffffff))); + x303 = ((x218 >> 1) | ((x220 << 31) & UINT32_C(0xffffffff))); + x304 = ((x220 >> 1) | ((x222 << 31) & UINT32_C(0xffffffff))); + x305 = ((x222 >> 1) | ((x224 << 31) & UINT32_C(0xffffffff))); + x306 = ((x224 >> 1) | ((x226 << 31) & UINT32_C(0xffffffff))); + x307 = ((x226 >> 1) | ((x228 << 31) & UINT32_C(0xffffffff))); + x308 = ((x228 >> 1) | ((x230 << 31) & UINT32_C(0xffffffff))); + x309 = ((x230 >> 1) | ((x232 << 31) & UINT32_C(0xffffffff))); + x310 = ((x232 & UINT32_C(0x80000000)) | (x232 >> 1)); + fiat_np384_cmovznz_u32(&x311, x120, x95, x71); + fiat_np384_cmovznz_u32(&x312, x120, x97, x73); + fiat_np384_cmovznz_u32(&x313, x120, x99, x75); + fiat_np384_cmovznz_u32(&x314, x120, x101, x77); + fiat_np384_cmovznz_u32(&x315, x120, x103, x79); + fiat_np384_cmovznz_u32(&x316, x120, x105, x81); + fiat_np384_cmovznz_u32(&x317, x120, x107, x83); + fiat_np384_cmovznz_u32(&x318, x120, x109, x85); + fiat_np384_cmovznz_u32(&x319, x120, x111, x87); + fiat_np384_cmovznz_u32(&x320, x120, x113, x89); + fiat_np384_cmovznz_u32(&x321, x120, x115, x91); + fiat_np384_cmovznz_u32(&x322, x120, x117, x93); + fiat_np384_cmovznz_u32(&x323, x295, x270, x246); + fiat_np384_cmovznz_u32(&x324, x295, x272, x248); + fiat_np384_cmovznz_u32(&x325, x295, x274, x250); + fiat_np384_cmovznz_u32(&x326, x295, x276, x252); + fiat_np384_cmovznz_u32(&x327, x295, x278, x254); + fiat_np384_cmovznz_u32(&x328, x295, x280, x256); + fiat_np384_cmovznz_u32(&x329, x295, x282, x258); + fiat_np384_cmovznz_u32(&x330, x295, x284, x260); + fiat_np384_cmovznz_u32(&x331, x295, x286, x262); + fiat_np384_cmovznz_u32(&x332, x295, x288, x264); + fiat_np384_cmovznz_u32(&x333, x295, x290, x266); + fiat_np384_cmovznz_u32(&x334, x295, x292, x268); + *out1 = x296; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out2[5] = x12; + out2[6] = x13; + out2[7] = x14; + out2[8] = x15; + out2[9] = x16; + out2[10] = x17; + out2[11] = x18; + out2[12] = x19; + out3[0] = x298; + out3[1] = x299; + out3[2] = x300; + out3[3] = x301; + out3[4] = x302; + out3[5] = x303; + out3[6] = x304; + out3[7] = x305; + out3[8] = x306; + out3[9] = x307; + out3[10] = x308; + out3[11] = x309; + out3[12] = x310; + out4[0] = x311; + out4[1] = x312; + out4[2] = x313; + out4[3] = x314; + out4[4] = x315; + out4[5] = x316; + out4[6] = x317; + out4[7] = x318; + out4[8] = x319; + out4[9] = x320; + out4[10] = x321; + out4[11] = x322; + out5[0] = x323; + out5[1] = x324; + out5[2] = x325; + out5[3] = x326; + out5[4] = x327; + out5[5] = x328; + out5[6] = x329; + out5[7] = x330; + out5[8] = x331; + out5[9] = x332; + out5[10] = x333; + out5[11] = x334; +} + +/* + * The function fiat_np384_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..47] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + */ +static void fiat_np384_to_bytes(uint8_t out1[48], const uint32_t arg1[12]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint8_t x13; + uint32_t x14; + uint8_t x15; + uint32_t x16; + uint8_t x17; + uint8_t x18; + uint8_t x19; + uint32_t x20; + uint8_t x21; + uint32_t x22; + uint8_t x23; + uint8_t x24; + uint8_t x25; + uint32_t x26; + uint8_t x27; + uint32_t x28; + uint8_t x29; + uint8_t x30; + uint8_t x31; + uint32_t x32; + uint8_t x33; + uint32_t x34; + uint8_t x35; + uint8_t x36; + uint8_t x37; + uint32_t x38; + uint8_t x39; + uint32_t x40; + uint8_t x41; + uint8_t x42; + uint8_t x43; + uint32_t x44; + uint8_t x45; + uint32_t x46; + uint8_t x47; + uint8_t x48; + uint8_t x49; + uint32_t x50; + uint8_t x51; + uint32_t x52; + uint8_t x53; + uint8_t x54; + uint8_t x55; + uint32_t x56; + uint8_t x57; + uint32_t x58; + uint8_t x59; + uint8_t x60; + uint8_t x61; + uint32_t x62; + uint8_t x63; + uint32_t x64; + uint8_t x65; + uint8_t x66; + uint8_t x67; + uint32_t x68; + uint8_t x69; + uint32_t x70; + uint8_t x71; + uint8_t x72; + uint8_t x73; + uint32_t x74; + uint8_t x75; + uint32_t x76; + uint8_t x77; + uint8_t x78; + uint8_t x79; + uint32_t x80; + uint8_t x81; + uint32_t x82; + uint8_t x83; + uint8_t x84; + x1 = (arg1[11]); + x2 = (arg1[10]); + x3 = (arg1[9]); + x4 = (arg1[8]); + x5 = (arg1[7]); + x6 = (arg1[6]); + x7 = (arg1[5]); + x8 = (arg1[4]); + x9 = (arg1[3]); + x10 = (arg1[2]); + x11 = (arg1[1]); + x12 = (arg1[0]); + x13 = (uint8_t)(x12 & UINT8_C(0xff)); + x14 = (x12 >> 8); + x15 = (uint8_t)(x14 & UINT8_C(0xff)); + x16 = (x14 >> 8); + x17 = (uint8_t)(x16 & UINT8_C(0xff)); + x18 = (uint8_t)(x16 >> 8); + x19 = (uint8_t)(x11 & UINT8_C(0xff)); + x20 = (x11 >> 8); + x21 = (uint8_t)(x20 & UINT8_C(0xff)); + x22 = (x20 >> 8); + x23 = (uint8_t)(x22 & UINT8_C(0xff)); + x24 = (uint8_t)(x22 >> 8); + x25 = (uint8_t)(x10 & UINT8_C(0xff)); + x26 = (x10 >> 8); + x27 = (uint8_t)(x26 & UINT8_C(0xff)); + x28 = (x26 >> 8); + x29 = (uint8_t)(x28 & UINT8_C(0xff)); + x30 = (uint8_t)(x28 >> 8); + x31 = (uint8_t)(x9 & UINT8_C(0xff)); + x32 = (x9 >> 8); + x33 = (uint8_t)(x32 & UINT8_C(0xff)); + x34 = (x32 >> 8); + x35 = (uint8_t)(x34 & UINT8_C(0xff)); + x36 = (uint8_t)(x34 >> 8); + x37 = (uint8_t)(x8 & UINT8_C(0xff)); + x38 = (x8 >> 8); + x39 = (uint8_t)(x38 & UINT8_C(0xff)); + x40 = (x38 >> 8); + x41 = (uint8_t)(x40 & UINT8_C(0xff)); + x42 = (uint8_t)(x40 >> 8); + x43 = (uint8_t)(x7 & UINT8_C(0xff)); + x44 = (x7 >> 8); + x45 = (uint8_t)(x44 & UINT8_C(0xff)); + x46 = (x44 >> 8); + x47 = (uint8_t)(x46 & UINT8_C(0xff)); + x48 = (uint8_t)(x46 >> 8); + x49 = (uint8_t)(x6 & UINT8_C(0xff)); + x50 = (x6 >> 8); + x51 = (uint8_t)(x50 & UINT8_C(0xff)); + x52 = (x50 >> 8); + x53 = (uint8_t)(x52 & UINT8_C(0xff)); + x54 = (uint8_t)(x52 >> 8); + x55 = (uint8_t)(x5 & UINT8_C(0xff)); + x56 = (x5 >> 8); + x57 = (uint8_t)(x56 & UINT8_C(0xff)); + x58 = (x56 >> 8); + x59 = (uint8_t)(x58 & UINT8_C(0xff)); + x60 = (uint8_t)(x58 >> 8); + x61 = (uint8_t)(x4 & UINT8_C(0xff)); + x62 = (x4 >> 8); + x63 = (uint8_t)(x62 & UINT8_C(0xff)); + x64 = (x62 >> 8); + x65 = (uint8_t)(x64 & UINT8_C(0xff)); + x66 = (uint8_t)(x64 >> 8); + x67 = (uint8_t)(x3 & UINT8_C(0xff)); + x68 = (x3 >> 8); + x69 = (uint8_t)(x68 & UINT8_C(0xff)); + x70 = (x68 >> 8); + x71 = (uint8_t)(x70 & UINT8_C(0xff)); + x72 = (uint8_t)(x70 >> 8); + x73 = (uint8_t)(x2 & UINT8_C(0xff)); + x74 = (x2 >> 8); + x75 = (uint8_t)(x74 & UINT8_C(0xff)); + x76 = (x74 >> 8); + x77 = (uint8_t)(x76 & UINT8_C(0xff)); + x78 = (uint8_t)(x76 >> 8); + x79 = (uint8_t)(x1 & UINT8_C(0xff)); + x80 = (x1 >> 8); + x81 = (uint8_t)(x80 & UINT8_C(0xff)); + x82 = (x80 >> 8); + x83 = (uint8_t)(x82 & UINT8_C(0xff)); + x84 = (uint8_t)(x82 >> 8); + out1[0] = x13; + out1[1] = x15; + out1[2] = x17; + out1[3] = x18; + out1[4] = x19; + out1[5] = x21; + out1[6] = x23; + out1[7] = x24; + out1[8] = x25; + out1[9] = x27; + out1[10] = x29; + out1[11] = x30; + out1[12] = x31; + out1[13] = x33; + out1[14] = x35; + out1[15] = x36; + out1[16] = x37; + out1[17] = x39; + out1[18] = x41; + out1[19] = x42; + out1[20] = x43; + out1[21] = x45; + out1[22] = x47; + out1[23] = x48; + out1[24] = x49; + out1[25] = x51; + out1[26] = x53; + out1[27] = x54; + out1[28] = x55; + out1[29] = x57; + out1[30] = x59; + out1[31] = x60; + out1[32] = x61; + out1[33] = x63; + out1[34] = x65; + out1[35] = x66; + out1[36] = x67; + out1[37] = x69; + out1[38] = x71; + out1[39] = x72; + out1[40] = x73; + out1[41] = x75; + out1[42] = x77; + out1[43] = x78; + out1[44] = x79; + out1[45] = x81; + out1[46] = x83; + out1[47] = x84; +} + +/* + * The function fiat_np384_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np384_from_bytes(uint32_t out1[12], const uint8_t arg1[48]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint8_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint8_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint8_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint8_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint8_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint8_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint8_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint8_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint8_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint8_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint8_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint8_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + uint32_t x52; + uint32_t x53; + uint32_t x54; + uint32_t x55; + uint32_t x56; + uint32_t x57; + uint32_t x58; + uint32_t x59; + uint32_t x60; + uint32_t x61; + uint32_t x62; + uint32_t x63; + uint32_t x64; + uint32_t x65; + uint32_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + uint32_t x81; + uint32_t x82; + uint32_t x83; + uint32_t x84; + x1 = ((uint32_t)(arg1[47]) << 24); + x2 = ((uint32_t)(arg1[46]) << 16); + x3 = ((uint32_t)(arg1[45]) << 8); + x4 = (arg1[44]); + x5 = ((uint32_t)(arg1[43]) << 24); + x6 = ((uint32_t)(arg1[42]) << 16); + x7 = ((uint32_t)(arg1[41]) << 8); + x8 = (arg1[40]); + x9 = ((uint32_t)(arg1[39]) << 24); + x10 = ((uint32_t)(arg1[38]) << 16); + x11 = ((uint32_t)(arg1[37]) << 8); + x12 = (arg1[36]); + x13 = ((uint32_t)(arg1[35]) << 24); + x14 = ((uint32_t)(arg1[34]) << 16); + x15 = ((uint32_t)(arg1[33]) << 8); + x16 = (arg1[32]); + x17 = ((uint32_t)(arg1[31]) << 24); + x18 = ((uint32_t)(arg1[30]) << 16); + x19 = ((uint32_t)(arg1[29]) << 8); + x20 = (arg1[28]); + x21 = ((uint32_t)(arg1[27]) << 24); + x22 = ((uint32_t)(arg1[26]) << 16); + x23 = ((uint32_t)(arg1[25]) << 8); + x24 = (arg1[24]); + x25 = ((uint32_t)(arg1[23]) << 24); + x26 = ((uint32_t)(arg1[22]) << 16); + x27 = ((uint32_t)(arg1[21]) << 8); + x28 = (arg1[20]); + x29 = ((uint32_t)(arg1[19]) << 24); + x30 = ((uint32_t)(arg1[18]) << 16); + x31 = ((uint32_t)(arg1[17]) << 8); + x32 = (arg1[16]); + x33 = ((uint32_t)(arg1[15]) << 24); + x34 = ((uint32_t)(arg1[14]) << 16); + x35 = ((uint32_t)(arg1[13]) << 8); + x36 = (arg1[12]); + x37 = ((uint32_t)(arg1[11]) << 24); + x38 = ((uint32_t)(arg1[10]) << 16); + x39 = ((uint32_t)(arg1[9]) << 8); + x40 = (arg1[8]); + x41 = ((uint32_t)(arg1[7]) << 24); + x42 = ((uint32_t)(arg1[6]) << 16); + x43 = ((uint32_t)(arg1[5]) << 8); + x44 = (arg1[4]); + x45 = ((uint32_t)(arg1[3]) << 24); + x46 = ((uint32_t)(arg1[2]) << 16); + x47 = ((uint32_t)(arg1[1]) << 8); + x48 = (arg1[0]); + x49 = (x47 + (uint32_t)x48); + x50 = (x46 + x49); + x51 = (x45 + x50); + x52 = (x43 + (uint32_t)x44); + x53 = (x42 + x52); + x54 = (x41 + x53); + x55 = (x39 + (uint32_t)x40); + x56 = (x38 + x55); + x57 = (x37 + x56); + x58 = (x35 + (uint32_t)x36); + x59 = (x34 + x58); + x60 = (x33 + x59); + x61 = (x31 + (uint32_t)x32); + x62 = (x30 + x61); + x63 = (x29 + x62); + x64 = (x27 + (uint32_t)x28); + x65 = (x26 + x64); + x66 = (x25 + x65); + x67 = (x23 + (uint32_t)x24); + x68 = (x22 + x67); + x69 = (x21 + x68); + x70 = (x19 + (uint32_t)x20); + x71 = (x18 + x70); + x72 = (x17 + x71); + x73 = (x15 + (uint32_t)x16); + x74 = (x14 + x73); + x75 = (x13 + x74); + x76 = (x11 + (uint32_t)x12); + x77 = (x10 + x76); + x78 = (x9 + x77); + x79 = (x7 + (uint32_t)x8); + x80 = (x6 + x79); + x81 = (x5 + x80); + x82 = (x3 + (uint32_t)x4); + x83 = (x2 + x82); + x84 = (x1 + x83); + out1[0] = x51; + out1[1] = x54; + out1[2] = x57; + out1[3] = x60; + out1[4] = x63; + out1[5] = x66; + out1[6] = x69; + out1[7] = x72; + out1[8] = x75; + out1[9] = x78; + out1[10] = x81; + out1[11] = x84; +} + diff --git a/ec/native/np384_64.h b/ec/native/np384_64.h new file mode 100644 index 00000000..e8aa548f --- /dev/null +++ b/ec/native/np384_64.h @@ -0,0 +1,3071 @@ +/* Autogenerated: '../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery' --static --use-value-barrier np384 64 0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 mul add opp from_montgomery to_montgomery one msat divstep_precomp divstep to_bytes from_bytes */ +/* curve description: np384 */ +/* machine_wordsize = 64 (from "64") */ +/* requested operations: mul, add, opp, from_montgomery, to_montgomery, one, msat, divstep_precomp, divstep, to_bytes, from_bytes */ +/* m = 0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973 (from "0xffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) + (z[4] << 256) + (z[5] << 0x140) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) + (z[32] << 256) + (z[33] << 0x108) + (z[34] << 0x110) + (z[35] << 0x118) + (z[36] << 0x120) + (z[37] << 0x128) + (z[38] << 0x130) + (z[39] << 0x138) + (z[40] << 0x140) + (z[41] << 0x148) + (z[42] << 0x150) + (z[43] << 0x158) + (z[44] << 0x160) + (z[45] << 0x168) + (z[46] << 0x170) + (z[47] << 0x178) */ + +#include +typedef unsigned char fiat_np384_uint1; +typedef signed char fiat_np384_int1; +#ifdef __GNUC__ +# define FIAT_NP384_FIAT_EXTENSION __extension__ +#else +# define FIAT_NP384_FIAT_EXTENSION +#endif + +FIAT_NP384_FIAT_EXTENSION typedef signed __int128 fiat_np384_int128; +FIAT_NP384_FIAT_EXTENSION typedef unsigned __int128 fiat_np384_uint128; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_NP384_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint64_t fiat_np384_value_barrier_u64(uint64_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_np384_value_barrier_u64(x) (x) +#endif + + +/* + * The function fiat_np384_addcarryx_u64 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^64 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_np384_addcarryx_u64(uint64_t* out1, fiat_np384_uint1* out2, fiat_np384_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_np384_uint128 x1; + uint64_t x2; + fiat_np384_uint1 x3; + x1 = ((arg1 + (fiat_np384_uint128)arg2) + arg3); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (fiat_np384_uint1)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_np384_subborrowx_u64 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^64 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_np384_subborrowx_u64(uint64_t* out1, fiat_np384_uint1* out2, fiat_np384_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_np384_int128 x1; + fiat_np384_int1 x2; + uint64_t x3; + x1 = ((arg2 - (fiat_np384_int128)arg1) - arg3); + x2 = (fiat_np384_int1)(x1 >> 64); + x3 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + *out1 = x3; + *out2 = (fiat_np384_uint1)(0x0 - x2); +} + +/* + * The function fiat_np384_mulx_u64 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^64 + * out2 = ⌊arg1 * arg2 / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_np384_mulx_u64(uint64_t* out1, uint64_t* out2, uint64_t arg1, uint64_t arg2) { + fiat_np384_uint128 x1; + uint64_t x2; + uint64_t x3; + x1 = ((fiat_np384_uint128)arg1 * arg2); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (uint64_t)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_np384_cmovznz_u64 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_np384_cmovznz_u64(uint64_t* out1, fiat_np384_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_np384_uint1 x1; + uint64_t x2; + uint64_t x3; + x1 = (!(!arg1)); + x2 = ((fiat_np384_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); + x3 = ((fiat_np384_value_barrier_u64(x2) & arg3) | (fiat_np384_value_barrier_u64((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_np384_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np384_mul(uint64_t out1[6], const uint64_t arg1[6], const uint64_t arg2[6]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + fiat_np384_uint1 x20; + uint64_t x21; + fiat_np384_uint1 x22; + uint64_t x23; + fiat_np384_uint1 x24; + uint64_t x25; + fiat_np384_uint1 x26; + uint64_t x27; + fiat_np384_uint1 x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint64_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + fiat_np384_uint1 x45; + uint64_t x46; + fiat_np384_uint1 x47; + uint64_t x48; + fiat_np384_uint1 x49; + uint64_t x50; + fiat_np384_uint1 x51; + uint64_t x52; + fiat_np384_uint1 x53; + uint64_t x54; + uint64_t x55; + fiat_np384_uint1 x56; + uint64_t x57; + fiat_np384_uint1 x58; + uint64_t x59; + fiat_np384_uint1 x60; + uint64_t x61; + fiat_np384_uint1 x62; + uint64_t x63; + fiat_np384_uint1 x64; + uint64_t x65; + fiat_np384_uint1 x66; + uint64_t x67; + fiat_np384_uint1 x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + uint64_t x81; + fiat_np384_uint1 x82; + uint64_t x83; + fiat_np384_uint1 x84; + uint64_t x85; + fiat_np384_uint1 x86; + uint64_t x87; + fiat_np384_uint1 x88; + uint64_t x89; + fiat_np384_uint1 x90; + uint64_t x91; + uint64_t x92; + fiat_np384_uint1 x93; + uint64_t x94; + fiat_np384_uint1 x95; + uint64_t x96; + fiat_np384_uint1 x97; + uint64_t x98; + fiat_np384_uint1 x99; + uint64_t x100; + fiat_np384_uint1 x101; + uint64_t x102; + fiat_np384_uint1 x103; + uint64_t x104; + fiat_np384_uint1 x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + uint64_t x109; + uint64_t x110; + uint64_t x111; + uint64_t x112; + uint64_t x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + fiat_np384_uint1 x121; + uint64_t x122; + fiat_np384_uint1 x123; + uint64_t x124; + fiat_np384_uint1 x125; + uint64_t x126; + fiat_np384_uint1 x127; + uint64_t x128; + fiat_np384_uint1 x129; + uint64_t x130; + uint64_t x131; + fiat_np384_uint1 x132; + uint64_t x133; + fiat_np384_uint1 x134; + uint64_t x135; + fiat_np384_uint1 x136; + uint64_t x137; + fiat_np384_uint1 x138; + uint64_t x139; + fiat_np384_uint1 x140; + uint64_t x141; + fiat_np384_uint1 x142; + uint64_t x143; + fiat_np384_uint1 x144; + uint64_t x145; + uint64_t x146; + uint64_t x147; + uint64_t x148; + uint64_t x149; + uint64_t x150; + uint64_t x151; + uint64_t x152; + uint64_t x153; + uint64_t x154; + uint64_t x155; + uint64_t x156; + uint64_t x157; + uint64_t x158; + fiat_np384_uint1 x159; + uint64_t x160; + fiat_np384_uint1 x161; + uint64_t x162; + fiat_np384_uint1 x163; + uint64_t x164; + fiat_np384_uint1 x165; + uint64_t x166; + fiat_np384_uint1 x167; + uint64_t x168; + uint64_t x169; + fiat_np384_uint1 x170; + uint64_t x171; + fiat_np384_uint1 x172; + uint64_t x173; + fiat_np384_uint1 x174; + uint64_t x175; + fiat_np384_uint1 x176; + uint64_t x177; + fiat_np384_uint1 x178; + uint64_t x179; + fiat_np384_uint1 x180; + uint64_t x181; + fiat_np384_uint1 x182; + uint64_t x183; + uint64_t x184; + uint64_t x185; + uint64_t x186; + uint64_t x187; + uint64_t x188; + uint64_t x189; + uint64_t x190; + uint64_t x191; + uint64_t x192; + uint64_t x193; + uint64_t x194; + uint64_t x195; + uint64_t x196; + uint64_t x197; + fiat_np384_uint1 x198; + uint64_t x199; + fiat_np384_uint1 x200; + uint64_t x201; + fiat_np384_uint1 x202; + uint64_t x203; + fiat_np384_uint1 x204; + uint64_t x205; + fiat_np384_uint1 x206; + uint64_t x207; + uint64_t x208; + fiat_np384_uint1 x209; + uint64_t x210; + fiat_np384_uint1 x211; + uint64_t x212; + fiat_np384_uint1 x213; + uint64_t x214; + fiat_np384_uint1 x215; + uint64_t x216; + fiat_np384_uint1 x217; + uint64_t x218; + fiat_np384_uint1 x219; + uint64_t x220; + fiat_np384_uint1 x221; + uint64_t x222; + uint64_t x223; + uint64_t x224; + uint64_t x225; + uint64_t x226; + uint64_t x227; + uint64_t x228; + uint64_t x229; + uint64_t x230; + uint64_t x231; + uint64_t x232; + uint64_t x233; + uint64_t x234; + uint64_t x235; + fiat_np384_uint1 x236; + uint64_t x237; + fiat_np384_uint1 x238; + uint64_t x239; + fiat_np384_uint1 x240; + uint64_t x241; + fiat_np384_uint1 x242; + uint64_t x243; + fiat_np384_uint1 x244; + uint64_t x245; + uint64_t x246; + fiat_np384_uint1 x247; + uint64_t x248; + fiat_np384_uint1 x249; + uint64_t x250; + fiat_np384_uint1 x251; + uint64_t x252; + fiat_np384_uint1 x253; + uint64_t x254; + fiat_np384_uint1 x255; + uint64_t x256; + fiat_np384_uint1 x257; + uint64_t x258; + fiat_np384_uint1 x259; + uint64_t x260; + uint64_t x261; + uint64_t x262; + uint64_t x263; + uint64_t x264; + uint64_t x265; + uint64_t x266; + uint64_t x267; + uint64_t x268; + uint64_t x269; + uint64_t x270; + uint64_t x271; + uint64_t x272; + uint64_t x273; + uint64_t x274; + fiat_np384_uint1 x275; + uint64_t x276; + fiat_np384_uint1 x277; + uint64_t x278; + fiat_np384_uint1 x279; + uint64_t x280; + fiat_np384_uint1 x281; + uint64_t x282; + fiat_np384_uint1 x283; + uint64_t x284; + uint64_t x285; + fiat_np384_uint1 x286; + uint64_t x287; + fiat_np384_uint1 x288; + uint64_t x289; + fiat_np384_uint1 x290; + uint64_t x291; + fiat_np384_uint1 x292; + uint64_t x293; + fiat_np384_uint1 x294; + uint64_t x295; + fiat_np384_uint1 x296; + uint64_t x297; + fiat_np384_uint1 x298; + uint64_t x299; + uint64_t x300; + uint64_t x301; + uint64_t x302; + uint64_t x303; + uint64_t x304; + uint64_t x305; + uint64_t x306; + uint64_t x307; + uint64_t x308; + uint64_t x309; + uint64_t x310; + uint64_t x311; + uint64_t x312; + fiat_np384_uint1 x313; + uint64_t x314; + fiat_np384_uint1 x315; + uint64_t x316; + fiat_np384_uint1 x317; + uint64_t x318; + fiat_np384_uint1 x319; + uint64_t x320; + fiat_np384_uint1 x321; + uint64_t x322; + uint64_t x323; + fiat_np384_uint1 x324; + uint64_t x325; + fiat_np384_uint1 x326; + uint64_t x327; + fiat_np384_uint1 x328; + uint64_t x329; + fiat_np384_uint1 x330; + uint64_t x331; + fiat_np384_uint1 x332; + uint64_t x333; + fiat_np384_uint1 x334; + uint64_t x335; + fiat_np384_uint1 x336; + uint64_t x337; + uint64_t x338; + uint64_t x339; + uint64_t x340; + uint64_t x341; + uint64_t x342; + uint64_t x343; + uint64_t x344; + uint64_t x345; + uint64_t x346; + uint64_t x347; + uint64_t x348; + uint64_t x349; + uint64_t x350; + uint64_t x351; + fiat_np384_uint1 x352; + uint64_t x353; + fiat_np384_uint1 x354; + uint64_t x355; + fiat_np384_uint1 x356; + uint64_t x357; + fiat_np384_uint1 x358; + uint64_t x359; + fiat_np384_uint1 x360; + uint64_t x361; + uint64_t x362; + fiat_np384_uint1 x363; + uint64_t x364; + fiat_np384_uint1 x365; + uint64_t x366; + fiat_np384_uint1 x367; + uint64_t x368; + fiat_np384_uint1 x369; + uint64_t x370; + fiat_np384_uint1 x371; + uint64_t x372; + fiat_np384_uint1 x373; + uint64_t x374; + fiat_np384_uint1 x375; + uint64_t x376; + uint64_t x377; + uint64_t x378; + uint64_t x379; + uint64_t x380; + uint64_t x381; + uint64_t x382; + uint64_t x383; + uint64_t x384; + uint64_t x385; + uint64_t x386; + uint64_t x387; + uint64_t x388; + uint64_t x389; + fiat_np384_uint1 x390; + uint64_t x391; + fiat_np384_uint1 x392; + uint64_t x393; + fiat_np384_uint1 x394; + uint64_t x395; + fiat_np384_uint1 x396; + uint64_t x397; + fiat_np384_uint1 x398; + uint64_t x399; + uint64_t x400; + fiat_np384_uint1 x401; + uint64_t x402; + fiat_np384_uint1 x403; + uint64_t x404; + fiat_np384_uint1 x405; + uint64_t x406; + fiat_np384_uint1 x407; + uint64_t x408; + fiat_np384_uint1 x409; + uint64_t x410; + fiat_np384_uint1 x411; + uint64_t x412; + fiat_np384_uint1 x413; + uint64_t x414; + uint64_t x415; + uint64_t x416; + uint64_t x417; + uint64_t x418; + uint64_t x419; + uint64_t x420; + uint64_t x421; + uint64_t x422; + uint64_t x423; + uint64_t x424; + uint64_t x425; + uint64_t x426; + uint64_t x427; + uint64_t x428; + fiat_np384_uint1 x429; + uint64_t x430; + fiat_np384_uint1 x431; + uint64_t x432; + fiat_np384_uint1 x433; + uint64_t x434; + fiat_np384_uint1 x435; + uint64_t x436; + fiat_np384_uint1 x437; + uint64_t x438; + uint64_t x439; + fiat_np384_uint1 x440; + uint64_t x441; + fiat_np384_uint1 x442; + uint64_t x443; + fiat_np384_uint1 x444; + uint64_t x445; + fiat_np384_uint1 x446; + uint64_t x447; + fiat_np384_uint1 x448; + uint64_t x449; + fiat_np384_uint1 x450; + uint64_t x451; + fiat_np384_uint1 x452; + uint64_t x453; + uint64_t x454; + fiat_np384_uint1 x455; + uint64_t x456; + fiat_np384_uint1 x457; + uint64_t x458; + fiat_np384_uint1 x459; + uint64_t x460; + fiat_np384_uint1 x461; + uint64_t x462; + fiat_np384_uint1 x463; + uint64_t x464; + fiat_np384_uint1 x465; + uint64_t x466; + fiat_np384_uint1 x467; + uint64_t x468; + uint64_t x469; + uint64_t x470; + uint64_t x471; + uint64_t x472; + uint64_t x473; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[0]); + fiat_np384_mulx_u64(&x7, &x8, x6, (arg2[5])); + fiat_np384_mulx_u64(&x9, &x10, x6, (arg2[4])); + fiat_np384_mulx_u64(&x11, &x12, x6, (arg2[3])); + fiat_np384_mulx_u64(&x13, &x14, x6, (arg2[2])); + fiat_np384_mulx_u64(&x15, &x16, x6, (arg2[1])); + fiat_np384_mulx_u64(&x17, &x18, x6, (arg2[0])); + fiat_np384_addcarryx_u64(&x19, &x20, 0x0, x18, x15); + fiat_np384_addcarryx_u64(&x21, &x22, x20, x16, x13); + fiat_np384_addcarryx_u64(&x23, &x24, x22, x14, x11); + fiat_np384_addcarryx_u64(&x25, &x26, x24, x12, x9); + fiat_np384_addcarryx_u64(&x27, &x28, x26, x10, x7); + x29 = (x28 + x8); + fiat_np384_mulx_u64(&x30, &x31, x17, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x32, &x33, x30, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x34, &x35, x30, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x36, &x37, x30, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x38, &x39, x30, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x40, &x41, x30, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x42, &x43, x30, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x44, &x45, 0x0, x43, x40); + fiat_np384_addcarryx_u64(&x46, &x47, x45, x41, x38); + fiat_np384_addcarryx_u64(&x48, &x49, x47, x39, x36); + fiat_np384_addcarryx_u64(&x50, &x51, x49, x37, x34); + fiat_np384_addcarryx_u64(&x52, &x53, x51, x35, x32); + x54 = (x53 + x33); + fiat_np384_addcarryx_u64(&x55, &x56, 0x0, x17, x42); + fiat_np384_addcarryx_u64(&x57, &x58, x56, x19, x44); + fiat_np384_addcarryx_u64(&x59, &x60, x58, x21, x46); + fiat_np384_addcarryx_u64(&x61, &x62, x60, x23, x48); + fiat_np384_addcarryx_u64(&x63, &x64, x62, x25, x50); + fiat_np384_addcarryx_u64(&x65, &x66, x64, x27, x52); + fiat_np384_addcarryx_u64(&x67, &x68, x66, x29, x54); + fiat_np384_mulx_u64(&x69, &x70, x1, (arg2[5])); + fiat_np384_mulx_u64(&x71, &x72, x1, (arg2[4])); + fiat_np384_mulx_u64(&x73, &x74, x1, (arg2[3])); + fiat_np384_mulx_u64(&x75, &x76, x1, (arg2[2])); + fiat_np384_mulx_u64(&x77, &x78, x1, (arg2[1])); + fiat_np384_mulx_u64(&x79, &x80, x1, (arg2[0])); + fiat_np384_addcarryx_u64(&x81, &x82, 0x0, x80, x77); + fiat_np384_addcarryx_u64(&x83, &x84, x82, x78, x75); + fiat_np384_addcarryx_u64(&x85, &x86, x84, x76, x73); + fiat_np384_addcarryx_u64(&x87, &x88, x86, x74, x71); + fiat_np384_addcarryx_u64(&x89, &x90, x88, x72, x69); + x91 = (x90 + x70); + fiat_np384_addcarryx_u64(&x92, &x93, 0x0, x57, x79); + fiat_np384_addcarryx_u64(&x94, &x95, x93, x59, x81); + fiat_np384_addcarryx_u64(&x96, &x97, x95, x61, x83); + fiat_np384_addcarryx_u64(&x98, &x99, x97, x63, x85); + fiat_np384_addcarryx_u64(&x100, &x101, x99, x65, x87); + fiat_np384_addcarryx_u64(&x102, &x103, x101, x67, x89); + fiat_np384_addcarryx_u64(&x104, &x105, x103, x68, x91); + fiat_np384_mulx_u64(&x106, &x107, x92, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x108, &x109, x106, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x110, &x111, x106, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x112, &x113, x106, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x114, &x115, x106, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x116, &x117, x106, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x118, &x119, x106, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x120, &x121, 0x0, x119, x116); + fiat_np384_addcarryx_u64(&x122, &x123, x121, x117, x114); + fiat_np384_addcarryx_u64(&x124, &x125, x123, x115, x112); + fiat_np384_addcarryx_u64(&x126, &x127, x125, x113, x110); + fiat_np384_addcarryx_u64(&x128, &x129, x127, x111, x108); + x130 = (x129 + x109); + fiat_np384_addcarryx_u64(&x131, &x132, 0x0, x92, x118); + fiat_np384_addcarryx_u64(&x133, &x134, x132, x94, x120); + fiat_np384_addcarryx_u64(&x135, &x136, x134, x96, x122); + fiat_np384_addcarryx_u64(&x137, &x138, x136, x98, x124); + fiat_np384_addcarryx_u64(&x139, &x140, x138, x100, x126); + fiat_np384_addcarryx_u64(&x141, &x142, x140, x102, x128); + fiat_np384_addcarryx_u64(&x143, &x144, x142, x104, x130); + x145 = ((uint64_t)x144 + x105); + fiat_np384_mulx_u64(&x146, &x147, x2, (arg2[5])); + fiat_np384_mulx_u64(&x148, &x149, x2, (arg2[4])); + fiat_np384_mulx_u64(&x150, &x151, x2, (arg2[3])); + fiat_np384_mulx_u64(&x152, &x153, x2, (arg2[2])); + fiat_np384_mulx_u64(&x154, &x155, x2, (arg2[1])); + fiat_np384_mulx_u64(&x156, &x157, x2, (arg2[0])); + fiat_np384_addcarryx_u64(&x158, &x159, 0x0, x157, x154); + fiat_np384_addcarryx_u64(&x160, &x161, x159, x155, x152); + fiat_np384_addcarryx_u64(&x162, &x163, x161, x153, x150); + fiat_np384_addcarryx_u64(&x164, &x165, x163, x151, x148); + fiat_np384_addcarryx_u64(&x166, &x167, x165, x149, x146); + x168 = (x167 + x147); + fiat_np384_addcarryx_u64(&x169, &x170, 0x0, x133, x156); + fiat_np384_addcarryx_u64(&x171, &x172, x170, x135, x158); + fiat_np384_addcarryx_u64(&x173, &x174, x172, x137, x160); + fiat_np384_addcarryx_u64(&x175, &x176, x174, x139, x162); + fiat_np384_addcarryx_u64(&x177, &x178, x176, x141, x164); + fiat_np384_addcarryx_u64(&x179, &x180, x178, x143, x166); + fiat_np384_addcarryx_u64(&x181, &x182, x180, x145, x168); + fiat_np384_mulx_u64(&x183, &x184, x169, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x185, &x186, x183, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x187, &x188, x183, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x189, &x190, x183, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x191, &x192, x183, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x193, &x194, x183, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x195, &x196, x183, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x197, &x198, 0x0, x196, x193); + fiat_np384_addcarryx_u64(&x199, &x200, x198, x194, x191); + fiat_np384_addcarryx_u64(&x201, &x202, x200, x192, x189); + fiat_np384_addcarryx_u64(&x203, &x204, x202, x190, x187); + fiat_np384_addcarryx_u64(&x205, &x206, x204, x188, x185); + x207 = (x206 + x186); + fiat_np384_addcarryx_u64(&x208, &x209, 0x0, x169, x195); + fiat_np384_addcarryx_u64(&x210, &x211, x209, x171, x197); + fiat_np384_addcarryx_u64(&x212, &x213, x211, x173, x199); + fiat_np384_addcarryx_u64(&x214, &x215, x213, x175, x201); + fiat_np384_addcarryx_u64(&x216, &x217, x215, x177, x203); + fiat_np384_addcarryx_u64(&x218, &x219, x217, x179, x205); + fiat_np384_addcarryx_u64(&x220, &x221, x219, x181, x207); + x222 = ((uint64_t)x221 + x182); + fiat_np384_mulx_u64(&x223, &x224, x3, (arg2[5])); + fiat_np384_mulx_u64(&x225, &x226, x3, (arg2[4])); + fiat_np384_mulx_u64(&x227, &x228, x3, (arg2[3])); + fiat_np384_mulx_u64(&x229, &x230, x3, (arg2[2])); + fiat_np384_mulx_u64(&x231, &x232, x3, (arg2[1])); + fiat_np384_mulx_u64(&x233, &x234, x3, (arg2[0])); + fiat_np384_addcarryx_u64(&x235, &x236, 0x0, x234, x231); + fiat_np384_addcarryx_u64(&x237, &x238, x236, x232, x229); + fiat_np384_addcarryx_u64(&x239, &x240, x238, x230, x227); + fiat_np384_addcarryx_u64(&x241, &x242, x240, x228, x225); + fiat_np384_addcarryx_u64(&x243, &x244, x242, x226, x223); + x245 = (x244 + x224); + fiat_np384_addcarryx_u64(&x246, &x247, 0x0, x210, x233); + fiat_np384_addcarryx_u64(&x248, &x249, x247, x212, x235); + fiat_np384_addcarryx_u64(&x250, &x251, x249, x214, x237); + fiat_np384_addcarryx_u64(&x252, &x253, x251, x216, x239); + fiat_np384_addcarryx_u64(&x254, &x255, x253, x218, x241); + fiat_np384_addcarryx_u64(&x256, &x257, x255, x220, x243); + fiat_np384_addcarryx_u64(&x258, &x259, x257, x222, x245); + fiat_np384_mulx_u64(&x260, &x261, x246, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x262, &x263, x260, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x264, &x265, x260, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x266, &x267, x260, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x268, &x269, x260, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x270, &x271, x260, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x272, &x273, x260, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x274, &x275, 0x0, x273, x270); + fiat_np384_addcarryx_u64(&x276, &x277, x275, x271, x268); + fiat_np384_addcarryx_u64(&x278, &x279, x277, x269, x266); + fiat_np384_addcarryx_u64(&x280, &x281, x279, x267, x264); + fiat_np384_addcarryx_u64(&x282, &x283, x281, x265, x262); + x284 = (x283 + x263); + fiat_np384_addcarryx_u64(&x285, &x286, 0x0, x246, x272); + fiat_np384_addcarryx_u64(&x287, &x288, x286, x248, x274); + fiat_np384_addcarryx_u64(&x289, &x290, x288, x250, x276); + fiat_np384_addcarryx_u64(&x291, &x292, x290, x252, x278); + fiat_np384_addcarryx_u64(&x293, &x294, x292, x254, x280); + fiat_np384_addcarryx_u64(&x295, &x296, x294, x256, x282); + fiat_np384_addcarryx_u64(&x297, &x298, x296, x258, x284); + x299 = ((uint64_t)x298 + x259); + fiat_np384_mulx_u64(&x300, &x301, x4, (arg2[5])); + fiat_np384_mulx_u64(&x302, &x303, x4, (arg2[4])); + fiat_np384_mulx_u64(&x304, &x305, x4, (arg2[3])); + fiat_np384_mulx_u64(&x306, &x307, x4, (arg2[2])); + fiat_np384_mulx_u64(&x308, &x309, x4, (arg2[1])); + fiat_np384_mulx_u64(&x310, &x311, x4, (arg2[0])); + fiat_np384_addcarryx_u64(&x312, &x313, 0x0, x311, x308); + fiat_np384_addcarryx_u64(&x314, &x315, x313, x309, x306); + fiat_np384_addcarryx_u64(&x316, &x317, x315, x307, x304); + fiat_np384_addcarryx_u64(&x318, &x319, x317, x305, x302); + fiat_np384_addcarryx_u64(&x320, &x321, x319, x303, x300); + x322 = (x321 + x301); + fiat_np384_addcarryx_u64(&x323, &x324, 0x0, x287, x310); + fiat_np384_addcarryx_u64(&x325, &x326, x324, x289, x312); + fiat_np384_addcarryx_u64(&x327, &x328, x326, x291, x314); + fiat_np384_addcarryx_u64(&x329, &x330, x328, x293, x316); + fiat_np384_addcarryx_u64(&x331, &x332, x330, x295, x318); + fiat_np384_addcarryx_u64(&x333, &x334, x332, x297, x320); + fiat_np384_addcarryx_u64(&x335, &x336, x334, x299, x322); + fiat_np384_mulx_u64(&x337, &x338, x323, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x339, &x340, x337, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x341, &x342, x337, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x343, &x344, x337, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x345, &x346, x337, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x347, &x348, x337, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x349, &x350, x337, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x351, &x352, 0x0, x350, x347); + fiat_np384_addcarryx_u64(&x353, &x354, x352, x348, x345); + fiat_np384_addcarryx_u64(&x355, &x356, x354, x346, x343); + fiat_np384_addcarryx_u64(&x357, &x358, x356, x344, x341); + fiat_np384_addcarryx_u64(&x359, &x360, x358, x342, x339); + x361 = (x360 + x340); + fiat_np384_addcarryx_u64(&x362, &x363, 0x0, x323, x349); + fiat_np384_addcarryx_u64(&x364, &x365, x363, x325, x351); + fiat_np384_addcarryx_u64(&x366, &x367, x365, x327, x353); + fiat_np384_addcarryx_u64(&x368, &x369, x367, x329, x355); + fiat_np384_addcarryx_u64(&x370, &x371, x369, x331, x357); + fiat_np384_addcarryx_u64(&x372, &x373, x371, x333, x359); + fiat_np384_addcarryx_u64(&x374, &x375, x373, x335, x361); + x376 = ((uint64_t)x375 + x336); + fiat_np384_mulx_u64(&x377, &x378, x5, (arg2[5])); + fiat_np384_mulx_u64(&x379, &x380, x5, (arg2[4])); + fiat_np384_mulx_u64(&x381, &x382, x5, (arg2[3])); + fiat_np384_mulx_u64(&x383, &x384, x5, (arg2[2])); + fiat_np384_mulx_u64(&x385, &x386, x5, (arg2[1])); + fiat_np384_mulx_u64(&x387, &x388, x5, (arg2[0])); + fiat_np384_addcarryx_u64(&x389, &x390, 0x0, x388, x385); + fiat_np384_addcarryx_u64(&x391, &x392, x390, x386, x383); + fiat_np384_addcarryx_u64(&x393, &x394, x392, x384, x381); + fiat_np384_addcarryx_u64(&x395, &x396, x394, x382, x379); + fiat_np384_addcarryx_u64(&x397, &x398, x396, x380, x377); + x399 = (x398 + x378); + fiat_np384_addcarryx_u64(&x400, &x401, 0x0, x364, x387); + fiat_np384_addcarryx_u64(&x402, &x403, x401, x366, x389); + fiat_np384_addcarryx_u64(&x404, &x405, x403, x368, x391); + fiat_np384_addcarryx_u64(&x406, &x407, x405, x370, x393); + fiat_np384_addcarryx_u64(&x408, &x409, x407, x372, x395); + fiat_np384_addcarryx_u64(&x410, &x411, x409, x374, x397); + fiat_np384_addcarryx_u64(&x412, &x413, x411, x376, x399); + fiat_np384_mulx_u64(&x414, &x415, x400, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x416, &x417, x414, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x418, &x419, x414, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x420, &x421, x414, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x422, &x423, x414, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x424, &x425, x414, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x426, &x427, x414, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x428, &x429, 0x0, x427, x424); + fiat_np384_addcarryx_u64(&x430, &x431, x429, x425, x422); + fiat_np384_addcarryx_u64(&x432, &x433, x431, x423, x420); + fiat_np384_addcarryx_u64(&x434, &x435, x433, x421, x418); + fiat_np384_addcarryx_u64(&x436, &x437, x435, x419, x416); + x438 = (x437 + x417); + fiat_np384_addcarryx_u64(&x439, &x440, 0x0, x400, x426); + fiat_np384_addcarryx_u64(&x441, &x442, x440, x402, x428); + fiat_np384_addcarryx_u64(&x443, &x444, x442, x404, x430); + fiat_np384_addcarryx_u64(&x445, &x446, x444, x406, x432); + fiat_np384_addcarryx_u64(&x447, &x448, x446, x408, x434); + fiat_np384_addcarryx_u64(&x449, &x450, x448, x410, x436); + fiat_np384_addcarryx_u64(&x451, &x452, x450, x412, x438); + x453 = ((uint64_t)x452 + x413); + fiat_np384_subborrowx_u64(&x454, &x455, 0x0, x441, UINT64_C(0xecec196accc52973)); + fiat_np384_subborrowx_u64(&x456, &x457, x455, x443, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_subborrowx_u64(&x458, &x459, x457, x445, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_subborrowx_u64(&x460, &x461, x459, x447, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x462, &x463, x461, x449, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x464, &x465, x463, x451, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x466, &x467, x465, x453, 0x0); + fiat_np384_cmovznz_u64(&x468, x467, x454, x441); + fiat_np384_cmovznz_u64(&x469, x467, x456, x443); + fiat_np384_cmovznz_u64(&x470, x467, x458, x445); + fiat_np384_cmovznz_u64(&x471, x467, x460, x447); + fiat_np384_cmovznz_u64(&x472, x467, x462, x449); + fiat_np384_cmovznz_u64(&x473, x467, x464, x451); + out1[0] = x468; + out1[1] = x469; + out1[2] = x470; + out1[3] = x471; + out1[4] = x472; + out1[5] = x473; +} + +/* + * The function fiat_np384_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np384_add(uint64_t out1[6], const uint64_t arg1[6], const uint64_t arg2[6]) { + uint64_t x1; + fiat_np384_uint1 x2; + uint64_t x3; + fiat_np384_uint1 x4; + uint64_t x5; + fiat_np384_uint1 x6; + uint64_t x7; + fiat_np384_uint1 x8; + uint64_t x9; + fiat_np384_uint1 x10; + uint64_t x11; + fiat_np384_uint1 x12; + uint64_t x13; + fiat_np384_uint1 x14; + uint64_t x15; + fiat_np384_uint1 x16; + uint64_t x17; + fiat_np384_uint1 x18; + uint64_t x19; + fiat_np384_uint1 x20; + uint64_t x21; + fiat_np384_uint1 x22; + uint64_t x23; + fiat_np384_uint1 x24; + uint64_t x25; + fiat_np384_uint1 x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint64_t x32; + fiat_np384_addcarryx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_np384_addcarryx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_np384_addcarryx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_np384_addcarryx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_np384_addcarryx_u64(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_np384_addcarryx_u64(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_np384_subborrowx_u64(&x13, &x14, 0x0, x1, UINT64_C(0xecec196accc52973)); + fiat_np384_subborrowx_u64(&x15, &x16, x14, x3, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_subborrowx_u64(&x17, &x18, x16, x5, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_subborrowx_u64(&x19, &x20, x18, x7, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x21, &x22, x20, x9, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x23, &x24, x22, x11, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x25, &x26, x24, x12, 0x0); + fiat_np384_cmovznz_u64(&x27, x26, x13, x1); + fiat_np384_cmovznz_u64(&x28, x26, x15, x3); + fiat_np384_cmovznz_u64(&x29, x26, x17, x5); + fiat_np384_cmovznz_u64(&x30, x26, x19, x7); + fiat_np384_cmovznz_u64(&x31, x26, x21, x9); + fiat_np384_cmovznz_u64(&x32, x26, x23, x11); + out1[0] = x27; + out1[1] = x28; + out1[2] = x29; + out1[3] = x30; + out1[4] = x31; + out1[5] = x32; +} + +/* + * The function fiat_np384_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np384_opp(uint64_t out1[6], const uint64_t arg1[6]) { + uint64_t x1; + fiat_np384_uint1 x2; + uint64_t x3; + fiat_np384_uint1 x4; + uint64_t x5; + fiat_np384_uint1 x6; + uint64_t x7; + fiat_np384_uint1 x8; + uint64_t x9; + fiat_np384_uint1 x10; + uint64_t x11; + fiat_np384_uint1 x12; + uint64_t x13; + uint64_t x14; + fiat_np384_uint1 x15; + uint64_t x16; + fiat_np384_uint1 x17; + uint64_t x18; + fiat_np384_uint1 x19; + uint64_t x20; + fiat_np384_uint1 x21; + uint64_t x22; + fiat_np384_uint1 x23; + uint64_t x24; + fiat_np384_uint1 x25; + fiat_np384_subborrowx_u64(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_np384_subborrowx_u64(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_np384_subborrowx_u64(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_np384_subborrowx_u64(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_np384_subborrowx_u64(&x9, &x10, x8, 0x0, (arg1[4])); + fiat_np384_subborrowx_u64(&x11, &x12, x10, 0x0, (arg1[5])); + fiat_np384_cmovznz_u64(&x13, x12, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_np384_addcarryx_u64(&x14, &x15, 0x0, x1, (x13 & UINT64_C(0xecec196accc52973))); + fiat_np384_addcarryx_u64(&x16, &x17, x15, x3, (x13 & UINT64_C(0x581a0db248b0a77a))); + fiat_np384_addcarryx_u64(&x18, &x19, x17, x5, (x13 & UINT64_C(0xc7634d81f4372ddf))); + fiat_np384_addcarryx_u64(&x20, &x21, x19, x7, x13); + fiat_np384_addcarryx_u64(&x22, &x23, x21, x9, x13); + fiat_np384_addcarryx_u64(&x24, &x25, x23, x11, x13); + out1[0] = x14; + out1[1] = x16; + out1[2] = x18; + out1[3] = x20; + out1[4] = x22; + out1[5] = x24; +} + +/* + * The function fiat_np384_from_montgomery translates a field element out of the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^64)⁻¹ mod m)^6) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np384_from_montgomery(uint64_t out1[6], const uint64_t arg1[6]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + fiat_np384_uint1 x17; + uint64_t x18; + fiat_np384_uint1 x19; + uint64_t x20; + fiat_np384_uint1 x21; + uint64_t x22; + fiat_np384_uint1 x23; + uint64_t x24; + fiat_np384_uint1 x25; + uint64_t x26; + fiat_np384_uint1 x27; + uint64_t x28; + fiat_np384_uint1 x29; + uint64_t x30; + fiat_np384_uint1 x31; + uint64_t x32; + fiat_np384_uint1 x33; + uint64_t x34; + fiat_np384_uint1 x35; + uint64_t x36; + fiat_np384_uint1 x37; + uint64_t x38; + fiat_np384_uint1 x39; + uint64_t x40; + fiat_np384_uint1 x41; + uint64_t x42; + fiat_np384_uint1 x43; + uint64_t x44; + fiat_np384_uint1 x45; + uint64_t x46; + fiat_np384_uint1 x47; + uint64_t x48; + fiat_np384_uint1 x49; + uint64_t x50; + fiat_np384_uint1 x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint64_t x57; + uint64_t x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + uint64_t x65; + uint64_t x66; + fiat_np384_uint1 x67; + uint64_t x68; + fiat_np384_uint1 x69; + uint64_t x70; + fiat_np384_uint1 x71; + uint64_t x72; + fiat_np384_uint1 x73; + uint64_t x74; + fiat_np384_uint1 x75; + uint64_t x76; + fiat_np384_uint1 x77; + uint64_t x78; + fiat_np384_uint1 x79; + uint64_t x80; + fiat_np384_uint1 x81; + uint64_t x82; + fiat_np384_uint1 x83; + uint64_t x84; + fiat_np384_uint1 x85; + uint64_t x86; + fiat_np384_uint1 x87; + uint64_t x88; + fiat_np384_uint1 x89; + uint64_t x90; + fiat_np384_uint1 x91; + uint64_t x92; + fiat_np384_uint1 x93; + uint64_t x94; + fiat_np384_uint1 x95; + uint64_t x96; + fiat_np384_uint1 x97; + uint64_t x98; + fiat_np384_uint1 x99; + uint64_t x100; + fiat_np384_uint1 x101; + uint64_t x102; + uint64_t x103; + uint64_t x104; + uint64_t x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + uint64_t x109; + uint64_t x110; + uint64_t x111; + uint64_t x112; + uint64_t x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + fiat_np384_uint1 x117; + uint64_t x118; + fiat_np384_uint1 x119; + uint64_t x120; + fiat_np384_uint1 x121; + uint64_t x122; + fiat_np384_uint1 x123; + uint64_t x124; + fiat_np384_uint1 x125; + uint64_t x126; + fiat_np384_uint1 x127; + uint64_t x128; + fiat_np384_uint1 x129; + uint64_t x130; + fiat_np384_uint1 x131; + uint64_t x132; + fiat_np384_uint1 x133; + uint64_t x134; + fiat_np384_uint1 x135; + uint64_t x136; + fiat_np384_uint1 x137; + uint64_t x138; + fiat_np384_uint1 x139; + uint64_t x140; + fiat_np384_uint1 x141; + uint64_t x142; + fiat_np384_uint1 x143; + uint64_t x144; + fiat_np384_uint1 x145; + uint64_t x146; + fiat_np384_uint1 x147; + uint64_t x148; + fiat_np384_uint1 x149; + uint64_t x150; + fiat_np384_uint1 x151; + uint64_t x152; + uint64_t x153; + uint64_t x154; + uint64_t x155; + uint64_t x156; + uint64_t x157; + uint64_t x158; + uint64_t x159; + uint64_t x160; + uint64_t x161; + uint64_t x162; + uint64_t x163; + uint64_t x164; + uint64_t x165; + uint64_t x166; + fiat_np384_uint1 x167; + uint64_t x168; + fiat_np384_uint1 x169; + uint64_t x170; + fiat_np384_uint1 x171; + uint64_t x172; + fiat_np384_uint1 x173; + uint64_t x174; + fiat_np384_uint1 x175; + uint64_t x176; + fiat_np384_uint1 x177; + uint64_t x178; + fiat_np384_uint1 x179; + uint64_t x180; + fiat_np384_uint1 x181; + uint64_t x182; + fiat_np384_uint1 x183; + uint64_t x184; + fiat_np384_uint1 x185; + uint64_t x186; + fiat_np384_uint1 x187; + uint64_t x188; + fiat_np384_uint1 x189; + uint64_t x190; + fiat_np384_uint1 x191; + uint64_t x192; + fiat_np384_uint1 x193; + uint64_t x194; + fiat_np384_uint1 x195; + uint64_t x196; + fiat_np384_uint1 x197; + uint64_t x198; + fiat_np384_uint1 x199; + uint64_t x200; + fiat_np384_uint1 x201; + uint64_t x202; + uint64_t x203; + uint64_t x204; + uint64_t x205; + uint64_t x206; + uint64_t x207; + uint64_t x208; + uint64_t x209; + uint64_t x210; + uint64_t x211; + uint64_t x212; + uint64_t x213; + uint64_t x214; + uint64_t x215; + uint64_t x216; + fiat_np384_uint1 x217; + uint64_t x218; + fiat_np384_uint1 x219; + uint64_t x220; + fiat_np384_uint1 x221; + uint64_t x222; + fiat_np384_uint1 x223; + uint64_t x224; + fiat_np384_uint1 x225; + uint64_t x226; + fiat_np384_uint1 x227; + uint64_t x228; + fiat_np384_uint1 x229; + uint64_t x230; + fiat_np384_uint1 x231; + uint64_t x232; + fiat_np384_uint1 x233; + uint64_t x234; + fiat_np384_uint1 x235; + uint64_t x236; + fiat_np384_uint1 x237; + uint64_t x238; + fiat_np384_uint1 x239; + uint64_t x240; + fiat_np384_uint1 x241; + uint64_t x242; + fiat_np384_uint1 x243; + uint64_t x244; + fiat_np384_uint1 x245; + uint64_t x246; + fiat_np384_uint1 x247; + uint64_t x248; + fiat_np384_uint1 x249; + uint64_t x250; + fiat_np384_uint1 x251; + uint64_t x252; + uint64_t x253; + uint64_t x254; + uint64_t x255; + uint64_t x256; + uint64_t x257; + uint64_t x258; + uint64_t x259; + uint64_t x260; + uint64_t x261; + uint64_t x262; + uint64_t x263; + uint64_t x264; + uint64_t x265; + uint64_t x266; + fiat_np384_uint1 x267; + uint64_t x268; + fiat_np384_uint1 x269; + uint64_t x270; + fiat_np384_uint1 x271; + uint64_t x272; + fiat_np384_uint1 x273; + uint64_t x274; + fiat_np384_uint1 x275; + uint64_t x276; + fiat_np384_uint1 x277; + uint64_t x278; + fiat_np384_uint1 x279; + uint64_t x280; + fiat_np384_uint1 x281; + uint64_t x282; + fiat_np384_uint1 x283; + uint64_t x284; + fiat_np384_uint1 x285; + uint64_t x286; + fiat_np384_uint1 x287; + uint64_t x288; + fiat_np384_uint1 x289; + uint64_t x290; + fiat_np384_uint1 x291; + uint64_t x292; + fiat_np384_uint1 x293; + uint64_t x294; + fiat_np384_uint1 x295; + uint64_t x296; + fiat_np384_uint1 x297; + uint64_t x298; + fiat_np384_uint1 x299; + uint64_t x300; + fiat_np384_uint1 x301; + uint64_t x302; + fiat_np384_uint1 x303; + uint64_t x304; + uint64_t x305; + uint64_t x306; + uint64_t x307; + uint64_t x308; + uint64_t x309; + x1 = (arg1[0]); + fiat_np384_mulx_u64(&x2, &x3, x1, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x4, &x5, x2, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x6, &x7, x2, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x8, &x9, x2, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x10, &x11, x2, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x12, &x13, x2, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x14, &x15, x2, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x16, &x17, 0x0, x15, x12); + fiat_np384_addcarryx_u64(&x18, &x19, x17, x13, x10); + fiat_np384_addcarryx_u64(&x20, &x21, x19, x11, x8); + fiat_np384_addcarryx_u64(&x22, &x23, x21, x9, x6); + fiat_np384_addcarryx_u64(&x24, &x25, x23, x7, x4); + fiat_np384_addcarryx_u64(&x26, &x27, 0x0, x1, x14); + fiat_np384_addcarryx_u64(&x28, &x29, x27, 0x0, x16); + fiat_np384_addcarryx_u64(&x30, &x31, x29, 0x0, x18); + fiat_np384_addcarryx_u64(&x32, &x33, x31, 0x0, x20); + fiat_np384_addcarryx_u64(&x34, &x35, x33, 0x0, x22); + fiat_np384_addcarryx_u64(&x36, &x37, x35, 0x0, x24); + fiat_np384_addcarryx_u64(&x38, &x39, x37, 0x0, (x25 + x5)); + fiat_np384_addcarryx_u64(&x40, &x41, 0x0, x28, (arg1[1])); + fiat_np384_addcarryx_u64(&x42, &x43, x41, x30, 0x0); + fiat_np384_addcarryx_u64(&x44, &x45, x43, x32, 0x0); + fiat_np384_addcarryx_u64(&x46, &x47, x45, x34, 0x0); + fiat_np384_addcarryx_u64(&x48, &x49, x47, x36, 0x0); + fiat_np384_addcarryx_u64(&x50, &x51, x49, x38, 0x0); + fiat_np384_mulx_u64(&x52, &x53, x40, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x54, &x55, x52, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x56, &x57, x52, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x58, &x59, x52, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x60, &x61, x52, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x62, &x63, x52, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x64, &x65, x52, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x66, &x67, 0x0, x65, x62); + fiat_np384_addcarryx_u64(&x68, &x69, x67, x63, x60); + fiat_np384_addcarryx_u64(&x70, &x71, x69, x61, x58); + fiat_np384_addcarryx_u64(&x72, &x73, x71, x59, x56); + fiat_np384_addcarryx_u64(&x74, &x75, x73, x57, x54); + fiat_np384_addcarryx_u64(&x76, &x77, 0x0, x40, x64); + fiat_np384_addcarryx_u64(&x78, &x79, x77, x42, x66); + fiat_np384_addcarryx_u64(&x80, &x81, x79, x44, x68); + fiat_np384_addcarryx_u64(&x82, &x83, x81, x46, x70); + fiat_np384_addcarryx_u64(&x84, &x85, x83, x48, x72); + fiat_np384_addcarryx_u64(&x86, &x87, x85, x50, x74); + fiat_np384_addcarryx_u64(&x88, &x89, x87, ((uint64_t)x51 + x39), (x75 + x55)); + fiat_np384_addcarryx_u64(&x90, &x91, 0x0, x78, (arg1[2])); + fiat_np384_addcarryx_u64(&x92, &x93, x91, x80, 0x0); + fiat_np384_addcarryx_u64(&x94, &x95, x93, x82, 0x0); + fiat_np384_addcarryx_u64(&x96, &x97, x95, x84, 0x0); + fiat_np384_addcarryx_u64(&x98, &x99, x97, x86, 0x0); + fiat_np384_addcarryx_u64(&x100, &x101, x99, x88, 0x0); + fiat_np384_mulx_u64(&x102, &x103, x90, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x104, &x105, x102, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x106, &x107, x102, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x108, &x109, x102, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x110, &x111, x102, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x112, &x113, x102, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x114, &x115, x102, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x116, &x117, 0x0, x115, x112); + fiat_np384_addcarryx_u64(&x118, &x119, x117, x113, x110); + fiat_np384_addcarryx_u64(&x120, &x121, x119, x111, x108); + fiat_np384_addcarryx_u64(&x122, &x123, x121, x109, x106); + fiat_np384_addcarryx_u64(&x124, &x125, x123, x107, x104); + fiat_np384_addcarryx_u64(&x126, &x127, 0x0, x90, x114); + fiat_np384_addcarryx_u64(&x128, &x129, x127, x92, x116); + fiat_np384_addcarryx_u64(&x130, &x131, x129, x94, x118); + fiat_np384_addcarryx_u64(&x132, &x133, x131, x96, x120); + fiat_np384_addcarryx_u64(&x134, &x135, x133, x98, x122); + fiat_np384_addcarryx_u64(&x136, &x137, x135, x100, x124); + fiat_np384_addcarryx_u64(&x138, &x139, x137, ((uint64_t)x101 + x89), (x125 + x105)); + fiat_np384_addcarryx_u64(&x140, &x141, 0x0, x128, (arg1[3])); + fiat_np384_addcarryx_u64(&x142, &x143, x141, x130, 0x0); + fiat_np384_addcarryx_u64(&x144, &x145, x143, x132, 0x0); + fiat_np384_addcarryx_u64(&x146, &x147, x145, x134, 0x0); + fiat_np384_addcarryx_u64(&x148, &x149, x147, x136, 0x0); + fiat_np384_addcarryx_u64(&x150, &x151, x149, x138, 0x0); + fiat_np384_mulx_u64(&x152, &x153, x140, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x154, &x155, x152, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x156, &x157, x152, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x158, &x159, x152, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x160, &x161, x152, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x162, &x163, x152, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x164, &x165, x152, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x166, &x167, 0x0, x165, x162); + fiat_np384_addcarryx_u64(&x168, &x169, x167, x163, x160); + fiat_np384_addcarryx_u64(&x170, &x171, x169, x161, x158); + fiat_np384_addcarryx_u64(&x172, &x173, x171, x159, x156); + fiat_np384_addcarryx_u64(&x174, &x175, x173, x157, x154); + fiat_np384_addcarryx_u64(&x176, &x177, 0x0, x140, x164); + fiat_np384_addcarryx_u64(&x178, &x179, x177, x142, x166); + fiat_np384_addcarryx_u64(&x180, &x181, x179, x144, x168); + fiat_np384_addcarryx_u64(&x182, &x183, x181, x146, x170); + fiat_np384_addcarryx_u64(&x184, &x185, x183, x148, x172); + fiat_np384_addcarryx_u64(&x186, &x187, x185, x150, x174); + fiat_np384_addcarryx_u64(&x188, &x189, x187, ((uint64_t)x151 + x139), (x175 + x155)); + fiat_np384_addcarryx_u64(&x190, &x191, 0x0, x178, (arg1[4])); + fiat_np384_addcarryx_u64(&x192, &x193, x191, x180, 0x0); + fiat_np384_addcarryx_u64(&x194, &x195, x193, x182, 0x0); + fiat_np384_addcarryx_u64(&x196, &x197, x195, x184, 0x0); + fiat_np384_addcarryx_u64(&x198, &x199, x197, x186, 0x0); + fiat_np384_addcarryx_u64(&x200, &x201, x199, x188, 0x0); + fiat_np384_mulx_u64(&x202, &x203, x190, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x204, &x205, x202, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x206, &x207, x202, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x208, &x209, x202, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x210, &x211, x202, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x212, &x213, x202, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x214, &x215, x202, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x216, &x217, 0x0, x215, x212); + fiat_np384_addcarryx_u64(&x218, &x219, x217, x213, x210); + fiat_np384_addcarryx_u64(&x220, &x221, x219, x211, x208); + fiat_np384_addcarryx_u64(&x222, &x223, x221, x209, x206); + fiat_np384_addcarryx_u64(&x224, &x225, x223, x207, x204); + fiat_np384_addcarryx_u64(&x226, &x227, 0x0, x190, x214); + fiat_np384_addcarryx_u64(&x228, &x229, x227, x192, x216); + fiat_np384_addcarryx_u64(&x230, &x231, x229, x194, x218); + fiat_np384_addcarryx_u64(&x232, &x233, x231, x196, x220); + fiat_np384_addcarryx_u64(&x234, &x235, x233, x198, x222); + fiat_np384_addcarryx_u64(&x236, &x237, x235, x200, x224); + fiat_np384_addcarryx_u64(&x238, &x239, x237, ((uint64_t)x201 + x189), (x225 + x205)); + fiat_np384_addcarryx_u64(&x240, &x241, 0x0, x228, (arg1[5])); + fiat_np384_addcarryx_u64(&x242, &x243, x241, x230, 0x0); + fiat_np384_addcarryx_u64(&x244, &x245, x243, x232, 0x0); + fiat_np384_addcarryx_u64(&x246, &x247, x245, x234, 0x0); + fiat_np384_addcarryx_u64(&x248, &x249, x247, x236, 0x0); + fiat_np384_addcarryx_u64(&x250, &x251, x249, x238, 0x0); + fiat_np384_mulx_u64(&x252, &x253, x240, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x254, &x255, x252, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x256, &x257, x252, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x258, &x259, x252, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x260, &x261, x252, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x262, &x263, x252, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x264, &x265, x252, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x266, &x267, 0x0, x265, x262); + fiat_np384_addcarryx_u64(&x268, &x269, x267, x263, x260); + fiat_np384_addcarryx_u64(&x270, &x271, x269, x261, x258); + fiat_np384_addcarryx_u64(&x272, &x273, x271, x259, x256); + fiat_np384_addcarryx_u64(&x274, &x275, x273, x257, x254); + fiat_np384_addcarryx_u64(&x276, &x277, 0x0, x240, x264); + fiat_np384_addcarryx_u64(&x278, &x279, x277, x242, x266); + fiat_np384_addcarryx_u64(&x280, &x281, x279, x244, x268); + fiat_np384_addcarryx_u64(&x282, &x283, x281, x246, x270); + fiat_np384_addcarryx_u64(&x284, &x285, x283, x248, x272); + fiat_np384_addcarryx_u64(&x286, &x287, x285, x250, x274); + fiat_np384_addcarryx_u64(&x288, &x289, x287, ((uint64_t)x251 + x239), (x275 + x255)); + fiat_np384_subborrowx_u64(&x290, &x291, 0x0, x278, UINT64_C(0xecec196accc52973)); + fiat_np384_subborrowx_u64(&x292, &x293, x291, x280, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_subborrowx_u64(&x294, &x295, x293, x282, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_subborrowx_u64(&x296, &x297, x295, x284, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x298, &x299, x297, x286, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x300, &x301, x299, x288, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x302, &x303, x301, x289, 0x0); + fiat_np384_cmovznz_u64(&x304, x303, x290, x278); + fiat_np384_cmovznz_u64(&x305, x303, x292, x280); + fiat_np384_cmovznz_u64(&x306, x303, x294, x282); + fiat_np384_cmovznz_u64(&x307, x303, x296, x284); + fiat_np384_cmovznz_u64(&x308, x303, x298, x286); + fiat_np384_cmovznz_u64(&x309, x303, x300, x288); + out1[0] = x304; + out1[1] = x305; + out1[2] = x306; + out1[3] = x307; + out1[4] = x308; + out1[5] = x309; +} + +/* + * The function fiat_np384_to_montgomery translates a field element into the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np384_to_montgomery(uint64_t out1[6], const uint64_t arg1[6]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + fiat_np384_uint1 x20; + uint64_t x21; + fiat_np384_uint1 x22; + uint64_t x23; + fiat_np384_uint1 x24; + uint64_t x25; + fiat_np384_uint1 x26; + uint64_t x27; + fiat_np384_uint1 x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint64_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + fiat_np384_uint1 x44; + uint64_t x45; + fiat_np384_uint1 x46; + uint64_t x47; + fiat_np384_uint1 x48; + uint64_t x49; + fiat_np384_uint1 x50; + uint64_t x51; + fiat_np384_uint1 x52; + uint64_t x53; + fiat_np384_uint1 x54; + uint64_t x55; + fiat_np384_uint1 x56; + uint64_t x57; + fiat_np384_uint1 x58; + uint64_t x59; + fiat_np384_uint1 x60; + uint64_t x61; + fiat_np384_uint1 x62; + uint64_t x63; + fiat_np384_uint1 x64; + uint64_t x65; + fiat_np384_uint1 x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + fiat_np384_uint1 x80; + uint64_t x81; + fiat_np384_uint1 x82; + uint64_t x83; + fiat_np384_uint1 x84; + uint64_t x85; + fiat_np384_uint1 x86; + uint64_t x87; + fiat_np384_uint1 x88; + uint64_t x89; + fiat_np384_uint1 x90; + uint64_t x91; + fiat_np384_uint1 x92; + uint64_t x93; + fiat_np384_uint1 x94; + uint64_t x95; + fiat_np384_uint1 x96; + uint64_t x97; + fiat_np384_uint1 x98; + uint64_t x99; + fiat_np384_uint1 x100; + uint64_t x101; + uint64_t x102; + uint64_t x103; + uint64_t x104; + uint64_t x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + uint64_t x109; + uint64_t x110; + uint64_t x111; + uint64_t x112; + uint64_t x113; + uint64_t x114; + uint64_t x115; + fiat_np384_uint1 x116; + uint64_t x117; + fiat_np384_uint1 x118; + uint64_t x119; + fiat_np384_uint1 x120; + uint64_t x121; + fiat_np384_uint1 x122; + uint64_t x123; + fiat_np384_uint1 x124; + uint64_t x125; + fiat_np384_uint1 x126; + uint64_t x127; + fiat_np384_uint1 x128; + uint64_t x129; + fiat_np384_uint1 x130; + uint64_t x131; + fiat_np384_uint1 x132; + uint64_t x133; + fiat_np384_uint1 x134; + uint64_t x135; + fiat_np384_uint1 x136; + uint64_t x137; + fiat_np384_uint1 x138; + uint64_t x139; + uint64_t x140; + uint64_t x141; + uint64_t x142; + uint64_t x143; + uint64_t x144; + uint64_t x145; + uint64_t x146; + uint64_t x147; + uint64_t x148; + uint64_t x149; + uint64_t x150; + uint64_t x151; + fiat_np384_uint1 x152; + uint64_t x153; + fiat_np384_uint1 x154; + uint64_t x155; + fiat_np384_uint1 x156; + uint64_t x157; + fiat_np384_uint1 x158; + uint64_t x159; + fiat_np384_uint1 x160; + uint64_t x161; + fiat_np384_uint1 x162; + uint64_t x163; + fiat_np384_uint1 x164; + uint64_t x165; + fiat_np384_uint1 x166; + uint64_t x167; + fiat_np384_uint1 x168; + uint64_t x169; + fiat_np384_uint1 x170; + uint64_t x171; + fiat_np384_uint1 x172; + uint64_t x173; + uint64_t x174; + uint64_t x175; + uint64_t x176; + uint64_t x177; + uint64_t x178; + uint64_t x179; + uint64_t x180; + uint64_t x181; + uint64_t x182; + uint64_t x183; + uint64_t x184; + uint64_t x185; + uint64_t x186; + uint64_t x187; + fiat_np384_uint1 x188; + uint64_t x189; + fiat_np384_uint1 x190; + uint64_t x191; + fiat_np384_uint1 x192; + uint64_t x193; + fiat_np384_uint1 x194; + uint64_t x195; + fiat_np384_uint1 x196; + uint64_t x197; + fiat_np384_uint1 x198; + uint64_t x199; + fiat_np384_uint1 x200; + uint64_t x201; + fiat_np384_uint1 x202; + uint64_t x203; + fiat_np384_uint1 x204; + uint64_t x205; + fiat_np384_uint1 x206; + uint64_t x207; + fiat_np384_uint1 x208; + uint64_t x209; + fiat_np384_uint1 x210; + uint64_t x211; + uint64_t x212; + uint64_t x213; + uint64_t x214; + uint64_t x215; + uint64_t x216; + uint64_t x217; + uint64_t x218; + uint64_t x219; + uint64_t x220; + uint64_t x221; + uint64_t x222; + uint64_t x223; + fiat_np384_uint1 x224; + uint64_t x225; + fiat_np384_uint1 x226; + uint64_t x227; + fiat_np384_uint1 x228; + uint64_t x229; + fiat_np384_uint1 x230; + uint64_t x231; + fiat_np384_uint1 x232; + uint64_t x233; + fiat_np384_uint1 x234; + uint64_t x235; + fiat_np384_uint1 x236; + uint64_t x237; + fiat_np384_uint1 x238; + uint64_t x239; + fiat_np384_uint1 x240; + uint64_t x241; + fiat_np384_uint1 x242; + uint64_t x243; + fiat_np384_uint1 x244; + uint64_t x245; + uint64_t x246; + uint64_t x247; + uint64_t x248; + uint64_t x249; + uint64_t x250; + uint64_t x251; + uint64_t x252; + uint64_t x253; + uint64_t x254; + uint64_t x255; + uint64_t x256; + uint64_t x257; + uint64_t x258; + uint64_t x259; + fiat_np384_uint1 x260; + uint64_t x261; + fiat_np384_uint1 x262; + uint64_t x263; + fiat_np384_uint1 x264; + uint64_t x265; + fiat_np384_uint1 x266; + uint64_t x267; + fiat_np384_uint1 x268; + uint64_t x269; + fiat_np384_uint1 x270; + uint64_t x271; + fiat_np384_uint1 x272; + uint64_t x273; + fiat_np384_uint1 x274; + uint64_t x275; + fiat_np384_uint1 x276; + uint64_t x277; + fiat_np384_uint1 x278; + uint64_t x279; + fiat_np384_uint1 x280; + uint64_t x281; + fiat_np384_uint1 x282; + uint64_t x283; + uint64_t x284; + uint64_t x285; + uint64_t x286; + uint64_t x287; + uint64_t x288; + uint64_t x289; + uint64_t x290; + uint64_t x291; + uint64_t x292; + uint64_t x293; + uint64_t x294; + uint64_t x295; + fiat_np384_uint1 x296; + uint64_t x297; + fiat_np384_uint1 x298; + uint64_t x299; + fiat_np384_uint1 x300; + uint64_t x301; + fiat_np384_uint1 x302; + uint64_t x303; + fiat_np384_uint1 x304; + uint64_t x305; + fiat_np384_uint1 x306; + uint64_t x307; + fiat_np384_uint1 x308; + uint64_t x309; + fiat_np384_uint1 x310; + uint64_t x311; + fiat_np384_uint1 x312; + uint64_t x313; + fiat_np384_uint1 x314; + uint64_t x315; + fiat_np384_uint1 x316; + uint64_t x317; + uint64_t x318; + uint64_t x319; + uint64_t x320; + uint64_t x321; + uint64_t x322; + uint64_t x323; + uint64_t x324; + uint64_t x325; + uint64_t x326; + uint64_t x327; + uint64_t x328; + uint64_t x329; + uint64_t x330; + uint64_t x331; + fiat_np384_uint1 x332; + uint64_t x333; + fiat_np384_uint1 x334; + uint64_t x335; + fiat_np384_uint1 x336; + uint64_t x337; + fiat_np384_uint1 x338; + uint64_t x339; + fiat_np384_uint1 x340; + uint64_t x341; + fiat_np384_uint1 x342; + uint64_t x343; + fiat_np384_uint1 x344; + uint64_t x345; + fiat_np384_uint1 x346; + uint64_t x347; + fiat_np384_uint1 x348; + uint64_t x349; + fiat_np384_uint1 x350; + uint64_t x351; + fiat_np384_uint1 x352; + uint64_t x353; + fiat_np384_uint1 x354; + uint64_t x355; + uint64_t x356; + uint64_t x357; + uint64_t x358; + uint64_t x359; + uint64_t x360; + uint64_t x361; + uint64_t x362; + uint64_t x363; + uint64_t x364; + uint64_t x365; + uint64_t x366; + uint64_t x367; + fiat_np384_uint1 x368; + uint64_t x369; + fiat_np384_uint1 x370; + uint64_t x371; + fiat_np384_uint1 x372; + uint64_t x373; + fiat_np384_uint1 x374; + uint64_t x375; + fiat_np384_uint1 x376; + uint64_t x377; + fiat_np384_uint1 x378; + uint64_t x379; + fiat_np384_uint1 x380; + uint64_t x381; + fiat_np384_uint1 x382; + uint64_t x383; + fiat_np384_uint1 x384; + uint64_t x385; + fiat_np384_uint1 x386; + uint64_t x387; + fiat_np384_uint1 x388; + uint64_t x389; + uint64_t x390; + uint64_t x391; + uint64_t x392; + uint64_t x393; + uint64_t x394; + uint64_t x395; + uint64_t x396; + uint64_t x397; + uint64_t x398; + uint64_t x399; + uint64_t x400; + uint64_t x401; + uint64_t x402; + uint64_t x403; + fiat_np384_uint1 x404; + uint64_t x405; + fiat_np384_uint1 x406; + uint64_t x407; + fiat_np384_uint1 x408; + uint64_t x409; + fiat_np384_uint1 x410; + uint64_t x411; + fiat_np384_uint1 x412; + uint64_t x413; + fiat_np384_uint1 x414; + uint64_t x415; + fiat_np384_uint1 x416; + uint64_t x417; + fiat_np384_uint1 x418; + uint64_t x419; + fiat_np384_uint1 x420; + uint64_t x421; + fiat_np384_uint1 x422; + uint64_t x423; + fiat_np384_uint1 x424; + uint64_t x425; + fiat_np384_uint1 x426; + uint64_t x427; + fiat_np384_uint1 x428; + uint64_t x429; + fiat_np384_uint1 x430; + uint64_t x431; + fiat_np384_uint1 x432; + uint64_t x433; + fiat_np384_uint1 x434; + uint64_t x435; + fiat_np384_uint1 x436; + uint64_t x437; + fiat_np384_uint1 x438; + uint64_t x439; + fiat_np384_uint1 x440; + uint64_t x441; + uint64_t x442; + uint64_t x443; + uint64_t x444; + uint64_t x445; + uint64_t x446; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[0]); + fiat_np384_mulx_u64(&x7, &x8, x6, UINT64_C(0xc84ee012b39bf21)); + fiat_np384_mulx_u64(&x9, &x10, x6, UINT64_C(0x3fb05b7a28266895)); + fiat_np384_mulx_u64(&x11, &x12, x6, UINT64_C(0xd40d49174aab1cc5)); + fiat_np384_mulx_u64(&x13, &x14, x6, UINT64_C(0xbc3e483afcb82947)); + fiat_np384_mulx_u64(&x15, &x16, x6, UINT64_C(0xff3d81e5df1aa419)); + fiat_np384_mulx_u64(&x17, &x18, x6, UINT64_C(0x2d319b2419b409a9)); + fiat_np384_addcarryx_u64(&x19, &x20, 0x0, x18, x15); + fiat_np384_addcarryx_u64(&x21, &x22, x20, x16, x13); + fiat_np384_addcarryx_u64(&x23, &x24, x22, x14, x11); + fiat_np384_addcarryx_u64(&x25, &x26, x24, x12, x9); + fiat_np384_addcarryx_u64(&x27, &x28, x26, x10, x7); + fiat_np384_mulx_u64(&x29, &x30, x17, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x31, &x32, x29, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x33, &x34, x29, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x35, &x36, x29, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x37, &x38, x29, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x39, &x40, x29, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x41, &x42, x29, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x43, &x44, 0x0, x42, x39); + fiat_np384_addcarryx_u64(&x45, &x46, x44, x40, x37); + fiat_np384_addcarryx_u64(&x47, &x48, x46, x38, x35); + fiat_np384_addcarryx_u64(&x49, &x50, x48, x36, x33); + fiat_np384_addcarryx_u64(&x51, &x52, x50, x34, x31); + fiat_np384_addcarryx_u64(&x53, &x54, 0x0, x17, x41); + fiat_np384_addcarryx_u64(&x55, &x56, x54, x19, x43); + fiat_np384_addcarryx_u64(&x57, &x58, x56, x21, x45); + fiat_np384_addcarryx_u64(&x59, &x60, x58, x23, x47); + fiat_np384_addcarryx_u64(&x61, &x62, x60, x25, x49); + fiat_np384_addcarryx_u64(&x63, &x64, x62, x27, x51); + fiat_np384_addcarryx_u64(&x65, &x66, x64, (x28 + x8), (x52 + x32)); + fiat_np384_mulx_u64(&x67, &x68, x1, UINT64_C(0xc84ee012b39bf21)); + fiat_np384_mulx_u64(&x69, &x70, x1, UINT64_C(0x3fb05b7a28266895)); + fiat_np384_mulx_u64(&x71, &x72, x1, UINT64_C(0xd40d49174aab1cc5)); + fiat_np384_mulx_u64(&x73, &x74, x1, UINT64_C(0xbc3e483afcb82947)); + fiat_np384_mulx_u64(&x75, &x76, x1, UINT64_C(0xff3d81e5df1aa419)); + fiat_np384_mulx_u64(&x77, &x78, x1, UINT64_C(0x2d319b2419b409a9)); + fiat_np384_addcarryx_u64(&x79, &x80, 0x0, x78, x75); + fiat_np384_addcarryx_u64(&x81, &x82, x80, x76, x73); + fiat_np384_addcarryx_u64(&x83, &x84, x82, x74, x71); + fiat_np384_addcarryx_u64(&x85, &x86, x84, x72, x69); + fiat_np384_addcarryx_u64(&x87, &x88, x86, x70, x67); + fiat_np384_addcarryx_u64(&x89, &x90, 0x0, x55, x77); + fiat_np384_addcarryx_u64(&x91, &x92, x90, x57, x79); + fiat_np384_addcarryx_u64(&x93, &x94, x92, x59, x81); + fiat_np384_addcarryx_u64(&x95, &x96, x94, x61, x83); + fiat_np384_addcarryx_u64(&x97, &x98, x96, x63, x85); + fiat_np384_addcarryx_u64(&x99, &x100, x98, x65, x87); + fiat_np384_mulx_u64(&x101, &x102, x89, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x103, &x104, x101, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x105, &x106, x101, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x107, &x108, x101, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x109, &x110, x101, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x111, &x112, x101, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x113, &x114, x101, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x115, &x116, 0x0, x114, x111); + fiat_np384_addcarryx_u64(&x117, &x118, x116, x112, x109); + fiat_np384_addcarryx_u64(&x119, &x120, x118, x110, x107); + fiat_np384_addcarryx_u64(&x121, &x122, x120, x108, x105); + fiat_np384_addcarryx_u64(&x123, &x124, x122, x106, x103); + fiat_np384_addcarryx_u64(&x125, &x126, 0x0, x89, x113); + fiat_np384_addcarryx_u64(&x127, &x128, x126, x91, x115); + fiat_np384_addcarryx_u64(&x129, &x130, x128, x93, x117); + fiat_np384_addcarryx_u64(&x131, &x132, x130, x95, x119); + fiat_np384_addcarryx_u64(&x133, &x134, x132, x97, x121); + fiat_np384_addcarryx_u64(&x135, &x136, x134, x99, x123); + fiat_np384_addcarryx_u64(&x137, &x138, x136, (((uint64_t)x100 + x66) + (x88 + x68)), (x124 + x104)); + fiat_np384_mulx_u64(&x139, &x140, x2, UINT64_C(0xc84ee012b39bf21)); + fiat_np384_mulx_u64(&x141, &x142, x2, UINT64_C(0x3fb05b7a28266895)); + fiat_np384_mulx_u64(&x143, &x144, x2, UINT64_C(0xd40d49174aab1cc5)); + fiat_np384_mulx_u64(&x145, &x146, x2, UINT64_C(0xbc3e483afcb82947)); + fiat_np384_mulx_u64(&x147, &x148, x2, UINT64_C(0xff3d81e5df1aa419)); + fiat_np384_mulx_u64(&x149, &x150, x2, UINT64_C(0x2d319b2419b409a9)); + fiat_np384_addcarryx_u64(&x151, &x152, 0x0, x150, x147); + fiat_np384_addcarryx_u64(&x153, &x154, x152, x148, x145); + fiat_np384_addcarryx_u64(&x155, &x156, x154, x146, x143); + fiat_np384_addcarryx_u64(&x157, &x158, x156, x144, x141); + fiat_np384_addcarryx_u64(&x159, &x160, x158, x142, x139); + fiat_np384_addcarryx_u64(&x161, &x162, 0x0, x127, x149); + fiat_np384_addcarryx_u64(&x163, &x164, x162, x129, x151); + fiat_np384_addcarryx_u64(&x165, &x166, x164, x131, x153); + fiat_np384_addcarryx_u64(&x167, &x168, x166, x133, x155); + fiat_np384_addcarryx_u64(&x169, &x170, x168, x135, x157); + fiat_np384_addcarryx_u64(&x171, &x172, x170, x137, x159); + fiat_np384_mulx_u64(&x173, &x174, x161, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x175, &x176, x173, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x177, &x178, x173, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x179, &x180, x173, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x181, &x182, x173, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x183, &x184, x173, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x185, &x186, x173, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x187, &x188, 0x0, x186, x183); + fiat_np384_addcarryx_u64(&x189, &x190, x188, x184, x181); + fiat_np384_addcarryx_u64(&x191, &x192, x190, x182, x179); + fiat_np384_addcarryx_u64(&x193, &x194, x192, x180, x177); + fiat_np384_addcarryx_u64(&x195, &x196, x194, x178, x175); + fiat_np384_addcarryx_u64(&x197, &x198, 0x0, x161, x185); + fiat_np384_addcarryx_u64(&x199, &x200, x198, x163, x187); + fiat_np384_addcarryx_u64(&x201, &x202, x200, x165, x189); + fiat_np384_addcarryx_u64(&x203, &x204, x202, x167, x191); + fiat_np384_addcarryx_u64(&x205, &x206, x204, x169, x193); + fiat_np384_addcarryx_u64(&x207, &x208, x206, x171, x195); + fiat_np384_addcarryx_u64(&x209, &x210, x208, (((uint64_t)x172 + x138) + (x160 + x140)), (x196 + x176)); + fiat_np384_mulx_u64(&x211, &x212, x3, UINT64_C(0xc84ee012b39bf21)); + fiat_np384_mulx_u64(&x213, &x214, x3, UINT64_C(0x3fb05b7a28266895)); + fiat_np384_mulx_u64(&x215, &x216, x3, UINT64_C(0xd40d49174aab1cc5)); + fiat_np384_mulx_u64(&x217, &x218, x3, UINT64_C(0xbc3e483afcb82947)); + fiat_np384_mulx_u64(&x219, &x220, x3, UINT64_C(0xff3d81e5df1aa419)); + fiat_np384_mulx_u64(&x221, &x222, x3, UINT64_C(0x2d319b2419b409a9)); + fiat_np384_addcarryx_u64(&x223, &x224, 0x0, x222, x219); + fiat_np384_addcarryx_u64(&x225, &x226, x224, x220, x217); + fiat_np384_addcarryx_u64(&x227, &x228, x226, x218, x215); + fiat_np384_addcarryx_u64(&x229, &x230, x228, x216, x213); + fiat_np384_addcarryx_u64(&x231, &x232, x230, x214, x211); + fiat_np384_addcarryx_u64(&x233, &x234, 0x0, x199, x221); + fiat_np384_addcarryx_u64(&x235, &x236, x234, x201, x223); + fiat_np384_addcarryx_u64(&x237, &x238, x236, x203, x225); + fiat_np384_addcarryx_u64(&x239, &x240, x238, x205, x227); + fiat_np384_addcarryx_u64(&x241, &x242, x240, x207, x229); + fiat_np384_addcarryx_u64(&x243, &x244, x242, x209, x231); + fiat_np384_mulx_u64(&x245, &x246, x233, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x247, &x248, x245, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x249, &x250, x245, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x251, &x252, x245, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x253, &x254, x245, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x255, &x256, x245, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x257, &x258, x245, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x259, &x260, 0x0, x258, x255); + fiat_np384_addcarryx_u64(&x261, &x262, x260, x256, x253); + fiat_np384_addcarryx_u64(&x263, &x264, x262, x254, x251); + fiat_np384_addcarryx_u64(&x265, &x266, x264, x252, x249); + fiat_np384_addcarryx_u64(&x267, &x268, x266, x250, x247); + fiat_np384_addcarryx_u64(&x269, &x270, 0x0, x233, x257); + fiat_np384_addcarryx_u64(&x271, &x272, x270, x235, x259); + fiat_np384_addcarryx_u64(&x273, &x274, x272, x237, x261); + fiat_np384_addcarryx_u64(&x275, &x276, x274, x239, x263); + fiat_np384_addcarryx_u64(&x277, &x278, x276, x241, x265); + fiat_np384_addcarryx_u64(&x279, &x280, x278, x243, x267); + fiat_np384_addcarryx_u64(&x281, &x282, x280, (((uint64_t)x244 + x210) + (x232 + x212)), (x268 + x248)); + fiat_np384_mulx_u64(&x283, &x284, x4, UINT64_C(0xc84ee012b39bf21)); + fiat_np384_mulx_u64(&x285, &x286, x4, UINT64_C(0x3fb05b7a28266895)); + fiat_np384_mulx_u64(&x287, &x288, x4, UINT64_C(0xd40d49174aab1cc5)); + fiat_np384_mulx_u64(&x289, &x290, x4, UINT64_C(0xbc3e483afcb82947)); + fiat_np384_mulx_u64(&x291, &x292, x4, UINT64_C(0xff3d81e5df1aa419)); + fiat_np384_mulx_u64(&x293, &x294, x4, UINT64_C(0x2d319b2419b409a9)); + fiat_np384_addcarryx_u64(&x295, &x296, 0x0, x294, x291); + fiat_np384_addcarryx_u64(&x297, &x298, x296, x292, x289); + fiat_np384_addcarryx_u64(&x299, &x300, x298, x290, x287); + fiat_np384_addcarryx_u64(&x301, &x302, x300, x288, x285); + fiat_np384_addcarryx_u64(&x303, &x304, x302, x286, x283); + fiat_np384_addcarryx_u64(&x305, &x306, 0x0, x271, x293); + fiat_np384_addcarryx_u64(&x307, &x308, x306, x273, x295); + fiat_np384_addcarryx_u64(&x309, &x310, x308, x275, x297); + fiat_np384_addcarryx_u64(&x311, &x312, x310, x277, x299); + fiat_np384_addcarryx_u64(&x313, &x314, x312, x279, x301); + fiat_np384_addcarryx_u64(&x315, &x316, x314, x281, x303); + fiat_np384_mulx_u64(&x317, &x318, x305, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x319, &x320, x317, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x321, &x322, x317, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x323, &x324, x317, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x325, &x326, x317, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x327, &x328, x317, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x329, &x330, x317, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x331, &x332, 0x0, x330, x327); + fiat_np384_addcarryx_u64(&x333, &x334, x332, x328, x325); + fiat_np384_addcarryx_u64(&x335, &x336, x334, x326, x323); + fiat_np384_addcarryx_u64(&x337, &x338, x336, x324, x321); + fiat_np384_addcarryx_u64(&x339, &x340, x338, x322, x319); + fiat_np384_addcarryx_u64(&x341, &x342, 0x0, x305, x329); + fiat_np384_addcarryx_u64(&x343, &x344, x342, x307, x331); + fiat_np384_addcarryx_u64(&x345, &x346, x344, x309, x333); + fiat_np384_addcarryx_u64(&x347, &x348, x346, x311, x335); + fiat_np384_addcarryx_u64(&x349, &x350, x348, x313, x337); + fiat_np384_addcarryx_u64(&x351, &x352, x350, x315, x339); + fiat_np384_addcarryx_u64(&x353, &x354, x352, (((uint64_t)x316 + x282) + (x304 + x284)), (x340 + x320)); + fiat_np384_mulx_u64(&x355, &x356, x5, UINT64_C(0xc84ee012b39bf21)); + fiat_np384_mulx_u64(&x357, &x358, x5, UINT64_C(0x3fb05b7a28266895)); + fiat_np384_mulx_u64(&x359, &x360, x5, UINT64_C(0xd40d49174aab1cc5)); + fiat_np384_mulx_u64(&x361, &x362, x5, UINT64_C(0xbc3e483afcb82947)); + fiat_np384_mulx_u64(&x363, &x364, x5, UINT64_C(0xff3d81e5df1aa419)); + fiat_np384_mulx_u64(&x365, &x366, x5, UINT64_C(0x2d319b2419b409a9)); + fiat_np384_addcarryx_u64(&x367, &x368, 0x0, x366, x363); + fiat_np384_addcarryx_u64(&x369, &x370, x368, x364, x361); + fiat_np384_addcarryx_u64(&x371, &x372, x370, x362, x359); + fiat_np384_addcarryx_u64(&x373, &x374, x372, x360, x357); + fiat_np384_addcarryx_u64(&x375, &x376, x374, x358, x355); + fiat_np384_addcarryx_u64(&x377, &x378, 0x0, x343, x365); + fiat_np384_addcarryx_u64(&x379, &x380, x378, x345, x367); + fiat_np384_addcarryx_u64(&x381, &x382, x380, x347, x369); + fiat_np384_addcarryx_u64(&x383, &x384, x382, x349, x371); + fiat_np384_addcarryx_u64(&x385, &x386, x384, x351, x373); + fiat_np384_addcarryx_u64(&x387, &x388, x386, x353, x375); + fiat_np384_mulx_u64(&x389, &x390, x377, UINT64_C(0x6ed46089e88fdc45)); + fiat_np384_mulx_u64(&x391, &x392, x389, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x393, &x394, x389, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x395, &x396, x389, UINT64_C(0xffffffffffffffff)); + fiat_np384_mulx_u64(&x397, &x398, x389, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_mulx_u64(&x399, &x400, x389, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_mulx_u64(&x401, &x402, x389, UINT64_C(0xecec196accc52973)); + fiat_np384_addcarryx_u64(&x403, &x404, 0x0, x402, x399); + fiat_np384_addcarryx_u64(&x405, &x406, x404, x400, x397); + fiat_np384_addcarryx_u64(&x407, &x408, x406, x398, x395); + fiat_np384_addcarryx_u64(&x409, &x410, x408, x396, x393); + fiat_np384_addcarryx_u64(&x411, &x412, x410, x394, x391); + fiat_np384_addcarryx_u64(&x413, &x414, 0x0, x377, x401); + fiat_np384_addcarryx_u64(&x415, &x416, x414, x379, x403); + fiat_np384_addcarryx_u64(&x417, &x418, x416, x381, x405); + fiat_np384_addcarryx_u64(&x419, &x420, x418, x383, x407); + fiat_np384_addcarryx_u64(&x421, &x422, x420, x385, x409); + fiat_np384_addcarryx_u64(&x423, &x424, x422, x387, x411); + fiat_np384_addcarryx_u64(&x425, &x426, x424, (((uint64_t)x388 + x354) + (x376 + x356)), (x412 + x392)); + fiat_np384_subborrowx_u64(&x427, &x428, 0x0, x415, UINT64_C(0xecec196accc52973)); + fiat_np384_subborrowx_u64(&x429, &x430, x428, x417, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_subborrowx_u64(&x431, &x432, x430, x419, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_subborrowx_u64(&x433, &x434, x432, x421, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x435, &x436, x434, x423, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x437, &x438, x436, x425, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x439, &x440, x438, x426, 0x0); + fiat_np384_cmovznz_u64(&x441, x440, x427, x415); + fiat_np384_cmovznz_u64(&x442, x440, x429, x417); + fiat_np384_cmovznz_u64(&x443, x440, x431, x419); + fiat_np384_cmovznz_u64(&x444, x440, x433, x421); + fiat_np384_cmovznz_u64(&x445, x440, x435, x423); + fiat_np384_cmovznz_u64(&x446, x440, x437, x425); + out1[0] = x441; + out1[1] = x442; + out1[2] = x443; + out1[3] = x444; + out1[4] = x445; + out1[5] = x446; +} + +/* + * The function fiat_np384_set_one returns the field element one in the Montgomery domain. + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np384_set_one(uint64_t out1[6]) { + out1[0] = UINT64_C(0x1313e695333ad68d); + out1[1] = UINT64_C(0xa7e5f24db74f5885); + out1[2] = UINT64_C(0x389cb27e0bc8d220); + out1[3] = 0x0; + out1[4] = 0x0; + out1[5] = 0x0; +} + +/* + * The function fiat_np384_msat returns the saturated represtation of the prime modulus. + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np384_msat(uint64_t out1[7]) { + out1[0] = UINT64_C(0xecec196accc52973); + out1[1] = UINT64_C(0x581a0db248b0a77a); + out1[2] = UINT64_C(0xc7634d81f4372ddf); + out1[3] = UINT64_C(0xffffffffffffffff); + out1[4] = UINT64_C(0xffffffffffffffff); + out1[5] = UINT64_C(0xffffffffffffffff); + out1[6] = 0x0; +} + +/* + * The function fiat_np384_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if (log2 m) + 1 < 46 then ⌊(49 * ((log2 m) + 1) + 80) / 17⌋ else ⌊(49 * ((log2 m) + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np384_divstep_precomp(uint64_t out1[6]) { + out1[0] = UINT64_C(0x49589ae0e6045b6a); + out1[1] = UINT64_C(0x3c9a5352870040ed); + out1[2] = UINT64_C(0xdacb097e977dc242); + out1[3] = UINT64_C(0xb5ab30a6d1ecbe36); + out1[4] = UINT64_C(0x97d7a1081f959973); + out1[5] = UINT64_C(0x2ba012f8d27192bc); +} + +/* + * The function fiat_np384_divstep computes a divstep. + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np384_divstep(uint64_t* out1, uint64_t out2[7], uint64_t out3[7], uint64_t out4[6], uint64_t out5[6], uint64_t arg1, const uint64_t arg2[7], const uint64_t arg3[7], const uint64_t arg4[6], const uint64_t arg5[6]) { + uint64_t x1; + fiat_np384_uint1 x2; + fiat_np384_uint1 x3; + uint64_t x4; + fiat_np384_uint1 x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + fiat_np384_uint1 x15; + uint64_t x16; + fiat_np384_uint1 x17; + uint64_t x18; + fiat_np384_uint1 x19; + uint64_t x20; + fiat_np384_uint1 x21; + uint64_t x22; + fiat_np384_uint1 x23; + uint64_t x24; + fiat_np384_uint1 x25; + uint64_t x26; + fiat_np384_uint1 x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint64_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + fiat_np384_uint1 x42; + uint64_t x43; + fiat_np384_uint1 x44; + uint64_t x45; + fiat_np384_uint1 x46; + uint64_t x47; + fiat_np384_uint1 x48; + uint64_t x49; + fiat_np384_uint1 x50; + uint64_t x51; + fiat_np384_uint1 x52; + uint64_t x53; + fiat_np384_uint1 x54; + uint64_t x55; + fiat_np384_uint1 x56; + uint64_t x57; + fiat_np384_uint1 x58; + uint64_t x59; + fiat_np384_uint1 x60; + uint64_t x61; + fiat_np384_uint1 x62; + uint64_t x63; + fiat_np384_uint1 x64; + uint64_t x65; + fiat_np384_uint1 x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + fiat_np384_uint1 x74; + uint64_t x75; + fiat_np384_uint1 x76; + uint64_t x77; + fiat_np384_uint1 x78; + uint64_t x79; + fiat_np384_uint1 x80; + uint64_t x81; + fiat_np384_uint1 x82; + uint64_t x83; + fiat_np384_uint1 x84; + uint64_t x85; + uint64_t x86; + fiat_np384_uint1 x87; + uint64_t x88; + fiat_np384_uint1 x89; + uint64_t x90; + fiat_np384_uint1 x91; + uint64_t x92; + fiat_np384_uint1 x93; + uint64_t x94; + fiat_np384_uint1 x95; + uint64_t x96; + fiat_np384_uint1 x97; + uint64_t x98; + uint64_t x99; + uint64_t x100; + uint64_t x101; + uint64_t x102; + uint64_t x103; + fiat_np384_uint1 x104; + uint64_t x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + uint64_t x109; + uint64_t x110; + uint64_t x111; + uint64_t x112; + fiat_np384_uint1 x113; + uint64_t x114; + fiat_np384_uint1 x115; + uint64_t x116; + fiat_np384_uint1 x117; + uint64_t x118; + fiat_np384_uint1 x119; + uint64_t x120; + fiat_np384_uint1 x121; + uint64_t x122; + fiat_np384_uint1 x123; + uint64_t x124; + fiat_np384_uint1 x125; + uint64_t x126; + uint64_t x127; + uint64_t x128; + uint64_t x129; + uint64_t x130; + uint64_t x131; + uint64_t x132; + fiat_np384_uint1 x133; + uint64_t x134; + fiat_np384_uint1 x135; + uint64_t x136; + fiat_np384_uint1 x137; + uint64_t x138; + fiat_np384_uint1 x139; + uint64_t x140; + fiat_np384_uint1 x141; + uint64_t x142; + fiat_np384_uint1 x143; + uint64_t x144; + fiat_np384_uint1 x145; + uint64_t x146; + fiat_np384_uint1 x147; + uint64_t x148; + fiat_np384_uint1 x149; + uint64_t x150; + fiat_np384_uint1 x151; + uint64_t x152; + fiat_np384_uint1 x153; + uint64_t x154; + fiat_np384_uint1 x155; + uint64_t x156; + fiat_np384_uint1 x157; + uint64_t x158; + fiat_np384_uint1 x159; + uint64_t x160; + uint64_t x161; + uint64_t x162; + uint64_t x163; + uint64_t x164; + uint64_t x165; + uint64_t x166; + uint64_t x167; + uint64_t x168; + uint64_t x169; + uint64_t x170; + uint64_t x171; + uint64_t x172; + uint64_t x173; + uint64_t x174; + uint64_t x175; + uint64_t x176; + uint64_t x177; + uint64_t x178; + fiat_np384_addcarryx_u64(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_np384_uint1)((fiat_np384_uint1)(x1 >> 63) & (fiat_np384_uint1)((arg3[0]) & 0x1)); + fiat_np384_addcarryx_u64(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_np384_cmovznz_u64(&x6, x3, arg1, x4); + fiat_np384_cmovznz_u64(&x7, x3, (arg2[0]), (arg3[0])); + fiat_np384_cmovznz_u64(&x8, x3, (arg2[1]), (arg3[1])); + fiat_np384_cmovznz_u64(&x9, x3, (arg2[2]), (arg3[2])); + fiat_np384_cmovznz_u64(&x10, x3, (arg2[3]), (arg3[3])); + fiat_np384_cmovznz_u64(&x11, x3, (arg2[4]), (arg3[4])); + fiat_np384_cmovznz_u64(&x12, x3, (arg2[5]), (arg3[5])); + fiat_np384_cmovznz_u64(&x13, x3, (arg2[6]), (arg3[6])); + fiat_np384_addcarryx_u64(&x14, &x15, 0x0, 0x1, (~(arg2[0]))); + fiat_np384_addcarryx_u64(&x16, &x17, x15, 0x0, (~(arg2[1]))); + fiat_np384_addcarryx_u64(&x18, &x19, x17, 0x0, (~(arg2[2]))); + fiat_np384_addcarryx_u64(&x20, &x21, x19, 0x0, (~(arg2[3]))); + fiat_np384_addcarryx_u64(&x22, &x23, x21, 0x0, (~(arg2[4]))); + fiat_np384_addcarryx_u64(&x24, &x25, x23, 0x0, (~(arg2[5]))); + fiat_np384_addcarryx_u64(&x26, &x27, x25, 0x0, (~(arg2[6]))); + fiat_np384_cmovznz_u64(&x28, x3, (arg3[0]), x14); + fiat_np384_cmovznz_u64(&x29, x3, (arg3[1]), x16); + fiat_np384_cmovznz_u64(&x30, x3, (arg3[2]), x18); + fiat_np384_cmovznz_u64(&x31, x3, (arg3[3]), x20); + fiat_np384_cmovznz_u64(&x32, x3, (arg3[4]), x22); + fiat_np384_cmovznz_u64(&x33, x3, (arg3[5]), x24); + fiat_np384_cmovznz_u64(&x34, x3, (arg3[6]), x26); + fiat_np384_cmovznz_u64(&x35, x3, (arg4[0]), (arg5[0])); + fiat_np384_cmovznz_u64(&x36, x3, (arg4[1]), (arg5[1])); + fiat_np384_cmovznz_u64(&x37, x3, (arg4[2]), (arg5[2])); + fiat_np384_cmovznz_u64(&x38, x3, (arg4[3]), (arg5[3])); + fiat_np384_cmovznz_u64(&x39, x3, (arg4[4]), (arg5[4])); + fiat_np384_cmovznz_u64(&x40, x3, (arg4[5]), (arg5[5])); + fiat_np384_addcarryx_u64(&x41, &x42, 0x0, x35, x35); + fiat_np384_addcarryx_u64(&x43, &x44, x42, x36, x36); + fiat_np384_addcarryx_u64(&x45, &x46, x44, x37, x37); + fiat_np384_addcarryx_u64(&x47, &x48, x46, x38, x38); + fiat_np384_addcarryx_u64(&x49, &x50, x48, x39, x39); + fiat_np384_addcarryx_u64(&x51, &x52, x50, x40, x40); + fiat_np384_subborrowx_u64(&x53, &x54, 0x0, x41, UINT64_C(0xecec196accc52973)); + fiat_np384_subborrowx_u64(&x55, &x56, x54, x43, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_subborrowx_u64(&x57, &x58, x56, x45, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_subborrowx_u64(&x59, &x60, x58, x47, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x61, &x62, x60, x49, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x63, &x64, x62, x51, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x65, &x66, x64, x52, 0x0); + x67 = (arg4[5]); + x68 = (arg4[4]); + x69 = (arg4[3]); + x70 = (arg4[2]); + x71 = (arg4[1]); + x72 = (arg4[0]); + fiat_np384_subborrowx_u64(&x73, &x74, 0x0, 0x0, x72); + fiat_np384_subborrowx_u64(&x75, &x76, x74, 0x0, x71); + fiat_np384_subborrowx_u64(&x77, &x78, x76, 0x0, x70); + fiat_np384_subborrowx_u64(&x79, &x80, x78, 0x0, x69); + fiat_np384_subborrowx_u64(&x81, &x82, x80, 0x0, x68); + fiat_np384_subborrowx_u64(&x83, &x84, x82, 0x0, x67); + fiat_np384_cmovznz_u64(&x85, x84, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_np384_addcarryx_u64(&x86, &x87, 0x0, x73, (x85 & UINT64_C(0xecec196accc52973))); + fiat_np384_addcarryx_u64(&x88, &x89, x87, x75, (x85 & UINT64_C(0x581a0db248b0a77a))); + fiat_np384_addcarryx_u64(&x90, &x91, x89, x77, (x85 & UINT64_C(0xc7634d81f4372ddf))); + fiat_np384_addcarryx_u64(&x92, &x93, x91, x79, x85); + fiat_np384_addcarryx_u64(&x94, &x95, x93, x81, x85); + fiat_np384_addcarryx_u64(&x96, &x97, x95, x83, x85); + fiat_np384_cmovznz_u64(&x98, x3, (arg5[0]), x86); + fiat_np384_cmovznz_u64(&x99, x3, (arg5[1]), x88); + fiat_np384_cmovznz_u64(&x100, x3, (arg5[2]), x90); + fiat_np384_cmovznz_u64(&x101, x3, (arg5[3]), x92); + fiat_np384_cmovznz_u64(&x102, x3, (arg5[4]), x94); + fiat_np384_cmovznz_u64(&x103, x3, (arg5[5]), x96); + x104 = (fiat_np384_uint1)(x28 & 0x1); + fiat_np384_cmovznz_u64(&x105, x104, 0x0, x7); + fiat_np384_cmovznz_u64(&x106, x104, 0x0, x8); + fiat_np384_cmovznz_u64(&x107, x104, 0x0, x9); + fiat_np384_cmovznz_u64(&x108, x104, 0x0, x10); + fiat_np384_cmovznz_u64(&x109, x104, 0x0, x11); + fiat_np384_cmovznz_u64(&x110, x104, 0x0, x12); + fiat_np384_cmovznz_u64(&x111, x104, 0x0, x13); + fiat_np384_addcarryx_u64(&x112, &x113, 0x0, x28, x105); + fiat_np384_addcarryx_u64(&x114, &x115, x113, x29, x106); + fiat_np384_addcarryx_u64(&x116, &x117, x115, x30, x107); + fiat_np384_addcarryx_u64(&x118, &x119, x117, x31, x108); + fiat_np384_addcarryx_u64(&x120, &x121, x119, x32, x109); + fiat_np384_addcarryx_u64(&x122, &x123, x121, x33, x110); + fiat_np384_addcarryx_u64(&x124, &x125, x123, x34, x111); + fiat_np384_cmovznz_u64(&x126, x104, 0x0, x35); + fiat_np384_cmovznz_u64(&x127, x104, 0x0, x36); + fiat_np384_cmovznz_u64(&x128, x104, 0x0, x37); + fiat_np384_cmovznz_u64(&x129, x104, 0x0, x38); + fiat_np384_cmovznz_u64(&x130, x104, 0x0, x39); + fiat_np384_cmovznz_u64(&x131, x104, 0x0, x40); + fiat_np384_addcarryx_u64(&x132, &x133, 0x0, x98, x126); + fiat_np384_addcarryx_u64(&x134, &x135, x133, x99, x127); + fiat_np384_addcarryx_u64(&x136, &x137, x135, x100, x128); + fiat_np384_addcarryx_u64(&x138, &x139, x137, x101, x129); + fiat_np384_addcarryx_u64(&x140, &x141, x139, x102, x130); + fiat_np384_addcarryx_u64(&x142, &x143, x141, x103, x131); + fiat_np384_subborrowx_u64(&x144, &x145, 0x0, x132, UINT64_C(0xecec196accc52973)); + fiat_np384_subborrowx_u64(&x146, &x147, x145, x134, UINT64_C(0x581a0db248b0a77a)); + fiat_np384_subborrowx_u64(&x148, &x149, x147, x136, UINT64_C(0xc7634d81f4372ddf)); + fiat_np384_subborrowx_u64(&x150, &x151, x149, x138, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x152, &x153, x151, x140, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x154, &x155, x153, x142, UINT64_C(0xffffffffffffffff)); + fiat_np384_subborrowx_u64(&x156, &x157, x155, x143, 0x0); + fiat_np384_addcarryx_u64(&x158, &x159, 0x0, x6, 0x1); + x160 = ((x112 >> 1) | ((x114 << 63) & UINT64_C(0xffffffffffffffff))); + x161 = ((x114 >> 1) | ((x116 << 63) & UINT64_C(0xffffffffffffffff))); + x162 = ((x116 >> 1) | ((x118 << 63) & UINT64_C(0xffffffffffffffff))); + x163 = ((x118 >> 1) | ((x120 << 63) & UINT64_C(0xffffffffffffffff))); + x164 = ((x120 >> 1) | ((x122 << 63) & UINT64_C(0xffffffffffffffff))); + x165 = ((x122 >> 1) | ((x124 << 63) & UINT64_C(0xffffffffffffffff))); + x166 = ((x124 & UINT64_C(0x8000000000000000)) | (x124 >> 1)); + fiat_np384_cmovznz_u64(&x167, x66, x53, x41); + fiat_np384_cmovznz_u64(&x168, x66, x55, x43); + fiat_np384_cmovznz_u64(&x169, x66, x57, x45); + fiat_np384_cmovznz_u64(&x170, x66, x59, x47); + fiat_np384_cmovznz_u64(&x171, x66, x61, x49); + fiat_np384_cmovznz_u64(&x172, x66, x63, x51); + fiat_np384_cmovznz_u64(&x173, x157, x144, x132); + fiat_np384_cmovznz_u64(&x174, x157, x146, x134); + fiat_np384_cmovznz_u64(&x175, x157, x148, x136); + fiat_np384_cmovznz_u64(&x176, x157, x150, x138); + fiat_np384_cmovznz_u64(&x177, x157, x152, x140); + fiat_np384_cmovznz_u64(&x178, x157, x154, x142); + *out1 = x158; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out2[5] = x12; + out2[6] = x13; + out3[0] = x160; + out3[1] = x161; + out3[2] = x162; + out3[3] = x163; + out3[4] = x164; + out3[5] = x165; + out3[6] = x166; + out4[0] = x167; + out4[1] = x168; + out4[2] = x169; + out4[3] = x170; + out4[4] = x171; + out4[5] = x172; + out5[0] = x173; + out5[1] = x174; + out5[2] = x175; + out5[3] = x176; + out5[4] = x177; + out5[5] = x178; +} + +/* + * The function fiat_np384_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..47] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + */ +static void fiat_np384_to_bytes(uint8_t out1[48], const uint64_t arg1[6]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint8_t x7; + uint64_t x8; + uint8_t x9; + uint64_t x10; + uint8_t x11; + uint64_t x12; + uint8_t x13; + uint64_t x14; + uint8_t x15; + uint64_t x16; + uint8_t x17; + uint64_t x18; + uint8_t x19; + uint8_t x20; + uint8_t x21; + uint64_t x22; + uint8_t x23; + uint64_t x24; + uint8_t x25; + uint64_t x26; + uint8_t x27; + uint64_t x28; + uint8_t x29; + uint64_t x30; + uint8_t x31; + uint64_t x32; + uint8_t x33; + uint8_t x34; + uint8_t x35; + uint64_t x36; + uint8_t x37; + uint64_t x38; + uint8_t x39; + uint64_t x40; + uint8_t x41; + uint64_t x42; + uint8_t x43; + uint64_t x44; + uint8_t x45; + uint64_t x46; + uint8_t x47; + uint8_t x48; + uint8_t x49; + uint64_t x50; + uint8_t x51; + uint64_t x52; + uint8_t x53; + uint64_t x54; + uint8_t x55; + uint64_t x56; + uint8_t x57; + uint64_t x58; + uint8_t x59; + uint64_t x60; + uint8_t x61; + uint8_t x62; + uint8_t x63; + uint64_t x64; + uint8_t x65; + uint64_t x66; + uint8_t x67; + uint64_t x68; + uint8_t x69; + uint64_t x70; + uint8_t x71; + uint64_t x72; + uint8_t x73; + uint64_t x74; + uint8_t x75; + uint8_t x76; + uint8_t x77; + uint64_t x78; + uint8_t x79; + uint64_t x80; + uint8_t x81; + uint64_t x82; + uint8_t x83; + uint64_t x84; + uint8_t x85; + uint64_t x86; + uint8_t x87; + uint64_t x88; + uint8_t x89; + uint8_t x90; + x1 = (arg1[5]); + x2 = (arg1[4]); + x3 = (arg1[3]); + x4 = (arg1[2]); + x5 = (arg1[1]); + x6 = (arg1[0]); + x7 = (uint8_t)(x6 & UINT8_C(0xff)); + x8 = (x6 >> 8); + x9 = (uint8_t)(x8 & UINT8_C(0xff)); + x10 = (x8 >> 8); + x11 = (uint8_t)(x10 & UINT8_C(0xff)); + x12 = (x10 >> 8); + x13 = (uint8_t)(x12 & UINT8_C(0xff)); + x14 = (x12 >> 8); + x15 = (uint8_t)(x14 & UINT8_C(0xff)); + x16 = (x14 >> 8); + x17 = (uint8_t)(x16 & UINT8_C(0xff)); + x18 = (x16 >> 8); + x19 = (uint8_t)(x18 & UINT8_C(0xff)); + x20 = (uint8_t)(x18 >> 8); + x21 = (uint8_t)(x5 & UINT8_C(0xff)); + x22 = (x5 >> 8); + x23 = (uint8_t)(x22 & UINT8_C(0xff)); + x24 = (x22 >> 8); + x25 = (uint8_t)(x24 & UINT8_C(0xff)); + x26 = (x24 >> 8); + x27 = (uint8_t)(x26 & UINT8_C(0xff)); + x28 = (x26 >> 8); + x29 = (uint8_t)(x28 & UINT8_C(0xff)); + x30 = (x28 >> 8); + x31 = (uint8_t)(x30 & UINT8_C(0xff)); + x32 = (x30 >> 8); + x33 = (uint8_t)(x32 & UINT8_C(0xff)); + x34 = (uint8_t)(x32 >> 8); + x35 = (uint8_t)(x4 & UINT8_C(0xff)); + x36 = (x4 >> 8); + x37 = (uint8_t)(x36 & UINT8_C(0xff)); + x38 = (x36 >> 8); + x39 = (uint8_t)(x38 & UINT8_C(0xff)); + x40 = (x38 >> 8); + x41 = (uint8_t)(x40 & UINT8_C(0xff)); + x42 = (x40 >> 8); + x43 = (uint8_t)(x42 & UINT8_C(0xff)); + x44 = (x42 >> 8); + x45 = (uint8_t)(x44 & UINT8_C(0xff)); + x46 = (x44 >> 8); + x47 = (uint8_t)(x46 & UINT8_C(0xff)); + x48 = (uint8_t)(x46 >> 8); + x49 = (uint8_t)(x3 & UINT8_C(0xff)); + x50 = (x3 >> 8); + x51 = (uint8_t)(x50 & UINT8_C(0xff)); + x52 = (x50 >> 8); + x53 = (uint8_t)(x52 & UINT8_C(0xff)); + x54 = (x52 >> 8); + x55 = (uint8_t)(x54 & UINT8_C(0xff)); + x56 = (x54 >> 8); + x57 = (uint8_t)(x56 & UINT8_C(0xff)); + x58 = (x56 >> 8); + x59 = (uint8_t)(x58 & UINT8_C(0xff)); + x60 = (x58 >> 8); + x61 = (uint8_t)(x60 & UINT8_C(0xff)); + x62 = (uint8_t)(x60 >> 8); + x63 = (uint8_t)(x2 & UINT8_C(0xff)); + x64 = (x2 >> 8); + x65 = (uint8_t)(x64 & UINT8_C(0xff)); + x66 = (x64 >> 8); + x67 = (uint8_t)(x66 & UINT8_C(0xff)); + x68 = (x66 >> 8); + x69 = (uint8_t)(x68 & UINT8_C(0xff)); + x70 = (x68 >> 8); + x71 = (uint8_t)(x70 & UINT8_C(0xff)); + x72 = (x70 >> 8); + x73 = (uint8_t)(x72 & UINT8_C(0xff)); + x74 = (x72 >> 8); + x75 = (uint8_t)(x74 & UINT8_C(0xff)); + x76 = (uint8_t)(x74 >> 8); + x77 = (uint8_t)(x1 & UINT8_C(0xff)); + x78 = (x1 >> 8); + x79 = (uint8_t)(x78 & UINT8_C(0xff)); + x80 = (x78 >> 8); + x81 = (uint8_t)(x80 & UINT8_C(0xff)); + x82 = (x80 >> 8); + x83 = (uint8_t)(x82 & UINT8_C(0xff)); + x84 = (x82 >> 8); + x85 = (uint8_t)(x84 & UINT8_C(0xff)); + x86 = (x84 >> 8); + x87 = (uint8_t)(x86 & UINT8_C(0xff)); + x88 = (x86 >> 8); + x89 = (uint8_t)(x88 & UINT8_C(0xff)); + x90 = (uint8_t)(x88 >> 8); + out1[0] = x7; + out1[1] = x9; + out1[2] = x11; + out1[3] = x13; + out1[4] = x15; + out1[5] = x17; + out1[6] = x19; + out1[7] = x20; + out1[8] = x21; + out1[9] = x23; + out1[10] = x25; + out1[11] = x27; + out1[12] = x29; + out1[13] = x31; + out1[14] = x33; + out1[15] = x34; + out1[16] = x35; + out1[17] = x37; + out1[18] = x39; + out1[19] = x41; + out1[20] = x43; + out1[21] = x45; + out1[22] = x47; + out1[23] = x48; + out1[24] = x49; + out1[25] = x51; + out1[26] = x53; + out1[27] = x55; + out1[28] = x57; + out1[29] = x59; + out1[30] = x61; + out1[31] = x62; + out1[32] = x63; + out1[33] = x65; + out1[34] = x67; + out1[35] = x69; + out1[36] = x71; + out1[37] = x73; + out1[38] = x75; + out1[39] = x76; + out1[40] = x77; + out1[41] = x79; + out1[42] = x81; + out1[43] = x83; + out1[44] = x85; + out1[45] = x87; + out1[46] = x89; + out1[47] = x90; +} + +/* + * The function fiat_np384_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np384_from_bytes(uint64_t out1[6], const uint8_t arg1[48]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint8_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint8_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint8_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint8_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint8_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint8_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint64_t x57; + uint64_t x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + uint64_t x65; + uint64_t x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + uint64_t x81; + uint64_t x82; + uint64_t x83; + uint64_t x84; + uint64_t x85; + uint64_t x86; + uint64_t x87; + uint64_t x88; + uint64_t x89; + uint64_t x90; + x1 = ((uint64_t)(arg1[47]) << 56); + x2 = ((uint64_t)(arg1[46]) << 48); + x3 = ((uint64_t)(arg1[45]) << 40); + x4 = ((uint64_t)(arg1[44]) << 32); + x5 = ((uint64_t)(arg1[43]) << 24); + x6 = ((uint64_t)(arg1[42]) << 16); + x7 = ((uint64_t)(arg1[41]) << 8); + x8 = (arg1[40]); + x9 = ((uint64_t)(arg1[39]) << 56); + x10 = ((uint64_t)(arg1[38]) << 48); + x11 = ((uint64_t)(arg1[37]) << 40); + x12 = ((uint64_t)(arg1[36]) << 32); + x13 = ((uint64_t)(arg1[35]) << 24); + x14 = ((uint64_t)(arg1[34]) << 16); + x15 = ((uint64_t)(arg1[33]) << 8); + x16 = (arg1[32]); + x17 = ((uint64_t)(arg1[31]) << 56); + x18 = ((uint64_t)(arg1[30]) << 48); + x19 = ((uint64_t)(arg1[29]) << 40); + x20 = ((uint64_t)(arg1[28]) << 32); + x21 = ((uint64_t)(arg1[27]) << 24); + x22 = ((uint64_t)(arg1[26]) << 16); + x23 = ((uint64_t)(arg1[25]) << 8); + x24 = (arg1[24]); + x25 = ((uint64_t)(arg1[23]) << 56); + x26 = ((uint64_t)(arg1[22]) << 48); + x27 = ((uint64_t)(arg1[21]) << 40); + x28 = ((uint64_t)(arg1[20]) << 32); + x29 = ((uint64_t)(arg1[19]) << 24); + x30 = ((uint64_t)(arg1[18]) << 16); + x31 = ((uint64_t)(arg1[17]) << 8); + x32 = (arg1[16]); + x33 = ((uint64_t)(arg1[15]) << 56); + x34 = ((uint64_t)(arg1[14]) << 48); + x35 = ((uint64_t)(arg1[13]) << 40); + x36 = ((uint64_t)(arg1[12]) << 32); + x37 = ((uint64_t)(arg1[11]) << 24); + x38 = ((uint64_t)(arg1[10]) << 16); + x39 = ((uint64_t)(arg1[9]) << 8); + x40 = (arg1[8]); + x41 = ((uint64_t)(arg1[7]) << 56); + x42 = ((uint64_t)(arg1[6]) << 48); + x43 = ((uint64_t)(arg1[5]) << 40); + x44 = ((uint64_t)(arg1[4]) << 32); + x45 = ((uint64_t)(arg1[3]) << 24); + x46 = ((uint64_t)(arg1[2]) << 16); + x47 = ((uint64_t)(arg1[1]) << 8); + x48 = (arg1[0]); + x49 = (x47 + (uint64_t)x48); + x50 = (x46 + x49); + x51 = (x45 + x50); + x52 = (x44 + x51); + x53 = (x43 + x52); + x54 = (x42 + x53); + x55 = (x41 + x54); + x56 = (x39 + (uint64_t)x40); + x57 = (x38 + x56); + x58 = (x37 + x57); + x59 = (x36 + x58); + x60 = (x35 + x59); + x61 = (x34 + x60); + x62 = (x33 + x61); + x63 = (x31 + (uint64_t)x32); + x64 = (x30 + x63); + x65 = (x29 + x64); + x66 = (x28 + x65); + x67 = (x27 + x66); + x68 = (x26 + x67); + x69 = (x25 + x68); + x70 = (x23 + (uint64_t)x24); + x71 = (x22 + x70); + x72 = (x21 + x71); + x73 = (x20 + x72); + x74 = (x19 + x73); + x75 = (x18 + x74); + x76 = (x17 + x75); + x77 = (x15 + (uint64_t)x16); + x78 = (x14 + x77); + x79 = (x13 + x78); + x80 = (x12 + x79); + x81 = (x11 + x80); + x82 = (x10 + x81); + x83 = (x9 + x82); + x84 = (x7 + (uint64_t)x8); + x85 = (x6 + x84); + x86 = (x5 + x85); + x87 = (x4 + x86); + x88 = (x3 + x87); + x89 = (x2 + x88); + x90 = (x1 + x89); + out1[0] = x55; + out1[1] = x62; + out1[2] = x69; + out1[3] = x76; + out1[4] = x83; + out1[5] = x90; +} + diff --git a/ec/native/np384_stubs.c b/ec/native/np384_stubs.c new file mode 100644 index 00000000..c1abd4e5 --- /dev/null +++ b/ec/native/np384_stubs.c @@ -0,0 +1,76 @@ +#include "mirage_crypto.h" + +#ifdef ARCH_64BIT +#include "np384_64.h" +#define LIMBS 6 +#define WORD uint64_t +#define WORDSIZE 64 +#else +#include "np384_32.h" +#define LIMBS 12 +#define WORD uint32_t +#define WORDSIZE 32 +#endif + +#define LEN_PRIME 384 +#define CURVE_DESCRIPTION fiat_np384 + +#include "inversion_template.h" + +#include + +CAMLprim value mc_np384_inv(value out, value in) +{ + CAMLparam2(out, in); + inversion(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np384_mul(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_np384_mul(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np384_add(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_np384_add(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np384_one(value out) +{ + CAMLparam1(out); + fiat_np384_set_one(Caml_ba_data_val(out)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np384_from_bytes(value out, value in) +{ + CAMLparam2(out, in); + fiat_np384_from_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np384_to_bytes(value out, value in) +{ + CAMLparam2(out, in); + fiat_np384_to_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np384_from_montgomery(value out, value in) +{ + CAMLparam2(out, in); + fiat_np384_from_montgomery(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np384_to_montgomery(value out, value in) +{ + CAMLparam2(out, in); + fiat_np384_to_montgomery(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} diff --git a/ec/native/np521_32.h b/ec/native/np521_32.h new file mode 100644 index 00000000..6ceb7648 --- /dev/null +++ b/ec/native/np521_32.h @@ -0,0 +1,16202 @@ +/* Autogenerated: '../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery' --static --use-value-barrier np521 32 0x01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409 mul add opp from_montgomery to_montgomery one msat divstep_precomp divstep to_bytes from_bytes */ +/* curve description: np521 */ +/* machine_wordsize = 32 (from "32") */ +/* requested operations: mul, add, opp, from_montgomery, to_montgomery, one, msat, divstep_precomp, divstep, to_bytes, from_bytes */ +/* m = 0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409 (from "0x01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 32) + (z[2] << 64) + (z[3] << 96) + (z[4] << 128) + (z[5] << 160) + (z[6] << 192) + (z[7] << 224) + (z[8] << 256) + (z[9] << 0x120) + (z[10] << 0x140) + (z[11] << 0x160) + (z[12] << 0x180) + (z[13] << 0x1a0) + (z[14] << 0x1c0) + (z[15] << 0x1e0) + (z[16] << 2^9) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) + (z[32] << 256) + (z[33] << 0x108) + (z[34] << 0x110) + (z[35] << 0x118) + (z[36] << 0x120) + (z[37] << 0x128) + (z[38] << 0x130) + (z[39] << 0x138) + (z[40] << 0x140) + (z[41] << 0x148) + (z[42] << 0x150) + (z[43] << 0x158) + (z[44] << 0x160) + (z[45] << 0x168) + (z[46] << 0x170) + (z[47] << 0x178) + (z[48] << 0x180) + (z[49] << 0x188) + (z[50] << 0x190) + (z[51] << 0x198) + (z[52] << 0x1a0) + (z[53] << 0x1a8) + (z[54] << 0x1b0) + (z[55] << 0x1b8) + (z[56] << 0x1c0) + (z[57] << 0x1c8) + (z[58] << 0x1d0) + (z[59] << 0x1d8) + (z[60] << 0x1e0) + (z[61] << 0x1e8) + (z[62] << 0x1f0) + (z[63] << 0x1f8) + (z[64] << 2^9) + (z[65] << 0x208) */ + +#include +typedef unsigned char fiat_np521_uint1; +typedef signed char fiat_np521_int1; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_NP521_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint32_t fiat_np521_value_barrier_u32(uint32_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_np521_value_barrier_u32(x) (x) +#endif + + +/* + * The function fiat_np521_addcarryx_u32 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^32 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_np521_addcarryx_u32(uint32_t* out1, fiat_np521_uint1* out2, fiat_np521_uint1 arg1, uint32_t arg2, uint32_t arg3) { + uint64_t x1; + uint32_t x2; + fiat_np521_uint1 x3; + x1 = ((arg1 + (uint64_t)arg2) + arg3); + x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + x3 = (fiat_np521_uint1)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_np521_subborrowx_u32 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^32 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_np521_subborrowx_u32(uint32_t* out1, fiat_np521_uint1* out2, fiat_np521_uint1 arg1, uint32_t arg2, uint32_t arg3) { + int64_t x1; + fiat_np521_int1 x2; + uint32_t x3; + x1 = ((arg2 - (int64_t)arg1) - arg3); + x2 = (fiat_np521_int1)(x1 >> 32); + x3 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + *out1 = x3; + *out2 = (fiat_np521_uint1)(0x0 - x2); +} + +/* + * The function fiat_np521_mulx_u32 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^32 + * out2 = ⌊arg1 * arg2 / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0xffffffff] + */ +static void fiat_np521_mulx_u32(uint32_t* out1, uint32_t* out2, uint32_t arg1, uint32_t arg2) { + uint64_t x1; + uint32_t x2; + uint32_t x3; + x1 = ((uint64_t)arg1 * arg2); + x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + x3 = (uint32_t)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_np521_cmovznz_u32 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static void fiat_np521_cmovznz_u32(uint32_t* out1, fiat_np521_uint1 arg1, uint32_t arg2, uint32_t arg3) { + fiat_np521_uint1 x1; + uint32_t x2; + uint32_t x3; + x1 = (!(!arg1)); + x2 = ((fiat_np521_int1)(0x0 - x1) & UINT32_C(0xffffffff)); + x3 = ((fiat_np521_value_barrier_u32(x2) & arg3) | (fiat_np521_value_barrier_u32((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_np521_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np521_mul(uint32_t out1[17], const uint32_t arg1[17], const uint32_t arg2[17]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint32_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + uint32_t x52; + fiat_np521_uint1 x53; + uint32_t x54; + fiat_np521_uint1 x55; + uint32_t x56; + fiat_np521_uint1 x57; + uint32_t x58; + fiat_np521_uint1 x59; + uint32_t x60; + fiat_np521_uint1 x61; + uint32_t x62; + fiat_np521_uint1 x63; + uint32_t x64; + fiat_np521_uint1 x65; + uint32_t x66; + fiat_np521_uint1 x67; + uint32_t x68; + fiat_np521_uint1 x69; + uint32_t x70; + fiat_np521_uint1 x71; + uint32_t x72; + fiat_np521_uint1 x73; + uint32_t x74; + fiat_np521_uint1 x75; + uint32_t x76; + fiat_np521_uint1 x77; + uint32_t x78; + fiat_np521_uint1 x79; + uint32_t x80; + fiat_np521_uint1 x81; + uint32_t x82; + fiat_np521_uint1 x83; + uint32_t x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + uint32_t x88; + uint32_t x89; + uint32_t x90; + uint32_t x91; + uint32_t x92; + uint32_t x93; + uint32_t x94; + uint32_t x95; + uint32_t x96; + uint32_t x97; + uint32_t x98; + uint32_t x99; + uint32_t x100; + uint32_t x101; + uint32_t x102; + uint32_t x103; + uint32_t x104; + uint32_t x105; + uint32_t x106; + uint32_t x107; + uint32_t x108; + uint32_t x109; + uint32_t x110; + uint32_t x111; + uint32_t x112; + uint32_t x113; + uint32_t x114; + uint32_t x115; + uint32_t x116; + uint32_t x117; + uint32_t x118; + uint32_t x119; + uint32_t x120; + uint32_t x121; + fiat_np521_uint1 x122; + uint32_t x123; + fiat_np521_uint1 x124; + uint32_t x125; + fiat_np521_uint1 x126; + uint32_t x127; + fiat_np521_uint1 x128; + uint32_t x129; + fiat_np521_uint1 x130; + uint32_t x131; + fiat_np521_uint1 x132; + uint32_t x133; + fiat_np521_uint1 x134; + uint32_t x135; + fiat_np521_uint1 x136; + uint32_t x137; + fiat_np521_uint1 x138; + uint32_t x139; + fiat_np521_uint1 x140; + uint32_t x141; + fiat_np521_uint1 x142; + uint32_t x143; + fiat_np521_uint1 x144; + uint32_t x145; + fiat_np521_uint1 x146; + uint32_t x147; + fiat_np521_uint1 x148; + uint32_t x149; + fiat_np521_uint1 x150; + uint32_t x151; + fiat_np521_uint1 x152; + uint32_t x153; + uint32_t x154; + fiat_np521_uint1 x155; + uint32_t x156; + fiat_np521_uint1 x157; + uint32_t x158; + fiat_np521_uint1 x159; + uint32_t x160; + fiat_np521_uint1 x161; + uint32_t x162; + fiat_np521_uint1 x163; + uint32_t x164; + fiat_np521_uint1 x165; + uint32_t x166; + fiat_np521_uint1 x167; + uint32_t x168; + fiat_np521_uint1 x169; + uint32_t x170; + fiat_np521_uint1 x171; + uint32_t x172; + fiat_np521_uint1 x173; + uint32_t x174; + fiat_np521_uint1 x175; + uint32_t x176; + fiat_np521_uint1 x177; + uint32_t x178; + fiat_np521_uint1 x179; + uint32_t x180; + fiat_np521_uint1 x181; + uint32_t x182; + fiat_np521_uint1 x183; + uint32_t x184; + fiat_np521_uint1 x185; + uint32_t x186; + fiat_np521_uint1 x187; + uint32_t x188; + fiat_np521_uint1 x189; + uint32_t x190; + uint32_t x191; + uint32_t x192; + uint32_t x193; + uint32_t x194; + uint32_t x195; + uint32_t x196; + uint32_t x197; + uint32_t x198; + uint32_t x199; + uint32_t x200; + uint32_t x201; + uint32_t x202; + uint32_t x203; + uint32_t x204; + uint32_t x205; + uint32_t x206; + uint32_t x207; + uint32_t x208; + uint32_t x209; + uint32_t x210; + uint32_t x211; + uint32_t x212; + uint32_t x213; + uint32_t x214; + uint32_t x215; + uint32_t x216; + uint32_t x217; + uint32_t x218; + uint32_t x219; + uint32_t x220; + uint32_t x221; + uint32_t x222; + uint32_t x223; + uint32_t x224; + fiat_np521_uint1 x225; + uint32_t x226; + fiat_np521_uint1 x227; + uint32_t x228; + fiat_np521_uint1 x229; + uint32_t x230; + fiat_np521_uint1 x231; + uint32_t x232; + fiat_np521_uint1 x233; + uint32_t x234; + fiat_np521_uint1 x235; + uint32_t x236; + fiat_np521_uint1 x237; + uint32_t x238; + fiat_np521_uint1 x239; + uint32_t x240; + fiat_np521_uint1 x241; + uint32_t x242; + fiat_np521_uint1 x243; + uint32_t x244; + fiat_np521_uint1 x245; + uint32_t x246; + fiat_np521_uint1 x247; + uint32_t x248; + fiat_np521_uint1 x249; + uint32_t x250; + fiat_np521_uint1 x251; + uint32_t x252; + fiat_np521_uint1 x253; + uint32_t x254; + fiat_np521_uint1 x255; + uint32_t x256; + uint32_t x257; + fiat_np521_uint1 x258; + uint32_t x259; + fiat_np521_uint1 x260; + uint32_t x261; + fiat_np521_uint1 x262; + uint32_t x263; + fiat_np521_uint1 x264; + uint32_t x265; + fiat_np521_uint1 x266; + uint32_t x267; + fiat_np521_uint1 x268; + uint32_t x269; + fiat_np521_uint1 x270; + uint32_t x271; + fiat_np521_uint1 x272; + uint32_t x273; + fiat_np521_uint1 x274; + uint32_t x275; + fiat_np521_uint1 x276; + uint32_t x277; + fiat_np521_uint1 x278; + uint32_t x279; + fiat_np521_uint1 x280; + uint32_t x281; + fiat_np521_uint1 x282; + uint32_t x283; + fiat_np521_uint1 x284; + uint32_t x285; + fiat_np521_uint1 x286; + uint32_t x287; + fiat_np521_uint1 x288; + uint32_t x289; + fiat_np521_uint1 x290; + uint32_t x291; + fiat_np521_uint1 x292; + uint32_t x293; + uint32_t x294; + uint32_t x295; + uint32_t x296; + uint32_t x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + uint32_t x303; + uint32_t x304; + uint32_t x305; + uint32_t x306; + uint32_t x307; + uint32_t x308; + uint32_t x309; + uint32_t x310; + uint32_t x311; + uint32_t x312; + uint32_t x313; + uint32_t x314; + uint32_t x315; + uint32_t x316; + uint32_t x317; + uint32_t x318; + uint32_t x319; + uint32_t x320; + uint32_t x321; + uint32_t x322; + uint32_t x323; + uint32_t x324; + uint32_t x325; + uint32_t x326; + uint32_t x327; + uint32_t x328; + uint32_t x329; + fiat_np521_uint1 x330; + uint32_t x331; + fiat_np521_uint1 x332; + uint32_t x333; + fiat_np521_uint1 x334; + uint32_t x335; + fiat_np521_uint1 x336; + uint32_t x337; + fiat_np521_uint1 x338; + uint32_t x339; + fiat_np521_uint1 x340; + uint32_t x341; + fiat_np521_uint1 x342; + uint32_t x343; + fiat_np521_uint1 x344; + uint32_t x345; + fiat_np521_uint1 x346; + uint32_t x347; + fiat_np521_uint1 x348; + uint32_t x349; + fiat_np521_uint1 x350; + uint32_t x351; + fiat_np521_uint1 x352; + uint32_t x353; + fiat_np521_uint1 x354; + uint32_t x355; + fiat_np521_uint1 x356; + uint32_t x357; + fiat_np521_uint1 x358; + uint32_t x359; + fiat_np521_uint1 x360; + uint32_t x361; + uint32_t x362; + fiat_np521_uint1 x363; + uint32_t x364; + fiat_np521_uint1 x365; + uint32_t x366; + fiat_np521_uint1 x367; + uint32_t x368; + fiat_np521_uint1 x369; + uint32_t x370; + fiat_np521_uint1 x371; + uint32_t x372; + fiat_np521_uint1 x373; + uint32_t x374; + fiat_np521_uint1 x375; + uint32_t x376; + fiat_np521_uint1 x377; + uint32_t x378; + fiat_np521_uint1 x379; + uint32_t x380; + fiat_np521_uint1 x381; + uint32_t x382; + fiat_np521_uint1 x383; + uint32_t x384; + fiat_np521_uint1 x385; + uint32_t x386; + fiat_np521_uint1 x387; + uint32_t x388; + fiat_np521_uint1 x389; + uint32_t x390; + fiat_np521_uint1 x391; + uint32_t x392; + fiat_np521_uint1 x393; + uint32_t x394; + fiat_np521_uint1 x395; + uint32_t x396; + fiat_np521_uint1 x397; + uint32_t x398; + uint32_t x399; + uint32_t x400; + uint32_t x401; + uint32_t x402; + uint32_t x403; + uint32_t x404; + uint32_t x405; + uint32_t x406; + uint32_t x407; + uint32_t x408; + uint32_t x409; + uint32_t x410; + uint32_t x411; + uint32_t x412; + uint32_t x413; + uint32_t x414; + uint32_t x415; + uint32_t x416; + uint32_t x417; + uint32_t x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + uint32_t x422; + uint32_t x423; + uint32_t x424; + uint32_t x425; + uint32_t x426; + uint32_t x427; + uint32_t x428; + uint32_t x429; + uint32_t x430; + uint32_t x431; + uint32_t x432; + uint32_t x433; + fiat_np521_uint1 x434; + uint32_t x435; + fiat_np521_uint1 x436; + uint32_t x437; + fiat_np521_uint1 x438; + uint32_t x439; + fiat_np521_uint1 x440; + uint32_t x441; + fiat_np521_uint1 x442; + uint32_t x443; + fiat_np521_uint1 x444; + uint32_t x445; + fiat_np521_uint1 x446; + uint32_t x447; + fiat_np521_uint1 x448; + uint32_t x449; + fiat_np521_uint1 x450; + uint32_t x451; + fiat_np521_uint1 x452; + uint32_t x453; + fiat_np521_uint1 x454; + uint32_t x455; + fiat_np521_uint1 x456; + uint32_t x457; + fiat_np521_uint1 x458; + uint32_t x459; + fiat_np521_uint1 x460; + uint32_t x461; + fiat_np521_uint1 x462; + uint32_t x463; + fiat_np521_uint1 x464; + uint32_t x465; + uint32_t x466; + fiat_np521_uint1 x467; + uint32_t x468; + fiat_np521_uint1 x469; + uint32_t x470; + fiat_np521_uint1 x471; + uint32_t x472; + fiat_np521_uint1 x473; + uint32_t x474; + fiat_np521_uint1 x475; + uint32_t x476; + fiat_np521_uint1 x477; + uint32_t x478; + fiat_np521_uint1 x479; + uint32_t x480; + fiat_np521_uint1 x481; + uint32_t x482; + fiat_np521_uint1 x483; + uint32_t x484; + fiat_np521_uint1 x485; + uint32_t x486; + fiat_np521_uint1 x487; + uint32_t x488; + fiat_np521_uint1 x489; + uint32_t x490; + fiat_np521_uint1 x491; + uint32_t x492; + fiat_np521_uint1 x493; + uint32_t x494; + fiat_np521_uint1 x495; + uint32_t x496; + fiat_np521_uint1 x497; + uint32_t x498; + fiat_np521_uint1 x499; + uint32_t x500; + fiat_np521_uint1 x501; + uint32_t x502; + uint32_t x503; + uint32_t x504; + uint32_t x505; + uint32_t x506; + uint32_t x507; + uint32_t x508; + uint32_t x509; + uint32_t x510; + uint32_t x511; + uint32_t x512; + uint32_t x513; + uint32_t x514; + uint32_t x515; + uint32_t x516; + uint32_t x517; + uint32_t x518; + uint32_t x519; + uint32_t x520; + uint32_t x521; + uint32_t x522; + uint32_t x523; + uint32_t x524; + uint32_t x525; + uint32_t x526; + uint32_t x527; + uint32_t x528; + uint32_t x529; + uint32_t x530; + uint32_t x531; + uint32_t x532; + uint32_t x533; + uint32_t x534; + uint32_t x535; + uint32_t x536; + uint32_t x537; + uint32_t x538; + fiat_np521_uint1 x539; + uint32_t x540; + fiat_np521_uint1 x541; + uint32_t x542; + fiat_np521_uint1 x543; + uint32_t x544; + fiat_np521_uint1 x545; + uint32_t x546; + fiat_np521_uint1 x547; + uint32_t x548; + fiat_np521_uint1 x549; + uint32_t x550; + fiat_np521_uint1 x551; + uint32_t x552; + fiat_np521_uint1 x553; + uint32_t x554; + fiat_np521_uint1 x555; + uint32_t x556; + fiat_np521_uint1 x557; + uint32_t x558; + fiat_np521_uint1 x559; + uint32_t x560; + fiat_np521_uint1 x561; + uint32_t x562; + fiat_np521_uint1 x563; + uint32_t x564; + fiat_np521_uint1 x565; + uint32_t x566; + fiat_np521_uint1 x567; + uint32_t x568; + fiat_np521_uint1 x569; + uint32_t x570; + uint32_t x571; + fiat_np521_uint1 x572; + uint32_t x573; + fiat_np521_uint1 x574; + uint32_t x575; + fiat_np521_uint1 x576; + uint32_t x577; + fiat_np521_uint1 x578; + uint32_t x579; + fiat_np521_uint1 x580; + uint32_t x581; + fiat_np521_uint1 x582; + uint32_t x583; + fiat_np521_uint1 x584; + uint32_t x585; + fiat_np521_uint1 x586; + uint32_t x587; + fiat_np521_uint1 x588; + uint32_t x589; + fiat_np521_uint1 x590; + uint32_t x591; + fiat_np521_uint1 x592; + uint32_t x593; + fiat_np521_uint1 x594; + uint32_t x595; + fiat_np521_uint1 x596; + uint32_t x597; + fiat_np521_uint1 x598; + uint32_t x599; + fiat_np521_uint1 x600; + uint32_t x601; + fiat_np521_uint1 x602; + uint32_t x603; + fiat_np521_uint1 x604; + uint32_t x605; + fiat_np521_uint1 x606; + uint32_t x607; + uint32_t x608; + uint32_t x609; + uint32_t x610; + uint32_t x611; + uint32_t x612; + uint32_t x613; + uint32_t x614; + uint32_t x615; + uint32_t x616; + uint32_t x617; + uint32_t x618; + uint32_t x619; + uint32_t x620; + uint32_t x621; + uint32_t x622; + uint32_t x623; + uint32_t x624; + uint32_t x625; + uint32_t x626; + uint32_t x627; + uint32_t x628; + uint32_t x629; + uint32_t x630; + uint32_t x631; + uint32_t x632; + uint32_t x633; + uint32_t x634; + uint32_t x635; + uint32_t x636; + uint32_t x637; + uint32_t x638; + uint32_t x639; + uint32_t x640; + uint32_t x641; + uint32_t x642; + fiat_np521_uint1 x643; + uint32_t x644; + fiat_np521_uint1 x645; + uint32_t x646; + fiat_np521_uint1 x647; + uint32_t x648; + fiat_np521_uint1 x649; + uint32_t x650; + fiat_np521_uint1 x651; + uint32_t x652; + fiat_np521_uint1 x653; + uint32_t x654; + fiat_np521_uint1 x655; + uint32_t x656; + fiat_np521_uint1 x657; + uint32_t x658; + fiat_np521_uint1 x659; + uint32_t x660; + fiat_np521_uint1 x661; + uint32_t x662; + fiat_np521_uint1 x663; + uint32_t x664; + fiat_np521_uint1 x665; + uint32_t x666; + fiat_np521_uint1 x667; + uint32_t x668; + fiat_np521_uint1 x669; + uint32_t x670; + fiat_np521_uint1 x671; + uint32_t x672; + fiat_np521_uint1 x673; + uint32_t x674; + uint32_t x675; + fiat_np521_uint1 x676; + uint32_t x677; + fiat_np521_uint1 x678; + uint32_t x679; + fiat_np521_uint1 x680; + uint32_t x681; + fiat_np521_uint1 x682; + uint32_t x683; + fiat_np521_uint1 x684; + uint32_t x685; + fiat_np521_uint1 x686; + uint32_t x687; + fiat_np521_uint1 x688; + uint32_t x689; + fiat_np521_uint1 x690; + uint32_t x691; + fiat_np521_uint1 x692; + uint32_t x693; + fiat_np521_uint1 x694; + uint32_t x695; + fiat_np521_uint1 x696; + uint32_t x697; + fiat_np521_uint1 x698; + uint32_t x699; + fiat_np521_uint1 x700; + uint32_t x701; + fiat_np521_uint1 x702; + uint32_t x703; + fiat_np521_uint1 x704; + uint32_t x705; + fiat_np521_uint1 x706; + uint32_t x707; + fiat_np521_uint1 x708; + uint32_t x709; + fiat_np521_uint1 x710; + uint32_t x711; + uint32_t x712; + uint32_t x713; + uint32_t x714; + uint32_t x715; + uint32_t x716; + uint32_t x717; + uint32_t x718; + uint32_t x719; + uint32_t x720; + uint32_t x721; + uint32_t x722; + uint32_t x723; + uint32_t x724; + uint32_t x725; + uint32_t x726; + uint32_t x727; + uint32_t x728; + uint32_t x729; + uint32_t x730; + uint32_t x731; + uint32_t x732; + uint32_t x733; + uint32_t x734; + uint32_t x735; + uint32_t x736; + uint32_t x737; + uint32_t x738; + uint32_t x739; + uint32_t x740; + uint32_t x741; + uint32_t x742; + uint32_t x743; + uint32_t x744; + uint32_t x745; + uint32_t x746; + uint32_t x747; + fiat_np521_uint1 x748; + uint32_t x749; + fiat_np521_uint1 x750; + uint32_t x751; + fiat_np521_uint1 x752; + uint32_t x753; + fiat_np521_uint1 x754; + uint32_t x755; + fiat_np521_uint1 x756; + uint32_t x757; + fiat_np521_uint1 x758; + uint32_t x759; + fiat_np521_uint1 x760; + uint32_t x761; + fiat_np521_uint1 x762; + uint32_t x763; + fiat_np521_uint1 x764; + uint32_t x765; + fiat_np521_uint1 x766; + uint32_t x767; + fiat_np521_uint1 x768; + uint32_t x769; + fiat_np521_uint1 x770; + uint32_t x771; + fiat_np521_uint1 x772; + uint32_t x773; + fiat_np521_uint1 x774; + uint32_t x775; + fiat_np521_uint1 x776; + uint32_t x777; + fiat_np521_uint1 x778; + uint32_t x779; + uint32_t x780; + fiat_np521_uint1 x781; + uint32_t x782; + fiat_np521_uint1 x783; + uint32_t x784; + fiat_np521_uint1 x785; + uint32_t x786; + fiat_np521_uint1 x787; + uint32_t x788; + fiat_np521_uint1 x789; + uint32_t x790; + fiat_np521_uint1 x791; + uint32_t x792; + fiat_np521_uint1 x793; + uint32_t x794; + fiat_np521_uint1 x795; + uint32_t x796; + fiat_np521_uint1 x797; + uint32_t x798; + fiat_np521_uint1 x799; + uint32_t x800; + fiat_np521_uint1 x801; + uint32_t x802; + fiat_np521_uint1 x803; + uint32_t x804; + fiat_np521_uint1 x805; + uint32_t x806; + fiat_np521_uint1 x807; + uint32_t x808; + fiat_np521_uint1 x809; + uint32_t x810; + fiat_np521_uint1 x811; + uint32_t x812; + fiat_np521_uint1 x813; + uint32_t x814; + fiat_np521_uint1 x815; + uint32_t x816; + uint32_t x817; + uint32_t x818; + uint32_t x819; + uint32_t x820; + uint32_t x821; + uint32_t x822; + uint32_t x823; + uint32_t x824; + uint32_t x825; + uint32_t x826; + uint32_t x827; + uint32_t x828; + uint32_t x829; + uint32_t x830; + uint32_t x831; + uint32_t x832; + uint32_t x833; + uint32_t x834; + uint32_t x835; + uint32_t x836; + uint32_t x837; + uint32_t x838; + uint32_t x839; + uint32_t x840; + uint32_t x841; + uint32_t x842; + uint32_t x843; + uint32_t x844; + uint32_t x845; + uint32_t x846; + uint32_t x847; + uint32_t x848; + uint32_t x849; + uint32_t x850; + uint32_t x851; + fiat_np521_uint1 x852; + uint32_t x853; + fiat_np521_uint1 x854; + uint32_t x855; + fiat_np521_uint1 x856; + uint32_t x857; + fiat_np521_uint1 x858; + uint32_t x859; + fiat_np521_uint1 x860; + uint32_t x861; + fiat_np521_uint1 x862; + uint32_t x863; + fiat_np521_uint1 x864; + uint32_t x865; + fiat_np521_uint1 x866; + uint32_t x867; + fiat_np521_uint1 x868; + uint32_t x869; + fiat_np521_uint1 x870; + uint32_t x871; + fiat_np521_uint1 x872; + uint32_t x873; + fiat_np521_uint1 x874; + uint32_t x875; + fiat_np521_uint1 x876; + uint32_t x877; + fiat_np521_uint1 x878; + uint32_t x879; + fiat_np521_uint1 x880; + uint32_t x881; + fiat_np521_uint1 x882; + uint32_t x883; + uint32_t x884; + fiat_np521_uint1 x885; + uint32_t x886; + fiat_np521_uint1 x887; + uint32_t x888; + fiat_np521_uint1 x889; + uint32_t x890; + fiat_np521_uint1 x891; + uint32_t x892; + fiat_np521_uint1 x893; + uint32_t x894; + fiat_np521_uint1 x895; + uint32_t x896; + fiat_np521_uint1 x897; + uint32_t x898; + fiat_np521_uint1 x899; + uint32_t x900; + fiat_np521_uint1 x901; + uint32_t x902; + fiat_np521_uint1 x903; + uint32_t x904; + fiat_np521_uint1 x905; + uint32_t x906; + fiat_np521_uint1 x907; + uint32_t x908; + fiat_np521_uint1 x909; + uint32_t x910; + fiat_np521_uint1 x911; + uint32_t x912; + fiat_np521_uint1 x913; + uint32_t x914; + fiat_np521_uint1 x915; + uint32_t x916; + fiat_np521_uint1 x917; + uint32_t x918; + fiat_np521_uint1 x919; + uint32_t x920; + uint32_t x921; + uint32_t x922; + uint32_t x923; + uint32_t x924; + uint32_t x925; + uint32_t x926; + uint32_t x927; + uint32_t x928; + uint32_t x929; + uint32_t x930; + uint32_t x931; + uint32_t x932; + uint32_t x933; + uint32_t x934; + uint32_t x935; + uint32_t x936; + uint32_t x937; + uint32_t x938; + uint32_t x939; + uint32_t x940; + uint32_t x941; + uint32_t x942; + uint32_t x943; + uint32_t x944; + uint32_t x945; + uint32_t x946; + uint32_t x947; + uint32_t x948; + uint32_t x949; + uint32_t x950; + uint32_t x951; + uint32_t x952; + uint32_t x953; + uint32_t x954; + uint32_t x955; + uint32_t x956; + fiat_np521_uint1 x957; + uint32_t x958; + fiat_np521_uint1 x959; + uint32_t x960; + fiat_np521_uint1 x961; + uint32_t x962; + fiat_np521_uint1 x963; + uint32_t x964; + fiat_np521_uint1 x965; + uint32_t x966; + fiat_np521_uint1 x967; + uint32_t x968; + fiat_np521_uint1 x969; + uint32_t x970; + fiat_np521_uint1 x971; + uint32_t x972; + fiat_np521_uint1 x973; + uint32_t x974; + fiat_np521_uint1 x975; + uint32_t x976; + fiat_np521_uint1 x977; + uint32_t x978; + fiat_np521_uint1 x979; + uint32_t x980; + fiat_np521_uint1 x981; + uint32_t x982; + fiat_np521_uint1 x983; + uint32_t x984; + fiat_np521_uint1 x985; + uint32_t x986; + fiat_np521_uint1 x987; + uint32_t x988; + uint32_t x989; + fiat_np521_uint1 x990; + uint32_t x991; + fiat_np521_uint1 x992; + uint32_t x993; + fiat_np521_uint1 x994; + uint32_t x995; + fiat_np521_uint1 x996; + uint32_t x997; + fiat_np521_uint1 x998; + uint32_t x999; + fiat_np521_uint1 x1000; + uint32_t x1001; + fiat_np521_uint1 x1002; + uint32_t x1003; + fiat_np521_uint1 x1004; + uint32_t x1005; + fiat_np521_uint1 x1006; + uint32_t x1007; + fiat_np521_uint1 x1008; + uint32_t x1009; + fiat_np521_uint1 x1010; + uint32_t x1011; + fiat_np521_uint1 x1012; + uint32_t x1013; + fiat_np521_uint1 x1014; + uint32_t x1015; + fiat_np521_uint1 x1016; + uint32_t x1017; + fiat_np521_uint1 x1018; + uint32_t x1019; + fiat_np521_uint1 x1020; + uint32_t x1021; + fiat_np521_uint1 x1022; + uint32_t x1023; + fiat_np521_uint1 x1024; + uint32_t x1025; + uint32_t x1026; + uint32_t x1027; + uint32_t x1028; + uint32_t x1029; + uint32_t x1030; + uint32_t x1031; + uint32_t x1032; + uint32_t x1033; + uint32_t x1034; + uint32_t x1035; + uint32_t x1036; + uint32_t x1037; + uint32_t x1038; + uint32_t x1039; + uint32_t x1040; + uint32_t x1041; + uint32_t x1042; + uint32_t x1043; + uint32_t x1044; + uint32_t x1045; + uint32_t x1046; + uint32_t x1047; + uint32_t x1048; + uint32_t x1049; + uint32_t x1050; + uint32_t x1051; + uint32_t x1052; + uint32_t x1053; + uint32_t x1054; + uint32_t x1055; + uint32_t x1056; + uint32_t x1057; + uint32_t x1058; + uint32_t x1059; + uint32_t x1060; + fiat_np521_uint1 x1061; + uint32_t x1062; + fiat_np521_uint1 x1063; + uint32_t x1064; + fiat_np521_uint1 x1065; + uint32_t x1066; + fiat_np521_uint1 x1067; + uint32_t x1068; + fiat_np521_uint1 x1069; + uint32_t x1070; + fiat_np521_uint1 x1071; + uint32_t x1072; + fiat_np521_uint1 x1073; + uint32_t x1074; + fiat_np521_uint1 x1075; + uint32_t x1076; + fiat_np521_uint1 x1077; + uint32_t x1078; + fiat_np521_uint1 x1079; + uint32_t x1080; + fiat_np521_uint1 x1081; + uint32_t x1082; + fiat_np521_uint1 x1083; + uint32_t x1084; + fiat_np521_uint1 x1085; + uint32_t x1086; + fiat_np521_uint1 x1087; + uint32_t x1088; + fiat_np521_uint1 x1089; + uint32_t x1090; + fiat_np521_uint1 x1091; + uint32_t x1092; + uint32_t x1093; + fiat_np521_uint1 x1094; + uint32_t x1095; + fiat_np521_uint1 x1096; + uint32_t x1097; + fiat_np521_uint1 x1098; + uint32_t x1099; + fiat_np521_uint1 x1100; + uint32_t x1101; + fiat_np521_uint1 x1102; + uint32_t x1103; + fiat_np521_uint1 x1104; + uint32_t x1105; + fiat_np521_uint1 x1106; + uint32_t x1107; + fiat_np521_uint1 x1108; + uint32_t x1109; + fiat_np521_uint1 x1110; + uint32_t x1111; + fiat_np521_uint1 x1112; + uint32_t x1113; + fiat_np521_uint1 x1114; + uint32_t x1115; + fiat_np521_uint1 x1116; + uint32_t x1117; + fiat_np521_uint1 x1118; + uint32_t x1119; + fiat_np521_uint1 x1120; + uint32_t x1121; + fiat_np521_uint1 x1122; + uint32_t x1123; + fiat_np521_uint1 x1124; + uint32_t x1125; + fiat_np521_uint1 x1126; + uint32_t x1127; + fiat_np521_uint1 x1128; + uint32_t x1129; + uint32_t x1130; + uint32_t x1131; + uint32_t x1132; + uint32_t x1133; + uint32_t x1134; + uint32_t x1135; + uint32_t x1136; + uint32_t x1137; + uint32_t x1138; + uint32_t x1139; + uint32_t x1140; + uint32_t x1141; + uint32_t x1142; + uint32_t x1143; + uint32_t x1144; + uint32_t x1145; + uint32_t x1146; + uint32_t x1147; + uint32_t x1148; + uint32_t x1149; + uint32_t x1150; + uint32_t x1151; + uint32_t x1152; + uint32_t x1153; + uint32_t x1154; + uint32_t x1155; + uint32_t x1156; + uint32_t x1157; + uint32_t x1158; + uint32_t x1159; + uint32_t x1160; + uint32_t x1161; + uint32_t x1162; + uint32_t x1163; + uint32_t x1164; + uint32_t x1165; + fiat_np521_uint1 x1166; + uint32_t x1167; + fiat_np521_uint1 x1168; + uint32_t x1169; + fiat_np521_uint1 x1170; + uint32_t x1171; + fiat_np521_uint1 x1172; + uint32_t x1173; + fiat_np521_uint1 x1174; + uint32_t x1175; + fiat_np521_uint1 x1176; + uint32_t x1177; + fiat_np521_uint1 x1178; + uint32_t x1179; + fiat_np521_uint1 x1180; + uint32_t x1181; + fiat_np521_uint1 x1182; + uint32_t x1183; + fiat_np521_uint1 x1184; + uint32_t x1185; + fiat_np521_uint1 x1186; + uint32_t x1187; + fiat_np521_uint1 x1188; + uint32_t x1189; + fiat_np521_uint1 x1190; + uint32_t x1191; + fiat_np521_uint1 x1192; + uint32_t x1193; + fiat_np521_uint1 x1194; + uint32_t x1195; + fiat_np521_uint1 x1196; + uint32_t x1197; + uint32_t x1198; + fiat_np521_uint1 x1199; + uint32_t x1200; + fiat_np521_uint1 x1201; + uint32_t x1202; + fiat_np521_uint1 x1203; + uint32_t x1204; + fiat_np521_uint1 x1205; + uint32_t x1206; + fiat_np521_uint1 x1207; + uint32_t x1208; + fiat_np521_uint1 x1209; + uint32_t x1210; + fiat_np521_uint1 x1211; + uint32_t x1212; + fiat_np521_uint1 x1213; + uint32_t x1214; + fiat_np521_uint1 x1215; + uint32_t x1216; + fiat_np521_uint1 x1217; + uint32_t x1218; + fiat_np521_uint1 x1219; + uint32_t x1220; + fiat_np521_uint1 x1221; + uint32_t x1222; + fiat_np521_uint1 x1223; + uint32_t x1224; + fiat_np521_uint1 x1225; + uint32_t x1226; + fiat_np521_uint1 x1227; + uint32_t x1228; + fiat_np521_uint1 x1229; + uint32_t x1230; + fiat_np521_uint1 x1231; + uint32_t x1232; + fiat_np521_uint1 x1233; + uint32_t x1234; + uint32_t x1235; + uint32_t x1236; + uint32_t x1237; + uint32_t x1238; + uint32_t x1239; + uint32_t x1240; + uint32_t x1241; + uint32_t x1242; + uint32_t x1243; + uint32_t x1244; + uint32_t x1245; + uint32_t x1246; + uint32_t x1247; + uint32_t x1248; + uint32_t x1249; + uint32_t x1250; + uint32_t x1251; + uint32_t x1252; + uint32_t x1253; + uint32_t x1254; + uint32_t x1255; + uint32_t x1256; + uint32_t x1257; + uint32_t x1258; + uint32_t x1259; + uint32_t x1260; + uint32_t x1261; + uint32_t x1262; + uint32_t x1263; + uint32_t x1264; + uint32_t x1265; + uint32_t x1266; + uint32_t x1267; + uint32_t x1268; + uint32_t x1269; + fiat_np521_uint1 x1270; + uint32_t x1271; + fiat_np521_uint1 x1272; + uint32_t x1273; + fiat_np521_uint1 x1274; + uint32_t x1275; + fiat_np521_uint1 x1276; + uint32_t x1277; + fiat_np521_uint1 x1278; + uint32_t x1279; + fiat_np521_uint1 x1280; + uint32_t x1281; + fiat_np521_uint1 x1282; + uint32_t x1283; + fiat_np521_uint1 x1284; + uint32_t x1285; + fiat_np521_uint1 x1286; + uint32_t x1287; + fiat_np521_uint1 x1288; + uint32_t x1289; + fiat_np521_uint1 x1290; + uint32_t x1291; + fiat_np521_uint1 x1292; + uint32_t x1293; + fiat_np521_uint1 x1294; + uint32_t x1295; + fiat_np521_uint1 x1296; + uint32_t x1297; + fiat_np521_uint1 x1298; + uint32_t x1299; + fiat_np521_uint1 x1300; + uint32_t x1301; + uint32_t x1302; + fiat_np521_uint1 x1303; + uint32_t x1304; + fiat_np521_uint1 x1305; + uint32_t x1306; + fiat_np521_uint1 x1307; + uint32_t x1308; + fiat_np521_uint1 x1309; + uint32_t x1310; + fiat_np521_uint1 x1311; + uint32_t x1312; + fiat_np521_uint1 x1313; + uint32_t x1314; + fiat_np521_uint1 x1315; + uint32_t x1316; + fiat_np521_uint1 x1317; + uint32_t x1318; + fiat_np521_uint1 x1319; + uint32_t x1320; + fiat_np521_uint1 x1321; + uint32_t x1322; + fiat_np521_uint1 x1323; + uint32_t x1324; + fiat_np521_uint1 x1325; + uint32_t x1326; + fiat_np521_uint1 x1327; + uint32_t x1328; + fiat_np521_uint1 x1329; + uint32_t x1330; + fiat_np521_uint1 x1331; + uint32_t x1332; + fiat_np521_uint1 x1333; + uint32_t x1334; + fiat_np521_uint1 x1335; + uint32_t x1336; + fiat_np521_uint1 x1337; + uint32_t x1338; + uint32_t x1339; + uint32_t x1340; + uint32_t x1341; + uint32_t x1342; + uint32_t x1343; + uint32_t x1344; + uint32_t x1345; + uint32_t x1346; + uint32_t x1347; + uint32_t x1348; + uint32_t x1349; + uint32_t x1350; + uint32_t x1351; + uint32_t x1352; + uint32_t x1353; + uint32_t x1354; + uint32_t x1355; + uint32_t x1356; + uint32_t x1357; + uint32_t x1358; + uint32_t x1359; + uint32_t x1360; + uint32_t x1361; + uint32_t x1362; + uint32_t x1363; + uint32_t x1364; + uint32_t x1365; + uint32_t x1366; + uint32_t x1367; + uint32_t x1368; + uint32_t x1369; + uint32_t x1370; + uint32_t x1371; + uint32_t x1372; + uint32_t x1373; + uint32_t x1374; + fiat_np521_uint1 x1375; + uint32_t x1376; + fiat_np521_uint1 x1377; + uint32_t x1378; + fiat_np521_uint1 x1379; + uint32_t x1380; + fiat_np521_uint1 x1381; + uint32_t x1382; + fiat_np521_uint1 x1383; + uint32_t x1384; + fiat_np521_uint1 x1385; + uint32_t x1386; + fiat_np521_uint1 x1387; + uint32_t x1388; + fiat_np521_uint1 x1389; + uint32_t x1390; + fiat_np521_uint1 x1391; + uint32_t x1392; + fiat_np521_uint1 x1393; + uint32_t x1394; + fiat_np521_uint1 x1395; + uint32_t x1396; + fiat_np521_uint1 x1397; + uint32_t x1398; + fiat_np521_uint1 x1399; + uint32_t x1400; + fiat_np521_uint1 x1401; + uint32_t x1402; + fiat_np521_uint1 x1403; + uint32_t x1404; + fiat_np521_uint1 x1405; + uint32_t x1406; + uint32_t x1407; + fiat_np521_uint1 x1408; + uint32_t x1409; + fiat_np521_uint1 x1410; + uint32_t x1411; + fiat_np521_uint1 x1412; + uint32_t x1413; + fiat_np521_uint1 x1414; + uint32_t x1415; + fiat_np521_uint1 x1416; + uint32_t x1417; + fiat_np521_uint1 x1418; + uint32_t x1419; + fiat_np521_uint1 x1420; + uint32_t x1421; + fiat_np521_uint1 x1422; + uint32_t x1423; + fiat_np521_uint1 x1424; + uint32_t x1425; + fiat_np521_uint1 x1426; + uint32_t x1427; + fiat_np521_uint1 x1428; + uint32_t x1429; + fiat_np521_uint1 x1430; + uint32_t x1431; + fiat_np521_uint1 x1432; + uint32_t x1433; + fiat_np521_uint1 x1434; + uint32_t x1435; + fiat_np521_uint1 x1436; + uint32_t x1437; + fiat_np521_uint1 x1438; + uint32_t x1439; + fiat_np521_uint1 x1440; + uint32_t x1441; + fiat_np521_uint1 x1442; + uint32_t x1443; + uint32_t x1444; + uint32_t x1445; + uint32_t x1446; + uint32_t x1447; + uint32_t x1448; + uint32_t x1449; + uint32_t x1450; + uint32_t x1451; + uint32_t x1452; + uint32_t x1453; + uint32_t x1454; + uint32_t x1455; + uint32_t x1456; + uint32_t x1457; + uint32_t x1458; + uint32_t x1459; + uint32_t x1460; + uint32_t x1461; + uint32_t x1462; + uint32_t x1463; + uint32_t x1464; + uint32_t x1465; + uint32_t x1466; + uint32_t x1467; + uint32_t x1468; + uint32_t x1469; + uint32_t x1470; + uint32_t x1471; + uint32_t x1472; + uint32_t x1473; + uint32_t x1474; + uint32_t x1475; + uint32_t x1476; + uint32_t x1477; + uint32_t x1478; + fiat_np521_uint1 x1479; + uint32_t x1480; + fiat_np521_uint1 x1481; + uint32_t x1482; + fiat_np521_uint1 x1483; + uint32_t x1484; + fiat_np521_uint1 x1485; + uint32_t x1486; + fiat_np521_uint1 x1487; + uint32_t x1488; + fiat_np521_uint1 x1489; + uint32_t x1490; + fiat_np521_uint1 x1491; + uint32_t x1492; + fiat_np521_uint1 x1493; + uint32_t x1494; + fiat_np521_uint1 x1495; + uint32_t x1496; + fiat_np521_uint1 x1497; + uint32_t x1498; + fiat_np521_uint1 x1499; + uint32_t x1500; + fiat_np521_uint1 x1501; + uint32_t x1502; + fiat_np521_uint1 x1503; + uint32_t x1504; + fiat_np521_uint1 x1505; + uint32_t x1506; + fiat_np521_uint1 x1507; + uint32_t x1508; + fiat_np521_uint1 x1509; + uint32_t x1510; + uint32_t x1511; + fiat_np521_uint1 x1512; + uint32_t x1513; + fiat_np521_uint1 x1514; + uint32_t x1515; + fiat_np521_uint1 x1516; + uint32_t x1517; + fiat_np521_uint1 x1518; + uint32_t x1519; + fiat_np521_uint1 x1520; + uint32_t x1521; + fiat_np521_uint1 x1522; + uint32_t x1523; + fiat_np521_uint1 x1524; + uint32_t x1525; + fiat_np521_uint1 x1526; + uint32_t x1527; + fiat_np521_uint1 x1528; + uint32_t x1529; + fiat_np521_uint1 x1530; + uint32_t x1531; + fiat_np521_uint1 x1532; + uint32_t x1533; + fiat_np521_uint1 x1534; + uint32_t x1535; + fiat_np521_uint1 x1536; + uint32_t x1537; + fiat_np521_uint1 x1538; + uint32_t x1539; + fiat_np521_uint1 x1540; + uint32_t x1541; + fiat_np521_uint1 x1542; + uint32_t x1543; + fiat_np521_uint1 x1544; + uint32_t x1545; + fiat_np521_uint1 x1546; + uint32_t x1547; + uint32_t x1548; + uint32_t x1549; + uint32_t x1550; + uint32_t x1551; + uint32_t x1552; + uint32_t x1553; + uint32_t x1554; + uint32_t x1555; + uint32_t x1556; + uint32_t x1557; + uint32_t x1558; + uint32_t x1559; + uint32_t x1560; + uint32_t x1561; + uint32_t x1562; + uint32_t x1563; + uint32_t x1564; + uint32_t x1565; + uint32_t x1566; + uint32_t x1567; + uint32_t x1568; + uint32_t x1569; + uint32_t x1570; + uint32_t x1571; + uint32_t x1572; + uint32_t x1573; + uint32_t x1574; + uint32_t x1575; + uint32_t x1576; + uint32_t x1577; + uint32_t x1578; + uint32_t x1579; + uint32_t x1580; + uint32_t x1581; + uint32_t x1582; + uint32_t x1583; + fiat_np521_uint1 x1584; + uint32_t x1585; + fiat_np521_uint1 x1586; + uint32_t x1587; + fiat_np521_uint1 x1588; + uint32_t x1589; + fiat_np521_uint1 x1590; + uint32_t x1591; + fiat_np521_uint1 x1592; + uint32_t x1593; + fiat_np521_uint1 x1594; + uint32_t x1595; + fiat_np521_uint1 x1596; + uint32_t x1597; + fiat_np521_uint1 x1598; + uint32_t x1599; + fiat_np521_uint1 x1600; + uint32_t x1601; + fiat_np521_uint1 x1602; + uint32_t x1603; + fiat_np521_uint1 x1604; + uint32_t x1605; + fiat_np521_uint1 x1606; + uint32_t x1607; + fiat_np521_uint1 x1608; + uint32_t x1609; + fiat_np521_uint1 x1610; + uint32_t x1611; + fiat_np521_uint1 x1612; + uint32_t x1613; + fiat_np521_uint1 x1614; + uint32_t x1615; + uint32_t x1616; + fiat_np521_uint1 x1617; + uint32_t x1618; + fiat_np521_uint1 x1619; + uint32_t x1620; + fiat_np521_uint1 x1621; + uint32_t x1622; + fiat_np521_uint1 x1623; + uint32_t x1624; + fiat_np521_uint1 x1625; + uint32_t x1626; + fiat_np521_uint1 x1627; + uint32_t x1628; + fiat_np521_uint1 x1629; + uint32_t x1630; + fiat_np521_uint1 x1631; + uint32_t x1632; + fiat_np521_uint1 x1633; + uint32_t x1634; + fiat_np521_uint1 x1635; + uint32_t x1636; + fiat_np521_uint1 x1637; + uint32_t x1638; + fiat_np521_uint1 x1639; + uint32_t x1640; + fiat_np521_uint1 x1641; + uint32_t x1642; + fiat_np521_uint1 x1643; + uint32_t x1644; + fiat_np521_uint1 x1645; + uint32_t x1646; + fiat_np521_uint1 x1647; + uint32_t x1648; + fiat_np521_uint1 x1649; + uint32_t x1650; + fiat_np521_uint1 x1651; + uint32_t x1652; + uint32_t x1653; + uint32_t x1654; + uint32_t x1655; + uint32_t x1656; + uint32_t x1657; + uint32_t x1658; + uint32_t x1659; + uint32_t x1660; + uint32_t x1661; + uint32_t x1662; + uint32_t x1663; + uint32_t x1664; + uint32_t x1665; + uint32_t x1666; + uint32_t x1667; + uint32_t x1668; + uint32_t x1669; + uint32_t x1670; + uint32_t x1671; + uint32_t x1672; + uint32_t x1673; + uint32_t x1674; + uint32_t x1675; + uint32_t x1676; + uint32_t x1677; + uint32_t x1678; + uint32_t x1679; + uint32_t x1680; + uint32_t x1681; + uint32_t x1682; + uint32_t x1683; + uint32_t x1684; + uint32_t x1685; + uint32_t x1686; + uint32_t x1687; + fiat_np521_uint1 x1688; + uint32_t x1689; + fiat_np521_uint1 x1690; + uint32_t x1691; + fiat_np521_uint1 x1692; + uint32_t x1693; + fiat_np521_uint1 x1694; + uint32_t x1695; + fiat_np521_uint1 x1696; + uint32_t x1697; + fiat_np521_uint1 x1698; + uint32_t x1699; + fiat_np521_uint1 x1700; + uint32_t x1701; + fiat_np521_uint1 x1702; + uint32_t x1703; + fiat_np521_uint1 x1704; + uint32_t x1705; + fiat_np521_uint1 x1706; + uint32_t x1707; + fiat_np521_uint1 x1708; + uint32_t x1709; + fiat_np521_uint1 x1710; + uint32_t x1711; + fiat_np521_uint1 x1712; + uint32_t x1713; + fiat_np521_uint1 x1714; + uint32_t x1715; + fiat_np521_uint1 x1716; + uint32_t x1717; + fiat_np521_uint1 x1718; + uint32_t x1719; + uint32_t x1720; + fiat_np521_uint1 x1721; + uint32_t x1722; + fiat_np521_uint1 x1723; + uint32_t x1724; + fiat_np521_uint1 x1725; + uint32_t x1726; + fiat_np521_uint1 x1727; + uint32_t x1728; + fiat_np521_uint1 x1729; + uint32_t x1730; + fiat_np521_uint1 x1731; + uint32_t x1732; + fiat_np521_uint1 x1733; + uint32_t x1734; + fiat_np521_uint1 x1735; + uint32_t x1736; + fiat_np521_uint1 x1737; + uint32_t x1738; + fiat_np521_uint1 x1739; + uint32_t x1740; + fiat_np521_uint1 x1741; + uint32_t x1742; + fiat_np521_uint1 x1743; + uint32_t x1744; + fiat_np521_uint1 x1745; + uint32_t x1746; + fiat_np521_uint1 x1747; + uint32_t x1748; + fiat_np521_uint1 x1749; + uint32_t x1750; + fiat_np521_uint1 x1751; + uint32_t x1752; + fiat_np521_uint1 x1753; + uint32_t x1754; + fiat_np521_uint1 x1755; + uint32_t x1756; + uint32_t x1757; + uint32_t x1758; + uint32_t x1759; + uint32_t x1760; + uint32_t x1761; + uint32_t x1762; + uint32_t x1763; + uint32_t x1764; + uint32_t x1765; + uint32_t x1766; + uint32_t x1767; + uint32_t x1768; + uint32_t x1769; + uint32_t x1770; + uint32_t x1771; + uint32_t x1772; + uint32_t x1773; + uint32_t x1774; + uint32_t x1775; + uint32_t x1776; + uint32_t x1777; + uint32_t x1778; + uint32_t x1779; + uint32_t x1780; + uint32_t x1781; + uint32_t x1782; + uint32_t x1783; + uint32_t x1784; + uint32_t x1785; + uint32_t x1786; + uint32_t x1787; + uint32_t x1788; + uint32_t x1789; + uint32_t x1790; + uint32_t x1791; + uint32_t x1792; + fiat_np521_uint1 x1793; + uint32_t x1794; + fiat_np521_uint1 x1795; + uint32_t x1796; + fiat_np521_uint1 x1797; + uint32_t x1798; + fiat_np521_uint1 x1799; + uint32_t x1800; + fiat_np521_uint1 x1801; + uint32_t x1802; + fiat_np521_uint1 x1803; + uint32_t x1804; + fiat_np521_uint1 x1805; + uint32_t x1806; + fiat_np521_uint1 x1807; + uint32_t x1808; + fiat_np521_uint1 x1809; + uint32_t x1810; + fiat_np521_uint1 x1811; + uint32_t x1812; + fiat_np521_uint1 x1813; + uint32_t x1814; + fiat_np521_uint1 x1815; + uint32_t x1816; + fiat_np521_uint1 x1817; + uint32_t x1818; + fiat_np521_uint1 x1819; + uint32_t x1820; + fiat_np521_uint1 x1821; + uint32_t x1822; + fiat_np521_uint1 x1823; + uint32_t x1824; + uint32_t x1825; + fiat_np521_uint1 x1826; + uint32_t x1827; + fiat_np521_uint1 x1828; + uint32_t x1829; + fiat_np521_uint1 x1830; + uint32_t x1831; + fiat_np521_uint1 x1832; + uint32_t x1833; + fiat_np521_uint1 x1834; + uint32_t x1835; + fiat_np521_uint1 x1836; + uint32_t x1837; + fiat_np521_uint1 x1838; + uint32_t x1839; + fiat_np521_uint1 x1840; + uint32_t x1841; + fiat_np521_uint1 x1842; + uint32_t x1843; + fiat_np521_uint1 x1844; + uint32_t x1845; + fiat_np521_uint1 x1846; + uint32_t x1847; + fiat_np521_uint1 x1848; + uint32_t x1849; + fiat_np521_uint1 x1850; + uint32_t x1851; + fiat_np521_uint1 x1852; + uint32_t x1853; + fiat_np521_uint1 x1854; + uint32_t x1855; + fiat_np521_uint1 x1856; + uint32_t x1857; + fiat_np521_uint1 x1858; + uint32_t x1859; + fiat_np521_uint1 x1860; + uint32_t x1861; + uint32_t x1862; + uint32_t x1863; + uint32_t x1864; + uint32_t x1865; + uint32_t x1866; + uint32_t x1867; + uint32_t x1868; + uint32_t x1869; + uint32_t x1870; + uint32_t x1871; + uint32_t x1872; + uint32_t x1873; + uint32_t x1874; + uint32_t x1875; + uint32_t x1876; + uint32_t x1877; + uint32_t x1878; + uint32_t x1879; + uint32_t x1880; + uint32_t x1881; + uint32_t x1882; + uint32_t x1883; + uint32_t x1884; + uint32_t x1885; + uint32_t x1886; + uint32_t x1887; + uint32_t x1888; + uint32_t x1889; + uint32_t x1890; + uint32_t x1891; + uint32_t x1892; + uint32_t x1893; + uint32_t x1894; + uint32_t x1895; + uint32_t x1896; + fiat_np521_uint1 x1897; + uint32_t x1898; + fiat_np521_uint1 x1899; + uint32_t x1900; + fiat_np521_uint1 x1901; + uint32_t x1902; + fiat_np521_uint1 x1903; + uint32_t x1904; + fiat_np521_uint1 x1905; + uint32_t x1906; + fiat_np521_uint1 x1907; + uint32_t x1908; + fiat_np521_uint1 x1909; + uint32_t x1910; + fiat_np521_uint1 x1911; + uint32_t x1912; + fiat_np521_uint1 x1913; + uint32_t x1914; + fiat_np521_uint1 x1915; + uint32_t x1916; + fiat_np521_uint1 x1917; + uint32_t x1918; + fiat_np521_uint1 x1919; + uint32_t x1920; + fiat_np521_uint1 x1921; + uint32_t x1922; + fiat_np521_uint1 x1923; + uint32_t x1924; + fiat_np521_uint1 x1925; + uint32_t x1926; + fiat_np521_uint1 x1927; + uint32_t x1928; + uint32_t x1929; + fiat_np521_uint1 x1930; + uint32_t x1931; + fiat_np521_uint1 x1932; + uint32_t x1933; + fiat_np521_uint1 x1934; + uint32_t x1935; + fiat_np521_uint1 x1936; + uint32_t x1937; + fiat_np521_uint1 x1938; + uint32_t x1939; + fiat_np521_uint1 x1940; + uint32_t x1941; + fiat_np521_uint1 x1942; + uint32_t x1943; + fiat_np521_uint1 x1944; + uint32_t x1945; + fiat_np521_uint1 x1946; + uint32_t x1947; + fiat_np521_uint1 x1948; + uint32_t x1949; + fiat_np521_uint1 x1950; + uint32_t x1951; + fiat_np521_uint1 x1952; + uint32_t x1953; + fiat_np521_uint1 x1954; + uint32_t x1955; + fiat_np521_uint1 x1956; + uint32_t x1957; + fiat_np521_uint1 x1958; + uint32_t x1959; + fiat_np521_uint1 x1960; + uint32_t x1961; + fiat_np521_uint1 x1962; + uint32_t x1963; + fiat_np521_uint1 x1964; + uint32_t x1965; + uint32_t x1966; + uint32_t x1967; + uint32_t x1968; + uint32_t x1969; + uint32_t x1970; + uint32_t x1971; + uint32_t x1972; + uint32_t x1973; + uint32_t x1974; + uint32_t x1975; + uint32_t x1976; + uint32_t x1977; + uint32_t x1978; + uint32_t x1979; + uint32_t x1980; + uint32_t x1981; + uint32_t x1982; + uint32_t x1983; + uint32_t x1984; + uint32_t x1985; + uint32_t x1986; + uint32_t x1987; + uint32_t x1988; + uint32_t x1989; + uint32_t x1990; + uint32_t x1991; + uint32_t x1992; + uint32_t x1993; + uint32_t x1994; + uint32_t x1995; + uint32_t x1996; + uint32_t x1997; + uint32_t x1998; + uint32_t x1999; + uint32_t x2000; + uint32_t x2001; + fiat_np521_uint1 x2002; + uint32_t x2003; + fiat_np521_uint1 x2004; + uint32_t x2005; + fiat_np521_uint1 x2006; + uint32_t x2007; + fiat_np521_uint1 x2008; + uint32_t x2009; + fiat_np521_uint1 x2010; + uint32_t x2011; + fiat_np521_uint1 x2012; + uint32_t x2013; + fiat_np521_uint1 x2014; + uint32_t x2015; + fiat_np521_uint1 x2016; + uint32_t x2017; + fiat_np521_uint1 x2018; + uint32_t x2019; + fiat_np521_uint1 x2020; + uint32_t x2021; + fiat_np521_uint1 x2022; + uint32_t x2023; + fiat_np521_uint1 x2024; + uint32_t x2025; + fiat_np521_uint1 x2026; + uint32_t x2027; + fiat_np521_uint1 x2028; + uint32_t x2029; + fiat_np521_uint1 x2030; + uint32_t x2031; + fiat_np521_uint1 x2032; + uint32_t x2033; + uint32_t x2034; + fiat_np521_uint1 x2035; + uint32_t x2036; + fiat_np521_uint1 x2037; + uint32_t x2038; + fiat_np521_uint1 x2039; + uint32_t x2040; + fiat_np521_uint1 x2041; + uint32_t x2042; + fiat_np521_uint1 x2043; + uint32_t x2044; + fiat_np521_uint1 x2045; + uint32_t x2046; + fiat_np521_uint1 x2047; + uint32_t x2048; + fiat_np521_uint1 x2049; + uint32_t x2050; + fiat_np521_uint1 x2051; + uint32_t x2052; + fiat_np521_uint1 x2053; + uint32_t x2054; + fiat_np521_uint1 x2055; + uint32_t x2056; + fiat_np521_uint1 x2057; + uint32_t x2058; + fiat_np521_uint1 x2059; + uint32_t x2060; + fiat_np521_uint1 x2061; + uint32_t x2062; + fiat_np521_uint1 x2063; + uint32_t x2064; + fiat_np521_uint1 x2065; + uint32_t x2066; + fiat_np521_uint1 x2067; + uint32_t x2068; + fiat_np521_uint1 x2069; + uint32_t x2070; + uint32_t x2071; + uint32_t x2072; + uint32_t x2073; + uint32_t x2074; + uint32_t x2075; + uint32_t x2076; + uint32_t x2077; + uint32_t x2078; + uint32_t x2079; + uint32_t x2080; + uint32_t x2081; + uint32_t x2082; + uint32_t x2083; + uint32_t x2084; + uint32_t x2085; + uint32_t x2086; + uint32_t x2087; + uint32_t x2088; + uint32_t x2089; + uint32_t x2090; + uint32_t x2091; + uint32_t x2092; + uint32_t x2093; + uint32_t x2094; + uint32_t x2095; + uint32_t x2096; + uint32_t x2097; + uint32_t x2098; + uint32_t x2099; + uint32_t x2100; + uint32_t x2101; + uint32_t x2102; + uint32_t x2103; + uint32_t x2104; + uint32_t x2105; + fiat_np521_uint1 x2106; + uint32_t x2107; + fiat_np521_uint1 x2108; + uint32_t x2109; + fiat_np521_uint1 x2110; + uint32_t x2111; + fiat_np521_uint1 x2112; + uint32_t x2113; + fiat_np521_uint1 x2114; + uint32_t x2115; + fiat_np521_uint1 x2116; + uint32_t x2117; + fiat_np521_uint1 x2118; + uint32_t x2119; + fiat_np521_uint1 x2120; + uint32_t x2121; + fiat_np521_uint1 x2122; + uint32_t x2123; + fiat_np521_uint1 x2124; + uint32_t x2125; + fiat_np521_uint1 x2126; + uint32_t x2127; + fiat_np521_uint1 x2128; + uint32_t x2129; + fiat_np521_uint1 x2130; + uint32_t x2131; + fiat_np521_uint1 x2132; + uint32_t x2133; + fiat_np521_uint1 x2134; + uint32_t x2135; + fiat_np521_uint1 x2136; + uint32_t x2137; + uint32_t x2138; + fiat_np521_uint1 x2139; + uint32_t x2140; + fiat_np521_uint1 x2141; + uint32_t x2142; + fiat_np521_uint1 x2143; + uint32_t x2144; + fiat_np521_uint1 x2145; + uint32_t x2146; + fiat_np521_uint1 x2147; + uint32_t x2148; + fiat_np521_uint1 x2149; + uint32_t x2150; + fiat_np521_uint1 x2151; + uint32_t x2152; + fiat_np521_uint1 x2153; + uint32_t x2154; + fiat_np521_uint1 x2155; + uint32_t x2156; + fiat_np521_uint1 x2157; + uint32_t x2158; + fiat_np521_uint1 x2159; + uint32_t x2160; + fiat_np521_uint1 x2161; + uint32_t x2162; + fiat_np521_uint1 x2163; + uint32_t x2164; + fiat_np521_uint1 x2165; + uint32_t x2166; + fiat_np521_uint1 x2167; + uint32_t x2168; + fiat_np521_uint1 x2169; + uint32_t x2170; + fiat_np521_uint1 x2171; + uint32_t x2172; + fiat_np521_uint1 x2173; + uint32_t x2174; + uint32_t x2175; + uint32_t x2176; + uint32_t x2177; + uint32_t x2178; + uint32_t x2179; + uint32_t x2180; + uint32_t x2181; + uint32_t x2182; + uint32_t x2183; + uint32_t x2184; + uint32_t x2185; + uint32_t x2186; + uint32_t x2187; + uint32_t x2188; + uint32_t x2189; + uint32_t x2190; + uint32_t x2191; + uint32_t x2192; + uint32_t x2193; + uint32_t x2194; + uint32_t x2195; + uint32_t x2196; + uint32_t x2197; + uint32_t x2198; + uint32_t x2199; + uint32_t x2200; + uint32_t x2201; + uint32_t x2202; + uint32_t x2203; + uint32_t x2204; + uint32_t x2205; + uint32_t x2206; + uint32_t x2207; + uint32_t x2208; + uint32_t x2209; + uint32_t x2210; + fiat_np521_uint1 x2211; + uint32_t x2212; + fiat_np521_uint1 x2213; + uint32_t x2214; + fiat_np521_uint1 x2215; + uint32_t x2216; + fiat_np521_uint1 x2217; + uint32_t x2218; + fiat_np521_uint1 x2219; + uint32_t x2220; + fiat_np521_uint1 x2221; + uint32_t x2222; + fiat_np521_uint1 x2223; + uint32_t x2224; + fiat_np521_uint1 x2225; + uint32_t x2226; + fiat_np521_uint1 x2227; + uint32_t x2228; + fiat_np521_uint1 x2229; + uint32_t x2230; + fiat_np521_uint1 x2231; + uint32_t x2232; + fiat_np521_uint1 x2233; + uint32_t x2234; + fiat_np521_uint1 x2235; + uint32_t x2236; + fiat_np521_uint1 x2237; + uint32_t x2238; + fiat_np521_uint1 x2239; + uint32_t x2240; + fiat_np521_uint1 x2241; + uint32_t x2242; + uint32_t x2243; + fiat_np521_uint1 x2244; + uint32_t x2245; + fiat_np521_uint1 x2246; + uint32_t x2247; + fiat_np521_uint1 x2248; + uint32_t x2249; + fiat_np521_uint1 x2250; + uint32_t x2251; + fiat_np521_uint1 x2252; + uint32_t x2253; + fiat_np521_uint1 x2254; + uint32_t x2255; + fiat_np521_uint1 x2256; + uint32_t x2257; + fiat_np521_uint1 x2258; + uint32_t x2259; + fiat_np521_uint1 x2260; + uint32_t x2261; + fiat_np521_uint1 x2262; + uint32_t x2263; + fiat_np521_uint1 x2264; + uint32_t x2265; + fiat_np521_uint1 x2266; + uint32_t x2267; + fiat_np521_uint1 x2268; + uint32_t x2269; + fiat_np521_uint1 x2270; + uint32_t x2271; + fiat_np521_uint1 x2272; + uint32_t x2273; + fiat_np521_uint1 x2274; + uint32_t x2275; + fiat_np521_uint1 x2276; + uint32_t x2277; + fiat_np521_uint1 x2278; + uint32_t x2279; + uint32_t x2280; + uint32_t x2281; + uint32_t x2282; + uint32_t x2283; + uint32_t x2284; + uint32_t x2285; + uint32_t x2286; + uint32_t x2287; + uint32_t x2288; + uint32_t x2289; + uint32_t x2290; + uint32_t x2291; + uint32_t x2292; + uint32_t x2293; + uint32_t x2294; + uint32_t x2295; + uint32_t x2296; + uint32_t x2297; + uint32_t x2298; + uint32_t x2299; + uint32_t x2300; + uint32_t x2301; + uint32_t x2302; + uint32_t x2303; + uint32_t x2304; + uint32_t x2305; + uint32_t x2306; + uint32_t x2307; + uint32_t x2308; + uint32_t x2309; + uint32_t x2310; + uint32_t x2311; + uint32_t x2312; + uint32_t x2313; + uint32_t x2314; + fiat_np521_uint1 x2315; + uint32_t x2316; + fiat_np521_uint1 x2317; + uint32_t x2318; + fiat_np521_uint1 x2319; + uint32_t x2320; + fiat_np521_uint1 x2321; + uint32_t x2322; + fiat_np521_uint1 x2323; + uint32_t x2324; + fiat_np521_uint1 x2325; + uint32_t x2326; + fiat_np521_uint1 x2327; + uint32_t x2328; + fiat_np521_uint1 x2329; + uint32_t x2330; + fiat_np521_uint1 x2331; + uint32_t x2332; + fiat_np521_uint1 x2333; + uint32_t x2334; + fiat_np521_uint1 x2335; + uint32_t x2336; + fiat_np521_uint1 x2337; + uint32_t x2338; + fiat_np521_uint1 x2339; + uint32_t x2340; + fiat_np521_uint1 x2341; + uint32_t x2342; + fiat_np521_uint1 x2343; + uint32_t x2344; + fiat_np521_uint1 x2345; + uint32_t x2346; + uint32_t x2347; + fiat_np521_uint1 x2348; + uint32_t x2349; + fiat_np521_uint1 x2350; + uint32_t x2351; + fiat_np521_uint1 x2352; + uint32_t x2353; + fiat_np521_uint1 x2354; + uint32_t x2355; + fiat_np521_uint1 x2356; + uint32_t x2357; + fiat_np521_uint1 x2358; + uint32_t x2359; + fiat_np521_uint1 x2360; + uint32_t x2361; + fiat_np521_uint1 x2362; + uint32_t x2363; + fiat_np521_uint1 x2364; + uint32_t x2365; + fiat_np521_uint1 x2366; + uint32_t x2367; + fiat_np521_uint1 x2368; + uint32_t x2369; + fiat_np521_uint1 x2370; + uint32_t x2371; + fiat_np521_uint1 x2372; + uint32_t x2373; + fiat_np521_uint1 x2374; + uint32_t x2375; + fiat_np521_uint1 x2376; + uint32_t x2377; + fiat_np521_uint1 x2378; + uint32_t x2379; + fiat_np521_uint1 x2380; + uint32_t x2381; + fiat_np521_uint1 x2382; + uint32_t x2383; + uint32_t x2384; + uint32_t x2385; + uint32_t x2386; + uint32_t x2387; + uint32_t x2388; + uint32_t x2389; + uint32_t x2390; + uint32_t x2391; + uint32_t x2392; + uint32_t x2393; + uint32_t x2394; + uint32_t x2395; + uint32_t x2396; + uint32_t x2397; + uint32_t x2398; + uint32_t x2399; + uint32_t x2400; + uint32_t x2401; + uint32_t x2402; + uint32_t x2403; + uint32_t x2404; + uint32_t x2405; + uint32_t x2406; + uint32_t x2407; + uint32_t x2408; + uint32_t x2409; + uint32_t x2410; + uint32_t x2411; + uint32_t x2412; + uint32_t x2413; + uint32_t x2414; + uint32_t x2415; + uint32_t x2416; + uint32_t x2417; + uint32_t x2418; + uint32_t x2419; + fiat_np521_uint1 x2420; + uint32_t x2421; + fiat_np521_uint1 x2422; + uint32_t x2423; + fiat_np521_uint1 x2424; + uint32_t x2425; + fiat_np521_uint1 x2426; + uint32_t x2427; + fiat_np521_uint1 x2428; + uint32_t x2429; + fiat_np521_uint1 x2430; + uint32_t x2431; + fiat_np521_uint1 x2432; + uint32_t x2433; + fiat_np521_uint1 x2434; + uint32_t x2435; + fiat_np521_uint1 x2436; + uint32_t x2437; + fiat_np521_uint1 x2438; + uint32_t x2439; + fiat_np521_uint1 x2440; + uint32_t x2441; + fiat_np521_uint1 x2442; + uint32_t x2443; + fiat_np521_uint1 x2444; + uint32_t x2445; + fiat_np521_uint1 x2446; + uint32_t x2447; + fiat_np521_uint1 x2448; + uint32_t x2449; + fiat_np521_uint1 x2450; + uint32_t x2451; + uint32_t x2452; + fiat_np521_uint1 x2453; + uint32_t x2454; + fiat_np521_uint1 x2455; + uint32_t x2456; + fiat_np521_uint1 x2457; + uint32_t x2458; + fiat_np521_uint1 x2459; + uint32_t x2460; + fiat_np521_uint1 x2461; + uint32_t x2462; + fiat_np521_uint1 x2463; + uint32_t x2464; + fiat_np521_uint1 x2465; + uint32_t x2466; + fiat_np521_uint1 x2467; + uint32_t x2468; + fiat_np521_uint1 x2469; + uint32_t x2470; + fiat_np521_uint1 x2471; + uint32_t x2472; + fiat_np521_uint1 x2473; + uint32_t x2474; + fiat_np521_uint1 x2475; + uint32_t x2476; + fiat_np521_uint1 x2477; + uint32_t x2478; + fiat_np521_uint1 x2479; + uint32_t x2480; + fiat_np521_uint1 x2481; + uint32_t x2482; + fiat_np521_uint1 x2483; + uint32_t x2484; + fiat_np521_uint1 x2485; + uint32_t x2486; + fiat_np521_uint1 x2487; + uint32_t x2488; + uint32_t x2489; + uint32_t x2490; + uint32_t x2491; + uint32_t x2492; + uint32_t x2493; + uint32_t x2494; + uint32_t x2495; + uint32_t x2496; + uint32_t x2497; + uint32_t x2498; + uint32_t x2499; + uint32_t x2500; + uint32_t x2501; + uint32_t x2502; + uint32_t x2503; + uint32_t x2504; + uint32_t x2505; + uint32_t x2506; + uint32_t x2507; + uint32_t x2508; + uint32_t x2509; + uint32_t x2510; + uint32_t x2511; + uint32_t x2512; + uint32_t x2513; + uint32_t x2514; + uint32_t x2515; + uint32_t x2516; + uint32_t x2517; + uint32_t x2518; + uint32_t x2519; + uint32_t x2520; + uint32_t x2521; + uint32_t x2522; + uint32_t x2523; + fiat_np521_uint1 x2524; + uint32_t x2525; + fiat_np521_uint1 x2526; + uint32_t x2527; + fiat_np521_uint1 x2528; + uint32_t x2529; + fiat_np521_uint1 x2530; + uint32_t x2531; + fiat_np521_uint1 x2532; + uint32_t x2533; + fiat_np521_uint1 x2534; + uint32_t x2535; + fiat_np521_uint1 x2536; + uint32_t x2537; + fiat_np521_uint1 x2538; + uint32_t x2539; + fiat_np521_uint1 x2540; + uint32_t x2541; + fiat_np521_uint1 x2542; + uint32_t x2543; + fiat_np521_uint1 x2544; + uint32_t x2545; + fiat_np521_uint1 x2546; + uint32_t x2547; + fiat_np521_uint1 x2548; + uint32_t x2549; + fiat_np521_uint1 x2550; + uint32_t x2551; + fiat_np521_uint1 x2552; + uint32_t x2553; + fiat_np521_uint1 x2554; + uint32_t x2555; + uint32_t x2556; + fiat_np521_uint1 x2557; + uint32_t x2558; + fiat_np521_uint1 x2559; + uint32_t x2560; + fiat_np521_uint1 x2561; + uint32_t x2562; + fiat_np521_uint1 x2563; + uint32_t x2564; + fiat_np521_uint1 x2565; + uint32_t x2566; + fiat_np521_uint1 x2567; + uint32_t x2568; + fiat_np521_uint1 x2569; + uint32_t x2570; + fiat_np521_uint1 x2571; + uint32_t x2572; + fiat_np521_uint1 x2573; + uint32_t x2574; + fiat_np521_uint1 x2575; + uint32_t x2576; + fiat_np521_uint1 x2577; + uint32_t x2578; + fiat_np521_uint1 x2579; + uint32_t x2580; + fiat_np521_uint1 x2581; + uint32_t x2582; + fiat_np521_uint1 x2583; + uint32_t x2584; + fiat_np521_uint1 x2585; + uint32_t x2586; + fiat_np521_uint1 x2587; + uint32_t x2588; + fiat_np521_uint1 x2589; + uint32_t x2590; + fiat_np521_uint1 x2591; + uint32_t x2592; + uint32_t x2593; + uint32_t x2594; + uint32_t x2595; + uint32_t x2596; + uint32_t x2597; + uint32_t x2598; + uint32_t x2599; + uint32_t x2600; + uint32_t x2601; + uint32_t x2602; + uint32_t x2603; + uint32_t x2604; + uint32_t x2605; + uint32_t x2606; + uint32_t x2607; + uint32_t x2608; + uint32_t x2609; + uint32_t x2610; + uint32_t x2611; + uint32_t x2612; + uint32_t x2613; + uint32_t x2614; + uint32_t x2615; + uint32_t x2616; + uint32_t x2617; + uint32_t x2618; + uint32_t x2619; + uint32_t x2620; + uint32_t x2621; + uint32_t x2622; + uint32_t x2623; + uint32_t x2624; + uint32_t x2625; + uint32_t x2626; + uint32_t x2627; + uint32_t x2628; + fiat_np521_uint1 x2629; + uint32_t x2630; + fiat_np521_uint1 x2631; + uint32_t x2632; + fiat_np521_uint1 x2633; + uint32_t x2634; + fiat_np521_uint1 x2635; + uint32_t x2636; + fiat_np521_uint1 x2637; + uint32_t x2638; + fiat_np521_uint1 x2639; + uint32_t x2640; + fiat_np521_uint1 x2641; + uint32_t x2642; + fiat_np521_uint1 x2643; + uint32_t x2644; + fiat_np521_uint1 x2645; + uint32_t x2646; + fiat_np521_uint1 x2647; + uint32_t x2648; + fiat_np521_uint1 x2649; + uint32_t x2650; + fiat_np521_uint1 x2651; + uint32_t x2652; + fiat_np521_uint1 x2653; + uint32_t x2654; + fiat_np521_uint1 x2655; + uint32_t x2656; + fiat_np521_uint1 x2657; + uint32_t x2658; + fiat_np521_uint1 x2659; + uint32_t x2660; + uint32_t x2661; + fiat_np521_uint1 x2662; + uint32_t x2663; + fiat_np521_uint1 x2664; + uint32_t x2665; + fiat_np521_uint1 x2666; + uint32_t x2667; + fiat_np521_uint1 x2668; + uint32_t x2669; + fiat_np521_uint1 x2670; + uint32_t x2671; + fiat_np521_uint1 x2672; + uint32_t x2673; + fiat_np521_uint1 x2674; + uint32_t x2675; + fiat_np521_uint1 x2676; + uint32_t x2677; + fiat_np521_uint1 x2678; + uint32_t x2679; + fiat_np521_uint1 x2680; + uint32_t x2681; + fiat_np521_uint1 x2682; + uint32_t x2683; + fiat_np521_uint1 x2684; + uint32_t x2685; + fiat_np521_uint1 x2686; + uint32_t x2687; + fiat_np521_uint1 x2688; + uint32_t x2689; + fiat_np521_uint1 x2690; + uint32_t x2691; + fiat_np521_uint1 x2692; + uint32_t x2693; + fiat_np521_uint1 x2694; + uint32_t x2695; + fiat_np521_uint1 x2696; + uint32_t x2697; + uint32_t x2698; + uint32_t x2699; + uint32_t x2700; + uint32_t x2701; + uint32_t x2702; + uint32_t x2703; + uint32_t x2704; + uint32_t x2705; + uint32_t x2706; + uint32_t x2707; + uint32_t x2708; + uint32_t x2709; + uint32_t x2710; + uint32_t x2711; + uint32_t x2712; + uint32_t x2713; + uint32_t x2714; + uint32_t x2715; + uint32_t x2716; + uint32_t x2717; + uint32_t x2718; + uint32_t x2719; + uint32_t x2720; + uint32_t x2721; + uint32_t x2722; + uint32_t x2723; + uint32_t x2724; + uint32_t x2725; + uint32_t x2726; + uint32_t x2727; + uint32_t x2728; + uint32_t x2729; + uint32_t x2730; + uint32_t x2731; + uint32_t x2732; + fiat_np521_uint1 x2733; + uint32_t x2734; + fiat_np521_uint1 x2735; + uint32_t x2736; + fiat_np521_uint1 x2737; + uint32_t x2738; + fiat_np521_uint1 x2739; + uint32_t x2740; + fiat_np521_uint1 x2741; + uint32_t x2742; + fiat_np521_uint1 x2743; + uint32_t x2744; + fiat_np521_uint1 x2745; + uint32_t x2746; + fiat_np521_uint1 x2747; + uint32_t x2748; + fiat_np521_uint1 x2749; + uint32_t x2750; + fiat_np521_uint1 x2751; + uint32_t x2752; + fiat_np521_uint1 x2753; + uint32_t x2754; + fiat_np521_uint1 x2755; + uint32_t x2756; + fiat_np521_uint1 x2757; + uint32_t x2758; + fiat_np521_uint1 x2759; + uint32_t x2760; + fiat_np521_uint1 x2761; + uint32_t x2762; + fiat_np521_uint1 x2763; + uint32_t x2764; + uint32_t x2765; + fiat_np521_uint1 x2766; + uint32_t x2767; + fiat_np521_uint1 x2768; + uint32_t x2769; + fiat_np521_uint1 x2770; + uint32_t x2771; + fiat_np521_uint1 x2772; + uint32_t x2773; + fiat_np521_uint1 x2774; + uint32_t x2775; + fiat_np521_uint1 x2776; + uint32_t x2777; + fiat_np521_uint1 x2778; + uint32_t x2779; + fiat_np521_uint1 x2780; + uint32_t x2781; + fiat_np521_uint1 x2782; + uint32_t x2783; + fiat_np521_uint1 x2784; + uint32_t x2785; + fiat_np521_uint1 x2786; + uint32_t x2787; + fiat_np521_uint1 x2788; + uint32_t x2789; + fiat_np521_uint1 x2790; + uint32_t x2791; + fiat_np521_uint1 x2792; + uint32_t x2793; + fiat_np521_uint1 x2794; + uint32_t x2795; + fiat_np521_uint1 x2796; + uint32_t x2797; + fiat_np521_uint1 x2798; + uint32_t x2799; + fiat_np521_uint1 x2800; + uint32_t x2801; + uint32_t x2802; + uint32_t x2803; + uint32_t x2804; + uint32_t x2805; + uint32_t x2806; + uint32_t x2807; + uint32_t x2808; + uint32_t x2809; + uint32_t x2810; + uint32_t x2811; + uint32_t x2812; + uint32_t x2813; + uint32_t x2814; + uint32_t x2815; + uint32_t x2816; + uint32_t x2817; + uint32_t x2818; + uint32_t x2819; + uint32_t x2820; + uint32_t x2821; + uint32_t x2822; + uint32_t x2823; + uint32_t x2824; + uint32_t x2825; + uint32_t x2826; + uint32_t x2827; + uint32_t x2828; + uint32_t x2829; + uint32_t x2830; + uint32_t x2831; + uint32_t x2832; + uint32_t x2833; + uint32_t x2834; + uint32_t x2835; + uint32_t x2836; + uint32_t x2837; + fiat_np521_uint1 x2838; + uint32_t x2839; + fiat_np521_uint1 x2840; + uint32_t x2841; + fiat_np521_uint1 x2842; + uint32_t x2843; + fiat_np521_uint1 x2844; + uint32_t x2845; + fiat_np521_uint1 x2846; + uint32_t x2847; + fiat_np521_uint1 x2848; + uint32_t x2849; + fiat_np521_uint1 x2850; + uint32_t x2851; + fiat_np521_uint1 x2852; + uint32_t x2853; + fiat_np521_uint1 x2854; + uint32_t x2855; + fiat_np521_uint1 x2856; + uint32_t x2857; + fiat_np521_uint1 x2858; + uint32_t x2859; + fiat_np521_uint1 x2860; + uint32_t x2861; + fiat_np521_uint1 x2862; + uint32_t x2863; + fiat_np521_uint1 x2864; + uint32_t x2865; + fiat_np521_uint1 x2866; + uint32_t x2867; + fiat_np521_uint1 x2868; + uint32_t x2869; + uint32_t x2870; + fiat_np521_uint1 x2871; + uint32_t x2872; + fiat_np521_uint1 x2873; + uint32_t x2874; + fiat_np521_uint1 x2875; + uint32_t x2876; + fiat_np521_uint1 x2877; + uint32_t x2878; + fiat_np521_uint1 x2879; + uint32_t x2880; + fiat_np521_uint1 x2881; + uint32_t x2882; + fiat_np521_uint1 x2883; + uint32_t x2884; + fiat_np521_uint1 x2885; + uint32_t x2886; + fiat_np521_uint1 x2887; + uint32_t x2888; + fiat_np521_uint1 x2889; + uint32_t x2890; + fiat_np521_uint1 x2891; + uint32_t x2892; + fiat_np521_uint1 x2893; + uint32_t x2894; + fiat_np521_uint1 x2895; + uint32_t x2896; + fiat_np521_uint1 x2897; + uint32_t x2898; + fiat_np521_uint1 x2899; + uint32_t x2900; + fiat_np521_uint1 x2901; + uint32_t x2902; + fiat_np521_uint1 x2903; + uint32_t x2904; + fiat_np521_uint1 x2905; + uint32_t x2906; + uint32_t x2907; + uint32_t x2908; + uint32_t x2909; + uint32_t x2910; + uint32_t x2911; + uint32_t x2912; + uint32_t x2913; + uint32_t x2914; + uint32_t x2915; + uint32_t x2916; + uint32_t x2917; + uint32_t x2918; + uint32_t x2919; + uint32_t x2920; + uint32_t x2921; + uint32_t x2922; + uint32_t x2923; + uint32_t x2924; + uint32_t x2925; + uint32_t x2926; + uint32_t x2927; + uint32_t x2928; + uint32_t x2929; + uint32_t x2930; + uint32_t x2931; + uint32_t x2932; + uint32_t x2933; + uint32_t x2934; + uint32_t x2935; + uint32_t x2936; + uint32_t x2937; + uint32_t x2938; + uint32_t x2939; + uint32_t x2940; + uint32_t x2941; + fiat_np521_uint1 x2942; + uint32_t x2943; + fiat_np521_uint1 x2944; + uint32_t x2945; + fiat_np521_uint1 x2946; + uint32_t x2947; + fiat_np521_uint1 x2948; + uint32_t x2949; + fiat_np521_uint1 x2950; + uint32_t x2951; + fiat_np521_uint1 x2952; + uint32_t x2953; + fiat_np521_uint1 x2954; + uint32_t x2955; + fiat_np521_uint1 x2956; + uint32_t x2957; + fiat_np521_uint1 x2958; + uint32_t x2959; + fiat_np521_uint1 x2960; + uint32_t x2961; + fiat_np521_uint1 x2962; + uint32_t x2963; + fiat_np521_uint1 x2964; + uint32_t x2965; + fiat_np521_uint1 x2966; + uint32_t x2967; + fiat_np521_uint1 x2968; + uint32_t x2969; + fiat_np521_uint1 x2970; + uint32_t x2971; + fiat_np521_uint1 x2972; + uint32_t x2973; + uint32_t x2974; + fiat_np521_uint1 x2975; + uint32_t x2976; + fiat_np521_uint1 x2977; + uint32_t x2978; + fiat_np521_uint1 x2979; + uint32_t x2980; + fiat_np521_uint1 x2981; + uint32_t x2982; + fiat_np521_uint1 x2983; + uint32_t x2984; + fiat_np521_uint1 x2985; + uint32_t x2986; + fiat_np521_uint1 x2987; + uint32_t x2988; + fiat_np521_uint1 x2989; + uint32_t x2990; + fiat_np521_uint1 x2991; + uint32_t x2992; + fiat_np521_uint1 x2993; + uint32_t x2994; + fiat_np521_uint1 x2995; + uint32_t x2996; + fiat_np521_uint1 x2997; + uint32_t x2998; + fiat_np521_uint1 x2999; + uint32_t x3000; + fiat_np521_uint1 x3001; + uint32_t x3002; + fiat_np521_uint1 x3003; + uint32_t x3004; + fiat_np521_uint1 x3005; + uint32_t x3006; + fiat_np521_uint1 x3007; + uint32_t x3008; + fiat_np521_uint1 x3009; + uint32_t x3010; + uint32_t x3011; + uint32_t x3012; + uint32_t x3013; + uint32_t x3014; + uint32_t x3015; + uint32_t x3016; + uint32_t x3017; + uint32_t x3018; + uint32_t x3019; + uint32_t x3020; + uint32_t x3021; + uint32_t x3022; + uint32_t x3023; + uint32_t x3024; + uint32_t x3025; + uint32_t x3026; + uint32_t x3027; + uint32_t x3028; + uint32_t x3029; + uint32_t x3030; + uint32_t x3031; + uint32_t x3032; + uint32_t x3033; + uint32_t x3034; + uint32_t x3035; + uint32_t x3036; + uint32_t x3037; + uint32_t x3038; + uint32_t x3039; + uint32_t x3040; + uint32_t x3041; + uint32_t x3042; + uint32_t x3043; + uint32_t x3044; + uint32_t x3045; + uint32_t x3046; + fiat_np521_uint1 x3047; + uint32_t x3048; + fiat_np521_uint1 x3049; + uint32_t x3050; + fiat_np521_uint1 x3051; + uint32_t x3052; + fiat_np521_uint1 x3053; + uint32_t x3054; + fiat_np521_uint1 x3055; + uint32_t x3056; + fiat_np521_uint1 x3057; + uint32_t x3058; + fiat_np521_uint1 x3059; + uint32_t x3060; + fiat_np521_uint1 x3061; + uint32_t x3062; + fiat_np521_uint1 x3063; + uint32_t x3064; + fiat_np521_uint1 x3065; + uint32_t x3066; + fiat_np521_uint1 x3067; + uint32_t x3068; + fiat_np521_uint1 x3069; + uint32_t x3070; + fiat_np521_uint1 x3071; + uint32_t x3072; + fiat_np521_uint1 x3073; + uint32_t x3074; + fiat_np521_uint1 x3075; + uint32_t x3076; + fiat_np521_uint1 x3077; + uint32_t x3078; + uint32_t x3079; + fiat_np521_uint1 x3080; + uint32_t x3081; + fiat_np521_uint1 x3082; + uint32_t x3083; + fiat_np521_uint1 x3084; + uint32_t x3085; + fiat_np521_uint1 x3086; + uint32_t x3087; + fiat_np521_uint1 x3088; + uint32_t x3089; + fiat_np521_uint1 x3090; + uint32_t x3091; + fiat_np521_uint1 x3092; + uint32_t x3093; + fiat_np521_uint1 x3094; + uint32_t x3095; + fiat_np521_uint1 x3096; + uint32_t x3097; + fiat_np521_uint1 x3098; + uint32_t x3099; + fiat_np521_uint1 x3100; + uint32_t x3101; + fiat_np521_uint1 x3102; + uint32_t x3103; + fiat_np521_uint1 x3104; + uint32_t x3105; + fiat_np521_uint1 x3106; + uint32_t x3107; + fiat_np521_uint1 x3108; + uint32_t x3109; + fiat_np521_uint1 x3110; + uint32_t x3111; + fiat_np521_uint1 x3112; + uint32_t x3113; + fiat_np521_uint1 x3114; + uint32_t x3115; + uint32_t x3116; + uint32_t x3117; + uint32_t x3118; + uint32_t x3119; + uint32_t x3120; + uint32_t x3121; + uint32_t x3122; + uint32_t x3123; + uint32_t x3124; + uint32_t x3125; + uint32_t x3126; + uint32_t x3127; + uint32_t x3128; + uint32_t x3129; + uint32_t x3130; + uint32_t x3131; + uint32_t x3132; + uint32_t x3133; + uint32_t x3134; + uint32_t x3135; + uint32_t x3136; + uint32_t x3137; + uint32_t x3138; + uint32_t x3139; + uint32_t x3140; + uint32_t x3141; + uint32_t x3142; + uint32_t x3143; + uint32_t x3144; + uint32_t x3145; + uint32_t x3146; + uint32_t x3147; + uint32_t x3148; + uint32_t x3149; + uint32_t x3150; + fiat_np521_uint1 x3151; + uint32_t x3152; + fiat_np521_uint1 x3153; + uint32_t x3154; + fiat_np521_uint1 x3155; + uint32_t x3156; + fiat_np521_uint1 x3157; + uint32_t x3158; + fiat_np521_uint1 x3159; + uint32_t x3160; + fiat_np521_uint1 x3161; + uint32_t x3162; + fiat_np521_uint1 x3163; + uint32_t x3164; + fiat_np521_uint1 x3165; + uint32_t x3166; + fiat_np521_uint1 x3167; + uint32_t x3168; + fiat_np521_uint1 x3169; + uint32_t x3170; + fiat_np521_uint1 x3171; + uint32_t x3172; + fiat_np521_uint1 x3173; + uint32_t x3174; + fiat_np521_uint1 x3175; + uint32_t x3176; + fiat_np521_uint1 x3177; + uint32_t x3178; + fiat_np521_uint1 x3179; + uint32_t x3180; + fiat_np521_uint1 x3181; + uint32_t x3182; + uint32_t x3183; + fiat_np521_uint1 x3184; + uint32_t x3185; + fiat_np521_uint1 x3186; + uint32_t x3187; + fiat_np521_uint1 x3188; + uint32_t x3189; + fiat_np521_uint1 x3190; + uint32_t x3191; + fiat_np521_uint1 x3192; + uint32_t x3193; + fiat_np521_uint1 x3194; + uint32_t x3195; + fiat_np521_uint1 x3196; + uint32_t x3197; + fiat_np521_uint1 x3198; + uint32_t x3199; + fiat_np521_uint1 x3200; + uint32_t x3201; + fiat_np521_uint1 x3202; + uint32_t x3203; + fiat_np521_uint1 x3204; + uint32_t x3205; + fiat_np521_uint1 x3206; + uint32_t x3207; + fiat_np521_uint1 x3208; + uint32_t x3209; + fiat_np521_uint1 x3210; + uint32_t x3211; + fiat_np521_uint1 x3212; + uint32_t x3213; + fiat_np521_uint1 x3214; + uint32_t x3215; + fiat_np521_uint1 x3216; + uint32_t x3217; + fiat_np521_uint1 x3218; + uint32_t x3219; + uint32_t x3220; + uint32_t x3221; + uint32_t x3222; + uint32_t x3223; + uint32_t x3224; + uint32_t x3225; + uint32_t x3226; + uint32_t x3227; + uint32_t x3228; + uint32_t x3229; + uint32_t x3230; + uint32_t x3231; + uint32_t x3232; + uint32_t x3233; + uint32_t x3234; + uint32_t x3235; + uint32_t x3236; + uint32_t x3237; + uint32_t x3238; + uint32_t x3239; + uint32_t x3240; + uint32_t x3241; + uint32_t x3242; + uint32_t x3243; + uint32_t x3244; + uint32_t x3245; + uint32_t x3246; + uint32_t x3247; + uint32_t x3248; + uint32_t x3249; + uint32_t x3250; + uint32_t x3251; + uint32_t x3252; + uint32_t x3253; + uint32_t x3254; + uint32_t x3255; + fiat_np521_uint1 x3256; + uint32_t x3257; + fiat_np521_uint1 x3258; + uint32_t x3259; + fiat_np521_uint1 x3260; + uint32_t x3261; + fiat_np521_uint1 x3262; + uint32_t x3263; + fiat_np521_uint1 x3264; + uint32_t x3265; + fiat_np521_uint1 x3266; + uint32_t x3267; + fiat_np521_uint1 x3268; + uint32_t x3269; + fiat_np521_uint1 x3270; + uint32_t x3271; + fiat_np521_uint1 x3272; + uint32_t x3273; + fiat_np521_uint1 x3274; + uint32_t x3275; + fiat_np521_uint1 x3276; + uint32_t x3277; + fiat_np521_uint1 x3278; + uint32_t x3279; + fiat_np521_uint1 x3280; + uint32_t x3281; + fiat_np521_uint1 x3282; + uint32_t x3283; + fiat_np521_uint1 x3284; + uint32_t x3285; + fiat_np521_uint1 x3286; + uint32_t x3287; + uint32_t x3288; + fiat_np521_uint1 x3289; + uint32_t x3290; + fiat_np521_uint1 x3291; + uint32_t x3292; + fiat_np521_uint1 x3293; + uint32_t x3294; + fiat_np521_uint1 x3295; + uint32_t x3296; + fiat_np521_uint1 x3297; + uint32_t x3298; + fiat_np521_uint1 x3299; + uint32_t x3300; + fiat_np521_uint1 x3301; + uint32_t x3302; + fiat_np521_uint1 x3303; + uint32_t x3304; + fiat_np521_uint1 x3305; + uint32_t x3306; + fiat_np521_uint1 x3307; + uint32_t x3308; + fiat_np521_uint1 x3309; + uint32_t x3310; + fiat_np521_uint1 x3311; + uint32_t x3312; + fiat_np521_uint1 x3313; + uint32_t x3314; + fiat_np521_uint1 x3315; + uint32_t x3316; + fiat_np521_uint1 x3317; + uint32_t x3318; + fiat_np521_uint1 x3319; + uint32_t x3320; + fiat_np521_uint1 x3321; + uint32_t x3322; + fiat_np521_uint1 x3323; + uint32_t x3324; + uint32_t x3325; + uint32_t x3326; + uint32_t x3327; + uint32_t x3328; + uint32_t x3329; + uint32_t x3330; + uint32_t x3331; + uint32_t x3332; + uint32_t x3333; + uint32_t x3334; + uint32_t x3335; + uint32_t x3336; + uint32_t x3337; + uint32_t x3338; + uint32_t x3339; + uint32_t x3340; + uint32_t x3341; + uint32_t x3342; + uint32_t x3343; + uint32_t x3344; + uint32_t x3345; + uint32_t x3346; + uint32_t x3347; + uint32_t x3348; + uint32_t x3349; + uint32_t x3350; + uint32_t x3351; + uint32_t x3352; + uint32_t x3353; + uint32_t x3354; + uint32_t x3355; + uint32_t x3356; + uint32_t x3357; + uint32_t x3358; + uint32_t x3359; + fiat_np521_uint1 x3360; + uint32_t x3361; + fiat_np521_uint1 x3362; + uint32_t x3363; + fiat_np521_uint1 x3364; + uint32_t x3365; + fiat_np521_uint1 x3366; + uint32_t x3367; + fiat_np521_uint1 x3368; + uint32_t x3369; + fiat_np521_uint1 x3370; + uint32_t x3371; + fiat_np521_uint1 x3372; + uint32_t x3373; + fiat_np521_uint1 x3374; + uint32_t x3375; + fiat_np521_uint1 x3376; + uint32_t x3377; + fiat_np521_uint1 x3378; + uint32_t x3379; + fiat_np521_uint1 x3380; + uint32_t x3381; + fiat_np521_uint1 x3382; + uint32_t x3383; + fiat_np521_uint1 x3384; + uint32_t x3385; + fiat_np521_uint1 x3386; + uint32_t x3387; + fiat_np521_uint1 x3388; + uint32_t x3389; + fiat_np521_uint1 x3390; + uint32_t x3391; + uint32_t x3392; + fiat_np521_uint1 x3393; + uint32_t x3394; + fiat_np521_uint1 x3395; + uint32_t x3396; + fiat_np521_uint1 x3397; + uint32_t x3398; + fiat_np521_uint1 x3399; + uint32_t x3400; + fiat_np521_uint1 x3401; + uint32_t x3402; + fiat_np521_uint1 x3403; + uint32_t x3404; + fiat_np521_uint1 x3405; + uint32_t x3406; + fiat_np521_uint1 x3407; + uint32_t x3408; + fiat_np521_uint1 x3409; + uint32_t x3410; + fiat_np521_uint1 x3411; + uint32_t x3412; + fiat_np521_uint1 x3413; + uint32_t x3414; + fiat_np521_uint1 x3415; + uint32_t x3416; + fiat_np521_uint1 x3417; + uint32_t x3418; + fiat_np521_uint1 x3419; + uint32_t x3420; + fiat_np521_uint1 x3421; + uint32_t x3422; + fiat_np521_uint1 x3423; + uint32_t x3424; + fiat_np521_uint1 x3425; + uint32_t x3426; + fiat_np521_uint1 x3427; + uint32_t x3428; + uint32_t x3429; + uint32_t x3430; + uint32_t x3431; + uint32_t x3432; + uint32_t x3433; + uint32_t x3434; + uint32_t x3435; + uint32_t x3436; + uint32_t x3437; + uint32_t x3438; + uint32_t x3439; + uint32_t x3440; + uint32_t x3441; + uint32_t x3442; + uint32_t x3443; + uint32_t x3444; + uint32_t x3445; + uint32_t x3446; + uint32_t x3447; + uint32_t x3448; + uint32_t x3449; + uint32_t x3450; + uint32_t x3451; + uint32_t x3452; + uint32_t x3453; + uint32_t x3454; + uint32_t x3455; + uint32_t x3456; + uint32_t x3457; + uint32_t x3458; + uint32_t x3459; + uint32_t x3460; + uint32_t x3461; + uint32_t x3462; + uint32_t x3463; + uint32_t x3464; + fiat_np521_uint1 x3465; + uint32_t x3466; + fiat_np521_uint1 x3467; + uint32_t x3468; + fiat_np521_uint1 x3469; + uint32_t x3470; + fiat_np521_uint1 x3471; + uint32_t x3472; + fiat_np521_uint1 x3473; + uint32_t x3474; + fiat_np521_uint1 x3475; + uint32_t x3476; + fiat_np521_uint1 x3477; + uint32_t x3478; + fiat_np521_uint1 x3479; + uint32_t x3480; + fiat_np521_uint1 x3481; + uint32_t x3482; + fiat_np521_uint1 x3483; + uint32_t x3484; + fiat_np521_uint1 x3485; + uint32_t x3486; + fiat_np521_uint1 x3487; + uint32_t x3488; + fiat_np521_uint1 x3489; + uint32_t x3490; + fiat_np521_uint1 x3491; + uint32_t x3492; + fiat_np521_uint1 x3493; + uint32_t x3494; + fiat_np521_uint1 x3495; + uint32_t x3496; + uint32_t x3497; + fiat_np521_uint1 x3498; + uint32_t x3499; + fiat_np521_uint1 x3500; + uint32_t x3501; + fiat_np521_uint1 x3502; + uint32_t x3503; + fiat_np521_uint1 x3504; + uint32_t x3505; + fiat_np521_uint1 x3506; + uint32_t x3507; + fiat_np521_uint1 x3508; + uint32_t x3509; + fiat_np521_uint1 x3510; + uint32_t x3511; + fiat_np521_uint1 x3512; + uint32_t x3513; + fiat_np521_uint1 x3514; + uint32_t x3515; + fiat_np521_uint1 x3516; + uint32_t x3517; + fiat_np521_uint1 x3518; + uint32_t x3519; + fiat_np521_uint1 x3520; + uint32_t x3521; + fiat_np521_uint1 x3522; + uint32_t x3523; + fiat_np521_uint1 x3524; + uint32_t x3525; + fiat_np521_uint1 x3526; + uint32_t x3527; + fiat_np521_uint1 x3528; + uint32_t x3529; + fiat_np521_uint1 x3530; + uint32_t x3531; + fiat_np521_uint1 x3532; + uint32_t x3533; + uint32_t x3534; + fiat_np521_uint1 x3535; + uint32_t x3536; + fiat_np521_uint1 x3537; + uint32_t x3538; + fiat_np521_uint1 x3539; + uint32_t x3540; + fiat_np521_uint1 x3541; + uint32_t x3542; + fiat_np521_uint1 x3543; + uint32_t x3544; + fiat_np521_uint1 x3545; + uint32_t x3546; + fiat_np521_uint1 x3547; + uint32_t x3548; + fiat_np521_uint1 x3549; + uint32_t x3550; + fiat_np521_uint1 x3551; + uint32_t x3552; + fiat_np521_uint1 x3553; + uint32_t x3554; + fiat_np521_uint1 x3555; + uint32_t x3556; + fiat_np521_uint1 x3557; + uint32_t x3558; + fiat_np521_uint1 x3559; + uint32_t x3560; + fiat_np521_uint1 x3561; + uint32_t x3562; + fiat_np521_uint1 x3563; + uint32_t x3564; + fiat_np521_uint1 x3565; + uint32_t x3566; + fiat_np521_uint1 x3567; + uint32_t x3568; + fiat_np521_uint1 x3569; + uint32_t x3570; + uint32_t x3571; + uint32_t x3572; + uint32_t x3573; + uint32_t x3574; + uint32_t x3575; + uint32_t x3576; + uint32_t x3577; + uint32_t x3578; + uint32_t x3579; + uint32_t x3580; + uint32_t x3581; + uint32_t x3582; + uint32_t x3583; + uint32_t x3584; + uint32_t x3585; + uint32_t x3586; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[8]); + x9 = (arg1[9]); + x10 = (arg1[10]); + x11 = (arg1[11]); + x12 = (arg1[12]); + x13 = (arg1[13]); + x14 = (arg1[14]); + x15 = (arg1[15]); + x16 = (arg1[16]); + x17 = (arg1[0]); + fiat_np521_mulx_u32(&x18, &x19, x17, (arg2[16])); + fiat_np521_mulx_u32(&x20, &x21, x17, (arg2[15])); + fiat_np521_mulx_u32(&x22, &x23, x17, (arg2[14])); + fiat_np521_mulx_u32(&x24, &x25, x17, (arg2[13])); + fiat_np521_mulx_u32(&x26, &x27, x17, (arg2[12])); + fiat_np521_mulx_u32(&x28, &x29, x17, (arg2[11])); + fiat_np521_mulx_u32(&x30, &x31, x17, (arg2[10])); + fiat_np521_mulx_u32(&x32, &x33, x17, (arg2[9])); + fiat_np521_mulx_u32(&x34, &x35, x17, (arg2[8])); + fiat_np521_mulx_u32(&x36, &x37, x17, (arg2[7])); + fiat_np521_mulx_u32(&x38, &x39, x17, (arg2[6])); + fiat_np521_mulx_u32(&x40, &x41, x17, (arg2[5])); + fiat_np521_mulx_u32(&x42, &x43, x17, (arg2[4])); + fiat_np521_mulx_u32(&x44, &x45, x17, (arg2[3])); + fiat_np521_mulx_u32(&x46, &x47, x17, (arg2[2])); + fiat_np521_mulx_u32(&x48, &x49, x17, (arg2[1])); + fiat_np521_mulx_u32(&x50, &x51, x17, (arg2[0])); + fiat_np521_addcarryx_u32(&x52, &x53, 0x0, x51, x48); + fiat_np521_addcarryx_u32(&x54, &x55, x53, x49, x46); + fiat_np521_addcarryx_u32(&x56, &x57, x55, x47, x44); + fiat_np521_addcarryx_u32(&x58, &x59, x57, x45, x42); + fiat_np521_addcarryx_u32(&x60, &x61, x59, x43, x40); + fiat_np521_addcarryx_u32(&x62, &x63, x61, x41, x38); + fiat_np521_addcarryx_u32(&x64, &x65, x63, x39, x36); + fiat_np521_addcarryx_u32(&x66, &x67, x65, x37, x34); + fiat_np521_addcarryx_u32(&x68, &x69, x67, x35, x32); + fiat_np521_addcarryx_u32(&x70, &x71, x69, x33, x30); + fiat_np521_addcarryx_u32(&x72, &x73, x71, x31, x28); + fiat_np521_addcarryx_u32(&x74, &x75, x73, x29, x26); + fiat_np521_addcarryx_u32(&x76, &x77, x75, x27, x24); + fiat_np521_addcarryx_u32(&x78, &x79, x77, x25, x22); + fiat_np521_addcarryx_u32(&x80, &x81, x79, x23, x20); + fiat_np521_addcarryx_u32(&x82, &x83, x81, x21, x18); + x84 = (x83 + x19); + fiat_np521_mulx_u32(&x85, &x86, x50, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x87, &x88, x85, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x89, &x90, x85, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x91, &x92, x85, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x93, &x94, x85, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x95, &x96, x85, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x97, &x98, x85, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x99, &x100, x85, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x101, &x102, x85, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x103, &x104, x85, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x105, &x106, x85, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x107, &x108, x85, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x109, &x110, x85, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x111, &x112, x85, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x113, &x114, x85, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x115, &x116, x85, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x117, &x118, x85, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x119, &x120, x85, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x121, &x122, 0x0, x120, x117); + fiat_np521_addcarryx_u32(&x123, &x124, x122, x118, x115); + fiat_np521_addcarryx_u32(&x125, &x126, x124, x116, x113); + fiat_np521_addcarryx_u32(&x127, &x128, x126, x114, x111); + fiat_np521_addcarryx_u32(&x129, &x130, x128, x112, x109); + fiat_np521_addcarryx_u32(&x131, &x132, x130, x110, x107); + fiat_np521_addcarryx_u32(&x133, &x134, x132, x108, x105); + fiat_np521_addcarryx_u32(&x135, &x136, x134, x106, x103); + fiat_np521_addcarryx_u32(&x137, &x138, x136, x104, x101); + fiat_np521_addcarryx_u32(&x139, &x140, x138, x102, x99); + fiat_np521_addcarryx_u32(&x141, &x142, x140, x100, x97); + fiat_np521_addcarryx_u32(&x143, &x144, x142, x98, x95); + fiat_np521_addcarryx_u32(&x145, &x146, x144, x96, x93); + fiat_np521_addcarryx_u32(&x147, &x148, x146, x94, x91); + fiat_np521_addcarryx_u32(&x149, &x150, x148, x92, x89); + fiat_np521_addcarryx_u32(&x151, &x152, x150, x90, x87); + x153 = (x152 + x88); + fiat_np521_addcarryx_u32(&x154, &x155, 0x0, x50, x119); + fiat_np521_addcarryx_u32(&x156, &x157, x155, x52, x121); + fiat_np521_addcarryx_u32(&x158, &x159, x157, x54, x123); + fiat_np521_addcarryx_u32(&x160, &x161, x159, x56, x125); + fiat_np521_addcarryx_u32(&x162, &x163, x161, x58, x127); + fiat_np521_addcarryx_u32(&x164, &x165, x163, x60, x129); + fiat_np521_addcarryx_u32(&x166, &x167, x165, x62, x131); + fiat_np521_addcarryx_u32(&x168, &x169, x167, x64, x133); + fiat_np521_addcarryx_u32(&x170, &x171, x169, x66, x135); + fiat_np521_addcarryx_u32(&x172, &x173, x171, x68, x137); + fiat_np521_addcarryx_u32(&x174, &x175, x173, x70, x139); + fiat_np521_addcarryx_u32(&x176, &x177, x175, x72, x141); + fiat_np521_addcarryx_u32(&x178, &x179, x177, x74, x143); + fiat_np521_addcarryx_u32(&x180, &x181, x179, x76, x145); + fiat_np521_addcarryx_u32(&x182, &x183, x181, x78, x147); + fiat_np521_addcarryx_u32(&x184, &x185, x183, x80, x149); + fiat_np521_addcarryx_u32(&x186, &x187, x185, x82, x151); + fiat_np521_addcarryx_u32(&x188, &x189, x187, x84, x153); + fiat_np521_mulx_u32(&x190, &x191, x1, (arg2[16])); + fiat_np521_mulx_u32(&x192, &x193, x1, (arg2[15])); + fiat_np521_mulx_u32(&x194, &x195, x1, (arg2[14])); + fiat_np521_mulx_u32(&x196, &x197, x1, (arg2[13])); + fiat_np521_mulx_u32(&x198, &x199, x1, (arg2[12])); + fiat_np521_mulx_u32(&x200, &x201, x1, (arg2[11])); + fiat_np521_mulx_u32(&x202, &x203, x1, (arg2[10])); + fiat_np521_mulx_u32(&x204, &x205, x1, (arg2[9])); + fiat_np521_mulx_u32(&x206, &x207, x1, (arg2[8])); + fiat_np521_mulx_u32(&x208, &x209, x1, (arg2[7])); + fiat_np521_mulx_u32(&x210, &x211, x1, (arg2[6])); + fiat_np521_mulx_u32(&x212, &x213, x1, (arg2[5])); + fiat_np521_mulx_u32(&x214, &x215, x1, (arg2[4])); + fiat_np521_mulx_u32(&x216, &x217, x1, (arg2[3])); + fiat_np521_mulx_u32(&x218, &x219, x1, (arg2[2])); + fiat_np521_mulx_u32(&x220, &x221, x1, (arg2[1])); + fiat_np521_mulx_u32(&x222, &x223, x1, (arg2[0])); + fiat_np521_addcarryx_u32(&x224, &x225, 0x0, x223, x220); + fiat_np521_addcarryx_u32(&x226, &x227, x225, x221, x218); + fiat_np521_addcarryx_u32(&x228, &x229, x227, x219, x216); + fiat_np521_addcarryx_u32(&x230, &x231, x229, x217, x214); + fiat_np521_addcarryx_u32(&x232, &x233, x231, x215, x212); + fiat_np521_addcarryx_u32(&x234, &x235, x233, x213, x210); + fiat_np521_addcarryx_u32(&x236, &x237, x235, x211, x208); + fiat_np521_addcarryx_u32(&x238, &x239, x237, x209, x206); + fiat_np521_addcarryx_u32(&x240, &x241, x239, x207, x204); + fiat_np521_addcarryx_u32(&x242, &x243, x241, x205, x202); + fiat_np521_addcarryx_u32(&x244, &x245, x243, x203, x200); + fiat_np521_addcarryx_u32(&x246, &x247, x245, x201, x198); + fiat_np521_addcarryx_u32(&x248, &x249, x247, x199, x196); + fiat_np521_addcarryx_u32(&x250, &x251, x249, x197, x194); + fiat_np521_addcarryx_u32(&x252, &x253, x251, x195, x192); + fiat_np521_addcarryx_u32(&x254, &x255, x253, x193, x190); + x256 = (x255 + x191); + fiat_np521_addcarryx_u32(&x257, &x258, 0x0, x156, x222); + fiat_np521_addcarryx_u32(&x259, &x260, x258, x158, x224); + fiat_np521_addcarryx_u32(&x261, &x262, x260, x160, x226); + fiat_np521_addcarryx_u32(&x263, &x264, x262, x162, x228); + fiat_np521_addcarryx_u32(&x265, &x266, x264, x164, x230); + fiat_np521_addcarryx_u32(&x267, &x268, x266, x166, x232); + fiat_np521_addcarryx_u32(&x269, &x270, x268, x168, x234); + fiat_np521_addcarryx_u32(&x271, &x272, x270, x170, x236); + fiat_np521_addcarryx_u32(&x273, &x274, x272, x172, x238); + fiat_np521_addcarryx_u32(&x275, &x276, x274, x174, x240); + fiat_np521_addcarryx_u32(&x277, &x278, x276, x176, x242); + fiat_np521_addcarryx_u32(&x279, &x280, x278, x178, x244); + fiat_np521_addcarryx_u32(&x281, &x282, x280, x180, x246); + fiat_np521_addcarryx_u32(&x283, &x284, x282, x182, x248); + fiat_np521_addcarryx_u32(&x285, &x286, x284, x184, x250); + fiat_np521_addcarryx_u32(&x287, &x288, x286, x186, x252); + fiat_np521_addcarryx_u32(&x289, &x290, x288, x188, x254); + fiat_np521_addcarryx_u32(&x291, &x292, x290, x189, x256); + fiat_np521_mulx_u32(&x293, &x294, x257, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x295, &x296, x293, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x297, &x298, x293, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x299, &x300, x293, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x301, &x302, x293, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x303, &x304, x293, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x305, &x306, x293, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x307, &x308, x293, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x309, &x310, x293, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x311, &x312, x293, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x313, &x314, x293, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x315, &x316, x293, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x317, &x318, x293, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x319, &x320, x293, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x321, &x322, x293, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x323, &x324, x293, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x325, &x326, x293, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x327, &x328, x293, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x329, &x330, 0x0, x328, x325); + fiat_np521_addcarryx_u32(&x331, &x332, x330, x326, x323); + fiat_np521_addcarryx_u32(&x333, &x334, x332, x324, x321); + fiat_np521_addcarryx_u32(&x335, &x336, x334, x322, x319); + fiat_np521_addcarryx_u32(&x337, &x338, x336, x320, x317); + fiat_np521_addcarryx_u32(&x339, &x340, x338, x318, x315); + fiat_np521_addcarryx_u32(&x341, &x342, x340, x316, x313); + fiat_np521_addcarryx_u32(&x343, &x344, x342, x314, x311); + fiat_np521_addcarryx_u32(&x345, &x346, x344, x312, x309); + fiat_np521_addcarryx_u32(&x347, &x348, x346, x310, x307); + fiat_np521_addcarryx_u32(&x349, &x350, x348, x308, x305); + fiat_np521_addcarryx_u32(&x351, &x352, x350, x306, x303); + fiat_np521_addcarryx_u32(&x353, &x354, x352, x304, x301); + fiat_np521_addcarryx_u32(&x355, &x356, x354, x302, x299); + fiat_np521_addcarryx_u32(&x357, &x358, x356, x300, x297); + fiat_np521_addcarryx_u32(&x359, &x360, x358, x298, x295); + x361 = (x360 + x296); + fiat_np521_addcarryx_u32(&x362, &x363, 0x0, x257, x327); + fiat_np521_addcarryx_u32(&x364, &x365, x363, x259, x329); + fiat_np521_addcarryx_u32(&x366, &x367, x365, x261, x331); + fiat_np521_addcarryx_u32(&x368, &x369, x367, x263, x333); + fiat_np521_addcarryx_u32(&x370, &x371, x369, x265, x335); + fiat_np521_addcarryx_u32(&x372, &x373, x371, x267, x337); + fiat_np521_addcarryx_u32(&x374, &x375, x373, x269, x339); + fiat_np521_addcarryx_u32(&x376, &x377, x375, x271, x341); + fiat_np521_addcarryx_u32(&x378, &x379, x377, x273, x343); + fiat_np521_addcarryx_u32(&x380, &x381, x379, x275, x345); + fiat_np521_addcarryx_u32(&x382, &x383, x381, x277, x347); + fiat_np521_addcarryx_u32(&x384, &x385, x383, x279, x349); + fiat_np521_addcarryx_u32(&x386, &x387, x385, x281, x351); + fiat_np521_addcarryx_u32(&x388, &x389, x387, x283, x353); + fiat_np521_addcarryx_u32(&x390, &x391, x389, x285, x355); + fiat_np521_addcarryx_u32(&x392, &x393, x391, x287, x357); + fiat_np521_addcarryx_u32(&x394, &x395, x393, x289, x359); + fiat_np521_addcarryx_u32(&x396, &x397, x395, x291, x361); + x398 = ((uint32_t)x397 + x292); + fiat_np521_mulx_u32(&x399, &x400, x2, (arg2[16])); + fiat_np521_mulx_u32(&x401, &x402, x2, (arg2[15])); + fiat_np521_mulx_u32(&x403, &x404, x2, (arg2[14])); + fiat_np521_mulx_u32(&x405, &x406, x2, (arg2[13])); + fiat_np521_mulx_u32(&x407, &x408, x2, (arg2[12])); + fiat_np521_mulx_u32(&x409, &x410, x2, (arg2[11])); + fiat_np521_mulx_u32(&x411, &x412, x2, (arg2[10])); + fiat_np521_mulx_u32(&x413, &x414, x2, (arg2[9])); + fiat_np521_mulx_u32(&x415, &x416, x2, (arg2[8])); + fiat_np521_mulx_u32(&x417, &x418, x2, (arg2[7])); + fiat_np521_mulx_u32(&x419, &x420, x2, (arg2[6])); + fiat_np521_mulx_u32(&x421, &x422, x2, (arg2[5])); + fiat_np521_mulx_u32(&x423, &x424, x2, (arg2[4])); + fiat_np521_mulx_u32(&x425, &x426, x2, (arg2[3])); + fiat_np521_mulx_u32(&x427, &x428, x2, (arg2[2])); + fiat_np521_mulx_u32(&x429, &x430, x2, (arg2[1])); + fiat_np521_mulx_u32(&x431, &x432, x2, (arg2[0])); + fiat_np521_addcarryx_u32(&x433, &x434, 0x0, x432, x429); + fiat_np521_addcarryx_u32(&x435, &x436, x434, x430, x427); + fiat_np521_addcarryx_u32(&x437, &x438, x436, x428, x425); + fiat_np521_addcarryx_u32(&x439, &x440, x438, x426, x423); + fiat_np521_addcarryx_u32(&x441, &x442, x440, x424, x421); + fiat_np521_addcarryx_u32(&x443, &x444, x442, x422, x419); + fiat_np521_addcarryx_u32(&x445, &x446, x444, x420, x417); + fiat_np521_addcarryx_u32(&x447, &x448, x446, x418, x415); + fiat_np521_addcarryx_u32(&x449, &x450, x448, x416, x413); + fiat_np521_addcarryx_u32(&x451, &x452, x450, x414, x411); + fiat_np521_addcarryx_u32(&x453, &x454, x452, x412, x409); + fiat_np521_addcarryx_u32(&x455, &x456, x454, x410, x407); + fiat_np521_addcarryx_u32(&x457, &x458, x456, x408, x405); + fiat_np521_addcarryx_u32(&x459, &x460, x458, x406, x403); + fiat_np521_addcarryx_u32(&x461, &x462, x460, x404, x401); + fiat_np521_addcarryx_u32(&x463, &x464, x462, x402, x399); + x465 = (x464 + x400); + fiat_np521_addcarryx_u32(&x466, &x467, 0x0, x364, x431); + fiat_np521_addcarryx_u32(&x468, &x469, x467, x366, x433); + fiat_np521_addcarryx_u32(&x470, &x471, x469, x368, x435); + fiat_np521_addcarryx_u32(&x472, &x473, x471, x370, x437); + fiat_np521_addcarryx_u32(&x474, &x475, x473, x372, x439); + fiat_np521_addcarryx_u32(&x476, &x477, x475, x374, x441); + fiat_np521_addcarryx_u32(&x478, &x479, x477, x376, x443); + fiat_np521_addcarryx_u32(&x480, &x481, x479, x378, x445); + fiat_np521_addcarryx_u32(&x482, &x483, x481, x380, x447); + fiat_np521_addcarryx_u32(&x484, &x485, x483, x382, x449); + fiat_np521_addcarryx_u32(&x486, &x487, x485, x384, x451); + fiat_np521_addcarryx_u32(&x488, &x489, x487, x386, x453); + fiat_np521_addcarryx_u32(&x490, &x491, x489, x388, x455); + fiat_np521_addcarryx_u32(&x492, &x493, x491, x390, x457); + fiat_np521_addcarryx_u32(&x494, &x495, x493, x392, x459); + fiat_np521_addcarryx_u32(&x496, &x497, x495, x394, x461); + fiat_np521_addcarryx_u32(&x498, &x499, x497, x396, x463); + fiat_np521_addcarryx_u32(&x500, &x501, x499, x398, x465); + fiat_np521_mulx_u32(&x502, &x503, x466, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x504, &x505, x502, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x506, &x507, x502, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x508, &x509, x502, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x510, &x511, x502, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x512, &x513, x502, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x514, &x515, x502, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x516, &x517, x502, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x518, &x519, x502, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x520, &x521, x502, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x522, &x523, x502, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x524, &x525, x502, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x526, &x527, x502, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x528, &x529, x502, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x530, &x531, x502, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x532, &x533, x502, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x534, &x535, x502, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x536, &x537, x502, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x538, &x539, 0x0, x537, x534); + fiat_np521_addcarryx_u32(&x540, &x541, x539, x535, x532); + fiat_np521_addcarryx_u32(&x542, &x543, x541, x533, x530); + fiat_np521_addcarryx_u32(&x544, &x545, x543, x531, x528); + fiat_np521_addcarryx_u32(&x546, &x547, x545, x529, x526); + fiat_np521_addcarryx_u32(&x548, &x549, x547, x527, x524); + fiat_np521_addcarryx_u32(&x550, &x551, x549, x525, x522); + fiat_np521_addcarryx_u32(&x552, &x553, x551, x523, x520); + fiat_np521_addcarryx_u32(&x554, &x555, x553, x521, x518); + fiat_np521_addcarryx_u32(&x556, &x557, x555, x519, x516); + fiat_np521_addcarryx_u32(&x558, &x559, x557, x517, x514); + fiat_np521_addcarryx_u32(&x560, &x561, x559, x515, x512); + fiat_np521_addcarryx_u32(&x562, &x563, x561, x513, x510); + fiat_np521_addcarryx_u32(&x564, &x565, x563, x511, x508); + fiat_np521_addcarryx_u32(&x566, &x567, x565, x509, x506); + fiat_np521_addcarryx_u32(&x568, &x569, x567, x507, x504); + x570 = (x569 + x505); + fiat_np521_addcarryx_u32(&x571, &x572, 0x0, x466, x536); + fiat_np521_addcarryx_u32(&x573, &x574, x572, x468, x538); + fiat_np521_addcarryx_u32(&x575, &x576, x574, x470, x540); + fiat_np521_addcarryx_u32(&x577, &x578, x576, x472, x542); + fiat_np521_addcarryx_u32(&x579, &x580, x578, x474, x544); + fiat_np521_addcarryx_u32(&x581, &x582, x580, x476, x546); + fiat_np521_addcarryx_u32(&x583, &x584, x582, x478, x548); + fiat_np521_addcarryx_u32(&x585, &x586, x584, x480, x550); + fiat_np521_addcarryx_u32(&x587, &x588, x586, x482, x552); + fiat_np521_addcarryx_u32(&x589, &x590, x588, x484, x554); + fiat_np521_addcarryx_u32(&x591, &x592, x590, x486, x556); + fiat_np521_addcarryx_u32(&x593, &x594, x592, x488, x558); + fiat_np521_addcarryx_u32(&x595, &x596, x594, x490, x560); + fiat_np521_addcarryx_u32(&x597, &x598, x596, x492, x562); + fiat_np521_addcarryx_u32(&x599, &x600, x598, x494, x564); + fiat_np521_addcarryx_u32(&x601, &x602, x600, x496, x566); + fiat_np521_addcarryx_u32(&x603, &x604, x602, x498, x568); + fiat_np521_addcarryx_u32(&x605, &x606, x604, x500, x570); + x607 = ((uint32_t)x606 + x501); + fiat_np521_mulx_u32(&x608, &x609, x3, (arg2[16])); + fiat_np521_mulx_u32(&x610, &x611, x3, (arg2[15])); + fiat_np521_mulx_u32(&x612, &x613, x3, (arg2[14])); + fiat_np521_mulx_u32(&x614, &x615, x3, (arg2[13])); + fiat_np521_mulx_u32(&x616, &x617, x3, (arg2[12])); + fiat_np521_mulx_u32(&x618, &x619, x3, (arg2[11])); + fiat_np521_mulx_u32(&x620, &x621, x3, (arg2[10])); + fiat_np521_mulx_u32(&x622, &x623, x3, (arg2[9])); + fiat_np521_mulx_u32(&x624, &x625, x3, (arg2[8])); + fiat_np521_mulx_u32(&x626, &x627, x3, (arg2[7])); + fiat_np521_mulx_u32(&x628, &x629, x3, (arg2[6])); + fiat_np521_mulx_u32(&x630, &x631, x3, (arg2[5])); + fiat_np521_mulx_u32(&x632, &x633, x3, (arg2[4])); + fiat_np521_mulx_u32(&x634, &x635, x3, (arg2[3])); + fiat_np521_mulx_u32(&x636, &x637, x3, (arg2[2])); + fiat_np521_mulx_u32(&x638, &x639, x3, (arg2[1])); + fiat_np521_mulx_u32(&x640, &x641, x3, (arg2[0])); + fiat_np521_addcarryx_u32(&x642, &x643, 0x0, x641, x638); + fiat_np521_addcarryx_u32(&x644, &x645, x643, x639, x636); + fiat_np521_addcarryx_u32(&x646, &x647, x645, x637, x634); + fiat_np521_addcarryx_u32(&x648, &x649, x647, x635, x632); + fiat_np521_addcarryx_u32(&x650, &x651, x649, x633, x630); + fiat_np521_addcarryx_u32(&x652, &x653, x651, x631, x628); + fiat_np521_addcarryx_u32(&x654, &x655, x653, x629, x626); + fiat_np521_addcarryx_u32(&x656, &x657, x655, x627, x624); + fiat_np521_addcarryx_u32(&x658, &x659, x657, x625, x622); + fiat_np521_addcarryx_u32(&x660, &x661, x659, x623, x620); + fiat_np521_addcarryx_u32(&x662, &x663, x661, x621, x618); + fiat_np521_addcarryx_u32(&x664, &x665, x663, x619, x616); + fiat_np521_addcarryx_u32(&x666, &x667, x665, x617, x614); + fiat_np521_addcarryx_u32(&x668, &x669, x667, x615, x612); + fiat_np521_addcarryx_u32(&x670, &x671, x669, x613, x610); + fiat_np521_addcarryx_u32(&x672, &x673, x671, x611, x608); + x674 = (x673 + x609); + fiat_np521_addcarryx_u32(&x675, &x676, 0x0, x573, x640); + fiat_np521_addcarryx_u32(&x677, &x678, x676, x575, x642); + fiat_np521_addcarryx_u32(&x679, &x680, x678, x577, x644); + fiat_np521_addcarryx_u32(&x681, &x682, x680, x579, x646); + fiat_np521_addcarryx_u32(&x683, &x684, x682, x581, x648); + fiat_np521_addcarryx_u32(&x685, &x686, x684, x583, x650); + fiat_np521_addcarryx_u32(&x687, &x688, x686, x585, x652); + fiat_np521_addcarryx_u32(&x689, &x690, x688, x587, x654); + fiat_np521_addcarryx_u32(&x691, &x692, x690, x589, x656); + fiat_np521_addcarryx_u32(&x693, &x694, x692, x591, x658); + fiat_np521_addcarryx_u32(&x695, &x696, x694, x593, x660); + fiat_np521_addcarryx_u32(&x697, &x698, x696, x595, x662); + fiat_np521_addcarryx_u32(&x699, &x700, x698, x597, x664); + fiat_np521_addcarryx_u32(&x701, &x702, x700, x599, x666); + fiat_np521_addcarryx_u32(&x703, &x704, x702, x601, x668); + fiat_np521_addcarryx_u32(&x705, &x706, x704, x603, x670); + fiat_np521_addcarryx_u32(&x707, &x708, x706, x605, x672); + fiat_np521_addcarryx_u32(&x709, &x710, x708, x607, x674); + fiat_np521_mulx_u32(&x711, &x712, x675, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x713, &x714, x711, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x715, &x716, x711, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x717, &x718, x711, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x719, &x720, x711, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x721, &x722, x711, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x723, &x724, x711, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x725, &x726, x711, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x727, &x728, x711, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x729, &x730, x711, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x731, &x732, x711, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x733, &x734, x711, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x735, &x736, x711, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x737, &x738, x711, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x739, &x740, x711, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x741, &x742, x711, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x743, &x744, x711, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x745, &x746, x711, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x747, &x748, 0x0, x746, x743); + fiat_np521_addcarryx_u32(&x749, &x750, x748, x744, x741); + fiat_np521_addcarryx_u32(&x751, &x752, x750, x742, x739); + fiat_np521_addcarryx_u32(&x753, &x754, x752, x740, x737); + fiat_np521_addcarryx_u32(&x755, &x756, x754, x738, x735); + fiat_np521_addcarryx_u32(&x757, &x758, x756, x736, x733); + fiat_np521_addcarryx_u32(&x759, &x760, x758, x734, x731); + fiat_np521_addcarryx_u32(&x761, &x762, x760, x732, x729); + fiat_np521_addcarryx_u32(&x763, &x764, x762, x730, x727); + fiat_np521_addcarryx_u32(&x765, &x766, x764, x728, x725); + fiat_np521_addcarryx_u32(&x767, &x768, x766, x726, x723); + fiat_np521_addcarryx_u32(&x769, &x770, x768, x724, x721); + fiat_np521_addcarryx_u32(&x771, &x772, x770, x722, x719); + fiat_np521_addcarryx_u32(&x773, &x774, x772, x720, x717); + fiat_np521_addcarryx_u32(&x775, &x776, x774, x718, x715); + fiat_np521_addcarryx_u32(&x777, &x778, x776, x716, x713); + x779 = (x778 + x714); + fiat_np521_addcarryx_u32(&x780, &x781, 0x0, x675, x745); + fiat_np521_addcarryx_u32(&x782, &x783, x781, x677, x747); + fiat_np521_addcarryx_u32(&x784, &x785, x783, x679, x749); + fiat_np521_addcarryx_u32(&x786, &x787, x785, x681, x751); + fiat_np521_addcarryx_u32(&x788, &x789, x787, x683, x753); + fiat_np521_addcarryx_u32(&x790, &x791, x789, x685, x755); + fiat_np521_addcarryx_u32(&x792, &x793, x791, x687, x757); + fiat_np521_addcarryx_u32(&x794, &x795, x793, x689, x759); + fiat_np521_addcarryx_u32(&x796, &x797, x795, x691, x761); + fiat_np521_addcarryx_u32(&x798, &x799, x797, x693, x763); + fiat_np521_addcarryx_u32(&x800, &x801, x799, x695, x765); + fiat_np521_addcarryx_u32(&x802, &x803, x801, x697, x767); + fiat_np521_addcarryx_u32(&x804, &x805, x803, x699, x769); + fiat_np521_addcarryx_u32(&x806, &x807, x805, x701, x771); + fiat_np521_addcarryx_u32(&x808, &x809, x807, x703, x773); + fiat_np521_addcarryx_u32(&x810, &x811, x809, x705, x775); + fiat_np521_addcarryx_u32(&x812, &x813, x811, x707, x777); + fiat_np521_addcarryx_u32(&x814, &x815, x813, x709, x779); + x816 = ((uint32_t)x815 + x710); + fiat_np521_mulx_u32(&x817, &x818, x4, (arg2[16])); + fiat_np521_mulx_u32(&x819, &x820, x4, (arg2[15])); + fiat_np521_mulx_u32(&x821, &x822, x4, (arg2[14])); + fiat_np521_mulx_u32(&x823, &x824, x4, (arg2[13])); + fiat_np521_mulx_u32(&x825, &x826, x4, (arg2[12])); + fiat_np521_mulx_u32(&x827, &x828, x4, (arg2[11])); + fiat_np521_mulx_u32(&x829, &x830, x4, (arg2[10])); + fiat_np521_mulx_u32(&x831, &x832, x4, (arg2[9])); + fiat_np521_mulx_u32(&x833, &x834, x4, (arg2[8])); + fiat_np521_mulx_u32(&x835, &x836, x4, (arg2[7])); + fiat_np521_mulx_u32(&x837, &x838, x4, (arg2[6])); + fiat_np521_mulx_u32(&x839, &x840, x4, (arg2[5])); + fiat_np521_mulx_u32(&x841, &x842, x4, (arg2[4])); + fiat_np521_mulx_u32(&x843, &x844, x4, (arg2[3])); + fiat_np521_mulx_u32(&x845, &x846, x4, (arg2[2])); + fiat_np521_mulx_u32(&x847, &x848, x4, (arg2[1])); + fiat_np521_mulx_u32(&x849, &x850, x4, (arg2[0])); + fiat_np521_addcarryx_u32(&x851, &x852, 0x0, x850, x847); + fiat_np521_addcarryx_u32(&x853, &x854, x852, x848, x845); + fiat_np521_addcarryx_u32(&x855, &x856, x854, x846, x843); + fiat_np521_addcarryx_u32(&x857, &x858, x856, x844, x841); + fiat_np521_addcarryx_u32(&x859, &x860, x858, x842, x839); + fiat_np521_addcarryx_u32(&x861, &x862, x860, x840, x837); + fiat_np521_addcarryx_u32(&x863, &x864, x862, x838, x835); + fiat_np521_addcarryx_u32(&x865, &x866, x864, x836, x833); + fiat_np521_addcarryx_u32(&x867, &x868, x866, x834, x831); + fiat_np521_addcarryx_u32(&x869, &x870, x868, x832, x829); + fiat_np521_addcarryx_u32(&x871, &x872, x870, x830, x827); + fiat_np521_addcarryx_u32(&x873, &x874, x872, x828, x825); + fiat_np521_addcarryx_u32(&x875, &x876, x874, x826, x823); + fiat_np521_addcarryx_u32(&x877, &x878, x876, x824, x821); + fiat_np521_addcarryx_u32(&x879, &x880, x878, x822, x819); + fiat_np521_addcarryx_u32(&x881, &x882, x880, x820, x817); + x883 = (x882 + x818); + fiat_np521_addcarryx_u32(&x884, &x885, 0x0, x782, x849); + fiat_np521_addcarryx_u32(&x886, &x887, x885, x784, x851); + fiat_np521_addcarryx_u32(&x888, &x889, x887, x786, x853); + fiat_np521_addcarryx_u32(&x890, &x891, x889, x788, x855); + fiat_np521_addcarryx_u32(&x892, &x893, x891, x790, x857); + fiat_np521_addcarryx_u32(&x894, &x895, x893, x792, x859); + fiat_np521_addcarryx_u32(&x896, &x897, x895, x794, x861); + fiat_np521_addcarryx_u32(&x898, &x899, x897, x796, x863); + fiat_np521_addcarryx_u32(&x900, &x901, x899, x798, x865); + fiat_np521_addcarryx_u32(&x902, &x903, x901, x800, x867); + fiat_np521_addcarryx_u32(&x904, &x905, x903, x802, x869); + fiat_np521_addcarryx_u32(&x906, &x907, x905, x804, x871); + fiat_np521_addcarryx_u32(&x908, &x909, x907, x806, x873); + fiat_np521_addcarryx_u32(&x910, &x911, x909, x808, x875); + fiat_np521_addcarryx_u32(&x912, &x913, x911, x810, x877); + fiat_np521_addcarryx_u32(&x914, &x915, x913, x812, x879); + fiat_np521_addcarryx_u32(&x916, &x917, x915, x814, x881); + fiat_np521_addcarryx_u32(&x918, &x919, x917, x816, x883); + fiat_np521_mulx_u32(&x920, &x921, x884, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x922, &x923, x920, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x924, &x925, x920, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x926, &x927, x920, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x928, &x929, x920, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x930, &x931, x920, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x932, &x933, x920, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x934, &x935, x920, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x936, &x937, x920, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x938, &x939, x920, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x940, &x941, x920, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x942, &x943, x920, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x944, &x945, x920, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x946, &x947, x920, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x948, &x949, x920, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x950, &x951, x920, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x952, &x953, x920, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x954, &x955, x920, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x956, &x957, 0x0, x955, x952); + fiat_np521_addcarryx_u32(&x958, &x959, x957, x953, x950); + fiat_np521_addcarryx_u32(&x960, &x961, x959, x951, x948); + fiat_np521_addcarryx_u32(&x962, &x963, x961, x949, x946); + fiat_np521_addcarryx_u32(&x964, &x965, x963, x947, x944); + fiat_np521_addcarryx_u32(&x966, &x967, x965, x945, x942); + fiat_np521_addcarryx_u32(&x968, &x969, x967, x943, x940); + fiat_np521_addcarryx_u32(&x970, &x971, x969, x941, x938); + fiat_np521_addcarryx_u32(&x972, &x973, x971, x939, x936); + fiat_np521_addcarryx_u32(&x974, &x975, x973, x937, x934); + fiat_np521_addcarryx_u32(&x976, &x977, x975, x935, x932); + fiat_np521_addcarryx_u32(&x978, &x979, x977, x933, x930); + fiat_np521_addcarryx_u32(&x980, &x981, x979, x931, x928); + fiat_np521_addcarryx_u32(&x982, &x983, x981, x929, x926); + fiat_np521_addcarryx_u32(&x984, &x985, x983, x927, x924); + fiat_np521_addcarryx_u32(&x986, &x987, x985, x925, x922); + x988 = (x987 + x923); + fiat_np521_addcarryx_u32(&x989, &x990, 0x0, x884, x954); + fiat_np521_addcarryx_u32(&x991, &x992, x990, x886, x956); + fiat_np521_addcarryx_u32(&x993, &x994, x992, x888, x958); + fiat_np521_addcarryx_u32(&x995, &x996, x994, x890, x960); + fiat_np521_addcarryx_u32(&x997, &x998, x996, x892, x962); + fiat_np521_addcarryx_u32(&x999, &x1000, x998, x894, x964); + fiat_np521_addcarryx_u32(&x1001, &x1002, x1000, x896, x966); + fiat_np521_addcarryx_u32(&x1003, &x1004, x1002, x898, x968); + fiat_np521_addcarryx_u32(&x1005, &x1006, x1004, x900, x970); + fiat_np521_addcarryx_u32(&x1007, &x1008, x1006, x902, x972); + fiat_np521_addcarryx_u32(&x1009, &x1010, x1008, x904, x974); + fiat_np521_addcarryx_u32(&x1011, &x1012, x1010, x906, x976); + fiat_np521_addcarryx_u32(&x1013, &x1014, x1012, x908, x978); + fiat_np521_addcarryx_u32(&x1015, &x1016, x1014, x910, x980); + fiat_np521_addcarryx_u32(&x1017, &x1018, x1016, x912, x982); + fiat_np521_addcarryx_u32(&x1019, &x1020, x1018, x914, x984); + fiat_np521_addcarryx_u32(&x1021, &x1022, x1020, x916, x986); + fiat_np521_addcarryx_u32(&x1023, &x1024, x1022, x918, x988); + x1025 = ((uint32_t)x1024 + x919); + fiat_np521_mulx_u32(&x1026, &x1027, x5, (arg2[16])); + fiat_np521_mulx_u32(&x1028, &x1029, x5, (arg2[15])); + fiat_np521_mulx_u32(&x1030, &x1031, x5, (arg2[14])); + fiat_np521_mulx_u32(&x1032, &x1033, x5, (arg2[13])); + fiat_np521_mulx_u32(&x1034, &x1035, x5, (arg2[12])); + fiat_np521_mulx_u32(&x1036, &x1037, x5, (arg2[11])); + fiat_np521_mulx_u32(&x1038, &x1039, x5, (arg2[10])); + fiat_np521_mulx_u32(&x1040, &x1041, x5, (arg2[9])); + fiat_np521_mulx_u32(&x1042, &x1043, x5, (arg2[8])); + fiat_np521_mulx_u32(&x1044, &x1045, x5, (arg2[7])); + fiat_np521_mulx_u32(&x1046, &x1047, x5, (arg2[6])); + fiat_np521_mulx_u32(&x1048, &x1049, x5, (arg2[5])); + fiat_np521_mulx_u32(&x1050, &x1051, x5, (arg2[4])); + fiat_np521_mulx_u32(&x1052, &x1053, x5, (arg2[3])); + fiat_np521_mulx_u32(&x1054, &x1055, x5, (arg2[2])); + fiat_np521_mulx_u32(&x1056, &x1057, x5, (arg2[1])); + fiat_np521_mulx_u32(&x1058, &x1059, x5, (arg2[0])); + fiat_np521_addcarryx_u32(&x1060, &x1061, 0x0, x1059, x1056); + fiat_np521_addcarryx_u32(&x1062, &x1063, x1061, x1057, x1054); + fiat_np521_addcarryx_u32(&x1064, &x1065, x1063, x1055, x1052); + fiat_np521_addcarryx_u32(&x1066, &x1067, x1065, x1053, x1050); + fiat_np521_addcarryx_u32(&x1068, &x1069, x1067, x1051, x1048); + fiat_np521_addcarryx_u32(&x1070, &x1071, x1069, x1049, x1046); + fiat_np521_addcarryx_u32(&x1072, &x1073, x1071, x1047, x1044); + fiat_np521_addcarryx_u32(&x1074, &x1075, x1073, x1045, x1042); + fiat_np521_addcarryx_u32(&x1076, &x1077, x1075, x1043, x1040); + fiat_np521_addcarryx_u32(&x1078, &x1079, x1077, x1041, x1038); + fiat_np521_addcarryx_u32(&x1080, &x1081, x1079, x1039, x1036); + fiat_np521_addcarryx_u32(&x1082, &x1083, x1081, x1037, x1034); + fiat_np521_addcarryx_u32(&x1084, &x1085, x1083, x1035, x1032); + fiat_np521_addcarryx_u32(&x1086, &x1087, x1085, x1033, x1030); + fiat_np521_addcarryx_u32(&x1088, &x1089, x1087, x1031, x1028); + fiat_np521_addcarryx_u32(&x1090, &x1091, x1089, x1029, x1026); + x1092 = (x1091 + x1027); + fiat_np521_addcarryx_u32(&x1093, &x1094, 0x0, x991, x1058); + fiat_np521_addcarryx_u32(&x1095, &x1096, x1094, x993, x1060); + fiat_np521_addcarryx_u32(&x1097, &x1098, x1096, x995, x1062); + fiat_np521_addcarryx_u32(&x1099, &x1100, x1098, x997, x1064); + fiat_np521_addcarryx_u32(&x1101, &x1102, x1100, x999, x1066); + fiat_np521_addcarryx_u32(&x1103, &x1104, x1102, x1001, x1068); + fiat_np521_addcarryx_u32(&x1105, &x1106, x1104, x1003, x1070); + fiat_np521_addcarryx_u32(&x1107, &x1108, x1106, x1005, x1072); + fiat_np521_addcarryx_u32(&x1109, &x1110, x1108, x1007, x1074); + fiat_np521_addcarryx_u32(&x1111, &x1112, x1110, x1009, x1076); + fiat_np521_addcarryx_u32(&x1113, &x1114, x1112, x1011, x1078); + fiat_np521_addcarryx_u32(&x1115, &x1116, x1114, x1013, x1080); + fiat_np521_addcarryx_u32(&x1117, &x1118, x1116, x1015, x1082); + fiat_np521_addcarryx_u32(&x1119, &x1120, x1118, x1017, x1084); + fiat_np521_addcarryx_u32(&x1121, &x1122, x1120, x1019, x1086); + fiat_np521_addcarryx_u32(&x1123, &x1124, x1122, x1021, x1088); + fiat_np521_addcarryx_u32(&x1125, &x1126, x1124, x1023, x1090); + fiat_np521_addcarryx_u32(&x1127, &x1128, x1126, x1025, x1092); + fiat_np521_mulx_u32(&x1129, &x1130, x1093, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1131, &x1132, x1129, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1133, &x1134, x1129, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1135, &x1136, x1129, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1137, &x1138, x1129, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1139, &x1140, x1129, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1141, &x1142, x1129, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1143, &x1144, x1129, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1145, &x1146, x1129, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1147, &x1148, x1129, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1149, &x1150, x1129, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1151, &x1152, x1129, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1153, &x1154, x1129, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1155, &x1156, x1129, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1157, &x1158, x1129, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1159, &x1160, x1129, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1161, &x1162, x1129, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1163, &x1164, x1129, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x1165, &x1166, 0x0, x1164, x1161); + fiat_np521_addcarryx_u32(&x1167, &x1168, x1166, x1162, x1159); + fiat_np521_addcarryx_u32(&x1169, &x1170, x1168, x1160, x1157); + fiat_np521_addcarryx_u32(&x1171, &x1172, x1170, x1158, x1155); + fiat_np521_addcarryx_u32(&x1173, &x1174, x1172, x1156, x1153); + fiat_np521_addcarryx_u32(&x1175, &x1176, x1174, x1154, x1151); + fiat_np521_addcarryx_u32(&x1177, &x1178, x1176, x1152, x1149); + fiat_np521_addcarryx_u32(&x1179, &x1180, x1178, x1150, x1147); + fiat_np521_addcarryx_u32(&x1181, &x1182, x1180, x1148, x1145); + fiat_np521_addcarryx_u32(&x1183, &x1184, x1182, x1146, x1143); + fiat_np521_addcarryx_u32(&x1185, &x1186, x1184, x1144, x1141); + fiat_np521_addcarryx_u32(&x1187, &x1188, x1186, x1142, x1139); + fiat_np521_addcarryx_u32(&x1189, &x1190, x1188, x1140, x1137); + fiat_np521_addcarryx_u32(&x1191, &x1192, x1190, x1138, x1135); + fiat_np521_addcarryx_u32(&x1193, &x1194, x1192, x1136, x1133); + fiat_np521_addcarryx_u32(&x1195, &x1196, x1194, x1134, x1131); + x1197 = (x1196 + x1132); + fiat_np521_addcarryx_u32(&x1198, &x1199, 0x0, x1093, x1163); + fiat_np521_addcarryx_u32(&x1200, &x1201, x1199, x1095, x1165); + fiat_np521_addcarryx_u32(&x1202, &x1203, x1201, x1097, x1167); + fiat_np521_addcarryx_u32(&x1204, &x1205, x1203, x1099, x1169); + fiat_np521_addcarryx_u32(&x1206, &x1207, x1205, x1101, x1171); + fiat_np521_addcarryx_u32(&x1208, &x1209, x1207, x1103, x1173); + fiat_np521_addcarryx_u32(&x1210, &x1211, x1209, x1105, x1175); + fiat_np521_addcarryx_u32(&x1212, &x1213, x1211, x1107, x1177); + fiat_np521_addcarryx_u32(&x1214, &x1215, x1213, x1109, x1179); + fiat_np521_addcarryx_u32(&x1216, &x1217, x1215, x1111, x1181); + fiat_np521_addcarryx_u32(&x1218, &x1219, x1217, x1113, x1183); + fiat_np521_addcarryx_u32(&x1220, &x1221, x1219, x1115, x1185); + fiat_np521_addcarryx_u32(&x1222, &x1223, x1221, x1117, x1187); + fiat_np521_addcarryx_u32(&x1224, &x1225, x1223, x1119, x1189); + fiat_np521_addcarryx_u32(&x1226, &x1227, x1225, x1121, x1191); + fiat_np521_addcarryx_u32(&x1228, &x1229, x1227, x1123, x1193); + fiat_np521_addcarryx_u32(&x1230, &x1231, x1229, x1125, x1195); + fiat_np521_addcarryx_u32(&x1232, &x1233, x1231, x1127, x1197); + x1234 = ((uint32_t)x1233 + x1128); + fiat_np521_mulx_u32(&x1235, &x1236, x6, (arg2[16])); + fiat_np521_mulx_u32(&x1237, &x1238, x6, (arg2[15])); + fiat_np521_mulx_u32(&x1239, &x1240, x6, (arg2[14])); + fiat_np521_mulx_u32(&x1241, &x1242, x6, (arg2[13])); + fiat_np521_mulx_u32(&x1243, &x1244, x6, (arg2[12])); + fiat_np521_mulx_u32(&x1245, &x1246, x6, (arg2[11])); + fiat_np521_mulx_u32(&x1247, &x1248, x6, (arg2[10])); + fiat_np521_mulx_u32(&x1249, &x1250, x6, (arg2[9])); + fiat_np521_mulx_u32(&x1251, &x1252, x6, (arg2[8])); + fiat_np521_mulx_u32(&x1253, &x1254, x6, (arg2[7])); + fiat_np521_mulx_u32(&x1255, &x1256, x6, (arg2[6])); + fiat_np521_mulx_u32(&x1257, &x1258, x6, (arg2[5])); + fiat_np521_mulx_u32(&x1259, &x1260, x6, (arg2[4])); + fiat_np521_mulx_u32(&x1261, &x1262, x6, (arg2[3])); + fiat_np521_mulx_u32(&x1263, &x1264, x6, (arg2[2])); + fiat_np521_mulx_u32(&x1265, &x1266, x6, (arg2[1])); + fiat_np521_mulx_u32(&x1267, &x1268, x6, (arg2[0])); + fiat_np521_addcarryx_u32(&x1269, &x1270, 0x0, x1268, x1265); + fiat_np521_addcarryx_u32(&x1271, &x1272, x1270, x1266, x1263); + fiat_np521_addcarryx_u32(&x1273, &x1274, x1272, x1264, x1261); + fiat_np521_addcarryx_u32(&x1275, &x1276, x1274, x1262, x1259); + fiat_np521_addcarryx_u32(&x1277, &x1278, x1276, x1260, x1257); + fiat_np521_addcarryx_u32(&x1279, &x1280, x1278, x1258, x1255); + fiat_np521_addcarryx_u32(&x1281, &x1282, x1280, x1256, x1253); + fiat_np521_addcarryx_u32(&x1283, &x1284, x1282, x1254, x1251); + fiat_np521_addcarryx_u32(&x1285, &x1286, x1284, x1252, x1249); + fiat_np521_addcarryx_u32(&x1287, &x1288, x1286, x1250, x1247); + fiat_np521_addcarryx_u32(&x1289, &x1290, x1288, x1248, x1245); + fiat_np521_addcarryx_u32(&x1291, &x1292, x1290, x1246, x1243); + fiat_np521_addcarryx_u32(&x1293, &x1294, x1292, x1244, x1241); + fiat_np521_addcarryx_u32(&x1295, &x1296, x1294, x1242, x1239); + fiat_np521_addcarryx_u32(&x1297, &x1298, x1296, x1240, x1237); + fiat_np521_addcarryx_u32(&x1299, &x1300, x1298, x1238, x1235); + x1301 = (x1300 + x1236); + fiat_np521_addcarryx_u32(&x1302, &x1303, 0x0, x1200, x1267); + fiat_np521_addcarryx_u32(&x1304, &x1305, x1303, x1202, x1269); + fiat_np521_addcarryx_u32(&x1306, &x1307, x1305, x1204, x1271); + fiat_np521_addcarryx_u32(&x1308, &x1309, x1307, x1206, x1273); + fiat_np521_addcarryx_u32(&x1310, &x1311, x1309, x1208, x1275); + fiat_np521_addcarryx_u32(&x1312, &x1313, x1311, x1210, x1277); + fiat_np521_addcarryx_u32(&x1314, &x1315, x1313, x1212, x1279); + fiat_np521_addcarryx_u32(&x1316, &x1317, x1315, x1214, x1281); + fiat_np521_addcarryx_u32(&x1318, &x1319, x1317, x1216, x1283); + fiat_np521_addcarryx_u32(&x1320, &x1321, x1319, x1218, x1285); + fiat_np521_addcarryx_u32(&x1322, &x1323, x1321, x1220, x1287); + fiat_np521_addcarryx_u32(&x1324, &x1325, x1323, x1222, x1289); + fiat_np521_addcarryx_u32(&x1326, &x1327, x1325, x1224, x1291); + fiat_np521_addcarryx_u32(&x1328, &x1329, x1327, x1226, x1293); + fiat_np521_addcarryx_u32(&x1330, &x1331, x1329, x1228, x1295); + fiat_np521_addcarryx_u32(&x1332, &x1333, x1331, x1230, x1297); + fiat_np521_addcarryx_u32(&x1334, &x1335, x1333, x1232, x1299); + fiat_np521_addcarryx_u32(&x1336, &x1337, x1335, x1234, x1301); + fiat_np521_mulx_u32(&x1338, &x1339, x1302, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1340, &x1341, x1338, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1342, &x1343, x1338, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1344, &x1345, x1338, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1346, &x1347, x1338, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1348, &x1349, x1338, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1350, &x1351, x1338, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1352, &x1353, x1338, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1354, &x1355, x1338, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1356, &x1357, x1338, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1358, &x1359, x1338, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1360, &x1361, x1338, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1362, &x1363, x1338, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1364, &x1365, x1338, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1366, &x1367, x1338, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1368, &x1369, x1338, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1370, &x1371, x1338, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1372, &x1373, x1338, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x1374, &x1375, 0x0, x1373, x1370); + fiat_np521_addcarryx_u32(&x1376, &x1377, x1375, x1371, x1368); + fiat_np521_addcarryx_u32(&x1378, &x1379, x1377, x1369, x1366); + fiat_np521_addcarryx_u32(&x1380, &x1381, x1379, x1367, x1364); + fiat_np521_addcarryx_u32(&x1382, &x1383, x1381, x1365, x1362); + fiat_np521_addcarryx_u32(&x1384, &x1385, x1383, x1363, x1360); + fiat_np521_addcarryx_u32(&x1386, &x1387, x1385, x1361, x1358); + fiat_np521_addcarryx_u32(&x1388, &x1389, x1387, x1359, x1356); + fiat_np521_addcarryx_u32(&x1390, &x1391, x1389, x1357, x1354); + fiat_np521_addcarryx_u32(&x1392, &x1393, x1391, x1355, x1352); + fiat_np521_addcarryx_u32(&x1394, &x1395, x1393, x1353, x1350); + fiat_np521_addcarryx_u32(&x1396, &x1397, x1395, x1351, x1348); + fiat_np521_addcarryx_u32(&x1398, &x1399, x1397, x1349, x1346); + fiat_np521_addcarryx_u32(&x1400, &x1401, x1399, x1347, x1344); + fiat_np521_addcarryx_u32(&x1402, &x1403, x1401, x1345, x1342); + fiat_np521_addcarryx_u32(&x1404, &x1405, x1403, x1343, x1340); + x1406 = (x1405 + x1341); + fiat_np521_addcarryx_u32(&x1407, &x1408, 0x0, x1302, x1372); + fiat_np521_addcarryx_u32(&x1409, &x1410, x1408, x1304, x1374); + fiat_np521_addcarryx_u32(&x1411, &x1412, x1410, x1306, x1376); + fiat_np521_addcarryx_u32(&x1413, &x1414, x1412, x1308, x1378); + fiat_np521_addcarryx_u32(&x1415, &x1416, x1414, x1310, x1380); + fiat_np521_addcarryx_u32(&x1417, &x1418, x1416, x1312, x1382); + fiat_np521_addcarryx_u32(&x1419, &x1420, x1418, x1314, x1384); + fiat_np521_addcarryx_u32(&x1421, &x1422, x1420, x1316, x1386); + fiat_np521_addcarryx_u32(&x1423, &x1424, x1422, x1318, x1388); + fiat_np521_addcarryx_u32(&x1425, &x1426, x1424, x1320, x1390); + fiat_np521_addcarryx_u32(&x1427, &x1428, x1426, x1322, x1392); + fiat_np521_addcarryx_u32(&x1429, &x1430, x1428, x1324, x1394); + fiat_np521_addcarryx_u32(&x1431, &x1432, x1430, x1326, x1396); + fiat_np521_addcarryx_u32(&x1433, &x1434, x1432, x1328, x1398); + fiat_np521_addcarryx_u32(&x1435, &x1436, x1434, x1330, x1400); + fiat_np521_addcarryx_u32(&x1437, &x1438, x1436, x1332, x1402); + fiat_np521_addcarryx_u32(&x1439, &x1440, x1438, x1334, x1404); + fiat_np521_addcarryx_u32(&x1441, &x1442, x1440, x1336, x1406); + x1443 = ((uint32_t)x1442 + x1337); + fiat_np521_mulx_u32(&x1444, &x1445, x7, (arg2[16])); + fiat_np521_mulx_u32(&x1446, &x1447, x7, (arg2[15])); + fiat_np521_mulx_u32(&x1448, &x1449, x7, (arg2[14])); + fiat_np521_mulx_u32(&x1450, &x1451, x7, (arg2[13])); + fiat_np521_mulx_u32(&x1452, &x1453, x7, (arg2[12])); + fiat_np521_mulx_u32(&x1454, &x1455, x7, (arg2[11])); + fiat_np521_mulx_u32(&x1456, &x1457, x7, (arg2[10])); + fiat_np521_mulx_u32(&x1458, &x1459, x7, (arg2[9])); + fiat_np521_mulx_u32(&x1460, &x1461, x7, (arg2[8])); + fiat_np521_mulx_u32(&x1462, &x1463, x7, (arg2[7])); + fiat_np521_mulx_u32(&x1464, &x1465, x7, (arg2[6])); + fiat_np521_mulx_u32(&x1466, &x1467, x7, (arg2[5])); + fiat_np521_mulx_u32(&x1468, &x1469, x7, (arg2[4])); + fiat_np521_mulx_u32(&x1470, &x1471, x7, (arg2[3])); + fiat_np521_mulx_u32(&x1472, &x1473, x7, (arg2[2])); + fiat_np521_mulx_u32(&x1474, &x1475, x7, (arg2[1])); + fiat_np521_mulx_u32(&x1476, &x1477, x7, (arg2[0])); + fiat_np521_addcarryx_u32(&x1478, &x1479, 0x0, x1477, x1474); + fiat_np521_addcarryx_u32(&x1480, &x1481, x1479, x1475, x1472); + fiat_np521_addcarryx_u32(&x1482, &x1483, x1481, x1473, x1470); + fiat_np521_addcarryx_u32(&x1484, &x1485, x1483, x1471, x1468); + fiat_np521_addcarryx_u32(&x1486, &x1487, x1485, x1469, x1466); + fiat_np521_addcarryx_u32(&x1488, &x1489, x1487, x1467, x1464); + fiat_np521_addcarryx_u32(&x1490, &x1491, x1489, x1465, x1462); + fiat_np521_addcarryx_u32(&x1492, &x1493, x1491, x1463, x1460); + fiat_np521_addcarryx_u32(&x1494, &x1495, x1493, x1461, x1458); + fiat_np521_addcarryx_u32(&x1496, &x1497, x1495, x1459, x1456); + fiat_np521_addcarryx_u32(&x1498, &x1499, x1497, x1457, x1454); + fiat_np521_addcarryx_u32(&x1500, &x1501, x1499, x1455, x1452); + fiat_np521_addcarryx_u32(&x1502, &x1503, x1501, x1453, x1450); + fiat_np521_addcarryx_u32(&x1504, &x1505, x1503, x1451, x1448); + fiat_np521_addcarryx_u32(&x1506, &x1507, x1505, x1449, x1446); + fiat_np521_addcarryx_u32(&x1508, &x1509, x1507, x1447, x1444); + x1510 = (x1509 + x1445); + fiat_np521_addcarryx_u32(&x1511, &x1512, 0x0, x1409, x1476); + fiat_np521_addcarryx_u32(&x1513, &x1514, x1512, x1411, x1478); + fiat_np521_addcarryx_u32(&x1515, &x1516, x1514, x1413, x1480); + fiat_np521_addcarryx_u32(&x1517, &x1518, x1516, x1415, x1482); + fiat_np521_addcarryx_u32(&x1519, &x1520, x1518, x1417, x1484); + fiat_np521_addcarryx_u32(&x1521, &x1522, x1520, x1419, x1486); + fiat_np521_addcarryx_u32(&x1523, &x1524, x1522, x1421, x1488); + fiat_np521_addcarryx_u32(&x1525, &x1526, x1524, x1423, x1490); + fiat_np521_addcarryx_u32(&x1527, &x1528, x1526, x1425, x1492); + fiat_np521_addcarryx_u32(&x1529, &x1530, x1528, x1427, x1494); + fiat_np521_addcarryx_u32(&x1531, &x1532, x1530, x1429, x1496); + fiat_np521_addcarryx_u32(&x1533, &x1534, x1532, x1431, x1498); + fiat_np521_addcarryx_u32(&x1535, &x1536, x1534, x1433, x1500); + fiat_np521_addcarryx_u32(&x1537, &x1538, x1536, x1435, x1502); + fiat_np521_addcarryx_u32(&x1539, &x1540, x1538, x1437, x1504); + fiat_np521_addcarryx_u32(&x1541, &x1542, x1540, x1439, x1506); + fiat_np521_addcarryx_u32(&x1543, &x1544, x1542, x1441, x1508); + fiat_np521_addcarryx_u32(&x1545, &x1546, x1544, x1443, x1510); + fiat_np521_mulx_u32(&x1547, &x1548, x1511, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1549, &x1550, x1547, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1551, &x1552, x1547, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1553, &x1554, x1547, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1555, &x1556, x1547, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1557, &x1558, x1547, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1559, &x1560, x1547, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1561, &x1562, x1547, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1563, &x1564, x1547, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1565, &x1566, x1547, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1567, &x1568, x1547, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1569, &x1570, x1547, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1571, &x1572, x1547, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1573, &x1574, x1547, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1575, &x1576, x1547, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1577, &x1578, x1547, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1579, &x1580, x1547, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1581, &x1582, x1547, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x1583, &x1584, 0x0, x1582, x1579); + fiat_np521_addcarryx_u32(&x1585, &x1586, x1584, x1580, x1577); + fiat_np521_addcarryx_u32(&x1587, &x1588, x1586, x1578, x1575); + fiat_np521_addcarryx_u32(&x1589, &x1590, x1588, x1576, x1573); + fiat_np521_addcarryx_u32(&x1591, &x1592, x1590, x1574, x1571); + fiat_np521_addcarryx_u32(&x1593, &x1594, x1592, x1572, x1569); + fiat_np521_addcarryx_u32(&x1595, &x1596, x1594, x1570, x1567); + fiat_np521_addcarryx_u32(&x1597, &x1598, x1596, x1568, x1565); + fiat_np521_addcarryx_u32(&x1599, &x1600, x1598, x1566, x1563); + fiat_np521_addcarryx_u32(&x1601, &x1602, x1600, x1564, x1561); + fiat_np521_addcarryx_u32(&x1603, &x1604, x1602, x1562, x1559); + fiat_np521_addcarryx_u32(&x1605, &x1606, x1604, x1560, x1557); + fiat_np521_addcarryx_u32(&x1607, &x1608, x1606, x1558, x1555); + fiat_np521_addcarryx_u32(&x1609, &x1610, x1608, x1556, x1553); + fiat_np521_addcarryx_u32(&x1611, &x1612, x1610, x1554, x1551); + fiat_np521_addcarryx_u32(&x1613, &x1614, x1612, x1552, x1549); + x1615 = (x1614 + x1550); + fiat_np521_addcarryx_u32(&x1616, &x1617, 0x0, x1511, x1581); + fiat_np521_addcarryx_u32(&x1618, &x1619, x1617, x1513, x1583); + fiat_np521_addcarryx_u32(&x1620, &x1621, x1619, x1515, x1585); + fiat_np521_addcarryx_u32(&x1622, &x1623, x1621, x1517, x1587); + fiat_np521_addcarryx_u32(&x1624, &x1625, x1623, x1519, x1589); + fiat_np521_addcarryx_u32(&x1626, &x1627, x1625, x1521, x1591); + fiat_np521_addcarryx_u32(&x1628, &x1629, x1627, x1523, x1593); + fiat_np521_addcarryx_u32(&x1630, &x1631, x1629, x1525, x1595); + fiat_np521_addcarryx_u32(&x1632, &x1633, x1631, x1527, x1597); + fiat_np521_addcarryx_u32(&x1634, &x1635, x1633, x1529, x1599); + fiat_np521_addcarryx_u32(&x1636, &x1637, x1635, x1531, x1601); + fiat_np521_addcarryx_u32(&x1638, &x1639, x1637, x1533, x1603); + fiat_np521_addcarryx_u32(&x1640, &x1641, x1639, x1535, x1605); + fiat_np521_addcarryx_u32(&x1642, &x1643, x1641, x1537, x1607); + fiat_np521_addcarryx_u32(&x1644, &x1645, x1643, x1539, x1609); + fiat_np521_addcarryx_u32(&x1646, &x1647, x1645, x1541, x1611); + fiat_np521_addcarryx_u32(&x1648, &x1649, x1647, x1543, x1613); + fiat_np521_addcarryx_u32(&x1650, &x1651, x1649, x1545, x1615); + x1652 = ((uint32_t)x1651 + x1546); + fiat_np521_mulx_u32(&x1653, &x1654, x8, (arg2[16])); + fiat_np521_mulx_u32(&x1655, &x1656, x8, (arg2[15])); + fiat_np521_mulx_u32(&x1657, &x1658, x8, (arg2[14])); + fiat_np521_mulx_u32(&x1659, &x1660, x8, (arg2[13])); + fiat_np521_mulx_u32(&x1661, &x1662, x8, (arg2[12])); + fiat_np521_mulx_u32(&x1663, &x1664, x8, (arg2[11])); + fiat_np521_mulx_u32(&x1665, &x1666, x8, (arg2[10])); + fiat_np521_mulx_u32(&x1667, &x1668, x8, (arg2[9])); + fiat_np521_mulx_u32(&x1669, &x1670, x8, (arg2[8])); + fiat_np521_mulx_u32(&x1671, &x1672, x8, (arg2[7])); + fiat_np521_mulx_u32(&x1673, &x1674, x8, (arg2[6])); + fiat_np521_mulx_u32(&x1675, &x1676, x8, (arg2[5])); + fiat_np521_mulx_u32(&x1677, &x1678, x8, (arg2[4])); + fiat_np521_mulx_u32(&x1679, &x1680, x8, (arg2[3])); + fiat_np521_mulx_u32(&x1681, &x1682, x8, (arg2[2])); + fiat_np521_mulx_u32(&x1683, &x1684, x8, (arg2[1])); + fiat_np521_mulx_u32(&x1685, &x1686, x8, (arg2[0])); + fiat_np521_addcarryx_u32(&x1687, &x1688, 0x0, x1686, x1683); + fiat_np521_addcarryx_u32(&x1689, &x1690, x1688, x1684, x1681); + fiat_np521_addcarryx_u32(&x1691, &x1692, x1690, x1682, x1679); + fiat_np521_addcarryx_u32(&x1693, &x1694, x1692, x1680, x1677); + fiat_np521_addcarryx_u32(&x1695, &x1696, x1694, x1678, x1675); + fiat_np521_addcarryx_u32(&x1697, &x1698, x1696, x1676, x1673); + fiat_np521_addcarryx_u32(&x1699, &x1700, x1698, x1674, x1671); + fiat_np521_addcarryx_u32(&x1701, &x1702, x1700, x1672, x1669); + fiat_np521_addcarryx_u32(&x1703, &x1704, x1702, x1670, x1667); + fiat_np521_addcarryx_u32(&x1705, &x1706, x1704, x1668, x1665); + fiat_np521_addcarryx_u32(&x1707, &x1708, x1706, x1666, x1663); + fiat_np521_addcarryx_u32(&x1709, &x1710, x1708, x1664, x1661); + fiat_np521_addcarryx_u32(&x1711, &x1712, x1710, x1662, x1659); + fiat_np521_addcarryx_u32(&x1713, &x1714, x1712, x1660, x1657); + fiat_np521_addcarryx_u32(&x1715, &x1716, x1714, x1658, x1655); + fiat_np521_addcarryx_u32(&x1717, &x1718, x1716, x1656, x1653); + x1719 = (x1718 + x1654); + fiat_np521_addcarryx_u32(&x1720, &x1721, 0x0, x1618, x1685); + fiat_np521_addcarryx_u32(&x1722, &x1723, x1721, x1620, x1687); + fiat_np521_addcarryx_u32(&x1724, &x1725, x1723, x1622, x1689); + fiat_np521_addcarryx_u32(&x1726, &x1727, x1725, x1624, x1691); + fiat_np521_addcarryx_u32(&x1728, &x1729, x1727, x1626, x1693); + fiat_np521_addcarryx_u32(&x1730, &x1731, x1729, x1628, x1695); + fiat_np521_addcarryx_u32(&x1732, &x1733, x1731, x1630, x1697); + fiat_np521_addcarryx_u32(&x1734, &x1735, x1733, x1632, x1699); + fiat_np521_addcarryx_u32(&x1736, &x1737, x1735, x1634, x1701); + fiat_np521_addcarryx_u32(&x1738, &x1739, x1737, x1636, x1703); + fiat_np521_addcarryx_u32(&x1740, &x1741, x1739, x1638, x1705); + fiat_np521_addcarryx_u32(&x1742, &x1743, x1741, x1640, x1707); + fiat_np521_addcarryx_u32(&x1744, &x1745, x1743, x1642, x1709); + fiat_np521_addcarryx_u32(&x1746, &x1747, x1745, x1644, x1711); + fiat_np521_addcarryx_u32(&x1748, &x1749, x1747, x1646, x1713); + fiat_np521_addcarryx_u32(&x1750, &x1751, x1749, x1648, x1715); + fiat_np521_addcarryx_u32(&x1752, &x1753, x1751, x1650, x1717); + fiat_np521_addcarryx_u32(&x1754, &x1755, x1753, x1652, x1719); + fiat_np521_mulx_u32(&x1756, &x1757, x1720, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1758, &x1759, x1756, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1760, &x1761, x1756, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1762, &x1763, x1756, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1764, &x1765, x1756, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1766, &x1767, x1756, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1768, &x1769, x1756, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1770, &x1771, x1756, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1772, &x1773, x1756, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1774, &x1775, x1756, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1776, &x1777, x1756, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1778, &x1779, x1756, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1780, &x1781, x1756, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1782, &x1783, x1756, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1784, &x1785, x1756, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1786, &x1787, x1756, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1788, &x1789, x1756, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1790, &x1791, x1756, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x1792, &x1793, 0x0, x1791, x1788); + fiat_np521_addcarryx_u32(&x1794, &x1795, x1793, x1789, x1786); + fiat_np521_addcarryx_u32(&x1796, &x1797, x1795, x1787, x1784); + fiat_np521_addcarryx_u32(&x1798, &x1799, x1797, x1785, x1782); + fiat_np521_addcarryx_u32(&x1800, &x1801, x1799, x1783, x1780); + fiat_np521_addcarryx_u32(&x1802, &x1803, x1801, x1781, x1778); + fiat_np521_addcarryx_u32(&x1804, &x1805, x1803, x1779, x1776); + fiat_np521_addcarryx_u32(&x1806, &x1807, x1805, x1777, x1774); + fiat_np521_addcarryx_u32(&x1808, &x1809, x1807, x1775, x1772); + fiat_np521_addcarryx_u32(&x1810, &x1811, x1809, x1773, x1770); + fiat_np521_addcarryx_u32(&x1812, &x1813, x1811, x1771, x1768); + fiat_np521_addcarryx_u32(&x1814, &x1815, x1813, x1769, x1766); + fiat_np521_addcarryx_u32(&x1816, &x1817, x1815, x1767, x1764); + fiat_np521_addcarryx_u32(&x1818, &x1819, x1817, x1765, x1762); + fiat_np521_addcarryx_u32(&x1820, &x1821, x1819, x1763, x1760); + fiat_np521_addcarryx_u32(&x1822, &x1823, x1821, x1761, x1758); + x1824 = (x1823 + x1759); + fiat_np521_addcarryx_u32(&x1825, &x1826, 0x0, x1720, x1790); + fiat_np521_addcarryx_u32(&x1827, &x1828, x1826, x1722, x1792); + fiat_np521_addcarryx_u32(&x1829, &x1830, x1828, x1724, x1794); + fiat_np521_addcarryx_u32(&x1831, &x1832, x1830, x1726, x1796); + fiat_np521_addcarryx_u32(&x1833, &x1834, x1832, x1728, x1798); + fiat_np521_addcarryx_u32(&x1835, &x1836, x1834, x1730, x1800); + fiat_np521_addcarryx_u32(&x1837, &x1838, x1836, x1732, x1802); + fiat_np521_addcarryx_u32(&x1839, &x1840, x1838, x1734, x1804); + fiat_np521_addcarryx_u32(&x1841, &x1842, x1840, x1736, x1806); + fiat_np521_addcarryx_u32(&x1843, &x1844, x1842, x1738, x1808); + fiat_np521_addcarryx_u32(&x1845, &x1846, x1844, x1740, x1810); + fiat_np521_addcarryx_u32(&x1847, &x1848, x1846, x1742, x1812); + fiat_np521_addcarryx_u32(&x1849, &x1850, x1848, x1744, x1814); + fiat_np521_addcarryx_u32(&x1851, &x1852, x1850, x1746, x1816); + fiat_np521_addcarryx_u32(&x1853, &x1854, x1852, x1748, x1818); + fiat_np521_addcarryx_u32(&x1855, &x1856, x1854, x1750, x1820); + fiat_np521_addcarryx_u32(&x1857, &x1858, x1856, x1752, x1822); + fiat_np521_addcarryx_u32(&x1859, &x1860, x1858, x1754, x1824); + x1861 = ((uint32_t)x1860 + x1755); + fiat_np521_mulx_u32(&x1862, &x1863, x9, (arg2[16])); + fiat_np521_mulx_u32(&x1864, &x1865, x9, (arg2[15])); + fiat_np521_mulx_u32(&x1866, &x1867, x9, (arg2[14])); + fiat_np521_mulx_u32(&x1868, &x1869, x9, (arg2[13])); + fiat_np521_mulx_u32(&x1870, &x1871, x9, (arg2[12])); + fiat_np521_mulx_u32(&x1872, &x1873, x9, (arg2[11])); + fiat_np521_mulx_u32(&x1874, &x1875, x9, (arg2[10])); + fiat_np521_mulx_u32(&x1876, &x1877, x9, (arg2[9])); + fiat_np521_mulx_u32(&x1878, &x1879, x9, (arg2[8])); + fiat_np521_mulx_u32(&x1880, &x1881, x9, (arg2[7])); + fiat_np521_mulx_u32(&x1882, &x1883, x9, (arg2[6])); + fiat_np521_mulx_u32(&x1884, &x1885, x9, (arg2[5])); + fiat_np521_mulx_u32(&x1886, &x1887, x9, (arg2[4])); + fiat_np521_mulx_u32(&x1888, &x1889, x9, (arg2[3])); + fiat_np521_mulx_u32(&x1890, &x1891, x9, (arg2[2])); + fiat_np521_mulx_u32(&x1892, &x1893, x9, (arg2[1])); + fiat_np521_mulx_u32(&x1894, &x1895, x9, (arg2[0])); + fiat_np521_addcarryx_u32(&x1896, &x1897, 0x0, x1895, x1892); + fiat_np521_addcarryx_u32(&x1898, &x1899, x1897, x1893, x1890); + fiat_np521_addcarryx_u32(&x1900, &x1901, x1899, x1891, x1888); + fiat_np521_addcarryx_u32(&x1902, &x1903, x1901, x1889, x1886); + fiat_np521_addcarryx_u32(&x1904, &x1905, x1903, x1887, x1884); + fiat_np521_addcarryx_u32(&x1906, &x1907, x1905, x1885, x1882); + fiat_np521_addcarryx_u32(&x1908, &x1909, x1907, x1883, x1880); + fiat_np521_addcarryx_u32(&x1910, &x1911, x1909, x1881, x1878); + fiat_np521_addcarryx_u32(&x1912, &x1913, x1911, x1879, x1876); + fiat_np521_addcarryx_u32(&x1914, &x1915, x1913, x1877, x1874); + fiat_np521_addcarryx_u32(&x1916, &x1917, x1915, x1875, x1872); + fiat_np521_addcarryx_u32(&x1918, &x1919, x1917, x1873, x1870); + fiat_np521_addcarryx_u32(&x1920, &x1921, x1919, x1871, x1868); + fiat_np521_addcarryx_u32(&x1922, &x1923, x1921, x1869, x1866); + fiat_np521_addcarryx_u32(&x1924, &x1925, x1923, x1867, x1864); + fiat_np521_addcarryx_u32(&x1926, &x1927, x1925, x1865, x1862); + x1928 = (x1927 + x1863); + fiat_np521_addcarryx_u32(&x1929, &x1930, 0x0, x1827, x1894); + fiat_np521_addcarryx_u32(&x1931, &x1932, x1930, x1829, x1896); + fiat_np521_addcarryx_u32(&x1933, &x1934, x1932, x1831, x1898); + fiat_np521_addcarryx_u32(&x1935, &x1936, x1934, x1833, x1900); + fiat_np521_addcarryx_u32(&x1937, &x1938, x1936, x1835, x1902); + fiat_np521_addcarryx_u32(&x1939, &x1940, x1938, x1837, x1904); + fiat_np521_addcarryx_u32(&x1941, &x1942, x1940, x1839, x1906); + fiat_np521_addcarryx_u32(&x1943, &x1944, x1942, x1841, x1908); + fiat_np521_addcarryx_u32(&x1945, &x1946, x1944, x1843, x1910); + fiat_np521_addcarryx_u32(&x1947, &x1948, x1946, x1845, x1912); + fiat_np521_addcarryx_u32(&x1949, &x1950, x1948, x1847, x1914); + fiat_np521_addcarryx_u32(&x1951, &x1952, x1950, x1849, x1916); + fiat_np521_addcarryx_u32(&x1953, &x1954, x1952, x1851, x1918); + fiat_np521_addcarryx_u32(&x1955, &x1956, x1954, x1853, x1920); + fiat_np521_addcarryx_u32(&x1957, &x1958, x1956, x1855, x1922); + fiat_np521_addcarryx_u32(&x1959, &x1960, x1958, x1857, x1924); + fiat_np521_addcarryx_u32(&x1961, &x1962, x1960, x1859, x1926); + fiat_np521_addcarryx_u32(&x1963, &x1964, x1962, x1861, x1928); + fiat_np521_mulx_u32(&x1965, &x1966, x1929, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1967, &x1968, x1965, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1969, &x1970, x1965, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1971, &x1972, x1965, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1973, &x1974, x1965, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1975, &x1976, x1965, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1977, &x1978, x1965, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1979, &x1980, x1965, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1981, &x1982, x1965, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1983, &x1984, x1965, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1985, &x1986, x1965, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1987, &x1988, x1965, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1989, &x1990, x1965, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1991, &x1992, x1965, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1993, &x1994, x1965, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1995, &x1996, x1965, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1997, &x1998, x1965, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1999, &x2000, x1965, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x2001, &x2002, 0x0, x2000, x1997); + fiat_np521_addcarryx_u32(&x2003, &x2004, x2002, x1998, x1995); + fiat_np521_addcarryx_u32(&x2005, &x2006, x2004, x1996, x1993); + fiat_np521_addcarryx_u32(&x2007, &x2008, x2006, x1994, x1991); + fiat_np521_addcarryx_u32(&x2009, &x2010, x2008, x1992, x1989); + fiat_np521_addcarryx_u32(&x2011, &x2012, x2010, x1990, x1987); + fiat_np521_addcarryx_u32(&x2013, &x2014, x2012, x1988, x1985); + fiat_np521_addcarryx_u32(&x2015, &x2016, x2014, x1986, x1983); + fiat_np521_addcarryx_u32(&x2017, &x2018, x2016, x1984, x1981); + fiat_np521_addcarryx_u32(&x2019, &x2020, x2018, x1982, x1979); + fiat_np521_addcarryx_u32(&x2021, &x2022, x2020, x1980, x1977); + fiat_np521_addcarryx_u32(&x2023, &x2024, x2022, x1978, x1975); + fiat_np521_addcarryx_u32(&x2025, &x2026, x2024, x1976, x1973); + fiat_np521_addcarryx_u32(&x2027, &x2028, x2026, x1974, x1971); + fiat_np521_addcarryx_u32(&x2029, &x2030, x2028, x1972, x1969); + fiat_np521_addcarryx_u32(&x2031, &x2032, x2030, x1970, x1967); + x2033 = (x2032 + x1968); + fiat_np521_addcarryx_u32(&x2034, &x2035, 0x0, x1929, x1999); + fiat_np521_addcarryx_u32(&x2036, &x2037, x2035, x1931, x2001); + fiat_np521_addcarryx_u32(&x2038, &x2039, x2037, x1933, x2003); + fiat_np521_addcarryx_u32(&x2040, &x2041, x2039, x1935, x2005); + fiat_np521_addcarryx_u32(&x2042, &x2043, x2041, x1937, x2007); + fiat_np521_addcarryx_u32(&x2044, &x2045, x2043, x1939, x2009); + fiat_np521_addcarryx_u32(&x2046, &x2047, x2045, x1941, x2011); + fiat_np521_addcarryx_u32(&x2048, &x2049, x2047, x1943, x2013); + fiat_np521_addcarryx_u32(&x2050, &x2051, x2049, x1945, x2015); + fiat_np521_addcarryx_u32(&x2052, &x2053, x2051, x1947, x2017); + fiat_np521_addcarryx_u32(&x2054, &x2055, x2053, x1949, x2019); + fiat_np521_addcarryx_u32(&x2056, &x2057, x2055, x1951, x2021); + fiat_np521_addcarryx_u32(&x2058, &x2059, x2057, x1953, x2023); + fiat_np521_addcarryx_u32(&x2060, &x2061, x2059, x1955, x2025); + fiat_np521_addcarryx_u32(&x2062, &x2063, x2061, x1957, x2027); + fiat_np521_addcarryx_u32(&x2064, &x2065, x2063, x1959, x2029); + fiat_np521_addcarryx_u32(&x2066, &x2067, x2065, x1961, x2031); + fiat_np521_addcarryx_u32(&x2068, &x2069, x2067, x1963, x2033); + x2070 = ((uint32_t)x2069 + x1964); + fiat_np521_mulx_u32(&x2071, &x2072, x10, (arg2[16])); + fiat_np521_mulx_u32(&x2073, &x2074, x10, (arg2[15])); + fiat_np521_mulx_u32(&x2075, &x2076, x10, (arg2[14])); + fiat_np521_mulx_u32(&x2077, &x2078, x10, (arg2[13])); + fiat_np521_mulx_u32(&x2079, &x2080, x10, (arg2[12])); + fiat_np521_mulx_u32(&x2081, &x2082, x10, (arg2[11])); + fiat_np521_mulx_u32(&x2083, &x2084, x10, (arg2[10])); + fiat_np521_mulx_u32(&x2085, &x2086, x10, (arg2[9])); + fiat_np521_mulx_u32(&x2087, &x2088, x10, (arg2[8])); + fiat_np521_mulx_u32(&x2089, &x2090, x10, (arg2[7])); + fiat_np521_mulx_u32(&x2091, &x2092, x10, (arg2[6])); + fiat_np521_mulx_u32(&x2093, &x2094, x10, (arg2[5])); + fiat_np521_mulx_u32(&x2095, &x2096, x10, (arg2[4])); + fiat_np521_mulx_u32(&x2097, &x2098, x10, (arg2[3])); + fiat_np521_mulx_u32(&x2099, &x2100, x10, (arg2[2])); + fiat_np521_mulx_u32(&x2101, &x2102, x10, (arg2[1])); + fiat_np521_mulx_u32(&x2103, &x2104, x10, (arg2[0])); + fiat_np521_addcarryx_u32(&x2105, &x2106, 0x0, x2104, x2101); + fiat_np521_addcarryx_u32(&x2107, &x2108, x2106, x2102, x2099); + fiat_np521_addcarryx_u32(&x2109, &x2110, x2108, x2100, x2097); + fiat_np521_addcarryx_u32(&x2111, &x2112, x2110, x2098, x2095); + fiat_np521_addcarryx_u32(&x2113, &x2114, x2112, x2096, x2093); + fiat_np521_addcarryx_u32(&x2115, &x2116, x2114, x2094, x2091); + fiat_np521_addcarryx_u32(&x2117, &x2118, x2116, x2092, x2089); + fiat_np521_addcarryx_u32(&x2119, &x2120, x2118, x2090, x2087); + fiat_np521_addcarryx_u32(&x2121, &x2122, x2120, x2088, x2085); + fiat_np521_addcarryx_u32(&x2123, &x2124, x2122, x2086, x2083); + fiat_np521_addcarryx_u32(&x2125, &x2126, x2124, x2084, x2081); + fiat_np521_addcarryx_u32(&x2127, &x2128, x2126, x2082, x2079); + fiat_np521_addcarryx_u32(&x2129, &x2130, x2128, x2080, x2077); + fiat_np521_addcarryx_u32(&x2131, &x2132, x2130, x2078, x2075); + fiat_np521_addcarryx_u32(&x2133, &x2134, x2132, x2076, x2073); + fiat_np521_addcarryx_u32(&x2135, &x2136, x2134, x2074, x2071); + x2137 = (x2136 + x2072); + fiat_np521_addcarryx_u32(&x2138, &x2139, 0x0, x2036, x2103); + fiat_np521_addcarryx_u32(&x2140, &x2141, x2139, x2038, x2105); + fiat_np521_addcarryx_u32(&x2142, &x2143, x2141, x2040, x2107); + fiat_np521_addcarryx_u32(&x2144, &x2145, x2143, x2042, x2109); + fiat_np521_addcarryx_u32(&x2146, &x2147, x2145, x2044, x2111); + fiat_np521_addcarryx_u32(&x2148, &x2149, x2147, x2046, x2113); + fiat_np521_addcarryx_u32(&x2150, &x2151, x2149, x2048, x2115); + fiat_np521_addcarryx_u32(&x2152, &x2153, x2151, x2050, x2117); + fiat_np521_addcarryx_u32(&x2154, &x2155, x2153, x2052, x2119); + fiat_np521_addcarryx_u32(&x2156, &x2157, x2155, x2054, x2121); + fiat_np521_addcarryx_u32(&x2158, &x2159, x2157, x2056, x2123); + fiat_np521_addcarryx_u32(&x2160, &x2161, x2159, x2058, x2125); + fiat_np521_addcarryx_u32(&x2162, &x2163, x2161, x2060, x2127); + fiat_np521_addcarryx_u32(&x2164, &x2165, x2163, x2062, x2129); + fiat_np521_addcarryx_u32(&x2166, &x2167, x2165, x2064, x2131); + fiat_np521_addcarryx_u32(&x2168, &x2169, x2167, x2066, x2133); + fiat_np521_addcarryx_u32(&x2170, &x2171, x2169, x2068, x2135); + fiat_np521_addcarryx_u32(&x2172, &x2173, x2171, x2070, x2137); + fiat_np521_mulx_u32(&x2174, &x2175, x2138, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x2176, &x2177, x2174, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x2178, &x2179, x2174, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2180, &x2181, x2174, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2182, &x2183, x2174, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2184, &x2185, x2174, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2186, &x2187, x2174, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2188, &x2189, x2174, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2190, &x2191, x2174, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2192, &x2193, x2174, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x2194, &x2195, x2174, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x2196, &x2197, x2174, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x2198, &x2199, x2174, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x2200, &x2201, x2174, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x2202, &x2203, x2174, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x2204, &x2205, x2174, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x2206, &x2207, x2174, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x2208, &x2209, x2174, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x2210, &x2211, 0x0, x2209, x2206); + fiat_np521_addcarryx_u32(&x2212, &x2213, x2211, x2207, x2204); + fiat_np521_addcarryx_u32(&x2214, &x2215, x2213, x2205, x2202); + fiat_np521_addcarryx_u32(&x2216, &x2217, x2215, x2203, x2200); + fiat_np521_addcarryx_u32(&x2218, &x2219, x2217, x2201, x2198); + fiat_np521_addcarryx_u32(&x2220, &x2221, x2219, x2199, x2196); + fiat_np521_addcarryx_u32(&x2222, &x2223, x2221, x2197, x2194); + fiat_np521_addcarryx_u32(&x2224, &x2225, x2223, x2195, x2192); + fiat_np521_addcarryx_u32(&x2226, &x2227, x2225, x2193, x2190); + fiat_np521_addcarryx_u32(&x2228, &x2229, x2227, x2191, x2188); + fiat_np521_addcarryx_u32(&x2230, &x2231, x2229, x2189, x2186); + fiat_np521_addcarryx_u32(&x2232, &x2233, x2231, x2187, x2184); + fiat_np521_addcarryx_u32(&x2234, &x2235, x2233, x2185, x2182); + fiat_np521_addcarryx_u32(&x2236, &x2237, x2235, x2183, x2180); + fiat_np521_addcarryx_u32(&x2238, &x2239, x2237, x2181, x2178); + fiat_np521_addcarryx_u32(&x2240, &x2241, x2239, x2179, x2176); + x2242 = (x2241 + x2177); + fiat_np521_addcarryx_u32(&x2243, &x2244, 0x0, x2138, x2208); + fiat_np521_addcarryx_u32(&x2245, &x2246, x2244, x2140, x2210); + fiat_np521_addcarryx_u32(&x2247, &x2248, x2246, x2142, x2212); + fiat_np521_addcarryx_u32(&x2249, &x2250, x2248, x2144, x2214); + fiat_np521_addcarryx_u32(&x2251, &x2252, x2250, x2146, x2216); + fiat_np521_addcarryx_u32(&x2253, &x2254, x2252, x2148, x2218); + fiat_np521_addcarryx_u32(&x2255, &x2256, x2254, x2150, x2220); + fiat_np521_addcarryx_u32(&x2257, &x2258, x2256, x2152, x2222); + fiat_np521_addcarryx_u32(&x2259, &x2260, x2258, x2154, x2224); + fiat_np521_addcarryx_u32(&x2261, &x2262, x2260, x2156, x2226); + fiat_np521_addcarryx_u32(&x2263, &x2264, x2262, x2158, x2228); + fiat_np521_addcarryx_u32(&x2265, &x2266, x2264, x2160, x2230); + fiat_np521_addcarryx_u32(&x2267, &x2268, x2266, x2162, x2232); + fiat_np521_addcarryx_u32(&x2269, &x2270, x2268, x2164, x2234); + fiat_np521_addcarryx_u32(&x2271, &x2272, x2270, x2166, x2236); + fiat_np521_addcarryx_u32(&x2273, &x2274, x2272, x2168, x2238); + fiat_np521_addcarryx_u32(&x2275, &x2276, x2274, x2170, x2240); + fiat_np521_addcarryx_u32(&x2277, &x2278, x2276, x2172, x2242); + x2279 = ((uint32_t)x2278 + x2173); + fiat_np521_mulx_u32(&x2280, &x2281, x11, (arg2[16])); + fiat_np521_mulx_u32(&x2282, &x2283, x11, (arg2[15])); + fiat_np521_mulx_u32(&x2284, &x2285, x11, (arg2[14])); + fiat_np521_mulx_u32(&x2286, &x2287, x11, (arg2[13])); + fiat_np521_mulx_u32(&x2288, &x2289, x11, (arg2[12])); + fiat_np521_mulx_u32(&x2290, &x2291, x11, (arg2[11])); + fiat_np521_mulx_u32(&x2292, &x2293, x11, (arg2[10])); + fiat_np521_mulx_u32(&x2294, &x2295, x11, (arg2[9])); + fiat_np521_mulx_u32(&x2296, &x2297, x11, (arg2[8])); + fiat_np521_mulx_u32(&x2298, &x2299, x11, (arg2[7])); + fiat_np521_mulx_u32(&x2300, &x2301, x11, (arg2[6])); + fiat_np521_mulx_u32(&x2302, &x2303, x11, (arg2[5])); + fiat_np521_mulx_u32(&x2304, &x2305, x11, (arg2[4])); + fiat_np521_mulx_u32(&x2306, &x2307, x11, (arg2[3])); + fiat_np521_mulx_u32(&x2308, &x2309, x11, (arg2[2])); + fiat_np521_mulx_u32(&x2310, &x2311, x11, (arg2[1])); + fiat_np521_mulx_u32(&x2312, &x2313, x11, (arg2[0])); + fiat_np521_addcarryx_u32(&x2314, &x2315, 0x0, x2313, x2310); + fiat_np521_addcarryx_u32(&x2316, &x2317, x2315, x2311, x2308); + fiat_np521_addcarryx_u32(&x2318, &x2319, x2317, x2309, x2306); + fiat_np521_addcarryx_u32(&x2320, &x2321, x2319, x2307, x2304); + fiat_np521_addcarryx_u32(&x2322, &x2323, x2321, x2305, x2302); + fiat_np521_addcarryx_u32(&x2324, &x2325, x2323, x2303, x2300); + fiat_np521_addcarryx_u32(&x2326, &x2327, x2325, x2301, x2298); + fiat_np521_addcarryx_u32(&x2328, &x2329, x2327, x2299, x2296); + fiat_np521_addcarryx_u32(&x2330, &x2331, x2329, x2297, x2294); + fiat_np521_addcarryx_u32(&x2332, &x2333, x2331, x2295, x2292); + fiat_np521_addcarryx_u32(&x2334, &x2335, x2333, x2293, x2290); + fiat_np521_addcarryx_u32(&x2336, &x2337, x2335, x2291, x2288); + fiat_np521_addcarryx_u32(&x2338, &x2339, x2337, x2289, x2286); + fiat_np521_addcarryx_u32(&x2340, &x2341, x2339, x2287, x2284); + fiat_np521_addcarryx_u32(&x2342, &x2343, x2341, x2285, x2282); + fiat_np521_addcarryx_u32(&x2344, &x2345, x2343, x2283, x2280); + x2346 = (x2345 + x2281); + fiat_np521_addcarryx_u32(&x2347, &x2348, 0x0, x2245, x2312); + fiat_np521_addcarryx_u32(&x2349, &x2350, x2348, x2247, x2314); + fiat_np521_addcarryx_u32(&x2351, &x2352, x2350, x2249, x2316); + fiat_np521_addcarryx_u32(&x2353, &x2354, x2352, x2251, x2318); + fiat_np521_addcarryx_u32(&x2355, &x2356, x2354, x2253, x2320); + fiat_np521_addcarryx_u32(&x2357, &x2358, x2356, x2255, x2322); + fiat_np521_addcarryx_u32(&x2359, &x2360, x2358, x2257, x2324); + fiat_np521_addcarryx_u32(&x2361, &x2362, x2360, x2259, x2326); + fiat_np521_addcarryx_u32(&x2363, &x2364, x2362, x2261, x2328); + fiat_np521_addcarryx_u32(&x2365, &x2366, x2364, x2263, x2330); + fiat_np521_addcarryx_u32(&x2367, &x2368, x2366, x2265, x2332); + fiat_np521_addcarryx_u32(&x2369, &x2370, x2368, x2267, x2334); + fiat_np521_addcarryx_u32(&x2371, &x2372, x2370, x2269, x2336); + fiat_np521_addcarryx_u32(&x2373, &x2374, x2372, x2271, x2338); + fiat_np521_addcarryx_u32(&x2375, &x2376, x2374, x2273, x2340); + fiat_np521_addcarryx_u32(&x2377, &x2378, x2376, x2275, x2342); + fiat_np521_addcarryx_u32(&x2379, &x2380, x2378, x2277, x2344); + fiat_np521_addcarryx_u32(&x2381, &x2382, x2380, x2279, x2346); + fiat_np521_mulx_u32(&x2383, &x2384, x2347, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x2385, &x2386, x2383, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x2387, &x2388, x2383, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2389, &x2390, x2383, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2391, &x2392, x2383, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2393, &x2394, x2383, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2395, &x2396, x2383, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2397, &x2398, x2383, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2399, &x2400, x2383, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2401, &x2402, x2383, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x2403, &x2404, x2383, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x2405, &x2406, x2383, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x2407, &x2408, x2383, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x2409, &x2410, x2383, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x2411, &x2412, x2383, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x2413, &x2414, x2383, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x2415, &x2416, x2383, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x2417, &x2418, x2383, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x2419, &x2420, 0x0, x2418, x2415); + fiat_np521_addcarryx_u32(&x2421, &x2422, x2420, x2416, x2413); + fiat_np521_addcarryx_u32(&x2423, &x2424, x2422, x2414, x2411); + fiat_np521_addcarryx_u32(&x2425, &x2426, x2424, x2412, x2409); + fiat_np521_addcarryx_u32(&x2427, &x2428, x2426, x2410, x2407); + fiat_np521_addcarryx_u32(&x2429, &x2430, x2428, x2408, x2405); + fiat_np521_addcarryx_u32(&x2431, &x2432, x2430, x2406, x2403); + fiat_np521_addcarryx_u32(&x2433, &x2434, x2432, x2404, x2401); + fiat_np521_addcarryx_u32(&x2435, &x2436, x2434, x2402, x2399); + fiat_np521_addcarryx_u32(&x2437, &x2438, x2436, x2400, x2397); + fiat_np521_addcarryx_u32(&x2439, &x2440, x2438, x2398, x2395); + fiat_np521_addcarryx_u32(&x2441, &x2442, x2440, x2396, x2393); + fiat_np521_addcarryx_u32(&x2443, &x2444, x2442, x2394, x2391); + fiat_np521_addcarryx_u32(&x2445, &x2446, x2444, x2392, x2389); + fiat_np521_addcarryx_u32(&x2447, &x2448, x2446, x2390, x2387); + fiat_np521_addcarryx_u32(&x2449, &x2450, x2448, x2388, x2385); + x2451 = (x2450 + x2386); + fiat_np521_addcarryx_u32(&x2452, &x2453, 0x0, x2347, x2417); + fiat_np521_addcarryx_u32(&x2454, &x2455, x2453, x2349, x2419); + fiat_np521_addcarryx_u32(&x2456, &x2457, x2455, x2351, x2421); + fiat_np521_addcarryx_u32(&x2458, &x2459, x2457, x2353, x2423); + fiat_np521_addcarryx_u32(&x2460, &x2461, x2459, x2355, x2425); + fiat_np521_addcarryx_u32(&x2462, &x2463, x2461, x2357, x2427); + fiat_np521_addcarryx_u32(&x2464, &x2465, x2463, x2359, x2429); + fiat_np521_addcarryx_u32(&x2466, &x2467, x2465, x2361, x2431); + fiat_np521_addcarryx_u32(&x2468, &x2469, x2467, x2363, x2433); + fiat_np521_addcarryx_u32(&x2470, &x2471, x2469, x2365, x2435); + fiat_np521_addcarryx_u32(&x2472, &x2473, x2471, x2367, x2437); + fiat_np521_addcarryx_u32(&x2474, &x2475, x2473, x2369, x2439); + fiat_np521_addcarryx_u32(&x2476, &x2477, x2475, x2371, x2441); + fiat_np521_addcarryx_u32(&x2478, &x2479, x2477, x2373, x2443); + fiat_np521_addcarryx_u32(&x2480, &x2481, x2479, x2375, x2445); + fiat_np521_addcarryx_u32(&x2482, &x2483, x2481, x2377, x2447); + fiat_np521_addcarryx_u32(&x2484, &x2485, x2483, x2379, x2449); + fiat_np521_addcarryx_u32(&x2486, &x2487, x2485, x2381, x2451); + x2488 = ((uint32_t)x2487 + x2382); + fiat_np521_mulx_u32(&x2489, &x2490, x12, (arg2[16])); + fiat_np521_mulx_u32(&x2491, &x2492, x12, (arg2[15])); + fiat_np521_mulx_u32(&x2493, &x2494, x12, (arg2[14])); + fiat_np521_mulx_u32(&x2495, &x2496, x12, (arg2[13])); + fiat_np521_mulx_u32(&x2497, &x2498, x12, (arg2[12])); + fiat_np521_mulx_u32(&x2499, &x2500, x12, (arg2[11])); + fiat_np521_mulx_u32(&x2501, &x2502, x12, (arg2[10])); + fiat_np521_mulx_u32(&x2503, &x2504, x12, (arg2[9])); + fiat_np521_mulx_u32(&x2505, &x2506, x12, (arg2[8])); + fiat_np521_mulx_u32(&x2507, &x2508, x12, (arg2[7])); + fiat_np521_mulx_u32(&x2509, &x2510, x12, (arg2[6])); + fiat_np521_mulx_u32(&x2511, &x2512, x12, (arg2[5])); + fiat_np521_mulx_u32(&x2513, &x2514, x12, (arg2[4])); + fiat_np521_mulx_u32(&x2515, &x2516, x12, (arg2[3])); + fiat_np521_mulx_u32(&x2517, &x2518, x12, (arg2[2])); + fiat_np521_mulx_u32(&x2519, &x2520, x12, (arg2[1])); + fiat_np521_mulx_u32(&x2521, &x2522, x12, (arg2[0])); + fiat_np521_addcarryx_u32(&x2523, &x2524, 0x0, x2522, x2519); + fiat_np521_addcarryx_u32(&x2525, &x2526, x2524, x2520, x2517); + fiat_np521_addcarryx_u32(&x2527, &x2528, x2526, x2518, x2515); + fiat_np521_addcarryx_u32(&x2529, &x2530, x2528, x2516, x2513); + fiat_np521_addcarryx_u32(&x2531, &x2532, x2530, x2514, x2511); + fiat_np521_addcarryx_u32(&x2533, &x2534, x2532, x2512, x2509); + fiat_np521_addcarryx_u32(&x2535, &x2536, x2534, x2510, x2507); + fiat_np521_addcarryx_u32(&x2537, &x2538, x2536, x2508, x2505); + fiat_np521_addcarryx_u32(&x2539, &x2540, x2538, x2506, x2503); + fiat_np521_addcarryx_u32(&x2541, &x2542, x2540, x2504, x2501); + fiat_np521_addcarryx_u32(&x2543, &x2544, x2542, x2502, x2499); + fiat_np521_addcarryx_u32(&x2545, &x2546, x2544, x2500, x2497); + fiat_np521_addcarryx_u32(&x2547, &x2548, x2546, x2498, x2495); + fiat_np521_addcarryx_u32(&x2549, &x2550, x2548, x2496, x2493); + fiat_np521_addcarryx_u32(&x2551, &x2552, x2550, x2494, x2491); + fiat_np521_addcarryx_u32(&x2553, &x2554, x2552, x2492, x2489); + x2555 = (x2554 + x2490); + fiat_np521_addcarryx_u32(&x2556, &x2557, 0x0, x2454, x2521); + fiat_np521_addcarryx_u32(&x2558, &x2559, x2557, x2456, x2523); + fiat_np521_addcarryx_u32(&x2560, &x2561, x2559, x2458, x2525); + fiat_np521_addcarryx_u32(&x2562, &x2563, x2561, x2460, x2527); + fiat_np521_addcarryx_u32(&x2564, &x2565, x2563, x2462, x2529); + fiat_np521_addcarryx_u32(&x2566, &x2567, x2565, x2464, x2531); + fiat_np521_addcarryx_u32(&x2568, &x2569, x2567, x2466, x2533); + fiat_np521_addcarryx_u32(&x2570, &x2571, x2569, x2468, x2535); + fiat_np521_addcarryx_u32(&x2572, &x2573, x2571, x2470, x2537); + fiat_np521_addcarryx_u32(&x2574, &x2575, x2573, x2472, x2539); + fiat_np521_addcarryx_u32(&x2576, &x2577, x2575, x2474, x2541); + fiat_np521_addcarryx_u32(&x2578, &x2579, x2577, x2476, x2543); + fiat_np521_addcarryx_u32(&x2580, &x2581, x2579, x2478, x2545); + fiat_np521_addcarryx_u32(&x2582, &x2583, x2581, x2480, x2547); + fiat_np521_addcarryx_u32(&x2584, &x2585, x2583, x2482, x2549); + fiat_np521_addcarryx_u32(&x2586, &x2587, x2585, x2484, x2551); + fiat_np521_addcarryx_u32(&x2588, &x2589, x2587, x2486, x2553); + fiat_np521_addcarryx_u32(&x2590, &x2591, x2589, x2488, x2555); + fiat_np521_mulx_u32(&x2592, &x2593, x2556, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x2594, &x2595, x2592, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x2596, &x2597, x2592, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2598, &x2599, x2592, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2600, &x2601, x2592, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2602, &x2603, x2592, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2604, &x2605, x2592, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2606, &x2607, x2592, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2608, &x2609, x2592, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2610, &x2611, x2592, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x2612, &x2613, x2592, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x2614, &x2615, x2592, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x2616, &x2617, x2592, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x2618, &x2619, x2592, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x2620, &x2621, x2592, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x2622, &x2623, x2592, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x2624, &x2625, x2592, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x2626, &x2627, x2592, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x2628, &x2629, 0x0, x2627, x2624); + fiat_np521_addcarryx_u32(&x2630, &x2631, x2629, x2625, x2622); + fiat_np521_addcarryx_u32(&x2632, &x2633, x2631, x2623, x2620); + fiat_np521_addcarryx_u32(&x2634, &x2635, x2633, x2621, x2618); + fiat_np521_addcarryx_u32(&x2636, &x2637, x2635, x2619, x2616); + fiat_np521_addcarryx_u32(&x2638, &x2639, x2637, x2617, x2614); + fiat_np521_addcarryx_u32(&x2640, &x2641, x2639, x2615, x2612); + fiat_np521_addcarryx_u32(&x2642, &x2643, x2641, x2613, x2610); + fiat_np521_addcarryx_u32(&x2644, &x2645, x2643, x2611, x2608); + fiat_np521_addcarryx_u32(&x2646, &x2647, x2645, x2609, x2606); + fiat_np521_addcarryx_u32(&x2648, &x2649, x2647, x2607, x2604); + fiat_np521_addcarryx_u32(&x2650, &x2651, x2649, x2605, x2602); + fiat_np521_addcarryx_u32(&x2652, &x2653, x2651, x2603, x2600); + fiat_np521_addcarryx_u32(&x2654, &x2655, x2653, x2601, x2598); + fiat_np521_addcarryx_u32(&x2656, &x2657, x2655, x2599, x2596); + fiat_np521_addcarryx_u32(&x2658, &x2659, x2657, x2597, x2594); + x2660 = (x2659 + x2595); + fiat_np521_addcarryx_u32(&x2661, &x2662, 0x0, x2556, x2626); + fiat_np521_addcarryx_u32(&x2663, &x2664, x2662, x2558, x2628); + fiat_np521_addcarryx_u32(&x2665, &x2666, x2664, x2560, x2630); + fiat_np521_addcarryx_u32(&x2667, &x2668, x2666, x2562, x2632); + fiat_np521_addcarryx_u32(&x2669, &x2670, x2668, x2564, x2634); + fiat_np521_addcarryx_u32(&x2671, &x2672, x2670, x2566, x2636); + fiat_np521_addcarryx_u32(&x2673, &x2674, x2672, x2568, x2638); + fiat_np521_addcarryx_u32(&x2675, &x2676, x2674, x2570, x2640); + fiat_np521_addcarryx_u32(&x2677, &x2678, x2676, x2572, x2642); + fiat_np521_addcarryx_u32(&x2679, &x2680, x2678, x2574, x2644); + fiat_np521_addcarryx_u32(&x2681, &x2682, x2680, x2576, x2646); + fiat_np521_addcarryx_u32(&x2683, &x2684, x2682, x2578, x2648); + fiat_np521_addcarryx_u32(&x2685, &x2686, x2684, x2580, x2650); + fiat_np521_addcarryx_u32(&x2687, &x2688, x2686, x2582, x2652); + fiat_np521_addcarryx_u32(&x2689, &x2690, x2688, x2584, x2654); + fiat_np521_addcarryx_u32(&x2691, &x2692, x2690, x2586, x2656); + fiat_np521_addcarryx_u32(&x2693, &x2694, x2692, x2588, x2658); + fiat_np521_addcarryx_u32(&x2695, &x2696, x2694, x2590, x2660); + x2697 = ((uint32_t)x2696 + x2591); + fiat_np521_mulx_u32(&x2698, &x2699, x13, (arg2[16])); + fiat_np521_mulx_u32(&x2700, &x2701, x13, (arg2[15])); + fiat_np521_mulx_u32(&x2702, &x2703, x13, (arg2[14])); + fiat_np521_mulx_u32(&x2704, &x2705, x13, (arg2[13])); + fiat_np521_mulx_u32(&x2706, &x2707, x13, (arg2[12])); + fiat_np521_mulx_u32(&x2708, &x2709, x13, (arg2[11])); + fiat_np521_mulx_u32(&x2710, &x2711, x13, (arg2[10])); + fiat_np521_mulx_u32(&x2712, &x2713, x13, (arg2[9])); + fiat_np521_mulx_u32(&x2714, &x2715, x13, (arg2[8])); + fiat_np521_mulx_u32(&x2716, &x2717, x13, (arg2[7])); + fiat_np521_mulx_u32(&x2718, &x2719, x13, (arg2[6])); + fiat_np521_mulx_u32(&x2720, &x2721, x13, (arg2[5])); + fiat_np521_mulx_u32(&x2722, &x2723, x13, (arg2[4])); + fiat_np521_mulx_u32(&x2724, &x2725, x13, (arg2[3])); + fiat_np521_mulx_u32(&x2726, &x2727, x13, (arg2[2])); + fiat_np521_mulx_u32(&x2728, &x2729, x13, (arg2[1])); + fiat_np521_mulx_u32(&x2730, &x2731, x13, (arg2[0])); + fiat_np521_addcarryx_u32(&x2732, &x2733, 0x0, x2731, x2728); + fiat_np521_addcarryx_u32(&x2734, &x2735, x2733, x2729, x2726); + fiat_np521_addcarryx_u32(&x2736, &x2737, x2735, x2727, x2724); + fiat_np521_addcarryx_u32(&x2738, &x2739, x2737, x2725, x2722); + fiat_np521_addcarryx_u32(&x2740, &x2741, x2739, x2723, x2720); + fiat_np521_addcarryx_u32(&x2742, &x2743, x2741, x2721, x2718); + fiat_np521_addcarryx_u32(&x2744, &x2745, x2743, x2719, x2716); + fiat_np521_addcarryx_u32(&x2746, &x2747, x2745, x2717, x2714); + fiat_np521_addcarryx_u32(&x2748, &x2749, x2747, x2715, x2712); + fiat_np521_addcarryx_u32(&x2750, &x2751, x2749, x2713, x2710); + fiat_np521_addcarryx_u32(&x2752, &x2753, x2751, x2711, x2708); + fiat_np521_addcarryx_u32(&x2754, &x2755, x2753, x2709, x2706); + fiat_np521_addcarryx_u32(&x2756, &x2757, x2755, x2707, x2704); + fiat_np521_addcarryx_u32(&x2758, &x2759, x2757, x2705, x2702); + fiat_np521_addcarryx_u32(&x2760, &x2761, x2759, x2703, x2700); + fiat_np521_addcarryx_u32(&x2762, &x2763, x2761, x2701, x2698); + x2764 = (x2763 + x2699); + fiat_np521_addcarryx_u32(&x2765, &x2766, 0x0, x2663, x2730); + fiat_np521_addcarryx_u32(&x2767, &x2768, x2766, x2665, x2732); + fiat_np521_addcarryx_u32(&x2769, &x2770, x2768, x2667, x2734); + fiat_np521_addcarryx_u32(&x2771, &x2772, x2770, x2669, x2736); + fiat_np521_addcarryx_u32(&x2773, &x2774, x2772, x2671, x2738); + fiat_np521_addcarryx_u32(&x2775, &x2776, x2774, x2673, x2740); + fiat_np521_addcarryx_u32(&x2777, &x2778, x2776, x2675, x2742); + fiat_np521_addcarryx_u32(&x2779, &x2780, x2778, x2677, x2744); + fiat_np521_addcarryx_u32(&x2781, &x2782, x2780, x2679, x2746); + fiat_np521_addcarryx_u32(&x2783, &x2784, x2782, x2681, x2748); + fiat_np521_addcarryx_u32(&x2785, &x2786, x2784, x2683, x2750); + fiat_np521_addcarryx_u32(&x2787, &x2788, x2786, x2685, x2752); + fiat_np521_addcarryx_u32(&x2789, &x2790, x2788, x2687, x2754); + fiat_np521_addcarryx_u32(&x2791, &x2792, x2790, x2689, x2756); + fiat_np521_addcarryx_u32(&x2793, &x2794, x2792, x2691, x2758); + fiat_np521_addcarryx_u32(&x2795, &x2796, x2794, x2693, x2760); + fiat_np521_addcarryx_u32(&x2797, &x2798, x2796, x2695, x2762); + fiat_np521_addcarryx_u32(&x2799, &x2800, x2798, x2697, x2764); + fiat_np521_mulx_u32(&x2801, &x2802, x2765, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x2803, &x2804, x2801, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x2805, &x2806, x2801, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2807, &x2808, x2801, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2809, &x2810, x2801, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2811, &x2812, x2801, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2813, &x2814, x2801, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2815, &x2816, x2801, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2817, &x2818, x2801, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2819, &x2820, x2801, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x2821, &x2822, x2801, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x2823, &x2824, x2801, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x2825, &x2826, x2801, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x2827, &x2828, x2801, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x2829, &x2830, x2801, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x2831, &x2832, x2801, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x2833, &x2834, x2801, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x2835, &x2836, x2801, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x2837, &x2838, 0x0, x2836, x2833); + fiat_np521_addcarryx_u32(&x2839, &x2840, x2838, x2834, x2831); + fiat_np521_addcarryx_u32(&x2841, &x2842, x2840, x2832, x2829); + fiat_np521_addcarryx_u32(&x2843, &x2844, x2842, x2830, x2827); + fiat_np521_addcarryx_u32(&x2845, &x2846, x2844, x2828, x2825); + fiat_np521_addcarryx_u32(&x2847, &x2848, x2846, x2826, x2823); + fiat_np521_addcarryx_u32(&x2849, &x2850, x2848, x2824, x2821); + fiat_np521_addcarryx_u32(&x2851, &x2852, x2850, x2822, x2819); + fiat_np521_addcarryx_u32(&x2853, &x2854, x2852, x2820, x2817); + fiat_np521_addcarryx_u32(&x2855, &x2856, x2854, x2818, x2815); + fiat_np521_addcarryx_u32(&x2857, &x2858, x2856, x2816, x2813); + fiat_np521_addcarryx_u32(&x2859, &x2860, x2858, x2814, x2811); + fiat_np521_addcarryx_u32(&x2861, &x2862, x2860, x2812, x2809); + fiat_np521_addcarryx_u32(&x2863, &x2864, x2862, x2810, x2807); + fiat_np521_addcarryx_u32(&x2865, &x2866, x2864, x2808, x2805); + fiat_np521_addcarryx_u32(&x2867, &x2868, x2866, x2806, x2803); + x2869 = (x2868 + x2804); + fiat_np521_addcarryx_u32(&x2870, &x2871, 0x0, x2765, x2835); + fiat_np521_addcarryx_u32(&x2872, &x2873, x2871, x2767, x2837); + fiat_np521_addcarryx_u32(&x2874, &x2875, x2873, x2769, x2839); + fiat_np521_addcarryx_u32(&x2876, &x2877, x2875, x2771, x2841); + fiat_np521_addcarryx_u32(&x2878, &x2879, x2877, x2773, x2843); + fiat_np521_addcarryx_u32(&x2880, &x2881, x2879, x2775, x2845); + fiat_np521_addcarryx_u32(&x2882, &x2883, x2881, x2777, x2847); + fiat_np521_addcarryx_u32(&x2884, &x2885, x2883, x2779, x2849); + fiat_np521_addcarryx_u32(&x2886, &x2887, x2885, x2781, x2851); + fiat_np521_addcarryx_u32(&x2888, &x2889, x2887, x2783, x2853); + fiat_np521_addcarryx_u32(&x2890, &x2891, x2889, x2785, x2855); + fiat_np521_addcarryx_u32(&x2892, &x2893, x2891, x2787, x2857); + fiat_np521_addcarryx_u32(&x2894, &x2895, x2893, x2789, x2859); + fiat_np521_addcarryx_u32(&x2896, &x2897, x2895, x2791, x2861); + fiat_np521_addcarryx_u32(&x2898, &x2899, x2897, x2793, x2863); + fiat_np521_addcarryx_u32(&x2900, &x2901, x2899, x2795, x2865); + fiat_np521_addcarryx_u32(&x2902, &x2903, x2901, x2797, x2867); + fiat_np521_addcarryx_u32(&x2904, &x2905, x2903, x2799, x2869); + x2906 = ((uint32_t)x2905 + x2800); + fiat_np521_mulx_u32(&x2907, &x2908, x14, (arg2[16])); + fiat_np521_mulx_u32(&x2909, &x2910, x14, (arg2[15])); + fiat_np521_mulx_u32(&x2911, &x2912, x14, (arg2[14])); + fiat_np521_mulx_u32(&x2913, &x2914, x14, (arg2[13])); + fiat_np521_mulx_u32(&x2915, &x2916, x14, (arg2[12])); + fiat_np521_mulx_u32(&x2917, &x2918, x14, (arg2[11])); + fiat_np521_mulx_u32(&x2919, &x2920, x14, (arg2[10])); + fiat_np521_mulx_u32(&x2921, &x2922, x14, (arg2[9])); + fiat_np521_mulx_u32(&x2923, &x2924, x14, (arg2[8])); + fiat_np521_mulx_u32(&x2925, &x2926, x14, (arg2[7])); + fiat_np521_mulx_u32(&x2927, &x2928, x14, (arg2[6])); + fiat_np521_mulx_u32(&x2929, &x2930, x14, (arg2[5])); + fiat_np521_mulx_u32(&x2931, &x2932, x14, (arg2[4])); + fiat_np521_mulx_u32(&x2933, &x2934, x14, (arg2[3])); + fiat_np521_mulx_u32(&x2935, &x2936, x14, (arg2[2])); + fiat_np521_mulx_u32(&x2937, &x2938, x14, (arg2[1])); + fiat_np521_mulx_u32(&x2939, &x2940, x14, (arg2[0])); + fiat_np521_addcarryx_u32(&x2941, &x2942, 0x0, x2940, x2937); + fiat_np521_addcarryx_u32(&x2943, &x2944, x2942, x2938, x2935); + fiat_np521_addcarryx_u32(&x2945, &x2946, x2944, x2936, x2933); + fiat_np521_addcarryx_u32(&x2947, &x2948, x2946, x2934, x2931); + fiat_np521_addcarryx_u32(&x2949, &x2950, x2948, x2932, x2929); + fiat_np521_addcarryx_u32(&x2951, &x2952, x2950, x2930, x2927); + fiat_np521_addcarryx_u32(&x2953, &x2954, x2952, x2928, x2925); + fiat_np521_addcarryx_u32(&x2955, &x2956, x2954, x2926, x2923); + fiat_np521_addcarryx_u32(&x2957, &x2958, x2956, x2924, x2921); + fiat_np521_addcarryx_u32(&x2959, &x2960, x2958, x2922, x2919); + fiat_np521_addcarryx_u32(&x2961, &x2962, x2960, x2920, x2917); + fiat_np521_addcarryx_u32(&x2963, &x2964, x2962, x2918, x2915); + fiat_np521_addcarryx_u32(&x2965, &x2966, x2964, x2916, x2913); + fiat_np521_addcarryx_u32(&x2967, &x2968, x2966, x2914, x2911); + fiat_np521_addcarryx_u32(&x2969, &x2970, x2968, x2912, x2909); + fiat_np521_addcarryx_u32(&x2971, &x2972, x2970, x2910, x2907); + x2973 = (x2972 + x2908); + fiat_np521_addcarryx_u32(&x2974, &x2975, 0x0, x2872, x2939); + fiat_np521_addcarryx_u32(&x2976, &x2977, x2975, x2874, x2941); + fiat_np521_addcarryx_u32(&x2978, &x2979, x2977, x2876, x2943); + fiat_np521_addcarryx_u32(&x2980, &x2981, x2979, x2878, x2945); + fiat_np521_addcarryx_u32(&x2982, &x2983, x2981, x2880, x2947); + fiat_np521_addcarryx_u32(&x2984, &x2985, x2983, x2882, x2949); + fiat_np521_addcarryx_u32(&x2986, &x2987, x2985, x2884, x2951); + fiat_np521_addcarryx_u32(&x2988, &x2989, x2987, x2886, x2953); + fiat_np521_addcarryx_u32(&x2990, &x2991, x2989, x2888, x2955); + fiat_np521_addcarryx_u32(&x2992, &x2993, x2991, x2890, x2957); + fiat_np521_addcarryx_u32(&x2994, &x2995, x2993, x2892, x2959); + fiat_np521_addcarryx_u32(&x2996, &x2997, x2995, x2894, x2961); + fiat_np521_addcarryx_u32(&x2998, &x2999, x2997, x2896, x2963); + fiat_np521_addcarryx_u32(&x3000, &x3001, x2999, x2898, x2965); + fiat_np521_addcarryx_u32(&x3002, &x3003, x3001, x2900, x2967); + fiat_np521_addcarryx_u32(&x3004, &x3005, x3003, x2902, x2969); + fiat_np521_addcarryx_u32(&x3006, &x3007, x3005, x2904, x2971); + fiat_np521_addcarryx_u32(&x3008, &x3009, x3007, x2906, x2973); + fiat_np521_mulx_u32(&x3010, &x3011, x2974, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x3012, &x3013, x3010, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x3014, &x3015, x3010, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3016, &x3017, x3010, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3018, &x3019, x3010, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3020, &x3021, x3010, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3022, &x3023, x3010, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3024, &x3025, x3010, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3026, &x3027, x3010, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3028, &x3029, x3010, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x3030, &x3031, x3010, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x3032, &x3033, x3010, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x3034, &x3035, x3010, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x3036, &x3037, x3010, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x3038, &x3039, x3010, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x3040, &x3041, x3010, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x3042, &x3043, x3010, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x3044, &x3045, x3010, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x3046, &x3047, 0x0, x3045, x3042); + fiat_np521_addcarryx_u32(&x3048, &x3049, x3047, x3043, x3040); + fiat_np521_addcarryx_u32(&x3050, &x3051, x3049, x3041, x3038); + fiat_np521_addcarryx_u32(&x3052, &x3053, x3051, x3039, x3036); + fiat_np521_addcarryx_u32(&x3054, &x3055, x3053, x3037, x3034); + fiat_np521_addcarryx_u32(&x3056, &x3057, x3055, x3035, x3032); + fiat_np521_addcarryx_u32(&x3058, &x3059, x3057, x3033, x3030); + fiat_np521_addcarryx_u32(&x3060, &x3061, x3059, x3031, x3028); + fiat_np521_addcarryx_u32(&x3062, &x3063, x3061, x3029, x3026); + fiat_np521_addcarryx_u32(&x3064, &x3065, x3063, x3027, x3024); + fiat_np521_addcarryx_u32(&x3066, &x3067, x3065, x3025, x3022); + fiat_np521_addcarryx_u32(&x3068, &x3069, x3067, x3023, x3020); + fiat_np521_addcarryx_u32(&x3070, &x3071, x3069, x3021, x3018); + fiat_np521_addcarryx_u32(&x3072, &x3073, x3071, x3019, x3016); + fiat_np521_addcarryx_u32(&x3074, &x3075, x3073, x3017, x3014); + fiat_np521_addcarryx_u32(&x3076, &x3077, x3075, x3015, x3012); + x3078 = (x3077 + x3013); + fiat_np521_addcarryx_u32(&x3079, &x3080, 0x0, x2974, x3044); + fiat_np521_addcarryx_u32(&x3081, &x3082, x3080, x2976, x3046); + fiat_np521_addcarryx_u32(&x3083, &x3084, x3082, x2978, x3048); + fiat_np521_addcarryx_u32(&x3085, &x3086, x3084, x2980, x3050); + fiat_np521_addcarryx_u32(&x3087, &x3088, x3086, x2982, x3052); + fiat_np521_addcarryx_u32(&x3089, &x3090, x3088, x2984, x3054); + fiat_np521_addcarryx_u32(&x3091, &x3092, x3090, x2986, x3056); + fiat_np521_addcarryx_u32(&x3093, &x3094, x3092, x2988, x3058); + fiat_np521_addcarryx_u32(&x3095, &x3096, x3094, x2990, x3060); + fiat_np521_addcarryx_u32(&x3097, &x3098, x3096, x2992, x3062); + fiat_np521_addcarryx_u32(&x3099, &x3100, x3098, x2994, x3064); + fiat_np521_addcarryx_u32(&x3101, &x3102, x3100, x2996, x3066); + fiat_np521_addcarryx_u32(&x3103, &x3104, x3102, x2998, x3068); + fiat_np521_addcarryx_u32(&x3105, &x3106, x3104, x3000, x3070); + fiat_np521_addcarryx_u32(&x3107, &x3108, x3106, x3002, x3072); + fiat_np521_addcarryx_u32(&x3109, &x3110, x3108, x3004, x3074); + fiat_np521_addcarryx_u32(&x3111, &x3112, x3110, x3006, x3076); + fiat_np521_addcarryx_u32(&x3113, &x3114, x3112, x3008, x3078); + x3115 = ((uint32_t)x3114 + x3009); + fiat_np521_mulx_u32(&x3116, &x3117, x15, (arg2[16])); + fiat_np521_mulx_u32(&x3118, &x3119, x15, (arg2[15])); + fiat_np521_mulx_u32(&x3120, &x3121, x15, (arg2[14])); + fiat_np521_mulx_u32(&x3122, &x3123, x15, (arg2[13])); + fiat_np521_mulx_u32(&x3124, &x3125, x15, (arg2[12])); + fiat_np521_mulx_u32(&x3126, &x3127, x15, (arg2[11])); + fiat_np521_mulx_u32(&x3128, &x3129, x15, (arg2[10])); + fiat_np521_mulx_u32(&x3130, &x3131, x15, (arg2[9])); + fiat_np521_mulx_u32(&x3132, &x3133, x15, (arg2[8])); + fiat_np521_mulx_u32(&x3134, &x3135, x15, (arg2[7])); + fiat_np521_mulx_u32(&x3136, &x3137, x15, (arg2[6])); + fiat_np521_mulx_u32(&x3138, &x3139, x15, (arg2[5])); + fiat_np521_mulx_u32(&x3140, &x3141, x15, (arg2[4])); + fiat_np521_mulx_u32(&x3142, &x3143, x15, (arg2[3])); + fiat_np521_mulx_u32(&x3144, &x3145, x15, (arg2[2])); + fiat_np521_mulx_u32(&x3146, &x3147, x15, (arg2[1])); + fiat_np521_mulx_u32(&x3148, &x3149, x15, (arg2[0])); + fiat_np521_addcarryx_u32(&x3150, &x3151, 0x0, x3149, x3146); + fiat_np521_addcarryx_u32(&x3152, &x3153, x3151, x3147, x3144); + fiat_np521_addcarryx_u32(&x3154, &x3155, x3153, x3145, x3142); + fiat_np521_addcarryx_u32(&x3156, &x3157, x3155, x3143, x3140); + fiat_np521_addcarryx_u32(&x3158, &x3159, x3157, x3141, x3138); + fiat_np521_addcarryx_u32(&x3160, &x3161, x3159, x3139, x3136); + fiat_np521_addcarryx_u32(&x3162, &x3163, x3161, x3137, x3134); + fiat_np521_addcarryx_u32(&x3164, &x3165, x3163, x3135, x3132); + fiat_np521_addcarryx_u32(&x3166, &x3167, x3165, x3133, x3130); + fiat_np521_addcarryx_u32(&x3168, &x3169, x3167, x3131, x3128); + fiat_np521_addcarryx_u32(&x3170, &x3171, x3169, x3129, x3126); + fiat_np521_addcarryx_u32(&x3172, &x3173, x3171, x3127, x3124); + fiat_np521_addcarryx_u32(&x3174, &x3175, x3173, x3125, x3122); + fiat_np521_addcarryx_u32(&x3176, &x3177, x3175, x3123, x3120); + fiat_np521_addcarryx_u32(&x3178, &x3179, x3177, x3121, x3118); + fiat_np521_addcarryx_u32(&x3180, &x3181, x3179, x3119, x3116); + x3182 = (x3181 + x3117); + fiat_np521_addcarryx_u32(&x3183, &x3184, 0x0, x3081, x3148); + fiat_np521_addcarryx_u32(&x3185, &x3186, x3184, x3083, x3150); + fiat_np521_addcarryx_u32(&x3187, &x3188, x3186, x3085, x3152); + fiat_np521_addcarryx_u32(&x3189, &x3190, x3188, x3087, x3154); + fiat_np521_addcarryx_u32(&x3191, &x3192, x3190, x3089, x3156); + fiat_np521_addcarryx_u32(&x3193, &x3194, x3192, x3091, x3158); + fiat_np521_addcarryx_u32(&x3195, &x3196, x3194, x3093, x3160); + fiat_np521_addcarryx_u32(&x3197, &x3198, x3196, x3095, x3162); + fiat_np521_addcarryx_u32(&x3199, &x3200, x3198, x3097, x3164); + fiat_np521_addcarryx_u32(&x3201, &x3202, x3200, x3099, x3166); + fiat_np521_addcarryx_u32(&x3203, &x3204, x3202, x3101, x3168); + fiat_np521_addcarryx_u32(&x3205, &x3206, x3204, x3103, x3170); + fiat_np521_addcarryx_u32(&x3207, &x3208, x3206, x3105, x3172); + fiat_np521_addcarryx_u32(&x3209, &x3210, x3208, x3107, x3174); + fiat_np521_addcarryx_u32(&x3211, &x3212, x3210, x3109, x3176); + fiat_np521_addcarryx_u32(&x3213, &x3214, x3212, x3111, x3178); + fiat_np521_addcarryx_u32(&x3215, &x3216, x3214, x3113, x3180); + fiat_np521_addcarryx_u32(&x3217, &x3218, x3216, x3115, x3182); + fiat_np521_mulx_u32(&x3219, &x3220, x3183, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x3221, &x3222, x3219, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x3223, &x3224, x3219, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3225, &x3226, x3219, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3227, &x3228, x3219, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3229, &x3230, x3219, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3231, &x3232, x3219, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3233, &x3234, x3219, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3235, &x3236, x3219, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3237, &x3238, x3219, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x3239, &x3240, x3219, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x3241, &x3242, x3219, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x3243, &x3244, x3219, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x3245, &x3246, x3219, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x3247, &x3248, x3219, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x3249, &x3250, x3219, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x3251, &x3252, x3219, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x3253, &x3254, x3219, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x3255, &x3256, 0x0, x3254, x3251); + fiat_np521_addcarryx_u32(&x3257, &x3258, x3256, x3252, x3249); + fiat_np521_addcarryx_u32(&x3259, &x3260, x3258, x3250, x3247); + fiat_np521_addcarryx_u32(&x3261, &x3262, x3260, x3248, x3245); + fiat_np521_addcarryx_u32(&x3263, &x3264, x3262, x3246, x3243); + fiat_np521_addcarryx_u32(&x3265, &x3266, x3264, x3244, x3241); + fiat_np521_addcarryx_u32(&x3267, &x3268, x3266, x3242, x3239); + fiat_np521_addcarryx_u32(&x3269, &x3270, x3268, x3240, x3237); + fiat_np521_addcarryx_u32(&x3271, &x3272, x3270, x3238, x3235); + fiat_np521_addcarryx_u32(&x3273, &x3274, x3272, x3236, x3233); + fiat_np521_addcarryx_u32(&x3275, &x3276, x3274, x3234, x3231); + fiat_np521_addcarryx_u32(&x3277, &x3278, x3276, x3232, x3229); + fiat_np521_addcarryx_u32(&x3279, &x3280, x3278, x3230, x3227); + fiat_np521_addcarryx_u32(&x3281, &x3282, x3280, x3228, x3225); + fiat_np521_addcarryx_u32(&x3283, &x3284, x3282, x3226, x3223); + fiat_np521_addcarryx_u32(&x3285, &x3286, x3284, x3224, x3221); + x3287 = (x3286 + x3222); + fiat_np521_addcarryx_u32(&x3288, &x3289, 0x0, x3183, x3253); + fiat_np521_addcarryx_u32(&x3290, &x3291, x3289, x3185, x3255); + fiat_np521_addcarryx_u32(&x3292, &x3293, x3291, x3187, x3257); + fiat_np521_addcarryx_u32(&x3294, &x3295, x3293, x3189, x3259); + fiat_np521_addcarryx_u32(&x3296, &x3297, x3295, x3191, x3261); + fiat_np521_addcarryx_u32(&x3298, &x3299, x3297, x3193, x3263); + fiat_np521_addcarryx_u32(&x3300, &x3301, x3299, x3195, x3265); + fiat_np521_addcarryx_u32(&x3302, &x3303, x3301, x3197, x3267); + fiat_np521_addcarryx_u32(&x3304, &x3305, x3303, x3199, x3269); + fiat_np521_addcarryx_u32(&x3306, &x3307, x3305, x3201, x3271); + fiat_np521_addcarryx_u32(&x3308, &x3309, x3307, x3203, x3273); + fiat_np521_addcarryx_u32(&x3310, &x3311, x3309, x3205, x3275); + fiat_np521_addcarryx_u32(&x3312, &x3313, x3311, x3207, x3277); + fiat_np521_addcarryx_u32(&x3314, &x3315, x3313, x3209, x3279); + fiat_np521_addcarryx_u32(&x3316, &x3317, x3315, x3211, x3281); + fiat_np521_addcarryx_u32(&x3318, &x3319, x3317, x3213, x3283); + fiat_np521_addcarryx_u32(&x3320, &x3321, x3319, x3215, x3285); + fiat_np521_addcarryx_u32(&x3322, &x3323, x3321, x3217, x3287); + x3324 = ((uint32_t)x3323 + x3218); + fiat_np521_mulx_u32(&x3325, &x3326, x16, (arg2[16])); + fiat_np521_mulx_u32(&x3327, &x3328, x16, (arg2[15])); + fiat_np521_mulx_u32(&x3329, &x3330, x16, (arg2[14])); + fiat_np521_mulx_u32(&x3331, &x3332, x16, (arg2[13])); + fiat_np521_mulx_u32(&x3333, &x3334, x16, (arg2[12])); + fiat_np521_mulx_u32(&x3335, &x3336, x16, (arg2[11])); + fiat_np521_mulx_u32(&x3337, &x3338, x16, (arg2[10])); + fiat_np521_mulx_u32(&x3339, &x3340, x16, (arg2[9])); + fiat_np521_mulx_u32(&x3341, &x3342, x16, (arg2[8])); + fiat_np521_mulx_u32(&x3343, &x3344, x16, (arg2[7])); + fiat_np521_mulx_u32(&x3345, &x3346, x16, (arg2[6])); + fiat_np521_mulx_u32(&x3347, &x3348, x16, (arg2[5])); + fiat_np521_mulx_u32(&x3349, &x3350, x16, (arg2[4])); + fiat_np521_mulx_u32(&x3351, &x3352, x16, (arg2[3])); + fiat_np521_mulx_u32(&x3353, &x3354, x16, (arg2[2])); + fiat_np521_mulx_u32(&x3355, &x3356, x16, (arg2[1])); + fiat_np521_mulx_u32(&x3357, &x3358, x16, (arg2[0])); + fiat_np521_addcarryx_u32(&x3359, &x3360, 0x0, x3358, x3355); + fiat_np521_addcarryx_u32(&x3361, &x3362, x3360, x3356, x3353); + fiat_np521_addcarryx_u32(&x3363, &x3364, x3362, x3354, x3351); + fiat_np521_addcarryx_u32(&x3365, &x3366, x3364, x3352, x3349); + fiat_np521_addcarryx_u32(&x3367, &x3368, x3366, x3350, x3347); + fiat_np521_addcarryx_u32(&x3369, &x3370, x3368, x3348, x3345); + fiat_np521_addcarryx_u32(&x3371, &x3372, x3370, x3346, x3343); + fiat_np521_addcarryx_u32(&x3373, &x3374, x3372, x3344, x3341); + fiat_np521_addcarryx_u32(&x3375, &x3376, x3374, x3342, x3339); + fiat_np521_addcarryx_u32(&x3377, &x3378, x3376, x3340, x3337); + fiat_np521_addcarryx_u32(&x3379, &x3380, x3378, x3338, x3335); + fiat_np521_addcarryx_u32(&x3381, &x3382, x3380, x3336, x3333); + fiat_np521_addcarryx_u32(&x3383, &x3384, x3382, x3334, x3331); + fiat_np521_addcarryx_u32(&x3385, &x3386, x3384, x3332, x3329); + fiat_np521_addcarryx_u32(&x3387, &x3388, x3386, x3330, x3327); + fiat_np521_addcarryx_u32(&x3389, &x3390, x3388, x3328, x3325); + x3391 = (x3390 + x3326); + fiat_np521_addcarryx_u32(&x3392, &x3393, 0x0, x3290, x3357); + fiat_np521_addcarryx_u32(&x3394, &x3395, x3393, x3292, x3359); + fiat_np521_addcarryx_u32(&x3396, &x3397, x3395, x3294, x3361); + fiat_np521_addcarryx_u32(&x3398, &x3399, x3397, x3296, x3363); + fiat_np521_addcarryx_u32(&x3400, &x3401, x3399, x3298, x3365); + fiat_np521_addcarryx_u32(&x3402, &x3403, x3401, x3300, x3367); + fiat_np521_addcarryx_u32(&x3404, &x3405, x3403, x3302, x3369); + fiat_np521_addcarryx_u32(&x3406, &x3407, x3405, x3304, x3371); + fiat_np521_addcarryx_u32(&x3408, &x3409, x3407, x3306, x3373); + fiat_np521_addcarryx_u32(&x3410, &x3411, x3409, x3308, x3375); + fiat_np521_addcarryx_u32(&x3412, &x3413, x3411, x3310, x3377); + fiat_np521_addcarryx_u32(&x3414, &x3415, x3413, x3312, x3379); + fiat_np521_addcarryx_u32(&x3416, &x3417, x3415, x3314, x3381); + fiat_np521_addcarryx_u32(&x3418, &x3419, x3417, x3316, x3383); + fiat_np521_addcarryx_u32(&x3420, &x3421, x3419, x3318, x3385); + fiat_np521_addcarryx_u32(&x3422, &x3423, x3421, x3320, x3387); + fiat_np521_addcarryx_u32(&x3424, &x3425, x3423, x3322, x3389); + fiat_np521_addcarryx_u32(&x3426, &x3427, x3425, x3324, x3391); + fiat_np521_mulx_u32(&x3428, &x3429, x3392, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x3430, &x3431, x3428, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x3432, &x3433, x3428, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3434, &x3435, x3428, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3436, &x3437, x3428, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3438, &x3439, x3428, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3440, &x3441, x3428, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3442, &x3443, x3428, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3444, &x3445, x3428, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3446, &x3447, x3428, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x3448, &x3449, x3428, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x3450, &x3451, x3428, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x3452, &x3453, x3428, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x3454, &x3455, x3428, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x3456, &x3457, x3428, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x3458, &x3459, x3428, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x3460, &x3461, x3428, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x3462, &x3463, x3428, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x3464, &x3465, 0x0, x3463, x3460); + fiat_np521_addcarryx_u32(&x3466, &x3467, x3465, x3461, x3458); + fiat_np521_addcarryx_u32(&x3468, &x3469, x3467, x3459, x3456); + fiat_np521_addcarryx_u32(&x3470, &x3471, x3469, x3457, x3454); + fiat_np521_addcarryx_u32(&x3472, &x3473, x3471, x3455, x3452); + fiat_np521_addcarryx_u32(&x3474, &x3475, x3473, x3453, x3450); + fiat_np521_addcarryx_u32(&x3476, &x3477, x3475, x3451, x3448); + fiat_np521_addcarryx_u32(&x3478, &x3479, x3477, x3449, x3446); + fiat_np521_addcarryx_u32(&x3480, &x3481, x3479, x3447, x3444); + fiat_np521_addcarryx_u32(&x3482, &x3483, x3481, x3445, x3442); + fiat_np521_addcarryx_u32(&x3484, &x3485, x3483, x3443, x3440); + fiat_np521_addcarryx_u32(&x3486, &x3487, x3485, x3441, x3438); + fiat_np521_addcarryx_u32(&x3488, &x3489, x3487, x3439, x3436); + fiat_np521_addcarryx_u32(&x3490, &x3491, x3489, x3437, x3434); + fiat_np521_addcarryx_u32(&x3492, &x3493, x3491, x3435, x3432); + fiat_np521_addcarryx_u32(&x3494, &x3495, x3493, x3433, x3430); + x3496 = (x3495 + x3431); + fiat_np521_addcarryx_u32(&x3497, &x3498, 0x0, x3392, x3462); + fiat_np521_addcarryx_u32(&x3499, &x3500, x3498, x3394, x3464); + fiat_np521_addcarryx_u32(&x3501, &x3502, x3500, x3396, x3466); + fiat_np521_addcarryx_u32(&x3503, &x3504, x3502, x3398, x3468); + fiat_np521_addcarryx_u32(&x3505, &x3506, x3504, x3400, x3470); + fiat_np521_addcarryx_u32(&x3507, &x3508, x3506, x3402, x3472); + fiat_np521_addcarryx_u32(&x3509, &x3510, x3508, x3404, x3474); + fiat_np521_addcarryx_u32(&x3511, &x3512, x3510, x3406, x3476); + fiat_np521_addcarryx_u32(&x3513, &x3514, x3512, x3408, x3478); + fiat_np521_addcarryx_u32(&x3515, &x3516, x3514, x3410, x3480); + fiat_np521_addcarryx_u32(&x3517, &x3518, x3516, x3412, x3482); + fiat_np521_addcarryx_u32(&x3519, &x3520, x3518, x3414, x3484); + fiat_np521_addcarryx_u32(&x3521, &x3522, x3520, x3416, x3486); + fiat_np521_addcarryx_u32(&x3523, &x3524, x3522, x3418, x3488); + fiat_np521_addcarryx_u32(&x3525, &x3526, x3524, x3420, x3490); + fiat_np521_addcarryx_u32(&x3527, &x3528, x3526, x3422, x3492); + fiat_np521_addcarryx_u32(&x3529, &x3530, x3528, x3424, x3494); + fiat_np521_addcarryx_u32(&x3531, &x3532, x3530, x3426, x3496); + x3533 = ((uint32_t)x3532 + x3427); + fiat_np521_subborrowx_u32(&x3534, &x3535, 0x0, x3499, UINT32_C(0x91386409)); + fiat_np521_subborrowx_u32(&x3536, &x3537, x3535, x3501, UINT32_C(0xbb6fb71e)); + fiat_np521_subborrowx_u32(&x3538, &x3539, x3537, x3503, UINT32_C(0x899c47ae)); + fiat_np521_subborrowx_u32(&x3540, &x3541, x3539, x3505, UINT32_C(0x3bb5c9b8)); + fiat_np521_subborrowx_u32(&x3542, &x3543, x3541, x3507, UINT32_C(0xf709a5d0)); + fiat_np521_subborrowx_u32(&x3544, &x3545, x3543, x3509, UINT32_C(0x7fcc0148)); + fiat_np521_subborrowx_u32(&x3546, &x3547, x3545, x3511, UINT32_C(0xbf2f966b)); + fiat_np521_subborrowx_u32(&x3548, &x3549, x3547, x3513, UINT32_C(0x51868783)); + fiat_np521_subborrowx_u32(&x3550, &x3551, x3549, x3515, UINT32_C(0xfffffffa)); + fiat_np521_subborrowx_u32(&x3552, &x3553, x3551, x3517, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x3554, &x3555, x3553, x3519, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x3556, &x3557, x3555, x3521, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x3558, &x3559, x3557, x3523, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x3560, &x3561, x3559, x3525, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x3562, &x3563, x3561, x3527, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x3564, &x3565, x3563, x3529, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x3566, &x3567, x3565, x3531, UINT16_C(0x1ff)); + fiat_np521_subborrowx_u32(&x3568, &x3569, x3567, x3533, 0x0); + fiat_np521_cmovznz_u32(&x3570, x3569, x3534, x3499); + fiat_np521_cmovznz_u32(&x3571, x3569, x3536, x3501); + fiat_np521_cmovznz_u32(&x3572, x3569, x3538, x3503); + fiat_np521_cmovznz_u32(&x3573, x3569, x3540, x3505); + fiat_np521_cmovznz_u32(&x3574, x3569, x3542, x3507); + fiat_np521_cmovznz_u32(&x3575, x3569, x3544, x3509); + fiat_np521_cmovznz_u32(&x3576, x3569, x3546, x3511); + fiat_np521_cmovznz_u32(&x3577, x3569, x3548, x3513); + fiat_np521_cmovznz_u32(&x3578, x3569, x3550, x3515); + fiat_np521_cmovznz_u32(&x3579, x3569, x3552, x3517); + fiat_np521_cmovznz_u32(&x3580, x3569, x3554, x3519); + fiat_np521_cmovznz_u32(&x3581, x3569, x3556, x3521); + fiat_np521_cmovznz_u32(&x3582, x3569, x3558, x3523); + fiat_np521_cmovznz_u32(&x3583, x3569, x3560, x3525); + fiat_np521_cmovznz_u32(&x3584, x3569, x3562, x3527); + fiat_np521_cmovznz_u32(&x3585, x3569, x3564, x3529); + fiat_np521_cmovznz_u32(&x3586, x3569, x3566, x3531); + out1[0] = x3570; + out1[1] = x3571; + out1[2] = x3572; + out1[3] = x3573; + out1[4] = x3574; + out1[5] = x3575; + out1[6] = x3576; + out1[7] = x3577; + out1[8] = x3578; + out1[9] = x3579; + out1[10] = x3580; + out1[11] = x3581; + out1[12] = x3582; + out1[13] = x3583; + out1[14] = x3584; + out1[15] = x3585; + out1[16] = x3586; +} + +/* + * The function fiat_np521_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np521_add(uint32_t out1[17], const uint32_t arg1[17], const uint32_t arg2[17]) { + uint32_t x1; + fiat_np521_uint1 x2; + uint32_t x3; + fiat_np521_uint1 x4; + uint32_t x5; + fiat_np521_uint1 x6; + uint32_t x7; + fiat_np521_uint1 x8; + uint32_t x9; + fiat_np521_uint1 x10; + uint32_t x11; + fiat_np521_uint1 x12; + uint32_t x13; + fiat_np521_uint1 x14; + uint32_t x15; + fiat_np521_uint1 x16; + uint32_t x17; + fiat_np521_uint1 x18; + uint32_t x19; + fiat_np521_uint1 x20; + uint32_t x21; + fiat_np521_uint1 x22; + uint32_t x23; + fiat_np521_uint1 x24; + uint32_t x25; + fiat_np521_uint1 x26; + uint32_t x27; + fiat_np521_uint1 x28; + uint32_t x29; + fiat_np521_uint1 x30; + uint32_t x31; + fiat_np521_uint1 x32; + uint32_t x33; + fiat_np521_uint1 x34; + uint32_t x35; + fiat_np521_uint1 x36; + uint32_t x37; + fiat_np521_uint1 x38; + uint32_t x39; + fiat_np521_uint1 x40; + uint32_t x41; + fiat_np521_uint1 x42; + uint32_t x43; + fiat_np521_uint1 x44; + uint32_t x45; + fiat_np521_uint1 x46; + uint32_t x47; + fiat_np521_uint1 x48; + uint32_t x49; + fiat_np521_uint1 x50; + uint32_t x51; + fiat_np521_uint1 x52; + uint32_t x53; + fiat_np521_uint1 x54; + uint32_t x55; + fiat_np521_uint1 x56; + uint32_t x57; + fiat_np521_uint1 x58; + uint32_t x59; + fiat_np521_uint1 x60; + uint32_t x61; + fiat_np521_uint1 x62; + uint32_t x63; + fiat_np521_uint1 x64; + uint32_t x65; + fiat_np521_uint1 x66; + uint32_t x67; + fiat_np521_uint1 x68; + uint32_t x69; + fiat_np521_uint1 x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + uint32_t x81; + uint32_t x82; + uint32_t x83; + uint32_t x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + fiat_np521_addcarryx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_np521_addcarryx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_np521_addcarryx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_np521_addcarryx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_np521_addcarryx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_np521_addcarryx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_np521_addcarryx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); + fiat_np521_addcarryx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); + fiat_np521_addcarryx_u32(&x17, &x18, x16, (arg1[8]), (arg2[8])); + fiat_np521_addcarryx_u32(&x19, &x20, x18, (arg1[9]), (arg2[9])); + fiat_np521_addcarryx_u32(&x21, &x22, x20, (arg1[10]), (arg2[10])); + fiat_np521_addcarryx_u32(&x23, &x24, x22, (arg1[11]), (arg2[11])); + fiat_np521_addcarryx_u32(&x25, &x26, x24, (arg1[12]), (arg2[12])); + fiat_np521_addcarryx_u32(&x27, &x28, x26, (arg1[13]), (arg2[13])); + fiat_np521_addcarryx_u32(&x29, &x30, x28, (arg1[14]), (arg2[14])); + fiat_np521_addcarryx_u32(&x31, &x32, x30, (arg1[15]), (arg2[15])); + fiat_np521_addcarryx_u32(&x33, &x34, x32, (arg1[16]), (arg2[16])); + fiat_np521_subborrowx_u32(&x35, &x36, 0x0, x1, UINT32_C(0x91386409)); + fiat_np521_subborrowx_u32(&x37, &x38, x36, x3, UINT32_C(0xbb6fb71e)); + fiat_np521_subborrowx_u32(&x39, &x40, x38, x5, UINT32_C(0x899c47ae)); + fiat_np521_subborrowx_u32(&x41, &x42, x40, x7, UINT32_C(0x3bb5c9b8)); + fiat_np521_subborrowx_u32(&x43, &x44, x42, x9, UINT32_C(0xf709a5d0)); + fiat_np521_subborrowx_u32(&x45, &x46, x44, x11, UINT32_C(0x7fcc0148)); + fiat_np521_subborrowx_u32(&x47, &x48, x46, x13, UINT32_C(0xbf2f966b)); + fiat_np521_subborrowx_u32(&x49, &x50, x48, x15, UINT32_C(0x51868783)); + fiat_np521_subborrowx_u32(&x51, &x52, x50, x17, UINT32_C(0xfffffffa)); + fiat_np521_subborrowx_u32(&x53, &x54, x52, x19, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x55, &x56, x54, x21, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x57, &x58, x56, x23, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x59, &x60, x58, x25, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x61, &x62, x60, x27, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x63, &x64, x62, x29, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x65, &x66, x64, x31, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x67, &x68, x66, x33, UINT16_C(0x1ff)); + fiat_np521_subborrowx_u32(&x69, &x70, x68, x34, 0x0); + fiat_np521_cmovznz_u32(&x71, x70, x35, x1); + fiat_np521_cmovznz_u32(&x72, x70, x37, x3); + fiat_np521_cmovznz_u32(&x73, x70, x39, x5); + fiat_np521_cmovznz_u32(&x74, x70, x41, x7); + fiat_np521_cmovznz_u32(&x75, x70, x43, x9); + fiat_np521_cmovznz_u32(&x76, x70, x45, x11); + fiat_np521_cmovznz_u32(&x77, x70, x47, x13); + fiat_np521_cmovznz_u32(&x78, x70, x49, x15); + fiat_np521_cmovznz_u32(&x79, x70, x51, x17); + fiat_np521_cmovznz_u32(&x80, x70, x53, x19); + fiat_np521_cmovznz_u32(&x81, x70, x55, x21); + fiat_np521_cmovznz_u32(&x82, x70, x57, x23); + fiat_np521_cmovznz_u32(&x83, x70, x59, x25); + fiat_np521_cmovznz_u32(&x84, x70, x61, x27); + fiat_np521_cmovznz_u32(&x85, x70, x63, x29); + fiat_np521_cmovznz_u32(&x86, x70, x65, x31); + fiat_np521_cmovznz_u32(&x87, x70, x67, x33); + out1[0] = x71; + out1[1] = x72; + out1[2] = x73; + out1[3] = x74; + out1[4] = x75; + out1[5] = x76; + out1[6] = x77; + out1[7] = x78; + out1[8] = x79; + out1[9] = x80; + out1[10] = x81; + out1[11] = x82; + out1[12] = x83; + out1[13] = x84; + out1[14] = x85; + out1[15] = x86; + out1[16] = x87; +} + +/* + * The function fiat_np521_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np521_opp(uint32_t out1[17], const uint32_t arg1[17]) { + uint32_t x1; + fiat_np521_uint1 x2; + uint32_t x3; + fiat_np521_uint1 x4; + uint32_t x5; + fiat_np521_uint1 x6; + uint32_t x7; + fiat_np521_uint1 x8; + uint32_t x9; + fiat_np521_uint1 x10; + uint32_t x11; + fiat_np521_uint1 x12; + uint32_t x13; + fiat_np521_uint1 x14; + uint32_t x15; + fiat_np521_uint1 x16; + uint32_t x17; + fiat_np521_uint1 x18; + uint32_t x19; + fiat_np521_uint1 x20; + uint32_t x21; + fiat_np521_uint1 x22; + uint32_t x23; + fiat_np521_uint1 x24; + uint32_t x25; + fiat_np521_uint1 x26; + uint32_t x27; + fiat_np521_uint1 x28; + uint32_t x29; + fiat_np521_uint1 x30; + uint32_t x31; + fiat_np521_uint1 x32; + uint32_t x33; + fiat_np521_uint1 x34; + uint32_t x35; + uint32_t x36; + fiat_np521_uint1 x37; + uint32_t x38; + fiat_np521_uint1 x39; + uint32_t x40; + fiat_np521_uint1 x41; + uint32_t x42; + fiat_np521_uint1 x43; + uint32_t x44; + fiat_np521_uint1 x45; + uint32_t x46; + fiat_np521_uint1 x47; + uint32_t x48; + fiat_np521_uint1 x49; + uint32_t x50; + fiat_np521_uint1 x51; + uint32_t x52; + fiat_np521_uint1 x53; + uint32_t x54; + fiat_np521_uint1 x55; + uint32_t x56; + fiat_np521_uint1 x57; + uint32_t x58; + fiat_np521_uint1 x59; + uint32_t x60; + fiat_np521_uint1 x61; + uint32_t x62; + fiat_np521_uint1 x63; + uint32_t x64; + fiat_np521_uint1 x65; + uint32_t x66; + fiat_np521_uint1 x67; + uint32_t x68; + fiat_np521_uint1 x69; + fiat_np521_subborrowx_u32(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_np521_subborrowx_u32(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_np521_subborrowx_u32(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_np521_subborrowx_u32(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_np521_subborrowx_u32(&x9, &x10, x8, 0x0, (arg1[4])); + fiat_np521_subborrowx_u32(&x11, &x12, x10, 0x0, (arg1[5])); + fiat_np521_subborrowx_u32(&x13, &x14, x12, 0x0, (arg1[6])); + fiat_np521_subborrowx_u32(&x15, &x16, x14, 0x0, (arg1[7])); + fiat_np521_subborrowx_u32(&x17, &x18, x16, 0x0, (arg1[8])); + fiat_np521_subborrowx_u32(&x19, &x20, x18, 0x0, (arg1[9])); + fiat_np521_subborrowx_u32(&x21, &x22, x20, 0x0, (arg1[10])); + fiat_np521_subborrowx_u32(&x23, &x24, x22, 0x0, (arg1[11])); + fiat_np521_subborrowx_u32(&x25, &x26, x24, 0x0, (arg1[12])); + fiat_np521_subborrowx_u32(&x27, &x28, x26, 0x0, (arg1[13])); + fiat_np521_subborrowx_u32(&x29, &x30, x28, 0x0, (arg1[14])); + fiat_np521_subborrowx_u32(&x31, &x32, x30, 0x0, (arg1[15])); + fiat_np521_subborrowx_u32(&x33, &x34, x32, 0x0, (arg1[16])); + fiat_np521_cmovznz_u32(&x35, x34, 0x0, UINT32_C(0xffffffff)); + fiat_np521_addcarryx_u32(&x36, &x37, 0x0, x1, (x35 & UINT32_C(0x91386409))); + fiat_np521_addcarryx_u32(&x38, &x39, x37, x3, (x35 & UINT32_C(0xbb6fb71e))); + fiat_np521_addcarryx_u32(&x40, &x41, x39, x5, (x35 & UINT32_C(0x899c47ae))); + fiat_np521_addcarryx_u32(&x42, &x43, x41, x7, (x35 & UINT32_C(0x3bb5c9b8))); + fiat_np521_addcarryx_u32(&x44, &x45, x43, x9, (x35 & UINT32_C(0xf709a5d0))); + fiat_np521_addcarryx_u32(&x46, &x47, x45, x11, (x35 & UINT32_C(0x7fcc0148))); + fiat_np521_addcarryx_u32(&x48, &x49, x47, x13, (x35 & UINT32_C(0xbf2f966b))); + fiat_np521_addcarryx_u32(&x50, &x51, x49, x15, (x35 & UINT32_C(0x51868783))); + fiat_np521_addcarryx_u32(&x52, &x53, x51, x17, (x35 & UINT32_C(0xfffffffa))); + fiat_np521_addcarryx_u32(&x54, &x55, x53, x19, x35); + fiat_np521_addcarryx_u32(&x56, &x57, x55, x21, x35); + fiat_np521_addcarryx_u32(&x58, &x59, x57, x23, x35); + fiat_np521_addcarryx_u32(&x60, &x61, x59, x25, x35); + fiat_np521_addcarryx_u32(&x62, &x63, x61, x27, x35); + fiat_np521_addcarryx_u32(&x64, &x65, x63, x29, x35); + fiat_np521_addcarryx_u32(&x66, &x67, x65, x31, x35); + fiat_np521_addcarryx_u32(&x68, &x69, x67, x33, (x35 & UINT16_C(0x1ff))); + out1[0] = x36; + out1[1] = x38; + out1[2] = x40; + out1[3] = x42; + out1[4] = x44; + out1[5] = x46; + out1[6] = x48; + out1[7] = x50; + out1[8] = x52; + out1[9] = x54; + out1[10] = x56; + out1[11] = x58; + out1[12] = x60; + out1[13] = x62; + out1[14] = x64; + out1[15] = x66; + out1[16] = x68; +} + +/* + * The function fiat_np521_from_montgomery translates a field element out of the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^32)⁻¹ mod m)^17) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np521_from_montgomery(uint32_t out1[17], const uint32_t arg1[17]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint32_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + fiat_np521_uint1 x39; + uint32_t x40; + fiat_np521_uint1 x41; + uint32_t x42; + fiat_np521_uint1 x43; + uint32_t x44; + fiat_np521_uint1 x45; + uint32_t x46; + fiat_np521_uint1 x47; + uint32_t x48; + fiat_np521_uint1 x49; + uint32_t x50; + fiat_np521_uint1 x51; + uint32_t x52; + fiat_np521_uint1 x53; + uint32_t x54; + fiat_np521_uint1 x55; + uint32_t x56; + fiat_np521_uint1 x57; + uint32_t x58; + fiat_np521_uint1 x59; + uint32_t x60; + fiat_np521_uint1 x61; + uint32_t x62; + fiat_np521_uint1 x63; + uint32_t x64; + fiat_np521_uint1 x65; + uint32_t x66; + fiat_np521_uint1 x67; + uint32_t x68; + fiat_np521_uint1 x69; + uint32_t x70; + fiat_np521_uint1 x71; + uint32_t x72; + fiat_np521_uint1 x73; + uint32_t x74; + fiat_np521_uint1 x75; + uint32_t x76; + fiat_np521_uint1 x77; + uint32_t x78; + fiat_np521_uint1 x79; + uint32_t x80; + fiat_np521_uint1 x81; + uint32_t x82; + fiat_np521_uint1 x83; + uint32_t x84; + fiat_np521_uint1 x85; + uint32_t x86; + fiat_np521_uint1 x87; + uint32_t x88; + fiat_np521_uint1 x89; + uint32_t x90; + fiat_np521_uint1 x91; + uint32_t x92; + fiat_np521_uint1 x93; + uint32_t x94; + fiat_np521_uint1 x95; + uint32_t x96; + fiat_np521_uint1 x97; + uint32_t x98; + fiat_np521_uint1 x99; + uint32_t x100; + fiat_np521_uint1 x101; + uint32_t x102; + fiat_np521_uint1 x103; + uint32_t x104; + fiat_np521_uint1 x105; + uint32_t x106; + fiat_np521_uint1 x107; + uint32_t x108; + fiat_np521_uint1 x109; + uint32_t x110; + fiat_np521_uint1 x111; + uint32_t x112; + fiat_np521_uint1 x113; + uint32_t x114; + fiat_np521_uint1 x115; + uint32_t x116; + fiat_np521_uint1 x117; + uint32_t x118; + fiat_np521_uint1 x119; + uint32_t x120; + fiat_np521_uint1 x121; + uint32_t x122; + fiat_np521_uint1 x123; + uint32_t x124; + fiat_np521_uint1 x125; + uint32_t x126; + fiat_np521_uint1 x127; + uint32_t x128; + fiat_np521_uint1 x129; + uint32_t x130; + fiat_np521_uint1 x131; + uint32_t x132; + fiat_np521_uint1 x133; + uint32_t x134; + fiat_np521_uint1 x135; + uint32_t x136; + uint32_t x137; + uint32_t x138; + uint32_t x139; + uint32_t x140; + uint32_t x141; + uint32_t x142; + uint32_t x143; + uint32_t x144; + uint32_t x145; + uint32_t x146; + uint32_t x147; + uint32_t x148; + uint32_t x149; + uint32_t x150; + uint32_t x151; + uint32_t x152; + uint32_t x153; + uint32_t x154; + uint32_t x155; + uint32_t x156; + uint32_t x157; + uint32_t x158; + uint32_t x159; + uint32_t x160; + uint32_t x161; + uint32_t x162; + uint32_t x163; + uint32_t x164; + uint32_t x165; + uint32_t x166; + uint32_t x167; + uint32_t x168; + uint32_t x169; + uint32_t x170; + uint32_t x171; + uint32_t x172; + fiat_np521_uint1 x173; + uint32_t x174; + fiat_np521_uint1 x175; + uint32_t x176; + fiat_np521_uint1 x177; + uint32_t x178; + fiat_np521_uint1 x179; + uint32_t x180; + fiat_np521_uint1 x181; + uint32_t x182; + fiat_np521_uint1 x183; + uint32_t x184; + fiat_np521_uint1 x185; + uint32_t x186; + fiat_np521_uint1 x187; + uint32_t x188; + fiat_np521_uint1 x189; + uint32_t x190; + fiat_np521_uint1 x191; + uint32_t x192; + fiat_np521_uint1 x193; + uint32_t x194; + fiat_np521_uint1 x195; + uint32_t x196; + fiat_np521_uint1 x197; + uint32_t x198; + fiat_np521_uint1 x199; + uint32_t x200; + fiat_np521_uint1 x201; + uint32_t x202; + fiat_np521_uint1 x203; + uint32_t x204; + fiat_np521_uint1 x205; + uint32_t x206; + fiat_np521_uint1 x207; + uint32_t x208; + fiat_np521_uint1 x209; + uint32_t x210; + fiat_np521_uint1 x211; + uint32_t x212; + fiat_np521_uint1 x213; + uint32_t x214; + fiat_np521_uint1 x215; + uint32_t x216; + fiat_np521_uint1 x217; + uint32_t x218; + fiat_np521_uint1 x219; + uint32_t x220; + fiat_np521_uint1 x221; + uint32_t x222; + fiat_np521_uint1 x223; + uint32_t x224; + fiat_np521_uint1 x225; + uint32_t x226; + fiat_np521_uint1 x227; + uint32_t x228; + fiat_np521_uint1 x229; + uint32_t x230; + fiat_np521_uint1 x231; + uint32_t x232; + fiat_np521_uint1 x233; + uint32_t x234; + fiat_np521_uint1 x235; + uint32_t x236; + fiat_np521_uint1 x237; + uint32_t x238; + fiat_np521_uint1 x239; + uint32_t x240; + fiat_np521_uint1 x241; + uint32_t x242; + fiat_np521_uint1 x243; + uint32_t x244; + fiat_np521_uint1 x245; + uint32_t x246; + fiat_np521_uint1 x247; + uint32_t x248; + fiat_np521_uint1 x249; + uint32_t x250; + fiat_np521_uint1 x251; + uint32_t x252; + fiat_np521_uint1 x253; + uint32_t x254; + fiat_np521_uint1 x255; + uint32_t x256; + fiat_np521_uint1 x257; + uint32_t x258; + fiat_np521_uint1 x259; + uint32_t x260; + fiat_np521_uint1 x261; + uint32_t x262; + fiat_np521_uint1 x263; + uint32_t x264; + fiat_np521_uint1 x265; + uint32_t x266; + fiat_np521_uint1 x267; + uint32_t x268; + fiat_np521_uint1 x269; + uint32_t x270; + uint32_t x271; + uint32_t x272; + uint32_t x273; + uint32_t x274; + uint32_t x275; + uint32_t x276; + uint32_t x277; + uint32_t x278; + uint32_t x279; + uint32_t x280; + uint32_t x281; + uint32_t x282; + uint32_t x283; + uint32_t x284; + uint32_t x285; + uint32_t x286; + uint32_t x287; + uint32_t x288; + uint32_t x289; + uint32_t x290; + uint32_t x291; + uint32_t x292; + uint32_t x293; + uint32_t x294; + uint32_t x295; + uint32_t x296; + uint32_t x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + uint32_t x303; + uint32_t x304; + uint32_t x305; + uint32_t x306; + fiat_np521_uint1 x307; + uint32_t x308; + fiat_np521_uint1 x309; + uint32_t x310; + fiat_np521_uint1 x311; + uint32_t x312; + fiat_np521_uint1 x313; + uint32_t x314; + fiat_np521_uint1 x315; + uint32_t x316; + fiat_np521_uint1 x317; + uint32_t x318; + fiat_np521_uint1 x319; + uint32_t x320; + fiat_np521_uint1 x321; + uint32_t x322; + fiat_np521_uint1 x323; + uint32_t x324; + fiat_np521_uint1 x325; + uint32_t x326; + fiat_np521_uint1 x327; + uint32_t x328; + fiat_np521_uint1 x329; + uint32_t x330; + fiat_np521_uint1 x331; + uint32_t x332; + fiat_np521_uint1 x333; + uint32_t x334; + fiat_np521_uint1 x335; + uint32_t x336; + fiat_np521_uint1 x337; + uint32_t x338; + fiat_np521_uint1 x339; + uint32_t x340; + fiat_np521_uint1 x341; + uint32_t x342; + fiat_np521_uint1 x343; + uint32_t x344; + fiat_np521_uint1 x345; + uint32_t x346; + fiat_np521_uint1 x347; + uint32_t x348; + fiat_np521_uint1 x349; + uint32_t x350; + fiat_np521_uint1 x351; + uint32_t x352; + fiat_np521_uint1 x353; + uint32_t x354; + fiat_np521_uint1 x355; + uint32_t x356; + fiat_np521_uint1 x357; + uint32_t x358; + fiat_np521_uint1 x359; + uint32_t x360; + fiat_np521_uint1 x361; + uint32_t x362; + fiat_np521_uint1 x363; + uint32_t x364; + fiat_np521_uint1 x365; + uint32_t x366; + fiat_np521_uint1 x367; + uint32_t x368; + fiat_np521_uint1 x369; + uint32_t x370; + fiat_np521_uint1 x371; + uint32_t x372; + fiat_np521_uint1 x373; + uint32_t x374; + fiat_np521_uint1 x375; + uint32_t x376; + fiat_np521_uint1 x377; + uint32_t x378; + fiat_np521_uint1 x379; + uint32_t x380; + fiat_np521_uint1 x381; + uint32_t x382; + fiat_np521_uint1 x383; + uint32_t x384; + fiat_np521_uint1 x385; + uint32_t x386; + fiat_np521_uint1 x387; + uint32_t x388; + fiat_np521_uint1 x389; + uint32_t x390; + fiat_np521_uint1 x391; + uint32_t x392; + fiat_np521_uint1 x393; + uint32_t x394; + fiat_np521_uint1 x395; + uint32_t x396; + fiat_np521_uint1 x397; + uint32_t x398; + fiat_np521_uint1 x399; + uint32_t x400; + fiat_np521_uint1 x401; + uint32_t x402; + fiat_np521_uint1 x403; + uint32_t x404; + uint32_t x405; + uint32_t x406; + uint32_t x407; + uint32_t x408; + uint32_t x409; + uint32_t x410; + uint32_t x411; + uint32_t x412; + uint32_t x413; + uint32_t x414; + uint32_t x415; + uint32_t x416; + uint32_t x417; + uint32_t x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + uint32_t x422; + uint32_t x423; + uint32_t x424; + uint32_t x425; + uint32_t x426; + uint32_t x427; + uint32_t x428; + uint32_t x429; + uint32_t x430; + uint32_t x431; + uint32_t x432; + uint32_t x433; + uint32_t x434; + uint32_t x435; + uint32_t x436; + uint32_t x437; + uint32_t x438; + uint32_t x439; + uint32_t x440; + fiat_np521_uint1 x441; + uint32_t x442; + fiat_np521_uint1 x443; + uint32_t x444; + fiat_np521_uint1 x445; + uint32_t x446; + fiat_np521_uint1 x447; + uint32_t x448; + fiat_np521_uint1 x449; + uint32_t x450; + fiat_np521_uint1 x451; + uint32_t x452; + fiat_np521_uint1 x453; + uint32_t x454; + fiat_np521_uint1 x455; + uint32_t x456; + fiat_np521_uint1 x457; + uint32_t x458; + fiat_np521_uint1 x459; + uint32_t x460; + fiat_np521_uint1 x461; + uint32_t x462; + fiat_np521_uint1 x463; + uint32_t x464; + fiat_np521_uint1 x465; + uint32_t x466; + fiat_np521_uint1 x467; + uint32_t x468; + fiat_np521_uint1 x469; + uint32_t x470; + fiat_np521_uint1 x471; + uint32_t x472; + fiat_np521_uint1 x473; + uint32_t x474; + fiat_np521_uint1 x475; + uint32_t x476; + fiat_np521_uint1 x477; + uint32_t x478; + fiat_np521_uint1 x479; + uint32_t x480; + fiat_np521_uint1 x481; + uint32_t x482; + fiat_np521_uint1 x483; + uint32_t x484; + fiat_np521_uint1 x485; + uint32_t x486; + fiat_np521_uint1 x487; + uint32_t x488; + fiat_np521_uint1 x489; + uint32_t x490; + fiat_np521_uint1 x491; + uint32_t x492; + fiat_np521_uint1 x493; + uint32_t x494; + fiat_np521_uint1 x495; + uint32_t x496; + fiat_np521_uint1 x497; + uint32_t x498; + fiat_np521_uint1 x499; + uint32_t x500; + fiat_np521_uint1 x501; + uint32_t x502; + fiat_np521_uint1 x503; + uint32_t x504; + fiat_np521_uint1 x505; + uint32_t x506; + fiat_np521_uint1 x507; + uint32_t x508; + fiat_np521_uint1 x509; + uint32_t x510; + fiat_np521_uint1 x511; + uint32_t x512; + fiat_np521_uint1 x513; + uint32_t x514; + fiat_np521_uint1 x515; + uint32_t x516; + fiat_np521_uint1 x517; + uint32_t x518; + fiat_np521_uint1 x519; + uint32_t x520; + fiat_np521_uint1 x521; + uint32_t x522; + fiat_np521_uint1 x523; + uint32_t x524; + fiat_np521_uint1 x525; + uint32_t x526; + fiat_np521_uint1 x527; + uint32_t x528; + fiat_np521_uint1 x529; + uint32_t x530; + fiat_np521_uint1 x531; + uint32_t x532; + fiat_np521_uint1 x533; + uint32_t x534; + fiat_np521_uint1 x535; + uint32_t x536; + fiat_np521_uint1 x537; + uint32_t x538; + uint32_t x539; + uint32_t x540; + uint32_t x541; + uint32_t x542; + uint32_t x543; + uint32_t x544; + uint32_t x545; + uint32_t x546; + uint32_t x547; + uint32_t x548; + uint32_t x549; + uint32_t x550; + uint32_t x551; + uint32_t x552; + uint32_t x553; + uint32_t x554; + uint32_t x555; + uint32_t x556; + uint32_t x557; + uint32_t x558; + uint32_t x559; + uint32_t x560; + uint32_t x561; + uint32_t x562; + uint32_t x563; + uint32_t x564; + uint32_t x565; + uint32_t x566; + uint32_t x567; + uint32_t x568; + uint32_t x569; + uint32_t x570; + uint32_t x571; + uint32_t x572; + uint32_t x573; + uint32_t x574; + fiat_np521_uint1 x575; + uint32_t x576; + fiat_np521_uint1 x577; + uint32_t x578; + fiat_np521_uint1 x579; + uint32_t x580; + fiat_np521_uint1 x581; + uint32_t x582; + fiat_np521_uint1 x583; + uint32_t x584; + fiat_np521_uint1 x585; + uint32_t x586; + fiat_np521_uint1 x587; + uint32_t x588; + fiat_np521_uint1 x589; + uint32_t x590; + fiat_np521_uint1 x591; + uint32_t x592; + fiat_np521_uint1 x593; + uint32_t x594; + fiat_np521_uint1 x595; + uint32_t x596; + fiat_np521_uint1 x597; + uint32_t x598; + fiat_np521_uint1 x599; + uint32_t x600; + fiat_np521_uint1 x601; + uint32_t x602; + fiat_np521_uint1 x603; + uint32_t x604; + fiat_np521_uint1 x605; + uint32_t x606; + fiat_np521_uint1 x607; + uint32_t x608; + fiat_np521_uint1 x609; + uint32_t x610; + fiat_np521_uint1 x611; + uint32_t x612; + fiat_np521_uint1 x613; + uint32_t x614; + fiat_np521_uint1 x615; + uint32_t x616; + fiat_np521_uint1 x617; + uint32_t x618; + fiat_np521_uint1 x619; + uint32_t x620; + fiat_np521_uint1 x621; + uint32_t x622; + fiat_np521_uint1 x623; + uint32_t x624; + fiat_np521_uint1 x625; + uint32_t x626; + fiat_np521_uint1 x627; + uint32_t x628; + fiat_np521_uint1 x629; + uint32_t x630; + fiat_np521_uint1 x631; + uint32_t x632; + fiat_np521_uint1 x633; + uint32_t x634; + fiat_np521_uint1 x635; + uint32_t x636; + fiat_np521_uint1 x637; + uint32_t x638; + fiat_np521_uint1 x639; + uint32_t x640; + fiat_np521_uint1 x641; + uint32_t x642; + fiat_np521_uint1 x643; + uint32_t x644; + fiat_np521_uint1 x645; + uint32_t x646; + fiat_np521_uint1 x647; + uint32_t x648; + fiat_np521_uint1 x649; + uint32_t x650; + fiat_np521_uint1 x651; + uint32_t x652; + fiat_np521_uint1 x653; + uint32_t x654; + fiat_np521_uint1 x655; + uint32_t x656; + fiat_np521_uint1 x657; + uint32_t x658; + fiat_np521_uint1 x659; + uint32_t x660; + fiat_np521_uint1 x661; + uint32_t x662; + fiat_np521_uint1 x663; + uint32_t x664; + fiat_np521_uint1 x665; + uint32_t x666; + fiat_np521_uint1 x667; + uint32_t x668; + fiat_np521_uint1 x669; + uint32_t x670; + fiat_np521_uint1 x671; + uint32_t x672; + uint32_t x673; + uint32_t x674; + uint32_t x675; + uint32_t x676; + uint32_t x677; + uint32_t x678; + uint32_t x679; + uint32_t x680; + uint32_t x681; + uint32_t x682; + uint32_t x683; + uint32_t x684; + uint32_t x685; + uint32_t x686; + uint32_t x687; + uint32_t x688; + uint32_t x689; + uint32_t x690; + uint32_t x691; + uint32_t x692; + uint32_t x693; + uint32_t x694; + uint32_t x695; + uint32_t x696; + uint32_t x697; + uint32_t x698; + uint32_t x699; + uint32_t x700; + uint32_t x701; + uint32_t x702; + uint32_t x703; + uint32_t x704; + uint32_t x705; + uint32_t x706; + uint32_t x707; + uint32_t x708; + fiat_np521_uint1 x709; + uint32_t x710; + fiat_np521_uint1 x711; + uint32_t x712; + fiat_np521_uint1 x713; + uint32_t x714; + fiat_np521_uint1 x715; + uint32_t x716; + fiat_np521_uint1 x717; + uint32_t x718; + fiat_np521_uint1 x719; + uint32_t x720; + fiat_np521_uint1 x721; + uint32_t x722; + fiat_np521_uint1 x723; + uint32_t x724; + fiat_np521_uint1 x725; + uint32_t x726; + fiat_np521_uint1 x727; + uint32_t x728; + fiat_np521_uint1 x729; + uint32_t x730; + fiat_np521_uint1 x731; + uint32_t x732; + fiat_np521_uint1 x733; + uint32_t x734; + fiat_np521_uint1 x735; + uint32_t x736; + fiat_np521_uint1 x737; + uint32_t x738; + fiat_np521_uint1 x739; + uint32_t x740; + fiat_np521_uint1 x741; + uint32_t x742; + fiat_np521_uint1 x743; + uint32_t x744; + fiat_np521_uint1 x745; + uint32_t x746; + fiat_np521_uint1 x747; + uint32_t x748; + fiat_np521_uint1 x749; + uint32_t x750; + fiat_np521_uint1 x751; + uint32_t x752; + fiat_np521_uint1 x753; + uint32_t x754; + fiat_np521_uint1 x755; + uint32_t x756; + fiat_np521_uint1 x757; + uint32_t x758; + fiat_np521_uint1 x759; + uint32_t x760; + fiat_np521_uint1 x761; + uint32_t x762; + fiat_np521_uint1 x763; + uint32_t x764; + fiat_np521_uint1 x765; + uint32_t x766; + fiat_np521_uint1 x767; + uint32_t x768; + fiat_np521_uint1 x769; + uint32_t x770; + fiat_np521_uint1 x771; + uint32_t x772; + fiat_np521_uint1 x773; + uint32_t x774; + fiat_np521_uint1 x775; + uint32_t x776; + fiat_np521_uint1 x777; + uint32_t x778; + fiat_np521_uint1 x779; + uint32_t x780; + fiat_np521_uint1 x781; + uint32_t x782; + fiat_np521_uint1 x783; + uint32_t x784; + fiat_np521_uint1 x785; + uint32_t x786; + fiat_np521_uint1 x787; + uint32_t x788; + fiat_np521_uint1 x789; + uint32_t x790; + fiat_np521_uint1 x791; + uint32_t x792; + fiat_np521_uint1 x793; + uint32_t x794; + fiat_np521_uint1 x795; + uint32_t x796; + fiat_np521_uint1 x797; + uint32_t x798; + fiat_np521_uint1 x799; + uint32_t x800; + fiat_np521_uint1 x801; + uint32_t x802; + fiat_np521_uint1 x803; + uint32_t x804; + fiat_np521_uint1 x805; + uint32_t x806; + uint32_t x807; + uint32_t x808; + uint32_t x809; + uint32_t x810; + uint32_t x811; + uint32_t x812; + uint32_t x813; + uint32_t x814; + uint32_t x815; + uint32_t x816; + uint32_t x817; + uint32_t x818; + uint32_t x819; + uint32_t x820; + uint32_t x821; + uint32_t x822; + uint32_t x823; + uint32_t x824; + uint32_t x825; + uint32_t x826; + uint32_t x827; + uint32_t x828; + uint32_t x829; + uint32_t x830; + uint32_t x831; + uint32_t x832; + uint32_t x833; + uint32_t x834; + uint32_t x835; + uint32_t x836; + uint32_t x837; + uint32_t x838; + uint32_t x839; + uint32_t x840; + uint32_t x841; + uint32_t x842; + fiat_np521_uint1 x843; + uint32_t x844; + fiat_np521_uint1 x845; + uint32_t x846; + fiat_np521_uint1 x847; + uint32_t x848; + fiat_np521_uint1 x849; + uint32_t x850; + fiat_np521_uint1 x851; + uint32_t x852; + fiat_np521_uint1 x853; + uint32_t x854; + fiat_np521_uint1 x855; + uint32_t x856; + fiat_np521_uint1 x857; + uint32_t x858; + fiat_np521_uint1 x859; + uint32_t x860; + fiat_np521_uint1 x861; + uint32_t x862; + fiat_np521_uint1 x863; + uint32_t x864; + fiat_np521_uint1 x865; + uint32_t x866; + fiat_np521_uint1 x867; + uint32_t x868; + fiat_np521_uint1 x869; + uint32_t x870; + fiat_np521_uint1 x871; + uint32_t x872; + fiat_np521_uint1 x873; + uint32_t x874; + fiat_np521_uint1 x875; + uint32_t x876; + fiat_np521_uint1 x877; + uint32_t x878; + fiat_np521_uint1 x879; + uint32_t x880; + fiat_np521_uint1 x881; + uint32_t x882; + fiat_np521_uint1 x883; + uint32_t x884; + fiat_np521_uint1 x885; + uint32_t x886; + fiat_np521_uint1 x887; + uint32_t x888; + fiat_np521_uint1 x889; + uint32_t x890; + fiat_np521_uint1 x891; + uint32_t x892; + fiat_np521_uint1 x893; + uint32_t x894; + fiat_np521_uint1 x895; + uint32_t x896; + fiat_np521_uint1 x897; + uint32_t x898; + fiat_np521_uint1 x899; + uint32_t x900; + fiat_np521_uint1 x901; + uint32_t x902; + fiat_np521_uint1 x903; + uint32_t x904; + fiat_np521_uint1 x905; + uint32_t x906; + fiat_np521_uint1 x907; + uint32_t x908; + fiat_np521_uint1 x909; + uint32_t x910; + fiat_np521_uint1 x911; + uint32_t x912; + fiat_np521_uint1 x913; + uint32_t x914; + fiat_np521_uint1 x915; + uint32_t x916; + fiat_np521_uint1 x917; + uint32_t x918; + fiat_np521_uint1 x919; + uint32_t x920; + fiat_np521_uint1 x921; + uint32_t x922; + fiat_np521_uint1 x923; + uint32_t x924; + fiat_np521_uint1 x925; + uint32_t x926; + fiat_np521_uint1 x927; + uint32_t x928; + fiat_np521_uint1 x929; + uint32_t x930; + fiat_np521_uint1 x931; + uint32_t x932; + fiat_np521_uint1 x933; + uint32_t x934; + fiat_np521_uint1 x935; + uint32_t x936; + fiat_np521_uint1 x937; + uint32_t x938; + fiat_np521_uint1 x939; + uint32_t x940; + uint32_t x941; + uint32_t x942; + uint32_t x943; + uint32_t x944; + uint32_t x945; + uint32_t x946; + uint32_t x947; + uint32_t x948; + uint32_t x949; + uint32_t x950; + uint32_t x951; + uint32_t x952; + uint32_t x953; + uint32_t x954; + uint32_t x955; + uint32_t x956; + uint32_t x957; + uint32_t x958; + uint32_t x959; + uint32_t x960; + uint32_t x961; + uint32_t x962; + uint32_t x963; + uint32_t x964; + uint32_t x965; + uint32_t x966; + uint32_t x967; + uint32_t x968; + uint32_t x969; + uint32_t x970; + uint32_t x971; + uint32_t x972; + uint32_t x973; + uint32_t x974; + uint32_t x975; + uint32_t x976; + fiat_np521_uint1 x977; + uint32_t x978; + fiat_np521_uint1 x979; + uint32_t x980; + fiat_np521_uint1 x981; + uint32_t x982; + fiat_np521_uint1 x983; + uint32_t x984; + fiat_np521_uint1 x985; + uint32_t x986; + fiat_np521_uint1 x987; + uint32_t x988; + fiat_np521_uint1 x989; + uint32_t x990; + fiat_np521_uint1 x991; + uint32_t x992; + fiat_np521_uint1 x993; + uint32_t x994; + fiat_np521_uint1 x995; + uint32_t x996; + fiat_np521_uint1 x997; + uint32_t x998; + fiat_np521_uint1 x999; + uint32_t x1000; + fiat_np521_uint1 x1001; + uint32_t x1002; + fiat_np521_uint1 x1003; + uint32_t x1004; + fiat_np521_uint1 x1005; + uint32_t x1006; + fiat_np521_uint1 x1007; + uint32_t x1008; + fiat_np521_uint1 x1009; + uint32_t x1010; + fiat_np521_uint1 x1011; + uint32_t x1012; + fiat_np521_uint1 x1013; + uint32_t x1014; + fiat_np521_uint1 x1015; + uint32_t x1016; + fiat_np521_uint1 x1017; + uint32_t x1018; + fiat_np521_uint1 x1019; + uint32_t x1020; + fiat_np521_uint1 x1021; + uint32_t x1022; + fiat_np521_uint1 x1023; + uint32_t x1024; + fiat_np521_uint1 x1025; + uint32_t x1026; + fiat_np521_uint1 x1027; + uint32_t x1028; + fiat_np521_uint1 x1029; + uint32_t x1030; + fiat_np521_uint1 x1031; + uint32_t x1032; + fiat_np521_uint1 x1033; + uint32_t x1034; + fiat_np521_uint1 x1035; + uint32_t x1036; + fiat_np521_uint1 x1037; + uint32_t x1038; + fiat_np521_uint1 x1039; + uint32_t x1040; + fiat_np521_uint1 x1041; + uint32_t x1042; + fiat_np521_uint1 x1043; + uint32_t x1044; + fiat_np521_uint1 x1045; + uint32_t x1046; + fiat_np521_uint1 x1047; + uint32_t x1048; + fiat_np521_uint1 x1049; + uint32_t x1050; + fiat_np521_uint1 x1051; + uint32_t x1052; + fiat_np521_uint1 x1053; + uint32_t x1054; + fiat_np521_uint1 x1055; + uint32_t x1056; + fiat_np521_uint1 x1057; + uint32_t x1058; + fiat_np521_uint1 x1059; + uint32_t x1060; + fiat_np521_uint1 x1061; + uint32_t x1062; + fiat_np521_uint1 x1063; + uint32_t x1064; + fiat_np521_uint1 x1065; + uint32_t x1066; + fiat_np521_uint1 x1067; + uint32_t x1068; + fiat_np521_uint1 x1069; + uint32_t x1070; + fiat_np521_uint1 x1071; + uint32_t x1072; + fiat_np521_uint1 x1073; + uint32_t x1074; + uint32_t x1075; + uint32_t x1076; + uint32_t x1077; + uint32_t x1078; + uint32_t x1079; + uint32_t x1080; + uint32_t x1081; + uint32_t x1082; + uint32_t x1083; + uint32_t x1084; + uint32_t x1085; + uint32_t x1086; + uint32_t x1087; + uint32_t x1088; + uint32_t x1089; + uint32_t x1090; + uint32_t x1091; + uint32_t x1092; + uint32_t x1093; + uint32_t x1094; + uint32_t x1095; + uint32_t x1096; + uint32_t x1097; + uint32_t x1098; + uint32_t x1099; + uint32_t x1100; + uint32_t x1101; + uint32_t x1102; + uint32_t x1103; + uint32_t x1104; + uint32_t x1105; + uint32_t x1106; + uint32_t x1107; + uint32_t x1108; + uint32_t x1109; + uint32_t x1110; + fiat_np521_uint1 x1111; + uint32_t x1112; + fiat_np521_uint1 x1113; + uint32_t x1114; + fiat_np521_uint1 x1115; + uint32_t x1116; + fiat_np521_uint1 x1117; + uint32_t x1118; + fiat_np521_uint1 x1119; + uint32_t x1120; + fiat_np521_uint1 x1121; + uint32_t x1122; + fiat_np521_uint1 x1123; + uint32_t x1124; + fiat_np521_uint1 x1125; + uint32_t x1126; + fiat_np521_uint1 x1127; + uint32_t x1128; + fiat_np521_uint1 x1129; + uint32_t x1130; + fiat_np521_uint1 x1131; + uint32_t x1132; + fiat_np521_uint1 x1133; + uint32_t x1134; + fiat_np521_uint1 x1135; + uint32_t x1136; + fiat_np521_uint1 x1137; + uint32_t x1138; + fiat_np521_uint1 x1139; + uint32_t x1140; + fiat_np521_uint1 x1141; + uint32_t x1142; + fiat_np521_uint1 x1143; + uint32_t x1144; + fiat_np521_uint1 x1145; + uint32_t x1146; + fiat_np521_uint1 x1147; + uint32_t x1148; + fiat_np521_uint1 x1149; + uint32_t x1150; + fiat_np521_uint1 x1151; + uint32_t x1152; + fiat_np521_uint1 x1153; + uint32_t x1154; + fiat_np521_uint1 x1155; + uint32_t x1156; + fiat_np521_uint1 x1157; + uint32_t x1158; + fiat_np521_uint1 x1159; + uint32_t x1160; + fiat_np521_uint1 x1161; + uint32_t x1162; + fiat_np521_uint1 x1163; + uint32_t x1164; + fiat_np521_uint1 x1165; + uint32_t x1166; + fiat_np521_uint1 x1167; + uint32_t x1168; + fiat_np521_uint1 x1169; + uint32_t x1170; + fiat_np521_uint1 x1171; + uint32_t x1172; + fiat_np521_uint1 x1173; + uint32_t x1174; + fiat_np521_uint1 x1175; + uint32_t x1176; + fiat_np521_uint1 x1177; + uint32_t x1178; + fiat_np521_uint1 x1179; + uint32_t x1180; + fiat_np521_uint1 x1181; + uint32_t x1182; + fiat_np521_uint1 x1183; + uint32_t x1184; + fiat_np521_uint1 x1185; + uint32_t x1186; + fiat_np521_uint1 x1187; + uint32_t x1188; + fiat_np521_uint1 x1189; + uint32_t x1190; + fiat_np521_uint1 x1191; + uint32_t x1192; + fiat_np521_uint1 x1193; + uint32_t x1194; + fiat_np521_uint1 x1195; + uint32_t x1196; + fiat_np521_uint1 x1197; + uint32_t x1198; + fiat_np521_uint1 x1199; + uint32_t x1200; + fiat_np521_uint1 x1201; + uint32_t x1202; + fiat_np521_uint1 x1203; + uint32_t x1204; + fiat_np521_uint1 x1205; + uint32_t x1206; + fiat_np521_uint1 x1207; + uint32_t x1208; + uint32_t x1209; + uint32_t x1210; + uint32_t x1211; + uint32_t x1212; + uint32_t x1213; + uint32_t x1214; + uint32_t x1215; + uint32_t x1216; + uint32_t x1217; + uint32_t x1218; + uint32_t x1219; + uint32_t x1220; + uint32_t x1221; + uint32_t x1222; + uint32_t x1223; + uint32_t x1224; + uint32_t x1225; + uint32_t x1226; + uint32_t x1227; + uint32_t x1228; + uint32_t x1229; + uint32_t x1230; + uint32_t x1231; + uint32_t x1232; + uint32_t x1233; + uint32_t x1234; + uint32_t x1235; + uint32_t x1236; + uint32_t x1237; + uint32_t x1238; + uint32_t x1239; + uint32_t x1240; + uint32_t x1241; + uint32_t x1242; + uint32_t x1243; + uint32_t x1244; + fiat_np521_uint1 x1245; + uint32_t x1246; + fiat_np521_uint1 x1247; + uint32_t x1248; + fiat_np521_uint1 x1249; + uint32_t x1250; + fiat_np521_uint1 x1251; + uint32_t x1252; + fiat_np521_uint1 x1253; + uint32_t x1254; + fiat_np521_uint1 x1255; + uint32_t x1256; + fiat_np521_uint1 x1257; + uint32_t x1258; + fiat_np521_uint1 x1259; + uint32_t x1260; + fiat_np521_uint1 x1261; + uint32_t x1262; + fiat_np521_uint1 x1263; + uint32_t x1264; + fiat_np521_uint1 x1265; + uint32_t x1266; + fiat_np521_uint1 x1267; + uint32_t x1268; + fiat_np521_uint1 x1269; + uint32_t x1270; + fiat_np521_uint1 x1271; + uint32_t x1272; + fiat_np521_uint1 x1273; + uint32_t x1274; + fiat_np521_uint1 x1275; + uint32_t x1276; + fiat_np521_uint1 x1277; + uint32_t x1278; + fiat_np521_uint1 x1279; + uint32_t x1280; + fiat_np521_uint1 x1281; + uint32_t x1282; + fiat_np521_uint1 x1283; + uint32_t x1284; + fiat_np521_uint1 x1285; + uint32_t x1286; + fiat_np521_uint1 x1287; + uint32_t x1288; + fiat_np521_uint1 x1289; + uint32_t x1290; + fiat_np521_uint1 x1291; + uint32_t x1292; + fiat_np521_uint1 x1293; + uint32_t x1294; + fiat_np521_uint1 x1295; + uint32_t x1296; + fiat_np521_uint1 x1297; + uint32_t x1298; + fiat_np521_uint1 x1299; + uint32_t x1300; + fiat_np521_uint1 x1301; + uint32_t x1302; + fiat_np521_uint1 x1303; + uint32_t x1304; + fiat_np521_uint1 x1305; + uint32_t x1306; + fiat_np521_uint1 x1307; + uint32_t x1308; + fiat_np521_uint1 x1309; + uint32_t x1310; + fiat_np521_uint1 x1311; + uint32_t x1312; + fiat_np521_uint1 x1313; + uint32_t x1314; + fiat_np521_uint1 x1315; + uint32_t x1316; + fiat_np521_uint1 x1317; + uint32_t x1318; + fiat_np521_uint1 x1319; + uint32_t x1320; + fiat_np521_uint1 x1321; + uint32_t x1322; + fiat_np521_uint1 x1323; + uint32_t x1324; + fiat_np521_uint1 x1325; + uint32_t x1326; + fiat_np521_uint1 x1327; + uint32_t x1328; + fiat_np521_uint1 x1329; + uint32_t x1330; + fiat_np521_uint1 x1331; + uint32_t x1332; + fiat_np521_uint1 x1333; + uint32_t x1334; + fiat_np521_uint1 x1335; + uint32_t x1336; + fiat_np521_uint1 x1337; + uint32_t x1338; + fiat_np521_uint1 x1339; + uint32_t x1340; + fiat_np521_uint1 x1341; + uint32_t x1342; + uint32_t x1343; + uint32_t x1344; + uint32_t x1345; + uint32_t x1346; + uint32_t x1347; + uint32_t x1348; + uint32_t x1349; + uint32_t x1350; + uint32_t x1351; + uint32_t x1352; + uint32_t x1353; + uint32_t x1354; + uint32_t x1355; + uint32_t x1356; + uint32_t x1357; + uint32_t x1358; + uint32_t x1359; + uint32_t x1360; + uint32_t x1361; + uint32_t x1362; + uint32_t x1363; + uint32_t x1364; + uint32_t x1365; + uint32_t x1366; + uint32_t x1367; + uint32_t x1368; + uint32_t x1369; + uint32_t x1370; + uint32_t x1371; + uint32_t x1372; + uint32_t x1373; + uint32_t x1374; + uint32_t x1375; + uint32_t x1376; + uint32_t x1377; + uint32_t x1378; + fiat_np521_uint1 x1379; + uint32_t x1380; + fiat_np521_uint1 x1381; + uint32_t x1382; + fiat_np521_uint1 x1383; + uint32_t x1384; + fiat_np521_uint1 x1385; + uint32_t x1386; + fiat_np521_uint1 x1387; + uint32_t x1388; + fiat_np521_uint1 x1389; + uint32_t x1390; + fiat_np521_uint1 x1391; + uint32_t x1392; + fiat_np521_uint1 x1393; + uint32_t x1394; + fiat_np521_uint1 x1395; + uint32_t x1396; + fiat_np521_uint1 x1397; + uint32_t x1398; + fiat_np521_uint1 x1399; + uint32_t x1400; + fiat_np521_uint1 x1401; + uint32_t x1402; + fiat_np521_uint1 x1403; + uint32_t x1404; + fiat_np521_uint1 x1405; + uint32_t x1406; + fiat_np521_uint1 x1407; + uint32_t x1408; + fiat_np521_uint1 x1409; + uint32_t x1410; + fiat_np521_uint1 x1411; + uint32_t x1412; + fiat_np521_uint1 x1413; + uint32_t x1414; + fiat_np521_uint1 x1415; + uint32_t x1416; + fiat_np521_uint1 x1417; + uint32_t x1418; + fiat_np521_uint1 x1419; + uint32_t x1420; + fiat_np521_uint1 x1421; + uint32_t x1422; + fiat_np521_uint1 x1423; + uint32_t x1424; + fiat_np521_uint1 x1425; + uint32_t x1426; + fiat_np521_uint1 x1427; + uint32_t x1428; + fiat_np521_uint1 x1429; + uint32_t x1430; + fiat_np521_uint1 x1431; + uint32_t x1432; + fiat_np521_uint1 x1433; + uint32_t x1434; + fiat_np521_uint1 x1435; + uint32_t x1436; + fiat_np521_uint1 x1437; + uint32_t x1438; + fiat_np521_uint1 x1439; + uint32_t x1440; + fiat_np521_uint1 x1441; + uint32_t x1442; + fiat_np521_uint1 x1443; + uint32_t x1444; + fiat_np521_uint1 x1445; + uint32_t x1446; + fiat_np521_uint1 x1447; + uint32_t x1448; + fiat_np521_uint1 x1449; + uint32_t x1450; + fiat_np521_uint1 x1451; + uint32_t x1452; + fiat_np521_uint1 x1453; + uint32_t x1454; + fiat_np521_uint1 x1455; + uint32_t x1456; + fiat_np521_uint1 x1457; + uint32_t x1458; + fiat_np521_uint1 x1459; + uint32_t x1460; + fiat_np521_uint1 x1461; + uint32_t x1462; + fiat_np521_uint1 x1463; + uint32_t x1464; + fiat_np521_uint1 x1465; + uint32_t x1466; + fiat_np521_uint1 x1467; + uint32_t x1468; + fiat_np521_uint1 x1469; + uint32_t x1470; + fiat_np521_uint1 x1471; + uint32_t x1472; + fiat_np521_uint1 x1473; + uint32_t x1474; + fiat_np521_uint1 x1475; + uint32_t x1476; + uint32_t x1477; + uint32_t x1478; + uint32_t x1479; + uint32_t x1480; + uint32_t x1481; + uint32_t x1482; + uint32_t x1483; + uint32_t x1484; + uint32_t x1485; + uint32_t x1486; + uint32_t x1487; + uint32_t x1488; + uint32_t x1489; + uint32_t x1490; + uint32_t x1491; + uint32_t x1492; + uint32_t x1493; + uint32_t x1494; + uint32_t x1495; + uint32_t x1496; + uint32_t x1497; + uint32_t x1498; + uint32_t x1499; + uint32_t x1500; + uint32_t x1501; + uint32_t x1502; + uint32_t x1503; + uint32_t x1504; + uint32_t x1505; + uint32_t x1506; + uint32_t x1507; + uint32_t x1508; + uint32_t x1509; + uint32_t x1510; + uint32_t x1511; + uint32_t x1512; + fiat_np521_uint1 x1513; + uint32_t x1514; + fiat_np521_uint1 x1515; + uint32_t x1516; + fiat_np521_uint1 x1517; + uint32_t x1518; + fiat_np521_uint1 x1519; + uint32_t x1520; + fiat_np521_uint1 x1521; + uint32_t x1522; + fiat_np521_uint1 x1523; + uint32_t x1524; + fiat_np521_uint1 x1525; + uint32_t x1526; + fiat_np521_uint1 x1527; + uint32_t x1528; + fiat_np521_uint1 x1529; + uint32_t x1530; + fiat_np521_uint1 x1531; + uint32_t x1532; + fiat_np521_uint1 x1533; + uint32_t x1534; + fiat_np521_uint1 x1535; + uint32_t x1536; + fiat_np521_uint1 x1537; + uint32_t x1538; + fiat_np521_uint1 x1539; + uint32_t x1540; + fiat_np521_uint1 x1541; + uint32_t x1542; + fiat_np521_uint1 x1543; + uint32_t x1544; + fiat_np521_uint1 x1545; + uint32_t x1546; + fiat_np521_uint1 x1547; + uint32_t x1548; + fiat_np521_uint1 x1549; + uint32_t x1550; + fiat_np521_uint1 x1551; + uint32_t x1552; + fiat_np521_uint1 x1553; + uint32_t x1554; + fiat_np521_uint1 x1555; + uint32_t x1556; + fiat_np521_uint1 x1557; + uint32_t x1558; + fiat_np521_uint1 x1559; + uint32_t x1560; + fiat_np521_uint1 x1561; + uint32_t x1562; + fiat_np521_uint1 x1563; + uint32_t x1564; + fiat_np521_uint1 x1565; + uint32_t x1566; + fiat_np521_uint1 x1567; + uint32_t x1568; + fiat_np521_uint1 x1569; + uint32_t x1570; + fiat_np521_uint1 x1571; + uint32_t x1572; + fiat_np521_uint1 x1573; + uint32_t x1574; + fiat_np521_uint1 x1575; + uint32_t x1576; + fiat_np521_uint1 x1577; + uint32_t x1578; + fiat_np521_uint1 x1579; + uint32_t x1580; + fiat_np521_uint1 x1581; + uint32_t x1582; + fiat_np521_uint1 x1583; + uint32_t x1584; + fiat_np521_uint1 x1585; + uint32_t x1586; + fiat_np521_uint1 x1587; + uint32_t x1588; + fiat_np521_uint1 x1589; + uint32_t x1590; + fiat_np521_uint1 x1591; + uint32_t x1592; + fiat_np521_uint1 x1593; + uint32_t x1594; + fiat_np521_uint1 x1595; + uint32_t x1596; + fiat_np521_uint1 x1597; + uint32_t x1598; + fiat_np521_uint1 x1599; + uint32_t x1600; + fiat_np521_uint1 x1601; + uint32_t x1602; + fiat_np521_uint1 x1603; + uint32_t x1604; + fiat_np521_uint1 x1605; + uint32_t x1606; + fiat_np521_uint1 x1607; + uint32_t x1608; + fiat_np521_uint1 x1609; + uint32_t x1610; + uint32_t x1611; + uint32_t x1612; + uint32_t x1613; + uint32_t x1614; + uint32_t x1615; + uint32_t x1616; + uint32_t x1617; + uint32_t x1618; + uint32_t x1619; + uint32_t x1620; + uint32_t x1621; + uint32_t x1622; + uint32_t x1623; + uint32_t x1624; + uint32_t x1625; + uint32_t x1626; + uint32_t x1627; + uint32_t x1628; + uint32_t x1629; + uint32_t x1630; + uint32_t x1631; + uint32_t x1632; + uint32_t x1633; + uint32_t x1634; + uint32_t x1635; + uint32_t x1636; + uint32_t x1637; + uint32_t x1638; + uint32_t x1639; + uint32_t x1640; + uint32_t x1641; + uint32_t x1642; + uint32_t x1643; + uint32_t x1644; + uint32_t x1645; + uint32_t x1646; + fiat_np521_uint1 x1647; + uint32_t x1648; + fiat_np521_uint1 x1649; + uint32_t x1650; + fiat_np521_uint1 x1651; + uint32_t x1652; + fiat_np521_uint1 x1653; + uint32_t x1654; + fiat_np521_uint1 x1655; + uint32_t x1656; + fiat_np521_uint1 x1657; + uint32_t x1658; + fiat_np521_uint1 x1659; + uint32_t x1660; + fiat_np521_uint1 x1661; + uint32_t x1662; + fiat_np521_uint1 x1663; + uint32_t x1664; + fiat_np521_uint1 x1665; + uint32_t x1666; + fiat_np521_uint1 x1667; + uint32_t x1668; + fiat_np521_uint1 x1669; + uint32_t x1670; + fiat_np521_uint1 x1671; + uint32_t x1672; + fiat_np521_uint1 x1673; + uint32_t x1674; + fiat_np521_uint1 x1675; + uint32_t x1676; + fiat_np521_uint1 x1677; + uint32_t x1678; + fiat_np521_uint1 x1679; + uint32_t x1680; + fiat_np521_uint1 x1681; + uint32_t x1682; + fiat_np521_uint1 x1683; + uint32_t x1684; + fiat_np521_uint1 x1685; + uint32_t x1686; + fiat_np521_uint1 x1687; + uint32_t x1688; + fiat_np521_uint1 x1689; + uint32_t x1690; + fiat_np521_uint1 x1691; + uint32_t x1692; + fiat_np521_uint1 x1693; + uint32_t x1694; + fiat_np521_uint1 x1695; + uint32_t x1696; + fiat_np521_uint1 x1697; + uint32_t x1698; + fiat_np521_uint1 x1699; + uint32_t x1700; + fiat_np521_uint1 x1701; + uint32_t x1702; + fiat_np521_uint1 x1703; + uint32_t x1704; + fiat_np521_uint1 x1705; + uint32_t x1706; + fiat_np521_uint1 x1707; + uint32_t x1708; + fiat_np521_uint1 x1709; + uint32_t x1710; + fiat_np521_uint1 x1711; + uint32_t x1712; + fiat_np521_uint1 x1713; + uint32_t x1714; + fiat_np521_uint1 x1715; + uint32_t x1716; + fiat_np521_uint1 x1717; + uint32_t x1718; + fiat_np521_uint1 x1719; + uint32_t x1720; + fiat_np521_uint1 x1721; + uint32_t x1722; + fiat_np521_uint1 x1723; + uint32_t x1724; + fiat_np521_uint1 x1725; + uint32_t x1726; + fiat_np521_uint1 x1727; + uint32_t x1728; + fiat_np521_uint1 x1729; + uint32_t x1730; + fiat_np521_uint1 x1731; + uint32_t x1732; + fiat_np521_uint1 x1733; + uint32_t x1734; + fiat_np521_uint1 x1735; + uint32_t x1736; + fiat_np521_uint1 x1737; + uint32_t x1738; + fiat_np521_uint1 x1739; + uint32_t x1740; + fiat_np521_uint1 x1741; + uint32_t x1742; + fiat_np521_uint1 x1743; + uint32_t x1744; + uint32_t x1745; + uint32_t x1746; + uint32_t x1747; + uint32_t x1748; + uint32_t x1749; + uint32_t x1750; + uint32_t x1751; + uint32_t x1752; + uint32_t x1753; + uint32_t x1754; + uint32_t x1755; + uint32_t x1756; + uint32_t x1757; + uint32_t x1758; + uint32_t x1759; + uint32_t x1760; + uint32_t x1761; + uint32_t x1762; + uint32_t x1763; + uint32_t x1764; + uint32_t x1765; + uint32_t x1766; + uint32_t x1767; + uint32_t x1768; + uint32_t x1769; + uint32_t x1770; + uint32_t x1771; + uint32_t x1772; + uint32_t x1773; + uint32_t x1774; + uint32_t x1775; + uint32_t x1776; + uint32_t x1777; + uint32_t x1778; + uint32_t x1779; + uint32_t x1780; + fiat_np521_uint1 x1781; + uint32_t x1782; + fiat_np521_uint1 x1783; + uint32_t x1784; + fiat_np521_uint1 x1785; + uint32_t x1786; + fiat_np521_uint1 x1787; + uint32_t x1788; + fiat_np521_uint1 x1789; + uint32_t x1790; + fiat_np521_uint1 x1791; + uint32_t x1792; + fiat_np521_uint1 x1793; + uint32_t x1794; + fiat_np521_uint1 x1795; + uint32_t x1796; + fiat_np521_uint1 x1797; + uint32_t x1798; + fiat_np521_uint1 x1799; + uint32_t x1800; + fiat_np521_uint1 x1801; + uint32_t x1802; + fiat_np521_uint1 x1803; + uint32_t x1804; + fiat_np521_uint1 x1805; + uint32_t x1806; + fiat_np521_uint1 x1807; + uint32_t x1808; + fiat_np521_uint1 x1809; + uint32_t x1810; + fiat_np521_uint1 x1811; + uint32_t x1812; + fiat_np521_uint1 x1813; + uint32_t x1814; + fiat_np521_uint1 x1815; + uint32_t x1816; + fiat_np521_uint1 x1817; + uint32_t x1818; + fiat_np521_uint1 x1819; + uint32_t x1820; + fiat_np521_uint1 x1821; + uint32_t x1822; + fiat_np521_uint1 x1823; + uint32_t x1824; + fiat_np521_uint1 x1825; + uint32_t x1826; + fiat_np521_uint1 x1827; + uint32_t x1828; + fiat_np521_uint1 x1829; + uint32_t x1830; + fiat_np521_uint1 x1831; + uint32_t x1832; + fiat_np521_uint1 x1833; + uint32_t x1834; + fiat_np521_uint1 x1835; + uint32_t x1836; + fiat_np521_uint1 x1837; + uint32_t x1838; + fiat_np521_uint1 x1839; + uint32_t x1840; + fiat_np521_uint1 x1841; + uint32_t x1842; + fiat_np521_uint1 x1843; + uint32_t x1844; + fiat_np521_uint1 x1845; + uint32_t x1846; + fiat_np521_uint1 x1847; + uint32_t x1848; + fiat_np521_uint1 x1849; + uint32_t x1850; + fiat_np521_uint1 x1851; + uint32_t x1852; + fiat_np521_uint1 x1853; + uint32_t x1854; + fiat_np521_uint1 x1855; + uint32_t x1856; + fiat_np521_uint1 x1857; + uint32_t x1858; + fiat_np521_uint1 x1859; + uint32_t x1860; + fiat_np521_uint1 x1861; + uint32_t x1862; + fiat_np521_uint1 x1863; + uint32_t x1864; + fiat_np521_uint1 x1865; + uint32_t x1866; + fiat_np521_uint1 x1867; + uint32_t x1868; + fiat_np521_uint1 x1869; + uint32_t x1870; + fiat_np521_uint1 x1871; + uint32_t x1872; + fiat_np521_uint1 x1873; + uint32_t x1874; + fiat_np521_uint1 x1875; + uint32_t x1876; + fiat_np521_uint1 x1877; + uint32_t x1878; + uint32_t x1879; + uint32_t x1880; + uint32_t x1881; + uint32_t x1882; + uint32_t x1883; + uint32_t x1884; + uint32_t x1885; + uint32_t x1886; + uint32_t x1887; + uint32_t x1888; + uint32_t x1889; + uint32_t x1890; + uint32_t x1891; + uint32_t x1892; + uint32_t x1893; + uint32_t x1894; + uint32_t x1895; + uint32_t x1896; + uint32_t x1897; + uint32_t x1898; + uint32_t x1899; + uint32_t x1900; + uint32_t x1901; + uint32_t x1902; + uint32_t x1903; + uint32_t x1904; + uint32_t x1905; + uint32_t x1906; + uint32_t x1907; + uint32_t x1908; + uint32_t x1909; + uint32_t x1910; + uint32_t x1911; + uint32_t x1912; + uint32_t x1913; + uint32_t x1914; + fiat_np521_uint1 x1915; + uint32_t x1916; + fiat_np521_uint1 x1917; + uint32_t x1918; + fiat_np521_uint1 x1919; + uint32_t x1920; + fiat_np521_uint1 x1921; + uint32_t x1922; + fiat_np521_uint1 x1923; + uint32_t x1924; + fiat_np521_uint1 x1925; + uint32_t x1926; + fiat_np521_uint1 x1927; + uint32_t x1928; + fiat_np521_uint1 x1929; + uint32_t x1930; + fiat_np521_uint1 x1931; + uint32_t x1932; + fiat_np521_uint1 x1933; + uint32_t x1934; + fiat_np521_uint1 x1935; + uint32_t x1936; + fiat_np521_uint1 x1937; + uint32_t x1938; + fiat_np521_uint1 x1939; + uint32_t x1940; + fiat_np521_uint1 x1941; + uint32_t x1942; + fiat_np521_uint1 x1943; + uint32_t x1944; + fiat_np521_uint1 x1945; + uint32_t x1946; + fiat_np521_uint1 x1947; + uint32_t x1948; + fiat_np521_uint1 x1949; + uint32_t x1950; + fiat_np521_uint1 x1951; + uint32_t x1952; + fiat_np521_uint1 x1953; + uint32_t x1954; + fiat_np521_uint1 x1955; + uint32_t x1956; + fiat_np521_uint1 x1957; + uint32_t x1958; + fiat_np521_uint1 x1959; + uint32_t x1960; + fiat_np521_uint1 x1961; + uint32_t x1962; + fiat_np521_uint1 x1963; + uint32_t x1964; + fiat_np521_uint1 x1965; + uint32_t x1966; + fiat_np521_uint1 x1967; + uint32_t x1968; + fiat_np521_uint1 x1969; + uint32_t x1970; + fiat_np521_uint1 x1971; + uint32_t x1972; + fiat_np521_uint1 x1973; + uint32_t x1974; + fiat_np521_uint1 x1975; + uint32_t x1976; + fiat_np521_uint1 x1977; + uint32_t x1978; + fiat_np521_uint1 x1979; + uint32_t x1980; + fiat_np521_uint1 x1981; + uint32_t x1982; + fiat_np521_uint1 x1983; + uint32_t x1984; + fiat_np521_uint1 x1985; + uint32_t x1986; + fiat_np521_uint1 x1987; + uint32_t x1988; + fiat_np521_uint1 x1989; + uint32_t x1990; + fiat_np521_uint1 x1991; + uint32_t x1992; + fiat_np521_uint1 x1993; + uint32_t x1994; + fiat_np521_uint1 x1995; + uint32_t x1996; + fiat_np521_uint1 x1997; + uint32_t x1998; + fiat_np521_uint1 x1999; + uint32_t x2000; + fiat_np521_uint1 x2001; + uint32_t x2002; + fiat_np521_uint1 x2003; + uint32_t x2004; + fiat_np521_uint1 x2005; + uint32_t x2006; + fiat_np521_uint1 x2007; + uint32_t x2008; + fiat_np521_uint1 x2009; + uint32_t x2010; + fiat_np521_uint1 x2011; + uint32_t x2012; + uint32_t x2013; + uint32_t x2014; + uint32_t x2015; + uint32_t x2016; + uint32_t x2017; + uint32_t x2018; + uint32_t x2019; + uint32_t x2020; + uint32_t x2021; + uint32_t x2022; + uint32_t x2023; + uint32_t x2024; + uint32_t x2025; + uint32_t x2026; + uint32_t x2027; + uint32_t x2028; + uint32_t x2029; + uint32_t x2030; + uint32_t x2031; + uint32_t x2032; + uint32_t x2033; + uint32_t x2034; + uint32_t x2035; + uint32_t x2036; + uint32_t x2037; + uint32_t x2038; + uint32_t x2039; + uint32_t x2040; + uint32_t x2041; + uint32_t x2042; + uint32_t x2043; + uint32_t x2044; + uint32_t x2045; + uint32_t x2046; + uint32_t x2047; + uint32_t x2048; + fiat_np521_uint1 x2049; + uint32_t x2050; + fiat_np521_uint1 x2051; + uint32_t x2052; + fiat_np521_uint1 x2053; + uint32_t x2054; + fiat_np521_uint1 x2055; + uint32_t x2056; + fiat_np521_uint1 x2057; + uint32_t x2058; + fiat_np521_uint1 x2059; + uint32_t x2060; + fiat_np521_uint1 x2061; + uint32_t x2062; + fiat_np521_uint1 x2063; + uint32_t x2064; + fiat_np521_uint1 x2065; + uint32_t x2066; + fiat_np521_uint1 x2067; + uint32_t x2068; + fiat_np521_uint1 x2069; + uint32_t x2070; + fiat_np521_uint1 x2071; + uint32_t x2072; + fiat_np521_uint1 x2073; + uint32_t x2074; + fiat_np521_uint1 x2075; + uint32_t x2076; + fiat_np521_uint1 x2077; + uint32_t x2078; + fiat_np521_uint1 x2079; + uint32_t x2080; + fiat_np521_uint1 x2081; + uint32_t x2082; + fiat_np521_uint1 x2083; + uint32_t x2084; + fiat_np521_uint1 x2085; + uint32_t x2086; + fiat_np521_uint1 x2087; + uint32_t x2088; + fiat_np521_uint1 x2089; + uint32_t x2090; + fiat_np521_uint1 x2091; + uint32_t x2092; + fiat_np521_uint1 x2093; + uint32_t x2094; + fiat_np521_uint1 x2095; + uint32_t x2096; + fiat_np521_uint1 x2097; + uint32_t x2098; + fiat_np521_uint1 x2099; + uint32_t x2100; + fiat_np521_uint1 x2101; + uint32_t x2102; + fiat_np521_uint1 x2103; + uint32_t x2104; + fiat_np521_uint1 x2105; + uint32_t x2106; + fiat_np521_uint1 x2107; + uint32_t x2108; + fiat_np521_uint1 x2109; + uint32_t x2110; + fiat_np521_uint1 x2111; + uint32_t x2112; + fiat_np521_uint1 x2113; + uint32_t x2114; + fiat_np521_uint1 x2115; + uint32_t x2116; + fiat_np521_uint1 x2117; + uint32_t x2118; + fiat_np521_uint1 x2119; + uint32_t x2120; + fiat_np521_uint1 x2121; + uint32_t x2122; + fiat_np521_uint1 x2123; + uint32_t x2124; + fiat_np521_uint1 x2125; + uint32_t x2126; + fiat_np521_uint1 x2127; + uint32_t x2128; + fiat_np521_uint1 x2129; + uint32_t x2130; + fiat_np521_uint1 x2131; + uint32_t x2132; + fiat_np521_uint1 x2133; + uint32_t x2134; + fiat_np521_uint1 x2135; + uint32_t x2136; + fiat_np521_uint1 x2137; + uint32_t x2138; + fiat_np521_uint1 x2139; + uint32_t x2140; + fiat_np521_uint1 x2141; + uint32_t x2142; + fiat_np521_uint1 x2143; + uint32_t x2144; + fiat_np521_uint1 x2145; + uint32_t x2146; + uint32_t x2147; + uint32_t x2148; + uint32_t x2149; + uint32_t x2150; + uint32_t x2151; + uint32_t x2152; + uint32_t x2153; + uint32_t x2154; + uint32_t x2155; + uint32_t x2156; + uint32_t x2157; + uint32_t x2158; + uint32_t x2159; + uint32_t x2160; + uint32_t x2161; + uint32_t x2162; + uint32_t x2163; + uint32_t x2164; + uint32_t x2165; + uint32_t x2166; + uint32_t x2167; + uint32_t x2168; + uint32_t x2169; + uint32_t x2170; + uint32_t x2171; + uint32_t x2172; + uint32_t x2173; + uint32_t x2174; + uint32_t x2175; + uint32_t x2176; + uint32_t x2177; + uint32_t x2178; + uint32_t x2179; + uint32_t x2180; + uint32_t x2181; + uint32_t x2182; + fiat_np521_uint1 x2183; + uint32_t x2184; + fiat_np521_uint1 x2185; + uint32_t x2186; + fiat_np521_uint1 x2187; + uint32_t x2188; + fiat_np521_uint1 x2189; + uint32_t x2190; + fiat_np521_uint1 x2191; + uint32_t x2192; + fiat_np521_uint1 x2193; + uint32_t x2194; + fiat_np521_uint1 x2195; + uint32_t x2196; + fiat_np521_uint1 x2197; + uint32_t x2198; + fiat_np521_uint1 x2199; + uint32_t x2200; + fiat_np521_uint1 x2201; + uint32_t x2202; + fiat_np521_uint1 x2203; + uint32_t x2204; + fiat_np521_uint1 x2205; + uint32_t x2206; + fiat_np521_uint1 x2207; + uint32_t x2208; + fiat_np521_uint1 x2209; + uint32_t x2210; + fiat_np521_uint1 x2211; + uint32_t x2212; + fiat_np521_uint1 x2213; + uint32_t x2214; + fiat_np521_uint1 x2215; + uint32_t x2216; + fiat_np521_uint1 x2217; + uint32_t x2218; + fiat_np521_uint1 x2219; + uint32_t x2220; + fiat_np521_uint1 x2221; + uint32_t x2222; + fiat_np521_uint1 x2223; + uint32_t x2224; + fiat_np521_uint1 x2225; + uint32_t x2226; + fiat_np521_uint1 x2227; + uint32_t x2228; + fiat_np521_uint1 x2229; + uint32_t x2230; + fiat_np521_uint1 x2231; + uint32_t x2232; + fiat_np521_uint1 x2233; + uint32_t x2234; + fiat_np521_uint1 x2235; + uint32_t x2236; + fiat_np521_uint1 x2237; + uint32_t x2238; + fiat_np521_uint1 x2239; + uint32_t x2240; + fiat_np521_uint1 x2241; + uint32_t x2242; + fiat_np521_uint1 x2243; + uint32_t x2244; + fiat_np521_uint1 x2245; + uint32_t x2246; + fiat_np521_uint1 x2247; + uint32_t x2248; + uint32_t x2249; + fiat_np521_uint1 x2250; + uint32_t x2251; + fiat_np521_uint1 x2252; + uint32_t x2253; + fiat_np521_uint1 x2254; + uint32_t x2255; + fiat_np521_uint1 x2256; + uint32_t x2257; + fiat_np521_uint1 x2258; + uint32_t x2259; + fiat_np521_uint1 x2260; + uint32_t x2261; + fiat_np521_uint1 x2262; + uint32_t x2263; + fiat_np521_uint1 x2264; + uint32_t x2265; + fiat_np521_uint1 x2266; + uint32_t x2267; + fiat_np521_uint1 x2268; + uint32_t x2269; + fiat_np521_uint1 x2270; + uint32_t x2271; + fiat_np521_uint1 x2272; + uint32_t x2273; + fiat_np521_uint1 x2274; + uint32_t x2275; + fiat_np521_uint1 x2276; + uint32_t x2277; + fiat_np521_uint1 x2278; + uint32_t x2279; + fiat_np521_uint1 x2280; + uint32_t x2281; + fiat_np521_uint1 x2282; + uint32_t x2283; + fiat_np521_uint1 x2284; + uint32_t x2285; + uint32_t x2286; + uint32_t x2287; + uint32_t x2288; + uint32_t x2289; + uint32_t x2290; + uint32_t x2291; + uint32_t x2292; + uint32_t x2293; + uint32_t x2294; + uint32_t x2295; + uint32_t x2296; + uint32_t x2297; + uint32_t x2298; + uint32_t x2299; + uint32_t x2300; + uint32_t x2301; + x1 = (arg1[0]); + fiat_np521_mulx_u32(&x2, &x3, x1, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x4, &x5, x2, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x6, &x7, x2, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x8, &x9, x2, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x10, &x11, x2, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x12, &x13, x2, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x14, &x15, x2, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x16, &x17, x2, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x18, &x19, x2, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x20, &x21, x2, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x22, &x23, x2, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x24, &x25, x2, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x26, &x27, x2, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x28, &x29, x2, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x30, &x31, x2, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x32, &x33, x2, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x34, &x35, x2, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x36, &x37, x2, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x38, &x39, 0x0, x37, x34); + fiat_np521_addcarryx_u32(&x40, &x41, x39, x35, x32); + fiat_np521_addcarryx_u32(&x42, &x43, x41, x33, x30); + fiat_np521_addcarryx_u32(&x44, &x45, x43, x31, x28); + fiat_np521_addcarryx_u32(&x46, &x47, x45, x29, x26); + fiat_np521_addcarryx_u32(&x48, &x49, x47, x27, x24); + fiat_np521_addcarryx_u32(&x50, &x51, x49, x25, x22); + fiat_np521_addcarryx_u32(&x52, &x53, x51, x23, x20); + fiat_np521_addcarryx_u32(&x54, &x55, x53, x21, x18); + fiat_np521_addcarryx_u32(&x56, &x57, x55, x19, x16); + fiat_np521_addcarryx_u32(&x58, &x59, x57, x17, x14); + fiat_np521_addcarryx_u32(&x60, &x61, x59, x15, x12); + fiat_np521_addcarryx_u32(&x62, &x63, x61, x13, x10); + fiat_np521_addcarryx_u32(&x64, &x65, x63, x11, x8); + fiat_np521_addcarryx_u32(&x66, &x67, x65, x9, x6); + fiat_np521_addcarryx_u32(&x68, &x69, x67, x7, x4); + fiat_np521_addcarryx_u32(&x70, &x71, 0x0, x1, x36); + fiat_np521_addcarryx_u32(&x72, &x73, x71, 0x0, x38); + fiat_np521_addcarryx_u32(&x74, &x75, x73, 0x0, x40); + fiat_np521_addcarryx_u32(&x76, &x77, x75, 0x0, x42); + fiat_np521_addcarryx_u32(&x78, &x79, x77, 0x0, x44); + fiat_np521_addcarryx_u32(&x80, &x81, x79, 0x0, x46); + fiat_np521_addcarryx_u32(&x82, &x83, x81, 0x0, x48); + fiat_np521_addcarryx_u32(&x84, &x85, x83, 0x0, x50); + fiat_np521_addcarryx_u32(&x86, &x87, x85, 0x0, x52); + fiat_np521_addcarryx_u32(&x88, &x89, x87, 0x0, x54); + fiat_np521_addcarryx_u32(&x90, &x91, x89, 0x0, x56); + fiat_np521_addcarryx_u32(&x92, &x93, x91, 0x0, x58); + fiat_np521_addcarryx_u32(&x94, &x95, x93, 0x0, x60); + fiat_np521_addcarryx_u32(&x96, &x97, x95, 0x0, x62); + fiat_np521_addcarryx_u32(&x98, &x99, x97, 0x0, x64); + fiat_np521_addcarryx_u32(&x100, &x101, x99, 0x0, x66); + fiat_np521_addcarryx_u32(&x102, &x103, x101, 0x0, x68); + fiat_np521_addcarryx_u32(&x104, &x105, 0x0, x72, (arg1[1])); + fiat_np521_addcarryx_u32(&x106, &x107, x105, x74, 0x0); + fiat_np521_addcarryx_u32(&x108, &x109, x107, x76, 0x0); + fiat_np521_addcarryx_u32(&x110, &x111, x109, x78, 0x0); + fiat_np521_addcarryx_u32(&x112, &x113, x111, x80, 0x0); + fiat_np521_addcarryx_u32(&x114, &x115, x113, x82, 0x0); + fiat_np521_addcarryx_u32(&x116, &x117, x115, x84, 0x0); + fiat_np521_addcarryx_u32(&x118, &x119, x117, x86, 0x0); + fiat_np521_addcarryx_u32(&x120, &x121, x119, x88, 0x0); + fiat_np521_addcarryx_u32(&x122, &x123, x121, x90, 0x0); + fiat_np521_addcarryx_u32(&x124, &x125, x123, x92, 0x0); + fiat_np521_addcarryx_u32(&x126, &x127, x125, x94, 0x0); + fiat_np521_addcarryx_u32(&x128, &x129, x127, x96, 0x0); + fiat_np521_addcarryx_u32(&x130, &x131, x129, x98, 0x0); + fiat_np521_addcarryx_u32(&x132, &x133, x131, x100, 0x0); + fiat_np521_addcarryx_u32(&x134, &x135, x133, x102, 0x0); + fiat_np521_mulx_u32(&x136, &x137, x104, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x138, &x139, x136, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x140, &x141, x136, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x142, &x143, x136, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x144, &x145, x136, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x146, &x147, x136, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x148, &x149, x136, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x150, &x151, x136, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x152, &x153, x136, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x154, &x155, x136, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x156, &x157, x136, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x158, &x159, x136, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x160, &x161, x136, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x162, &x163, x136, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x164, &x165, x136, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x166, &x167, x136, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x168, &x169, x136, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x170, &x171, x136, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x172, &x173, 0x0, x171, x168); + fiat_np521_addcarryx_u32(&x174, &x175, x173, x169, x166); + fiat_np521_addcarryx_u32(&x176, &x177, x175, x167, x164); + fiat_np521_addcarryx_u32(&x178, &x179, x177, x165, x162); + fiat_np521_addcarryx_u32(&x180, &x181, x179, x163, x160); + fiat_np521_addcarryx_u32(&x182, &x183, x181, x161, x158); + fiat_np521_addcarryx_u32(&x184, &x185, x183, x159, x156); + fiat_np521_addcarryx_u32(&x186, &x187, x185, x157, x154); + fiat_np521_addcarryx_u32(&x188, &x189, x187, x155, x152); + fiat_np521_addcarryx_u32(&x190, &x191, x189, x153, x150); + fiat_np521_addcarryx_u32(&x192, &x193, x191, x151, x148); + fiat_np521_addcarryx_u32(&x194, &x195, x193, x149, x146); + fiat_np521_addcarryx_u32(&x196, &x197, x195, x147, x144); + fiat_np521_addcarryx_u32(&x198, &x199, x197, x145, x142); + fiat_np521_addcarryx_u32(&x200, &x201, x199, x143, x140); + fiat_np521_addcarryx_u32(&x202, &x203, x201, x141, x138); + fiat_np521_addcarryx_u32(&x204, &x205, 0x0, x104, x170); + fiat_np521_addcarryx_u32(&x206, &x207, x205, x106, x172); + fiat_np521_addcarryx_u32(&x208, &x209, x207, x108, x174); + fiat_np521_addcarryx_u32(&x210, &x211, x209, x110, x176); + fiat_np521_addcarryx_u32(&x212, &x213, x211, x112, x178); + fiat_np521_addcarryx_u32(&x214, &x215, x213, x114, x180); + fiat_np521_addcarryx_u32(&x216, &x217, x215, x116, x182); + fiat_np521_addcarryx_u32(&x218, &x219, x217, x118, x184); + fiat_np521_addcarryx_u32(&x220, &x221, x219, x120, x186); + fiat_np521_addcarryx_u32(&x222, &x223, x221, x122, x188); + fiat_np521_addcarryx_u32(&x224, &x225, x223, x124, x190); + fiat_np521_addcarryx_u32(&x226, &x227, x225, x126, x192); + fiat_np521_addcarryx_u32(&x228, &x229, x227, x128, x194); + fiat_np521_addcarryx_u32(&x230, &x231, x229, x130, x196); + fiat_np521_addcarryx_u32(&x232, &x233, x231, x132, x198); + fiat_np521_addcarryx_u32(&x234, &x235, x233, x134, x200); + fiat_np521_addcarryx_u32(&x236, &x237, x235, (x135 + (x103 + (x69 + x5))), x202); + fiat_np521_addcarryx_u32(&x238, &x239, 0x0, x206, (arg1[2])); + fiat_np521_addcarryx_u32(&x240, &x241, x239, x208, 0x0); + fiat_np521_addcarryx_u32(&x242, &x243, x241, x210, 0x0); + fiat_np521_addcarryx_u32(&x244, &x245, x243, x212, 0x0); + fiat_np521_addcarryx_u32(&x246, &x247, x245, x214, 0x0); + fiat_np521_addcarryx_u32(&x248, &x249, x247, x216, 0x0); + fiat_np521_addcarryx_u32(&x250, &x251, x249, x218, 0x0); + fiat_np521_addcarryx_u32(&x252, &x253, x251, x220, 0x0); + fiat_np521_addcarryx_u32(&x254, &x255, x253, x222, 0x0); + fiat_np521_addcarryx_u32(&x256, &x257, x255, x224, 0x0); + fiat_np521_addcarryx_u32(&x258, &x259, x257, x226, 0x0); + fiat_np521_addcarryx_u32(&x260, &x261, x259, x228, 0x0); + fiat_np521_addcarryx_u32(&x262, &x263, x261, x230, 0x0); + fiat_np521_addcarryx_u32(&x264, &x265, x263, x232, 0x0); + fiat_np521_addcarryx_u32(&x266, &x267, x265, x234, 0x0); + fiat_np521_addcarryx_u32(&x268, &x269, x267, x236, 0x0); + fiat_np521_mulx_u32(&x270, &x271, x238, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x272, &x273, x270, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x274, &x275, x270, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x276, &x277, x270, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x278, &x279, x270, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x280, &x281, x270, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x282, &x283, x270, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x284, &x285, x270, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x286, &x287, x270, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x288, &x289, x270, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x290, &x291, x270, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x292, &x293, x270, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x294, &x295, x270, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x296, &x297, x270, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x298, &x299, x270, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x300, &x301, x270, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x302, &x303, x270, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x304, &x305, x270, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x306, &x307, 0x0, x305, x302); + fiat_np521_addcarryx_u32(&x308, &x309, x307, x303, x300); + fiat_np521_addcarryx_u32(&x310, &x311, x309, x301, x298); + fiat_np521_addcarryx_u32(&x312, &x313, x311, x299, x296); + fiat_np521_addcarryx_u32(&x314, &x315, x313, x297, x294); + fiat_np521_addcarryx_u32(&x316, &x317, x315, x295, x292); + fiat_np521_addcarryx_u32(&x318, &x319, x317, x293, x290); + fiat_np521_addcarryx_u32(&x320, &x321, x319, x291, x288); + fiat_np521_addcarryx_u32(&x322, &x323, x321, x289, x286); + fiat_np521_addcarryx_u32(&x324, &x325, x323, x287, x284); + fiat_np521_addcarryx_u32(&x326, &x327, x325, x285, x282); + fiat_np521_addcarryx_u32(&x328, &x329, x327, x283, x280); + fiat_np521_addcarryx_u32(&x330, &x331, x329, x281, x278); + fiat_np521_addcarryx_u32(&x332, &x333, x331, x279, x276); + fiat_np521_addcarryx_u32(&x334, &x335, x333, x277, x274); + fiat_np521_addcarryx_u32(&x336, &x337, x335, x275, x272); + fiat_np521_addcarryx_u32(&x338, &x339, 0x0, x238, x304); + fiat_np521_addcarryx_u32(&x340, &x341, x339, x240, x306); + fiat_np521_addcarryx_u32(&x342, &x343, x341, x242, x308); + fiat_np521_addcarryx_u32(&x344, &x345, x343, x244, x310); + fiat_np521_addcarryx_u32(&x346, &x347, x345, x246, x312); + fiat_np521_addcarryx_u32(&x348, &x349, x347, x248, x314); + fiat_np521_addcarryx_u32(&x350, &x351, x349, x250, x316); + fiat_np521_addcarryx_u32(&x352, &x353, x351, x252, x318); + fiat_np521_addcarryx_u32(&x354, &x355, x353, x254, x320); + fiat_np521_addcarryx_u32(&x356, &x357, x355, x256, x322); + fiat_np521_addcarryx_u32(&x358, &x359, x357, x258, x324); + fiat_np521_addcarryx_u32(&x360, &x361, x359, x260, x326); + fiat_np521_addcarryx_u32(&x362, &x363, x361, x262, x328); + fiat_np521_addcarryx_u32(&x364, &x365, x363, x264, x330); + fiat_np521_addcarryx_u32(&x366, &x367, x365, x266, x332); + fiat_np521_addcarryx_u32(&x368, &x369, x367, x268, x334); + fiat_np521_addcarryx_u32(&x370, &x371, x369, (x269 + (x237 + (x203 + x139))), x336); + fiat_np521_addcarryx_u32(&x372, &x373, 0x0, x340, (arg1[3])); + fiat_np521_addcarryx_u32(&x374, &x375, x373, x342, 0x0); + fiat_np521_addcarryx_u32(&x376, &x377, x375, x344, 0x0); + fiat_np521_addcarryx_u32(&x378, &x379, x377, x346, 0x0); + fiat_np521_addcarryx_u32(&x380, &x381, x379, x348, 0x0); + fiat_np521_addcarryx_u32(&x382, &x383, x381, x350, 0x0); + fiat_np521_addcarryx_u32(&x384, &x385, x383, x352, 0x0); + fiat_np521_addcarryx_u32(&x386, &x387, x385, x354, 0x0); + fiat_np521_addcarryx_u32(&x388, &x389, x387, x356, 0x0); + fiat_np521_addcarryx_u32(&x390, &x391, x389, x358, 0x0); + fiat_np521_addcarryx_u32(&x392, &x393, x391, x360, 0x0); + fiat_np521_addcarryx_u32(&x394, &x395, x393, x362, 0x0); + fiat_np521_addcarryx_u32(&x396, &x397, x395, x364, 0x0); + fiat_np521_addcarryx_u32(&x398, &x399, x397, x366, 0x0); + fiat_np521_addcarryx_u32(&x400, &x401, x399, x368, 0x0); + fiat_np521_addcarryx_u32(&x402, &x403, x401, x370, 0x0); + fiat_np521_mulx_u32(&x404, &x405, x372, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x406, &x407, x404, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x408, &x409, x404, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x410, &x411, x404, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x412, &x413, x404, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x414, &x415, x404, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x416, &x417, x404, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x418, &x419, x404, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x420, &x421, x404, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x422, &x423, x404, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x424, &x425, x404, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x426, &x427, x404, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x428, &x429, x404, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x430, &x431, x404, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x432, &x433, x404, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x434, &x435, x404, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x436, &x437, x404, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x438, &x439, x404, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x440, &x441, 0x0, x439, x436); + fiat_np521_addcarryx_u32(&x442, &x443, x441, x437, x434); + fiat_np521_addcarryx_u32(&x444, &x445, x443, x435, x432); + fiat_np521_addcarryx_u32(&x446, &x447, x445, x433, x430); + fiat_np521_addcarryx_u32(&x448, &x449, x447, x431, x428); + fiat_np521_addcarryx_u32(&x450, &x451, x449, x429, x426); + fiat_np521_addcarryx_u32(&x452, &x453, x451, x427, x424); + fiat_np521_addcarryx_u32(&x454, &x455, x453, x425, x422); + fiat_np521_addcarryx_u32(&x456, &x457, x455, x423, x420); + fiat_np521_addcarryx_u32(&x458, &x459, x457, x421, x418); + fiat_np521_addcarryx_u32(&x460, &x461, x459, x419, x416); + fiat_np521_addcarryx_u32(&x462, &x463, x461, x417, x414); + fiat_np521_addcarryx_u32(&x464, &x465, x463, x415, x412); + fiat_np521_addcarryx_u32(&x466, &x467, x465, x413, x410); + fiat_np521_addcarryx_u32(&x468, &x469, x467, x411, x408); + fiat_np521_addcarryx_u32(&x470, &x471, x469, x409, x406); + fiat_np521_addcarryx_u32(&x472, &x473, 0x0, x372, x438); + fiat_np521_addcarryx_u32(&x474, &x475, x473, x374, x440); + fiat_np521_addcarryx_u32(&x476, &x477, x475, x376, x442); + fiat_np521_addcarryx_u32(&x478, &x479, x477, x378, x444); + fiat_np521_addcarryx_u32(&x480, &x481, x479, x380, x446); + fiat_np521_addcarryx_u32(&x482, &x483, x481, x382, x448); + fiat_np521_addcarryx_u32(&x484, &x485, x483, x384, x450); + fiat_np521_addcarryx_u32(&x486, &x487, x485, x386, x452); + fiat_np521_addcarryx_u32(&x488, &x489, x487, x388, x454); + fiat_np521_addcarryx_u32(&x490, &x491, x489, x390, x456); + fiat_np521_addcarryx_u32(&x492, &x493, x491, x392, x458); + fiat_np521_addcarryx_u32(&x494, &x495, x493, x394, x460); + fiat_np521_addcarryx_u32(&x496, &x497, x495, x396, x462); + fiat_np521_addcarryx_u32(&x498, &x499, x497, x398, x464); + fiat_np521_addcarryx_u32(&x500, &x501, x499, x400, x466); + fiat_np521_addcarryx_u32(&x502, &x503, x501, x402, x468); + fiat_np521_addcarryx_u32(&x504, &x505, x503, (x403 + (x371 + (x337 + x273))), x470); + fiat_np521_addcarryx_u32(&x506, &x507, 0x0, x474, (arg1[4])); + fiat_np521_addcarryx_u32(&x508, &x509, x507, x476, 0x0); + fiat_np521_addcarryx_u32(&x510, &x511, x509, x478, 0x0); + fiat_np521_addcarryx_u32(&x512, &x513, x511, x480, 0x0); + fiat_np521_addcarryx_u32(&x514, &x515, x513, x482, 0x0); + fiat_np521_addcarryx_u32(&x516, &x517, x515, x484, 0x0); + fiat_np521_addcarryx_u32(&x518, &x519, x517, x486, 0x0); + fiat_np521_addcarryx_u32(&x520, &x521, x519, x488, 0x0); + fiat_np521_addcarryx_u32(&x522, &x523, x521, x490, 0x0); + fiat_np521_addcarryx_u32(&x524, &x525, x523, x492, 0x0); + fiat_np521_addcarryx_u32(&x526, &x527, x525, x494, 0x0); + fiat_np521_addcarryx_u32(&x528, &x529, x527, x496, 0x0); + fiat_np521_addcarryx_u32(&x530, &x531, x529, x498, 0x0); + fiat_np521_addcarryx_u32(&x532, &x533, x531, x500, 0x0); + fiat_np521_addcarryx_u32(&x534, &x535, x533, x502, 0x0); + fiat_np521_addcarryx_u32(&x536, &x537, x535, x504, 0x0); + fiat_np521_mulx_u32(&x538, &x539, x506, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x540, &x541, x538, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x542, &x543, x538, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x544, &x545, x538, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x546, &x547, x538, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x548, &x549, x538, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x550, &x551, x538, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x552, &x553, x538, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x554, &x555, x538, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x556, &x557, x538, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x558, &x559, x538, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x560, &x561, x538, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x562, &x563, x538, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x564, &x565, x538, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x566, &x567, x538, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x568, &x569, x538, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x570, &x571, x538, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x572, &x573, x538, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x574, &x575, 0x0, x573, x570); + fiat_np521_addcarryx_u32(&x576, &x577, x575, x571, x568); + fiat_np521_addcarryx_u32(&x578, &x579, x577, x569, x566); + fiat_np521_addcarryx_u32(&x580, &x581, x579, x567, x564); + fiat_np521_addcarryx_u32(&x582, &x583, x581, x565, x562); + fiat_np521_addcarryx_u32(&x584, &x585, x583, x563, x560); + fiat_np521_addcarryx_u32(&x586, &x587, x585, x561, x558); + fiat_np521_addcarryx_u32(&x588, &x589, x587, x559, x556); + fiat_np521_addcarryx_u32(&x590, &x591, x589, x557, x554); + fiat_np521_addcarryx_u32(&x592, &x593, x591, x555, x552); + fiat_np521_addcarryx_u32(&x594, &x595, x593, x553, x550); + fiat_np521_addcarryx_u32(&x596, &x597, x595, x551, x548); + fiat_np521_addcarryx_u32(&x598, &x599, x597, x549, x546); + fiat_np521_addcarryx_u32(&x600, &x601, x599, x547, x544); + fiat_np521_addcarryx_u32(&x602, &x603, x601, x545, x542); + fiat_np521_addcarryx_u32(&x604, &x605, x603, x543, x540); + fiat_np521_addcarryx_u32(&x606, &x607, 0x0, x506, x572); + fiat_np521_addcarryx_u32(&x608, &x609, x607, x508, x574); + fiat_np521_addcarryx_u32(&x610, &x611, x609, x510, x576); + fiat_np521_addcarryx_u32(&x612, &x613, x611, x512, x578); + fiat_np521_addcarryx_u32(&x614, &x615, x613, x514, x580); + fiat_np521_addcarryx_u32(&x616, &x617, x615, x516, x582); + fiat_np521_addcarryx_u32(&x618, &x619, x617, x518, x584); + fiat_np521_addcarryx_u32(&x620, &x621, x619, x520, x586); + fiat_np521_addcarryx_u32(&x622, &x623, x621, x522, x588); + fiat_np521_addcarryx_u32(&x624, &x625, x623, x524, x590); + fiat_np521_addcarryx_u32(&x626, &x627, x625, x526, x592); + fiat_np521_addcarryx_u32(&x628, &x629, x627, x528, x594); + fiat_np521_addcarryx_u32(&x630, &x631, x629, x530, x596); + fiat_np521_addcarryx_u32(&x632, &x633, x631, x532, x598); + fiat_np521_addcarryx_u32(&x634, &x635, x633, x534, x600); + fiat_np521_addcarryx_u32(&x636, &x637, x635, x536, x602); + fiat_np521_addcarryx_u32(&x638, &x639, x637, (x537 + (x505 + (x471 + x407))), x604); + fiat_np521_addcarryx_u32(&x640, &x641, 0x0, x608, (arg1[5])); + fiat_np521_addcarryx_u32(&x642, &x643, x641, x610, 0x0); + fiat_np521_addcarryx_u32(&x644, &x645, x643, x612, 0x0); + fiat_np521_addcarryx_u32(&x646, &x647, x645, x614, 0x0); + fiat_np521_addcarryx_u32(&x648, &x649, x647, x616, 0x0); + fiat_np521_addcarryx_u32(&x650, &x651, x649, x618, 0x0); + fiat_np521_addcarryx_u32(&x652, &x653, x651, x620, 0x0); + fiat_np521_addcarryx_u32(&x654, &x655, x653, x622, 0x0); + fiat_np521_addcarryx_u32(&x656, &x657, x655, x624, 0x0); + fiat_np521_addcarryx_u32(&x658, &x659, x657, x626, 0x0); + fiat_np521_addcarryx_u32(&x660, &x661, x659, x628, 0x0); + fiat_np521_addcarryx_u32(&x662, &x663, x661, x630, 0x0); + fiat_np521_addcarryx_u32(&x664, &x665, x663, x632, 0x0); + fiat_np521_addcarryx_u32(&x666, &x667, x665, x634, 0x0); + fiat_np521_addcarryx_u32(&x668, &x669, x667, x636, 0x0); + fiat_np521_addcarryx_u32(&x670, &x671, x669, x638, 0x0); + fiat_np521_mulx_u32(&x672, &x673, x640, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x674, &x675, x672, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x676, &x677, x672, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x678, &x679, x672, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x680, &x681, x672, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x682, &x683, x672, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x684, &x685, x672, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x686, &x687, x672, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x688, &x689, x672, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x690, &x691, x672, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x692, &x693, x672, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x694, &x695, x672, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x696, &x697, x672, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x698, &x699, x672, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x700, &x701, x672, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x702, &x703, x672, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x704, &x705, x672, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x706, &x707, x672, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x708, &x709, 0x0, x707, x704); + fiat_np521_addcarryx_u32(&x710, &x711, x709, x705, x702); + fiat_np521_addcarryx_u32(&x712, &x713, x711, x703, x700); + fiat_np521_addcarryx_u32(&x714, &x715, x713, x701, x698); + fiat_np521_addcarryx_u32(&x716, &x717, x715, x699, x696); + fiat_np521_addcarryx_u32(&x718, &x719, x717, x697, x694); + fiat_np521_addcarryx_u32(&x720, &x721, x719, x695, x692); + fiat_np521_addcarryx_u32(&x722, &x723, x721, x693, x690); + fiat_np521_addcarryx_u32(&x724, &x725, x723, x691, x688); + fiat_np521_addcarryx_u32(&x726, &x727, x725, x689, x686); + fiat_np521_addcarryx_u32(&x728, &x729, x727, x687, x684); + fiat_np521_addcarryx_u32(&x730, &x731, x729, x685, x682); + fiat_np521_addcarryx_u32(&x732, &x733, x731, x683, x680); + fiat_np521_addcarryx_u32(&x734, &x735, x733, x681, x678); + fiat_np521_addcarryx_u32(&x736, &x737, x735, x679, x676); + fiat_np521_addcarryx_u32(&x738, &x739, x737, x677, x674); + fiat_np521_addcarryx_u32(&x740, &x741, 0x0, x640, x706); + fiat_np521_addcarryx_u32(&x742, &x743, x741, x642, x708); + fiat_np521_addcarryx_u32(&x744, &x745, x743, x644, x710); + fiat_np521_addcarryx_u32(&x746, &x747, x745, x646, x712); + fiat_np521_addcarryx_u32(&x748, &x749, x747, x648, x714); + fiat_np521_addcarryx_u32(&x750, &x751, x749, x650, x716); + fiat_np521_addcarryx_u32(&x752, &x753, x751, x652, x718); + fiat_np521_addcarryx_u32(&x754, &x755, x753, x654, x720); + fiat_np521_addcarryx_u32(&x756, &x757, x755, x656, x722); + fiat_np521_addcarryx_u32(&x758, &x759, x757, x658, x724); + fiat_np521_addcarryx_u32(&x760, &x761, x759, x660, x726); + fiat_np521_addcarryx_u32(&x762, &x763, x761, x662, x728); + fiat_np521_addcarryx_u32(&x764, &x765, x763, x664, x730); + fiat_np521_addcarryx_u32(&x766, &x767, x765, x666, x732); + fiat_np521_addcarryx_u32(&x768, &x769, x767, x668, x734); + fiat_np521_addcarryx_u32(&x770, &x771, x769, x670, x736); + fiat_np521_addcarryx_u32(&x772, &x773, x771, (x671 + (x639 + (x605 + x541))), x738); + fiat_np521_addcarryx_u32(&x774, &x775, 0x0, x742, (arg1[6])); + fiat_np521_addcarryx_u32(&x776, &x777, x775, x744, 0x0); + fiat_np521_addcarryx_u32(&x778, &x779, x777, x746, 0x0); + fiat_np521_addcarryx_u32(&x780, &x781, x779, x748, 0x0); + fiat_np521_addcarryx_u32(&x782, &x783, x781, x750, 0x0); + fiat_np521_addcarryx_u32(&x784, &x785, x783, x752, 0x0); + fiat_np521_addcarryx_u32(&x786, &x787, x785, x754, 0x0); + fiat_np521_addcarryx_u32(&x788, &x789, x787, x756, 0x0); + fiat_np521_addcarryx_u32(&x790, &x791, x789, x758, 0x0); + fiat_np521_addcarryx_u32(&x792, &x793, x791, x760, 0x0); + fiat_np521_addcarryx_u32(&x794, &x795, x793, x762, 0x0); + fiat_np521_addcarryx_u32(&x796, &x797, x795, x764, 0x0); + fiat_np521_addcarryx_u32(&x798, &x799, x797, x766, 0x0); + fiat_np521_addcarryx_u32(&x800, &x801, x799, x768, 0x0); + fiat_np521_addcarryx_u32(&x802, &x803, x801, x770, 0x0); + fiat_np521_addcarryx_u32(&x804, &x805, x803, x772, 0x0); + fiat_np521_mulx_u32(&x806, &x807, x774, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x808, &x809, x806, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x810, &x811, x806, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x812, &x813, x806, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x814, &x815, x806, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x816, &x817, x806, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x818, &x819, x806, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x820, &x821, x806, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x822, &x823, x806, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x824, &x825, x806, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x826, &x827, x806, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x828, &x829, x806, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x830, &x831, x806, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x832, &x833, x806, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x834, &x835, x806, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x836, &x837, x806, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x838, &x839, x806, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x840, &x841, x806, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x842, &x843, 0x0, x841, x838); + fiat_np521_addcarryx_u32(&x844, &x845, x843, x839, x836); + fiat_np521_addcarryx_u32(&x846, &x847, x845, x837, x834); + fiat_np521_addcarryx_u32(&x848, &x849, x847, x835, x832); + fiat_np521_addcarryx_u32(&x850, &x851, x849, x833, x830); + fiat_np521_addcarryx_u32(&x852, &x853, x851, x831, x828); + fiat_np521_addcarryx_u32(&x854, &x855, x853, x829, x826); + fiat_np521_addcarryx_u32(&x856, &x857, x855, x827, x824); + fiat_np521_addcarryx_u32(&x858, &x859, x857, x825, x822); + fiat_np521_addcarryx_u32(&x860, &x861, x859, x823, x820); + fiat_np521_addcarryx_u32(&x862, &x863, x861, x821, x818); + fiat_np521_addcarryx_u32(&x864, &x865, x863, x819, x816); + fiat_np521_addcarryx_u32(&x866, &x867, x865, x817, x814); + fiat_np521_addcarryx_u32(&x868, &x869, x867, x815, x812); + fiat_np521_addcarryx_u32(&x870, &x871, x869, x813, x810); + fiat_np521_addcarryx_u32(&x872, &x873, x871, x811, x808); + fiat_np521_addcarryx_u32(&x874, &x875, 0x0, x774, x840); + fiat_np521_addcarryx_u32(&x876, &x877, x875, x776, x842); + fiat_np521_addcarryx_u32(&x878, &x879, x877, x778, x844); + fiat_np521_addcarryx_u32(&x880, &x881, x879, x780, x846); + fiat_np521_addcarryx_u32(&x882, &x883, x881, x782, x848); + fiat_np521_addcarryx_u32(&x884, &x885, x883, x784, x850); + fiat_np521_addcarryx_u32(&x886, &x887, x885, x786, x852); + fiat_np521_addcarryx_u32(&x888, &x889, x887, x788, x854); + fiat_np521_addcarryx_u32(&x890, &x891, x889, x790, x856); + fiat_np521_addcarryx_u32(&x892, &x893, x891, x792, x858); + fiat_np521_addcarryx_u32(&x894, &x895, x893, x794, x860); + fiat_np521_addcarryx_u32(&x896, &x897, x895, x796, x862); + fiat_np521_addcarryx_u32(&x898, &x899, x897, x798, x864); + fiat_np521_addcarryx_u32(&x900, &x901, x899, x800, x866); + fiat_np521_addcarryx_u32(&x902, &x903, x901, x802, x868); + fiat_np521_addcarryx_u32(&x904, &x905, x903, x804, x870); + fiat_np521_addcarryx_u32(&x906, &x907, x905, (x805 + (x773 + (x739 + x675))), x872); + fiat_np521_addcarryx_u32(&x908, &x909, 0x0, x876, (arg1[7])); + fiat_np521_addcarryx_u32(&x910, &x911, x909, x878, 0x0); + fiat_np521_addcarryx_u32(&x912, &x913, x911, x880, 0x0); + fiat_np521_addcarryx_u32(&x914, &x915, x913, x882, 0x0); + fiat_np521_addcarryx_u32(&x916, &x917, x915, x884, 0x0); + fiat_np521_addcarryx_u32(&x918, &x919, x917, x886, 0x0); + fiat_np521_addcarryx_u32(&x920, &x921, x919, x888, 0x0); + fiat_np521_addcarryx_u32(&x922, &x923, x921, x890, 0x0); + fiat_np521_addcarryx_u32(&x924, &x925, x923, x892, 0x0); + fiat_np521_addcarryx_u32(&x926, &x927, x925, x894, 0x0); + fiat_np521_addcarryx_u32(&x928, &x929, x927, x896, 0x0); + fiat_np521_addcarryx_u32(&x930, &x931, x929, x898, 0x0); + fiat_np521_addcarryx_u32(&x932, &x933, x931, x900, 0x0); + fiat_np521_addcarryx_u32(&x934, &x935, x933, x902, 0x0); + fiat_np521_addcarryx_u32(&x936, &x937, x935, x904, 0x0); + fiat_np521_addcarryx_u32(&x938, &x939, x937, x906, 0x0); + fiat_np521_mulx_u32(&x940, &x941, x908, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x942, &x943, x940, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x944, &x945, x940, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x946, &x947, x940, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x948, &x949, x940, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x950, &x951, x940, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x952, &x953, x940, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x954, &x955, x940, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x956, &x957, x940, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x958, &x959, x940, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x960, &x961, x940, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x962, &x963, x940, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x964, &x965, x940, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x966, &x967, x940, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x968, &x969, x940, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x970, &x971, x940, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x972, &x973, x940, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x974, &x975, x940, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x976, &x977, 0x0, x975, x972); + fiat_np521_addcarryx_u32(&x978, &x979, x977, x973, x970); + fiat_np521_addcarryx_u32(&x980, &x981, x979, x971, x968); + fiat_np521_addcarryx_u32(&x982, &x983, x981, x969, x966); + fiat_np521_addcarryx_u32(&x984, &x985, x983, x967, x964); + fiat_np521_addcarryx_u32(&x986, &x987, x985, x965, x962); + fiat_np521_addcarryx_u32(&x988, &x989, x987, x963, x960); + fiat_np521_addcarryx_u32(&x990, &x991, x989, x961, x958); + fiat_np521_addcarryx_u32(&x992, &x993, x991, x959, x956); + fiat_np521_addcarryx_u32(&x994, &x995, x993, x957, x954); + fiat_np521_addcarryx_u32(&x996, &x997, x995, x955, x952); + fiat_np521_addcarryx_u32(&x998, &x999, x997, x953, x950); + fiat_np521_addcarryx_u32(&x1000, &x1001, x999, x951, x948); + fiat_np521_addcarryx_u32(&x1002, &x1003, x1001, x949, x946); + fiat_np521_addcarryx_u32(&x1004, &x1005, x1003, x947, x944); + fiat_np521_addcarryx_u32(&x1006, &x1007, x1005, x945, x942); + fiat_np521_addcarryx_u32(&x1008, &x1009, 0x0, x908, x974); + fiat_np521_addcarryx_u32(&x1010, &x1011, x1009, x910, x976); + fiat_np521_addcarryx_u32(&x1012, &x1013, x1011, x912, x978); + fiat_np521_addcarryx_u32(&x1014, &x1015, x1013, x914, x980); + fiat_np521_addcarryx_u32(&x1016, &x1017, x1015, x916, x982); + fiat_np521_addcarryx_u32(&x1018, &x1019, x1017, x918, x984); + fiat_np521_addcarryx_u32(&x1020, &x1021, x1019, x920, x986); + fiat_np521_addcarryx_u32(&x1022, &x1023, x1021, x922, x988); + fiat_np521_addcarryx_u32(&x1024, &x1025, x1023, x924, x990); + fiat_np521_addcarryx_u32(&x1026, &x1027, x1025, x926, x992); + fiat_np521_addcarryx_u32(&x1028, &x1029, x1027, x928, x994); + fiat_np521_addcarryx_u32(&x1030, &x1031, x1029, x930, x996); + fiat_np521_addcarryx_u32(&x1032, &x1033, x1031, x932, x998); + fiat_np521_addcarryx_u32(&x1034, &x1035, x1033, x934, x1000); + fiat_np521_addcarryx_u32(&x1036, &x1037, x1035, x936, x1002); + fiat_np521_addcarryx_u32(&x1038, &x1039, x1037, x938, x1004); + fiat_np521_addcarryx_u32(&x1040, &x1041, x1039, (x939 + (x907 + (x873 + x809))), x1006); + fiat_np521_addcarryx_u32(&x1042, &x1043, 0x0, x1010, (arg1[8])); + fiat_np521_addcarryx_u32(&x1044, &x1045, x1043, x1012, 0x0); + fiat_np521_addcarryx_u32(&x1046, &x1047, x1045, x1014, 0x0); + fiat_np521_addcarryx_u32(&x1048, &x1049, x1047, x1016, 0x0); + fiat_np521_addcarryx_u32(&x1050, &x1051, x1049, x1018, 0x0); + fiat_np521_addcarryx_u32(&x1052, &x1053, x1051, x1020, 0x0); + fiat_np521_addcarryx_u32(&x1054, &x1055, x1053, x1022, 0x0); + fiat_np521_addcarryx_u32(&x1056, &x1057, x1055, x1024, 0x0); + fiat_np521_addcarryx_u32(&x1058, &x1059, x1057, x1026, 0x0); + fiat_np521_addcarryx_u32(&x1060, &x1061, x1059, x1028, 0x0); + fiat_np521_addcarryx_u32(&x1062, &x1063, x1061, x1030, 0x0); + fiat_np521_addcarryx_u32(&x1064, &x1065, x1063, x1032, 0x0); + fiat_np521_addcarryx_u32(&x1066, &x1067, x1065, x1034, 0x0); + fiat_np521_addcarryx_u32(&x1068, &x1069, x1067, x1036, 0x0); + fiat_np521_addcarryx_u32(&x1070, &x1071, x1069, x1038, 0x0); + fiat_np521_addcarryx_u32(&x1072, &x1073, x1071, x1040, 0x0); + fiat_np521_mulx_u32(&x1074, &x1075, x1042, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1076, &x1077, x1074, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1078, &x1079, x1074, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1080, &x1081, x1074, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1082, &x1083, x1074, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1084, &x1085, x1074, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1086, &x1087, x1074, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1088, &x1089, x1074, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1090, &x1091, x1074, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1092, &x1093, x1074, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1094, &x1095, x1074, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1096, &x1097, x1074, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1098, &x1099, x1074, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1100, &x1101, x1074, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1102, &x1103, x1074, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1104, &x1105, x1074, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1106, &x1107, x1074, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1108, &x1109, x1074, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x1110, &x1111, 0x0, x1109, x1106); + fiat_np521_addcarryx_u32(&x1112, &x1113, x1111, x1107, x1104); + fiat_np521_addcarryx_u32(&x1114, &x1115, x1113, x1105, x1102); + fiat_np521_addcarryx_u32(&x1116, &x1117, x1115, x1103, x1100); + fiat_np521_addcarryx_u32(&x1118, &x1119, x1117, x1101, x1098); + fiat_np521_addcarryx_u32(&x1120, &x1121, x1119, x1099, x1096); + fiat_np521_addcarryx_u32(&x1122, &x1123, x1121, x1097, x1094); + fiat_np521_addcarryx_u32(&x1124, &x1125, x1123, x1095, x1092); + fiat_np521_addcarryx_u32(&x1126, &x1127, x1125, x1093, x1090); + fiat_np521_addcarryx_u32(&x1128, &x1129, x1127, x1091, x1088); + fiat_np521_addcarryx_u32(&x1130, &x1131, x1129, x1089, x1086); + fiat_np521_addcarryx_u32(&x1132, &x1133, x1131, x1087, x1084); + fiat_np521_addcarryx_u32(&x1134, &x1135, x1133, x1085, x1082); + fiat_np521_addcarryx_u32(&x1136, &x1137, x1135, x1083, x1080); + fiat_np521_addcarryx_u32(&x1138, &x1139, x1137, x1081, x1078); + fiat_np521_addcarryx_u32(&x1140, &x1141, x1139, x1079, x1076); + fiat_np521_addcarryx_u32(&x1142, &x1143, 0x0, x1042, x1108); + fiat_np521_addcarryx_u32(&x1144, &x1145, x1143, x1044, x1110); + fiat_np521_addcarryx_u32(&x1146, &x1147, x1145, x1046, x1112); + fiat_np521_addcarryx_u32(&x1148, &x1149, x1147, x1048, x1114); + fiat_np521_addcarryx_u32(&x1150, &x1151, x1149, x1050, x1116); + fiat_np521_addcarryx_u32(&x1152, &x1153, x1151, x1052, x1118); + fiat_np521_addcarryx_u32(&x1154, &x1155, x1153, x1054, x1120); + fiat_np521_addcarryx_u32(&x1156, &x1157, x1155, x1056, x1122); + fiat_np521_addcarryx_u32(&x1158, &x1159, x1157, x1058, x1124); + fiat_np521_addcarryx_u32(&x1160, &x1161, x1159, x1060, x1126); + fiat_np521_addcarryx_u32(&x1162, &x1163, x1161, x1062, x1128); + fiat_np521_addcarryx_u32(&x1164, &x1165, x1163, x1064, x1130); + fiat_np521_addcarryx_u32(&x1166, &x1167, x1165, x1066, x1132); + fiat_np521_addcarryx_u32(&x1168, &x1169, x1167, x1068, x1134); + fiat_np521_addcarryx_u32(&x1170, &x1171, x1169, x1070, x1136); + fiat_np521_addcarryx_u32(&x1172, &x1173, x1171, x1072, x1138); + fiat_np521_addcarryx_u32(&x1174, &x1175, x1173, (x1073 + (x1041 + (x1007 + x943))), x1140); + fiat_np521_addcarryx_u32(&x1176, &x1177, 0x0, x1144, (arg1[9])); + fiat_np521_addcarryx_u32(&x1178, &x1179, x1177, x1146, 0x0); + fiat_np521_addcarryx_u32(&x1180, &x1181, x1179, x1148, 0x0); + fiat_np521_addcarryx_u32(&x1182, &x1183, x1181, x1150, 0x0); + fiat_np521_addcarryx_u32(&x1184, &x1185, x1183, x1152, 0x0); + fiat_np521_addcarryx_u32(&x1186, &x1187, x1185, x1154, 0x0); + fiat_np521_addcarryx_u32(&x1188, &x1189, x1187, x1156, 0x0); + fiat_np521_addcarryx_u32(&x1190, &x1191, x1189, x1158, 0x0); + fiat_np521_addcarryx_u32(&x1192, &x1193, x1191, x1160, 0x0); + fiat_np521_addcarryx_u32(&x1194, &x1195, x1193, x1162, 0x0); + fiat_np521_addcarryx_u32(&x1196, &x1197, x1195, x1164, 0x0); + fiat_np521_addcarryx_u32(&x1198, &x1199, x1197, x1166, 0x0); + fiat_np521_addcarryx_u32(&x1200, &x1201, x1199, x1168, 0x0); + fiat_np521_addcarryx_u32(&x1202, &x1203, x1201, x1170, 0x0); + fiat_np521_addcarryx_u32(&x1204, &x1205, x1203, x1172, 0x0); + fiat_np521_addcarryx_u32(&x1206, &x1207, x1205, x1174, 0x0); + fiat_np521_mulx_u32(&x1208, &x1209, x1176, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1210, &x1211, x1208, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1212, &x1213, x1208, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1214, &x1215, x1208, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1216, &x1217, x1208, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1218, &x1219, x1208, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1220, &x1221, x1208, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1222, &x1223, x1208, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1224, &x1225, x1208, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1226, &x1227, x1208, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1228, &x1229, x1208, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1230, &x1231, x1208, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1232, &x1233, x1208, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1234, &x1235, x1208, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1236, &x1237, x1208, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1238, &x1239, x1208, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1240, &x1241, x1208, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1242, &x1243, x1208, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x1244, &x1245, 0x0, x1243, x1240); + fiat_np521_addcarryx_u32(&x1246, &x1247, x1245, x1241, x1238); + fiat_np521_addcarryx_u32(&x1248, &x1249, x1247, x1239, x1236); + fiat_np521_addcarryx_u32(&x1250, &x1251, x1249, x1237, x1234); + fiat_np521_addcarryx_u32(&x1252, &x1253, x1251, x1235, x1232); + fiat_np521_addcarryx_u32(&x1254, &x1255, x1253, x1233, x1230); + fiat_np521_addcarryx_u32(&x1256, &x1257, x1255, x1231, x1228); + fiat_np521_addcarryx_u32(&x1258, &x1259, x1257, x1229, x1226); + fiat_np521_addcarryx_u32(&x1260, &x1261, x1259, x1227, x1224); + fiat_np521_addcarryx_u32(&x1262, &x1263, x1261, x1225, x1222); + fiat_np521_addcarryx_u32(&x1264, &x1265, x1263, x1223, x1220); + fiat_np521_addcarryx_u32(&x1266, &x1267, x1265, x1221, x1218); + fiat_np521_addcarryx_u32(&x1268, &x1269, x1267, x1219, x1216); + fiat_np521_addcarryx_u32(&x1270, &x1271, x1269, x1217, x1214); + fiat_np521_addcarryx_u32(&x1272, &x1273, x1271, x1215, x1212); + fiat_np521_addcarryx_u32(&x1274, &x1275, x1273, x1213, x1210); + fiat_np521_addcarryx_u32(&x1276, &x1277, 0x0, x1176, x1242); + fiat_np521_addcarryx_u32(&x1278, &x1279, x1277, x1178, x1244); + fiat_np521_addcarryx_u32(&x1280, &x1281, x1279, x1180, x1246); + fiat_np521_addcarryx_u32(&x1282, &x1283, x1281, x1182, x1248); + fiat_np521_addcarryx_u32(&x1284, &x1285, x1283, x1184, x1250); + fiat_np521_addcarryx_u32(&x1286, &x1287, x1285, x1186, x1252); + fiat_np521_addcarryx_u32(&x1288, &x1289, x1287, x1188, x1254); + fiat_np521_addcarryx_u32(&x1290, &x1291, x1289, x1190, x1256); + fiat_np521_addcarryx_u32(&x1292, &x1293, x1291, x1192, x1258); + fiat_np521_addcarryx_u32(&x1294, &x1295, x1293, x1194, x1260); + fiat_np521_addcarryx_u32(&x1296, &x1297, x1295, x1196, x1262); + fiat_np521_addcarryx_u32(&x1298, &x1299, x1297, x1198, x1264); + fiat_np521_addcarryx_u32(&x1300, &x1301, x1299, x1200, x1266); + fiat_np521_addcarryx_u32(&x1302, &x1303, x1301, x1202, x1268); + fiat_np521_addcarryx_u32(&x1304, &x1305, x1303, x1204, x1270); + fiat_np521_addcarryx_u32(&x1306, &x1307, x1305, x1206, x1272); + fiat_np521_addcarryx_u32(&x1308, &x1309, x1307, (x1207 + (x1175 + (x1141 + x1077))), x1274); + fiat_np521_addcarryx_u32(&x1310, &x1311, 0x0, x1278, (arg1[10])); + fiat_np521_addcarryx_u32(&x1312, &x1313, x1311, x1280, 0x0); + fiat_np521_addcarryx_u32(&x1314, &x1315, x1313, x1282, 0x0); + fiat_np521_addcarryx_u32(&x1316, &x1317, x1315, x1284, 0x0); + fiat_np521_addcarryx_u32(&x1318, &x1319, x1317, x1286, 0x0); + fiat_np521_addcarryx_u32(&x1320, &x1321, x1319, x1288, 0x0); + fiat_np521_addcarryx_u32(&x1322, &x1323, x1321, x1290, 0x0); + fiat_np521_addcarryx_u32(&x1324, &x1325, x1323, x1292, 0x0); + fiat_np521_addcarryx_u32(&x1326, &x1327, x1325, x1294, 0x0); + fiat_np521_addcarryx_u32(&x1328, &x1329, x1327, x1296, 0x0); + fiat_np521_addcarryx_u32(&x1330, &x1331, x1329, x1298, 0x0); + fiat_np521_addcarryx_u32(&x1332, &x1333, x1331, x1300, 0x0); + fiat_np521_addcarryx_u32(&x1334, &x1335, x1333, x1302, 0x0); + fiat_np521_addcarryx_u32(&x1336, &x1337, x1335, x1304, 0x0); + fiat_np521_addcarryx_u32(&x1338, &x1339, x1337, x1306, 0x0); + fiat_np521_addcarryx_u32(&x1340, &x1341, x1339, x1308, 0x0); + fiat_np521_mulx_u32(&x1342, &x1343, x1310, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1344, &x1345, x1342, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1346, &x1347, x1342, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1348, &x1349, x1342, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1350, &x1351, x1342, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1352, &x1353, x1342, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1354, &x1355, x1342, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1356, &x1357, x1342, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1358, &x1359, x1342, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1360, &x1361, x1342, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1362, &x1363, x1342, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1364, &x1365, x1342, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1366, &x1367, x1342, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1368, &x1369, x1342, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1370, &x1371, x1342, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1372, &x1373, x1342, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1374, &x1375, x1342, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1376, &x1377, x1342, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x1378, &x1379, 0x0, x1377, x1374); + fiat_np521_addcarryx_u32(&x1380, &x1381, x1379, x1375, x1372); + fiat_np521_addcarryx_u32(&x1382, &x1383, x1381, x1373, x1370); + fiat_np521_addcarryx_u32(&x1384, &x1385, x1383, x1371, x1368); + fiat_np521_addcarryx_u32(&x1386, &x1387, x1385, x1369, x1366); + fiat_np521_addcarryx_u32(&x1388, &x1389, x1387, x1367, x1364); + fiat_np521_addcarryx_u32(&x1390, &x1391, x1389, x1365, x1362); + fiat_np521_addcarryx_u32(&x1392, &x1393, x1391, x1363, x1360); + fiat_np521_addcarryx_u32(&x1394, &x1395, x1393, x1361, x1358); + fiat_np521_addcarryx_u32(&x1396, &x1397, x1395, x1359, x1356); + fiat_np521_addcarryx_u32(&x1398, &x1399, x1397, x1357, x1354); + fiat_np521_addcarryx_u32(&x1400, &x1401, x1399, x1355, x1352); + fiat_np521_addcarryx_u32(&x1402, &x1403, x1401, x1353, x1350); + fiat_np521_addcarryx_u32(&x1404, &x1405, x1403, x1351, x1348); + fiat_np521_addcarryx_u32(&x1406, &x1407, x1405, x1349, x1346); + fiat_np521_addcarryx_u32(&x1408, &x1409, x1407, x1347, x1344); + fiat_np521_addcarryx_u32(&x1410, &x1411, 0x0, x1310, x1376); + fiat_np521_addcarryx_u32(&x1412, &x1413, x1411, x1312, x1378); + fiat_np521_addcarryx_u32(&x1414, &x1415, x1413, x1314, x1380); + fiat_np521_addcarryx_u32(&x1416, &x1417, x1415, x1316, x1382); + fiat_np521_addcarryx_u32(&x1418, &x1419, x1417, x1318, x1384); + fiat_np521_addcarryx_u32(&x1420, &x1421, x1419, x1320, x1386); + fiat_np521_addcarryx_u32(&x1422, &x1423, x1421, x1322, x1388); + fiat_np521_addcarryx_u32(&x1424, &x1425, x1423, x1324, x1390); + fiat_np521_addcarryx_u32(&x1426, &x1427, x1425, x1326, x1392); + fiat_np521_addcarryx_u32(&x1428, &x1429, x1427, x1328, x1394); + fiat_np521_addcarryx_u32(&x1430, &x1431, x1429, x1330, x1396); + fiat_np521_addcarryx_u32(&x1432, &x1433, x1431, x1332, x1398); + fiat_np521_addcarryx_u32(&x1434, &x1435, x1433, x1334, x1400); + fiat_np521_addcarryx_u32(&x1436, &x1437, x1435, x1336, x1402); + fiat_np521_addcarryx_u32(&x1438, &x1439, x1437, x1338, x1404); + fiat_np521_addcarryx_u32(&x1440, &x1441, x1439, x1340, x1406); + fiat_np521_addcarryx_u32(&x1442, &x1443, x1441, (x1341 + (x1309 + (x1275 + x1211))), x1408); + fiat_np521_addcarryx_u32(&x1444, &x1445, 0x0, x1412, (arg1[11])); + fiat_np521_addcarryx_u32(&x1446, &x1447, x1445, x1414, 0x0); + fiat_np521_addcarryx_u32(&x1448, &x1449, x1447, x1416, 0x0); + fiat_np521_addcarryx_u32(&x1450, &x1451, x1449, x1418, 0x0); + fiat_np521_addcarryx_u32(&x1452, &x1453, x1451, x1420, 0x0); + fiat_np521_addcarryx_u32(&x1454, &x1455, x1453, x1422, 0x0); + fiat_np521_addcarryx_u32(&x1456, &x1457, x1455, x1424, 0x0); + fiat_np521_addcarryx_u32(&x1458, &x1459, x1457, x1426, 0x0); + fiat_np521_addcarryx_u32(&x1460, &x1461, x1459, x1428, 0x0); + fiat_np521_addcarryx_u32(&x1462, &x1463, x1461, x1430, 0x0); + fiat_np521_addcarryx_u32(&x1464, &x1465, x1463, x1432, 0x0); + fiat_np521_addcarryx_u32(&x1466, &x1467, x1465, x1434, 0x0); + fiat_np521_addcarryx_u32(&x1468, &x1469, x1467, x1436, 0x0); + fiat_np521_addcarryx_u32(&x1470, &x1471, x1469, x1438, 0x0); + fiat_np521_addcarryx_u32(&x1472, &x1473, x1471, x1440, 0x0); + fiat_np521_addcarryx_u32(&x1474, &x1475, x1473, x1442, 0x0); + fiat_np521_mulx_u32(&x1476, &x1477, x1444, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1478, &x1479, x1476, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1480, &x1481, x1476, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1482, &x1483, x1476, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1484, &x1485, x1476, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1486, &x1487, x1476, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1488, &x1489, x1476, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1490, &x1491, x1476, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1492, &x1493, x1476, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1494, &x1495, x1476, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1496, &x1497, x1476, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1498, &x1499, x1476, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1500, &x1501, x1476, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1502, &x1503, x1476, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1504, &x1505, x1476, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1506, &x1507, x1476, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1508, &x1509, x1476, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1510, &x1511, x1476, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x1512, &x1513, 0x0, x1511, x1508); + fiat_np521_addcarryx_u32(&x1514, &x1515, x1513, x1509, x1506); + fiat_np521_addcarryx_u32(&x1516, &x1517, x1515, x1507, x1504); + fiat_np521_addcarryx_u32(&x1518, &x1519, x1517, x1505, x1502); + fiat_np521_addcarryx_u32(&x1520, &x1521, x1519, x1503, x1500); + fiat_np521_addcarryx_u32(&x1522, &x1523, x1521, x1501, x1498); + fiat_np521_addcarryx_u32(&x1524, &x1525, x1523, x1499, x1496); + fiat_np521_addcarryx_u32(&x1526, &x1527, x1525, x1497, x1494); + fiat_np521_addcarryx_u32(&x1528, &x1529, x1527, x1495, x1492); + fiat_np521_addcarryx_u32(&x1530, &x1531, x1529, x1493, x1490); + fiat_np521_addcarryx_u32(&x1532, &x1533, x1531, x1491, x1488); + fiat_np521_addcarryx_u32(&x1534, &x1535, x1533, x1489, x1486); + fiat_np521_addcarryx_u32(&x1536, &x1537, x1535, x1487, x1484); + fiat_np521_addcarryx_u32(&x1538, &x1539, x1537, x1485, x1482); + fiat_np521_addcarryx_u32(&x1540, &x1541, x1539, x1483, x1480); + fiat_np521_addcarryx_u32(&x1542, &x1543, x1541, x1481, x1478); + fiat_np521_addcarryx_u32(&x1544, &x1545, 0x0, x1444, x1510); + fiat_np521_addcarryx_u32(&x1546, &x1547, x1545, x1446, x1512); + fiat_np521_addcarryx_u32(&x1548, &x1549, x1547, x1448, x1514); + fiat_np521_addcarryx_u32(&x1550, &x1551, x1549, x1450, x1516); + fiat_np521_addcarryx_u32(&x1552, &x1553, x1551, x1452, x1518); + fiat_np521_addcarryx_u32(&x1554, &x1555, x1553, x1454, x1520); + fiat_np521_addcarryx_u32(&x1556, &x1557, x1555, x1456, x1522); + fiat_np521_addcarryx_u32(&x1558, &x1559, x1557, x1458, x1524); + fiat_np521_addcarryx_u32(&x1560, &x1561, x1559, x1460, x1526); + fiat_np521_addcarryx_u32(&x1562, &x1563, x1561, x1462, x1528); + fiat_np521_addcarryx_u32(&x1564, &x1565, x1563, x1464, x1530); + fiat_np521_addcarryx_u32(&x1566, &x1567, x1565, x1466, x1532); + fiat_np521_addcarryx_u32(&x1568, &x1569, x1567, x1468, x1534); + fiat_np521_addcarryx_u32(&x1570, &x1571, x1569, x1470, x1536); + fiat_np521_addcarryx_u32(&x1572, &x1573, x1571, x1472, x1538); + fiat_np521_addcarryx_u32(&x1574, &x1575, x1573, x1474, x1540); + fiat_np521_addcarryx_u32(&x1576, &x1577, x1575, (x1475 + (x1443 + (x1409 + x1345))), x1542); + fiat_np521_addcarryx_u32(&x1578, &x1579, 0x0, x1546, (arg1[12])); + fiat_np521_addcarryx_u32(&x1580, &x1581, x1579, x1548, 0x0); + fiat_np521_addcarryx_u32(&x1582, &x1583, x1581, x1550, 0x0); + fiat_np521_addcarryx_u32(&x1584, &x1585, x1583, x1552, 0x0); + fiat_np521_addcarryx_u32(&x1586, &x1587, x1585, x1554, 0x0); + fiat_np521_addcarryx_u32(&x1588, &x1589, x1587, x1556, 0x0); + fiat_np521_addcarryx_u32(&x1590, &x1591, x1589, x1558, 0x0); + fiat_np521_addcarryx_u32(&x1592, &x1593, x1591, x1560, 0x0); + fiat_np521_addcarryx_u32(&x1594, &x1595, x1593, x1562, 0x0); + fiat_np521_addcarryx_u32(&x1596, &x1597, x1595, x1564, 0x0); + fiat_np521_addcarryx_u32(&x1598, &x1599, x1597, x1566, 0x0); + fiat_np521_addcarryx_u32(&x1600, &x1601, x1599, x1568, 0x0); + fiat_np521_addcarryx_u32(&x1602, &x1603, x1601, x1570, 0x0); + fiat_np521_addcarryx_u32(&x1604, &x1605, x1603, x1572, 0x0); + fiat_np521_addcarryx_u32(&x1606, &x1607, x1605, x1574, 0x0); + fiat_np521_addcarryx_u32(&x1608, &x1609, x1607, x1576, 0x0); + fiat_np521_mulx_u32(&x1610, &x1611, x1578, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1612, &x1613, x1610, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1614, &x1615, x1610, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1616, &x1617, x1610, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1618, &x1619, x1610, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1620, &x1621, x1610, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1622, &x1623, x1610, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1624, &x1625, x1610, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1626, &x1627, x1610, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1628, &x1629, x1610, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1630, &x1631, x1610, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1632, &x1633, x1610, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1634, &x1635, x1610, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1636, &x1637, x1610, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1638, &x1639, x1610, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1640, &x1641, x1610, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1642, &x1643, x1610, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1644, &x1645, x1610, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x1646, &x1647, 0x0, x1645, x1642); + fiat_np521_addcarryx_u32(&x1648, &x1649, x1647, x1643, x1640); + fiat_np521_addcarryx_u32(&x1650, &x1651, x1649, x1641, x1638); + fiat_np521_addcarryx_u32(&x1652, &x1653, x1651, x1639, x1636); + fiat_np521_addcarryx_u32(&x1654, &x1655, x1653, x1637, x1634); + fiat_np521_addcarryx_u32(&x1656, &x1657, x1655, x1635, x1632); + fiat_np521_addcarryx_u32(&x1658, &x1659, x1657, x1633, x1630); + fiat_np521_addcarryx_u32(&x1660, &x1661, x1659, x1631, x1628); + fiat_np521_addcarryx_u32(&x1662, &x1663, x1661, x1629, x1626); + fiat_np521_addcarryx_u32(&x1664, &x1665, x1663, x1627, x1624); + fiat_np521_addcarryx_u32(&x1666, &x1667, x1665, x1625, x1622); + fiat_np521_addcarryx_u32(&x1668, &x1669, x1667, x1623, x1620); + fiat_np521_addcarryx_u32(&x1670, &x1671, x1669, x1621, x1618); + fiat_np521_addcarryx_u32(&x1672, &x1673, x1671, x1619, x1616); + fiat_np521_addcarryx_u32(&x1674, &x1675, x1673, x1617, x1614); + fiat_np521_addcarryx_u32(&x1676, &x1677, x1675, x1615, x1612); + fiat_np521_addcarryx_u32(&x1678, &x1679, 0x0, x1578, x1644); + fiat_np521_addcarryx_u32(&x1680, &x1681, x1679, x1580, x1646); + fiat_np521_addcarryx_u32(&x1682, &x1683, x1681, x1582, x1648); + fiat_np521_addcarryx_u32(&x1684, &x1685, x1683, x1584, x1650); + fiat_np521_addcarryx_u32(&x1686, &x1687, x1685, x1586, x1652); + fiat_np521_addcarryx_u32(&x1688, &x1689, x1687, x1588, x1654); + fiat_np521_addcarryx_u32(&x1690, &x1691, x1689, x1590, x1656); + fiat_np521_addcarryx_u32(&x1692, &x1693, x1691, x1592, x1658); + fiat_np521_addcarryx_u32(&x1694, &x1695, x1693, x1594, x1660); + fiat_np521_addcarryx_u32(&x1696, &x1697, x1695, x1596, x1662); + fiat_np521_addcarryx_u32(&x1698, &x1699, x1697, x1598, x1664); + fiat_np521_addcarryx_u32(&x1700, &x1701, x1699, x1600, x1666); + fiat_np521_addcarryx_u32(&x1702, &x1703, x1701, x1602, x1668); + fiat_np521_addcarryx_u32(&x1704, &x1705, x1703, x1604, x1670); + fiat_np521_addcarryx_u32(&x1706, &x1707, x1705, x1606, x1672); + fiat_np521_addcarryx_u32(&x1708, &x1709, x1707, x1608, x1674); + fiat_np521_addcarryx_u32(&x1710, &x1711, x1709, (x1609 + (x1577 + (x1543 + x1479))), x1676); + fiat_np521_addcarryx_u32(&x1712, &x1713, 0x0, x1680, (arg1[13])); + fiat_np521_addcarryx_u32(&x1714, &x1715, x1713, x1682, 0x0); + fiat_np521_addcarryx_u32(&x1716, &x1717, x1715, x1684, 0x0); + fiat_np521_addcarryx_u32(&x1718, &x1719, x1717, x1686, 0x0); + fiat_np521_addcarryx_u32(&x1720, &x1721, x1719, x1688, 0x0); + fiat_np521_addcarryx_u32(&x1722, &x1723, x1721, x1690, 0x0); + fiat_np521_addcarryx_u32(&x1724, &x1725, x1723, x1692, 0x0); + fiat_np521_addcarryx_u32(&x1726, &x1727, x1725, x1694, 0x0); + fiat_np521_addcarryx_u32(&x1728, &x1729, x1727, x1696, 0x0); + fiat_np521_addcarryx_u32(&x1730, &x1731, x1729, x1698, 0x0); + fiat_np521_addcarryx_u32(&x1732, &x1733, x1731, x1700, 0x0); + fiat_np521_addcarryx_u32(&x1734, &x1735, x1733, x1702, 0x0); + fiat_np521_addcarryx_u32(&x1736, &x1737, x1735, x1704, 0x0); + fiat_np521_addcarryx_u32(&x1738, &x1739, x1737, x1706, 0x0); + fiat_np521_addcarryx_u32(&x1740, &x1741, x1739, x1708, 0x0); + fiat_np521_addcarryx_u32(&x1742, &x1743, x1741, x1710, 0x0); + fiat_np521_mulx_u32(&x1744, &x1745, x1712, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1746, &x1747, x1744, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1748, &x1749, x1744, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1750, &x1751, x1744, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1752, &x1753, x1744, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1754, &x1755, x1744, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1756, &x1757, x1744, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1758, &x1759, x1744, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1760, &x1761, x1744, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1762, &x1763, x1744, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1764, &x1765, x1744, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1766, &x1767, x1744, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1768, &x1769, x1744, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1770, &x1771, x1744, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1772, &x1773, x1744, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1774, &x1775, x1744, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1776, &x1777, x1744, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1778, &x1779, x1744, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x1780, &x1781, 0x0, x1779, x1776); + fiat_np521_addcarryx_u32(&x1782, &x1783, x1781, x1777, x1774); + fiat_np521_addcarryx_u32(&x1784, &x1785, x1783, x1775, x1772); + fiat_np521_addcarryx_u32(&x1786, &x1787, x1785, x1773, x1770); + fiat_np521_addcarryx_u32(&x1788, &x1789, x1787, x1771, x1768); + fiat_np521_addcarryx_u32(&x1790, &x1791, x1789, x1769, x1766); + fiat_np521_addcarryx_u32(&x1792, &x1793, x1791, x1767, x1764); + fiat_np521_addcarryx_u32(&x1794, &x1795, x1793, x1765, x1762); + fiat_np521_addcarryx_u32(&x1796, &x1797, x1795, x1763, x1760); + fiat_np521_addcarryx_u32(&x1798, &x1799, x1797, x1761, x1758); + fiat_np521_addcarryx_u32(&x1800, &x1801, x1799, x1759, x1756); + fiat_np521_addcarryx_u32(&x1802, &x1803, x1801, x1757, x1754); + fiat_np521_addcarryx_u32(&x1804, &x1805, x1803, x1755, x1752); + fiat_np521_addcarryx_u32(&x1806, &x1807, x1805, x1753, x1750); + fiat_np521_addcarryx_u32(&x1808, &x1809, x1807, x1751, x1748); + fiat_np521_addcarryx_u32(&x1810, &x1811, x1809, x1749, x1746); + fiat_np521_addcarryx_u32(&x1812, &x1813, 0x0, x1712, x1778); + fiat_np521_addcarryx_u32(&x1814, &x1815, x1813, x1714, x1780); + fiat_np521_addcarryx_u32(&x1816, &x1817, x1815, x1716, x1782); + fiat_np521_addcarryx_u32(&x1818, &x1819, x1817, x1718, x1784); + fiat_np521_addcarryx_u32(&x1820, &x1821, x1819, x1720, x1786); + fiat_np521_addcarryx_u32(&x1822, &x1823, x1821, x1722, x1788); + fiat_np521_addcarryx_u32(&x1824, &x1825, x1823, x1724, x1790); + fiat_np521_addcarryx_u32(&x1826, &x1827, x1825, x1726, x1792); + fiat_np521_addcarryx_u32(&x1828, &x1829, x1827, x1728, x1794); + fiat_np521_addcarryx_u32(&x1830, &x1831, x1829, x1730, x1796); + fiat_np521_addcarryx_u32(&x1832, &x1833, x1831, x1732, x1798); + fiat_np521_addcarryx_u32(&x1834, &x1835, x1833, x1734, x1800); + fiat_np521_addcarryx_u32(&x1836, &x1837, x1835, x1736, x1802); + fiat_np521_addcarryx_u32(&x1838, &x1839, x1837, x1738, x1804); + fiat_np521_addcarryx_u32(&x1840, &x1841, x1839, x1740, x1806); + fiat_np521_addcarryx_u32(&x1842, &x1843, x1841, x1742, x1808); + fiat_np521_addcarryx_u32(&x1844, &x1845, x1843, (x1743 + (x1711 + (x1677 + x1613))), x1810); + fiat_np521_addcarryx_u32(&x1846, &x1847, 0x0, x1814, (arg1[14])); + fiat_np521_addcarryx_u32(&x1848, &x1849, x1847, x1816, 0x0); + fiat_np521_addcarryx_u32(&x1850, &x1851, x1849, x1818, 0x0); + fiat_np521_addcarryx_u32(&x1852, &x1853, x1851, x1820, 0x0); + fiat_np521_addcarryx_u32(&x1854, &x1855, x1853, x1822, 0x0); + fiat_np521_addcarryx_u32(&x1856, &x1857, x1855, x1824, 0x0); + fiat_np521_addcarryx_u32(&x1858, &x1859, x1857, x1826, 0x0); + fiat_np521_addcarryx_u32(&x1860, &x1861, x1859, x1828, 0x0); + fiat_np521_addcarryx_u32(&x1862, &x1863, x1861, x1830, 0x0); + fiat_np521_addcarryx_u32(&x1864, &x1865, x1863, x1832, 0x0); + fiat_np521_addcarryx_u32(&x1866, &x1867, x1865, x1834, 0x0); + fiat_np521_addcarryx_u32(&x1868, &x1869, x1867, x1836, 0x0); + fiat_np521_addcarryx_u32(&x1870, &x1871, x1869, x1838, 0x0); + fiat_np521_addcarryx_u32(&x1872, &x1873, x1871, x1840, 0x0); + fiat_np521_addcarryx_u32(&x1874, &x1875, x1873, x1842, 0x0); + fiat_np521_addcarryx_u32(&x1876, &x1877, x1875, x1844, 0x0); + fiat_np521_mulx_u32(&x1878, &x1879, x1846, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1880, &x1881, x1878, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1882, &x1883, x1878, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1884, &x1885, x1878, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1886, &x1887, x1878, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1888, &x1889, x1878, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1890, &x1891, x1878, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1892, &x1893, x1878, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1894, &x1895, x1878, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1896, &x1897, x1878, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1898, &x1899, x1878, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1900, &x1901, x1878, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1902, &x1903, x1878, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1904, &x1905, x1878, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1906, &x1907, x1878, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1908, &x1909, x1878, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1910, &x1911, x1878, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1912, &x1913, x1878, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x1914, &x1915, 0x0, x1913, x1910); + fiat_np521_addcarryx_u32(&x1916, &x1917, x1915, x1911, x1908); + fiat_np521_addcarryx_u32(&x1918, &x1919, x1917, x1909, x1906); + fiat_np521_addcarryx_u32(&x1920, &x1921, x1919, x1907, x1904); + fiat_np521_addcarryx_u32(&x1922, &x1923, x1921, x1905, x1902); + fiat_np521_addcarryx_u32(&x1924, &x1925, x1923, x1903, x1900); + fiat_np521_addcarryx_u32(&x1926, &x1927, x1925, x1901, x1898); + fiat_np521_addcarryx_u32(&x1928, &x1929, x1927, x1899, x1896); + fiat_np521_addcarryx_u32(&x1930, &x1931, x1929, x1897, x1894); + fiat_np521_addcarryx_u32(&x1932, &x1933, x1931, x1895, x1892); + fiat_np521_addcarryx_u32(&x1934, &x1935, x1933, x1893, x1890); + fiat_np521_addcarryx_u32(&x1936, &x1937, x1935, x1891, x1888); + fiat_np521_addcarryx_u32(&x1938, &x1939, x1937, x1889, x1886); + fiat_np521_addcarryx_u32(&x1940, &x1941, x1939, x1887, x1884); + fiat_np521_addcarryx_u32(&x1942, &x1943, x1941, x1885, x1882); + fiat_np521_addcarryx_u32(&x1944, &x1945, x1943, x1883, x1880); + fiat_np521_addcarryx_u32(&x1946, &x1947, 0x0, x1846, x1912); + fiat_np521_addcarryx_u32(&x1948, &x1949, x1947, x1848, x1914); + fiat_np521_addcarryx_u32(&x1950, &x1951, x1949, x1850, x1916); + fiat_np521_addcarryx_u32(&x1952, &x1953, x1951, x1852, x1918); + fiat_np521_addcarryx_u32(&x1954, &x1955, x1953, x1854, x1920); + fiat_np521_addcarryx_u32(&x1956, &x1957, x1955, x1856, x1922); + fiat_np521_addcarryx_u32(&x1958, &x1959, x1957, x1858, x1924); + fiat_np521_addcarryx_u32(&x1960, &x1961, x1959, x1860, x1926); + fiat_np521_addcarryx_u32(&x1962, &x1963, x1961, x1862, x1928); + fiat_np521_addcarryx_u32(&x1964, &x1965, x1963, x1864, x1930); + fiat_np521_addcarryx_u32(&x1966, &x1967, x1965, x1866, x1932); + fiat_np521_addcarryx_u32(&x1968, &x1969, x1967, x1868, x1934); + fiat_np521_addcarryx_u32(&x1970, &x1971, x1969, x1870, x1936); + fiat_np521_addcarryx_u32(&x1972, &x1973, x1971, x1872, x1938); + fiat_np521_addcarryx_u32(&x1974, &x1975, x1973, x1874, x1940); + fiat_np521_addcarryx_u32(&x1976, &x1977, x1975, x1876, x1942); + fiat_np521_addcarryx_u32(&x1978, &x1979, x1977, (x1877 + (x1845 + (x1811 + x1747))), x1944); + fiat_np521_addcarryx_u32(&x1980, &x1981, 0x0, x1948, (arg1[15])); + fiat_np521_addcarryx_u32(&x1982, &x1983, x1981, x1950, 0x0); + fiat_np521_addcarryx_u32(&x1984, &x1985, x1983, x1952, 0x0); + fiat_np521_addcarryx_u32(&x1986, &x1987, x1985, x1954, 0x0); + fiat_np521_addcarryx_u32(&x1988, &x1989, x1987, x1956, 0x0); + fiat_np521_addcarryx_u32(&x1990, &x1991, x1989, x1958, 0x0); + fiat_np521_addcarryx_u32(&x1992, &x1993, x1991, x1960, 0x0); + fiat_np521_addcarryx_u32(&x1994, &x1995, x1993, x1962, 0x0); + fiat_np521_addcarryx_u32(&x1996, &x1997, x1995, x1964, 0x0); + fiat_np521_addcarryx_u32(&x1998, &x1999, x1997, x1966, 0x0); + fiat_np521_addcarryx_u32(&x2000, &x2001, x1999, x1968, 0x0); + fiat_np521_addcarryx_u32(&x2002, &x2003, x2001, x1970, 0x0); + fiat_np521_addcarryx_u32(&x2004, &x2005, x2003, x1972, 0x0); + fiat_np521_addcarryx_u32(&x2006, &x2007, x2005, x1974, 0x0); + fiat_np521_addcarryx_u32(&x2008, &x2009, x2007, x1976, 0x0); + fiat_np521_addcarryx_u32(&x2010, &x2011, x2009, x1978, 0x0); + fiat_np521_mulx_u32(&x2012, &x2013, x1980, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x2014, &x2015, x2012, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x2016, &x2017, x2012, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2018, &x2019, x2012, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2020, &x2021, x2012, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2022, &x2023, x2012, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2024, &x2025, x2012, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2026, &x2027, x2012, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2028, &x2029, x2012, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2030, &x2031, x2012, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x2032, &x2033, x2012, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x2034, &x2035, x2012, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x2036, &x2037, x2012, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x2038, &x2039, x2012, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x2040, &x2041, x2012, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x2042, &x2043, x2012, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x2044, &x2045, x2012, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x2046, &x2047, x2012, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x2048, &x2049, 0x0, x2047, x2044); + fiat_np521_addcarryx_u32(&x2050, &x2051, x2049, x2045, x2042); + fiat_np521_addcarryx_u32(&x2052, &x2053, x2051, x2043, x2040); + fiat_np521_addcarryx_u32(&x2054, &x2055, x2053, x2041, x2038); + fiat_np521_addcarryx_u32(&x2056, &x2057, x2055, x2039, x2036); + fiat_np521_addcarryx_u32(&x2058, &x2059, x2057, x2037, x2034); + fiat_np521_addcarryx_u32(&x2060, &x2061, x2059, x2035, x2032); + fiat_np521_addcarryx_u32(&x2062, &x2063, x2061, x2033, x2030); + fiat_np521_addcarryx_u32(&x2064, &x2065, x2063, x2031, x2028); + fiat_np521_addcarryx_u32(&x2066, &x2067, x2065, x2029, x2026); + fiat_np521_addcarryx_u32(&x2068, &x2069, x2067, x2027, x2024); + fiat_np521_addcarryx_u32(&x2070, &x2071, x2069, x2025, x2022); + fiat_np521_addcarryx_u32(&x2072, &x2073, x2071, x2023, x2020); + fiat_np521_addcarryx_u32(&x2074, &x2075, x2073, x2021, x2018); + fiat_np521_addcarryx_u32(&x2076, &x2077, x2075, x2019, x2016); + fiat_np521_addcarryx_u32(&x2078, &x2079, x2077, x2017, x2014); + fiat_np521_addcarryx_u32(&x2080, &x2081, 0x0, x1980, x2046); + fiat_np521_addcarryx_u32(&x2082, &x2083, x2081, x1982, x2048); + fiat_np521_addcarryx_u32(&x2084, &x2085, x2083, x1984, x2050); + fiat_np521_addcarryx_u32(&x2086, &x2087, x2085, x1986, x2052); + fiat_np521_addcarryx_u32(&x2088, &x2089, x2087, x1988, x2054); + fiat_np521_addcarryx_u32(&x2090, &x2091, x2089, x1990, x2056); + fiat_np521_addcarryx_u32(&x2092, &x2093, x2091, x1992, x2058); + fiat_np521_addcarryx_u32(&x2094, &x2095, x2093, x1994, x2060); + fiat_np521_addcarryx_u32(&x2096, &x2097, x2095, x1996, x2062); + fiat_np521_addcarryx_u32(&x2098, &x2099, x2097, x1998, x2064); + fiat_np521_addcarryx_u32(&x2100, &x2101, x2099, x2000, x2066); + fiat_np521_addcarryx_u32(&x2102, &x2103, x2101, x2002, x2068); + fiat_np521_addcarryx_u32(&x2104, &x2105, x2103, x2004, x2070); + fiat_np521_addcarryx_u32(&x2106, &x2107, x2105, x2006, x2072); + fiat_np521_addcarryx_u32(&x2108, &x2109, x2107, x2008, x2074); + fiat_np521_addcarryx_u32(&x2110, &x2111, x2109, x2010, x2076); + fiat_np521_addcarryx_u32(&x2112, &x2113, x2111, (x2011 + (x1979 + (x1945 + x1881))), x2078); + fiat_np521_addcarryx_u32(&x2114, &x2115, 0x0, x2082, (arg1[16])); + fiat_np521_addcarryx_u32(&x2116, &x2117, x2115, x2084, 0x0); + fiat_np521_addcarryx_u32(&x2118, &x2119, x2117, x2086, 0x0); + fiat_np521_addcarryx_u32(&x2120, &x2121, x2119, x2088, 0x0); + fiat_np521_addcarryx_u32(&x2122, &x2123, x2121, x2090, 0x0); + fiat_np521_addcarryx_u32(&x2124, &x2125, x2123, x2092, 0x0); + fiat_np521_addcarryx_u32(&x2126, &x2127, x2125, x2094, 0x0); + fiat_np521_addcarryx_u32(&x2128, &x2129, x2127, x2096, 0x0); + fiat_np521_addcarryx_u32(&x2130, &x2131, x2129, x2098, 0x0); + fiat_np521_addcarryx_u32(&x2132, &x2133, x2131, x2100, 0x0); + fiat_np521_addcarryx_u32(&x2134, &x2135, x2133, x2102, 0x0); + fiat_np521_addcarryx_u32(&x2136, &x2137, x2135, x2104, 0x0); + fiat_np521_addcarryx_u32(&x2138, &x2139, x2137, x2106, 0x0); + fiat_np521_addcarryx_u32(&x2140, &x2141, x2139, x2108, 0x0); + fiat_np521_addcarryx_u32(&x2142, &x2143, x2141, x2110, 0x0); + fiat_np521_addcarryx_u32(&x2144, &x2145, x2143, x2112, 0x0); + fiat_np521_mulx_u32(&x2146, &x2147, x2114, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x2148, &x2149, x2146, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x2150, &x2151, x2146, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2152, &x2153, x2146, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2154, &x2155, x2146, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2156, &x2157, x2146, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2158, &x2159, x2146, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2160, &x2161, x2146, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2162, &x2163, x2146, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2164, &x2165, x2146, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x2166, &x2167, x2146, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x2168, &x2169, x2146, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x2170, &x2171, x2146, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x2172, &x2173, x2146, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x2174, &x2175, x2146, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x2176, &x2177, x2146, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x2178, &x2179, x2146, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x2180, &x2181, x2146, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x2182, &x2183, 0x0, x2181, x2178); + fiat_np521_addcarryx_u32(&x2184, &x2185, x2183, x2179, x2176); + fiat_np521_addcarryx_u32(&x2186, &x2187, x2185, x2177, x2174); + fiat_np521_addcarryx_u32(&x2188, &x2189, x2187, x2175, x2172); + fiat_np521_addcarryx_u32(&x2190, &x2191, x2189, x2173, x2170); + fiat_np521_addcarryx_u32(&x2192, &x2193, x2191, x2171, x2168); + fiat_np521_addcarryx_u32(&x2194, &x2195, x2193, x2169, x2166); + fiat_np521_addcarryx_u32(&x2196, &x2197, x2195, x2167, x2164); + fiat_np521_addcarryx_u32(&x2198, &x2199, x2197, x2165, x2162); + fiat_np521_addcarryx_u32(&x2200, &x2201, x2199, x2163, x2160); + fiat_np521_addcarryx_u32(&x2202, &x2203, x2201, x2161, x2158); + fiat_np521_addcarryx_u32(&x2204, &x2205, x2203, x2159, x2156); + fiat_np521_addcarryx_u32(&x2206, &x2207, x2205, x2157, x2154); + fiat_np521_addcarryx_u32(&x2208, &x2209, x2207, x2155, x2152); + fiat_np521_addcarryx_u32(&x2210, &x2211, x2209, x2153, x2150); + fiat_np521_addcarryx_u32(&x2212, &x2213, x2211, x2151, x2148); + fiat_np521_addcarryx_u32(&x2214, &x2215, 0x0, x2114, x2180); + fiat_np521_addcarryx_u32(&x2216, &x2217, x2215, x2116, x2182); + fiat_np521_addcarryx_u32(&x2218, &x2219, x2217, x2118, x2184); + fiat_np521_addcarryx_u32(&x2220, &x2221, x2219, x2120, x2186); + fiat_np521_addcarryx_u32(&x2222, &x2223, x2221, x2122, x2188); + fiat_np521_addcarryx_u32(&x2224, &x2225, x2223, x2124, x2190); + fiat_np521_addcarryx_u32(&x2226, &x2227, x2225, x2126, x2192); + fiat_np521_addcarryx_u32(&x2228, &x2229, x2227, x2128, x2194); + fiat_np521_addcarryx_u32(&x2230, &x2231, x2229, x2130, x2196); + fiat_np521_addcarryx_u32(&x2232, &x2233, x2231, x2132, x2198); + fiat_np521_addcarryx_u32(&x2234, &x2235, x2233, x2134, x2200); + fiat_np521_addcarryx_u32(&x2236, &x2237, x2235, x2136, x2202); + fiat_np521_addcarryx_u32(&x2238, &x2239, x2237, x2138, x2204); + fiat_np521_addcarryx_u32(&x2240, &x2241, x2239, x2140, x2206); + fiat_np521_addcarryx_u32(&x2242, &x2243, x2241, x2142, x2208); + fiat_np521_addcarryx_u32(&x2244, &x2245, x2243, x2144, x2210); + fiat_np521_addcarryx_u32(&x2246, &x2247, x2245, (x2145 + (x2113 + (x2079 + x2015))), x2212); + x2248 = (x2247 + (x2213 + x2149)); + fiat_np521_subborrowx_u32(&x2249, &x2250, 0x0, x2216, UINT32_C(0x91386409)); + fiat_np521_subborrowx_u32(&x2251, &x2252, x2250, x2218, UINT32_C(0xbb6fb71e)); + fiat_np521_subborrowx_u32(&x2253, &x2254, x2252, x2220, UINT32_C(0x899c47ae)); + fiat_np521_subborrowx_u32(&x2255, &x2256, x2254, x2222, UINT32_C(0x3bb5c9b8)); + fiat_np521_subborrowx_u32(&x2257, &x2258, x2256, x2224, UINT32_C(0xf709a5d0)); + fiat_np521_subborrowx_u32(&x2259, &x2260, x2258, x2226, UINT32_C(0x7fcc0148)); + fiat_np521_subborrowx_u32(&x2261, &x2262, x2260, x2228, UINT32_C(0xbf2f966b)); + fiat_np521_subborrowx_u32(&x2263, &x2264, x2262, x2230, UINT32_C(0x51868783)); + fiat_np521_subborrowx_u32(&x2265, &x2266, x2264, x2232, UINT32_C(0xfffffffa)); + fiat_np521_subborrowx_u32(&x2267, &x2268, x2266, x2234, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x2269, &x2270, x2268, x2236, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x2271, &x2272, x2270, x2238, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x2273, &x2274, x2272, x2240, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x2275, &x2276, x2274, x2242, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x2277, &x2278, x2276, x2244, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x2279, &x2280, x2278, x2246, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x2281, &x2282, x2280, x2248, UINT16_C(0x1ff)); + fiat_np521_subborrowx_u32(&x2283, &x2284, x2282, 0x0, 0x0); + fiat_np521_cmovznz_u32(&x2285, x2284, x2249, x2216); + fiat_np521_cmovznz_u32(&x2286, x2284, x2251, x2218); + fiat_np521_cmovznz_u32(&x2287, x2284, x2253, x2220); + fiat_np521_cmovznz_u32(&x2288, x2284, x2255, x2222); + fiat_np521_cmovznz_u32(&x2289, x2284, x2257, x2224); + fiat_np521_cmovznz_u32(&x2290, x2284, x2259, x2226); + fiat_np521_cmovznz_u32(&x2291, x2284, x2261, x2228); + fiat_np521_cmovznz_u32(&x2292, x2284, x2263, x2230); + fiat_np521_cmovznz_u32(&x2293, x2284, x2265, x2232); + fiat_np521_cmovznz_u32(&x2294, x2284, x2267, x2234); + fiat_np521_cmovznz_u32(&x2295, x2284, x2269, x2236); + fiat_np521_cmovznz_u32(&x2296, x2284, x2271, x2238); + fiat_np521_cmovznz_u32(&x2297, x2284, x2273, x2240); + fiat_np521_cmovznz_u32(&x2298, x2284, x2275, x2242); + fiat_np521_cmovznz_u32(&x2299, x2284, x2277, x2244); + fiat_np521_cmovznz_u32(&x2300, x2284, x2279, x2246); + fiat_np521_cmovznz_u32(&x2301, x2284, x2281, x2248); + out1[0] = x2285; + out1[1] = x2286; + out1[2] = x2287; + out1[3] = x2288; + out1[4] = x2289; + out1[5] = x2290; + out1[6] = x2291; + out1[7] = x2292; + out1[8] = x2293; + out1[9] = x2294; + out1[10] = x2295; + out1[11] = x2296; + out1[12] = x2297; + out1[13] = x2298; + out1[14] = x2299; + out1[15] = x2300; + out1[16] = x2301; +} + +/* + * The function fiat_np521_to_montgomery translates a field element into the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np521_to_montgomery(uint32_t out1[17], const uint32_t arg1[17]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint32_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + uint32_t x52; + fiat_np521_uint1 x53; + uint32_t x54; + fiat_np521_uint1 x55; + uint32_t x56; + fiat_np521_uint1 x57; + uint32_t x58; + fiat_np521_uint1 x59; + uint32_t x60; + fiat_np521_uint1 x61; + uint32_t x62; + fiat_np521_uint1 x63; + uint32_t x64; + fiat_np521_uint1 x65; + uint32_t x66; + fiat_np521_uint1 x67; + uint32_t x68; + fiat_np521_uint1 x69; + uint32_t x70; + fiat_np521_uint1 x71; + uint32_t x72; + fiat_np521_uint1 x73; + uint32_t x74; + fiat_np521_uint1 x75; + uint32_t x76; + fiat_np521_uint1 x77; + uint32_t x78; + fiat_np521_uint1 x79; + uint32_t x80; + fiat_np521_uint1 x81; + uint32_t x82; + fiat_np521_uint1 x83; + uint32_t x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + uint32_t x88; + uint32_t x89; + uint32_t x90; + uint32_t x91; + uint32_t x92; + uint32_t x93; + uint32_t x94; + uint32_t x95; + uint32_t x96; + uint32_t x97; + uint32_t x98; + uint32_t x99; + uint32_t x100; + uint32_t x101; + uint32_t x102; + uint32_t x103; + uint32_t x104; + uint32_t x105; + uint32_t x106; + uint32_t x107; + uint32_t x108; + uint32_t x109; + uint32_t x110; + uint32_t x111; + uint32_t x112; + uint32_t x113; + uint32_t x114; + uint32_t x115; + uint32_t x116; + uint32_t x117; + uint32_t x118; + uint32_t x119; + uint32_t x120; + fiat_np521_uint1 x121; + uint32_t x122; + fiat_np521_uint1 x123; + uint32_t x124; + fiat_np521_uint1 x125; + uint32_t x126; + fiat_np521_uint1 x127; + uint32_t x128; + fiat_np521_uint1 x129; + uint32_t x130; + fiat_np521_uint1 x131; + uint32_t x132; + fiat_np521_uint1 x133; + uint32_t x134; + fiat_np521_uint1 x135; + uint32_t x136; + fiat_np521_uint1 x137; + uint32_t x138; + fiat_np521_uint1 x139; + uint32_t x140; + fiat_np521_uint1 x141; + uint32_t x142; + fiat_np521_uint1 x143; + uint32_t x144; + fiat_np521_uint1 x145; + uint32_t x146; + fiat_np521_uint1 x147; + uint32_t x148; + fiat_np521_uint1 x149; + uint32_t x150; + fiat_np521_uint1 x151; + uint32_t x152; + fiat_np521_uint1 x153; + uint32_t x154; + fiat_np521_uint1 x155; + uint32_t x156; + fiat_np521_uint1 x157; + uint32_t x158; + fiat_np521_uint1 x159; + uint32_t x160; + fiat_np521_uint1 x161; + uint32_t x162; + fiat_np521_uint1 x163; + uint32_t x164; + fiat_np521_uint1 x165; + uint32_t x166; + fiat_np521_uint1 x167; + uint32_t x168; + fiat_np521_uint1 x169; + uint32_t x170; + fiat_np521_uint1 x171; + uint32_t x172; + fiat_np521_uint1 x173; + uint32_t x174; + fiat_np521_uint1 x175; + uint32_t x176; + fiat_np521_uint1 x177; + uint32_t x178; + fiat_np521_uint1 x179; + uint32_t x180; + fiat_np521_uint1 x181; + uint32_t x182; + fiat_np521_uint1 x183; + uint32_t x184; + fiat_np521_uint1 x185; + uint32_t x186; + uint32_t x187; + uint32_t x188; + uint32_t x189; + uint32_t x190; + uint32_t x191; + uint32_t x192; + uint32_t x193; + uint32_t x194; + uint32_t x195; + uint32_t x196; + uint32_t x197; + uint32_t x198; + uint32_t x199; + uint32_t x200; + uint32_t x201; + uint32_t x202; + uint32_t x203; + uint32_t x204; + uint32_t x205; + uint32_t x206; + uint32_t x207; + uint32_t x208; + uint32_t x209; + uint32_t x210; + uint32_t x211; + uint32_t x212; + uint32_t x213; + uint32_t x214; + uint32_t x215; + uint32_t x216; + uint32_t x217; + uint32_t x218; + uint32_t x219; + uint32_t x220; + fiat_np521_uint1 x221; + uint32_t x222; + fiat_np521_uint1 x223; + uint32_t x224; + fiat_np521_uint1 x225; + uint32_t x226; + fiat_np521_uint1 x227; + uint32_t x228; + fiat_np521_uint1 x229; + uint32_t x230; + fiat_np521_uint1 x231; + uint32_t x232; + fiat_np521_uint1 x233; + uint32_t x234; + fiat_np521_uint1 x235; + uint32_t x236; + fiat_np521_uint1 x237; + uint32_t x238; + fiat_np521_uint1 x239; + uint32_t x240; + fiat_np521_uint1 x241; + uint32_t x242; + fiat_np521_uint1 x243; + uint32_t x244; + fiat_np521_uint1 x245; + uint32_t x246; + fiat_np521_uint1 x247; + uint32_t x248; + fiat_np521_uint1 x249; + uint32_t x250; + fiat_np521_uint1 x251; + uint32_t x252; + fiat_np521_uint1 x253; + uint32_t x254; + fiat_np521_uint1 x255; + uint32_t x256; + fiat_np521_uint1 x257; + uint32_t x258; + fiat_np521_uint1 x259; + uint32_t x260; + fiat_np521_uint1 x261; + uint32_t x262; + fiat_np521_uint1 x263; + uint32_t x264; + fiat_np521_uint1 x265; + uint32_t x266; + fiat_np521_uint1 x267; + uint32_t x268; + fiat_np521_uint1 x269; + uint32_t x270; + fiat_np521_uint1 x271; + uint32_t x272; + fiat_np521_uint1 x273; + uint32_t x274; + fiat_np521_uint1 x275; + uint32_t x276; + fiat_np521_uint1 x277; + uint32_t x278; + fiat_np521_uint1 x279; + uint32_t x280; + fiat_np521_uint1 x281; + uint32_t x282; + fiat_np521_uint1 x283; + uint32_t x284; + fiat_np521_uint1 x285; + uint32_t x286; + uint32_t x287; + uint32_t x288; + uint32_t x289; + uint32_t x290; + uint32_t x291; + uint32_t x292; + uint32_t x293; + uint32_t x294; + uint32_t x295; + uint32_t x296; + uint32_t x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + uint32_t x303; + uint32_t x304; + uint32_t x305; + uint32_t x306; + uint32_t x307; + uint32_t x308; + uint32_t x309; + uint32_t x310; + uint32_t x311; + uint32_t x312; + uint32_t x313; + uint32_t x314; + uint32_t x315; + uint32_t x316; + uint32_t x317; + uint32_t x318; + uint32_t x319; + uint32_t x320; + uint32_t x321; + uint32_t x322; + fiat_np521_uint1 x323; + uint32_t x324; + fiat_np521_uint1 x325; + uint32_t x326; + fiat_np521_uint1 x327; + uint32_t x328; + fiat_np521_uint1 x329; + uint32_t x330; + fiat_np521_uint1 x331; + uint32_t x332; + fiat_np521_uint1 x333; + uint32_t x334; + fiat_np521_uint1 x335; + uint32_t x336; + fiat_np521_uint1 x337; + uint32_t x338; + fiat_np521_uint1 x339; + uint32_t x340; + fiat_np521_uint1 x341; + uint32_t x342; + fiat_np521_uint1 x343; + uint32_t x344; + fiat_np521_uint1 x345; + uint32_t x346; + fiat_np521_uint1 x347; + uint32_t x348; + fiat_np521_uint1 x349; + uint32_t x350; + fiat_np521_uint1 x351; + uint32_t x352; + fiat_np521_uint1 x353; + uint32_t x354; + fiat_np521_uint1 x355; + uint32_t x356; + fiat_np521_uint1 x357; + uint32_t x358; + fiat_np521_uint1 x359; + uint32_t x360; + fiat_np521_uint1 x361; + uint32_t x362; + fiat_np521_uint1 x363; + uint32_t x364; + fiat_np521_uint1 x365; + uint32_t x366; + fiat_np521_uint1 x367; + uint32_t x368; + fiat_np521_uint1 x369; + uint32_t x370; + fiat_np521_uint1 x371; + uint32_t x372; + fiat_np521_uint1 x373; + uint32_t x374; + fiat_np521_uint1 x375; + uint32_t x376; + fiat_np521_uint1 x377; + uint32_t x378; + fiat_np521_uint1 x379; + uint32_t x380; + fiat_np521_uint1 x381; + uint32_t x382; + fiat_np521_uint1 x383; + uint32_t x384; + fiat_np521_uint1 x385; + uint32_t x386; + fiat_np521_uint1 x387; + uint32_t x388; + uint32_t x389; + uint32_t x390; + uint32_t x391; + uint32_t x392; + uint32_t x393; + uint32_t x394; + uint32_t x395; + uint32_t x396; + uint32_t x397; + uint32_t x398; + uint32_t x399; + uint32_t x400; + uint32_t x401; + uint32_t x402; + uint32_t x403; + uint32_t x404; + uint32_t x405; + uint32_t x406; + uint32_t x407; + uint32_t x408; + uint32_t x409; + uint32_t x410; + uint32_t x411; + uint32_t x412; + uint32_t x413; + uint32_t x414; + uint32_t x415; + uint32_t x416; + uint32_t x417; + uint32_t x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + uint32_t x422; + fiat_np521_uint1 x423; + uint32_t x424; + fiat_np521_uint1 x425; + uint32_t x426; + fiat_np521_uint1 x427; + uint32_t x428; + fiat_np521_uint1 x429; + uint32_t x430; + fiat_np521_uint1 x431; + uint32_t x432; + fiat_np521_uint1 x433; + uint32_t x434; + fiat_np521_uint1 x435; + uint32_t x436; + fiat_np521_uint1 x437; + uint32_t x438; + fiat_np521_uint1 x439; + uint32_t x440; + fiat_np521_uint1 x441; + uint32_t x442; + fiat_np521_uint1 x443; + uint32_t x444; + fiat_np521_uint1 x445; + uint32_t x446; + fiat_np521_uint1 x447; + uint32_t x448; + fiat_np521_uint1 x449; + uint32_t x450; + fiat_np521_uint1 x451; + uint32_t x452; + fiat_np521_uint1 x453; + uint32_t x454; + fiat_np521_uint1 x455; + uint32_t x456; + fiat_np521_uint1 x457; + uint32_t x458; + fiat_np521_uint1 x459; + uint32_t x460; + fiat_np521_uint1 x461; + uint32_t x462; + fiat_np521_uint1 x463; + uint32_t x464; + fiat_np521_uint1 x465; + uint32_t x466; + fiat_np521_uint1 x467; + uint32_t x468; + fiat_np521_uint1 x469; + uint32_t x470; + fiat_np521_uint1 x471; + uint32_t x472; + fiat_np521_uint1 x473; + uint32_t x474; + fiat_np521_uint1 x475; + uint32_t x476; + fiat_np521_uint1 x477; + uint32_t x478; + fiat_np521_uint1 x479; + uint32_t x480; + fiat_np521_uint1 x481; + uint32_t x482; + fiat_np521_uint1 x483; + uint32_t x484; + fiat_np521_uint1 x485; + uint32_t x486; + fiat_np521_uint1 x487; + uint32_t x488; + uint32_t x489; + uint32_t x490; + uint32_t x491; + uint32_t x492; + uint32_t x493; + uint32_t x494; + uint32_t x495; + uint32_t x496; + uint32_t x497; + uint32_t x498; + uint32_t x499; + uint32_t x500; + uint32_t x501; + uint32_t x502; + uint32_t x503; + uint32_t x504; + uint32_t x505; + uint32_t x506; + uint32_t x507; + uint32_t x508; + uint32_t x509; + uint32_t x510; + uint32_t x511; + uint32_t x512; + uint32_t x513; + uint32_t x514; + uint32_t x515; + uint32_t x516; + uint32_t x517; + uint32_t x518; + uint32_t x519; + uint32_t x520; + uint32_t x521; + uint32_t x522; + uint32_t x523; + uint32_t x524; + fiat_np521_uint1 x525; + uint32_t x526; + fiat_np521_uint1 x527; + uint32_t x528; + fiat_np521_uint1 x529; + uint32_t x530; + fiat_np521_uint1 x531; + uint32_t x532; + fiat_np521_uint1 x533; + uint32_t x534; + fiat_np521_uint1 x535; + uint32_t x536; + fiat_np521_uint1 x537; + uint32_t x538; + fiat_np521_uint1 x539; + uint32_t x540; + fiat_np521_uint1 x541; + uint32_t x542; + fiat_np521_uint1 x543; + uint32_t x544; + fiat_np521_uint1 x545; + uint32_t x546; + fiat_np521_uint1 x547; + uint32_t x548; + fiat_np521_uint1 x549; + uint32_t x550; + fiat_np521_uint1 x551; + uint32_t x552; + fiat_np521_uint1 x553; + uint32_t x554; + fiat_np521_uint1 x555; + uint32_t x556; + fiat_np521_uint1 x557; + uint32_t x558; + fiat_np521_uint1 x559; + uint32_t x560; + fiat_np521_uint1 x561; + uint32_t x562; + fiat_np521_uint1 x563; + uint32_t x564; + fiat_np521_uint1 x565; + uint32_t x566; + fiat_np521_uint1 x567; + uint32_t x568; + fiat_np521_uint1 x569; + uint32_t x570; + fiat_np521_uint1 x571; + uint32_t x572; + fiat_np521_uint1 x573; + uint32_t x574; + fiat_np521_uint1 x575; + uint32_t x576; + fiat_np521_uint1 x577; + uint32_t x578; + fiat_np521_uint1 x579; + uint32_t x580; + fiat_np521_uint1 x581; + uint32_t x582; + fiat_np521_uint1 x583; + uint32_t x584; + fiat_np521_uint1 x585; + uint32_t x586; + fiat_np521_uint1 x587; + uint32_t x588; + fiat_np521_uint1 x589; + uint32_t x590; + uint32_t x591; + uint32_t x592; + uint32_t x593; + uint32_t x594; + uint32_t x595; + uint32_t x596; + uint32_t x597; + uint32_t x598; + uint32_t x599; + uint32_t x600; + uint32_t x601; + uint32_t x602; + uint32_t x603; + uint32_t x604; + uint32_t x605; + uint32_t x606; + uint32_t x607; + uint32_t x608; + uint32_t x609; + uint32_t x610; + uint32_t x611; + uint32_t x612; + uint32_t x613; + uint32_t x614; + uint32_t x615; + uint32_t x616; + uint32_t x617; + uint32_t x618; + uint32_t x619; + uint32_t x620; + uint32_t x621; + uint32_t x622; + uint32_t x623; + uint32_t x624; + fiat_np521_uint1 x625; + uint32_t x626; + fiat_np521_uint1 x627; + uint32_t x628; + fiat_np521_uint1 x629; + uint32_t x630; + fiat_np521_uint1 x631; + uint32_t x632; + fiat_np521_uint1 x633; + uint32_t x634; + fiat_np521_uint1 x635; + uint32_t x636; + fiat_np521_uint1 x637; + uint32_t x638; + fiat_np521_uint1 x639; + uint32_t x640; + fiat_np521_uint1 x641; + uint32_t x642; + fiat_np521_uint1 x643; + uint32_t x644; + fiat_np521_uint1 x645; + uint32_t x646; + fiat_np521_uint1 x647; + uint32_t x648; + fiat_np521_uint1 x649; + uint32_t x650; + fiat_np521_uint1 x651; + uint32_t x652; + fiat_np521_uint1 x653; + uint32_t x654; + fiat_np521_uint1 x655; + uint32_t x656; + fiat_np521_uint1 x657; + uint32_t x658; + fiat_np521_uint1 x659; + uint32_t x660; + fiat_np521_uint1 x661; + uint32_t x662; + fiat_np521_uint1 x663; + uint32_t x664; + fiat_np521_uint1 x665; + uint32_t x666; + fiat_np521_uint1 x667; + uint32_t x668; + fiat_np521_uint1 x669; + uint32_t x670; + fiat_np521_uint1 x671; + uint32_t x672; + fiat_np521_uint1 x673; + uint32_t x674; + fiat_np521_uint1 x675; + uint32_t x676; + fiat_np521_uint1 x677; + uint32_t x678; + fiat_np521_uint1 x679; + uint32_t x680; + fiat_np521_uint1 x681; + uint32_t x682; + fiat_np521_uint1 x683; + uint32_t x684; + fiat_np521_uint1 x685; + uint32_t x686; + fiat_np521_uint1 x687; + uint32_t x688; + fiat_np521_uint1 x689; + uint32_t x690; + uint32_t x691; + uint32_t x692; + uint32_t x693; + uint32_t x694; + uint32_t x695; + uint32_t x696; + uint32_t x697; + uint32_t x698; + uint32_t x699; + uint32_t x700; + uint32_t x701; + uint32_t x702; + uint32_t x703; + uint32_t x704; + uint32_t x705; + uint32_t x706; + uint32_t x707; + uint32_t x708; + uint32_t x709; + uint32_t x710; + uint32_t x711; + uint32_t x712; + uint32_t x713; + uint32_t x714; + uint32_t x715; + uint32_t x716; + uint32_t x717; + uint32_t x718; + uint32_t x719; + uint32_t x720; + uint32_t x721; + uint32_t x722; + uint32_t x723; + uint32_t x724; + uint32_t x725; + uint32_t x726; + fiat_np521_uint1 x727; + uint32_t x728; + fiat_np521_uint1 x729; + uint32_t x730; + fiat_np521_uint1 x731; + uint32_t x732; + fiat_np521_uint1 x733; + uint32_t x734; + fiat_np521_uint1 x735; + uint32_t x736; + fiat_np521_uint1 x737; + uint32_t x738; + fiat_np521_uint1 x739; + uint32_t x740; + fiat_np521_uint1 x741; + uint32_t x742; + fiat_np521_uint1 x743; + uint32_t x744; + fiat_np521_uint1 x745; + uint32_t x746; + fiat_np521_uint1 x747; + uint32_t x748; + fiat_np521_uint1 x749; + uint32_t x750; + fiat_np521_uint1 x751; + uint32_t x752; + fiat_np521_uint1 x753; + uint32_t x754; + fiat_np521_uint1 x755; + uint32_t x756; + fiat_np521_uint1 x757; + uint32_t x758; + fiat_np521_uint1 x759; + uint32_t x760; + fiat_np521_uint1 x761; + uint32_t x762; + fiat_np521_uint1 x763; + uint32_t x764; + fiat_np521_uint1 x765; + uint32_t x766; + fiat_np521_uint1 x767; + uint32_t x768; + fiat_np521_uint1 x769; + uint32_t x770; + fiat_np521_uint1 x771; + uint32_t x772; + fiat_np521_uint1 x773; + uint32_t x774; + fiat_np521_uint1 x775; + uint32_t x776; + fiat_np521_uint1 x777; + uint32_t x778; + fiat_np521_uint1 x779; + uint32_t x780; + fiat_np521_uint1 x781; + uint32_t x782; + fiat_np521_uint1 x783; + uint32_t x784; + fiat_np521_uint1 x785; + uint32_t x786; + fiat_np521_uint1 x787; + uint32_t x788; + fiat_np521_uint1 x789; + uint32_t x790; + fiat_np521_uint1 x791; + uint32_t x792; + uint32_t x793; + uint32_t x794; + uint32_t x795; + uint32_t x796; + uint32_t x797; + uint32_t x798; + uint32_t x799; + uint32_t x800; + uint32_t x801; + uint32_t x802; + uint32_t x803; + uint32_t x804; + uint32_t x805; + uint32_t x806; + uint32_t x807; + uint32_t x808; + uint32_t x809; + uint32_t x810; + uint32_t x811; + uint32_t x812; + uint32_t x813; + uint32_t x814; + uint32_t x815; + uint32_t x816; + uint32_t x817; + uint32_t x818; + uint32_t x819; + uint32_t x820; + uint32_t x821; + uint32_t x822; + uint32_t x823; + uint32_t x824; + uint32_t x825; + uint32_t x826; + fiat_np521_uint1 x827; + uint32_t x828; + fiat_np521_uint1 x829; + uint32_t x830; + fiat_np521_uint1 x831; + uint32_t x832; + fiat_np521_uint1 x833; + uint32_t x834; + fiat_np521_uint1 x835; + uint32_t x836; + fiat_np521_uint1 x837; + uint32_t x838; + fiat_np521_uint1 x839; + uint32_t x840; + fiat_np521_uint1 x841; + uint32_t x842; + fiat_np521_uint1 x843; + uint32_t x844; + fiat_np521_uint1 x845; + uint32_t x846; + fiat_np521_uint1 x847; + uint32_t x848; + fiat_np521_uint1 x849; + uint32_t x850; + fiat_np521_uint1 x851; + uint32_t x852; + fiat_np521_uint1 x853; + uint32_t x854; + fiat_np521_uint1 x855; + uint32_t x856; + fiat_np521_uint1 x857; + uint32_t x858; + fiat_np521_uint1 x859; + uint32_t x860; + fiat_np521_uint1 x861; + uint32_t x862; + fiat_np521_uint1 x863; + uint32_t x864; + fiat_np521_uint1 x865; + uint32_t x866; + fiat_np521_uint1 x867; + uint32_t x868; + fiat_np521_uint1 x869; + uint32_t x870; + fiat_np521_uint1 x871; + uint32_t x872; + fiat_np521_uint1 x873; + uint32_t x874; + fiat_np521_uint1 x875; + uint32_t x876; + fiat_np521_uint1 x877; + uint32_t x878; + fiat_np521_uint1 x879; + uint32_t x880; + fiat_np521_uint1 x881; + uint32_t x882; + fiat_np521_uint1 x883; + uint32_t x884; + fiat_np521_uint1 x885; + uint32_t x886; + fiat_np521_uint1 x887; + uint32_t x888; + fiat_np521_uint1 x889; + uint32_t x890; + fiat_np521_uint1 x891; + uint32_t x892; + uint32_t x893; + uint32_t x894; + uint32_t x895; + uint32_t x896; + uint32_t x897; + uint32_t x898; + uint32_t x899; + uint32_t x900; + uint32_t x901; + uint32_t x902; + uint32_t x903; + uint32_t x904; + uint32_t x905; + uint32_t x906; + uint32_t x907; + uint32_t x908; + uint32_t x909; + uint32_t x910; + uint32_t x911; + uint32_t x912; + uint32_t x913; + uint32_t x914; + uint32_t x915; + uint32_t x916; + uint32_t x917; + uint32_t x918; + uint32_t x919; + uint32_t x920; + uint32_t x921; + uint32_t x922; + uint32_t x923; + uint32_t x924; + uint32_t x925; + uint32_t x926; + uint32_t x927; + uint32_t x928; + fiat_np521_uint1 x929; + uint32_t x930; + fiat_np521_uint1 x931; + uint32_t x932; + fiat_np521_uint1 x933; + uint32_t x934; + fiat_np521_uint1 x935; + uint32_t x936; + fiat_np521_uint1 x937; + uint32_t x938; + fiat_np521_uint1 x939; + uint32_t x940; + fiat_np521_uint1 x941; + uint32_t x942; + fiat_np521_uint1 x943; + uint32_t x944; + fiat_np521_uint1 x945; + uint32_t x946; + fiat_np521_uint1 x947; + uint32_t x948; + fiat_np521_uint1 x949; + uint32_t x950; + fiat_np521_uint1 x951; + uint32_t x952; + fiat_np521_uint1 x953; + uint32_t x954; + fiat_np521_uint1 x955; + uint32_t x956; + fiat_np521_uint1 x957; + uint32_t x958; + fiat_np521_uint1 x959; + uint32_t x960; + fiat_np521_uint1 x961; + uint32_t x962; + fiat_np521_uint1 x963; + uint32_t x964; + fiat_np521_uint1 x965; + uint32_t x966; + fiat_np521_uint1 x967; + uint32_t x968; + fiat_np521_uint1 x969; + uint32_t x970; + fiat_np521_uint1 x971; + uint32_t x972; + fiat_np521_uint1 x973; + uint32_t x974; + fiat_np521_uint1 x975; + uint32_t x976; + fiat_np521_uint1 x977; + uint32_t x978; + fiat_np521_uint1 x979; + uint32_t x980; + fiat_np521_uint1 x981; + uint32_t x982; + fiat_np521_uint1 x983; + uint32_t x984; + fiat_np521_uint1 x985; + uint32_t x986; + fiat_np521_uint1 x987; + uint32_t x988; + fiat_np521_uint1 x989; + uint32_t x990; + fiat_np521_uint1 x991; + uint32_t x992; + fiat_np521_uint1 x993; + uint32_t x994; + uint32_t x995; + uint32_t x996; + uint32_t x997; + uint32_t x998; + uint32_t x999; + uint32_t x1000; + uint32_t x1001; + uint32_t x1002; + uint32_t x1003; + uint32_t x1004; + uint32_t x1005; + uint32_t x1006; + uint32_t x1007; + uint32_t x1008; + uint32_t x1009; + uint32_t x1010; + uint32_t x1011; + uint32_t x1012; + uint32_t x1013; + uint32_t x1014; + uint32_t x1015; + uint32_t x1016; + uint32_t x1017; + uint32_t x1018; + uint32_t x1019; + uint32_t x1020; + uint32_t x1021; + uint32_t x1022; + uint32_t x1023; + uint32_t x1024; + uint32_t x1025; + uint32_t x1026; + uint32_t x1027; + uint32_t x1028; + fiat_np521_uint1 x1029; + uint32_t x1030; + fiat_np521_uint1 x1031; + uint32_t x1032; + fiat_np521_uint1 x1033; + uint32_t x1034; + fiat_np521_uint1 x1035; + uint32_t x1036; + fiat_np521_uint1 x1037; + uint32_t x1038; + fiat_np521_uint1 x1039; + uint32_t x1040; + fiat_np521_uint1 x1041; + uint32_t x1042; + fiat_np521_uint1 x1043; + uint32_t x1044; + fiat_np521_uint1 x1045; + uint32_t x1046; + fiat_np521_uint1 x1047; + uint32_t x1048; + fiat_np521_uint1 x1049; + uint32_t x1050; + fiat_np521_uint1 x1051; + uint32_t x1052; + fiat_np521_uint1 x1053; + uint32_t x1054; + fiat_np521_uint1 x1055; + uint32_t x1056; + fiat_np521_uint1 x1057; + uint32_t x1058; + fiat_np521_uint1 x1059; + uint32_t x1060; + fiat_np521_uint1 x1061; + uint32_t x1062; + fiat_np521_uint1 x1063; + uint32_t x1064; + fiat_np521_uint1 x1065; + uint32_t x1066; + fiat_np521_uint1 x1067; + uint32_t x1068; + fiat_np521_uint1 x1069; + uint32_t x1070; + fiat_np521_uint1 x1071; + uint32_t x1072; + fiat_np521_uint1 x1073; + uint32_t x1074; + fiat_np521_uint1 x1075; + uint32_t x1076; + fiat_np521_uint1 x1077; + uint32_t x1078; + fiat_np521_uint1 x1079; + uint32_t x1080; + fiat_np521_uint1 x1081; + uint32_t x1082; + fiat_np521_uint1 x1083; + uint32_t x1084; + fiat_np521_uint1 x1085; + uint32_t x1086; + fiat_np521_uint1 x1087; + uint32_t x1088; + fiat_np521_uint1 x1089; + uint32_t x1090; + fiat_np521_uint1 x1091; + uint32_t x1092; + fiat_np521_uint1 x1093; + uint32_t x1094; + uint32_t x1095; + uint32_t x1096; + uint32_t x1097; + uint32_t x1098; + uint32_t x1099; + uint32_t x1100; + uint32_t x1101; + uint32_t x1102; + uint32_t x1103; + uint32_t x1104; + uint32_t x1105; + uint32_t x1106; + uint32_t x1107; + uint32_t x1108; + uint32_t x1109; + uint32_t x1110; + uint32_t x1111; + uint32_t x1112; + uint32_t x1113; + uint32_t x1114; + uint32_t x1115; + uint32_t x1116; + uint32_t x1117; + uint32_t x1118; + uint32_t x1119; + uint32_t x1120; + uint32_t x1121; + uint32_t x1122; + uint32_t x1123; + uint32_t x1124; + uint32_t x1125; + uint32_t x1126; + uint32_t x1127; + uint32_t x1128; + uint32_t x1129; + uint32_t x1130; + fiat_np521_uint1 x1131; + uint32_t x1132; + fiat_np521_uint1 x1133; + uint32_t x1134; + fiat_np521_uint1 x1135; + uint32_t x1136; + fiat_np521_uint1 x1137; + uint32_t x1138; + fiat_np521_uint1 x1139; + uint32_t x1140; + fiat_np521_uint1 x1141; + uint32_t x1142; + fiat_np521_uint1 x1143; + uint32_t x1144; + fiat_np521_uint1 x1145; + uint32_t x1146; + fiat_np521_uint1 x1147; + uint32_t x1148; + fiat_np521_uint1 x1149; + uint32_t x1150; + fiat_np521_uint1 x1151; + uint32_t x1152; + fiat_np521_uint1 x1153; + uint32_t x1154; + fiat_np521_uint1 x1155; + uint32_t x1156; + fiat_np521_uint1 x1157; + uint32_t x1158; + fiat_np521_uint1 x1159; + uint32_t x1160; + fiat_np521_uint1 x1161; + uint32_t x1162; + fiat_np521_uint1 x1163; + uint32_t x1164; + fiat_np521_uint1 x1165; + uint32_t x1166; + fiat_np521_uint1 x1167; + uint32_t x1168; + fiat_np521_uint1 x1169; + uint32_t x1170; + fiat_np521_uint1 x1171; + uint32_t x1172; + fiat_np521_uint1 x1173; + uint32_t x1174; + fiat_np521_uint1 x1175; + uint32_t x1176; + fiat_np521_uint1 x1177; + uint32_t x1178; + fiat_np521_uint1 x1179; + uint32_t x1180; + fiat_np521_uint1 x1181; + uint32_t x1182; + fiat_np521_uint1 x1183; + uint32_t x1184; + fiat_np521_uint1 x1185; + uint32_t x1186; + fiat_np521_uint1 x1187; + uint32_t x1188; + fiat_np521_uint1 x1189; + uint32_t x1190; + fiat_np521_uint1 x1191; + uint32_t x1192; + fiat_np521_uint1 x1193; + uint32_t x1194; + fiat_np521_uint1 x1195; + uint32_t x1196; + uint32_t x1197; + uint32_t x1198; + uint32_t x1199; + uint32_t x1200; + uint32_t x1201; + uint32_t x1202; + uint32_t x1203; + uint32_t x1204; + uint32_t x1205; + uint32_t x1206; + uint32_t x1207; + uint32_t x1208; + uint32_t x1209; + uint32_t x1210; + uint32_t x1211; + uint32_t x1212; + uint32_t x1213; + uint32_t x1214; + uint32_t x1215; + uint32_t x1216; + uint32_t x1217; + uint32_t x1218; + uint32_t x1219; + uint32_t x1220; + uint32_t x1221; + uint32_t x1222; + uint32_t x1223; + uint32_t x1224; + uint32_t x1225; + uint32_t x1226; + uint32_t x1227; + uint32_t x1228; + uint32_t x1229; + uint32_t x1230; + fiat_np521_uint1 x1231; + uint32_t x1232; + fiat_np521_uint1 x1233; + uint32_t x1234; + fiat_np521_uint1 x1235; + uint32_t x1236; + fiat_np521_uint1 x1237; + uint32_t x1238; + fiat_np521_uint1 x1239; + uint32_t x1240; + fiat_np521_uint1 x1241; + uint32_t x1242; + fiat_np521_uint1 x1243; + uint32_t x1244; + fiat_np521_uint1 x1245; + uint32_t x1246; + fiat_np521_uint1 x1247; + uint32_t x1248; + fiat_np521_uint1 x1249; + uint32_t x1250; + fiat_np521_uint1 x1251; + uint32_t x1252; + fiat_np521_uint1 x1253; + uint32_t x1254; + fiat_np521_uint1 x1255; + uint32_t x1256; + fiat_np521_uint1 x1257; + uint32_t x1258; + fiat_np521_uint1 x1259; + uint32_t x1260; + fiat_np521_uint1 x1261; + uint32_t x1262; + fiat_np521_uint1 x1263; + uint32_t x1264; + fiat_np521_uint1 x1265; + uint32_t x1266; + fiat_np521_uint1 x1267; + uint32_t x1268; + fiat_np521_uint1 x1269; + uint32_t x1270; + fiat_np521_uint1 x1271; + uint32_t x1272; + fiat_np521_uint1 x1273; + uint32_t x1274; + fiat_np521_uint1 x1275; + uint32_t x1276; + fiat_np521_uint1 x1277; + uint32_t x1278; + fiat_np521_uint1 x1279; + uint32_t x1280; + fiat_np521_uint1 x1281; + uint32_t x1282; + fiat_np521_uint1 x1283; + uint32_t x1284; + fiat_np521_uint1 x1285; + uint32_t x1286; + fiat_np521_uint1 x1287; + uint32_t x1288; + fiat_np521_uint1 x1289; + uint32_t x1290; + fiat_np521_uint1 x1291; + uint32_t x1292; + fiat_np521_uint1 x1293; + uint32_t x1294; + fiat_np521_uint1 x1295; + uint32_t x1296; + uint32_t x1297; + uint32_t x1298; + uint32_t x1299; + uint32_t x1300; + uint32_t x1301; + uint32_t x1302; + uint32_t x1303; + uint32_t x1304; + uint32_t x1305; + uint32_t x1306; + uint32_t x1307; + uint32_t x1308; + uint32_t x1309; + uint32_t x1310; + uint32_t x1311; + uint32_t x1312; + uint32_t x1313; + uint32_t x1314; + uint32_t x1315; + uint32_t x1316; + uint32_t x1317; + uint32_t x1318; + uint32_t x1319; + uint32_t x1320; + uint32_t x1321; + uint32_t x1322; + uint32_t x1323; + uint32_t x1324; + uint32_t x1325; + uint32_t x1326; + uint32_t x1327; + uint32_t x1328; + uint32_t x1329; + uint32_t x1330; + uint32_t x1331; + uint32_t x1332; + fiat_np521_uint1 x1333; + uint32_t x1334; + fiat_np521_uint1 x1335; + uint32_t x1336; + fiat_np521_uint1 x1337; + uint32_t x1338; + fiat_np521_uint1 x1339; + uint32_t x1340; + fiat_np521_uint1 x1341; + uint32_t x1342; + fiat_np521_uint1 x1343; + uint32_t x1344; + fiat_np521_uint1 x1345; + uint32_t x1346; + fiat_np521_uint1 x1347; + uint32_t x1348; + fiat_np521_uint1 x1349; + uint32_t x1350; + fiat_np521_uint1 x1351; + uint32_t x1352; + fiat_np521_uint1 x1353; + uint32_t x1354; + fiat_np521_uint1 x1355; + uint32_t x1356; + fiat_np521_uint1 x1357; + uint32_t x1358; + fiat_np521_uint1 x1359; + uint32_t x1360; + fiat_np521_uint1 x1361; + uint32_t x1362; + fiat_np521_uint1 x1363; + uint32_t x1364; + fiat_np521_uint1 x1365; + uint32_t x1366; + fiat_np521_uint1 x1367; + uint32_t x1368; + fiat_np521_uint1 x1369; + uint32_t x1370; + fiat_np521_uint1 x1371; + uint32_t x1372; + fiat_np521_uint1 x1373; + uint32_t x1374; + fiat_np521_uint1 x1375; + uint32_t x1376; + fiat_np521_uint1 x1377; + uint32_t x1378; + fiat_np521_uint1 x1379; + uint32_t x1380; + fiat_np521_uint1 x1381; + uint32_t x1382; + fiat_np521_uint1 x1383; + uint32_t x1384; + fiat_np521_uint1 x1385; + uint32_t x1386; + fiat_np521_uint1 x1387; + uint32_t x1388; + fiat_np521_uint1 x1389; + uint32_t x1390; + fiat_np521_uint1 x1391; + uint32_t x1392; + fiat_np521_uint1 x1393; + uint32_t x1394; + fiat_np521_uint1 x1395; + uint32_t x1396; + fiat_np521_uint1 x1397; + uint32_t x1398; + uint32_t x1399; + uint32_t x1400; + uint32_t x1401; + uint32_t x1402; + uint32_t x1403; + uint32_t x1404; + uint32_t x1405; + uint32_t x1406; + uint32_t x1407; + uint32_t x1408; + uint32_t x1409; + uint32_t x1410; + uint32_t x1411; + uint32_t x1412; + uint32_t x1413; + uint32_t x1414; + uint32_t x1415; + uint32_t x1416; + uint32_t x1417; + uint32_t x1418; + uint32_t x1419; + uint32_t x1420; + uint32_t x1421; + uint32_t x1422; + uint32_t x1423; + uint32_t x1424; + uint32_t x1425; + uint32_t x1426; + uint32_t x1427; + uint32_t x1428; + uint32_t x1429; + uint32_t x1430; + uint32_t x1431; + uint32_t x1432; + fiat_np521_uint1 x1433; + uint32_t x1434; + fiat_np521_uint1 x1435; + uint32_t x1436; + fiat_np521_uint1 x1437; + uint32_t x1438; + fiat_np521_uint1 x1439; + uint32_t x1440; + fiat_np521_uint1 x1441; + uint32_t x1442; + fiat_np521_uint1 x1443; + uint32_t x1444; + fiat_np521_uint1 x1445; + uint32_t x1446; + fiat_np521_uint1 x1447; + uint32_t x1448; + fiat_np521_uint1 x1449; + uint32_t x1450; + fiat_np521_uint1 x1451; + uint32_t x1452; + fiat_np521_uint1 x1453; + uint32_t x1454; + fiat_np521_uint1 x1455; + uint32_t x1456; + fiat_np521_uint1 x1457; + uint32_t x1458; + fiat_np521_uint1 x1459; + uint32_t x1460; + fiat_np521_uint1 x1461; + uint32_t x1462; + fiat_np521_uint1 x1463; + uint32_t x1464; + fiat_np521_uint1 x1465; + uint32_t x1466; + fiat_np521_uint1 x1467; + uint32_t x1468; + fiat_np521_uint1 x1469; + uint32_t x1470; + fiat_np521_uint1 x1471; + uint32_t x1472; + fiat_np521_uint1 x1473; + uint32_t x1474; + fiat_np521_uint1 x1475; + uint32_t x1476; + fiat_np521_uint1 x1477; + uint32_t x1478; + fiat_np521_uint1 x1479; + uint32_t x1480; + fiat_np521_uint1 x1481; + uint32_t x1482; + fiat_np521_uint1 x1483; + uint32_t x1484; + fiat_np521_uint1 x1485; + uint32_t x1486; + fiat_np521_uint1 x1487; + uint32_t x1488; + fiat_np521_uint1 x1489; + uint32_t x1490; + fiat_np521_uint1 x1491; + uint32_t x1492; + fiat_np521_uint1 x1493; + uint32_t x1494; + fiat_np521_uint1 x1495; + uint32_t x1496; + fiat_np521_uint1 x1497; + uint32_t x1498; + uint32_t x1499; + uint32_t x1500; + uint32_t x1501; + uint32_t x1502; + uint32_t x1503; + uint32_t x1504; + uint32_t x1505; + uint32_t x1506; + uint32_t x1507; + uint32_t x1508; + uint32_t x1509; + uint32_t x1510; + uint32_t x1511; + uint32_t x1512; + uint32_t x1513; + uint32_t x1514; + uint32_t x1515; + uint32_t x1516; + uint32_t x1517; + uint32_t x1518; + uint32_t x1519; + uint32_t x1520; + uint32_t x1521; + uint32_t x1522; + uint32_t x1523; + uint32_t x1524; + uint32_t x1525; + uint32_t x1526; + uint32_t x1527; + uint32_t x1528; + uint32_t x1529; + uint32_t x1530; + uint32_t x1531; + uint32_t x1532; + uint32_t x1533; + uint32_t x1534; + fiat_np521_uint1 x1535; + uint32_t x1536; + fiat_np521_uint1 x1537; + uint32_t x1538; + fiat_np521_uint1 x1539; + uint32_t x1540; + fiat_np521_uint1 x1541; + uint32_t x1542; + fiat_np521_uint1 x1543; + uint32_t x1544; + fiat_np521_uint1 x1545; + uint32_t x1546; + fiat_np521_uint1 x1547; + uint32_t x1548; + fiat_np521_uint1 x1549; + uint32_t x1550; + fiat_np521_uint1 x1551; + uint32_t x1552; + fiat_np521_uint1 x1553; + uint32_t x1554; + fiat_np521_uint1 x1555; + uint32_t x1556; + fiat_np521_uint1 x1557; + uint32_t x1558; + fiat_np521_uint1 x1559; + uint32_t x1560; + fiat_np521_uint1 x1561; + uint32_t x1562; + fiat_np521_uint1 x1563; + uint32_t x1564; + fiat_np521_uint1 x1565; + uint32_t x1566; + fiat_np521_uint1 x1567; + uint32_t x1568; + fiat_np521_uint1 x1569; + uint32_t x1570; + fiat_np521_uint1 x1571; + uint32_t x1572; + fiat_np521_uint1 x1573; + uint32_t x1574; + fiat_np521_uint1 x1575; + uint32_t x1576; + fiat_np521_uint1 x1577; + uint32_t x1578; + fiat_np521_uint1 x1579; + uint32_t x1580; + fiat_np521_uint1 x1581; + uint32_t x1582; + fiat_np521_uint1 x1583; + uint32_t x1584; + fiat_np521_uint1 x1585; + uint32_t x1586; + fiat_np521_uint1 x1587; + uint32_t x1588; + fiat_np521_uint1 x1589; + uint32_t x1590; + fiat_np521_uint1 x1591; + uint32_t x1592; + fiat_np521_uint1 x1593; + uint32_t x1594; + fiat_np521_uint1 x1595; + uint32_t x1596; + fiat_np521_uint1 x1597; + uint32_t x1598; + fiat_np521_uint1 x1599; + uint32_t x1600; + uint32_t x1601; + uint32_t x1602; + uint32_t x1603; + uint32_t x1604; + uint32_t x1605; + uint32_t x1606; + uint32_t x1607; + uint32_t x1608; + uint32_t x1609; + uint32_t x1610; + uint32_t x1611; + uint32_t x1612; + uint32_t x1613; + uint32_t x1614; + uint32_t x1615; + uint32_t x1616; + uint32_t x1617; + uint32_t x1618; + uint32_t x1619; + uint32_t x1620; + uint32_t x1621; + uint32_t x1622; + uint32_t x1623; + uint32_t x1624; + uint32_t x1625; + uint32_t x1626; + uint32_t x1627; + uint32_t x1628; + uint32_t x1629; + uint32_t x1630; + uint32_t x1631; + uint32_t x1632; + uint32_t x1633; + uint32_t x1634; + fiat_np521_uint1 x1635; + uint32_t x1636; + fiat_np521_uint1 x1637; + uint32_t x1638; + fiat_np521_uint1 x1639; + uint32_t x1640; + fiat_np521_uint1 x1641; + uint32_t x1642; + fiat_np521_uint1 x1643; + uint32_t x1644; + fiat_np521_uint1 x1645; + uint32_t x1646; + fiat_np521_uint1 x1647; + uint32_t x1648; + fiat_np521_uint1 x1649; + uint32_t x1650; + fiat_np521_uint1 x1651; + uint32_t x1652; + fiat_np521_uint1 x1653; + uint32_t x1654; + fiat_np521_uint1 x1655; + uint32_t x1656; + fiat_np521_uint1 x1657; + uint32_t x1658; + fiat_np521_uint1 x1659; + uint32_t x1660; + fiat_np521_uint1 x1661; + uint32_t x1662; + fiat_np521_uint1 x1663; + uint32_t x1664; + fiat_np521_uint1 x1665; + uint32_t x1666; + fiat_np521_uint1 x1667; + uint32_t x1668; + fiat_np521_uint1 x1669; + uint32_t x1670; + fiat_np521_uint1 x1671; + uint32_t x1672; + fiat_np521_uint1 x1673; + uint32_t x1674; + fiat_np521_uint1 x1675; + uint32_t x1676; + fiat_np521_uint1 x1677; + uint32_t x1678; + fiat_np521_uint1 x1679; + uint32_t x1680; + fiat_np521_uint1 x1681; + uint32_t x1682; + fiat_np521_uint1 x1683; + uint32_t x1684; + fiat_np521_uint1 x1685; + uint32_t x1686; + fiat_np521_uint1 x1687; + uint32_t x1688; + fiat_np521_uint1 x1689; + uint32_t x1690; + fiat_np521_uint1 x1691; + uint32_t x1692; + fiat_np521_uint1 x1693; + uint32_t x1694; + fiat_np521_uint1 x1695; + uint32_t x1696; + fiat_np521_uint1 x1697; + uint32_t x1698; + fiat_np521_uint1 x1699; + uint32_t x1700; + uint32_t x1701; + uint32_t x1702; + uint32_t x1703; + uint32_t x1704; + uint32_t x1705; + uint32_t x1706; + uint32_t x1707; + uint32_t x1708; + uint32_t x1709; + uint32_t x1710; + uint32_t x1711; + uint32_t x1712; + uint32_t x1713; + uint32_t x1714; + uint32_t x1715; + uint32_t x1716; + uint32_t x1717; + uint32_t x1718; + uint32_t x1719; + uint32_t x1720; + uint32_t x1721; + uint32_t x1722; + uint32_t x1723; + uint32_t x1724; + uint32_t x1725; + uint32_t x1726; + uint32_t x1727; + uint32_t x1728; + uint32_t x1729; + uint32_t x1730; + uint32_t x1731; + uint32_t x1732; + uint32_t x1733; + uint32_t x1734; + uint32_t x1735; + uint32_t x1736; + fiat_np521_uint1 x1737; + uint32_t x1738; + fiat_np521_uint1 x1739; + uint32_t x1740; + fiat_np521_uint1 x1741; + uint32_t x1742; + fiat_np521_uint1 x1743; + uint32_t x1744; + fiat_np521_uint1 x1745; + uint32_t x1746; + fiat_np521_uint1 x1747; + uint32_t x1748; + fiat_np521_uint1 x1749; + uint32_t x1750; + fiat_np521_uint1 x1751; + uint32_t x1752; + fiat_np521_uint1 x1753; + uint32_t x1754; + fiat_np521_uint1 x1755; + uint32_t x1756; + fiat_np521_uint1 x1757; + uint32_t x1758; + fiat_np521_uint1 x1759; + uint32_t x1760; + fiat_np521_uint1 x1761; + uint32_t x1762; + fiat_np521_uint1 x1763; + uint32_t x1764; + fiat_np521_uint1 x1765; + uint32_t x1766; + fiat_np521_uint1 x1767; + uint32_t x1768; + fiat_np521_uint1 x1769; + uint32_t x1770; + fiat_np521_uint1 x1771; + uint32_t x1772; + fiat_np521_uint1 x1773; + uint32_t x1774; + fiat_np521_uint1 x1775; + uint32_t x1776; + fiat_np521_uint1 x1777; + uint32_t x1778; + fiat_np521_uint1 x1779; + uint32_t x1780; + fiat_np521_uint1 x1781; + uint32_t x1782; + fiat_np521_uint1 x1783; + uint32_t x1784; + fiat_np521_uint1 x1785; + uint32_t x1786; + fiat_np521_uint1 x1787; + uint32_t x1788; + fiat_np521_uint1 x1789; + uint32_t x1790; + fiat_np521_uint1 x1791; + uint32_t x1792; + fiat_np521_uint1 x1793; + uint32_t x1794; + fiat_np521_uint1 x1795; + uint32_t x1796; + fiat_np521_uint1 x1797; + uint32_t x1798; + fiat_np521_uint1 x1799; + uint32_t x1800; + fiat_np521_uint1 x1801; + uint32_t x1802; + uint32_t x1803; + uint32_t x1804; + uint32_t x1805; + uint32_t x1806; + uint32_t x1807; + uint32_t x1808; + uint32_t x1809; + uint32_t x1810; + uint32_t x1811; + uint32_t x1812; + uint32_t x1813; + uint32_t x1814; + uint32_t x1815; + uint32_t x1816; + uint32_t x1817; + uint32_t x1818; + uint32_t x1819; + uint32_t x1820; + uint32_t x1821; + uint32_t x1822; + uint32_t x1823; + uint32_t x1824; + uint32_t x1825; + uint32_t x1826; + uint32_t x1827; + uint32_t x1828; + uint32_t x1829; + uint32_t x1830; + uint32_t x1831; + uint32_t x1832; + uint32_t x1833; + uint32_t x1834; + uint32_t x1835; + uint32_t x1836; + fiat_np521_uint1 x1837; + uint32_t x1838; + fiat_np521_uint1 x1839; + uint32_t x1840; + fiat_np521_uint1 x1841; + uint32_t x1842; + fiat_np521_uint1 x1843; + uint32_t x1844; + fiat_np521_uint1 x1845; + uint32_t x1846; + fiat_np521_uint1 x1847; + uint32_t x1848; + fiat_np521_uint1 x1849; + uint32_t x1850; + fiat_np521_uint1 x1851; + uint32_t x1852; + fiat_np521_uint1 x1853; + uint32_t x1854; + fiat_np521_uint1 x1855; + uint32_t x1856; + fiat_np521_uint1 x1857; + uint32_t x1858; + fiat_np521_uint1 x1859; + uint32_t x1860; + fiat_np521_uint1 x1861; + uint32_t x1862; + fiat_np521_uint1 x1863; + uint32_t x1864; + fiat_np521_uint1 x1865; + uint32_t x1866; + fiat_np521_uint1 x1867; + uint32_t x1868; + fiat_np521_uint1 x1869; + uint32_t x1870; + fiat_np521_uint1 x1871; + uint32_t x1872; + fiat_np521_uint1 x1873; + uint32_t x1874; + fiat_np521_uint1 x1875; + uint32_t x1876; + fiat_np521_uint1 x1877; + uint32_t x1878; + fiat_np521_uint1 x1879; + uint32_t x1880; + fiat_np521_uint1 x1881; + uint32_t x1882; + fiat_np521_uint1 x1883; + uint32_t x1884; + fiat_np521_uint1 x1885; + uint32_t x1886; + fiat_np521_uint1 x1887; + uint32_t x1888; + fiat_np521_uint1 x1889; + uint32_t x1890; + fiat_np521_uint1 x1891; + uint32_t x1892; + fiat_np521_uint1 x1893; + uint32_t x1894; + fiat_np521_uint1 x1895; + uint32_t x1896; + fiat_np521_uint1 x1897; + uint32_t x1898; + fiat_np521_uint1 x1899; + uint32_t x1900; + fiat_np521_uint1 x1901; + uint32_t x1902; + uint32_t x1903; + uint32_t x1904; + uint32_t x1905; + uint32_t x1906; + uint32_t x1907; + uint32_t x1908; + uint32_t x1909; + uint32_t x1910; + uint32_t x1911; + uint32_t x1912; + uint32_t x1913; + uint32_t x1914; + uint32_t x1915; + uint32_t x1916; + uint32_t x1917; + uint32_t x1918; + uint32_t x1919; + uint32_t x1920; + uint32_t x1921; + uint32_t x1922; + uint32_t x1923; + uint32_t x1924; + uint32_t x1925; + uint32_t x1926; + uint32_t x1927; + uint32_t x1928; + uint32_t x1929; + uint32_t x1930; + uint32_t x1931; + uint32_t x1932; + uint32_t x1933; + uint32_t x1934; + uint32_t x1935; + uint32_t x1936; + uint32_t x1937; + uint32_t x1938; + fiat_np521_uint1 x1939; + uint32_t x1940; + fiat_np521_uint1 x1941; + uint32_t x1942; + fiat_np521_uint1 x1943; + uint32_t x1944; + fiat_np521_uint1 x1945; + uint32_t x1946; + fiat_np521_uint1 x1947; + uint32_t x1948; + fiat_np521_uint1 x1949; + uint32_t x1950; + fiat_np521_uint1 x1951; + uint32_t x1952; + fiat_np521_uint1 x1953; + uint32_t x1954; + fiat_np521_uint1 x1955; + uint32_t x1956; + fiat_np521_uint1 x1957; + uint32_t x1958; + fiat_np521_uint1 x1959; + uint32_t x1960; + fiat_np521_uint1 x1961; + uint32_t x1962; + fiat_np521_uint1 x1963; + uint32_t x1964; + fiat_np521_uint1 x1965; + uint32_t x1966; + fiat_np521_uint1 x1967; + uint32_t x1968; + fiat_np521_uint1 x1969; + uint32_t x1970; + fiat_np521_uint1 x1971; + uint32_t x1972; + fiat_np521_uint1 x1973; + uint32_t x1974; + fiat_np521_uint1 x1975; + uint32_t x1976; + fiat_np521_uint1 x1977; + uint32_t x1978; + fiat_np521_uint1 x1979; + uint32_t x1980; + fiat_np521_uint1 x1981; + uint32_t x1982; + fiat_np521_uint1 x1983; + uint32_t x1984; + fiat_np521_uint1 x1985; + uint32_t x1986; + fiat_np521_uint1 x1987; + uint32_t x1988; + fiat_np521_uint1 x1989; + uint32_t x1990; + fiat_np521_uint1 x1991; + uint32_t x1992; + fiat_np521_uint1 x1993; + uint32_t x1994; + fiat_np521_uint1 x1995; + uint32_t x1996; + fiat_np521_uint1 x1997; + uint32_t x1998; + fiat_np521_uint1 x1999; + uint32_t x2000; + fiat_np521_uint1 x2001; + uint32_t x2002; + fiat_np521_uint1 x2003; + uint32_t x2004; + uint32_t x2005; + uint32_t x2006; + uint32_t x2007; + uint32_t x2008; + uint32_t x2009; + uint32_t x2010; + uint32_t x2011; + uint32_t x2012; + uint32_t x2013; + uint32_t x2014; + uint32_t x2015; + uint32_t x2016; + uint32_t x2017; + uint32_t x2018; + uint32_t x2019; + uint32_t x2020; + uint32_t x2021; + uint32_t x2022; + uint32_t x2023; + uint32_t x2024; + uint32_t x2025; + uint32_t x2026; + uint32_t x2027; + uint32_t x2028; + uint32_t x2029; + uint32_t x2030; + uint32_t x2031; + uint32_t x2032; + uint32_t x2033; + uint32_t x2034; + uint32_t x2035; + uint32_t x2036; + uint32_t x2037; + uint32_t x2038; + fiat_np521_uint1 x2039; + uint32_t x2040; + fiat_np521_uint1 x2041; + uint32_t x2042; + fiat_np521_uint1 x2043; + uint32_t x2044; + fiat_np521_uint1 x2045; + uint32_t x2046; + fiat_np521_uint1 x2047; + uint32_t x2048; + fiat_np521_uint1 x2049; + uint32_t x2050; + fiat_np521_uint1 x2051; + uint32_t x2052; + fiat_np521_uint1 x2053; + uint32_t x2054; + fiat_np521_uint1 x2055; + uint32_t x2056; + fiat_np521_uint1 x2057; + uint32_t x2058; + fiat_np521_uint1 x2059; + uint32_t x2060; + fiat_np521_uint1 x2061; + uint32_t x2062; + fiat_np521_uint1 x2063; + uint32_t x2064; + fiat_np521_uint1 x2065; + uint32_t x2066; + fiat_np521_uint1 x2067; + uint32_t x2068; + fiat_np521_uint1 x2069; + uint32_t x2070; + fiat_np521_uint1 x2071; + uint32_t x2072; + fiat_np521_uint1 x2073; + uint32_t x2074; + fiat_np521_uint1 x2075; + uint32_t x2076; + fiat_np521_uint1 x2077; + uint32_t x2078; + fiat_np521_uint1 x2079; + uint32_t x2080; + fiat_np521_uint1 x2081; + uint32_t x2082; + fiat_np521_uint1 x2083; + uint32_t x2084; + fiat_np521_uint1 x2085; + uint32_t x2086; + fiat_np521_uint1 x2087; + uint32_t x2088; + fiat_np521_uint1 x2089; + uint32_t x2090; + fiat_np521_uint1 x2091; + uint32_t x2092; + fiat_np521_uint1 x2093; + uint32_t x2094; + fiat_np521_uint1 x2095; + uint32_t x2096; + fiat_np521_uint1 x2097; + uint32_t x2098; + fiat_np521_uint1 x2099; + uint32_t x2100; + fiat_np521_uint1 x2101; + uint32_t x2102; + fiat_np521_uint1 x2103; + uint32_t x2104; + uint32_t x2105; + uint32_t x2106; + uint32_t x2107; + uint32_t x2108; + uint32_t x2109; + uint32_t x2110; + uint32_t x2111; + uint32_t x2112; + uint32_t x2113; + uint32_t x2114; + uint32_t x2115; + uint32_t x2116; + uint32_t x2117; + uint32_t x2118; + uint32_t x2119; + uint32_t x2120; + uint32_t x2121; + uint32_t x2122; + uint32_t x2123; + uint32_t x2124; + uint32_t x2125; + uint32_t x2126; + uint32_t x2127; + uint32_t x2128; + uint32_t x2129; + uint32_t x2130; + uint32_t x2131; + uint32_t x2132; + uint32_t x2133; + uint32_t x2134; + uint32_t x2135; + uint32_t x2136; + uint32_t x2137; + uint32_t x2138; + uint32_t x2139; + uint32_t x2140; + fiat_np521_uint1 x2141; + uint32_t x2142; + fiat_np521_uint1 x2143; + uint32_t x2144; + fiat_np521_uint1 x2145; + uint32_t x2146; + fiat_np521_uint1 x2147; + uint32_t x2148; + fiat_np521_uint1 x2149; + uint32_t x2150; + fiat_np521_uint1 x2151; + uint32_t x2152; + fiat_np521_uint1 x2153; + uint32_t x2154; + fiat_np521_uint1 x2155; + uint32_t x2156; + fiat_np521_uint1 x2157; + uint32_t x2158; + fiat_np521_uint1 x2159; + uint32_t x2160; + fiat_np521_uint1 x2161; + uint32_t x2162; + fiat_np521_uint1 x2163; + uint32_t x2164; + fiat_np521_uint1 x2165; + uint32_t x2166; + fiat_np521_uint1 x2167; + uint32_t x2168; + fiat_np521_uint1 x2169; + uint32_t x2170; + fiat_np521_uint1 x2171; + uint32_t x2172; + fiat_np521_uint1 x2173; + uint32_t x2174; + fiat_np521_uint1 x2175; + uint32_t x2176; + fiat_np521_uint1 x2177; + uint32_t x2178; + fiat_np521_uint1 x2179; + uint32_t x2180; + fiat_np521_uint1 x2181; + uint32_t x2182; + fiat_np521_uint1 x2183; + uint32_t x2184; + fiat_np521_uint1 x2185; + uint32_t x2186; + fiat_np521_uint1 x2187; + uint32_t x2188; + fiat_np521_uint1 x2189; + uint32_t x2190; + fiat_np521_uint1 x2191; + uint32_t x2192; + fiat_np521_uint1 x2193; + uint32_t x2194; + fiat_np521_uint1 x2195; + uint32_t x2196; + fiat_np521_uint1 x2197; + uint32_t x2198; + fiat_np521_uint1 x2199; + uint32_t x2200; + fiat_np521_uint1 x2201; + uint32_t x2202; + fiat_np521_uint1 x2203; + uint32_t x2204; + fiat_np521_uint1 x2205; + uint32_t x2206; + uint32_t x2207; + uint32_t x2208; + uint32_t x2209; + uint32_t x2210; + uint32_t x2211; + uint32_t x2212; + uint32_t x2213; + uint32_t x2214; + uint32_t x2215; + uint32_t x2216; + uint32_t x2217; + uint32_t x2218; + uint32_t x2219; + uint32_t x2220; + uint32_t x2221; + uint32_t x2222; + uint32_t x2223; + uint32_t x2224; + uint32_t x2225; + uint32_t x2226; + uint32_t x2227; + uint32_t x2228; + uint32_t x2229; + uint32_t x2230; + uint32_t x2231; + uint32_t x2232; + uint32_t x2233; + uint32_t x2234; + uint32_t x2235; + uint32_t x2236; + uint32_t x2237; + uint32_t x2238; + uint32_t x2239; + uint32_t x2240; + fiat_np521_uint1 x2241; + uint32_t x2242; + fiat_np521_uint1 x2243; + uint32_t x2244; + fiat_np521_uint1 x2245; + uint32_t x2246; + fiat_np521_uint1 x2247; + uint32_t x2248; + fiat_np521_uint1 x2249; + uint32_t x2250; + fiat_np521_uint1 x2251; + uint32_t x2252; + fiat_np521_uint1 x2253; + uint32_t x2254; + fiat_np521_uint1 x2255; + uint32_t x2256; + fiat_np521_uint1 x2257; + uint32_t x2258; + fiat_np521_uint1 x2259; + uint32_t x2260; + fiat_np521_uint1 x2261; + uint32_t x2262; + fiat_np521_uint1 x2263; + uint32_t x2264; + fiat_np521_uint1 x2265; + uint32_t x2266; + fiat_np521_uint1 x2267; + uint32_t x2268; + fiat_np521_uint1 x2269; + uint32_t x2270; + fiat_np521_uint1 x2271; + uint32_t x2272; + fiat_np521_uint1 x2273; + uint32_t x2274; + fiat_np521_uint1 x2275; + uint32_t x2276; + fiat_np521_uint1 x2277; + uint32_t x2278; + fiat_np521_uint1 x2279; + uint32_t x2280; + fiat_np521_uint1 x2281; + uint32_t x2282; + fiat_np521_uint1 x2283; + uint32_t x2284; + fiat_np521_uint1 x2285; + uint32_t x2286; + fiat_np521_uint1 x2287; + uint32_t x2288; + fiat_np521_uint1 x2289; + uint32_t x2290; + fiat_np521_uint1 x2291; + uint32_t x2292; + fiat_np521_uint1 x2293; + uint32_t x2294; + fiat_np521_uint1 x2295; + uint32_t x2296; + fiat_np521_uint1 x2297; + uint32_t x2298; + fiat_np521_uint1 x2299; + uint32_t x2300; + fiat_np521_uint1 x2301; + uint32_t x2302; + fiat_np521_uint1 x2303; + uint32_t x2304; + fiat_np521_uint1 x2305; + uint32_t x2306; + uint32_t x2307; + uint32_t x2308; + uint32_t x2309; + uint32_t x2310; + uint32_t x2311; + uint32_t x2312; + uint32_t x2313; + uint32_t x2314; + uint32_t x2315; + uint32_t x2316; + uint32_t x2317; + uint32_t x2318; + uint32_t x2319; + uint32_t x2320; + uint32_t x2321; + uint32_t x2322; + uint32_t x2323; + uint32_t x2324; + uint32_t x2325; + uint32_t x2326; + uint32_t x2327; + uint32_t x2328; + uint32_t x2329; + uint32_t x2330; + uint32_t x2331; + uint32_t x2332; + uint32_t x2333; + uint32_t x2334; + uint32_t x2335; + uint32_t x2336; + uint32_t x2337; + uint32_t x2338; + uint32_t x2339; + uint32_t x2340; + uint32_t x2341; + uint32_t x2342; + fiat_np521_uint1 x2343; + uint32_t x2344; + fiat_np521_uint1 x2345; + uint32_t x2346; + fiat_np521_uint1 x2347; + uint32_t x2348; + fiat_np521_uint1 x2349; + uint32_t x2350; + fiat_np521_uint1 x2351; + uint32_t x2352; + fiat_np521_uint1 x2353; + uint32_t x2354; + fiat_np521_uint1 x2355; + uint32_t x2356; + fiat_np521_uint1 x2357; + uint32_t x2358; + fiat_np521_uint1 x2359; + uint32_t x2360; + fiat_np521_uint1 x2361; + uint32_t x2362; + fiat_np521_uint1 x2363; + uint32_t x2364; + fiat_np521_uint1 x2365; + uint32_t x2366; + fiat_np521_uint1 x2367; + uint32_t x2368; + fiat_np521_uint1 x2369; + uint32_t x2370; + fiat_np521_uint1 x2371; + uint32_t x2372; + fiat_np521_uint1 x2373; + uint32_t x2374; + fiat_np521_uint1 x2375; + uint32_t x2376; + fiat_np521_uint1 x2377; + uint32_t x2378; + fiat_np521_uint1 x2379; + uint32_t x2380; + fiat_np521_uint1 x2381; + uint32_t x2382; + fiat_np521_uint1 x2383; + uint32_t x2384; + fiat_np521_uint1 x2385; + uint32_t x2386; + fiat_np521_uint1 x2387; + uint32_t x2388; + fiat_np521_uint1 x2389; + uint32_t x2390; + fiat_np521_uint1 x2391; + uint32_t x2392; + fiat_np521_uint1 x2393; + uint32_t x2394; + fiat_np521_uint1 x2395; + uint32_t x2396; + fiat_np521_uint1 x2397; + uint32_t x2398; + fiat_np521_uint1 x2399; + uint32_t x2400; + fiat_np521_uint1 x2401; + uint32_t x2402; + fiat_np521_uint1 x2403; + uint32_t x2404; + fiat_np521_uint1 x2405; + uint32_t x2406; + fiat_np521_uint1 x2407; + uint32_t x2408; + uint32_t x2409; + uint32_t x2410; + uint32_t x2411; + uint32_t x2412; + uint32_t x2413; + uint32_t x2414; + uint32_t x2415; + uint32_t x2416; + uint32_t x2417; + uint32_t x2418; + uint32_t x2419; + uint32_t x2420; + uint32_t x2421; + uint32_t x2422; + uint32_t x2423; + uint32_t x2424; + uint32_t x2425; + uint32_t x2426; + uint32_t x2427; + uint32_t x2428; + uint32_t x2429; + uint32_t x2430; + uint32_t x2431; + uint32_t x2432; + uint32_t x2433; + uint32_t x2434; + uint32_t x2435; + uint32_t x2436; + uint32_t x2437; + uint32_t x2438; + uint32_t x2439; + uint32_t x2440; + uint32_t x2441; + uint32_t x2442; + fiat_np521_uint1 x2443; + uint32_t x2444; + fiat_np521_uint1 x2445; + uint32_t x2446; + fiat_np521_uint1 x2447; + uint32_t x2448; + fiat_np521_uint1 x2449; + uint32_t x2450; + fiat_np521_uint1 x2451; + uint32_t x2452; + fiat_np521_uint1 x2453; + uint32_t x2454; + fiat_np521_uint1 x2455; + uint32_t x2456; + fiat_np521_uint1 x2457; + uint32_t x2458; + fiat_np521_uint1 x2459; + uint32_t x2460; + fiat_np521_uint1 x2461; + uint32_t x2462; + fiat_np521_uint1 x2463; + uint32_t x2464; + fiat_np521_uint1 x2465; + uint32_t x2466; + fiat_np521_uint1 x2467; + uint32_t x2468; + fiat_np521_uint1 x2469; + uint32_t x2470; + fiat_np521_uint1 x2471; + uint32_t x2472; + fiat_np521_uint1 x2473; + uint32_t x2474; + fiat_np521_uint1 x2475; + uint32_t x2476; + fiat_np521_uint1 x2477; + uint32_t x2478; + fiat_np521_uint1 x2479; + uint32_t x2480; + fiat_np521_uint1 x2481; + uint32_t x2482; + fiat_np521_uint1 x2483; + uint32_t x2484; + fiat_np521_uint1 x2485; + uint32_t x2486; + fiat_np521_uint1 x2487; + uint32_t x2488; + fiat_np521_uint1 x2489; + uint32_t x2490; + fiat_np521_uint1 x2491; + uint32_t x2492; + fiat_np521_uint1 x2493; + uint32_t x2494; + fiat_np521_uint1 x2495; + uint32_t x2496; + fiat_np521_uint1 x2497; + uint32_t x2498; + fiat_np521_uint1 x2499; + uint32_t x2500; + fiat_np521_uint1 x2501; + uint32_t x2502; + fiat_np521_uint1 x2503; + uint32_t x2504; + fiat_np521_uint1 x2505; + uint32_t x2506; + fiat_np521_uint1 x2507; + uint32_t x2508; + uint32_t x2509; + uint32_t x2510; + uint32_t x2511; + uint32_t x2512; + uint32_t x2513; + uint32_t x2514; + uint32_t x2515; + uint32_t x2516; + uint32_t x2517; + uint32_t x2518; + uint32_t x2519; + uint32_t x2520; + uint32_t x2521; + uint32_t x2522; + uint32_t x2523; + uint32_t x2524; + uint32_t x2525; + uint32_t x2526; + uint32_t x2527; + uint32_t x2528; + uint32_t x2529; + uint32_t x2530; + uint32_t x2531; + uint32_t x2532; + uint32_t x2533; + uint32_t x2534; + uint32_t x2535; + uint32_t x2536; + uint32_t x2537; + uint32_t x2538; + uint32_t x2539; + uint32_t x2540; + uint32_t x2541; + uint32_t x2542; + uint32_t x2543; + uint32_t x2544; + fiat_np521_uint1 x2545; + uint32_t x2546; + fiat_np521_uint1 x2547; + uint32_t x2548; + fiat_np521_uint1 x2549; + uint32_t x2550; + fiat_np521_uint1 x2551; + uint32_t x2552; + fiat_np521_uint1 x2553; + uint32_t x2554; + fiat_np521_uint1 x2555; + uint32_t x2556; + fiat_np521_uint1 x2557; + uint32_t x2558; + fiat_np521_uint1 x2559; + uint32_t x2560; + fiat_np521_uint1 x2561; + uint32_t x2562; + fiat_np521_uint1 x2563; + uint32_t x2564; + fiat_np521_uint1 x2565; + uint32_t x2566; + fiat_np521_uint1 x2567; + uint32_t x2568; + fiat_np521_uint1 x2569; + uint32_t x2570; + fiat_np521_uint1 x2571; + uint32_t x2572; + fiat_np521_uint1 x2573; + uint32_t x2574; + fiat_np521_uint1 x2575; + uint32_t x2576; + fiat_np521_uint1 x2577; + uint32_t x2578; + fiat_np521_uint1 x2579; + uint32_t x2580; + fiat_np521_uint1 x2581; + uint32_t x2582; + fiat_np521_uint1 x2583; + uint32_t x2584; + fiat_np521_uint1 x2585; + uint32_t x2586; + fiat_np521_uint1 x2587; + uint32_t x2588; + fiat_np521_uint1 x2589; + uint32_t x2590; + fiat_np521_uint1 x2591; + uint32_t x2592; + fiat_np521_uint1 x2593; + uint32_t x2594; + fiat_np521_uint1 x2595; + uint32_t x2596; + fiat_np521_uint1 x2597; + uint32_t x2598; + fiat_np521_uint1 x2599; + uint32_t x2600; + fiat_np521_uint1 x2601; + uint32_t x2602; + fiat_np521_uint1 x2603; + uint32_t x2604; + fiat_np521_uint1 x2605; + uint32_t x2606; + fiat_np521_uint1 x2607; + uint32_t x2608; + fiat_np521_uint1 x2609; + uint32_t x2610; + uint32_t x2611; + uint32_t x2612; + uint32_t x2613; + uint32_t x2614; + uint32_t x2615; + uint32_t x2616; + uint32_t x2617; + uint32_t x2618; + uint32_t x2619; + uint32_t x2620; + uint32_t x2621; + uint32_t x2622; + uint32_t x2623; + uint32_t x2624; + uint32_t x2625; + uint32_t x2626; + uint32_t x2627; + uint32_t x2628; + uint32_t x2629; + uint32_t x2630; + uint32_t x2631; + uint32_t x2632; + uint32_t x2633; + uint32_t x2634; + uint32_t x2635; + uint32_t x2636; + uint32_t x2637; + uint32_t x2638; + uint32_t x2639; + uint32_t x2640; + uint32_t x2641; + uint32_t x2642; + uint32_t x2643; + uint32_t x2644; + fiat_np521_uint1 x2645; + uint32_t x2646; + fiat_np521_uint1 x2647; + uint32_t x2648; + fiat_np521_uint1 x2649; + uint32_t x2650; + fiat_np521_uint1 x2651; + uint32_t x2652; + fiat_np521_uint1 x2653; + uint32_t x2654; + fiat_np521_uint1 x2655; + uint32_t x2656; + fiat_np521_uint1 x2657; + uint32_t x2658; + fiat_np521_uint1 x2659; + uint32_t x2660; + fiat_np521_uint1 x2661; + uint32_t x2662; + fiat_np521_uint1 x2663; + uint32_t x2664; + fiat_np521_uint1 x2665; + uint32_t x2666; + fiat_np521_uint1 x2667; + uint32_t x2668; + fiat_np521_uint1 x2669; + uint32_t x2670; + fiat_np521_uint1 x2671; + uint32_t x2672; + fiat_np521_uint1 x2673; + uint32_t x2674; + fiat_np521_uint1 x2675; + uint32_t x2676; + fiat_np521_uint1 x2677; + uint32_t x2678; + fiat_np521_uint1 x2679; + uint32_t x2680; + fiat_np521_uint1 x2681; + uint32_t x2682; + fiat_np521_uint1 x2683; + uint32_t x2684; + fiat_np521_uint1 x2685; + uint32_t x2686; + fiat_np521_uint1 x2687; + uint32_t x2688; + fiat_np521_uint1 x2689; + uint32_t x2690; + fiat_np521_uint1 x2691; + uint32_t x2692; + fiat_np521_uint1 x2693; + uint32_t x2694; + fiat_np521_uint1 x2695; + uint32_t x2696; + fiat_np521_uint1 x2697; + uint32_t x2698; + fiat_np521_uint1 x2699; + uint32_t x2700; + fiat_np521_uint1 x2701; + uint32_t x2702; + fiat_np521_uint1 x2703; + uint32_t x2704; + fiat_np521_uint1 x2705; + uint32_t x2706; + fiat_np521_uint1 x2707; + uint32_t x2708; + fiat_np521_uint1 x2709; + uint32_t x2710; + uint32_t x2711; + uint32_t x2712; + uint32_t x2713; + uint32_t x2714; + uint32_t x2715; + uint32_t x2716; + uint32_t x2717; + uint32_t x2718; + uint32_t x2719; + uint32_t x2720; + uint32_t x2721; + uint32_t x2722; + uint32_t x2723; + uint32_t x2724; + uint32_t x2725; + uint32_t x2726; + uint32_t x2727; + uint32_t x2728; + uint32_t x2729; + uint32_t x2730; + uint32_t x2731; + uint32_t x2732; + uint32_t x2733; + uint32_t x2734; + uint32_t x2735; + uint32_t x2736; + uint32_t x2737; + uint32_t x2738; + uint32_t x2739; + uint32_t x2740; + uint32_t x2741; + uint32_t x2742; + uint32_t x2743; + uint32_t x2744; + uint32_t x2745; + uint32_t x2746; + fiat_np521_uint1 x2747; + uint32_t x2748; + fiat_np521_uint1 x2749; + uint32_t x2750; + fiat_np521_uint1 x2751; + uint32_t x2752; + fiat_np521_uint1 x2753; + uint32_t x2754; + fiat_np521_uint1 x2755; + uint32_t x2756; + fiat_np521_uint1 x2757; + uint32_t x2758; + fiat_np521_uint1 x2759; + uint32_t x2760; + fiat_np521_uint1 x2761; + uint32_t x2762; + fiat_np521_uint1 x2763; + uint32_t x2764; + fiat_np521_uint1 x2765; + uint32_t x2766; + fiat_np521_uint1 x2767; + uint32_t x2768; + fiat_np521_uint1 x2769; + uint32_t x2770; + fiat_np521_uint1 x2771; + uint32_t x2772; + fiat_np521_uint1 x2773; + uint32_t x2774; + fiat_np521_uint1 x2775; + uint32_t x2776; + fiat_np521_uint1 x2777; + uint32_t x2778; + fiat_np521_uint1 x2779; + uint32_t x2780; + fiat_np521_uint1 x2781; + uint32_t x2782; + fiat_np521_uint1 x2783; + uint32_t x2784; + fiat_np521_uint1 x2785; + uint32_t x2786; + fiat_np521_uint1 x2787; + uint32_t x2788; + fiat_np521_uint1 x2789; + uint32_t x2790; + fiat_np521_uint1 x2791; + uint32_t x2792; + fiat_np521_uint1 x2793; + uint32_t x2794; + fiat_np521_uint1 x2795; + uint32_t x2796; + fiat_np521_uint1 x2797; + uint32_t x2798; + fiat_np521_uint1 x2799; + uint32_t x2800; + fiat_np521_uint1 x2801; + uint32_t x2802; + fiat_np521_uint1 x2803; + uint32_t x2804; + fiat_np521_uint1 x2805; + uint32_t x2806; + fiat_np521_uint1 x2807; + uint32_t x2808; + fiat_np521_uint1 x2809; + uint32_t x2810; + fiat_np521_uint1 x2811; + uint32_t x2812; + uint32_t x2813; + uint32_t x2814; + uint32_t x2815; + uint32_t x2816; + uint32_t x2817; + uint32_t x2818; + uint32_t x2819; + uint32_t x2820; + uint32_t x2821; + uint32_t x2822; + uint32_t x2823; + uint32_t x2824; + uint32_t x2825; + uint32_t x2826; + uint32_t x2827; + uint32_t x2828; + uint32_t x2829; + uint32_t x2830; + uint32_t x2831; + uint32_t x2832; + uint32_t x2833; + uint32_t x2834; + uint32_t x2835; + uint32_t x2836; + uint32_t x2837; + uint32_t x2838; + uint32_t x2839; + uint32_t x2840; + uint32_t x2841; + uint32_t x2842; + uint32_t x2843; + uint32_t x2844; + uint32_t x2845; + uint32_t x2846; + fiat_np521_uint1 x2847; + uint32_t x2848; + fiat_np521_uint1 x2849; + uint32_t x2850; + fiat_np521_uint1 x2851; + uint32_t x2852; + fiat_np521_uint1 x2853; + uint32_t x2854; + fiat_np521_uint1 x2855; + uint32_t x2856; + fiat_np521_uint1 x2857; + uint32_t x2858; + fiat_np521_uint1 x2859; + uint32_t x2860; + fiat_np521_uint1 x2861; + uint32_t x2862; + fiat_np521_uint1 x2863; + uint32_t x2864; + fiat_np521_uint1 x2865; + uint32_t x2866; + fiat_np521_uint1 x2867; + uint32_t x2868; + fiat_np521_uint1 x2869; + uint32_t x2870; + fiat_np521_uint1 x2871; + uint32_t x2872; + fiat_np521_uint1 x2873; + uint32_t x2874; + fiat_np521_uint1 x2875; + uint32_t x2876; + fiat_np521_uint1 x2877; + uint32_t x2878; + fiat_np521_uint1 x2879; + uint32_t x2880; + fiat_np521_uint1 x2881; + uint32_t x2882; + fiat_np521_uint1 x2883; + uint32_t x2884; + fiat_np521_uint1 x2885; + uint32_t x2886; + fiat_np521_uint1 x2887; + uint32_t x2888; + fiat_np521_uint1 x2889; + uint32_t x2890; + fiat_np521_uint1 x2891; + uint32_t x2892; + fiat_np521_uint1 x2893; + uint32_t x2894; + fiat_np521_uint1 x2895; + uint32_t x2896; + fiat_np521_uint1 x2897; + uint32_t x2898; + fiat_np521_uint1 x2899; + uint32_t x2900; + fiat_np521_uint1 x2901; + uint32_t x2902; + fiat_np521_uint1 x2903; + uint32_t x2904; + fiat_np521_uint1 x2905; + uint32_t x2906; + fiat_np521_uint1 x2907; + uint32_t x2908; + fiat_np521_uint1 x2909; + uint32_t x2910; + fiat_np521_uint1 x2911; + uint32_t x2912; + uint32_t x2913; + uint32_t x2914; + uint32_t x2915; + uint32_t x2916; + uint32_t x2917; + uint32_t x2918; + uint32_t x2919; + uint32_t x2920; + uint32_t x2921; + uint32_t x2922; + uint32_t x2923; + uint32_t x2924; + uint32_t x2925; + uint32_t x2926; + uint32_t x2927; + uint32_t x2928; + uint32_t x2929; + uint32_t x2930; + uint32_t x2931; + uint32_t x2932; + uint32_t x2933; + uint32_t x2934; + uint32_t x2935; + uint32_t x2936; + uint32_t x2937; + uint32_t x2938; + uint32_t x2939; + uint32_t x2940; + uint32_t x2941; + uint32_t x2942; + uint32_t x2943; + uint32_t x2944; + uint32_t x2945; + uint32_t x2946; + uint32_t x2947; + uint32_t x2948; + fiat_np521_uint1 x2949; + uint32_t x2950; + fiat_np521_uint1 x2951; + uint32_t x2952; + fiat_np521_uint1 x2953; + uint32_t x2954; + fiat_np521_uint1 x2955; + uint32_t x2956; + fiat_np521_uint1 x2957; + uint32_t x2958; + fiat_np521_uint1 x2959; + uint32_t x2960; + fiat_np521_uint1 x2961; + uint32_t x2962; + fiat_np521_uint1 x2963; + uint32_t x2964; + fiat_np521_uint1 x2965; + uint32_t x2966; + fiat_np521_uint1 x2967; + uint32_t x2968; + fiat_np521_uint1 x2969; + uint32_t x2970; + fiat_np521_uint1 x2971; + uint32_t x2972; + fiat_np521_uint1 x2973; + uint32_t x2974; + fiat_np521_uint1 x2975; + uint32_t x2976; + fiat_np521_uint1 x2977; + uint32_t x2978; + fiat_np521_uint1 x2979; + uint32_t x2980; + fiat_np521_uint1 x2981; + uint32_t x2982; + fiat_np521_uint1 x2983; + uint32_t x2984; + fiat_np521_uint1 x2985; + uint32_t x2986; + fiat_np521_uint1 x2987; + uint32_t x2988; + fiat_np521_uint1 x2989; + uint32_t x2990; + fiat_np521_uint1 x2991; + uint32_t x2992; + fiat_np521_uint1 x2993; + uint32_t x2994; + fiat_np521_uint1 x2995; + uint32_t x2996; + fiat_np521_uint1 x2997; + uint32_t x2998; + fiat_np521_uint1 x2999; + uint32_t x3000; + fiat_np521_uint1 x3001; + uint32_t x3002; + fiat_np521_uint1 x3003; + uint32_t x3004; + fiat_np521_uint1 x3005; + uint32_t x3006; + fiat_np521_uint1 x3007; + uint32_t x3008; + fiat_np521_uint1 x3009; + uint32_t x3010; + fiat_np521_uint1 x3011; + uint32_t x3012; + fiat_np521_uint1 x3013; + uint32_t x3014; + uint32_t x3015; + uint32_t x3016; + uint32_t x3017; + uint32_t x3018; + uint32_t x3019; + uint32_t x3020; + uint32_t x3021; + uint32_t x3022; + uint32_t x3023; + uint32_t x3024; + uint32_t x3025; + uint32_t x3026; + uint32_t x3027; + uint32_t x3028; + uint32_t x3029; + uint32_t x3030; + uint32_t x3031; + uint32_t x3032; + uint32_t x3033; + uint32_t x3034; + uint32_t x3035; + uint32_t x3036; + uint32_t x3037; + uint32_t x3038; + uint32_t x3039; + uint32_t x3040; + uint32_t x3041; + uint32_t x3042; + uint32_t x3043; + uint32_t x3044; + uint32_t x3045; + uint32_t x3046; + uint32_t x3047; + uint32_t x3048; + fiat_np521_uint1 x3049; + uint32_t x3050; + fiat_np521_uint1 x3051; + uint32_t x3052; + fiat_np521_uint1 x3053; + uint32_t x3054; + fiat_np521_uint1 x3055; + uint32_t x3056; + fiat_np521_uint1 x3057; + uint32_t x3058; + fiat_np521_uint1 x3059; + uint32_t x3060; + fiat_np521_uint1 x3061; + uint32_t x3062; + fiat_np521_uint1 x3063; + uint32_t x3064; + fiat_np521_uint1 x3065; + uint32_t x3066; + fiat_np521_uint1 x3067; + uint32_t x3068; + fiat_np521_uint1 x3069; + uint32_t x3070; + fiat_np521_uint1 x3071; + uint32_t x3072; + fiat_np521_uint1 x3073; + uint32_t x3074; + fiat_np521_uint1 x3075; + uint32_t x3076; + fiat_np521_uint1 x3077; + uint32_t x3078; + fiat_np521_uint1 x3079; + uint32_t x3080; + fiat_np521_uint1 x3081; + uint32_t x3082; + fiat_np521_uint1 x3083; + uint32_t x3084; + fiat_np521_uint1 x3085; + uint32_t x3086; + fiat_np521_uint1 x3087; + uint32_t x3088; + fiat_np521_uint1 x3089; + uint32_t x3090; + fiat_np521_uint1 x3091; + uint32_t x3092; + fiat_np521_uint1 x3093; + uint32_t x3094; + fiat_np521_uint1 x3095; + uint32_t x3096; + fiat_np521_uint1 x3097; + uint32_t x3098; + fiat_np521_uint1 x3099; + uint32_t x3100; + fiat_np521_uint1 x3101; + uint32_t x3102; + fiat_np521_uint1 x3103; + uint32_t x3104; + fiat_np521_uint1 x3105; + uint32_t x3106; + fiat_np521_uint1 x3107; + uint32_t x3108; + fiat_np521_uint1 x3109; + uint32_t x3110; + fiat_np521_uint1 x3111; + uint32_t x3112; + fiat_np521_uint1 x3113; + uint32_t x3114; + uint32_t x3115; + uint32_t x3116; + uint32_t x3117; + uint32_t x3118; + uint32_t x3119; + uint32_t x3120; + uint32_t x3121; + uint32_t x3122; + uint32_t x3123; + uint32_t x3124; + uint32_t x3125; + uint32_t x3126; + uint32_t x3127; + uint32_t x3128; + uint32_t x3129; + uint32_t x3130; + uint32_t x3131; + uint32_t x3132; + uint32_t x3133; + uint32_t x3134; + uint32_t x3135; + uint32_t x3136; + uint32_t x3137; + uint32_t x3138; + uint32_t x3139; + uint32_t x3140; + uint32_t x3141; + uint32_t x3142; + uint32_t x3143; + uint32_t x3144; + uint32_t x3145; + uint32_t x3146; + uint32_t x3147; + uint32_t x3148; + uint32_t x3149; + uint32_t x3150; + fiat_np521_uint1 x3151; + uint32_t x3152; + fiat_np521_uint1 x3153; + uint32_t x3154; + fiat_np521_uint1 x3155; + uint32_t x3156; + fiat_np521_uint1 x3157; + uint32_t x3158; + fiat_np521_uint1 x3159; + uint32_t x3160; + fiat_np521_uint1 x3161; + uint32_t x3162; + fiat_np521_uint1 x3163; + uint32_t x3164; + fiat_np521_uint1 x3165; + uint32_t x3166; + fiat_np521_uint1 x3167; + uint32_t x3168; + fiat_np521_uint1 x3169; + uint32_t x3170; + fiat_np521_uint1 x3171; + uint32_t x3172; + fiat_np521_uint1 x3173; + uint32_t x3174; + fiat_np521_uint1 x3175; + uint32_t x3176; + fiat_np521_uint1 x3177; + uint32_t x3178; + fiat_np521_uint1 x3179; + uint32_t x3180; + fiat_np521_uint1 x3181; + uint32_t x3182; + fiat_np521_uint1 x3183; + uint32_t x3184; + fiat_np521_uint1 x3185; + uint32_t x3186; + fiat_np521_uint1 x3187; + uint32_t x3188; + fiat_np521_uint1 x3189; + uint32_t x3190; + fiat_np521_uint1 x3191; + uint32_t x3192; + fiat_np521_uint1 x3193; + uint32_t x3194; + fiat_np521_uint1 x3195; + uint32_t x3196; + fiat_np521_uint1 x3197; + uint32_t x3198; + fiat_np521_uint1 x3199; + uint32_t x3200; + fiat_np521_uint1 x3201; + uint32_t x3202; + fiat_np521_uint1 x3203; + uint32_t x3204; + fiat_np521_uint1 x3205; + uint32_t x3206; + fiat_np521_uint1 x3207; + uint32_t x3208; + fiat_np521_uint1 x3209; + uint32_t x3210; + fiat_np521_uint1 x3211; + uint32_t x3212; + fiat_np521_uint1 x3213; + uint32_t x3214; + fiat_np521_uint1 x3215; + uint32_t x3216; + uint32_t x3217; + uint32_t x3218; + uint32_t x3219; + uint32_t x3220; + uint32_t x3221; + uint32_t x3222; + uint32_t x3223; + uint32_t x3224; + uint32_t x3225; + uint32_t x3226; + uint32_t x3227; + uint32_t x3228; + uint32_t x3229; + uint32_t x3230; + uint32_t x3231; + uint32_t x3232; + uint32_t x3233; + uint32_t x3234; + uint32_t x3235; + uint32_t x3236; + uint32_t x3237; + uint32_t x3238; + uint32_t x3239; + uint32_t x3240; + uint32_t x3241; + uint32_t x3242; + uint32_t x3243; + uint32_t x3244; + uint32_t x3245; + uint32_t x3246; + uint32_t x3247; + uint32_t x3248; + uint32_t x3249; + uint32_t x3250; + fiat_np521_uint1 x3251; + uint32_t x3252; + fiat_np521_uint1 x3253; + uint32_t x3254; + fiat_np521_uint1 x3255; + uint32_t x3256; + fiat_np521_uint1 x3257; + uint32_t x3258; + fiat_np521_uint1 x3259; + uint32_t x3260; + fiat_np521_uint1 x3261; + uint32_t x3262; + fiat_np521_uint1 x3263; + uint32_t x3264; + fiat_np521_uint1 x3265; + uint32_t x3266; + fiat_np521_uint1 x3267; + uint32_t x3268; + fiat_np521_uint1 x3269; + uint32_t x3270; + fiat_np521_uint1 x3271; + uint32_t x3272; + fiat_np521_uint1 x3273; + uint32_t x3274; + fiat_np521_uint1 x3275; + uint32_t x3276; + fiat_np521_uint1 x3277; + uint32_t x3278; + fiat_np521_uint1 x3279; + uint32_t x3280; + fiat_np521_uint1 x3281; + uint32_t x3282; + fiat_np521_uint1 x3283; + uint32_t x3284; + fiat_np521_uint1 x3285; + uint32_t x3286; + fiat_np521_uint1 x3287; + uint32_t x3288; + fiat_np521_uint1 x3289; + uint32_t x3290; + fiat_np521_uint1 x3291; + uint32_t x3292; + fiat_np521_uint1 x3293; + uint32_t x3294; + fiat_np521_uint1 x3295; + uint32_t x3296; + fiat_np521_uint1 x3297; + uint32_t x3298; + fiat_np521_uint1 x3299; + uint32_t x3300; + fiat_np521_uint1 x3301; + uint32_t x3302; + fiat_np521_uint1 x3303; + uint32_t x3304; + fiat_np521_uint1 x3305; + uint32_t x3306; + fiat_np521_uint1 x3307; + uint32_t x3308; + fiat_np521_uint1 x3309; + uint32_t x3310; + fiat_np521_uint1 x3311; + uint32_t x3312; + fiat_np521_uint1 x3313; + uint32_t x3314; + fiat_np521_uint1 x3315; + uint32_t x3316; + uint32_t x3317; + uint32_t x3318; + uint32_t x3319; + uint32_t x3320; + uint32_t x3321; + uint32_t x3322; + uint32_t x3323; + uint32_t x3324; + uint32_t x3325; + uint32_t x3326; + uint32_t x3327; + uint32_t x3328; + uint32_t x3329; + uint32_t x3330; + uint32_t x3331; + uint32_t x3332; + uint32_t x3333; + uint32_t x3334; + uint32_t x3335; + uint32_t x3336; + uint32_t x3337; + uint32_t x3338; + uint32_t x3339; + uint32_t x3340; + uint32_t x3341; + uint32_t x3342; + uint32_t x3343; + uint32_t x3344; + uint32_t x3345; + uint32_t x3346; + uint32_t x3347; + uint32_t x3348; + uint32_t x3349; + uint32_t x3350; + uint32_t x3351; + uint32_t x3352; + fiat_np521_uint1 x3353; + uint32_t x3354; + fiat_np521_uint1 x3355; + uint32_t x3356; + fiat_np521_uint1 x3357; + uint32_t x3358; + fiat_np521_uint1 x3359; + uint32_t x3360; + fiat_np521_uint1 x3361; + uint32_t x3362; + fiat_np521_uint1 x3363; + uint32_t x3364; + fiat_np521_uint1 x3365; + uint32_t x3366; + fiat_np521_uint1 x3367; + uint32_t x3368; + fiat_np521_uint1 x3369; + uint32_t x3370; + fiat_np521_uint1 x3371; + uint32_t x3372; + fiat_np521_uint1 x3373; + uint32_t x3374; + fiat_np521_uint1 x3375; + uint32_t x3376; + fiat_np521_uint1 x3377; + uint32_t x3378; + fiat_np521_uint1 x3379; + uint32_t x3380; + fiat_np521_uint1 x3381; + uint32_t x3382; + fiat_np521_uint1 x3383; + uint32_t x3384; + fiat_np521_uint1 x3385; + uint32_t x3386; + fiat_np521_uint1 x3387; + uint32_t x3388; + fiat_np521_uint1 x3389; + uint32_t x3390; + fiat_np521_uint1 x3391; + uint32_t x3392; + fiat_np521_uint1 x3393; + uint32_t x3394; + fiat_np521_uint1 x3395; + uint32_t x3396; + fiat_np521_uint1 x3397; + uint32_t x3398; + fiat_np521_uint1 x3399; + uint32_t x3400; + fiat_np521_uint1 x3401; + uint32_t x3402; + fiat_np521_uint1 x3403; + uint32_t x3404; + fiat_np521_uint1 x3405; + uint32_t x3406; + fiat_np521_uint1 x3407; + uint32_t x3408; + fiat_np521_uint1 x3409; + uint32_t x3410; + fiat_np521_uint1 x3411; + uint32_t x3412; + fiat_np521_uint1 x3413; + uint32_t x3414; + fiat_np521_uint1 x3415; + uint32_t x3416; + fiat_np521_uint1 x3417; + uint32_t x3418; + uint32_t x3419; + fiat_np521_uint1 x3420; + uint32_t x3421; + fiat_np521_uint1 x3422; + uint32_t x3423; + fiat_np521_uint1 x3424; + uint32_t x3425; + fiat_np521_uint1 x3426; + uint32_t x3427; + fiat_np521_uint1 x3428; + uint32_t x3429; + fiat_np521_uint1 x3430; + uint32_t x3431; + fiat_np521_uint1 x3432; + uint32_t x3433; + fiat_np521_uint1 x3434; + uint32_t x3435; + fiat_np521_uint1 x3436; + uint32_t x3437; + fiat_np521_uint1 x3438; + uint32_t x3439; + fiat_np521_uint1 x3440; + uint32_t x3441; + fiat_np521_uint1 x3442; + uint32_t x3443; + fiat_np521_uint1 x3444; + uint32_t x3445; + fiat_np521_uint1 x3446; + uint32_t x3447; + fiat_np521_uint1 x3448; + uint32_t x3449; + fiat_np521_uint1 x3450; + uint32_t x3451; + fiat_np521_uint1 x3452; + uint32_t x3453; + fiat_np521_uint1 x3454; + uint32_t x3455; + uint32_t x3456; + uint32_t x3457; + uint32_t x3458; + uint32_t x3459; + uint32_t x3460; + uint32_t x3461; + uint32_t x3462; + uint32_t x3463; + uint32_t x3464; + uint32_t x3465; + uint32_t x3466; + uint32_t x3467; + uint32_t x3468; + uint32_t x3469; + uint32_t x3470; + uint32_t x3471; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[8]); + x9 = (arg1[9]); + x10 = (arg1[10]); + x11 = (arg1[11]); + x12 = (arg1[12]); + x13 = (arg1[13]); + x14 = (arg1[14]); + x15 = (arg1[15]); + x16 = (arg1[16]); + x17 = (arg1[0]); + fiat_np521_mulx_u32(&x18, &x19, x17, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x20, &x21, x17, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x22, &x23, x17, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x24, &x25, x17, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x26, &x27, x17, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x28, &x29, x17, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x30, &x31, x17, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x32, &x33, x17, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x34, &x35, x17, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x36, &x37, x17, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x38, &x39, x17, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x40, &x41, x17, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x42, &x43, x17, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x44, &x45, x17, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x46, &x47, x17, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x48, &x49, x17, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x50, &x51, x17, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x52, &x53, 0x0, x51, x48); + fiat_np521_addcarryx_u32(&x54, &x55, x53, x49, x46); + fiat_np521_addcarryx_u32(&x56, &x57, x55, x47, x44); + fiat_np521_addcarryx_u32(&x58, &x59, x57, x45, x42); + fiat_np521_addcarryx_u32(&x60, &x61, x59, x43, x40); + fiat_np521_addcarryx_u32(&x62, &x63, x61, x41, x38); + fiat_np521_addcarryx_u32(&x64, &x65, x63, x39, x36); + fiat_np521_addcarryx_u32(&x66, &x67, x65, x37, x34); + fiat_np521_addcarryx_u32(&x68, &x69, x67, x35, x32); + fiat_np521_addcarryx_u32(&x70, &x71, x69, x33, x30); + fiat_np521_addcarryx_u32(&x72, &x73, x71, x31, x28); + fiat_np521_addcarryx_u32(&x74, &x75, x73, x29, x26); + fiat_np521_addcarryx_u32(&x76, &x77, x75, x27, x24); + fiat_np521_addcarryx_u32(&x78, &x79, x77, x25, x22); + fiat_np521_addcarryx_u32(&x80, &x81, x79, x23, x20); + fiat_np521_addcarryx_u32(&x82, &x83, x81, x21, x18); + fiat_np521_mulx_u32(&x84, &x85, x50, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x86, &x87, x84, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x88, &x89, x84, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x90, &x91, x84, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x92, &x93, x84, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x94, &x95, x84, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x96, &x97, x84, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x98, &x99, x84, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x100, &x101, x84, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x102, &x103, x84, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x104, &x105, x84, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x106, &x107, x84, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x108, &x109, x84, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x110, &x111, x84, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x112, &x113, x84, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x114, &x115, x84, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x116, &x117, x84, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x118, &x119, x84, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x120, &x121, 0x0, x119, x116); + fiat_np521_addcarryx_u32(&x122, &x123, x121, x117, x114); + fiat_np521_addcarryx_u32(&x124, &x125, x123, x115, x112); + fiat_np521_addcarryx_u32(&x126, &x127, x125, x113, x110); + fiat_np521_addcarryx_u32(&x128, &x129, x127, x111, x108); + fiat_np521_addcarryx_u32(&x130, &x131, x129, x109, x106); + fiat_np521_addcarryx_u32(&x132, &x133, x131, x107, x104); + fiat_np521_addcarryx_u32(&x134, &x135, x133, x105, x102); + fiat_np521_addcarryx_u32(&x136, &x137, x135, x103, x100); + fiat_np521_addcarryx_u32(&x138, &x139, x137, x101, x98); + fiat_np521_addcarryx_u32(&x140, &x141, x139, x99, x96); + fiat_np521_addcarryx_u32(&x142, &x143, x141, x97, x94); + fiat_np521_addcarryx_u32(&x144, &x145, x143, x95, x92); + fiat_np521_addcarryx_u32(&x146, &x147, x145, x93, x90); + fiat_np521_addcarryx_u32(&x148, &x149, x147, x91, x88); + fiat_np521_addcarryx_u32(&x150, &x151, x149, x89, x86); + fiat_np521_addcarryx_u32(&x152, &x153, 0x0, x50, x118); + fiat_np521_addcarryx_u32(&x154, &x155, x153, x52, x120); + fiat_np521_addcarryx_u32(&x156, &x157, x155, x54, x122); + fiat_np521_addcarryx_u32(&x158, &x159, x157, x56, x124); + fiat_np521_addcarryx_u32(&x160, &x161, x159, x58, x126); + fiat_np521_addcarryx_u32(&x162, &x163, x161, x60, x128); + fiat_np521_addcarryx_u32(&x164, &x165, x163, x62, x130); + fiat_np521_addcarryx_u32(&x166, &x167, x165, x64, x132); + fiat_np521_addcarryx_u32(&x168, &x169, x167, x66, x134); + fiat_np521_addcarryx_u32(&x170, &x171, x169, x68, x136); + fiat_np521_addcarryx_u32(&x172, &x173, x171, x70, x138); + fiat_np521_addcarryx_u32(&x174, &x175, x173, x72, x140); + fiat_np521_addcarryx_u32(&x176, &x177, x175, x74, x142); + fiat_np521_addcarryx_u32(&x178, &x179, x177, x76, x144); + fiat_np521_addcarryx_u32(&x180, &x181, x179, x78, x146); + fiat_np521_addcarryx_u32(&x182, &x183, x181, x80, x148); + fiat_np521_addcarryx_u32(&x184, &x185, x183, x82, x150); + fiat_np521_mulx_u32(&x186, &x187, x1, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x188, &x189, x1, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x190, &x191, x1, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x192, &x193, x1, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x194, &x195, x1, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x196, &x197, x1, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x198, &x199, x1, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x200, &x201, x1, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x202, &x203, x1, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x204, &x205, x1, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x206, &x207, x1, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x208, &x209, x1, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x210, &x211, x1, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x212, &x213, x1, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x214, &x215, x1, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x216, &x217, x1, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x218, &x219, x1, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x220, &x221, 0x0, x219, x216); + fiat_np521_addcarryx_u32(&x222, &x223, x221, x217, x214); + fiat_np521_addcarryx_u32(&x224, &x225, x223, x215, x212); + fiat_np521_addcarryx_u32(&x226, &x227, x225, x213, x210); + fiat_np521_addcarryx_u32(&x228, &x229, x227, x211, x208); + fiat_np521_addcarryx_u32(&x230, &x231, x229, x209, x206); + fiat_np521_addcarryx_u32(&x232, &x233, x231, x207, x204); + fiat_np521_addcarryx_u32(&x234, &x235, x233, x205, x202); + fiat_np521_addcarryx_u32(&x236, &x237, x235, x203, x200); + fiat_np521_addcarryx_u32(&x238, &x239, x237, x201, x198); + fiat_np521_addcarryx_u32(&x240, &x241, x239, x199, x196); + fiat_np521_addcarryx_u32(&x242, &x243, x241, x197, x194); + fiat_np521_addcarryx_u32(&x244, &x245, x243, x195, x192); + fiat_np521_addcarryx_u32(&x246, &x247, x245, x193, x190); + fiat_np521_addcarryx_u32(&x248, &x249, x247, x191, x188); + fiat_np521_addcarryx_u32(&x250, &x251, x249, x189, x186); + fiat_np521_addcarryx_u32(&x252, &x253, 0x0, x154, x218); + fiat_np521_addcarryx_u32(&x254, &x255, x253, x156, x220); + fiat_np521_addcarryx_u32(&x256, &x257, x255, x158, x222); + fiat_np521_addcarryx_u32(&x258, &x259, x257, x160, x224); + fiat_np521_addcarryx_u32(&x260, &x261, x259, x162, x226); + fiat_np521_addcarryx_u32(&x262, &x263, x261, x164, x228); + fiat_np521_addcarryx_u32(&x264, &x265, x263, x166, x230); + fiat_np521_addcarryx_u32(&x266, &x267, x265, x168, x232); + fiat_np521_addcarryx_u32(&x268, &x269, x267, x170, x234); + fiat_np521_addcarryx_u32(&x270, &x271, x269, x172, x236); + fiat_np521_addcarryx_u32(&x272, &x273, x271, x174, x238); + fiat_np521_addcarryx_u32(&x274, &x275, x273, x176, x240); + fiat_np521_addcarryx_u32(&x276, &x277, x275, x178, x242); + fiat_np521_addcarryx_u32(&x278, &x279, x277, x180, x244); + fiat_np521_addcarryx_u32(&x280, &x281, x279, x182, x246); + fiat_np521_addcarryx_u32(&x282, &x283, x281, x184, x248); + fiat_np521_addcarryx_u32(&x284, &x285, x283, ((x185 + (x83 + x19)) + (x151 + x87)), x250); + fiat_np521_mulx_u32(&x286, &x287, x252, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x288, &x289, x286, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x290, &x291, x286, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x292, &x293, x286, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x294, &x295, x286, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x296, &x297, x286, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x298, &x299, x286, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x300, &x301, x286, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x302, &x303, x286, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x304, &x305, x286, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x306, &x307, x286, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x308, &x309, x286, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x310, &x311, x286, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x312, &x313, x286, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x314, &x315, x286, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x316, &x317, x286, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x318, &x319, x286, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x320, &x321, x286, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x322, &x323, 0x0, x321, x318); + fiat_np521_addcarryx_u32(&x324, &x325, x323, x319, x316); + fiat_np521_addcarryx_u32(&x326, &x327, x325, x317, x314); + fiat_np521_addcarryx_u32(&x328, &x329, x327, x315, x312); + fiat_np521_addcarryx_u32(&x330, &x331, x329, x313, x310); + fiat_np521_addcarryx_u32(&x332, &x333, x331, x311, x308); + fiat_np521_addcarryx_u32(&x334, &x335, x333, x309, x306); + fiat_np521_addcarryx_u32(&x336, &x337, x335, x307, x304); + fiat_np521_addcarryx_u32(&x338, &x339, x337, x305, x302); + fiat_np521_addcarryx_u32(&x340, &x341, x339, x303, x300); + fiat_np521_addcarryx_u32(&x342, &x343, x341, x301, x298); + fiat_np521_addcarryx_u32(&x344, &x345, x343, x299, x296); + fiat_np521_addcarryx_u32(&x346, &x347, x345, x297, x294); + fiat_np521_addcarryx_u32(&x348, &x349, x347, x295, x292); + fiat_np521_addcarryx_u32(&x350, &x351, x349, x293, x290); + fiat_np521_addcarryx_u32(&x352, &x353, x351, x291, x288); + fiat_np521_addcarryx_u32(&x354, &x355, 0x0, x252, x320); + fiat_np521_addcarryx_u32(&x356, &x357, x355, x254, x322); + fiat_np521_addcarryx_u32(&x358, &x359, x357, x256, x324); + fiat_np521_addcarryx_u32(&x360, &x361, x359, x258, x326); + fiat_np521_addcarryx_u32(&x362, &x363, x361, x260, x328); + fiat_np521_addcarryx_u32(&x364, &x365, x363, x262, x330); + fiat_np521_addcarryx_u32(&x366, &x367, x365, x264, x332); + fiat_np521_addcarryx_u32(&x368, &x369, x367, x266, x334); + fiat_np521_addcarryx_u32(&x370, &x371, x369, x268, x336); + fiat_np521_addcarryx_u32(&x372, &x373, x371, x270, x338); + fiat_np521_addcarryx_u32(&x374, &x375, x373, x272, x340); + fiat_np521_addcarryx_u32(&x376, &x377, x375, x274, x342); + fiat_np521_addcarryx_u32(&x378, &x379, x377, x276, x344); + fiat_np521_addcarryx_u32(&x380, &x381, x379, x278, x346); + fiat_np521_addcarryx_u32(&x382, &x383, x381, x280, x348); + fiat_np521_addcarryx_u32(&x384, &x385, x383, x282, x350); + fiat_np521_addcarryx_u32(&x386, &x387, x385, x284, x352); + fiat_np521_mulx_u32(&x388, &x389, x2, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x390, &x391, x2, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x392, &x393, x2, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x394, &x395, x2, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x396, &x397, x2, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x398, &x399, x2, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x400, &x401, x2, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x402, &x403, x2, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x404, &x405, x2, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x406, &x407, x2, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x408, &x409, x2, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x410, &x411, x2, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x412, &x413, x2, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x414, &x415, x2, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x416, &x417, x2, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x418, &x419, x2, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x420, &x421, x2, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x422, &x423, 0x0, x421, x418); + fiat_np521_addcarryx_u32(&x424, &x425, x423, x419, x416); + fiat_np521_addcarryx_u32(&x426, &x427, x425, x417, x414); + fiat_np521_addcarryx_u32(&x428, &x429, x427, x415, x412); + fiat_np521_addcarryx_u32(&x430, &x431, x429, x413, x410); + fiat_np521_addcarryx_u32(&x432, &x433, x431, x411, x408); + fiat_np521_addcarryx_u32(&x434, &x435, x433, x409, x406); + fiat_np521_addcarryx_u32(&x436, &x437, x435, x407, x404); + fiat_np521_addcarryx_u32(&x438, &x439, x437, x405, x402); + fiat_np521_addcarryx_u32(&x440, &x441, x439, x403, x400); + fiat_np521_addcarryx_u32(&x442, &x443, x441, x401, x398); + fiat_np521_addcarryx_u32(&x444, &x445, x443, x399, x396); + fiat_np521_addcarryx_u32(&x446, &x447, x445, x397, x394); + fiat_np521_addcarryx_u32(&x448, &x449, x447, x395, x392); + fiat_np521_addcarryx_u32(&x450, &x451, x449, x393, x390); + fiat_np521_addcarryx_u32(&x452, &x453, x451, x391, x388); + fiat_np521_addcarryx_u32(&x454, &x455, 0x0, x356, x420); + fiat_np521_addcarryx_u32(&x456, &x457, x455, x358, x422); + fiat_np521_addcarryx_u32(&x458, &x459, x457, x360, x424); + fiat_np521_addcarryx_u32(&x460, &x461, x459, x362, x426); + fiat_np521_addcarryx_u32(&x462, &x463, x461, x364, x428); + fiat_np521_addcarryx_u32(&x464, &x465, x463, x366, x430); + fiat_np521_addcarryx_u32(&x466, &x467, x465, x368, x432); + fiat_np521_addcarryx_u32(&x468, &x469, x467, x370, x434); + fiat_np521_addcarryx_u32(&x470, &x471, x469, x372, x436); + fiat_np521_addcarryx_u32(&x472, &x473, x471, x374, x438); + fiat_np521_addcarryx_u32(&x474, &x475, x473, x376, x440); + fiat_np521_addcarryx_u32(&x476, &x477, x475, x378, x442); + fiat_np521_addcarryx_u32(&x478, &x479, x477, x380, x444); + fiat_np521_addcarryx_u32(&x480, &x481, x479, x382, x446); + fiat_np521_addcarryx_u32(&x482, &x483, x481, x384, x448); + fiat_np521_addcarryx_u32(&x484, &x485, x483, x386, x450); + fiat_np521_addcarryx_u32(&x486, &x487, x485, ((x387 + (x285 + (x251 + x187))) + (x353 + x289)), x452); + fiat_np521_mulx_u32(&x488, &x489, x454, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x490, &x491, x488, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x492, &x493, x488, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x494, &x495, x488, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x496, &x497, x488, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x498, &x499, x488, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x500, &x501, x488, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x502, &x503, x488, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x504, &x505, x488, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x506, &x507, x488, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x508, &x509, x488, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x510, &x511, x488, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x512, &x513, x488, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x514, &x515, x488, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x516, &x517, x488, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x518, &x519, x488, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x520, &x521, x488, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x522, &x523, x488, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x524, &x525, 0x0, x523, x520); + fiat_np521_addcarryx_u32(&x526, &x527, x525, x521, x518); + fiat_np521_addcarryx_u32(&x528, &x529, x527, x519, x516); + fiat_np521_addcarryx_u32(&x530, &x531, x529, x517, x514); + fiat_np521_addcarryx_u32(&x532, &x533, x531, x515, x512); + fiat_np521_addcarryx_u32(&x534, &x535, x533, x513, x510); + fiat_np521_addcarryx_u32(&x536, &x537, x535, x511, x508); + fiat_np521_addcarryx_u32(&x538, &x539, x537, x509, x506); + fiat_np521_addcarryx_u32(&x540, &x541, x539, x507, x504); + fiat_np521_addcarryx_u32(&x542, &x543, x541, x505, x502); + fiat_np521_addcarryx_u32(&x544, &x545, x543, x503, x500); + fiat_np521_addcarryx_u32(&x546, &x547, x545, x501, x498); + fiat_np521_addcarryx_u32(&x548, &x549, x547, x499, x496); + fiat_np521_addcarryx_u32(&x550, &x551, x549, x497, x494); + fiat_np521_addcarryx_u32(&x552, &x553, x551, x495, x492); + fiat_np521_addcarryx_u32(&x554, &x555, x553, x493, x490); + fiat_np521_addcarryx_u32(&x556, &x557, 0x0, x454, x522); + fiat_np521_addcarryx_u32(&x558, &x559, x557, x456, x524); + fiat_np521_addcarryx_u32(&x560, &x561, x559, x458, x526); + fiat_np521_addcarryx_u32(&x562, &x563, x561, x460, x528); + fiat_np521_addcarryx_u32(&x564, &x565, x563, x462, x530); + fiat_np521_addcarryx_u32(&x566, &x567, x565, x464, x532); + fiat_np521_addcarryx_u32(&x568, &x569, x567, x466, x534); + fiat_np521_addcarryx_u32(&x570, &x571, x569, x468, x536); + fiat_np521_addcarryx_u32(&x572, &x573, x571, x470, x538); + fiat_np521_addcarryx_u32(&x574, &x575, x573, x472, x540); + fiat_np521_addcarryx_u32(&x576, &x577, x575, x474, x542); + fiat_np521_addcarryx_u32(&x578, &x579, x577, x476, x544); + fiat_np521_addcarryx_u32(&x580, &x581, x579, x478, x546); + fiat_np521_addcarryx_u32(&x582, &x583, x581, x480, x548); + fiat_np521_addcarryx_u32(&x584, &x585, x583, x482, x550); + fiat_np521_addcarryx_u32(&x586, &x587, x585, x484, x552); + fiat_np521_addcarryx_u32(&x588, &x589, x587, x486, x554); + fiat_np521_mulx_u32(&x590, &x591, x3, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x592, &x593, x3, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x594, &x595, x3, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x596, &x597, x3, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x598, &x599, x3, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x600, &x601, x3, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x602, &x603, x3, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x604, &x605, x3, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x606, &x607, x3, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x608, &x609, x3, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x610, &x611, x3, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x612, &x613, x3, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x614, &x615, x3, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x616, &x617, x3, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x618, &x619, x3, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x620, &x621, x3, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x622, &x623, x3, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x624, &x625, 0x0, x623, x620); + fiat_np521_addcarryx_u32(&x626, &x627, x625, x621, x618); + fiat_np521_addcarryx_u32(&x628, &x629, x627, x619, x616); + fiat_np521_addcarryx_u32(&x630, &x631, x629, x617, x614); + fiat_np521_addcarryx_u32(&x632, &x633, x631, x615, x612); + fiat_np521_addcarryx_u32(&x634, &x635, x633, x613, x610); + fiat_np521_addcarryx_u32(&x636, &x637, x635, x611, x608); + fiat_np521_addcarryx_u32(&x638, &x639, x637, x609, x606); + fiat_np521_addcarryx_u32(&x640, &x641, x639, x607, x604); + fiat_np521_addcarryx_u32(&x642, &x643, x641, x605, x602); + fiat_np521_addcarryx_u32(&x644, &x645, x643, x603, x600); + fiat_np521_addcarryx_u32(&x646, &x647, x645, x601, x598); + fiat_np521_addcarryx_u32(&x648, &x649, x647, x599, x596); + fiat_np521_addcarryx_u32(&x650, &x651, x649, x597, x594); + fiat_np521_addcarryx_u32(&x652, &x653, x651, x595, x592); + fiat_np521_addcarryx_u32(&x654, &x655, x653, x593, x590); + fiat_np521_addcarryx_u32(&x656, &x657, 0x0, x558, x622); + fiat_np521_addcarryx_u32(&x658, &x659, x657, x560, x624); + fiat_np521_addcarryx_u32(&x660, &x661, x659, x562, x626); + fiat_np521_addcarryx_u32(&x662, &x663, x661, x564, x628); + fiat_np521_addcarryx_u32(&x664, &x665, x663, x566, x630); + fiat_np521_addcarryx_u32(&x666, &x667, x665, x568, x632); + fiat_np521_addcarryx_u32(&x668, &x669, x667, x570, x634); + fiat_np521_addcarryx_u32(&x670, &x671, x669, x572, x636); + fiat_np521_addcarryx_u32(&x672, &x673, x671, x574, x638); + fiat_np521_addcarryx_u32(&x674, &x675, x673, x576, x640); + fiat_np521_addcarryx_u32(&x676, &x677, x675, x578, x642); + fiat_np521_addcarryx_u32(&x678, &x679, x677, x580, x644); + fiat_np521_addcarryx_u32(&x680, &x681, x679, x582, x646); + fiat_np521_addcarryx_u32(&x682, &x683, x681, x584, x648); + fiat_np521_addcarryx_u32(&x684, &x685, x683, x586, x650); + fiat_np521_addcarryx_u32(&x686, &x687, x685, x588, x652); + fiat_np521_addcarryx_u32(&x688, &x689, x687, ((x589 + (x487 + (x453 + x389))) + (x555 + x491)), x654); + fiat_np521_mulx_u32(&x690, &x691, x656, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x692, &x693, x690, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x694, &x695, x690, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x696, &x697, x690, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x698, &x699, x690, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x700, &x701, x690, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x702, &x703, x690, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x704, &x705, x690, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x706, &x707, x690, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x708, &x709, x690, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x710, &x711, x690, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x712, &x713, x690, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x714, &x715, x690, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x716, &x717, x690, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x718, &x719, x690, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x720, &x721, x690, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x722, &x723, x690, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x724, &x725, x690, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x726, &x727, 0x0, x725, x722); + fiat_np521_addcarryx_u32(&x728, &x729, x727, x723, x720); + fiat_np521_addcarryx_u32(&x730, &x731, x729, x721, x718); + fiat_np521_addcarryx_u32(&x732, &x733, x731, x719, x716); + fiat_np521_addcarryx_u32(&x734, &x735, x733, x717, x714); + fiat_np521_addcarryx_u32(&x736, &x737, x735, x715, x712); + fiat_np521_addcarryx_u32(&x738, &x739, x737, x713, x710); + fiat_np521_addcarryx_u32(&x740, &x741, x739, x711, x708); + fiat_np521_addcarryx_u32(&x742, &x743, x741, x709, x706); + fiat_np521_addcarryx_u32(&x744, &x745, x743, x707, x704); + fiat_np521_addcarryx_u32(&x746, &x747, x745, x705, x702); + fiat_np521_addcarryx_u32(&x748, &x749, x747, x703, x700); + fiat_np521_addcarryx_u32(&x750, &x751, x749, x701, x698); + fiat_np521_addcarryx_u32(&x752, &x753, x751, x699, x696); + fiat_np521_addcarryx_u32(&x754, &x755, x753, x697, x694); + fiat_np521_addcarryx_u32(&x756, &x757, x755, x695, x692); + fiat_np521_addcarryx_u32(&x758, &x759, 0x0, x656, x724); + fiat_np521_addcarryx_u32(&x760, &x761, x759, x658, x726); + fiat_np521_addcarryx_u32(&x762, &x763, x761, x660, x728); + fiat_np521_addcarryx_u32(&x764, &x765, x763, x662, x730); + fiat_np521_addcarryx_u32(&x766, &x767, x765, x664, x732); + fiat_np521_addcarryx_u32(&x768, &x769, x767, x666, x734); + fiat_np521_addcarryx_u32(&x770, &x771, x769, x668, x736); + fiat_np521_addcarryx_u32(&x772, &x773, x771, x670, x738); + fiat_np521_addcarryx_u32(&x774, &x775, x773, x672, x740); + fiat_np521_addcarryx_u32(&x776, &x777, x775, x674, x742); + fiat_np521_addcarryx_u32(&x778, &x779, x777, x676, x744); + fiat_np521_addcarryx_u32(&x780, &x781, x779, x678, x746); + fiat_np521_addcarryx_u32(&x782, &x783, x781, x680, x748); + fiat_np521_addcarryx_u32(&x784, &x785, x783, x682, x750); + fiat_np521_addcarryx_u32(&x786, &x787, x785, x684, x752); + fiat_np521_addcarryx_u32(&x788, &x789, x787, x686, x754); + fiat_np521_addcarryx_u32(&x790, &x791, x789, x688, x756); + fiat_np521_mulx_u32(&x792, &x793, x4, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x794, &x795, x4, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x796, &x797, x4, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x798, &x799, x4, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x800, &x801, x4, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x802, &x803, x4, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x804, &x805, x4, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x806, &x807, x4, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x808, &x809, x4, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x810, &x811, x4, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x812, &x813, x4, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x814, &x815, x4, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x816, &x817, x4, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x818, &x819, x4, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x820, &x821, x4, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x822, &x823, x4, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x824, &x825, x4, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x826, &x827, 0x0, x825, x822); + fiat_np521_addcarryx_u32(&x828, &x829, x827, x823, x820); + fiat_np521_addcarryx_u32(&x830, &x831, x829, x821, x818); + fiat_np521_addcarryx_u32(&x832, &x833, x831, x819, x816); + fiat_np521_addcarryx_u32(&x834, &x835, x833, x817, x814); + fiat_np521_addcarryx_u32(&x836, &x837, x835, x815, x812); + fiat_np521_addcarryx_u32(&x838, &x839, x837, x813, x810); + fiat_np521_addcarryx_u32(&x840, &x841, x839, x811, x808); + fiat_np521_addcarryx_u32(&x842, &x843, x841, x809, x806); + fiat_np521_addcarryx_u32(&x844, &x845, x843, x807, x804); + fiat_np521_addcarryx_u32(&x846, &x847, x845, x805, x802); + fiat_np521_addcarryx_u32(&x848, &x849, x847, x803, x800); + fiat_np521_addcarryx_u32(&x850, &x851, x849, x801, x798); + fiat_np521_addcarryx_u32(&x852, &x853, x851, x799, x796); + fiat_np521_addcarryx_u32(&x854, &x855, x853, x797, x794); + fiat_np521_addcarryx_u32(&x856, &x857, x855, x795, x792); + fiat_np521_addcarryx_u32(&x858, &x859, 0x0, x760, x824); + fiat_np521_addcarryx_u32(&x860, &x861, x859, x762, x826); + fiat_np521_addcarryx_u32(&x862, &x863, x861, x764, x828); + fiat_np521_addcarryx_u32(&x864, &x865, x863, x766, x830); + fiat_np521_addcarryx_u32(&x866, &x867, x865, x768, x832); + fiat_np521_addcarryx_u32(&x868, &x869, x867, x770, x834); + fiat_np521_addcarryx_u32(&x870, &x871, x869, x772, x836); + fiat_np521_addcarryx_u32(&x872, &x873, x871, x774, x838); + fiat_np521_addcarryx_u32(&x874, &x875, x873, x776, x840); + fiat_np521_addcarryx_u32(&x876, &x877, x875, x778, x842); + fiat_np521_addcarryx_u32(&x878, &x879, x877, x780, x844); + fiat_np521_addcarryx_u32(&x880, &x881, x879, x782, x846); + fiat_np521_addcarryx_u32(&x882, &x883, x881, x784, x848); + fiat_np521_addcarryx_u32(&x884, &x885, x883, x786, x850); + fiat_np521_addcarryx_u32(&x886, &x887, x885, x788, x852); + fiat_np521_addcarryx_u32(&x888, &x889, x887, x790, x854); + fiat_np521_addcarryx_u32(&x890, &x891, x889, ((x791 + (x689 + (x655 + x591))) + (x757 + x693)), x856); + fiat_np521_mulx_u32(&x892, &x893, x858, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x894, &x895, x892, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x896, &x897, x892, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x898, &x899, x892, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x900, &x901, x892, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x902, &x903, x892, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x904, &x905, x892, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x906, &x907, x892, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x908, &x909, x892, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x910, &x911, x892, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x912, &x913, x892, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x914, &x915, x892, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x916, &x917, x892, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x918, &x919, x892, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x920, &x921, x892, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x922, &x923, x892, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x924, &x925, x892, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x926, &x927, x892, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x928, &x929, 0x0, x927, x924); + fiat_np521_addcarryx_u32(&x930, &x931, x929, x925, x922); + fiat_np521_addcarryx_u32(&x932, &x933, x931, x923, x920); + fiat_np521_addcarryx_u32(&x934, &x935, x933, x921, x918); + fiat_np521_addcarryx_u32(&x936, &x937, x935, x919, x916); + fiat_np521_addcarryx_u32(&x938, &x939, x937, x917, x914); + fiat_np521_addcarryx_u32(&x940, &x941, x939, x915, x912); + fiat_np521_addcarryx_u32(&x942, &x943, x941, x913, x910); + fiat_np521_addcarryx_u32(&x944, &x945, x943, x911, x908); + fiat_np521_addcarryx_u32(&x946, &x947, x945, x909, x906); + fiat_np521_addcarryx_u32(&x948, &x949, x947, x907, x904); + fiat_np521_addcarryx_u32(&x950, &x951, x949, x905, x902); + fiat_np521_addcarryx_u32(&x952, &x953, x951, x903, x900); + fiat_np521_addcarryx_u32(&x954, &x955, x953, x901, x898); + fiat_np521_addcarryx_u32(&x956, &x957, x955, x899, x896); + fiat_np521_addcarryx_u32(&x958, &x959, x957, x897, x894); + fiat_np521_addcarryx_u32(&x960, &x961, 0x0, x858, x926); + fiat_np521_addcarryx_u32(&x962, &x963, x961, x860, x928); + fiat_np521_addcarryx_u32(&x964, &x965, x963, x862, x930); + fiat_np521_addcarryx_u32(&x966, &x967, x965, x864, x932); + fiat_np521_addcarryx_u32(&x968, &x969, x967, x866, x934); + fiat_np521_addcarryx_u32(&x970, &x971, x969, x868, x936); + fiat_np521_addcarryx_u32(&x972, &x973, x971, x870, x938); + fiat_np521_addcarryx_u32(&x974, &x975, x973, x872, x940); + fiat_np521_addcarryx_u32(&x976, &x977, x975, x874, x942); + fiat_np521_addcarryx_u32(&x978, &x979, x977, x876, x944); + fiat_np521_addcarryx_u32(&x980, &x981, x979, x878, x946); + fiat_np521_addcarryx_u32(&x982, &x983, x981, x880, x948); + fiat_np521_addcarryx_u32(&x984, &x985, x983, x882, x950); + fiat_np521_addcarryx_u32(&x986, &x987, x985, x884, x952); + fiat_np521_addcarryx_u32(&x988, &x989, x987, x886, x954); + fiat_np521_addcarryx_u32(&x990, &x991, x989, x888, x956); + fiat_np521_addcarryx_u32(&x992, &x993, x991, x890, x958); + fiat_np521_mulx_u32(&x994, &x995, x5, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x996, &x997, x5, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x998, &x999, x5, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x1000, &x1001, x5, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x1002, &x1003, x5, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x1004, &x1005, x5, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x1006, &x1007, x5, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x1008, &x1009, x5, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x1010, &x1011, x5, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x1012, &x1013, x5, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x1014, &x1015, x5, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x1016, &x1017, x5, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x1018, &x1019, x5, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x1020, &x1021, x5, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x1022, &x1023, x5, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x1024, &x1025, x5, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x1026, &x1027, x5, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x1028, &x1029, 0x0, x1027, x1024); + fiat_np521_addcarryx_u32(&x1030, &x1031, x1029, x1025, x1022); + fiat_np521_addcarryx_u32(&x1032, &x1033, x1031, x1023, x1020); + fiat_np521_addcarryx_u32(&x1034, &x1035, x1033, x1021, x1018); + fiat_np521_addcarryx_u32(&x1036, &x1037, x1035, x1019, x1016); + fiat_np521_addcarryx_u32(&x1038, &x1039, x1037, x1017, x1014); + fiat_np521_addcarryx_u32(&x1040, &x1041, x1039, x1015, x1012); + fiat_np521_addcarryx_u32(&x1042, &x1043, x1041, x1013, x1010); + fiat_np521_addcarryx_u32(&x1044, &x1045, x1043, x1011, x1008); + fiat_np521_addcarryx_u32(&x1046, &x1047, x1045, x1009, x1006); + fiat_np521_addcarryx_u32(&x1048, &x1049, x1047, x1007, x1004); + fiat_np521_addcarryx_u32(&x1050, &x1051, x1049, x1005, x1002); + fiat_np521_addcarryx_u32(&x1052, &x1053, x1051, x1003, x1000); + fiat_np521_addcarryx_u32(&x1054, &x1055, x1053, x1001, x998); + fiat_np521_addcarryx_u32(&x1056, &x1057, x1055, x999, x996); + fiat_np521_addcarryx_u32(&x1058, &x1059, x1057, x997, x994); + fiat_np521_addcarryx_u32(&x1060, &x1061, 0x0, x962, x1026); + fiat_np521_addcarryx_u32(&x1062, &x1063, x1061, x964, x1028); + fiat_np521_addcarryx_u32(&x1064, &x1065, x1063, x966, x1030); + fiat_np521_addcarryx_u32(&x1066, &x1067, x1065, x968, x1032); + fiat_np521_addcarryx_u32(&x1068, &x1069, x1067, x970, x1034); + fiat_np521_addcarryx_u32(&x1070, &x1071, x1069, x972, x1036); + fiat_np521_addcarryx_u32(&x1072, &x1073, x1071, x974, x1038); + fiat_np521_addcarryx_u32(&x1074, &x1075, x1073, x976, x1040); + fiat_np521_addcarryx_u32(&x1076, &x1077, x1075, x978, x1042); + fiat_np521_addcarryx_u32(&x1078, &x1079, x1077, x980, x1044); + fiat_np521_addcarryx_u32(&x1080, &x1081, x1079, x982, x1046); + fiat_np521_addcarryx_u32(&x1082, &x1083, x1081, x984, x1048); + fiat_np521_addcarryx_u32(&x1084, &x1085, x1083, x986, x1050); + fiat_np521_addcarryx_u32(&x1086, &x1087, x1085, x988, x1052); + fiat_np521_addcarryx_u32(&x1088, &x1089, x1087, x990, x1054); + fiat_np521_addcarryx_u32(&x1090, &x1091, x1089, x992, x1056); + fiat_np521_addcarryx_u32(&x1092, &x1093, x1091, ((x993 + (x891 + (x857 + x793))) + (x959 + x895)), x1058); + fiat_np521_mulx_u32(&x1094, &x1095, x1060, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1096, &x1097, x1094, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1098, &x1099, x1094, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1100, &x1101, x1094, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1102, &x1103, x1094, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1104, &x1105, x1094, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1106, &x1107, x1094, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1108, &x1109, x1094, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1110, &x1111, x1094, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1112, &x1113, x1094, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1114, &x1115, x1094, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1116, &x1117, x1094, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1118, &x1119, x1094, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1120, &x1121, x1094, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1122, &x1123, x1094, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1124, &x1125, x1094, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1126, &x1127, x1094, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1128, &x1129, x1094, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x1130, &x1131, 0x0, x1129, x1126); + fiat_np521_addcarryx_u32(&x1132, &x1133, x1131, x1127, x1124); + fiat_np521_addcarryx_u32(&x1134, &x1135, x1133, x1125, x1122); + fiat_np521_addcarryx_u32(&x1136, &x1137, x1135, x1123, x1120); + fiat_np521_addcarryx_u32(&x1138, &x1139, x1137, x1121, x1118); + fiat_np521_addcarryx_u32(&x1140, &x1141, x1139, x1119, x1116); + fiat_np521_addcarryx_u32(&x1142, &x1143, x1141, x1117, x1114); + fiat_np521_addcarryx_u32(&x1144, &x1145, x1143, x1115, x1112); + fiat_np521_addcarryx_u32(&x1146, &x1147, x1145, x1113, x1110); + fiat_np521_addcarryx_u32(&x1148, &x1149, x1147, x1111, x1108); + fiat_np521_addcarryx_u32(&x1150, &x1151, x1149, x1109, x1106); + fiat_np521_addcarryx_u32(&x1152, &x1153, x1151, x1107, x1104); + fiat_np521_addcarryx_u32(&x1154, &x1155, x1153, x1105, x1102); + fiat_np521_addcarryx_u32(&x1156, &x1157, x1155, x1103, x1100); + fiat_np521_addcarryx_u32(&x1158, &x1159, x1157, x1101, x1098); + fiat_np521_addcarryx_u32(&x1160, &x1161, x1159, x1099, x1096); + fiat_np521_addcarryx_u32(&x1162, &x1163, 0x0, x1060, x1128); + fiat_np521_addcarryx_u32(&x1164, &x1165, x1163, x1062, x1130); + fiat_np521_addcarryx_u32(&x1166, &x1167, x1165, x1064, x1132); + fiat_np521_addcarryx_u32(&x1168, &x1169, x1167, x1066, x1134); + fiat_np521_addcarryx_u32(&x1170, &x1171, x1169, x1068, x1136); + fiat_np521_addcarryx_u32(&x1172, &x1173, x1171, x1070, x1138); + fiat_np521_addcarryx_u32(&x1174, &x1175, x1173, x1072, x1140); + fiat_np521_addcarryx_u32(&x1176, &x1177, x1175, x1074, x1142); + fiat_np521_addcarryx_u32(&x1178, &x1179, x1177, x1076, x1144); + fiat_np521_addcarryx_u32(&x1180, &x1181, x1179, x1078, x1146); + fiat_np521_addcarryx_u32(&x1182, &x1183, x1181, x1080, x1148); + fiat_np521_addcarryx_u32(&x1184, &x1185, x1183, x1082, x1150); + fiat_np521_addcarryx_u32(&x1186, &x1187, x1185, x1084, x1152); + fiat_np521_addcarryx_u32(&x1188, &x1189, x1187, x1086, x1154); + fiat_np521_addcarryx_u32(&x1190, &x1191, x1189, x1088, x1156); + fiat_np521_addcarryx_u32(&x1192, &x1193, x1191, x1090, x1158); + fiat_np521_addcarryx_u32(&x1194, &x1195, x1193, x1092, x1160); + fiat_np521_mulx_u32(&x1196, &x1197, x6, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x1198, &x1199, x6, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x1200, &x1201, x6, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x1202, &x1203, x6, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x1204, &x1205, x6, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x1206, &x1207, x6, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x1208, &x1209, x6, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x1210, &x1211, x6, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x1212, &x1213, x6, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x1214, &x1215, x6, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x1216, &x1217, x6, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x1218, &x1219, x6, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x1220, &x1221, x6, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x1222, &x1223, x6, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x1224, &x1225, x6, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x1226, &x1227, x6, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x1228, &x1229, x6, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x1230, &x1231, 0x0, x1229, x1226); + fiat_np521_addcarryx_u32(&x1232, &x1233, x1231, x1227, x1224); + fiat_np521_addcarryx_u32(&x1234, &x1235, x1233, x1225, x1222); + fiat_np521_addcarryx_u32(&x1236, &x1237, x1235, x1223, x1220); + fiat_np521_addcarryx_u32(&x1238, &x1239, x1237, x1221, x1218); + fiat_np521_addcarryx_u32(&x1240, &x1241, x1239, x1219, x1216); + fiat_np521_addcarryx_u32(&x1242, &x1243, x1241, x1217, x1214); + fiat_np521_addcarryx_u32(&x1244, &x1245, x1243, x1215, x1212); + fiat_np521_addcarryx_u32(&x1246, &x1247, x1245, x1213, x1210); + fiat_np521_addcarryx_u32(&x1248, &x1249, x1247, x1211, x1208); + fiat_np521_addcarryx_u32(&x1250, &x1251, x1249, x1209, x1206); + fiat_np521_addcarryx_u32(&x1252, &x1253, x1251, x1207, x1204); + fiat_np521_addcarryx_u32(&x1254, &x1255, x1253, x1205, x1202); + fiat_np521_addcarryx_u32(&x1256, &x1257, x1255, x1203, x1200); + fiat_np521_addcarryx_u32(&x1258, &x1259, x1257, x1201, x1198); + fiat_np521_addcarryx_u32(&x1260, &x1261, x1259, x1199, x1196); + fiat_np521_addcarryx_u32(&x1262, &x1263, 0x0, x1164, x1228); + fiat_np521_addcarryx_u32(&x1264, &x1265, x1263, x1166, x1230); + fiat_np521_addcarryx_u32(&x1266, &x1267, x1265, x1168, x1232); + fiat_np521_addcarryx_u32(&x1268, &x1269, x1267, x1170, x1234); + fiat_np521_addcarryx_u32(&x1270, &x1271, x1269, x1172, x1236); + fiat_np521_addcarryx_u32(&x1272, &x1273, x1271, x1174, x1238); + fiat_np521_addcarryx_u32(&x1274, &x1275, x1273, x1176, x1240); + fiat_np521_addcarryx_u32(&x1276, &x1277, x1275, x1178, x1242); + fiat_np521_addcarryx_u32(&x1278, &x1279, x1277, x1180, x1244); + fiat_np521_addcarryx_u32(&x1280, &x1281, x1279, x1182, x1246); + fiat_np521_addcarryx_u32(&x1282, &x1283, x1281, x1184, x1248); + fiat_np521_addcarryx_u32(&x1284, &x1285, x1283, x1186, x1250); + fiat_np521_addcarryx_u32(&x1286, &x1287, x1285, x1188, x1252); + fiat_np521_addcarryx_u32(&x1288, &x1289, x1287, x1190, x1254); + fiat_np521_addcarryx_u32(&x1290, &x1291, x1289, x1192, x1256); + fiat_np521_addcarryx_u32(&x1292, &x1293, x1291, x1194, x1258); + fiat_np521_addcarryx_u32(&x1294, &x1295, x1293, ((x1195 + (x1093 + (x1059 + x995))) + (x1161 + x1097)), x1260); + fiat_np521_mulx_u32(&x1296, &x1297, x1262, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1298, &x1299, x1296, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1300, &x1301, x1296, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1302, &x1303, x1296, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1304, &x1305, x1296, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1306, &x1307, x1296, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1308, &x1309, x1296, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1310, &x1311, x1296, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1312, &x1313, x1296, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1314, &x1315, x1296, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1316, &x1317, x1296, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1318, &x1319, x1296, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1320, &x1321, x1296, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1322, &x1323, x1296, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1324, &x1325, x1296, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1326, &x1327, x1296, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1328, &x1329, x1296, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1330, &x1331, x1296, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x1332, &x1333, 0x0, x1331, x1328); + fiat_np521_addcarryx_u32(&x1334, &x1335, x1333, x1329, x1326); + fiat_np521_addcarryx_u32(&x1336, &x1337, x1335, x1327, x1324); + fiat_np521_addcarryx_u32(&x1338, &x1339, x1337, x1325, x1322); + fiat_np521_addcarryx_u32(&x1340, &x1341, x1339, x1323, x1320); + fiat_np521_addcarryx_u32(&x1342, &x1343, x1341, x1321, x1318); + fiat_np521_addcarryx_u32(&x1344, &x1345, x1343, x1319, x1316); + fiat_np521_addcarryx_u32(&x1346, &x1347, x1345, x1317, x1314); + fiat_np521_addcarryx_u32(&x1348, &x1349, x1347, x1315, x1312); + fiat_np521_addcarryx_u32(&x1350, &x1351, x1349, x1313, x1310); + fiat_np521_addcarryx_u32(&x1352, &x1353, x1351, x1311, x1308); + fiat_np521_addcarryx_u32(&x1354, &x1355, x1353, x1309, x1306); + fiat_np521_addcarryx_u32(&x1356, &x1357, x1355, x1307, x1304); + fiat_np521_addcarryx_u32(&x1358, &x1359, x1357, x1305, x1302); + fiat_np521_addcarryx_u32(&x1360, &x1361, x1359, x1303, x1300); + fiat_np521_addcarryx_u32(&x1362, &x1363, x1361, x1301, x1298); + fiat_np521_addcarryx_u32(&x1364, &x1365, 0x0, x1262, x1330); + fiat_np521_addcarryx_u32(&x1366, &x1367, x1365, x1264, x1332); + fiat_np521_addcarryx_u32(&x1368, &x1369, x1367, x1266, x1334); + fiat_np521_addcarryx_u32(&x1370, &x1371, x1369, x1268, x1336); + fiat_np521_addcarryx_u32(&x1372, &x1373, x1371, x1270, x1338); + fiat_np521_addcarryx_u32(&x1374, &x1375, x1373, x1272, x1340); + fiat_np521_addcarryx_u32(&x1376, &x1377, x1375, x1274, x1342); + fiat_np521_addcarryx_u32(&x1378, &x1379, x1377, x1276, x1344); + fiat_np521_addcarryx_u32(&x1380, &x1381, x1379, x1278, x1346); + fiat_np521_addcarryx_u32(&x1382, &x1383, x1381, x1280, x1348); + fiat_np521_addcarryx_u32(&x1384, &x1385, x1383, x1282, x1350); + fiat_np521_addcarryx_u32(&x1386, &x1387, x1385, x1284, x1352); + fiat_np521_addcarryx_u32(&x1388, &x1389, x1387, x1286, x1354); + fiat_np521_addcarryx_u32(&x1390, &x1391, x1389, x1288, x1356); + fiat_np521_addcarryx_u32(&x1392, &x1393, x1391, x1290, x1358); + fiat_np521_addcarryx_u32(&x1394, &x1395, x1393, x1292, x1360); + fiat_np521_addcarryx_u32(&x1396, &x1397, x1395, x1294, x1362); + fiat_np521_mulx_u32(&x1398, &x1399, x7, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x1400, &x1401, x7, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x1402, &x1403, x7, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x1404, &x1405, x7, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x1406, &x1407, x7, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x1408, &x1409, x7, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x1410, &x1411, x7, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x1412, &x1413, x7, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x1414, &x1415, x7, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x1416, &x1417, x7, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x1418, &x1419, x7, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x1420, &x1421, x7, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x1422, &x1423, x7, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x1424, &x1425, x7, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x1426, &x1427, x7, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x1428, &x1429, x7, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x1430, &x1431, x7, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x1432, &x1433, 0x0, x1431, x1428); + fiat_np521_addcarryx_u32(&x1434, &x1435, x1433, x1429, x1426); + fiat_np521_addcarryx_u32(&x1436, &x1437, x1435, x1427, x1424); + fiat_np521_addcarryx_u32(&x1438, &x1439, x1437, x1425, x1422); + fiat_np521_addcarryx_u32(&x1440, &x1441, x1439, x1423, x1420); + fiat_np521_addcarryx_u32(&x1442, &x1443, x1441, x1421, x1418); + fiat_np521_addcarryx_u32(&x1444, &x1445, x1443, x1419, x1416); + fiat_np521_addcarryx_u32(&x1446, &x1447, x1445, x1417, x1414); + fiat_np521_addcarryx_u32(&x1448, &x1449, x1447, x1415, x1412); + fiat_np521_addcarryx_u32(&x1450, &x1451, x1449, x1413, x1410); + fiat_np521_addcarryx_u32(&x1452, &x1453, x1451, x1411, x1408); + fiat_np521_addcarryx_u32(&x1454, &x1455, x1453, x1409, x1406); + fiat_np521_addcarryx_u32(&x1456, &x1457, x1455, x1407, x1404); + fiat_np521_addcarryx_u32(&x1458, &x1459, x1457, x1405, x1402); + fiat_np521_addcarryx_u32(&x1460, &x1461, x1459, x1403, x1400); + fiat_np521_addcarryx_u32(&x1462, &x1463, x1461, x1401, x1398); + fiat_np521_addcarryx_u32(&x1464, &x1465, 0x0, x1366, x1430); + fiat_np521_addcarryx_u32(&x1466, &x1467, x1465, x1368, x1432); + fiat_np521_addcarryx_u32(&x1468, &x1469, x1467, x1370, x1434); + fiat_np521_addcarryx_u32(&x1470, &x1471, x1469, x1372, x1436); + fiat_np521_addcarryx_u32(&x1472, &x1473, x1471, x1374, x1438); + fiat_np521_addcarryx_u32(&x1474, &x1475, x1473, x1376, x1440); + fiat_np521_addcarryx_u32(&x1476, &x1477, x1475, x1378, x1442); + fiat_np521_addcarryx_u32(&x1478, &x1479, x1477, x1380, x1444); + fiat_np521_addcarryx_u32(&x1480, &x1481, x1479, x1382, x1446); + fiat_np521_addcarryx_u32(&x1482, &x1483, x1481, x1384, x1448); + fiat_np521_addcarryx_u32(&x1484, &x1485, x1483, x1386, x1450); + fiat_np521_addcarryx_u32(&x1486, &x1487, x1485, x1388, x1452); + fiat_np521_addcarryx_u32(&x1488, &x1489, x1487, x1390, x1454); + fiat_np521_addcarryx_u32(&x1490, &x1491, x1489, x1392, x1456); + fiat_np521_addcarryx_u32(&x1492, &x1493, x1491, x1394, x1458); + fiat_np521_addcarryx_u32(&x1494, &x1495, x1493, x1396, x1460); + fiat_np521_addcarryx_u32(&x1496, &x1497, x1495, ((x1397 + (x1295 + (x1261 + x1197))) + (x1363 + x1299)), x1462); + fiat_np521_mulx_u32(&x1498, &x1499, x1464, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1500, &x1501, x1498, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1502, &x1503, x1498, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1504, &x1505, x1498, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1506, &x1507, x1498, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1508, &x1509, x1498, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1510, &x1511, x1498, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1512, &x1513, x1498, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1514, &x1515, x1498, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1516, &x1517, x1498, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1518, &x1519, x1498, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1520, &x1521, x1498, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1522, &x1523, x1498, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1524, &x1525, x1498, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1526, &x1527, x1498, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1528, &x1529, x1498, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1530, &x1531, x1498, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1532, &x1533, x1498, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x1534, &x1535, 0x0, x1533, x1530); + fiat_np521_addcarryx_u32(&x1536, &x1537, x1535, x1531, x1528); + fiat_np521_addcarryx_u32(&x1538, &x1539, x1537, x1529, x1526); + fiat_np521_addcarryx_u32(&x1540, &x1541, x1539, x1527, x1524); + fiat_np521_addcarryx_u32(&x1542, &x1543, x1541, x1525, x1522); + fiat_np521_addcarryx_u32(&x1544, &x1545, x1543, x1523, x1520); + fiat_np521_addcarryx_u32(&x1546, &x1547, x1545, x1521, x1518); + fiat_np521_addcarryx_u32(&x1548, &x1549, x1547, x1519, x1516); + fiat_np521_addcarryx_u32(&x1550, &x1551, x1549, x1517, x1514); + fiat_np521_addcarryx_u32(&x1552, &x1553, x1551, x1515, x1512); + fiat_np521_addcarryx_u32(&x1554, &x1555, x1553, x1513, x1510); + fiat_np521_addcarryx_u32(&x1556, &x1557, x1555, x1511, x1508); + fiat_np521_addcarryx_u32(&x1558, &x1559, x1557, x1509, x1506); + fiat_np521_addcarryx_u32(&x1560, &x1561, x1559, x1507, x1504); + fiat_np521_addcarryx_u32(&x1562, &x1563, x1561, x1505, x1502); + fiat_np521_addcarryx_u32(&x1564, &x1565, x1563, x1503, x1500); + fiat_np521_addcarryx_u32(&x1566, &x1567, 0x0, x1464, x1532); + fiat_np521_addcarryx_u32(&x1568, &x1569, x1567, x1466, x1534); + fiat_np521_addcarryx_u32(&x1570, &x1571, x1569, x1468, x1536); + fiat_np521_addcarryx_u32(&x1572, &x1573, x1571, x1470, x1538); + fiat_np521_addcarryx_u32(&x1574, &x1575, x1573, x1472, x1540); + fiat_np521_addcarryx_u32(&x1576, &x1577, x1575, x1474, x1542); + fiat_np521_addcarryx_u32(&x1578, &x1579, x1577, x1476, x1544); + fiat_np521_addcarryx_u32(&x1580, &x1581, x1579, x1478, x1546); + fiat_np521_addcarryx_u32(&x1582, &x1583, x1581, x1480, x1548); + fiat_np521_addcarryx_u32(&x1584, &x1585, x1583, x1482, x1550); + fiat_np521_addcarryx_u32(&x1586, &x1587, x1585, x1484, x1552); + fiat_np521_addcarryx_u32(&x1588, &x1589, x1587, x1486, x1554); + fiat_np521_addcarryx_u32(&x1590, &x1591, x1589, x1488, x1556); + fiat_np521_addcarryx_u32(&x1592, &x1593, x1591, x1490, x1558); + fiat_np521_addcarryx_u32(&x1594, &x1595, x1593, x1492, x1560); + fiat_np521_addcarryx_u32(&x1596, &x1597, x1595, x1494, x1562); + fiat_np521_addcarryx_u32(&x1598, &x1599, x1597, x1496, x1564); + fiat_np521_mulx_u32(&x1600, &x1601, x8, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x1602, &x1603, x8, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x1604, &x1605, x8, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x1606, &x1607, x8, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x1608, &x1609, x8, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x1610, &x1611, x8, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x1612, &x1613, x8, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x1614, &x1615, x8, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x1616, &x1617, x8, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x1618, &x1619, x8, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x1620, &x1621, x8, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x1622, &x1623, x8, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x1624, &x1625, x8, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x1626, &x1627, x8, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x1628, &x1629, x8, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x1630, &x1631, x8, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x1632, &x1633, x8, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x1634, &x1635, 0x0, x1633, x1630); + fiat_np521_addcarryx_u32(&x1636, &x1637, x1635, x1631, x1628); + fiat_np521_addcarryx_u32(&x1638, &x1639, x1637, x1629, x1626); + fiat_np521_addcarryx_u32(&x1640, &x1641, x1639, x1627, x1624); + fiat_np521_addcarryx_u32(&x1642, &x1643, x1641, x1625, x1622); + fiat_np521_addcarryx_u32(&x1644, &x1645, x1643, x1623, x1620); + fiat_np521_addcarryx_u32(&x1646, &x1647, x1645, x1621, x1618); + fiat_np521_addcarryx_u32(&x1648, &x1649, x1647, x1619, x1616); + fiat_np521_addcarryx_u32(&x1650, &x1651, x1649, x1617, x1614); + fiat_np521_addcarryx_u32(&x1652, &x1653, x1651, x1615, x1612); + fiat_np521_addcarryx_u32(&x1654, &x1655, x1653, x1613, x1610); + fiat_np521_addcarryx_u32(&x1656, &x1657, x1655, x1611, x1608); + fiat_np521_addcarryx_u32(&x1658, &x1659, x1657, x1609, x1606); + fiat_np521_addcarryx_u32(&x1660, &x1661, x1659, x1607, x1604); + fiat_np521_addcarryx_u32(&x1662, &x1663, x1661, x1605, x1602); + fiat_np521_addcarryx_u32(&x1664, &x1665, x1663, x1603, x1600); + fiat_np521_addcarryx_u32(&x1666, &x1667, 0x0, x1568, x1632); + fiat_np521_addcarryx_u32(&x1668, &x1669, x1667, x1570, x1634); + fiat_np521_addcarryx_u32(&x1670, &x1671, x1669, x1572, x1636); + fiat_np521_addcarryx_u32(&x1672, &x1673, x1671, x1574, x1638); + fiat_np521_addcarryx_u32(&x1674, &x1675, x1673, x1576, x1640); + fiat_np521_addcarryx_u32(&x1676, &x1677, x1675, x1578, x1642); + fiat_np521_addcarryx_u32(&x1678, &x1679, x1677, x1580, x1644); + fiat_np521_addcarryx_u32(&x1680, &x1681, x1679, x1582, x1646); + fiat_np521_addcarryx_u32(&x1682, &x1683, x1681, x1584, x1648); + fiat_np521_addcarryx_u32(&x1684, &x1685, x1683, x1586, x1650); + fiat_np521_addcarryx_u32(&x1686, &x1687, x1685, x1588, x1652); + fiat_np521_addcarryx_u32(&x1688, &x1689, x1687, x1590, x1654); + fiat_np521_addcarryx_u32(&x1690, &x1691, x1689, x1592, x1656); + fiat_np521_addcarryx_u32(&x1692, &x1693, x1691, x1594, x1658); + fiat_np521_addcarryx_u32(&x1694, &x1695, x1693, x1596, x1660); + fiat_np521_addcarryx_u32(&x1696, &x1697, x1695, x1598, x1662); + fiat_np521_addcarryx_u32(&x1698, &x1699, x1697, ((x1599 + (x1497 + (x1463 + x1399))) + (x1565 + x1501)), x1664); + fiat_np521_mulx_u32(&x1700, &x1701, x1666, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1702, &x1703, x1700, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1704, &x1705, x1700, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1706, &x1707, x1700, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1708, &x1709, x1700, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1710, &x1711, x1700, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1712, &x1713, x1700, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1714, &x1715, x1700, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1716, &x1717, x1700, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1718, &x1719, x1700, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1720, &x1721, x1700, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1722, &x1723, x1700, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1724, &x1725, x1700, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1726, &x1727, x1700, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1728, &x1729, x1700, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1730, &x1731, x1700, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1732, &x1733, x1700, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1734, &x1735, x1700, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x1736, &x1737, 0x0, x1735, x1732); + fiat_np521_addcarryx_u32(&x1738, &x1739, x1737, x1733, x1730); + fiat_np521_addcarryx_u32(&x1740, &x1741, x1739, x1731, x1728); + fiat_np521_addcarryx_u32(&x1742, &x1743, x1741, x1729, x1726); + fiat_np521_addcarryx_u32(&x1744, &x1745, x1743, x1727, x1724); + fiat_np521_addcarryx_u32(&x1746, &x1747, x1745, x1725, x1722); + fiat_np521_addcarryx_u32(&x1748, &x1749, x1747, x1723, x1720); + fiat_np521_addcarryx_u32(&x1750, &x1751, x1749, x1721, x1718); + fiat_np521_addcarryx_u32(&x1752, &x1753, x1751, x1719, x1716); + fiat_np521_addcarryx_u32(&x1754, &x1755, x1753, x1717, x1714); + fiat_np521_addcarryx_u32(&x1756, &x1757, x1755, x1715, x1712); + fiat_np521_addcarryx_u32(&x1758, &x1759, x1757, x1713, x1710); + fiat_np521_addcarryx_u32(&x1760, &x1761, x1759, x1711, x1708); + fiat_np521_addcarryx_u32(&x1762, &x1763, x1761, x1709, x1706); + fiat_np521_addcarryx_u32(&x1764, &x1765, x1763, x1707, x1704); + fiat_np521_addcarryx_u32(&x1766, &x1767, x1765, x1705, x1702); + fiat_np521_addcarryx_u32(&x1768, &x1769, 0x0, x1666, x1734); + fiat_np521_addcarryx_u32(&x1770, &x1771, x1769, x1668, x1736); + fiat_np521_addcarryx_u32(&x1772, &x1773, x1771, x1670, x1738); + fiat_np521_addcarryx_u32(&x1774, &x1775, x1773, x1672, x1740); + fiat_np521_addcarryx_u32(&x1776, &x1777, x1775, x1674, x1742); + fiat_np521_addcarryx_u32(&x1778, &x1779, x1777, x1676, x1744); + fiat_np521_addcarryx_u32(&x1780, &x1781, x1779, x1678, x1746); + fiat_np521_addcarryx_u32(&x1782, &x1783, x1781, x1680, x1748); + fiat_np521_addcarryx_u32(&x1784, &x1785, x1783, x1682, x1750); + fiat_np521_addcarryx_u32(&x1786, &x1787, x1785, x1684, x1752); + fiat_np521_addcarryx_u32(&x1788, &x1789, x1787, x1686, x1754); + fiat_np521_addcarryx_u32(&x1790, &x1791, x1789, x1688, x1756); + fiat_np521_addcarryx_u32(&x1792, &x1793, x1791, x1690, x1758); + fiat_np521_addcarryx_u32(&x1794, &x1795, x1793, x1692, x1760); + fiat_np521_addcarryx_u32(&x1796, &x1797, x1795, x1694, x1762); + fiat_np521_addcarryx_u32(&x1798, &x1799, x1797, x1696, x1764); + fiat_np521_addcarryx_u32(&x1800, &x1801, x1799, x1698, x1766); + fiat_np521_mulx_u32(&x1802, &x1803, x9, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x1804, &x1805, x9, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x1806, &x1807, x9, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x1808, &x1809, x9, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x1810, &x1811, x9, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x1812, &x1813, x9, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x1814, &x1815, x9, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x1816, &x1817, x9, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x1818, &x1819, x9, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x1820, &x1821, x9, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x1822, &x1823, x9, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x1824, &x1825, x9, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x1826, &x1827, x9, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x1828, &x1829, x9, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x1830, &x1831, x9, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x1832, &x1833, x9, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x1834, &x1835, x9, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x1836, &x1837, 0x0, x1835, x1832); + fiat_np521_addcarryx_u32(&x1838, &x1839, x1837, x1833, x1830); + fiat_np521_addcarryx_u32(&x1840, &x1841, x1839, x1831, x1828); + fiat_np521_addcarryx_u32(&x1842, &x1843, x1841, x1829, x1826); + fiat_np521_addcarryx_u32(&x1844, &x1845, x1843, x1827, x1824); + fiat_np521_addcarryx_u32(&x1846, &x1847, x1845, x1825, x1822); + fiat_np521_addcarryx_u32(&x1848, &x1849, x1847, x1823, x1820); + fiat_np521_addcarryx_u32(&x1850, &x1851, x1849, x1821, x1818); + fiat_np521_addcarryx_u32(&x1852, &x1853, x1851, x1819, x1816); + fiat_np521_addcarryx_u32(&x1854, &x1855, x1853, x1817, x1814); + fiat_np521_addcarryx_u32(&x1856, &x1857, x1855, x1815, x1812); + fiat_np521_addcarryx_u32(&x1858, &x1859, x1857, x1813, x1810); + fiat_np521_addcarryx_u32(&x1860, &x1861, x1859, x1811, x1808); + fiat_np521_addcarryx_u32(&x1862, &x1863, x1861, x1809, x1806); + fiat_np521_addcarryx_u32(&x1864, &x1865, x1863, x1807, x1804); + fiat_np521_addcarryx_u32(&x1866, &x1867, x1865, x1805, x1802); + fiat_np521_addcarryx_u32(&x1868, &x1869, 0x0, x1770, x1834); + fiat_np521_addcarryx_u32(&x1870, &x1871, x1869, x1772, x1836); + fiat_np521_addcarryx_u32(&x1872, &x1873, x1871, x1774, x1838); + fiat_np521_addcarryx_u32(&x1874, &x1875, x1873, x1776, x1840); + fiat_np521_addcarryx_u32(&x1876, &x1877, x1875, x1778, x1842); + fiat_np521_addcarryx_u32(&x1878, &x1879, x1877, x1780, x1844); + fiat_np521_addcarryx_u32(&x1880, &x1881, x1879, x1782, x1846); + fiat_np521_addcarryx_u32(&x1882, &x1883, x1881, x1784, x1848); + fiat_np521_addcarryx_u32(&x1884, &x1885, x1883, x1786, x1850); + fiat_np521_addcarryx_u32(&x1886, &x1887, x1885, x1788, x1852); + fiat_np521_addcarryx_u32(&x1888, &x1889, x1887, x1790, x1854); + fiat_np521_addcarryx_u32(&x1890, &x1891, x1889, x1792, x1856); + fiat_np521_addcarryx_u32(&x1892, &x1893, x1891, x1794, x1858); + fiat_np521_addcarryx_u32(&x1894, &x1895, x1893, x1796, x1860); + fiat_np521_addcarryx_u32(&x1896, &x1897, x1895, x1798, x1862); + fiat_np521_addcarryx_u32(&x1898, &x1899, x1897, x1800, x1864); + fiat_np521_addcarryx_u32(&x1900, &x1901, x1899, ((x1801 + (x1699 + (x1665 + x1601))) + (x1767 + x1703)), x1866); + fiat_np521_mulx_u32(&x1902, &x1903, x1868, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x1904, &x1905, x1902, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x1906, &x1907, x1902, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1908, &x1909, x1902, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1910, &x1911, x1902, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1912, &x1913, x1902, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1914, &x1915, x1902, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1916, &x1917, x1902, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1918, &x1919, x1902, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x1920, &x1921, x1902, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x1922, &x1923, x1902, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x1924, &x1925, x1902, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x1926, &x1927, x1902, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x1928, &x1929, x1902, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x1930, &x1931, x1902, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x1932, &x1933, x1902, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x1934, &x1935, x1902, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x1936, &x1937, x1902, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x1938, &x1939, 0x0, x1937, x1934); + fiat_np521_addcarryx_u32(&x1940, &x1941, x1939, x1935, x1932); + fiat_np521_addcarryx_u32(&x1942, &x1943, x1941, x1933, x1930); + fiat_np521_addcarryx_u32(&x1944, &x1945, x1943, x1931, x1928); + fiat_np521_addcarryx_u32(&x1946, &x1947, x1945, x1929, x1926); + fiat_np521_addcarryx_u32(&x1948, &x1949, x1947, x1927, x1924); + fiat_np521_addcarryx_u32(&x1950, &x1951, x1949, x1925, x1922); + fiat_np521_addcarryx_u32(&x1952, &x1953, x1951, x1923, x1920); + fiat_np521_addcarryx_u32(&x1954, &x1955, x1953, x1921, x1918); + fiat_np521_addcarryx_u32(&x1956, &x1957, x1955, x1919, x1916); + fiat_np521_addcarryx_u32(&x1958, &x1959, x1957, x1917, x1914); + fiat_np521_addcarryx_u32(&x1960, &x1961, x1959, x1915, x1912); + fiat_np521_addcarryx_u32(&x1962, &x1963, x1961, x1913, x1910); + fiat_np521_addcarryx_u32(&x1964, &x1965, x1963, x1911, x1908); + fiat_np521_addcarryx_u32(&x1966, &x1967, x1965, x1909, x1906); + fiat_np521_addcarryx_u32(&x1968, &x1969, x1967, x1907, x1904); + fiat_np521_addcarryx_u32(&x1970, &x1971, 0x0, x1868, x1936); + fiat_np521_addcarryx_u32(&x1972, &x1973, x1971, x1870, x1938); + fiat_np521_addcarryx_u32(&x1974, &x1975, x1973, x1872, x1940); + fiat_np521_addcarryx_u32(&x1976, &x1977, x1975, x1874, x1942); + fiat_np521_addcarryx_u32(&x1978, &x1979, x1977, x1876, x1944); + fiat_np521_addcarryx_u32(&x1980, &x1981, x1979, x1878, x1946); + fiat_np521_addcarryx_u32(&x1982, &x1983, x1981, x1880, x1948); + fiat_np521_addcarryx_u32(&x1984, &x1985, x1983, x1882, x1950); + fiat_np521_addcarryx_u32(&x1986, &x1987, x1985, x1884, x1952); + fiat_np521_addcarryx_u32(&x1988, &x1989, x1987, x1886, x1954); + fiat_np521_addcarryx_u32(&x1990, &x1991, x1989, x1888, x1956); + fiat_np521_addcarryx_u32(&x1992, &x1993, x1991, x1890, x1958); + fiat_np521_addcarryx_u32(&x1994, &x1995, x1993, x1892, x1960); + fiat_np521_addcarryx_u32(&x1996, &x1997, x1995, x1894, x1962); + fiat_np521_addcarryx_u32(&x1998, &x1999, x1997, x1896, x1964); + fiat_np521_addcarryx_u32(&x2000, &x2001, x1999, x1898, x1966); + fiat_np521_addcarryx_u32(&x2002, &x2003, x2001, x1900, x1968); + fiat_np521_mulx_u32(&x2004, &x2005, x10, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x2006, &x2007, x10, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x2008, &x2009, x10, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x2010, &x2011, x10, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x2012, &x2013, x10, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x2014, &x2015, x10, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x2016, &x2017, x10, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x2018, &x2019, x10, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x2020, &x2021, x10, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x2022, &x2023, x10, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x2024, &x2025, x10, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x2026, &x2027, x10, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x2028, &x2029, x10, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x2030, &x2031, x10, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x2032, &x2033, x10, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x2034, &x2035, x10, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x2036, &x2037, x10, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x2038, &x2039, 0x0, x2037, x2034); + fiat_np521_addcarryx_u32(&x2040, &x2041, x2039, x2035, x2032); + fiat_np521_addcarryx_u32(&x2042, &x2043, x2041, x2033, x2030); + fiat_np521_addcarryx_u32(&x2044, &x2045, x2043, x2031, x2028); + fiat_np521_addcarryx_u32(&x2046, &x2047, x2045, x2029, x2026); + fiat_np521_addcarryx_u32(&x2048, &x2049, x2047, x2027, x2024); + fiat_np521_addcarryx_u32(&x2050, &x2051, x2049, x2025, x2022); + fiat_np521_addcarryx_u32(&x2052, &x2053, x2051, x2023, x2020); + fiat_np521_addcarryx_u32(&x2054, &x2055, x2053, x2021, x2018); + fiat_np521_addcarryx_u32(&x2056, &x2057, x2055, x2019, x2016); + fiat_np521_addcarryx_u32(&x2058, &x2059, x2057, x2017, x2014); + fiat_np521_addcarryx_u32(&x2060, &x2061, x2059, x2015, x2012); + fiat_np521_addcarryx_u32(&x2062, &x2063, x2061, x2013, x2010); + fiat_np521_addcarryx_u32(&x2064, &x2065, x2063, x2011, x2008); + fiat_np521_addcarryx_u32(&x2066, &x2067, x2065, x2009, x2006); + fiat_np521_addcarryx_u32(&x2068, &x2069, x2067, x2007, x2004); + fiat_np521_addcarryx_u32(&x2070, &x2071, 0x0, x1972, x2036); + fiat_np521_addcarryx_u32(&x2072, &x2073, x2071, x1974, x2038); + fiat_np521_addcarryx_u32(&x2074, &x2075, x2073, x1976, x2040); + fiat_np521_addcarryx_u32(&x2076, &x2077, x2075, x1978, x2042); + fiat_np521_addcarryx_u32(&x2078, &x2079, x2077, x1980, x2044); + fiat_np521_addcarryx_u32(&x2080, &x2081, x2079, x1982, x2046); + fiat_np521_addcarryx_u32(&x2082, &x2083, x2081, x1984, x2048); + fiat_np521_addcarryx_u32(&x2084, &x2085, x2083, x1986, x2050); + fiat_np521_addcarryx_u32(&x2086, &x2087, x2085, x1988, x2052); + fiat_np521_addcarryx_u32(&x2088, &x2089, x2087, x1990, x2054); + fiat_np521_addcarryx_u32(&x2090, &x2091, x2089, x1992, x2056); + fiat_np521_addcarryx_u32(&x2092, &x2093, x2091, x1994, x2058); + fiat_np521_addcarryx_u32(&x2094, &x2095, x2093, x1996, x2060); + fiat_np521_addcarryx_u32(&x2096, &x2097, x2095, x1998, x2062); + fiat_np521_addcarryx_u32(&x2098, &x2099, x2097, x2000, x2064); + fiat_np521_addcarryx_u32(&x2100, &x2101, x2099, x2002, x2066); + fiat_np521_addcarryx_u32(&x2102, &x2103, x2101, ((x2003 + (x1901 + (x1867 + x1803))) + (x1969 + x1905)), x2068); + fiat_np521_mulx_u32(&x2104, &x2105, x2070, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x2106, &x2107, x2104, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x2108, &x2109, x2104, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2110, &x2111, x2104, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2112, &x2113, x2104, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2114, &x2115, x2104, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2116, &x2117, x2104, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2118, &x2119, x2104, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2120, &x2121, x2104, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2122, &x2123, x2104, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x2124, &x2125, x2104, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x2126, &x2127, x2104, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x2128, &x2129, x2104, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x2130, &x2131, x2104, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x2132, &x2133, x2104, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x2134, &x2135, x2104, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x2136, &x2137, x2104, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x2138, &x2139, x2104, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x2140, &x2141, 0x0, x2139, x2136); + fiat_np521_addcarryx_u32(&x2142, &x2143, x2141, x2137, x2134); + fiat_np521_addcarryx_u32(&x2144, &x2145, x2143, x2135, x2132); + fiat_np521_addcarryx_u32(&x2146, &x2147, x2145, x2133, x2130); + fiat_np521_addcarryx_u32(&x2148, &x2149, x2147, x2131, x2128); + fiat_np521_addcarryx_u32(&x2150, &x2151, x2149, x2129, x2126); + fiat_np521_addcarryx_u32(&x2152, &x2153, x2151, x2127, x2124); + fiat_np521_addcarryx_u32(&x2154, &x2155, x2153, x2125, x2122); + fiat_np521_addcarryx_u32(&x2156, &x2157, x2155, x2123, x2120); + fiat_np521_addcarryx_u32(&x2158, &x2159, x2157, x2121, x2118); + fiat_np521_addcarryx_u32(&x2160, &x2161, x2159, x2119, x2116); + fiat_np521_addcarryx_u32(&x2162, &x2163, x2161, x2117, x2114); + fiat_np521_addcarryx_u32(&x2164, &x2165, x2163, x2115, x2112); + fiat_np521_addcarryx_u32(&x2166, &x2167, x2165, x2113, x2110); + fiat_np521_addcarryx_u32(&x2168, &x2169, x2167, x2111, x2108); + fiat_np521_addcarryx_u32(&x2170, &x2171, x2169, x2109, x2106); + fiat_np521_addcarryx_u32(&x2172, &x2173, 0x0, x2070, x2138); + fiat_np521_addcarryx_u32(&x2174, &x2175, x2173, x2072, x2140); + fiat_np521_addcarryx_u32(&x2176, &x2177, x2175, x2074, x2142); + fiat_np521_addcarryx_u32(&x2178, &x2179, x2177, x2076, x2144); + fiat_np521_addcarryx_u32(&x2180, &x2181, x2179, x2078, x2146); + fiat_np521_addcarryx_u32(&x2182, &x2183, x2181, x2080, x2148); + fiat_np521_addcarryx_u32(&x2184, &x2185, x2183, x2082, x2150); + fiat_np521_addcarryx_u32(&x2186, &x2187, x2185, x2084, x2152); + fiat_np521_addcarryx_u32(&x2188, &x2189, x2187, x2086, x2154); + fiat_np521_addcarryx_u32(&x2190, &x2191, x2189, x2088, x2156); + fiat_np521_addcarryx_u32(&x2192, &x2193, x2191, x2090, x2158); + fiat_np521_addcarryx_u32(&x2194, &x2195, x2193, x2092, x2160); + fiat_np521_addcarryx_u32(&x2196, &x2197, x2195, x2094, x2162); + fiat_np521_addcarryx_u32(&x2198, &x2199, x2197, x2096, x2164); + fiat_np521_addcarryx_u32(&x2200, &x2201, x2199, x2098, x2166); + fiat_np521_addcarryx_u32(&x2202, &x2203, x2201, x2100, x2168); + fiat_np521_addcarryx_u32(&x2204, &x2205, x2203, x2102, x2170); + fiat_np521_mulx_u32(&x2206, &x2207, x11, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x2208, &x2209, x11, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x2210, &x2211, x11, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x2212, &x2213, x11, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x2214, &x2215, x11, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x2216, &x2217, x11, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x2218, &x2219, x11, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x2220, &x2221, x11, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x2222, &x2223, x11, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x2224, &x2225, x11, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x2226, &x2227, x11, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x2228, &x2229, x11, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x2230, &x2231, x11, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x2232, &x2233, x11, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x2234, &x2235, x11, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x2236, &x2237, x11, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x2238, &x2239, x11, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x2240, &x2241, 0x0, x2239, x2236); + fiat_np521_addcarryx_u32(&x2242, &x2243, x2241, x2237, x2234); + fiat_np521_addcarryx_u32(&x2244, &x2245, x2243, x2235, x2232); + fiat_np521_addcarryx_u32(&x2246, &x2247, x2245, x2233, x2230); + fiat_np521_addcarryx_u32(&x2248, &x2249, x2247, x2231, x2228); + fiat_np521_addcarryx_u32(&x2250, &x2251, x2249, x2229, x2226); + fiat_np521_addcarryx_u32(&x2252, &x2253, x2251, x2227, x2224); + fiat_np521_addcarryx_u32(&x2254, &x2255, x2253, x2225, x2222); + fiat_np521_addcarryx_u32(&x2256, &x2257, x2255, x2223, x2220); + fiat_np521_addcarryx_u32(&x2258, &x2259, x2257, x2221, x2218); + fiat_np521_addcarryx_u32(&x2260, &x2261, x2259, x2219, x2216); + fiat_np521_addcarryx_u32(&x2262, &x2263, x2261, x2217, x2214); + fiat_np521_addcarryx_u32(&x2264, &x2265, x2263, x2215, x2212); + fiat_np521_addcarryx_u32(&x2266, &x2267, x2265, x2213, x2210); + fiat_np521_addcarryx_u32(&x2268, &x2269, x2267, x2211, x2208); + fiat_np521_addcarryx_u32(&x2270, &x2271, x2269, x2209, x2206); + fiat_np521_addcarryx_u32(&x2272, &x2273, 0x0, x2174, x2238); + fiat_np521_addcarryx_u32(&x2274, &x2275, x2273, x2176, x2240); + fiat_np521_addcarryx_u32(&x2276, &x2277, x2275, x2178, x2242); + fiat_np521_addcarryx_u32(&x2278, &x2279, x2277, x2180, x2244); + fiat_np521_addcarryx_u32(&x2280, &x2281, x2279, x2182, x2246); + fiat_np521_addcarryx_u32(&x2282, &x2283, x2281, x2184, x2248); + fiat_np521_addcarryx_u32(&x2284, &x2285, x2283, x2186, x2250); + fiat_np521_addcarryx_u32(&x2286, &x2287, x2285, x2188, x2252); + fiat_np521_addcarryx_u32(&x2288, &x2289, x2287, x2190, x2254); + fiat_np521_addcarryx_u32(&x2290, &x2291, x2289, x2192, x2256); + fiat_np521_addcarryx_u32(&x2292, &x2293, x2291, x2194, x2258); + fiat_np521_addcarryx_u32(&x2294, &x2295, x2293, x2196, x2260); + fiat_np521_addcarryx_u32(&x2296, &x2297, x2295, x2198, x2262); + fiat_np521_addcarryx_u32(&x2298, &x2299, x2297, x2200, x2264); + fiat_np521_addcarryx_u32(&x2300, &x2301, x2299, x2202, x2266); + fiat_np521_addcarryx_u32(&x2302, &x2303, x2301, x2204, x2268); + fiat_np521_addcarryx_u32(&x2304, &x2305, x2303, ((x2205 + (x2103 + (x2069 + x2005))) + (x2171 + x2107)), x2270); + fiat_np521_mulx_u32(&x2306, &x2307, x2272, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x2308, &x2309, x2306, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x2310, &x2311, x2306, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2312, &x2313, x2306, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2314, &x2315, x2306, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2316, &x2317, x2306, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2318, &x2319, x2306, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2320, &x2321, x2306, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2322, &x2323, x2306, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2324, &x2325, x2306, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x2326, &x2327, x2306, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x2328, &x2329, x2306, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x2330, &x2331, x2306, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x2332, &x2333, x2306, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x2334, &x2335, x2306, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x2336, &x2337, x2306, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x2338, &x2339, x2306, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x2340, &x2341, x2306, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x2342, &x2343, 0x0, x2341, x2338); + fiat_np521_addcarryx_u32(&x2344, &x2345, x2343, x2339, x2336); + fiat_np521_addcarryx_u32(&x2346, &x2347, x2345, x2337, x2334); + fiat_np521_addcarryx_u32(&x2348, &x2349, x2347, x2335, x2332); + fiat_np521_addcarryx_u32(&x2350, &x2351, x2349, x2333, x2330); + fiat_np521_addcarryx_u32(&x2352, &x2353, x2351, x2331, x2328); + fiat_np521_addcarryx_u32(&x2354, &x2355, x2353, x2329, x2326); + fiat_np521_addcarryx_u32(&x2356, &x2357, x2355, x2327, x2324); + fiat_np521_addcarryx_u32(&x2358, &x2359, x2357, x2325, x2322); + fiat_np521_addcarryx_u32(&x2360, &x2361, x2359, x2323, x2320); + fiat_np521_addcarryx_u32(&x2362, &x2363, x2361, x2321, x2318); + fiat_np521_addcarryx_u32(&x2364, &x2365, x2363, x2319, x2316); + fiat_np521_addcarryx_u32(&x2366, &x2367, x2365, x2317, x2314); + fiat_np521_addcarryx_u32(&x2368, &x2369, x2367, x2315, x2312); + fiat_np521_addcarryx_u32(&x2370, &x2371, x2369, x2313, x2310); + fiat_np521_addcarryx_u32(&x2372, &x2373, x2371, x2311, x2308); + fiat_np521_addcarryx_u32(&x2374, &x2375, 0x0, x2272, x2340); + fiat_np521_addcarryx_u32(&x2376, &x2377, x2375, x2274, x2342); + fiat_np521_addcarryx_u32(&x2378, &x2379, x2377, x2276, x2344); + fiat_np521_addcarryx_u32(&x2380, &x2381, x2379, x2278, x2346); + fiat_np521_addcarryx_u32(&x2382, &x2383, x2381, x2280, x2348); + fiat_np521_addcarryx_u32(&x2384, &x2385, x2383, x2282, x2350); + fiat_np521_addcarryx_u32(&x2386, &x2387, x2385, x2284, x2352); + fiat_np521_addcarryx_u32(&x2388, &x2389, x2387, x2286, x2354); + fiat_np521_addcarryx_u32(&x2390, &x2391, x2389, x2288, x2356); + fiat_np521_addcarryx_u32(&x2392, &x2393, x2391, x2290, x2358); + fiat_np521_addcarryx_u32(&x2394, &x2395, x2393, x2292, x2360); + fiat_np521_addcarryx_u32(&x2396, &x2397, x2395, x2294, x2362); + fiat_np521_addcarryx_u32(&x2398, &x2399, x2397, x2296, x2364); + fiat_np521_addcarryx_u32(&x2400, &x2401, x2399, x2298, x2366); + fiat_np521_addcarryx_u32(&x2402, &x2403, x2401, x2300, x2368); + fiat_np521_addcarryx_u32(&x2404, &x2405, x2403, x2302, x2370); + fiat_np521_addcarryx_u32(&x2406, &x2407, x2405, x2304, x2372); + fiat_np521_mulx_u32(&x2408, &x2409, x12, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x2410, &x2411, x12, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x2412, &x2413, x12, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x2414, &x2415, x12, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x2416, &x2417, x12, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x2418, &x2419, x12, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x2420, &x2421, x12, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x2422, &x2423, x12, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x2424, &x2425, x12, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x2426, &x2427, x12, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x2428, &x2429, x12, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x2430, &x2431, x12, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x2432, &x2433, x12, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x2434, &x2435, x12, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x2436, &x2437, x12, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x2438, &x2439, x12, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x2440, &x2441, x12, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x2442, &x2443, 0x0, x2441, x2438); + fiat_np521_addcarryx_u32(&x2444, &x2445, x2443, x2439, x2436); + fiat_np521_addcarryx_u32(&x2446, &x2447, x2445, x2437, x2434); + fiat_np521_addcarryx_u32(&x2448, &x2449, x2447, x2435, x2432); + fiat_np521_addcarryx_u32(&x2450, &x2451, x2449, x2433, x2430); + fiat_np521_addcarryx_u32(&x2452, &x2453, x2451, x2431, x2428); + fiat_np521_addcarryx_u32(&x2454, &x2455, x2453, x2429, x2426); + fiat_np521_addcarryx_u32(&x2456, &x2457, x2455, x2427, x2424); + fiat_np521_addcarryx_u32(&x2458, &x2459, x2457, x2425, x2422); + fiat_np521_addcarryx_u32(&x2460, &x2461, x2459, x2423, x2420); + fiat_np521_addcarryx_u32(&x2462, &x2463, x2461, x2421, x2418); + fiat_np521_addcarryx_u32(&x2464, &x2465, x2463, x2419, x2416); + fiat_np521_addcarryx_u32(&x2466, &x2467, x2465, x2417, x2414); + fiat_np521_addcarryx_u32(&x2468, &x2469, x2467, x2415, x2412); + fiat_np521_addcarryx_u32(&x2470, &x2471, x2469, x2413, x2410); + fiat_np521_addcarryx_u32(&x2472, &x2473, x2471, x2411, x2408); + fiat_np521_addcarryx_u32(&x2474, &x2475, 0x0, x2376, x2440); + fiat_np521_addcarryx_u32(&x2476, &x2477, x2475, x2378, x2442); + fiat_np521_addcarryx_u32(&x2478, &x2479, x2477, x2380, x2444); + fiat_np521_addcarryx_u32(&x2480, &x2481, x2479, x2382, x2446); + fiat_np521_addcarryx_u32(&x2482, &x2483, x2481, x2384, x2448); + fiat_np521_addcarryx_u32(&x2484, &x2485, x2483, x2386, x2450); + fiat_np521_addcarryx_u32(&x2486, &x2487, x2485, x2388, x2452); + fiat_np521_addcarryx_u32(&x2488, &x2489, x2487, x2390, x2454); + fiat_np521_addcarryx_u32(&x2490, &x2491, x2489, x2392, x2456); + fiat_np521_addcarryx_u32(&x2492, &x2493, x2491, x2394, x2458); + fiat_np521_addcarryx_u32(&x2494, &x2495, x2493, x2396, x2460); + fiat_np521_addcarryx_u32(&x2496, &x2497, x2495, x2398, x2462); + fiat_np521_addcarryx_u32(&x2498, &x2499, x2497, x2400, x2464); + fiat_np521_addcarryx_u32(&x2500, &x2501, x2499, x2402, x2466); + fiat_np521_addcarryx_u32(&x2502, &x2503, x2501, x2404, x2468); + fiat_np521_addcarryx_u32(&x2504, &x2505, x2503, x2406, x2470); + fiat_np521_addcarryx_u32(&x2506, &x2507, x2505, ((x2407 + (x2305 + (x2271 + x2207))) + (x2373 + x2309)), x2472); + fiat_np521_mulx_u32(&x2508, &x2509, x2474, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x2510, &x2511, x2508, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x2512, &x2513, x2508, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2514, &x2515, x2508, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2516, &x2517, x2508, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2518, &x2519, x2508, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2520, &x2521, x2508, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2522, &x2523, x2508, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2524, &x2525, x2508, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2526, &x2527, x2508, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x2528, &x2529, x2508, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x2530, &x2531, x2508, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x2532, &x2533, x2508, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x2534, &x2535, x2508, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x2536, &x2537, x2508, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x2538, &x2539, x2508, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x2540, &x2541, x2508, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x2542, &x2543, x2508, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x2544, &x2545, 0x0, x2543, x2540); + fiat_np521_addcarryx_u32(&x2546, &x2547, x2545, x2541, x2538); + fiat_np521_addcarryx_u32(&x2548, &x2549, x2547, x2539, x2536); + fiat_np521_addcarryx_u32(&x2550, &x2551, x2549, x2537, x2534); + fiat_np521_addcarryx_u32(&x2552, &x2553, x2551, x2535, x2532); + fiat_np521_addcarryx_u32(&x2554, &x2555, x2553, x2533, x2530); + fiat_np521_addcarryx_u32(&x2556, &x2557, x2555, x2531, x2528); + fiat_np521_addcarryx_u32(&x2558, &x2559, x2557, x2529, x2526); + fiat_np521_addcarryx_u32(&x2560, &x2561, x2559, x2527, x2524); + fiat_np521_addcarryx_u32(&x2562, &x2563, x2561, x2525, x2522); + fiat_np521_addcarryx_u32(&x2564, &x2565, x2563, x2523, x2520); + fiat_np521_addcarryx_u32(&x2566, &x2567, x2565, x2521, x2518); + fiat_np521_addcarryx_u32(&x2568, &x2569, x2567, x2519, x2516); + fiat_np521_addcarryx_u32(&x2570, &x2571, x2569, x2517, x2514); + fiat_np521_addcarryx_u32(&x2572, &x2573, x2571, x2515, x2512); + fiat_np521_addcarryx_u32(&x2574, &x2575, x2573, x2513, x2510); + fiat_np521_addcarryx_u32(&x2576, &x2577, 0x0, x2474, x2542); + fiat_np521_addcarryx_u32(&x2578, &x2579, x2577, x2476, x2544); + fiat_np521_addcarryx_u32(&x2580, &x2581, x2579, x2478, x2546); + fiat_np521_addcarryx_u32(&x2582, &x2583, x2581, x2480, x2548); + fiat_np521_addcarryx_u32(&x2584, &x2585, x2583, x2482, x2550); + fiat_np521_addcarryx_u32(&x2586, &x2587, x2585, x2484, x2552); + fiat_np521_addcarryx_u32(&x2588, &x2589, x2587, x2486, x2554); + fiat_np521_addcarryx_u32(&x2590, &x2591, x2589, x2488, x2556); + fiat_np521_addcarryx_u32(&x2592, &x2593, x2591, x2490, x2558); + fiat_np521_addcarryx_u32(&x2594, &x2595, x2593, x2492, x2560); + fiat_np521_addcarryx_u32(&x2596, &x2597, x2595, x2494, x2562); + fiat_np521_addcarryx_u32(&x2598, &x2599, x2597, x2496, x2564); + fiat_np521_addcarryx_u32(&x2600, &x2601, x2599, x2498, x2566); + fiat_np521_addcarryx_u32(&x2602, &x2603, x2601, x2500, x2568); + fiat_np521_addcarryx_u32(&x2604, &x2605, x2603, x2502, x2570); + fiat_np521_addcarryx_u32(&x2606, &x2607, x2605, x2504, x2572); + fiat_np521_addcarryx_u32(&x2608, &x2609, x2607, x2506, x2574); + fiat_np521_mulx_u32(&x2610, &x2611, x13, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x2612, &x2613, x13, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x2614, &x2615, x13, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x2616, &x2617, x13, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x2618, &x2619, x13, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x2620, &x2621, x13, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x2622, &x2623, x13, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x2624, &x2625, x13, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x2626, &x2627, x13, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x2628, &x2629, x13, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x2630, &x2631, x13, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x2632, &x2633, x13, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x2634, &x2635, x13, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x2636, &x2637, x13, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x2638, &x2639, x13, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x2640, &x2641, x13, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x2642, &x2643, x13, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x2644, &x2645, 0x0, x2643, x2640); + fiat_np521_addcarryx_u32(&x2646, &x2647, x2645, x2641, x2638); + fiat_np521_addcarryx_u32(&x2648, &x2649, x2647, x2639, x2636); + fiat_np521_addcarryx_u32(&x2650, &x2651, x2649, x2637, x2634); + fiat_np521_addcarryx_u32(&x2652, &x2653, x2651, x2635, x2632); + fiat_np521_addcarryx_u32(&x2654, &x2655, x2653, x2633, x2630); + fiat_np521_addcarryx_u32(&x2656, &x2657, x2655, x2631, x2628); + fiat_np521_addcarryx_u32(&x2658, &x2659, x2657, x2629, x2626); + fiat_np521_addcarryx_u32(&x2660, &x2661, x2659, x2627, x2624); + fiat_np521_addcarryx_u32(&x2662, &x2663, x2661, x2625, x2622); + fiat_np521_addcarryx_u32(&x2664, &x2665, x2663, x2623, x2620); + fiat_np521_addcarryx_u32(&x2666, &x2667, x2665, x2621, x2618); + fiat_np521_addcarryx_u32(&x2668, &x2669, x2667, x2619, x2616); + fiat_np521_addcarryx_u32(&x2670, &x2671, x2669, x2617, x2614); + fiat_np521_addcarryx_u32(&x2672, &x2673, x2671, x2615, x2612); + fiat_np521_addcarryx_u32(&x2674, &x2675, x2673, x2613, x2610); + fiat_np521_addcarryx_u32(&x2676, &x2677, 0x0, x2578, x2642); + fiat_np521_addcarryx_u32(&x2678, &x2679, x2677, x2580, x2644); + fiat_np521_addcarryx_u32(&x2680, &x2681, x2679, x2582, x2646); + fiat_np521_addcarryx_u32(&x2682, &x2683, x2681, x2584, x2648); + fiat_np521_addcarryx_u32(&x2684, &x2685, x2683, x2586, x2650); + fiat_np521_addcarryx_u32(&x2686, &x2687, x2685, x2588, x2652); + fiat_np521_addcarryx_u32(&x2688, &x2689, x2687, x2590, x2654); + fiat_np521_addcarryx_u32(&x2690, &x2691, x2689, x2592, x2656); + fiat_np521_addcarryx_u32(&x2692, &x2693, x2691, x2594, x2658); + fiat_np521_addcarryx_u32(&x2694, &x2695, x2693, x2596, x2660); + fiat_np521_addcarryx_u32(&x2696, &x2697, x2695, x2598, x2662); + fiat_np521_addcarryx_u32(&x2698, &x2699, x2697, x2600, x2664); + fiat_np521_addcarryx_u32(&x2700, &x2701, x2699, x2602, x2666); + fiat_np521_addcarryx_u32(&x2702, &x2703, x2701, x2604, x2668); + fiat_np521_addcarryx_u32(&x2704, &x2705, x2703, x2606, x2670); + fiat_np521_addcarryx_u32(&x2706, &x2707, x2705, x2608, x2672); + fiat_np521_addcarryx_u32(&x2708, &x2709, x2707, ((x2609 + (x2507 + (x2473 + x2409))) + (x2575 + x2511)), x2674); + fiat_np521_mulx_u32(&x2710, &x2711, x2676, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x2712, &x2713, x2710, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x2714, &x2715, x2710, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2716, &x2717, x2710, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2718, &x2719, x2710, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2720, &x2721, x2710, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2722, &x2723, x2710, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2724, &x2725, x2710, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2726, &x2727, x2710, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2728, &x2729, x2710, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x2730, &x2731, x2710, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x2732, &x2733, x2710, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x2734, &x2735, x2710, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x2736, &x2737, x2710, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x2738, &x2739, x2710, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x2740, &x2741, x2710, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x2742, &x2743, x2710, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x2744, &x2745, x2710, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x2746, &x2747, 0x0, x2745, x2742); + fiat_np521_addcarryx_u32(&x2748, &x2749, x2747, x2743, x2740); + fiat_np521_addcarryx_u32(&x2750, &x2751, x2749, x2741, x2738); + fiat_np521_addcarryx_u32(&x2752, &x2753, x2751, x2739, x2736); + fiat_np521_addcarryx_u32(&x2754, &x2755, x2753, x2737, x2734); + fiat_np521_addcarryx_u32(&x2756, &x2757, x2755, x2735, x2732); + fiat_np521_addcarryx_u32(&x2758, &x2759, x2757, x2733, x2730); + fiat_np521_addcarryx_u32(&x2760, &x2761, x2759, x2731, x2728); + fiat_np521_addcarryx_u32(&x2762, &x2763, x2761, x2729, x2726); + fiat_np521_addcarryx_u32(&x2764, &x2765, x2763, x2727, x2724); + fiat_np521_addcarryx_u32(&x2766, &x2767, x2765, x2725, x2722); + fiat_np521_addcarryx_u32(&x2768, &x2769, x2767, x2723, x2720); + fiat_np521_addcarryx_u32(&x2770, &x2771, x2769, x2721, x2718); + fiat_np521_addcarryx_u32(&x2772, &x2773, x2771, x2719, x2716); + fiat_np521_addcarryx_u32(&x2774, &x2775, x2773, x2717, x2714); + fiat_np521_addcarryx_u32(&x2776, &x2777, x2775, x2715, x2712); + fiat_np521_addcarryx_u32(&x2778, &x2779, 0x0, x2676, x2744); + fiat_np521_addcarryx_u32(&x2780, &x2781, x2779, x2678, x2746); + fiat_np521_addcarryx_u32(&x2782, &x2783, x2781, x2680, x2748); + fiat_np521_addcarryx_u32(&x2784, &x2785, x2783, x2682, x2750); + fiat_np521_addcarryx_u32(&x2786, &x2787, x2785, x2684, x2752); + fiat_np521_addcarryx_u32(&x2788, &x2789, x2787, x2686, x2754); + fiat_np521_addcarryx_u32(&x2790, &x2791, x2789, x2688, x2756); + fiat_np521_addcarryx_u32(&x2792, &x2793, x2791, x2690, x2758); + fiat_np521_addcarryx_u32(&x2794, &x2795, x2793, x2692, x2760); + fiat_np521_addcarryx_u32(&x2796, &x2797, x2795, x2694, x2762); + fiat_np521_addcarryx_u32(&x2798, &x2799, x2797, x2696, x2764); + fiat_np521_addcarryx_u32(&x2800, &x2801, x2799, x2698, x2766); + fiat_np521_addcarryx_u32(&x2802, &x2803, x2801, x2700, x2768); + fiat_np521_addcarryx_u32(&x2804, &x2805, x2803, x2702, x2770); + fiat_np521_addcarryx_u32(&x2806, &x2807, x2805, x2704, x2772); + fiat_np521_addcarryx_u32(&x2808, &x2809, x2807, x2706, x2774); + fiat_np521_addcarryx_u32(&x2810, &x2811, x2809, x2708, x2776); + fiat_np521_mulx_u32(&x2812, &x2813, x14, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x2814, &x2815, x14, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x2816, &x2817, x14, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x2818, &x2819, x14, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x2820, &x2821, x14, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x2822, &x2823, x14, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x2824, &x2825, x14, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x2826, &x2827, x14, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x2828, &x2829, x14, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x2830, &x2831, x14, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x2832, &x2833, x14, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x2834, &x2835, x14, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x2836, &x2837, x14, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x2838, &x2839, x14, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x2840, &x2841, x14, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x2842, &x2843, x14, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x2844, &x2845, x14, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x2846, &x2847, 0x0, x2845, x2842); + fiat_np521_addcarryx_u32(&x2848, &x2849, x2847, x2843, x2840); + fiat_np521_addcarryx_u32(&x2850, &x2851, x2849, x2841, x2838); + fiat_np521_addcarryx_u32(&x2852, &x2853, x2851, x2839, x2836); + fiat_np521_addcarryx_u32(&x2854, &x2855, x2853, x2837, x2834); + fiat_np521_addcarryx_u32(&x2856, &x2857, x2855, x2835, x2832); + fiat_np521_addcarryx_u32(&x2858, &x2859, x2857, x2833, x2830); + fiat_np521_addcarryx_u32(&x2860, &x2861, x2859, x2831, x2828); + fiat_np521_addcarryx_u32(&x2862, &x2863, x2861, x2829, x2826); + fiat_np521_addcarryx_u32(&x2864, &x2865, x2863, x2827, x2824); + fiat_np521_addcarryx_u32(&x2866, &x2867, x2865, x2825, x2822); + fiat_np521_addcarryx_u32(&x2868, &x2869, x2867, x2823, x2820); + fiat_np521_addcarryx_u32(&x2870, &x2871, x2869, x2821, x2818); + fiat_np521_addcarryx_u32(&x2872, &x2873, x2871, x2819, x2816); + fiat_np521_addcarryx_u32(&x2874, &x2875, x2873, x2817, x2814); + fiat_np521_addcarryx_u32(&x2876, &x2877, x2875, x2815, x2812); + fiat_np521_addcarryx_u32(&x2878, &x2879, 0x0, x2780, x2844); + fiat_np521_addcarryx_u32(&x2880, &x2881, x2879, x2782, x2846); + fiat_np521_addcarryx_u32(&x2882, &x2883, x2881, x2784, x2848); + fiat_np521_addcarryx_u32(&x2884, &x2885, x2883, x2786, x2850); + fiat_np521_addcarryx_u32(&x2886, &x2887, x2885, x2788, x2852); + fiat_np521_addcarryx_u32(&x2888, &x2889, x2887, x2790, x2854); + fiat_np521_addcarryx_u32(&x2890, &x2891, x2889, x2792, x2856); + fiat_np521_addcarryx_u32(&x2892, &x2893, x2891, x2794, x2858); + fiat_np521_addcarryx_u32(&x2894, &x2895, x2893, x2796, x2860); + fiat_np521_addcarryx_u32(&x2896, &x2897, x2895, x2798, x2862); + fiat_np521_addcarryx_u32(&x2898, &x2899, x2897, x2800, x2864); + fiat_np521_addcarryx_u32(&x2900, &x2901, x2899, x2802, x2866); + fiat_np521_addcarryx_u32(&x2902, &x2903, x2901, x2804, x2868); + fiat_np521_addcarryx_u32(&x2904, &x2905, x2903, x2806, x2870); + fiat_np521_addcarryx_u32(&x2906, &x2907, x2905, x2808, x2872); + fiat_np521_addcarryx_u32(&x2908, &x2909, x2907, x2810, x2874); + fiat_np521_addcarryx_u32(&x2910, &x2911, x2909, ((x2811 + (x2709 + (x2675 + x2611))) + (x2777 + x2713)), x2876); + fiat_np521_mulx_u32(&x2912, &x2913, x2878, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x2914, &x2915, x2912, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x2916, &x2917, x2912, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2918, &x2919, x2912, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2920, &x2921, x2912, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2922, &x2923, x2912, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2924, &x2925, x2912, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2926, &x2927, x2912, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2928, &x2929, x2912, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x2930, &x2931, x2912, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x2932, &x2933, x2912, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x2934, &x2935, x2912, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x2936, &x2937, x2912, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x2938, &x2939, x2912, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x2940, &x2941, x2912, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x2942, &x2943, x2912, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x2944, &x2945, x2912, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x2946, &x2947, x2912, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x2948, &x2949, 0x0, x2947, x2944); + fiat_np521_addcarryx_u32(&x2950, &x2951, x2949, x2945, x2942); + fiat_np521_addcarryx_u32(&x2952, &x2953, x2951, x2943, x2940); + fiat_np521_addcarryx_u32(&x2954, &x2955, x2953, x2941, x2938); + fiat_np521_addcarryx_u32(&x2956, &x2957, x2955, x2939, x2936); + fiat_np521_addcarryx_u32(&x2958, &x2959, x2957, x2937, x2934); + fiat_np521_addcarryx_u32(&x2960, &x2961, x2959, x2935, x2932); + fiat_np521_addcarryx_u32(&x2962, &x2963, x2961, x2933, x2930); + fiat_np521_addcarryx_u32(&x2964, &x2965, x2963, x2931, x2928); + fiat_np521_addcarryx_u32(&x2966, &x2967, x2965, x2929, x2926); + fiat_np521_addcarryx_u32(&x2968, &x2969, x2967, x2927, x2924); + fiat_np521_addcarryx_u32(&x2970, &x2971, x2969, x2925, x2922); + fiat_np521_addcarryx_u32(&x2972, &x2973, x2971, x2923, x2920); + fiat_np521_addcarryx_u32(&x2974, &x2975, x2973, x2921, x2918); + fiat_np521_addcarryx_u32(&x2976, &x2977, x2975, x2919, x2916); + fiat_np521_addcarryx_u32(&x2978, &x2979, x2977, x2917, x2914); + fiat_np521_addcarryx_u32(&x2980, &x2981, 0x0, x2878, x2946); + fiat_np521_addcarryx_u32(&x2982, &x2983, x2981, x2880, x2948); + fiat_np521_addcarryx_u32(&x2984, &x2985, x2983, x2882, x2950); + fiat_np521_addcarryx_u32(&x2986, &x2987, x2985, x2884, x2952); + fiat_np521_addcarryx_u32(&x2988, &x2989, x2987, x2886, x2954); + fiat_np521_addcarryx_u32(&x2990, &x2991, x2989, x2888, x2956); + fiat_np521_addcarryx_u32(&x2992, &x2993, x2991, x2890, x2958); + fiat_np521_addcarryx_u32(&x2994, &x2995, x2993, x2892, x2960); + fiat_np521_addcarryx_u32(&x2996, &x2997, x2995, x2894, x2962); + fiat_np521_addcarryx_u32(&x2998, &x2999, x2997, x2896, x2964); + fiat_np521_addcarryx_u32(&x3000, &x3001, x2999, x2898, x2966); + fiat_np521_addcarryx_u32(&x3002, &x3003, x3001, x2900, x2968); + fiat_np521_addcarryx_u32(&x3004, &x3005, x3003, x2902, x2970); + fiat_np521_addcarryx_u32(&x3006, &x3007, x3005, x2904, x2972); + fiat_np521_addcarryx_u32(&x3008, &x3009, x3007, x2906, x2974); + fiat_np521_addcarryx_u32(&x3010, &x3011, x3009, x2908, x2976); + fiat_np521_addcarryx_u32(&x3012, &x3013, x3011, x2910, x2978); + fiat_np521_mulx_u32(&x3014, &x3015, x15, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x3016, &x3017, x15, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x3018, &x3019, x15, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x3020, &x3021, x15, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x3022, &x3023, x15, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x3024, &x3025, x15, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x3026, &x3027, x15, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x3028, &x3029, x15, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x3030, &x3031, x15, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x3032, &x3033, x15, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x3034, &x3035, x15, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x3036, &x3037, x15, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x3038, &x3039, x15, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x3040, &x3041, x15, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x3042, &x3043, x15, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x3044, &x3045, x15, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x3046, &x3047, x15, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x3048, &x3049, 0x0, x3047, x3044); + fiat_np521_addcarryx_u32(&x3050, &x3051, x3049, x3045, x3042); + fiat_np521_addcarryx_u32(&x3052, &x3053, x3051, x3043, x3040); + fiat_np521_addcarryx_u32(&x3054, &x3055, x3053, x3041, x3038); + fiat_np521_addcarryx_u32(&x3056, &x3057, x3055, x3039, x3036); + fiat_np521_addcarryx_u32(&x3058, &x3059, x3057, x3037, x3034); + fiat_np521_addcarryx_u32(&x3060, &x3061, x3059, x3035, x3032); + fiat_np521_addcarryx_u32(&x3062, &x3063, x3061, x3033, x3030); + fiat_np521_addcarryx_u32(&x3064, &x3065, x3063, x3031, x3028); + fiat_np521_addcarryx_u32(&x3066, &x3067, x3065, x3029, x3026); + fiat_np521_addcarryx_u32(&x3068, &x3069, x3067, x3027, x3024); + fiat_np521_addcarryx_u32(&x3070, &x3071, x3069, x3025, x3022); + fiat_np521_addcarryx_u32(&x3072, &x3073, x3071, x3023, x3020); + fiat_np521_addcarryx_u32(&x3074, &x3075, x3073, x3021, x3018); + fiat_np521_addcarryx_u32(&x3076, &x3077, x3075, x3019, x3016); + fiat_np521_addcarryx_u32(&x3078, &x3079, x3077, x3017, x3014); + fiat_np521_addcarryx_u32(&x3080, &x3081, 0x0, x2982, x3046); + fiat_np521_addcarryx_u32(&x3082, &x3083, x3081, x2984, x3048); + fiat_np521_addcarryx_u32(&x3084, &x3085, x3083, x2986, x3050); + fiat_np521_addcarryx_u32(&x3086, &x3087, x3085, x2988, x3052); + fiat_np521_addcarryx_u32(&x3088, &x3089, x3087, x2990, x3054); + fiat_np521_addcarryx_u32(&x3090, &x3091, x3089, x2992, x3056); + fiat_np521_addcarryx_u32(&x3092, &x3093, x3091, x2994, x3058); + fiat_np521_addcarryx_u32(&x3094, &x3095, x3093, x2996, x3060); + fiat_np521_addcarryx_u32(&x3096, &x3097, x3095, x2998, x3062); + fiat_np521_addcarryx_u32(&x3098, &x3099, x3097, x3000, x3064); + fiat_np521_addcarryx_u32(&x3100, &x3101, x3099, x3002, x3066); + fiat_np521_addcarryx_u32(&x3102, &x3103, x3101, x3004, x3068); + fiat_np521_addcarryx_u32(&x3104, &x3105, x3103, x3006, x3070); + fiat_np521_addcarryx_u32(&x3106, &x3107, x3105, x3008, x3072); + fiat_np521_addcarryx_u32(&x3108, &x3109, x3107, x3010, x3074); + fiat_np521_addcarryx_u32(&x3110, &x3111, x3109, x3012, x3076); + fiat_np521_addcarryx_u32(&x3112, &x3113, x3111, ((x3013 + (x2911 + (x2877 + x2813))) + (x2979 + x2915)), x3078); + fiat_np521_mulx_u32(&x3114, &x3115, x3080, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x3116, &x3117, x3114, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x3118, &x3119, x3114, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3120, &x3121, x3114, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3122, &x3123, x3114, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3124, &x3125, x3114, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3126, &x3127, x3114, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3128, &x3129, x3114, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3130, &x3131, x3114, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3132, &x3133, x3114, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x3134, &x3135, x3114, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x3136, &x3137, x3114, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x3138, &x3139, x3114, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x3140, &x3141, x3114, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x3142, &x3143, x3114, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x3144, &x3145, x3114, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x3146, &x3147, x3114, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x3148, &x3149, x3114, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x3150, &x3151, 0x0, x3149, x3146); + fiat_np521_addcarryx_u32(&x3152, &x3153, x3151, x3147, x3144); + fiat_np521_addcarryx_u32(&x3154, &x3155, x3153, x3145, x3142); + fiat_np521_addcarryx_u32(&x3156, &x3157, x3155, x3143, x3140); + fiat_np521_addcarryx_u32(&x3158, &x3159, x3157, x3141, x3138); + fiat_np521_addcarryx_u32(&x3160, &x3161, x3159, x3139, x3136); + fiat_np521_addcarryx_u32(&x3162, &x3163, x3161, x3137, x3134); + fiat_np521_addcarryx_u32(&x3164, &x3165, x3163, x3135, x3132); + fiat_np521_addcarryx_u32(&x3166, &x3167, x3165, x3133, x3130); + fiat_np521_addcarryx_u32(&x3168, &x3169, x3167, x3131, x3128); + fiat_np521_addcarryx_u32(&x3170, &x3171, x3169, x3129, x3126); + fiat_np521_addcarryx_u32(&x3172, &x3173, x3171, x3127, x3124); + fiat_np521_addcarryx_u32(&x3174, &x3175, x3173, x3125, x3122); + fiat_np521_addcarryx_u32(&x3176, &x3177, x3175, x3123, x3120); + fiat_np521_addcarryx_u32(&x3178, &x3179, x3177, x3121, x3118); + fiat_np521_addcarryx_u32(&x3180, &x3181, x3179, x3119, x3116); + fiat_np521_addcarryx_u32(&x3182, &x3183, 0x0, x3080, x3148); + fiat_np521_addcarryx_u32(&x3184, &x3185, x3183, x3082, x3150); + fiat_np521_addcarryx_u32(&x3186, &x3187, x3185, x3084, x3152); + fiat_np521_addcarryx_u32(&x3188, &x3189, x3187, x3086, x3154); + fiat_np521_addcarryx_u32(&x3190, &x3191, x3189, x3088, x3156); + fiat_np521_addcarryx_u32(&x3192, &x3193, x3191, x3090, x3158); + fiat_np521_addcarryx_u32(&x3194, &x3195, x3193, x3092, x3160); + fiat_np521_addcarryx_u32(&x3196, &x3197, x3195, x3094, x3162); + fiat_np521_addcarryx_u32(&x3198, &x3199, x3197, x3096, x3164); + fiat_np521_addcarryx_u32(&x3200, &x3201, x3199, x3098, x3166); + fiat_np521_addcarryx_u32(&x3202, &x3203, x3201, x3100, x3168); + fiat_np521_addcarryx_u32(&x3204, &x3205, x3203, x3102, x3170); + fiat_np521_addcarryx_u32(&x3206, &x3207, x3205, x3104, x3172); + fiat_np521_addcarryx_u32(&x3208, &x3209, x3207, x3106, x3174); + fiat_np521_addcarryx_u32(&x3210, &x3211, x3209, x3108, x3176); + fiat_np521_addcarryx_u32(&x3212, &x3213, x3211, x3110, x3178); + fiat_np521_addcarryx_u32(&x3214, &x3215, x3213, x3112, x3180); + fiat_np521_mulx_u32(&x3216, &x3217, x16, UINT16_C(0x19a)); + fiat_np521_mulx_u32(&x3218, &x3219, x16, UINT32_C(0x5b5a3afe)); + fiat_np521_mulx_u32(&x3220, &x3221, x16, UINT32_C(0x8c44383d)); + fiat_np521_mulx_u32(&x3222, &x3223, x16, UINT32_C(0x2d8e03d1)); + fiat_np521_mulx_u32(&x3224, &x3225, x16, UINT32_C(0x492d0d45)); + fiat_np521_mulx_u32(&x3226, &x3227, x16, UINT32_C(0x5bcc6d61)); + fiat_np521_mulx_u32(&x3228, &x3229, x16, UINT32_C(0xa8e567bc)); + fiat_np521_mulx_u32(&x3230, &x3231, x16, UINT32_C(0xcff3d142)); + fiat_np521_mulx_u32(&x3232, &x3233, x16, UINT32_C(0xb7756e3a)); + fiat_np521_mulx_u32(&x3234, &x3235, x16, UINT32_C(0x4fb35b72)); + fiat_np521_mulx_u32(&x3236, &x3237, x16, UINT32_C(0xd3402705)); + fiat_np521_mulx_u32(&x3238, &x3239, x16, UINT32_C(0x5d4dd6d3)); + fiat_np521_mulx_u32(&x3240, &x3241, x16, UINT32_C(0x791d9dc)); + fiat_np521_mulx_u32(&x3242, &x3243, x16, UINT32_C(0x18354a56)); + fiat_np521_mulx_u32(&x3244, &x3245, x16, UINT32_C(0x4374a642)); + fiat_np521_mulx_u32(&x3246, &x3247, x16, UINT32_C(0x1163115a)); + fiat_np521_mulx_u32(&x3248, &x3249, x16, UINT32_C(0x61c64ca7)); + fiat_np521_addcarryx_u32(&x3250, &x3251, 0x0, x3249, x3246); + fiat_np521_addcarryx_u32(&x3252, &x3253, x3251, x3247, x3244); + fiat_np521_addcarryx_u32(&x3254, &x3255, x3253, x3245, x3242); + fiat_np521_addcarryx_u32(&x3256, &x3257, x3255, x3243, x3240); + fiat_np521_addcarryx_u32(&x3258, &x3259, x3257, x3241, x3238); + fiat_np521_addcarryx_u32(&x3260, &x3261, x3259, x3239, x3236); + fiat_np521_addcarryx_u32(&x3262, &x3263, x3261, x3237, x3234); + fiat_np521_addcarryx_u32(&x3264, &x3265, x3263, x3235, x3232); + fiat_np521_addcarryx_u32(&x3266, &x3267, x3265, x3233, x3230); + fiat_np521_addcarryx_u32(&x3268, &x3269, x3267, x3231, x3228); + fiat_np521_addcarryx_u32(&x3270, &x3271, x3269, x3229, x3226); + fiat_np521_addcarryx_u32(&x3272, &x3273, x3271, x3227, x3224); + fiat_np521_addcarryx_u32(&x3274, &x3275, x3273, x3225, x3222); + fiat_np521_addcarryx_u32(&x3276, &x3277, x3275, x3223, x3220); + fiat_np521_addcarryx_u32(&x3278, &x3279, x3277, x3221, x3218); + fiat_np521_addcarryx_u32(&x3280, &x3281, x3279, x3219, x3216); + fiat_np521_addcarryx_u32(&x3282, &x3283, 0x0, x3184, x3248); + fiat_np521_addcarryx_u32(&x3284, &x3285, x3283, x3186, x3250); + fiat_np521_addcarryx_u32(&x3286, &x3287, x3285, x3188, x3252); + fiat_np521_addcarryx_u32(&x3288, &x3289, x3287, x3190, x3254); + fiat_np521_addcarryx_u32(&x3290, &x3291, x3289, x3192, x3256); + fiat_np521_addcarryx_u32(&x3292, &x3293, x3291, x3194, x3258); + fiat_np521_addcarryx_u32(&x3294, &x3295, x3293, x3196, x3260); + fiat_np521_addcarryx_u32(&x3296, &x3297, x3295, x3198, x3262); + fiat_np521_addcarryx_u32(&x3298, &x3299, x3297, x3200, x3264); + fiat_np521_addcarryx_u32(&x3300, &x3301, x3299, x3202, x3266); + fiat_np521_addcarryx_u32(&x3302, &x3303, x3301, x3204, x3268); + fiat_np521_addcarryx_u32(&x3304, &x3305, x3303, x3206, x3270); + fiat_np521_addcarryx_u32(&x3306, &x3307, x3305, x3208, x3272); + fiat_np521_addcarryx_u32(&x3308, &x3309, x3307, x3210, x3274); + fiat_np521_addcarryx_u32(&x3310, &x3311, x3309, x3212, x3276); + fiat_np521_addcarryx_u32(&x3312, &x3313, x3311, x3214, x3278); + fiat_np521_addcarryx_u32(&x3314, &x3315, x3313, ((x3215 + (x3113 + (x3079 + x3015))) + (x3181 + x3117)), x3280); + fiat_np521_mulx_u32(&x3316, &x3317, x3282, UINT32_C(0x79a995c7)); + fiat_np521_mulx_u32(&x3318, &x3319, x3316, UINT16_C(0x1ff)); + fiat_np521_mulx_u32(&x3320, &x3321, x3316, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3322, &x3323, x3316, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3324, &x3325, x3316, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3326, &x3327, x3316, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3328, &x3329, x3316, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3330, &x3331, x3316, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3332, &x3333, x3316, UINT32_C(0xffffffff)); + fiat_np521_mulx_u32(&x3334, &x3335, x3316, UINT32_C(0xfffffffa)); + fiat_np521_mulx_u32(&x3336, &x3337, x3316, UINT32_C(0x51868783)); + fiat_np521_mulx_u32(&x3338, &x3339, x3316, UINT32_C(0xbf2f966b)); + fiat_np521_mulx_u32(&x3340, &x3341, x3316, UINT32_C(0x7fcc0148)); + fiat_np521_mulx_u32(&x3342, &x3343, x3316, UINT32_C(0xf709a5d0)); + fiat_np521_mulx_u32(&x3344, &x3345, x3316, UINT32_C(0x3bb5c9b8)); + fiat_np521_mulx_u32(&x3346, &x3347, x3316, UINT32_C(0x899c47ae)); + fiat_np521_mulx_u32(&x3348, &x3349, x3316, UINT32_C(0xbb6fb71e)); + fiat_np521_mulx_u32(&x3350, &x3351, x3316, UINT32_C(0x91386409)); + fiat_np521_addcarryx_u32(&x3352, &x3353, 0x0, x3351, x3348); + fiat_np521_addcarryx_u32(&x3354, &x3355, x3353, x3349, x3346); + fiat_np521_addcarryx_u32(&x3356, &x3357, x3355, x3347, x3344); + fiat_np521_addcarryx_u32(&x3358, &x3359, x3357, x3345, x3342); + fiat_np521_addcarryx_u32(&x3360, &x3361, x3359, x3343, x3340); + fiat_np521_addcarryx_u32(&x3362, &x3363, x3361, x3341, x3338); + fiat_np521_addcarryx_u32(&x3364, &x3365, x3363, x3339, x3336); + fiat_np521_addcarryx_u32(&x3366, &x3367, x3365, x3337, x3334); + fiat_np521_addcarryx_u32(&x3368, &x3369, x3367, x3335, x3332); + fiat_np521_addcarryx_u32(&x3370, &x3371, x3369, x3333, x3330); + fiat_np521_addcarryx_u32(&x3372, &x3373, x3371, x3331, x3328); + fiat_np521_addcarryx_u32(&x3374, &x3375, x3373, x3329, x3326); + fiat_np521_addcarryx_u32(&x3376, &x3377, x3375, x3327, x3324); + fiat_np521_addcarryx_u32(&x3378, &x3379, x3377, x3325, x3322); + fiat_np521_addcarryx_u32(&x3380, &x3381, x3379, x3323, x3320); + fiat_np521_addcarryx_u32(&x3382, &x3383, x3381, x3321, x3318); + fiat_np521_addcarryx_u32(&x3384, &x3385, 0x0, x3282, x3350); + fiat_np521_addcarryx_u32(&x3386, &x3387, x3385, x3284, x3352); + fiat_np521_addcarryx_u32(&x3388, &x3389, x3387, x3286, x3354); + fiat_np521_addcarryx_u32(&x3390, &x3391, x3389, x3288, x3356); + fiat_np521_addcarryx_u32(&x3392, &x3393, x3391, x3290, x3358); + fiat_np521_addcarryx_u32(&x3394, &x3395, x3393, x3292, x3360); + fiat_np521_addcarryx_u32(&x3396, &x3397, x3395, x3294, x3362); + fiat_np521_addcarryx_u32(&x3398, &x3399, x3397, x3296, x3364); + fiat_np521_addcarryx_u32(&x3400, &x3401, x3399, x3298, x3366); + fiat_np521_addcarryx_u32(&x3402, &x3403, x3401, x3300, x3368); + fiat_np521_addcarryx_u32(&x3404, &x3405, x3403, x3302, x3370); + fiat_np521_addcarryx_u32(&x3406, &x3407, x3405, x3304, x3372); + fiat_np521_addcarryx_u32(&x3408, &x3409, x3407, x3306, x3374); + fiat_np521_addcarryx_u32(&x3410, &x3411, x3409, x3308, x3376); + fiat_np521_addcarryx_u32(&x3412, &x3413, x3411, x3310, x3378); + fiat_np521_addcarryx_u32(&x3414, &x3415, x3413, x3312, x3380); + fiat_np521_addcarryx_u32(&x3416, &x3417, x3415, x3314, x3382); + x3418 = ((x3417 + (x3315 + (x3281 + x3217))) + (x3383 + x3319)); + fiat_np521_subborrowx_u32(&x3419, &x3420, 0x0, x3386, UINT32_C(0x91386409)); + fiat_np521_subborrowx_u32(&x3421, &x3422, x3420, x3388, UINT32_C(0xbb6fb71e)); + fiat_np521_subborrowx_u32(&x3423, &x3424, x3422, x3390, UINT32_C(0x899c47ae)); + fiat_np521_subborrowx_u32(&x3425, &x3426, x3424, x3392, UINT32_C(0x3bb5c9b8)); + fiat_np521_subborrowx_u32(&x3427, &x3428, x3426, x3394, UINT32_C(0xf709a5d0)); + fiat_np521_subborrowx_u32(&x3429, &x3430, x3428, x3396, UINT32_C(0x7fcc0148)); + fiat_np521_subborrowx_u32(&x3431, &x3432, x3430, x3398, UINT32_C(0xbf2f966b)); + fiat_np521_subborrowx_u32(&x3433, &x3434, x3432, x3400, UINT32_C(0x51868783)); + fiat_np521_subborrowx_u32(&x3435, &x3436, x3434, x3402, UINT32_C(0xfffffffa)); + fiat_np521_subborrowx_u32(&x3437, &x3438, x3436, x3404, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x3439, &x3440, x3438, x3406, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x3441, &x3442, x3440, x3408, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x3443, &x3444, x3442, x3410, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x3445, &x3446, x3444, x3412, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x3447, &x3448, x3446, x3414, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x3449, &x3450, x3448, x3416, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x3451, &x3452, x3450, x3418, UINT16_C(0x1ff)); + fiat_np521_subborrowx_u32(&x3453, &x3454, x3452, 0x0, 0x0); + fiat_np521_cmovznz_u32(&x3455, x3454, x3419, x3386); + fiat_np521_cmovznz_u32(&x3456, x3454, x3421, x3388); + fiat_np521_cmovznz_u32(&x3457, x3454, x3423, x3390); + fiat_np521_cmovznz_u32(&x3458, x3454, x3425, x3392); + fiat_np521_cmovznz_u32(&x3459, x3454, x3427, x3394); + fiat_np521_cmovznz_u32(&x3460, x3454, x3429, x3396); + fiat_np521_cmovznz_u32(&x3461, x3454, x3431, x3398); + fiat_np521_cmovznz_u32(&x3462, x3454, x3433, x3400); + fiat_np521_cmovznz_u32(&x3463, x3454, x3435, x3402); + fiat_np521_cmovznz_u32(&x3464, x3454, x3437, x3404); + fiat_np521_cmovznz_u32(&x3465, x3454, x3439, x3406); + fiat_np521_cmovznz_u32(&x3466, x3454, x3441, x3408); + fiat_np521_cmovznz_u32(&x3467, x3454, x3443, x3410); + fiat_np521_cmovznz_u32(&x3468, x3454, x3445, x3412); + fiat_np521_cmovznz_u32(&x3469, x3454, x3447, x3414); + fiat_np521_cmovznz_u32(&x3470, x3454, x3449, x3416); + fiat_np521_cmovznz_u32(&x3471, x3454, x3451, x3418); + out1[0] = x3455; + out1[1] = x3456; + out1[2] = x3457; + out1[3] = x3458; + out1[4] = x3459; + out1[5] = x3460; + out1[6] = x3461; + out1[7] = x3462; + out1[8] = x3463; + out1[9] = x3464; + out1[10] = x3465; + out1[11] = x3466; + out1[12] = x3467; + out1[13] = x3468; + out1[14] = x3469; + out1[15] = x3470; + out1[16] = x3471; +} + +/* + * The function fiat_np521_set_one returns the field element one in the Montgomery domain. + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np521_set_one(uint32_t out1[17]) { + out1[0] = UINT32_C(0xfb800000); + out1[1] = UINT32_C(0x70b763cd); + out1[2] = UINT32_C(0x28a24824); + out1[3] = UINT32_C(0x23bb31dc); + out1[4] = UINT32_C(0x17e2251b); + out1[5] = UINT32_C(0x5b847b2d); + out1[6] = UINT32_C(0xca4019ff); + out1[7] = UINT32_C(0x3e206834); + out1[8] = UINT32_C(0x2d73cbc); + out1[9] = 0x0; + out1[10] = 0x0; + out1[11] = 0x0; + out1[12] = 0x0; + out1[13] = 0x0; + out1[14] = 0x0; + out1[15] = 0x0; + out1[16] = 0x0; +} + +/* + * The function fiat_np521_msat returns the saturated represtation of the prime modulus. + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np521_msat(uint32_t out1[18]) { + out1[0] = UINT32_C(0x91386409); + out1[1] = UINT32_C(0xbb6fb71e); + out1[2] = UINT32_C(0x899c47ae); + out1[3] = UINT32_C(0x3bb5c9b8); + out1[4] = UINT32_C(0xf709a5d0); + out1[5] = UINT32_C(0x7fcc0148); + out1[6] = UINT32_C(0xbf2f966b); + out1[7] = UINT32_C(0x51868783); + out1[8] = UINT32_C(0xfffffffa); + out1[9] = UINT32_C(0xffffffff); + out1[10] = UINT32_C(0xffffffff); + out1[11] = UINT32_C(0xffffffff); + out1[12] = UINT32_C(0xffffffff); + out1[13] = UINT32_C(0xffffffff); + out1[14] = UINT32_C(0xffffffff); + out1[15] = UINT32_C(0xffffffff); + out1[16] = UINT16_C(0x1ff); + out1[17] = 0x0; +} + +/* + * The function fiat_np521_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if (log2 m) + 1 < 46 then ⌊(49 * ((log2 m) + 1) + 80) / 17⌋ else ⌊(49 * ((log2 m) + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np521_divstep_precomp(uint32_t out1[17]) { + out1[0] = UINT32_C(0x9659cabd); + out1[1] = UINT32_C(0xd2e6b274); + out1[2] = UINT32_C(0x876caf82); + out1[3] = UINT32_C(0x5e78ce74); + out1[4] = UINT32_C(0x3063b3db); + out1[5] = UINT32_C(0x3849b3f); + out1[6] = UINT32_C(0xf19b8870); + out1[7] = UINT32_C(0x864c68eb); + out1[8] = UINT32_C(0x16248708); + out1[9] = UINT32_C(0xedbce602); + out1[10] = UINT32_C(0xb7f07b8e); + out1[11] = UINT32_C(0x721f63bc); + out1[12] = UINT32_C(0x62da93cf); + out1[13] = UINT32_C(0x6c4f0d20); + out1[14] = UINT32_C(0xafd209c1); + out1[15] = UINT32_C(0x6f329bc7); + out1[16] = UINT16_C(0x151); +} + +/* + * The function fiat_np521_divstep computes a divstep. + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg4: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg5: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out4: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out5: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_np521_divstep(uint32_t* out1, uint32_t out2[18], uint32_t out3[18], uint32_t out4[17], uint32_t out5[17], uint32_t arg1, const uint32_t arg2[18], const uint32_t arg3[18], const uint32_t arg4[17], const uint32_t arg5[17]) { + uint32_t x1; + fiat_np521_uint1 x2; + fiat_np521_uint1 x3; + uint32_t x4; + fiat_np521_uint1 x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + fiat_np521_uint1 x26; + uint32_t x27; + fiat_np521_uint1 x28; + uint32_t x29; + fiat_np521_uint1 x30; + uint32_t x31; + fiat_np521_uint1 x32; + uint32_t x33; + fiat_np521_uint1 x34; + uint32_t x35; + fiat_np521_uint1 x36; + uint32_t x37; + fiat_np521_uint1 x38; + uint32_t x39; + fiat_np521_uint1 x40; + uint32_t x41; + fiat_np521_uint1 x42; + uint32_t x43; + fiat_np521_uint1 x44; + uint32_t x45; + fiat_np521_uint1 x46; + uint32_t x47; + fiat_np521_uint1 x48; + uint32_t x49; + fiat_np521_uint1 x50; + uint32_t x51; + fiat_np521_uint1 x52; + uint32_t x53; + fiat_np521_uint1 x54; + uint32_t x55; + fiat_np521_uint1 x56; + uint32_t x57; + fiat_np521_uint1 x58; + uint32_t x59; + fiat_np521_uint1 x60; + uint32_t x61; + uint32_t x62; + uint32_t x63; + uint32_t x64; + uint32_t x65; + uint32_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + uint32_t x81; + uint32_t x82; + uint32_t x83; + uint32_t x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + uint32_t x88; + uint32_t x89; + uint32_t x90; + uint32_t x91; + uint32_t x92; + uint32_t x93; + uint32_t x94; + uint32_t x95; + uint32_t x96; + fiat_np521_uint1 x97; + uint32_t x98; + fiat_np521_uint1 x99; + uint32_t x100; + fiat_np521_uint1 x101; + uint32_t x102; + fiat_np521_uint1 x103; + uint32_t x104; + fiat_np521_uint1 x105; + uint32_t x106; + fiat_np521_uint1 x107; + uint32_t x108; + fiat_np521_uint1 x109; + uint32_t x110; + fiat_np521_uint1 x111; + uint32_t x112; + fiat_np521_uint1 x113; + uint32_t x114; + fiat_np521_uint1 x115; + uint32_t x116; + fiat_np521_uint1 x117; + uint32_t x118; + fiat_np521_uint1 x119; + uint32_t x120; + fiat_np521_uint1 x121; + uint32_t x122; + fiat_np521_uint1 x123; + uint32_t x124; + fiat_np521_uint1 x125; + uint32_t x126; + fiat_np521_uint1 x127; + uint32_t x128; + fiat_np521_uint1 x129; + uint32_t x130; + fiat_np521_uint1 x131; + uint32_t x132; + fiat_np521_uint1 x133; + uint32_t x134; + fiat_np521_uint1 x135; + uint32_t x136; + fiat_np521_uint1 x137; + uint32_t x138; + fiat_np521_uint1 x139; + uint32_t x140; + fiat_np521_uint1 x141; + uint32_t x142; + fiat_np521_uint1 x143; + uint32_t x144; + fiat_np521_uint1 x145; + uint32_t x146; + fiat_np521_uint1 x147; + uint32_t x148; + fiat_np521_uint1 x149; + uint32_t x150; + fiat_np521_uint1 x151; + uint32_t x152; + fiat_np521_uint1 x153; + uint32_t x154; + fiat_np521_uint1 x155; + uint32_t x156; + fiat_np521_uint1 x157; + uint32_t x158; + fiat_np521_uint1 x159; + uint32_t x160; + fiat_np521_uint1 x161; + uint32_t x162; + fiat_np521_uint1 x163; + uint32_t x164; + fiat_np521_uint1 x165; + uint32_t x166; + uint32_t x167; + uint32_t x168; + uint32_t x169; + uint32_t x170; + uint32_t x171; + uint32_t x172; + uint32_t x173; + uint32_t x174; + uint32_t x175; + uint32_t x176; + uint32_t x177; + uint32_t x178; + uint32_t x179; + uint32_t x180; + uint32_t x181; + uint32_t x182; + uint32_t x183; + fiat_np521_uint1 x184; + uint32_t x185; + fiat_np521_uint1 x186; + uint32_t x187; + fiat_np521_uint1 x188; + uint32_t x189; + fiat_np521_uint1 x190; + uint32_t x191; + fiat_np521_uint1 x192; + uint32_t x193; + fiat_np521_uint1 x194; + uint32_t x195; + fiat_np521_uint1 x196; + uint32_t x197; + fiat_np521_uint1 x198; + uint32_t x199; + fiat_np521_uint1 x200; + uint32_t x201; + fiat_np521_uint1 x202; + uint32_t x203; + fiat_np521_uint1 x204; + uint32_t x205; + fiat_np521_uint1 x206; + uint32_t x207; + fiat_np521_uint1 x208; + uint32_t x209; + fiat_np521_uint1 x210; + uint32_t x211; + fiat_np521_uint1 x212; + uint32_t x213; + fiat_np521_uint1 x214; + uint32_t x215; + fiat_np521_uint1 x216; + uint32_t x217; + uint32_t x218; + fiat_np521_uint1 x219; + uint32_t x220; + fiat_np521_uint1 x221; + uint32_t x222; + fiat_np521_uint1 x223; + uint32_t x224; + fiat_np521_uint1 x225; + uint32_t x226; + fiat_np521_uint1 x227; + uint32_t x228; + fiat_np521_uint1 x229; + uint32_t x230; + fiat_np521_uint1 x231; + uint32_t x232; + fiat_np521_uint1 x233; + uint32_t x234; + fiat_np521_uint1 x235; + uint32_t x236; + fiat_np521_uint1 x237; + uint32_t x238; + fiat_np521_uint1 x239; + uint32_t x240; + fiat_np521_uint1 x241; + uint32_t x242; + fiat_np521_uint1 x243; + uint32_t x244; + fiat_np521_uint1 x245; + uint32_t x246; + fiat_np521_uint1 x247; + uint32_t x248; + fiat_np521_uint1 x249; + uint32_t x250; + fiat_np521_uint1 x251; + uint32_t x252; + uint32_t x253; + uint32_t x254; + uint32_t x255; + uint32_t x256; + uint32_t x257; + uint32_t x258; + uint32_t x259; + uint32_t x260; + uint32_t x261; + uint32_t x262; + uint32_t x263; + uint32_t x264; + uint32_t x265; + uint32_t x266; + uint32_t x267; + uint32_t x268; + fiat_np521_uint1 x269; + uint32_t x270; + uint32_t x271; + uint32_t x272; + uint32_t x273; + uint32_t x274; + uint32_t x275; + uint32_t x276; + uint32_t x277; + uint32_t x278; + uint32_t x279; + uint32_t x280; + uint32_t x281; + uint32_t x282; + uint32_t x283; + uint32_t x284; + uint32_t x285; + uint32_t x286; + uint32_t x287; + uint32_t x288; + fiat_np521_uint1 x289; + uint32_t x290; + fiat_np521_uint1 x291; + uint32_t x292; + fiat_np521_uint1 x293; + uint32_t x294; + fiat_np521_uint1 x295; + uint32_t x296; + fiat_np521_uint1 x297; + uint32_t x298; + fiat_np521_uint1 x299; + uint32_t x300; + fiat_np521_uint1 x301; + uint32_t x302; + fiat_np521_uint1 x303; + uint32_t x304; + fiat_np521_uint1 x305; + uint32_t x306; + fiat_np521_uint1 x307; + uint32_t x308; + fiat_np521_uint1 x309; + uint32_t x310; + fiat_np521_uint1 x311; + uint32_t x312; + fiat_np521_uint1 x313; + uint32_t x314; + fiat_np521_uint1 x315; + uint32_t x316; + fiat_np521_uint1 x317; + uint32_t x318; + fiat_np521_uint1 x319; + uint32_t x320; + fiat_np521_uint1 x321; + uint32_t x322; + fiat_np521_uint1 x323; + uint32_t x324; + uint32_t x325; + uint32_t x326; + uint32_t x327; + uint32_t x328; + uint32_t x329; + uint32_t x330; + uint32_t x331; + uint32_t x332; + uint32_t x333; + uint32_t x334; + uint32_t x335; + uint32_t x336; + uint32_t x337; + uint32_t x338; + uint32_t x339; + uint32_t x340; + uint32_t x341; + fiat_np521_uint1 x342; + uint32_t x343; + fiat_np521_uint1 x344; + uint32_t x345; + fiat_np521_uint1 x346; + uint32_t x347; + fiat_np521_uint1 x348; + uint32_t x349; + fiat_np521_uint1 x350; + uint32_t x351; + fiat_np521_uint1 x352; + uint32_t x353; + fiat_np521_uint1 x354; + uint32_t x355; + fiat_np521_uint1 x356; + uint32_t x357; + fiat_np521_uint1 x358; + uint32_t x359; + fiat_np521_uint1 x360; + uint32_t x361; + fiat_np521_uint1 x362; + uint32_t x363; + fiat_np521_uint1 x364; + uint32_t x365; + fiat_np521_uint1 x366; + uint32_t x367; + fiat_np521_uint1 x368; + uint32_t x369; + fiat_np521_uint1 x370; + uint32_t x371; + fiat_np521_uint1 x372; + uint32_t x373; + fiat_np521_uint1 x374; + uint32_t x375; + fiat_np521_uint1 x376; + uint32_t x377; + fiat_np521_uint1 x378; + uint32_t x379; + fiat_np521_uint1 x380; + uint32_t x381; + fiat_np521_uint1 x382; + uint32_t x383; + fiat_np521_uint1 x384; + uint32_t x385; + fiat_np521_uint1 x386; + uint32_t x387; + fiat_np521_uint1 x388; + uint32_t x389; + fiat_np521_uint1 x390; + uint32_t x391; + fiat_np521_uint1 x392; + uint32_t x393; + fiat_np521_uint1 x394; + uint32_t x395; + fiat_np521_uint1 x396; + uint32_t x397; + fiat_np521_uint1 x398; + uint32_t x399; + fiat_np521_uint1 x400; + uint32_t x401; + fiat_np521_uint1 x402; + uint32_t x403; + fiat_np521_uint1 x404; + uint32_t x405; + fiat_np521_uint1 x406; + uint32_t x407; + fiat_np521_uint1 x408; + uint32_t x409; + fiat_np521_uint1 x410; + uint32_t x411; + fiat_np521_uint1 x412; + uint32_t x413; + uint32_t x414; + uint32_t x415; + uint32_t x416; + uint32_t x417; + uint32_t x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + uint32_t x422; + uint32_t x423; + uint32_t x424; + uint32_t x425; + uint32_t x426; + uint32_t x427; + uint32_t x428; + uint32_t x429; + uint32_t x430; + uint32_t x431; + uint32_t x432; + uint32_t x433; + uint32_t x434; + uint32_t x435; + uint32_t x436; + uint32_t x437; + uint32_t x438; + uint32_t x439; + uint32_t x440; + uint32_t x441; + uint32_t x442; + uint32_t x443; + uint32_t x444; + uint32_t x445; + uint32_t x446; + uint32_t x447; + uint32_t x448; + uint32_t x449; + uint32_t x450; + uint32_t x451; + uint32_t x452; + uint32_t x453; + uint32_t x454; + uint32_t x455; + uint32_t x456; + uint32_t x457; + uint32_t x458; + uint32_t x459; + uint32_t x460; + uint32_t x461; + uint32_t x462; + uint32_t x463; + uint32_t x464; + fiat_np521_addcarryx_u32(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_np521_uint1)((fiat_np521_uint1)(x1 >> 31) & (fiat_np521_uint1)((arg3[0]) & 0x1)); + fiat_np521_addcarryx_u32(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_np521_cmovznz_u32(&x6, x3, arg1, x4); + fiat_np521_cmovznz_u32(&x7, x3, (arg2[0]), (arg3[0])); + fiat_np521_cmovznz_u32(&x8, x3, (arg2[1]), (arg3[1])); + fiat_np521_cmovznz_u32(&x9, x3, (arg2[2]), (arg3[2])); + fiat_np521_cmovznz_u32(&x10, x3, (arg2[3]), (arg3[3])); + fiat_np521_cmovznz_u32(&x11, x3, (arg2[4]), (arg3[4])); + fiat_np521_cmovznz_u32(&x12, x3, (arg2[5]), (arg3[5])); + fiat_np521_cmovznz_u32(&x13, x3, (arg2[6]), (arg3[6])); + fiat_np521_cmovznz_u32(&x14, x3, (arg2[7]), (arg3[7])); + fiat_np521_cmovznz_u32(&x15, x3, (arg2[8]), (arg3[8])); + fiat_np521_cmovznz_u32(&x16, x3, (arg2[9]), (arg3[9])); + fiat_np521_cmovznz_u32(&x17, x3, (arg2[10]), (arg3[10])); + fiat_np521_cmovznz_u32(&x18, x3, (arg2[11]), (arg3[11])); + fiat_np521_cmovznz_u32(&x19, x3, (arg2[12]), (arg3[12])); + fiat_np521_cmovznz_u32(&x20, x3, (arg2[13]), (arg3[13])); + fiat_np521_cmovznz_u32(&x21, x3, (arg2[14]), (arg3[14])); + fiat_np521_cmovznz_u32(&x22, x3, (arg2[15]), (arg3[15])); + fiat_np521_cmovznz_u32(&x23, x3, (arg2[16]), (arg3[16])); + fiat_np521_cmovznz_u32(&x24, x3, (arg2[17]), (arg3[17])); + fiat_np521_addcarryx_u32(&x25, &x26, 0x0, 0x1, (~(arg2[0]))); + fiat_np521_addcarryx_u32(&x27, &x28, x26, 0x0, (~(arg2[1]))); + fiat_np521_addcarryx_u32(&x29, &x30, x28, 0x0, (~(arg2[2]))); + fiat_np521_addcarryx_u32(&x31, &x32, x30, 0x0, (~(arg2[3]))); + fiat_np521_addcarryx_u32(&x33, &x34, x32, 0x0, (~(arg2[4]))); + fiat_np521_addcarryx_u32(&x35, &x36, x34, 0x0, (~(arg2[5]))); + fiat_np521_addcarryx_u32(&x37, &x38, x36, 0x0, (~(arg2[6]))); + fiat_np521_addcarryx_u32(&x39, &x40, x38, 0x0, (~(arg2[7]))); + fiat_np521_addcarryx_u32(&x41, &x42, x40, 0x0, (~(arg2[8]))); + fiat_np521_addcarryx_u32(&x43, &x44, x42, 0x0, (~(arg2[9]))); + fiat_np521_addcarryx_u32(&x45, &x46, x44, 0x0, (~(arg2[10]))); + fiat_np521_addcarryx_u32(&x47, &x48, x46, 0x0, (~(arg2[11]))); + fiat_np521_addcarryx_u32(&x49, &x50, x48, 0x0, (~(arg2[12]))); + fiat_np521_addcarryx_u32(&x51, &x52, x50, 0x0, (~(arg2[13]))); + fiat_np521_addcarryx_u32(&x53, &x54, x52, 0x0, (~(arg2[14]))); + fiat_np521_addcarryx_u32(&x55, &x56, x54, 0x0, (~(arg2[15]))); + fiat_np521_addcarryx_u32(&x57, &x58, x56, 0x0, (~(arg2[16]))); + fiat_np521_addcarryx_u32(&x59, &x60, x58, 0x0, (~(arg2[17]))); + fiat_np521_cmovznz_u32(&x61, x3, (arg3[0]), x25); + fiat_np521_cmovznz_u32(&x62, x3, (arg3[1]), x27); + fiat_np521_cmovznz_u32(&x63, x3, (arg3[2]), x29); + fiat_np521_cmovznz_u32(&x64, x3, (arg3[3]), x31); + fiat_np521_cmovznz_u32(&x65, x3, (arg3[4]), x33); + fiat_np521_cmovznz_u32(&x66, x3, (arg3[5]), x35); + fiat_np521_cmovznz_u32(&x67, x3, (arg3[6]), x37); + fiat_np521_cmovznz_u32(&x68, x3, (arg3[7]), x39); + fiat_np521_cmovznz_u32(&x69, x3, (arg3[8]), x41); + fiat_np521_cmovznz_u32(&x70, x3, (arg3[9]), x43); + fiat_np521_cmovznz_u32(&x71, x3, (arg3[10]), x45); + fiat_np521_cmovznz_u32(&x72, x3, (arg3[11]), x47); + fiat_np521_cmovznz_u32(&x73, x3, (arg3[12]), x49); + fiat_np521_cmovznz_u32(&x74, x3, (arg3[13]), x51); + fiat_np521_cmovznz_u32(&x75, x3, (arg3[14]), x53); + fiat_np521_cmovznz_u32(&x76, x3, (arg3[15]), x55); + fiat_np521_cmovznz_u32(&x77, x3, (arg3[16]), x57); + fiat_np521_cmovznz_u32(&x78, x3, (arg3[17]), x59); + fiat_np521_cmovznz_u32(&x79, x3, (arg4[0]), (arg5[0])); + fiat_np521_cmovznz_u32(&x80, x3, (arg4[1]), (arg5[1])); + fiat_np521_cmovznz_u32(&x81, x3, (arg4[2]), (arg5[2])); + fiat_np521_cmovznz_u32(&x82, x3, (arg4[3]), (arg5[3])); + fiat_np521_cmovznz_u32(&x83, x3, (arg4[4]), (arg5[4])); + fiat_np521_cmovznz_u32(&x84, x3, (arg4[5]), (arg5[5])); + fiat_np521_cmovznz_u32(&x85, x3, (arg4[6]), (arg5[6])); + fiat_np521_cmovznz_u32(&x86, x3, (arg4[7]), (arg5[7])); + fiat_np521_cmovznz_u32(&x87, x3, (arg4[8]), (arg5[8])); + fiat_np521_cmovznz_u32(&x88, x3, (arg4[9]), (arg5[9])); + fiat_np521_cmovznz_u32(&x89, x3, (arg4[10]), (arg5[10])); + fiat_np521_cmovznz_u32(&x90, x3, (arg4[11]), (arg5[11])); + fiat_np521_cmovznz_u32(&x91, x3, (arg4[12]), (arg5[12])); + fiat_np521_cmovznz_u32(&x92, x3, (arg4[13]), (arg5[13])); + fiat_np521_cmovznz_u32(&x93, x3, (arg4[14]), (arg5[14])); + fiat_np521_cmovznz_u32(&x94, x3, (arg4[15]), (arg5[15])); + fiat_np521_cmovznz_u32(&x95, x3, (arg4[16]), (arg5[16])); + fiat_np521_addcarryx_u32(&x96, &x97, 0x0, x79, x79); + fiat_np521_addcarryx_u32(&x98, &x99, x97, x80, x80); + fiat_np521_addcarryx_u32(&x100, &x101, x99, x81, x81); + fiat_np521_addcarryx_u32(&x102, &x103, x101, x82, x82); + fiat_np521_addcarryx_u32(&x104, &x105, x103, x83, x83); + fiat_np521_addcarryx_u32(&x106, &x107, x105, x84, x84); + fiat_np521_addcarryx_u32(&x108, &x109, x107, x85, x85); + fiat_np521_addcarryx_u32(&x110, &x111, x109, x86, x86); + fiat_np521_addcarryx_u32(&x112, &x113, x111, x87, x87); + fiat_np521_addcarryx_u32(&x114, &x115, x113, x88, x88); + fiat_np521_addcarryx_u32(&x116, &x117, x115, x89, x89); + fiat_np521_addcarryx_u32(&x118, &x119, x117, x90, x90); + fiat_np521_addcarryx_u32(&x120, &x121, x119, x91, x91); + fiat_np521_addcarryx_u32(&x122, &x123, x121, x92, x92); + fiat_np521_addcarryx_u32(&x124, &x125, x123, x93, x93); + fiat_np521_addcarryx_u32(&x126, &x127, x125, x94, x94); + fiat_np521_addcarryx_u32(&x128, &x129, x127, x95, x95); + fiat_np521_subborrowx_u32(&x130, &x131, 0x0, x96, UINT32_C(0x91386409)); + fiat_np521_subborrowx_u32(&x132, &x133, x131, x98, UINT32_C(0xbb6fb71e)); + fiat_np521_subborrowx_u32(&x134, &x135, x133, x100, UINT32_C(0x899c47ae)); + fiat_np521_subborrowx_u32(&x136, &x137, x135, x102, UINT32_C(0x3bb5c9b8)); + fiat_np521_subborrowx_u32(&x138, &x139, x137, x104, UINT32_C(0xf709a5d0)); + fiat_np521_subborrowx_u32(&x140, &x141, x139, x106, UINT32_C(0x7fcc0148)); + fiat_np521_subborrowx_u32(&x142, &x143, x141, x108, UINT32_C(0xbf2f966b)); + fiat_np521_subborrowx_u32(&x144, &x145, x143, x110, UINT32_C(0x51868783)); + fiat_np521_subborrowx_u32(&x146, &x147, x145, x112, UINT32_C(0xfffffffa)); + fiat_np521_subborrowx_u32(&x148, &x149, x147, x114, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x150, &x151, x149, x116, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x152, &x153, x151, x118, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x154, &x155, x153, x120, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x156, &x157, x155, x122, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x158, &x159, x157, x124, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x160, &x161, x159, x126, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x162, &x163, x161, x128, UINT16_C(0x1ff)); + fiat_np521_subborrowx_u32(&x164, &x165, x163, x129, 0x0); + x166 = (arg4[16]); + x167 = (arg4[15]); + x168 = (arg4[14]); + x169 = (arg4[13]); + x170 = (arg4[12]); + x171 = (arg4[11]); + x172 = (arg4[10]); + x173 = (arg4[9]); + x174 = (arg4[8]); + x175 = (arg4[7]); + x176 = (arg4[6]); + x177 = (arg4[5]); + x178 = (arg4[4]); + x179 = (arg4[3]); + x180 = (arg4[2]); + x181 = (arg4[1]); + x182 = (arg4[0]); + fiat_np521_subborrowx_u32(&x183, &x184, 0x0, 0x0, x182); + fiat_np521_subborrowx_u32(&x185, &x186, x184, 0x0, x181); + fiat_np521_subborrowx_u32(&x187, &x188, x186, 0x0, x180); + fiat_np521_subborrowx_u32(&x189, &x190, x188, 0x0, x179); + fiat_np521_subborrowx_u32(&x191, &x192, x190, 0x0, x178); + fiat_np521_subborrowx_u32(&x193, &x194, x192, 0x0, x177); + fiat_np521_subborrowx_u32(&x195, &x196, x194, 0x0, x176); + fiat_np521_subborrowx_u32(&x197, &x198, x196, 0x0, x175); + fiat_np521_subborrowx_u32(&x199, &x200, x198, 0x0, x174); + fiat_np521_subborrowx_u32(&x201, &x202, x200, 0x0, x173); + fiat_np521_subborrowx_u32(&x203, &x204, x202, 0x0, x172); + fiat_np521_subborrowx_u32(&x205, &x206, x204, 0x0, x171); + fiat_np521_subborrowx_u32(&x207, &x208, x206, 0x0, x170); + fiat_np521_subborrowx_u32(&x209, &x210, x208, 0x0, x169); + fiat_np521_subborrowx_u32(&x211, &x212, x210, 0x0, x168); + fiat_np521_subborrowx_u32(&x213, &x214, x212, 0x0, x167); + fiat_np521_subborrowx_u32(&x215, &x216, x214, 0x0, x166); + fiat_np521_cmovznz_u32(&x217, x216, 0x0, UINT32_C(0xffffffff)); + fiat_np521_addcarryx_u32(&x218, &x219, 0x0, x183, (x217 & UINT32_C(0x91386409))); + fiat_np521_addcarryx_u32(&x220, &x221, x219, x185, (x217 & UINT32_C(0xbb6fb71e))); + fiat_np521_addcarryx_u32(&x222, &x223, x221, x187, (x217 & UINT32_C(0x899c47ae))); + fiat_np521_addcarryx_u32(&x224, &x225, x223, x189, (x217 & UINT32_C(0x3bb5c9b8))); + fiat_np521_addcarryx_u32(&x226, &x227, x225, x191, (x217 & UINT32_C(0xf709a5d0))); + fiat_np521_addcarryx_u32(&x228, &x229, x227, x193, (x217 & UINT32_C(0x7fcc0148))); + fiat_np521_addcarryx_u32(&x230, &x231, x229, x195, (x217 & UINT32_C(0xbf2f966b))); + fiat_np521_addcarryx_u32(&x232, &x233, x231, x197, (x217 & UINT32_C(0x51868783))); + fiat_np521_addcarryx_u32(&x234, &x235, x233, x199, (x217 & UINT32_C(0xfffffffa))); + fiat_np521_addcarryx_u32(&x236, &x237, x235, x201, x217); + fiat_np521_addcarryx_u32(&x238, &x239, x237, x203, x217); + fiat_np521_addcarryx_u32(&x240, &x241, x239, x205, x217); + fiat_np521_addcarryx_u32(&x242, &x243, x241, x207, x217); + fiat_np521_addcarryx_u32(&x244, &x245, x243, x209, x217); + fiat_np521_addcarryx_u32(&x246, &x247, x245, x211, x217); + fiat_np521_addcarryx_u32(&x248, &x249, x247, x213, x217); + fiat_np521_addcarryx_u32(&x250, &x251, x249, x215, (x217 & UINT16_C(0x1ff))); + fiat_np521_cmovznz_u32(&x252, x3, (arg5[0]), x218); + fiat_np521_cmovznz_u32(&x253, x3, (arg5[1]), x220); + fiat_np521_cmovznz_u32(&x254, x3, (arg5[2]), x222); + fiat_np521_cmovznz_u32(&x255, x3, (arg5[3]), x224); + fiat_np521_cmovznz_u32(&x256, x3, (arg5[4]), x226); + fiat_np521_cmovznz_u32(&x257, x3, (arg5[5]), x228); + fiat_np521_cmovznz_u32(&x258, x3, (arg5[6]), x230); + fiat_np521_cmovznz_u32(&x259, x3, (arg5[7]), x232); + fiat_np521_cmovznz_u32(&x260, x3, (arg5[8]), x234); + fiat_np521_cmovznz_u32(&x261, x3, (arg5[9]), x236); + fiat_np521_cmovznz_u32(&x262, x3, (arg5[10]), x238); + fiat_np521_cmovznz_u32(&x263, x3, (arg5[11]), x240); + fiat_np521_cmovznz_u32(&x264, x3, (arg5[12]), x242); + fiat_np521_cmovznz_u32(&x265, x3, (arg5[13]), x244); + fiat_np521_cmovznz_u32(&x266, x3, (arg5[14]), x246); + fiat_np521_cmovznz_u32(&x267, x3, (arg5[15]), x248); + fiat_np521_cmovznz_u32(&x268, x3, (arg5[16]), x250); + x269 = (fiat_np521_uint1)(x61 & 0x1); + fiat_np521_cmovznz_u32(&x270, x269, 0x0, x7); + fiat_np521_cmovznz_u32(&x271, x269, 0x0, x8); + fiat_np521_cmovznz_u32(&x272, x269, 0x0, x9); + fiat_np521_cmovznz_u32(&x273, x269, 0x0, x10); + fiat_np521_cmovznz_u32(&x274, x269, 0x0, x11); + fiat_np521_cmovznz_u32(&x275, x269, 0x0, x12); + fiat_np521_cmovznz_u32(&x276, x269, 0x0, x13); + fiat_np521_cmovznz_u32(&x277, x269, 0x0, x14); + fiat_np521_cmovznz_u32(&x278, x269, 0x0, x15); + fiat_np521_cmovznz_u32(&x279, x269, 0x0, x16); + fiat_np521_cmovznz_u32(&x280, x269, 0x0, x17); + fiat_np521_cmovznz_u32(&x281, x269, 0x0, x18); + fiat_np521_cmovznz_u32(&x282, x269, 0x0, x19); + fiat_np521_cmovznz_u32(&x283, x269, 0x0, x20); + fiat_np521_cmovznz_u32(&x284, x269, 0x0, x21); + fiat_np521_cmovznz_u32(&x285, x269, 0x0, x22); + fiat_np521_cmovznz_u32(&x286, x269, 0x0, x23); + fiat_np521_cmovznz_u32(&x287, x269, 0x0, x24); + fiat_np521_addcarryx_u32(&x288, &x289, 0x0, x61, x270); + fiat_np521_addcarryx_u32(&x290, &x291, x289, x62, x271); + fiat_np521_addcarryx_u32(&x292, &x293, x291, x63, x272); + fiat_np521_addcarryx_u32(&x294, &x295, x293, x64, x273); + fiat_np521_addcarryx_u32(&x296, &x297, x295, x65, x274); + fiat_np521_addcarryx_u32(&x298, &x299, x297, x66, x275); + fiat_np521_addcarryx_u32(&x300, &x301, x299, x67, x276); + fiat_np521_addcarryx_u32(&x302, &x303, x301, x68, x277); + fiat_np521_addcarryx_u32(&x304, &x305, x303, x69, x278); + fiat_np521_addcarryx_u32(&x306, &x307, x305, x70, x279); + fiat_np521_addcarryx_u32(&x308, &x309, x307, x71, x280); + fiat_np521_addcarryx_u32(&x310, &x311, x309, x72, x281); + fiat_np521_addcarryx_u32(&x312, &x313, x311, x73, x282); + fiat_np521_addcarryx_u32(&x314, &x315, x313, x74, x283); + fiat_np521_addcarryx_u32(&x316, &x317, x315, x75, x284); + fiat_np521_addcarryx_u32(&x318, &x319, x317, x76, x285); + fiat_np521_addcarryx_u32(&x320, &x321, x319, x77, x286); + fiat_np521_addcarryx_u32(&x322, &x323, x321, x78, x287); + fiat_np521_cmovznz_u32(&x324, x269, 0x0, x79); + fiat_np521_cmovznz_u32(&x325, x269, 0x0, x80); + fiat_np521_cmovznz_u32(&x326, x269, 0x0, x81); + fiat_np521_cmovznz_u32(&x327, x269, 0x0, x82); + fiat_np521_cmovznz_u32(&x328, x269, 0x0, x83); + fiat_np521_cmovznz_u32(&x329, x269, 0x0, x84); + fiat_np521_cmovznz_u32(&x330, x269, 0x0, x85); + fiat_np521_cmovznz_u32(&x331, x269, 0x0, x86); + fiat_np521_cmovznz_u32(&x332, x269, 0x0, x87); + fiat_np521_cmovznz_u32(&x333, x269, 0x0, x88); + fiat_np521_cmovznz_u32(&x334, x269, 0x0, x89); + fiat_np521_cmovznz_u32(&x335, x269, 0x0, x90); + fiat_np521_cmovznz_u32(&x336, x269, 0x0, x91); + fiat_np521_cmovznz_u32(&x337, x269, 0x0, x92); + fiat_np521_cmovznz_u32(&x338, x269, 0x0, x93); + fiat_np521_cmovznz_u32(&x339, x269, 0x0, x94); + fiat_np521_cmovznz_u32(&x340, x269, 0x0, x95); + fiat_np521_addcarryx_u32(&x341, &x342, 0x0, x252, x324); + fiat_np521_addcarryx_u32(&x343, &x344, x342, x253, x325); + fiat_np521_addcarryx_u32(&x345, &x346, x344, x254, x326); + fiat_np521_addcarryx_u32(&x347, &x348, x346, x255, x327); + fiat_np521_addcarryx_u32(&x349, &x350, x348, x256, x328); + fiat_np521_addcarryx_u32(&x351, &x352, x350, x257, x329); + fiat_np521_addcarryx_u32(&x353, &x354, x352, x258, x330); + fiat_np521_addcarryx_u32(&x355, &x356, x354, x259, x331); + fiat_np521_addcarryx_u32(&x357, &x358, x356, x260, x332); + fiat_np521_addcarryx_u32(&x359, &x360, x358, x261, x333); + fiat_np521_addcarryx_u32(&x361, &x362, x360, x262, x334); + fiat_np521_addcarryx_u32(&x363, &x364, x362, x263, x335); + fiat_np521_addcarryx_u32(&x365, &x366, x364, x264, x336); + fiat_np521_addcarryx_u32(&x367, &x368, x366, x265, x337); + fiat_np521_addcarryx_u32(&x369, &x370, x368, x266, x338); + fiat_np521_addcarryx_u32(&x371, &x372, x370, x267, x339); + fiat_np521_addcarryx_u32(&x373, &x374, x372, x268, x340); + fiat_np521_subborrowx_u32(&x375, &x376, 0x0, x341, UINT32_C(0x91386409)); + fiat_np521_subborrowx_u32(&x377, &x378, x376, x343, UINT32_C(0xbb6fb71e)); + fiat_np521_subborrowx_u32(&x379, &x380, x378, x345, UINT32_C(0x899c47ae)); + fiat_np521_subborrowx_u32(&x381, &x382, x380, x347, UINT32_C(0x3bb5c9b8)); + fiat_np521_subborrowx_u32(&x383, &x384, x382, x349, UINT32_C(0xf709a5d0)); + fiat_np521_subborrowx_u32(&x385, &x386, x384, x351, UINT32_C(0x7fcc0148)); + fiat_np521_subborrowx_u32(&x387, &x388, x386, x353, UINT32_C(0xbf2f966b)); + fiat_np521_subborrowx_u32(&x389, &x390, x388, x355, UINT32_C(0x51868783)); + fiat_np521_subborrowx_u32(&x391, &x392, x390, x357, UINT32_C(0xfffffffa)); + fiat_np521_subborrowx_u32(&x393, &x394, x392, x359, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x395, &x396, x394, x361, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x397, &x398, x396, x363, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x399, &x400, x398, x365, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x401, &x402, x400, x367, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x403, &x404, x402, x369, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x405, &x406, x404, x371, UINT32_C(0xffffffff)); + fiat_np521_subborrowx_u32(&x407, &x408, x406, x373, UINT16_C(0x1ff)); + fiat_np521_subborrowx_u32(&x409, &x410, x408, x374, 0x0); + fiat_np521_addcarryx_u32(&x411, &x412, 0x0, x6, 0x1); + x413 = ((x288 >> 1) | ((x290 << 31) & UINT32_C(0xffffffff))); + x414 = ((x290 >> 1) | ((x292 << 31) & UINT32_C(0xffffffff))); + x415 = ((x292 >> 1) | ((x294 << 31) & UINT32_C(0xffffffff))); + x416 = ((x294 >> 1) | ((x296 << 31) & UINT32_C(0xffffffff))); + x417 = ((x296 >> 1) | ((x298 << 31) & UINT32_C(0xffffffff))); + x418 = ((x298 >> 1) | ((x300 << 31) & UINT32_C(0xffffffff))); + x419 = ((x300 >> 1) | ((x302 << 31) & UINT32_C(0xffffffff))); + x420 = ((x302 >> 1) | ((x304 << 31) & UINT32_C(0xffffffff))); + x421 = ((x304 >> 1) | ((x306 << 31) & UINT32_C(0xffffffff))); + x422 = ((x306 >> 1) | ((x308 << 31) & UINT32_C(0xffffffff))); + x423 = ((x308 >> 1) | ((x310 << 31) & UINT32_C(0xffffffff))); + x424 = ((x310 >> 1) | ((x312 << 31) & UINT32_C(0xffffffff))); + x425 = ((x312 >> 1) | ((x314 << 31) & UINT32_C(0xffffffff))); + x426 = ((x314 >> 1) | ((x316 << 31) & UINT32_C(0xffffffff))); + x427 = ((x316 >> 1) | ((x318 << 31) & UINT32_C(0xffffffff))); + x428 = ((x318 >> 1) | ((x320 << 31) & UINT32_C(0xffffffff))); + x429 = ((x320 >> 1) | ((x322 << 31) & UINT32_C(0xffffffff))); + x430 = ((x322 & UINT32_C(0x80000000)) | (x322 >> 1)); + fiat_np521_cmovznz_u32(&x431, x165, x130, x96); + fiat_np521_cmovznz_u32(&x432, x165, x132, x98); + fiat_np521_cmovznz_u32(&x433, x165, x134, x100); + fiat_np521_cmovznz_u32(&x434, x165, x136, x102); + fiat_np521_cmovznz_u32(&x435, x165, x138, x104); + fiat_np521_cmovznz_u32(&x436, x165, x140, x106); + fiat_np521_cmovznz_u32(&x437, x165, x142, x108); + fiat_np521_cmovznz_u32(&x438, x165, x144, x110); + fiat_np521_cmovznz_u32(&x439, x165, x146, x112); + fiat_np521_cmovznz_u32(&x440, x165, x148, x114); + fiat_np521_cmovznz_u32(&x441, x165, x150, x116); + fiat_np521_cmovznz_u32(&x442, x165, x152, x118); + fiat_np521_cmovznz_u32(&x443, x165, x154, x120); + fiat_np521_cmovznz_u32(&x444, x165, x156, x122); + fiat_np521_cmovznz_u32(&x445, x165, x158, x124); + fiat_np521_cmovznz_u32(&x446, x165, x160, x126); + fiat_np521_cmovznz_u32(&x447, x165, x162, x128); + fiat_np521_cmovznz_u32(&x448, x410, x375, x341); + fiat_np521_cmovznz_u32(&x449, x410, x377, x343); + fiat_np521_cmovznz_u32(&x450, x410, x379, x345); + fiat_np521_cmovznz_u32(&x451, x410, x381, x347); + fiat_np521_cmovznz_u32(&x452, x410, x383, x349); + fiat_np521_cmovznz_u32(&x453, x410, x385, x351); + fiat_np521_cmovznz_u32(&x454, x410, x387, x353); + fiat_np521_cmovznz_u32(&x455, x410, x389, x355); + fiat_np521_cmovznz_u32(&x456, x410, x391, x357); + fiat_np521_cmovznz_u32(&x457, x410, x393, x359); + fiat_np521_cmovznz_u32(&x458, x410, x395, x361); + fiat_np521_cmovznz_u32(&x459, x410, x397, x363); + fiat_np521_cmovznz_u32(&x460, x410, x399, x365); + fiat_np521_cmovznz_u32(&x461, x410, x401, x367); + fiat_np521_cmovznz_u32(&x462, x410, x403, x369); + fiat_np521_cmovznz_u32(&x463, x410, x405, x371); + fiat_np521_cmovznz_u32(&x464, x410, x407, x373); + *out1 = x411; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out2[5] = x12; + out2[6] = x13; + out2[7] = x14; + out2[8] = x15; + out2[9] = x16; + out2[10] = x17; + out2[11] = x18; + out2[12] = x19; + out2[13] = x20; + out2[14] = x21; + out2[15] = x22; + out2[16] = x23; + out2[17] = x24; + out3[0] = x413; + out3[1] = x414; + out3[2] = x415; + out3[3] = x416; + out3[4] = x417; + out3[5] = x418; + out3[6] = x419; + out3[7] = x420; + out3[8] = x421; + out3[9] = x422; + out3[10] = x423; + out3[11] = x424; + out3[12] = x425; + out3[13] = x426; + out3[14] = x427; + out3[15] = x428; + out3[16] = x429; + out3[17] = x430; + out4[0] = x431; + out4[1] = x432; + out4[2] = x433; + out4[3] = x434; + out4[4] = x435; + out4[5] = x436; + out4[6] = x437; + out4[7] = x438; + out4[8] = x439; + out4[9] = x440; + out4[10] = x441; + out4[11] = x442; + out4[12] = x443; + out4[13] = x444; + out4[14] = x445; + out4[15] = x446; + out4[16] = x447; + out5[0] = x448; + out5[1] = x449; + out5[2] = x450; + out5[3] = x451; + out5[4] = x452; + out5[5] = x453; + out5[6] = x454; + out5[7] = x455; + out5[8] = x456; + out5[9] = x457; + out5[10] = x458; + out5[11] = x459; + out5[12] = x460; + out5[13] = x461; + out5[14] = x462; + out5[15] = x463; + out5[16] = x464; +} + +/* + * The function fiat_np521_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..65] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0x1ff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x1]] + */ +static void fiat_np521_to_bytes(uint8_t out1[66], const uint32_t arg1[17]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint8_t x18; + uint32_t x19; + uint8_t x20; + uint32_t x21; + uint8_t x22; + uint8_t x23; + uint8_t x24; + uint32_t x25; + uint8_t x26; + uint32_t x27; + uint8_t x28; + uint8_t x29; + uint8_t x30; + uint32_t x31; + uint8_t x32; + uint32_t x33; + uint8_t x34; + uint8_t x35; + uint8_t x36; + uint32_t x37; + uint8_t x38; + uint32_t x39; + uint8_t x40; + uint8_t x41; + uint8_t x42; + uint32_t x43; + uint8_t x44; + uint32_t x45; + uint8_t x46; + uint8_t x47; + uint8_t x48; + uint32_t x49; + uint8_t x50; + uint32_t x51; + uint8_t x52; + uint8_t x53; + uint8_t x54; + uint32_t x55; + uint8_t x56; + uint32_t x57; + uint8_t x58; + uint8_t x59; + uint8_t x60; + uint32_t x61; + uint8_t x62; + uint32_t x63; + uint8_t x64; + uint8_t x65; + uint8_t x66; + uint32_t x67; + uint8_t x68; + uint32_t x69; + uint8_t x70; + uint8_t x71; + uint8_t x72; + uint32_t x73; + uint8_t x74; + uint32_t x75; + uint8_t x76; + uint8_t x77; + uint8_t x78; + uint32_t x79; + uint8_t x80; + uint32_t x81; + uint8_t x82; + uint8_t x83; + uint8_t x84; + uint32_t x85; + uint8_t x86; + uint32_t x87; + uint8_t x88; + uint8_t x89; + uint8_t x90; + uint32_t x91; + uint8_t x92; + uint32_t x93; + uint8_t x94; + uint8_t x95; + uint8_t x96; + uint32_t x97; + uint8_t x98; + uint32_t x99; + uint8_t x100; + uint8_t x101; + uint8_t x102; + uint32_t x103; + uint8_t x104; + uint32_t x105; + uint8_t x106; + uint8_t x107; + uint8_t x108; + uint32_t x109; + uint8_t x110; + uint32_t x111; + uint8_t x112; + uint8_t x113; + uint8_t x114; + fiat_np521_uint1 x115; + x1 = (arg1[16]); + x2 = (arg1[15]); + x3 = (arg1[14]); + x4 = (arg1[13]); + x5 = (arg1[12]); + x6 = (arg1[11]); + x7 = (arg1[10]); + x8 = (arg1[9]); + x9 = (arg1[8]); + x10 = (arg1[7]); + x11 = (arg1[6]); + x12 = (arg1[5]); + x13 = (arg1[4]); + x14 = (arg1[3]); + x15 = (arg1[2]); + x16 = (arg1[1]); + x17 = (arg1[0]); + x18 = (uint8_t)(x17 & UINT8_C(0xff)); + x19 = (x17 >> 8); + x20 = (uint8_t)(x19 & UINT8_C(0xff)); + x21 = (x19 >> 8); + x22 = (uint8_t)(x21 & UINT8_C(0xff)); + x23 = (uint8_t)(x21 >> 8); + x24 = (uint8_t)(x16 & UINT8_C(0xff)); + x25 = (x16 >> 8); + x26 = (uint8_t)(x25 & UINT8_C(0xff)); + x27 = (x25 >> 8); + x28 = (uint8_t)(x27 & UINT8_C(0xff)); + x29 = (uint8_t)(x27 >> 8); + x30 = (uint8_t)(x15 & UINT8_C(0xff)); + x31 = (x15 >> 8); + x32 = (uint8_t)(x31 & UINT8_C(0xff)); + x33 = (x31 >> 8); + x34 = (uint8_t)(x33 & UINT8_C(0xff)); + x35 = (uint8_t)(x33 >> 8); + x36 = (uint8_t)(x14 & UINT8_C(0xff)); + x37 = (x14 >> 8); + x38 = (uint8_t)(x37 & UINT8_C(0xff)); + x39 = (x37 >> 8); + x40 = (uint8_t)(x39 & UINT8_C(0xff)); + x41 = (uint8_t)(x39 >> 8); + x42 = (uint8_t)(x13 & UINT8_C(0xff)); + x43 = (x13 >> 8); + x44 = (uint8_t)(x43 & UINT8_C(0xff)); + x45 = (x43 >> 8); + x46 = (uint8_t)(x45 & UINT8_C(0xff)); + x47 = (uint8_t)(x45 >> 8); + x48 = (uint8_t)(x12 & UINT8_C(0xff)); + x49 = (x12 >> 8); + x50 = (uint8_t)(x49 & UINT8_C(0xff)); + x51 = (x49 >> 8); + x52 = (uint8_t)(x51 & UINT8_C(0xff)); + x53 = (uint8_t)(x51 >> 8); + x54 = (uint8_t)(x11 & UINT8_C(0xff)); + x55 = (x11 >> 8); + x56 = (uint8_t)(x55 & UINT8_C(0xff)); + x57 = (x55 >> 8); + x58 = (uint8_t)(x57 & UINT8_C(0xff)); + x59 = (uint8_t)(x57 >> 8); + x60 = (uint8_t)(x10 & UINT8_C(0xff)); + x61 = (x10 >> 8); + x62 = (uint8_t)(x61 & UINT8_C(0xff)); + x63 = (x61 >> 8); + x64 = (uint8_t)(x63 & UINT8_C(0xff)); + x65 = (uint8_t)(x63 >> 8); + x66 = (uint8_t)(x9 & UINT8_C(0xff)); + x67 = (x9 >> 8); + x68 = (uint8_t)(x67 & UINT8_C(0xff)); + x69 = (x67 >> 8); + x70 = (uint8_t)(x69 & UINT8_C(0xff)); + x71 = (uint8_t)(x69 >> 8); + x72 = (uint8_t)(x8 & UINT8_C(0xff)); + x73 = (x8 >> 8); + x74 = (uint8_t)(x73 & UINT8_C(0xff)); + x75 = (x73 >> 8); + x76 = (uint8_t)(x75 & UINT8_C(0xff)); + x77 = (uint8_t)(x75 >> 8); + x78 = (uint8_t)(x7 & UINT8_C(0xff)); + x79 = (x7 >> 8); + x80 = (uint8_t)(x79 & UINT8_C(0xff)); + x81 = (x79 >> 8); + x82 = (uint8_t)(x81 & UINT8_C(0xff)); + x83 = (uint8_t)(x81 >> 8); + x84 = (uint8_t)(x6 & UINT8_C(0xff)); + x85 = (x6 >> 8); + x86 = (uint8_t)(x85 & UINT8_C(0xff)); + x87 = (x85 >> 8); + x88 = (uint8_t)(x87 & UINT8_C(0xff)); + x89 = (uint8_t)(x87 >> 8); + x90 = (uint8_t)(x5 & UINT8_C(0xff)); + x91 = (x5 >> 8); + x92 = (uint8_t)(x91 & UINT8_C(0xff)); + x93 = (x91 >> 8); + x94 = (uint8_t)(x93 & UINT8_C(0xff)); + x95 = (uint8_t)(x93 >> 8); + x96 = (uint8_t)(x4 & UINT8_C(0xff)); + x97 = (x4 >> 8); + x98 = (uint8_t)(x97 & UINT8_C(0xff)); + x99 = (x97 >> 8); + x100 = (uint8_t)(x99 & UINT8_C(0xff)); + x101 = (uint8_t)(x99 >> 8); + x102 = (uint8_t)(x3 & UINT8_C(0xff)); + x103 = (x3 >> 8); + x104 = (uint8_t)(x103 & UINT8_C(0xff)); + x105 = (x103 >> 8); + x106 = (uint8_t)(x105 & UINT8_C(0xff)); + x107 = (uint8_t)(x105 >> 8); + x108 = (uint8_t)(x2 & UINT8_C(0xff)); + x109 = (x2 >> 8); + x110 = (uint8_t)(x109 & UINT8_C(0xff)); + x111 = (x109 >> 8); + x112 = (uint8_t)(x111 & UINT8_C(0xff)); + x113 = (uint8_t)(x111 >> 8); + x114 = (uint8_t)(x1 & UINT8_C(0xff)); + x115 = (fiat_np521_uint1)(x1 >> 8); + out1[0] = x18; + out1[1] = x20; + out1[2] = x22; + out1[3] = x23; + out1[4] = x24; + out1[5] = x26; + out1[6] = x28; + out1[7] = x29; + out1[8] = x30; + out1[9] = x32; + out1[10] = x34; + out1[11] = x35; + out1[12] = x36; + out1[13] = x38; + out1[14] = x40; + out1[15] = x41; + out1[16] = x42; + out1[17] = x44; + out1[18] = x46; + out1[19] = x47; + out1[20] = x48; + out1[21] = x50; + out1[22] = x52; + out1[23] = x53; + out1[24] = x54; + out1[25] = x56; + out1[26] = x58; + out1[27] = x59; + out1[28] = x60; + out1[29] = x62; + out1[30] = x64; + out1[31] = x65; + out1[32] = x66; + out1[33] = x68; + out1[34] = x70; + out1[35] = x71; + out1[36] = x72; + out1[37] = x74; + out1[38] = x76; + out1[39] = x77; + out1[40] = x78; + out1[41] = x80; + out1[42] = x82; + out1[43] = x83; + out1[44] = x84; + out1[45] = x86; + out1[46] = x88; + out1[47] = x89; + out1[48] = x90; + out1[49] = x92; + out1[50] = x94; + out1[51] = x95; + out1[52] = x96; + out1[53] = x98; + out1[54] = x100; + out1[55] = x101; + out1[56] = x102; + out1[57] = x104; + out1[58] = x106; + out1[59] = x107; + out1[60] = x108; + out1[61] = x110; + out1[62] = x112; + out1[63] = x113; + out1[64] = x114; + out1[65] = x115; +} + +/* + * The function fiat_np521_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x1]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0x1ff]] + */ +static void fiat_np521_from_bytes(uint32_t out1[17], const uint8_t arg1[66]) { + uint32_t x1; + uint8_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint8_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint8_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint8_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint8_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint8_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint8_t x26; + uint32_t x27; + uint32_t x28; + uint32_t x29; + uint8_t x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint8_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint8_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint8_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint8_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint8_t x50; + uint32_t x51; + uint32_t x52; + uint32_t x53; + uint8_t x54; + uint32_t x55; + uint32_t x56; + uint32_t x57; + uint8_t x58; + uint32_t x59; + uint32_t x60; + uint32_t x61; + uint8_t x62; + uint32_t x63; + uint32_t x64; + uint32_t x65; + uint8_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + uint32_t x81; + uint32_t x82; + uint32_t x83; + uint32_t x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + uint32_t x88; + uint32_t x89; + uint32_t x90; + uint32_t x91; + uint32_t x92; + uint32_t x93; + uint32_t x94; + uint32_t x95; + uint32_t x96; + uint32_t x97; + uint32_t x98; + uint32_t x99; + uint32_t x100; + uint32_t x101; + uint32_t x102; + uint32_t x103; + uint32_t x104; + uint32_t x105; + uint32_t x106; + uint32_t x107; + uint32_t x108; + uint32_t x109; + uint32_t x110; + uint32_t x111; + uint32_t x112; + uint32_t x113; + uint32_t x114; + uint32_t x115; + x1 = ((uint32_t)(fiat_np521_uint1)(arg1[65]) << 8); + x2 = (arg1[64]); + x3 = ((uint32_t)(arg1[63]) << 24); + x4 = ((uint32_t)(arg1[62]) << 16); + x5 = ((uint32_t)(arg1[61]) << 8); + x6 = (arg1[60]); + x7 = ((uint32_t)(arg1[59]) << 24); + x8 = ((uint32_t)(arg1[58]) << 16); + x9 = ((uint32_t)(arg1[57]) << 8); + x10 = (arg1[56]); + x11 = ((uint32_t)(arg1[55]) << 24); + x12 = ((uint32_t)(arg1[54]) << 16); + x13 = ((uint32_t)(arg1[53]) << 8); + x14 = (arg1[52]); + x15 = ((uint32_t)(arg1[51]) << 24); + x16 = ((uint32_t)(arg1[50]) << 16); + x17 = ((uint32_t)(arg1[49]) << 8); + x18 = (arg1[48]); + x19 = ((uint32_t)(arg1[47]) << 24); + x20 = ((uint32_t)(arg1[46]) << 16); + x21 = ((uint32_t)(arg1[45]) << 8); + x22 = (arg1[44]); + x23 = ((uint32_t)(arg1[43]) << 24); + x24 = ((uint32_t)(arg1[42]) << 16); + x25 = ((uint32_t)(arg1[41]) << 8); + x26 = (arg1[40]); + x27 = ((uint32_t)(arg1[39]) << 24); + x28 = ((uint32_t)(arg1[38]) << 16); + x29 = ((uint32_t)(arg1[37]) << 8); + x30 = (arg1[36]); + x31 = ((uint32_t)(arg1[35]) << 24); + x32 = ((uint32_t)(arg1[34]) << 16); + x33 = ((uint32_t)(arg1[33]) << 8); + x34 = (arg1[32]); + x35 = ((uint32_t)(arg1[31]) << 24); + x36 = ((uint32_t)(arg1[30]) << 16); + x37 = ((uint32_t)(arg1[29]) << 8); + x38 = (arg1[28]); + x39 = ((uint32_t)(arg1[27]) << 24); + x40 = ((uint32_t)(arg1[26]) << 16); + x41 = ((uint32_t)(arg1[25]) << 8); + x42 = (arg1[24]); + x43 = ((uint32_t)(arg1[23]) << 24); + x44 = ((uint32_t)(arg1[22]) << 16); + x45 = ((uint32_t)(arg1[21]) << 8); + x46 = (arg1[20]); + x47 = ((uint32_t)(arg1[19]) << 24); + x48 = ((uint32_t)(arg1[18]) << 16); + x49 = ((uint32_t)(arg1[17]) << 8); + x50 = (arg1[16]); + x51 = ((uint32_t)(arg1[15]) << 24); + x52 = ((uint32_t)(arg1[14]) << 16); + x53 = ((uint32_t)(arg1[13]) << 8); + x54 = (arg1[12]); + x55 = ((uint32_t)(arg1[11]) << 24); + x56 = ((uint32_t)(arg1[10]) << 16); + x57 = ((uint32_t)(arg1[9]) << 8); + x58 = (arg1[8]); + x59 = ((uint32_t)(arg1[7]) << 24); + x60 = ((uint32_t)(arg1[6]) << 16); + x61 = ((uint32_t)(arg1[5]) << 8); + x62 = (arg1[4]); + x63 = ((uint32_t)(arg1[3]) << 24); + x64 = ((uint32_t)(arg1[2]) << 16); + x65 = ((uint32_t)(arg1[1]) << 8); + x66 = (arg1[0]); + x67 = (x65 + (uint32_t)x66); + x68 = (x64 + x67); + x69 = (x63 + x68); + x70 = (x61 + (uint32_t)x62); + x71 = (x60 + x70); + x72 = (x59 + x71); + x73 = (x57 + (uint32_t)x58); + x74 = (x56 + x73); + x75 = (x55 + x74); + x76 = (x53 + (uint32_t)x54); + x77 = (x52 + x76); + x78 = (x51 + x77); + x79 = (x49 + (uint32_t)x50); + x80 = (x48 + x79); + x81 = (x47 + x80); + x82 = (x45 + (uint32_t)x46); + x83 = (x44 + x82); + x84 = (x43 + x83); + x85 = (x41 + (uint32_t)x42); + x86 = (x40 + x85); + x87 = (x39 + x86); + x88 = (x37 + (uint32_t)x38); + x89 = (x36 + x88); + x90 = (x35 + x89); + x91 = (x33 + (uint32_t)x34); + x92 = (x32 + x91); + x93 = (x31 + x92); + x94 = (x29 + (uint32_t)x30); + x95 = (x28 + x94); + x96 = (x27 + x95); + x97 = (x25 + (uint32_t)x26); + x98 = (x24 + x97); + x99 = (x23 + x98); + x100 = (x21 + (uint32_t)x22); + x101 = (x20 + x100); + x102 = (x19 + x101); + x103 = (x17 + (uint32_t)x18); + x104 = (x16 + x103); + x105 = (x15 + x104); + x106 = (x13 + (uint32_t)x14); + x107 = (x12 + x106); + x108 = (x11 + x107); + x109 = (x9 + (uint32_t)x10); + x110 = (x8 + x109); + x111 = (x7 + x110); + x112 = (x5 + (uint32_t)x6); + x113 = (x4 + x112); + x114 = (x3 + x113); + x115 = (x1 + (uint32_t)x2); + out1[0] = x69; + out1[1] = x72; + out1[2] = x75; + out1[3] = x78; + out1[4] = x81; + out1[5] = x84; + out1[6] = x87; + out1[7] = x90; + out1[8] = x93; + out1[9] = x96; + out1[10] = x99; + out1[11] = x102; + out1[12] = x105; + out1[13] = x108; + out1[14] = x111; + out1[15] = x114; + out1[16] = x115; +} + diff --git a/ec/native/np521_64.h b/ec/native/np521_64.h new file mode 100644 index 00000000..fba73554 --- /dev/null +++ b/ec/native/np521_64.h @@ -0,0 +1,5586 @@ +/* Autogenerated: '../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery' --static --use-value-barrier np521 64 0x01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409 mul add opp from_montgomery to_montgomery one msat divstep_precomp divstep to_bytes from_bytes */ +/* curve description: np521 */ +/* machine_wordsize = 64 (from "64") */ +/* requested operations: mul, add, opp, from_montgomery, to_montgomery, one, msat, divstep_precomp, divstep, to_bytes, from_bytes */ +/* m = 0x1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409 (from "0x01FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) + (z[4] << 256) + (z[5] << 0x140) + (z[6] << 0x180) + (z[7] << 0x1c0) + (z[8] << 2^9) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) + (z[32] << 256) + (z[33] << 0x108) + (z[34] << 0x110) + (z[35] << 0x118) + (z[36] << 0x120) + (z[37] << 0x128) + (z[38] << 0x130) + (z[39] << 0x138) + (z[40] << 0x140) + (z[41] << 0x148) + (z[42] << 0x150) + (z[43] << 0x158) + (z[44] << 0x160) + (z[45] << 0x168) + (z[46] << 0x170) + (z[47] << 0x178) + (z[48] << 0x180) + (z[49] << 0x188) + (z[50] << 0x190) + (z[51] << 0x198) + (z[52] << 0x1a0) + (z[53] << 0x1a8) + (z[54] << 0x1b0) + (z[55] << 0x1b8) + (z[56] << 0x1c0) + (z[57] << 0x1c8) + (z[58] << 0x1d0) + (z[59] << 0x1d8) + (z[60] << 0x1e0) + (z[61] << 0x1e8) + (z[62] << 0x1f0) + (z[63] << 0x1f8) + (z[64] << 2^9) + (z[65] << 0x208) */ + +#include +typedef unsigned char fiat_np521_uint1; +typedef signed char fiat_np521_int1; +#ifdef __GNUC__ +# define FIAT_NP521_FIAT_EXTENSION __extension__ +#else +# define FIAT_NP521_FIAT_EXTENSION +#endif + +FIAT_NP521_FIAT_EXTENSION typedef signed __int128 fiat_np521_int128; +FIAT_NP521_FIAT_EXTENSION typedef unsigned __int128 fiat_np521_uint128; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_NP521_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint64_t fiat_np521_value_barrier_u64(uint64_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_np521_value_barrier_u64(x) (x) +#endif + + +/* + * The function fiat_np521_addcarryx_u64 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^64 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_np521_addcarryx_u64(uint64_t* out1, fiat_np521_uint1* out2, fiat_np521_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_np521_uint128 x1; + uint64_t x2; + fiat_np521_uint1 x3; + x1 = ((arg1 + (fiat_np521_uint128)arg2) + arg3); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (fiat_np521_uint1)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_np521_subborrowx_u64 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^64 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_np521_subborrowx_u64(uint64_t* out1, fiat_np521_uint1* out2, fiat_np521_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_np521_int128 x1; + fiat_np521_int1 x2; + uint64_t x3; + x1 = ((arg2 - (fiat_np521_int128)arg1) - arg3); + x2 = (fiat_np521_int1)(x1 >> 64); + x3 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + *out1 = x3; + *out2 = (fiat_np521_uint1)(0x0 - x2); +} + +/* + * The function fiat_np521_mulx_u64 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^64 + * out2 = ⌊arg1 * arg2 / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_np521_mulx_u64(uint64_t* out1, uint64_t* out2, uint64_t arg1, uint64_t arg2) { + fiat_np521_uint128 x1; + uint64_t x2; + uint64_t x3; + x1 = ((fiat_np521_uint128)arg1 * arg2); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (uint64_t)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_np521_cmovznz_u64 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_np521_cmovznz_u64(uint64_t* out1, fiat_np521_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_np521_uint1 x1; + uint64_t x2; + uint64_t x3; + x1 = (!(!arg1)); + x2 = ((fiat_np521_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); + x3 = ((fiat_np521_value_barrier_u64(x2) & arg3) | (fiat_np521_value_barrier_u64((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_np521_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np521_mul(uint64_t out1[9], const uint64_t arg1[9], const uint64_t arg2[9]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + fiat_np521_uint1 x29; + uint64_t x30; + fiat_np521_uint1 x31; + uint64_t x32; + fiat_np521_uint1 x33; + uint64_t x34; + fiat_np521_uint1 x35; + uint64_t x36; + fiat_np521_uint1 x37; + uint64_t x38; + fiat_np521_uint1 x39; + uint64_t x40; + fiat_np521_uint1 x41; + uint64_t x42; + fiat_np521_uint1 x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint64_t x57; + uint64_t x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + uint64_t x65; + fiat_np521_uint1 x66; + uint64_t x67; + fiat_np521_uint1 x68; + uint64_t x69; + fiat_np521_uint1 x70; + uint64_t x71; + fiat_np521_uint1 x72; + uint64_t x73; + fiat_np521_uint1 x74; + uint64_t x75; + fiat_np521_uint1 x76; + uint64_t x77; + fiat_np521_uint1 x78; + uint64_t x79; + fiat_np521_uint1 x80; + uint64_t x81; + uint64_t x82; + fiat_np521_uint1 x83; + uint64_t x84; + fiat_np521_uint1 x85; + uint64_t x86; + fiat_np521_uint1 x87; + uint64_t x88; + fiat_np521_uint1 x89; + uint64_t x90; + fiat_np521_uint1 x91; + uint64_t x92; + fiat_np521_uint1 x93; + uint64_t x94; + fiat_np521_uint1 x95; + uint64_t x96; + fiat_np521_uint1 x97; + uint64_t x98; + fiat_np521_uint1 x99; + uint64_t x100; + fiat_np521_uint1 x101; + uint64_t x102; + uint64_t x103; + uint64_t x104; + uint64_t x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + uint64_t x109; + uint64_t x110; + uint64_t x111; + uint64_t x112; + uint64_t x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + fiat_np521_uint1 x121; + uint64_t x122; + fiat_np521_uint1 x123; + uint64_t x124; + fiat_np521_uint1 x125; + uint64_t x126; + fiat_np521_uint1 x127; + uint64_t x128; + fiat_np521_uint1 x129; + uint64_t x130; + fiat_np521_uint1 x131; + uint64_t x132; + fiat_np521_uint1 x133; + uint64_t x134; + fiat_np521_uint1 x135; + uint64_t x136; + uint64_t x137; + fiat_np521_uint1 x138; + uint64_t x139; + fiat_np521_uint1 x140; + uint64_t x141; + fiat_np521_uint1 x142; + uint64_t x143; + fiat_np521_uint1 x144; + uint64_t x145; + fiat_np521_uint1 x146; + uint64_t x147; + fiat_np521_uint1 x148; + uint64_t x149; + fiat_np521_uint1 x150; + uint64_t x151; + fiat_np521_uint1 x152; + uint64_t x153; + fiat_np521_uint1 x154; + uint64_t x155; + fiat_np521_uint1 x156; + uint64_t x157; + uint64_t x158; + uint64_t x159; + uint64_t x160; + uint64_t x161; + uint64_t x162; + uint64_t x163; + uint64_t x164; + uint64_t x165; + uint64_t x166; + uint64_t x167; + uint64_t x168; + uint64_t x169; + uint64_t x170; + uint64_t x171; + uint64_t x172; + uint64_t x173; + uint64_t x174; + uint64_t x175; + uint64_t x176; + uint64_t x177; + fiat_np521_uint1 x178; + uint64_t x179; + fiat_np521_uint1 x180; + uint64_t x181; + fiat_np521_uint1 x182; + uint64_t x183; + fiat_np521_uint1 x184; + uint64_t x185; + fiat_np521_uint1 x186; + uint64_t x187; + fiat_np521_uint1 x188; + uint64_t x189; + fiat_np521_uint1 x190; + uint64_t x191; + fiat_np521_uint1 x192; + uint64_t x193; + uint64_t x194; + fiat_np521_uint1 x195; + uint64_t x196; + fiat_np521_uint1 x197; + uint64_t x198; + fiat_np521_uint1 x199; + uint64_t x200; + fiat_np521_uint1 x201; + uint64_t x202; + fiat_np521_uint1 x203; + uint64_t x204; + fiat_np521_uint1 x205; + uint64_t x206; + fiat_np521_uint1 x207; + uint64_t x208; + fiat_np521_uint1 x209; + uint64_t x210; + fiat_np521_uint1 x211; + uint64_t x212; + fiat_np521_uint1 x213; + uint64_t x214; + uint64_t x215; + uint64_t x216; + uint64_t x217; + uint64_t x218; + uint64_t x219; + uint64_t x220; + uint64_t x221; + uint64_t x222; + uint64_t x223; + uint64_t x224; + uint64_t x225; + uint64_t x226; + uint64_t x227; + uint64_t x228; + uint64_t x229; + uint64_t x230; + uint64_t x231; + uint64_t x232; + uint64_t x233; + fiat_np521_uint1 x234; + uint64_t x235; + fiat_np521_uint1 x236; + uint64_t x237; + fiat_np521_uint1 x238; + uint64_t x239; + fiat_np521_uint1 x240; + uint64_t x241; + fiat_np521_uint1 x242; + uint64_t x243; + fiat_np521_uint1 x244; + uint64_t x245; + fiat_np521_uint1 x246; + uint64_t x247; + fiat_np521_uint1 x248; + uint64_t x249; + uint64_t x250; + fiat_np521_uint1 x251; + uint64_t x252; + fiat_np521_uint1 x253; + uint64_t x254; + fiat_np521_uint1 x255; + uint64_t x256; + fiat_np521_uint1 x257; + uint64_t x258; + fiat_np521_uint1 x259; + uint64_t x260; + fiat_np521_uint1 x261; + uint64_t x262; + fiat_np521_uint1 x263; + uint64_t x264; + fiat_np521_uint1 x265; + uint64_t x266; + fiat_np521_uint1 x267; + uint64_t x268; + fiat_np521_uint1 x269; + uint64_t x270; + uint64_t x271; + uint64_t x272; + uint64_t x273; + uint64_t x274; + uint64_t x275; + uint64_t x276; + uint64_t x277; + uint64_t x278; + uint64_t x279; + uint64_t x280; + uint64_t x281; + uint64_t x282; + uint64_t x283; + uint64_t x284; + uint64_t x285; + uint64_t x286; + uint64_t x287; + uint64_t x288; + uint64_t x289; + uint64_t x290; + fiat_np521_uint1 x291; + uint64_t x292; + fiat_np521_uint1 x293; + uint64_t x294; + fiat_np521_uint1 x295; + uint64_t x296; + fiat_np521_uint1 x297; + uint64_t x298; + fiat_np521_uint1 x299; + uint64_t x300; + fiat_np521_uint1 x301; + uint64_t x302; + fiat_np521_uint1 x303; + uint64_t x304; + fiat_np521_uint1 x305; + uint64_t x306; + uint64_t x307; + fiat_np521_uint1 x308; + uint64_t x309; + fiat_np521_uint1 x310; + uint64_t x311; + fiat_np521_uint1 x312; + uint64_t x313; + fiat_np521_uint1 x314; + uint64_t x315; + fiat_np521_uint1 x316; + uint64_t x317; + fiat_np521_uint1 x318; + uint64_t x319; + fiat_np521_uint1 x320; + uint64_t x321; + fiat_np521_uint1 x322; + uint64_t x323; + fiat_np521_uint1 x324; + uint64_t x325; + fiat_np521_uint1 x326; + uint64_t x327; + uint64_t x328; + uint64_t x329; + uint64_t x330; + uint64_t x331; + uint64_t x332; + uint64_t x333; + uint64_t x334; + uint64_t x335; + uint64_t x336; + uint64_t x337; + uint64_t x338; + uint64_t x339; + uint64_t x340; + uint64_t x341; + uint64_t x342; + uint64_t x343; + uint64_t x344; + uint64_t x345; + uint64_t x346; + fiat_np521_uint1 x347; + uint64_t x348; + fiat_np521_uint1 x349; + uint64_t x350; + fiat_np521_uint1 x351; + uint64_t x352; + fiat_np521_uint1 x353; + uint64_t x354; + fiat_np521_uint1 x355; + uint64_t x356; + fiat_np521_uint1 x357; + uint64_t x358; + fiat_np521_uint1 x359; + uint64_t x360; + fiat_np521_uint1 x361; + uint64_t x362; + uint64_t x363; + fiat_np521_uint1 x364; + uint64_t x365; + fiat_np521_uint1 x366; + uint64_t x367; + fiat_np521_uint1 x368; + uint64_t x369; + fiat_np521_uint1 x370; + uint64_t x371; + fiat_np521_uint1 x372; + uint64_t x373; + fiat_np521_uint1 x374; + uint64_t x375; + fiat_np521_uint1 x376; + uint64_t x377; + fiat_np521_uint1 x378; + uint64_t x379; + fiat_np521_uint1 x380; + uint64_t x381; + fiat_np521_uint1 x382; + uint64_t x383; + uint64_t x384; + uint64_t x385; + uint64_t x386; + uint64_t x387; + uint64_t x388; + uint64_t x389; + uint64_t x390; + uint64_t x391; + uint64_t x392; + uint64_t x393; + uint64_t x394; + uint64_t x395; + uint64_t x396; + uint64_t x397; + uint64_t x398; + uint64_t x399; + uint64_t x400; + uint64_t x401; + uint64_t x402; + uint64_t x403; + fiat_np521_uint1 x404; + uint64_t x405; + fiat_np521_uint1 x406; + uint64_t x407; + fiat_np521_uint1 x408; + uint64_t x409; + fiat_np521_uint1 x410; + uint64_t x411; + fiat_np521_uint1 x412; + uint64_t x413; + fiat_np521_uint1 x414; + uint64_t x415; + fiat_np521_uint1 x416; + uint64_t x417; + fiat_np521_uint1 x418; + uint64_t x419; + uint64_t x420; + fiat_np521_uint1 x421; + uint64_t x422; + fiat_np521_uint1 x423; + uint64_t x424; + fiat_np521_uint1 x425; + uint64_t x426; + fiat_np521_uint1 x427; + uint64_t x428; + fiat_np521_uint1 x429; + uint64_t x430; + fiat_np521_uint1 x431; + uint64_t x432; + fiat_np521_uint1 x433; + uint64_t x434; + fiat_np521_uint1 x435; + uint64_t x436; + fiat_np521_uint1 x437; + uint64_t x438; + fiat_np521_uint1 x439; + uint64_t x440; + uint64_t x441; + uint64_t x442; + uint64_t x443; + uint64_t x444; + uint64_t x445; + uint64_t x446; + uint64_t x447; + uint64_t x448; + uint64_t x449; + uint64_t x450; + uint64_t x451; + uint64_t x452; + uint64_t x453; + uint64_t x454; + uint64_t x455; + uint64_t x456; + uint64_t x457; + uint64_t x458; + uint64_t x459; + fiat_np521_uint1 x460; + uint64_t x461; + fiat_np521_uint1 x462; + uint64_t x463; + fiat_np521_uint1 x464; + uint64_t x465; + fiat_np521_uint1 x466; + uint64_t x467; + fiat_np521_uint1 x468; + uint64_t x469; + fiat_np521_uint1 x470; + uint64_t x471; + fiat_np521_uint1 x472; + uint64_t x473; + fiat_np521_uint1 x474; + uint64_t x475; + uint64_t x476; + fiat_np521_uint1 x477; + uint64_t x478; + fiat_np521_uint1 x479; + uint64_t x480; + fiat_np521_uint1 x481; + uint64_t x482; + fiat_np521_uint1 x483; + uint64_t x484; + fiat_np521_uint1 x485; + uint64_t x486; + fiat_np521_uint1 x487; + uint64_t x488; + fiat_np521_uint1 x489; + uint64_t x490; + fiat_np521_uint1 x491; + uint64_t x492; + fiat_np521_uint1 x493; + uint64_t x494; + fiat_np521_uint1 x495; + uint64_t x496; + uint64_t x497; + uint64_t x498; + uint64_t x499; + uint64_t x500; + uint64_t x501; + uint64_t x502; + uint64_t x503; + uint64_t x504; + uint64_t x505; + uint64_t x506; + uint64_t x507; + uint64_t x508; + uint64_t x509; + uint64_t x510; + uint64_t x511; + uint64_t x512; + uint64_t x513; + uint64_t x514; + uint64_t x515; + uint64_t x516; + fiat_np521_uint1 x517; + uint64_t x518; + fiat_np521_uint1 x519; + uint64_t x520; + fiat_np521_uint1 x521; + uint64_t x522; + fiat_np521_uint1 x523; + uint64_t x524; + fiat_np521_uint1 x525; + uint64_t x526; + fiat_np521_uint1 x527; + uint64_t x528; + fiat_np521_uint1 x529; + uint64_t x530; + fiat_np521_uint1 x531; + uint64_t x532; + uint64_t x533; + fiat_np521_uint1 x534; + uint64_t x535; + fiat_np521_uint1 x536; + uint64_t x537; + fiat_np521_uint1 x538; + uint64_t x539; + fiat_np521_uint1 x540; + uint64_t x541; + fiat_np521_uint1 x542; + uint64_t x543; + fiat_np521_uint1 x544; + uint64_t x545; + fiat_np521_uint1 x546; + uint64_t x547; + fiat_np521_uint1 x548; + uint64_t x549; + fiat_np521_uint1 x550; + uint64_t x551; + fiat_np521_uint1 x552; + uint64_t x553; + uint64_t x554; + uint64_t x555; + uint64_t x556; + uint64_t x557; + uint64_t x558; + uint64_t x559; + uint64_t x560; + uint64_t x561; + uint64_t x562; + uint64_t x563; + uint64_t x564; + uint64_t x565; + uint64_t x566; + uint64_t x567; + uint64_t x568; + uint64_t x569; + uint64_t x570; + uint64_t x571; + uint64_t x572; + fiat_np521_uint1 x573; + uint64_t x574; + fiat_np521_uint1 x575; + uint64_t x576; + fiat_np521_uint1 x577; + uint64_t x578; + fiat_np521_uint1 x579; + uint64_t x580; + fiat_np521_uint1 x581; + uint64_t x582; + fiat_np521_uint1 x583; + uint64_t x584; + fiat_np521_uint1 x585; + uint64_t x586; + fiat_np521_uint1 x587; + uint64_t x588; + uint64_t x589; + fiat_np521_uint1 x590; + uint64_t x591; + fiat_np521_uint1 x592; + uint64_t x593; + fiat_np521_uint1 x594; + uint64_t x595; + fiat_np521_uint1 x596; + uint64_t x597; + fiat_np521_uint1 x598; + uint64_t x599; + fiat_np521_uint1 x600; + uint64_t x601; + fiat_np521_uint1 x602; + uint64_t x603; + fiat_np521_uint1 x604; + uint64_t x605; + fiat_np521_uint1 x606; + uint64_t x607; + fiat_np521_uint1 x608; + uint64_t x609; + uint64_t x610; + uint64_t x611; + uint64_t x612; + uint64_t x613; + uint64_t x614; + uint64_t x615; + uint64_t x616; + uint64_t x617; + uint64_t x618; + uint64_t x619; + uint64_t x620; + uint64_t x621; + uint64_t x622; + uint64_t x623; + uint64_t x624; + uint64_t x625; + uint64_t x626; + uint64_t x627; + uint64_t x628; + uint64_t x629; + fiat_np521_uint1 x630; + uint64_t x631; + fiat_np521_uint1 x632; + uint64_t x633; + fiat_np521_uint1 x634; + uint64_t x635; + fiat_np521_uint1 x636; + uint64_t x637; + fiat_np521_uint1 x638; + uint64_t x639; + fiat_np521_uint1 x640; + uint64_t x641; + fiat_np521_uint1 x642; + uint64_t x643; + fiat_np521_uint1 x644; + uint64_t x645; + uint64_t x646; + fiat_np521_uint1 x647; + uint64_t x648; + fiat_np521_uint1 x649; + uint64_t x650; + fiat_np521_uint1 x651; + uint64_t x652; + fiat_np521_uint1 x653; + uint64_t x654; + fiat_np521_uint1 x655; + uint64_t x656; + fiat_np521_uint1 x657; + uint64_t x658; + fiat_np521_uint1 x659; + uint64_t x660; + fiat_np521_uint1 x661; + uint64_t x662; + fiat_np521_uint1 x663; + uint64_t x664; + fiat_np521_uint1 x665; + uint64_t x666; + uint64_t x667; + uint64_t x668; + uint64_t x669; + uint64_t x670; + uint64_t x671; + uint64_t x672; + uint64_t x673; + uint64_t x674; + uint64_t x675; + uint64_t x676; + uint64_t x677; + uint64_t x678; + uint64_t x679; + uint64_t x680; + uint64_t x681; + uint64_t x682; + uint64_t x683; + uint64_t x684; + uint64_t x685; + fiat_np521_uint1 x686; + uint64_t x687; + fiat_np521_uint1 x688; + uint64_t x689; + fiat_np521_uint1 x690; + uint64_t x691; + fiat_np521_uint1 x692; + uint64_t x693; + fiat_np521_uint1 x694; + uint64_t x695; + fiat_np521_uint1 x696; + uint64_t x697; + fiat_np521_uint1 x698; + uint64_t x699; + fiat_np521_uint1 x700; + uint64_t x701; + uint64_t x702; + fiat_np521_uint1 x703; + uint64_t x704; + fiat_np521_uint1 x705; + uint64_t x706; + fiat_np521_uint1 x707; + uint64_t x708; + fiat_np521_uint1 x709; + uint64_t x710; + fiat_np521_uint1 x711; + uint64_t x712; + fiat_np521_uint1 x713; + uint64_t x714; + fiat_np521_uint1 x715; + uint64_t x716; + fiat_np521_uint1 x717; + uint64_t x718; + fiat_np521_uint1 x719; + uint64_t x720; + fiat_np521_uint1 x721; + uint64_t x722; + uint64_t x723; + uint64_t x724; + uint64_t x725; + uint64_t x726; + uint64_t x727; + uint64_t x728; + uint64_t x729; + uint64_t x730; + uint64_t x731; + uint64_t x732; + uint64_t x733; + uint64_t x734; + uint64_t x735; + uint64_t x736; + uint64_t x737; + uint64_t x738; + uint64_t x739; + uint64_t x740; + uint64_t x741; + uint64_t x742; + fiat_np521_uint1 x743; + uint64_t x744; + fiat_np521_uint1 x745; + uint64_t x746; + fiat_np521_uint1 x747; + uint64_t x748; + fiat_np521_uint1 x749; + uint64_t x750; + fiat_np521_uint1 x751; + uint64_t x752; + fiat_np521_uint1 x753; + uint64_t x754; + fiat_np521_uint1 x755; + uint64_t x756; + fiat_np521_uint1 x757; + uint64_t x758; + uint64_t x759; + fiat_np521_uint1 x760; + uint64_t x761; + fiat_np521_uint1 x762; + uint64_t x763; + fiat_np521_uint1 x764; + uint64_t x765; + fiat_np521_uint1 x766; + uint64_t x767; + fiat_np521_uint1 x768; + uint64_t x769; + fiat_np521_uint1 x770; + uint64_t x771; + fiat_np521_uint1 x772; + uint64_t x773; + fiat_np521_uint1 x774; + uint64_t x775; + fiat_np521_uint1 x776; + uint64_t x777; + fiat_np521_uint1 x778; + uint64_t x779; + uint64_t x780; + uint64_t x781; + uint64_t x782; + uint64_t x783; + uint64_t x784; + uint64_t x785; + uint64_t x786; + uint64_t x787; + uint64_t x788; + uint64_t x789; + uint64_t x790; + uint64_t x791; + uint64_t x792; + uint64_t x793; + uint64_t x794; + uint64_t x795; + uint64_t x796; + uint64_t x797; + uint64_t x798; + fiat_np521_uint1 x799; + uint64_t x800; + fiat_np521_uint1 x801; + uint64_t x802; + fiat_np521_uint1 x803; + uint64_t x804; + fiat_np521_uint1 x805; + uint64_t x806; + fiat_np521_uint1 x807; + uint64_t x808; + fiat_np521_uint1 x809; + uint64_t x810; + fiat_np521_uint1 x811; + uint64_t x812; + fiat_np521_uint1 x813; + uint64_t x814; + uint64_t x815; + fiat_np521_uint1 x816; + uint64_t x817; + fiat_np521_uint1 x818; + uint64_t x819; + fiat_np521_uint1 x820; + uint64_t x821; + fiat_np521_uint1 x822; + uint64_t x823; + fiat_np521_uint1 x824; + uint64_t x825; + fiat_np521_uint1 x826; + uint64_t x827; + fiat_np521_uint1 x828; + uint64_t x829; + fiat_np521_uint1 x830; + uint64_t x831; + fiat_np521_uint1 x832; + uint64_t x833; + fiat_np521_uint1 x834; + uint64_t x835; + uint64_t x836; + uint64_t x837; + uint64_t x838; + uint64_t x839; + uint64_t x840; + uint64_t x841; + uint64_t x842; + uint64_t x843; + uint64_t x844; + uint64_t x845; + uint64_t x846; + uint64_t x847; + uint64_t x848; + uint64_t x849; + uint64_t x850; + uint64_t x851; + uint64_t x852; + uint64_t x853; + uint64_t x854; + uint64_t x855; + fiat_np521_uint1 x856; + uint64_t x857; + fiat_np521_uint1 x858; + uint64_t x859; + fiat_np521_uint1 x860; + uint64_t x861; + fiat_np521_uint1 x862; + uint64_t x863; + fiat_np521_uint1 x864; + uint64_t x865; + fiat_np521_uint1 x866; + uint64_t x867; + fiat_np521_uint1 x868; + uint64_t x869; + fiat_np521_uint1 x870; + uint64_t x871; + uint64_t x872; + fiat_np521_uint1 x873; + uint64_t x874; + fiat_np521_uint1 x875; + uint64_t x876; + fiat_np521_uint1 x877; + uint64_t x878; + fiat_np521_uint1 x879; + uint64_t x880; + fiat_np521_uint1 x881; + uint64_t x882; + fiat_np521_uint1 x883; + uint64_t x884; + fiat_np521_uint1 x885; + uint64_t x886; + fiat_np521_uint1 x887; + uint64_t x888; + fiat_np521_uint1 x889; + uint64_t x890; + fiat_np521_uint1 x891; + uint64_t x892; + uint64_t x893; + uint64_t x894; + uint64_t x895; + uint64_t x896; + uint64_t x897; + uint64_t x898; + uint64_t x899; + uint64_t x900; + uint64_t x901; + uint64_t x902; + uint64_t x903; + uint64_t x904; + uint64_t x905; + uint64_t x906; + uint64_t x907; + uint64_t x908; + uint64_t x909; + uint64_t x910; + uint64_t x911; + fiat_np521_uint1 x912; + uint64_t x913; + fiat_np521_uint1 x914; + uint64_t x915; + fiat_np521_uint1 x916; + uint64_t x917; + fiat_np521_uint1 x918; + uint64_t x919; + fiat_np521_uint1 x920; + uint64_t x921; + fiat_np521_uint1 x922; + uint64_t x923; + fiat_np521_uint1 x924; + uint64_t x925; + fiat_np521_uint1 x926; + uint64_t x927; + uint64_t x928; + fiat_np521_uint1 x929; + uint64_t x930; + fiat_np521_uint1 x931; + uint64_t x932; + fiat_np521_uint1 x933; + uint64_t x934; + fiat_np521_uint1 x935; + uint64_t x936; + fiat_np521_uint1 x937; + uint64_t x938; + fiat_np521_uint1 x939; + uint64_t x940; + fiat_np521_uint1 x941; + uint64_t x942; + fiat_np521_uint1 x943; + uint64_t x944; + fiat_np521_uint1 x945; + uint64_t x946; + fiat_np521_uint1 x947; + uint64_t x948; + uint64_t x949; + uint64_t x950; + uint64_t x951; + uint64_t x952; + uint64_t x953; + uint64_t x954; + uint64_t x955; + uint64_t x956; + uint64_t x957; + uint64_t x958; + uint64_t x959; + uint64_t x960; + uint64_t x961; + uint64_t x962; + uint64_t x963; + uint64_t x964; + uint64_t x965; + uint64_t x966; + uint64_t x967; + uint64_t x968; + fiat_np521_uint1 x969; + uint64_t x970; + fiat_np521_uint1 x971; + uint64_t x972; + fiat_np521_uint1 x973; + uint64_t x974; + fiat_np521_uint1 x975; + uint64_t x976; + fiat_np521_uint1 x977; + uint64_t x978; + fiat_np521_uint1 x979; + uint64_t x980; + fiat_np521_uint1 x981; + uint64_t x982; + fiat_np521_uint1 x983; + uint64_t x984; + uint64_t x985; + fiat_np521_uint1 x986; + uint64_t x987; + fiat_np521_uint1 x988; + uint64_t x989; + fiat_np521_uint1 x990; + uint64_t x991; + fiat_np521_uint1 x992; + uint64_t x993; + fiat_np521_uint1 x994; + uint64_t x995; + fiat_np521_uint1 x996; + uint64_t x997; + fiat_np521_uint1 x998; + uint64_t x999; + fiat_np521_uint1 x1000; + uint64_t x1001; + fiat_np521_uint1 x1002; + uint64_t x1003; + fiat_np521_uint1 x1004; + uint64_t x1005; + uint64_t x1006; + fiat_np521_uint1 x1007; + uint64_t x1008; + fiat_np521_uint1 x1009; + uint64_t x1010; + fiat_np521_uint1 x1011; + uint64_t x1012; + fiat_np521_uint1 x1013; + uint64_t x1014; + fiat_np521_uint1 x1015; + uint64_t x1016; + fiat_np521_uint1 x1017; + uint64_t x1018; + fiat_np521_uint1 x1019; + uint64_t x1020; + fiat_np521_uint1 x1021; + uint64_t x1022; + fiat_np521_uint1 x1023; + uint64_t x1024; + fiat_np521_uint1 x1025; + uint64_t x1026; + uint64_t x1027; + uint64_t x1028; + uint64_t x1029; + uint64_t x1030; + uint64_t x1031; + uint64_t x1032; + uint64_t x1033; + uint64_t x1034; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[8]); + x9 = (arg1[0]); + fiat_np521_mulx_u64(&x10, &x11, x9, (arg2[8])); + fiat_np521_mulx_u64(&x12, &x13, x9, (arg2[7])); + fiat_np521_mulx_u64(&x14, &x15, x9, (arg2[6])); + fiat_np521_mulx_u64(&x16, &x17, x9, (arg2[5])); + fiat_np521_mulx_u64(&x18, &x19, x9, (arg2[4])); + fiat_np521_mulx_u64(&x20, &x21, x9, (arg2[3])); + fiat_np521_mulx_u64(&x22, &x23, x9, (arg2[2])); + fiat_np521_mulx_u64(&x24, &x25, x9, (arg2[1])); + fiat_np521_mulx_u64(&x26, &x27, x9, (arg2[0])); + fiat_np521_addcarryx_u64(&x28, &x29, 0x0, x27, x24); + fiat_np521_addcarryx_u64(&x30, &x31, x29, x25, x22); + fiat_np521_addcarryx_u64(&x32, &x33, x31, x23, x20); + fiat_np521_addcarryx_u64(&x34, &x35, x33, x21, x18); + fiat_np521_addcarryx_u64(&x36, &x37, x35, x19, x16); + fiat_np521_addcarryx_u64(&x38, &x39, x37, x17, x14); + fiat_np521_addcarryx_u64(&x40, &x41, x39, x15, x12); + fiat_np521_addcarryx_u64(&x42, &x43, x41, x13, x10); + x44 = (x43 + x11); + fiat_np521_mulx_u64(&x45, &x46, x26, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x47, &x48, x45, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x49, &x50, x45, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x51, &x52, x45, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x53, &x54, x45, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x55, &x56, x45, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x57, &x58, x45, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x59, &x60, x45, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x61, &x62, x45, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x63, &x64, x45, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x65, &x66, 0x0, x64, x61); + fiat_np521_addcarryx_u64(&x67, &x68, x66, x62, x59); + fiat_np521_addcarryx_u64(&x69, &x70, x68, x60, x57); + fiat_np521_addcarryx_u64(&x71, &x72, x70, x58, x55); + fiat_np521_addcarryx_u64(&x73, &x74, x72, x56, x53); + fiat_np521_addcarryx_u64(&x75, &x76, x74, x54, x51); + fiat_np521_addcarryx_u64(&x77, &x78, x76, x52, x49); + fiat_np521_addcarryx_u64(&x79, &x80, x78, x50, x47); + x81 = (x80 + x48); + fiat_np521_addcarryx_u64(&x82, &x83, 0x0, x26, x63); + fiat_np521_addcarryx_u64(&x84, &x85, x83, x28, x65); + fiat_np521_addcarryx_u64(&x86, &x87, x85, x30, x67); + fiat_np521_addcarryx_u64(&x88, &x89, x87, x32, x69); + fiat_np521_addcarryx_u64(&x90, &x91, x89, x34, x71); + fiat_np521_addcarryx_u64(&x92, &x93, x91, x36, x73); + fiat_np521_addcarryx_u64(&x94, &x95, x93, x38, x75); + fiat_np521_addcarryx_u64(&x96, &x97, x95, x40, x77); + fiat_np521_addcarryx_u64(&x98, &x99, x97, x42, x79); + fiat_np521_addcarryx_u64(&x100, &x101, x99, x44, x81); + fiat_np521_mulx_u64(&x102, &x103, x1, (arg2[8])); + fiat_np521_mulx_u64(&x104, &x105, x1, (arg2[7])); + fiat_np521_mulx_u64(&x106, &x107, x1, (arg2[6])); + fiat_np521_mulx_u64(&x108, &x109, x1, (arg2[5])); + fiat_np521_mulx_u64(&x110, &x111, x1, (arg2[4])); + fiat_np521_mulx_u64(&x112, &x113, x1, (arg2[3])); + fiat_np521_mulx_u64(&x114, &x115, x1, (arg2[2])); + fiat_np521_mulx_u64(&x116, &x117, x1, (arg2[1])); + fiat_np521_mulx_u64(&x118, &x119, x1, (arg2[0])); + fiat_np521_addcarryx_u64(&x120, &x121, 0x0, x119, x116); + fiat_np521_addcarryx_u64(&x122, &x123, x121, x117, x114); + fiat_np521_addcarryx_u64(&x124, &x125, x123, x115, x112); + fiat_np521_addcarryx_u64(&x126, &x127, x125, x113, x110); + fiat_np521_addcarryx_u64(&x128, &x129, x127, x111, x108); + fiat_np521_addcarryx_u64(&x130, &x131, x129, x109, x106); + fiat_np521_addcarryx_u64(&x132, &x133, x131, x107, x104); + fiat_np521_addcarryx_u64(&x134, &x135, x133, x105, x102); + x136 = (x135 + x103); + fiat_np521_addcarryx_u64(&x137, &x138, 0x0, x84, x118); + fiat_np521_addcarryx_u64(&x139, &x140, x138, x86, x120); + fiat_np521_addcarryx_u64(&x141, &x142, x140, x88, x122); + fiat_np521_addcarryx_u64(&x143, &x144, x142, x90, x124); + fiat_np521_addcarryx_u64(&x145, &x146, x144, x92, x126); + fiat_np521_addcarryx_u64(&x147, &x148, x146, x94, x128); + fiat_np521_addcarryx_u64(&x149, &x150, x148, x96, x130); + fiat_np521_addcarryx_u64(&x151, &x152, x150, x98, x132); + fiat_np521_addcarryx_u64(&x153, &x154, x152, x100, x134); + fiat_np521_addcarryx_u64(&x155, &x156, x154, x101, x136); + fiat_np521_mulx_u64(&x157, &x158, x137, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x159, &x160, x157, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x161, &x162, x157, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x163, &x164, x157, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x165, &x166, x157, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x167, &x168, x157, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x169, &x170, x157, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x171, &x172, x157, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x173, &x174, x157, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x175, &x176, x157, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x177, &x178, 0x0, x176, x173); + fiat_np521_addcarryx_u64(&x179, &x180, x178, x174, x171); + fiat_np521_addcarryx_u64(&x181, &x182, x180, x172, x169); + fiat_np521_addcarryx_u64(&x183, &x184, x182, x170, x167); + fiat_np521_addcarryx_u64(&x185, &x186, x184, x168, x165); + fiat_np521_addcarryx_u64(&x187, &x188, x186, x166, x163); + fiat_np521_addcarryx_u64(&x189, &x190, x188, x164, x161); + fiat_np521_addcarryx_u64(&x191, &x192, x190, x162, x159); + x193 = (x192 + x160); + fiat_np521_addcarryx_u64(&x194, &x195, 0x0, x137, x175); + fiat_np521_addcarryx_u64(&x196, &x197, x195, x139, x177); + fiat_np521_addcarryx_u64(&x198, &x199, x197, x141, x179); + fiat_np521_addcarryx_u64(&x200, &x201, x199, x143, x181); + fiat_np521_addcarryx_u64(&x202, &x203, x201, x145, x183); + fiat_np521_addcarryx_u64(&x204, &x205, x203, x147, x185); + fiat_np521_addcarryx_u64(&x206, &x207, x205, x149, x187); + fiat_np521_addcarryx_u64(&x208, &x209, x207, x151, x189); + fiat_np521_addcarryx_u64(&x210, &x211, x209, x153, x191); + fiat_np521_addcarryx_u64(&x212, &x213, x211, x155, x193); + x214 = ((uint64_t)x213 + x156); + fiat_np521_mulx_u64(&x215, &x216, x2, (arg2[8])); + fiat_np521_mulx_u64(&x217, &x218, x2, (arg2[7])); + fiat_np521_mulx_u64(&x219, &x220, x2, (arg2[6])); + fiat_np521_mulx_u64(&x221, &x222, x2, (arg2[5])); + fiat_np521_mulx_u64(&x223, &x224, x2, (arg2[4])); + fiat_np521_mulx_u64(&x225, &x226, x2, (arg2[3])); + fiat_np521_mulx_u64(&x227, &x228, x2, (arg2[2])); + fiat_np521_mulx_u64(&x229, &x230, x2, (arg2[1])); + fiat_np521_mulx_u64(&x231, &x232, x2, (arg2[0])); + fiat_np521_addcarryx_u64(&x233, &x234, 0x0, x232, x229); + fiat_np521_addcarryx_u64(&x235, &x236, x234, x230, x227); + fiat_np521_addcarryx_u64(&x237, &x238, x236, x228, x225); + fiat_np521_addcarryx_u64(&x239, &x240, x238, x226, x223); + fiat_np521_addcarryx_u64(&x241, &x242, x240, x224, x221); + fiat_np521_addcarryx_u64(&x243, &x244, x242, x222, x219); + fiat_np521_addcarryx_u64(&x245, &x246, x244, x220, x217); + fiat_np521_addcarryx_u64(&x247, &x248, x246, x218, x215); + x249 = (x248 + x216); + fiat_np521_addcarryx_u64(&x250, &x251, 0x0, x196, x231); + fiat_np521_addcarryx_u64(&x252, &x253, x251, x198, x233); + fiat_np521_addcarryx_u64(&x254, &x255, x253, x200, x235); + fiat_np521_addcarryx_u64(&x256, &x257, x255, x202, x237); + fiat_np521_addcarryx_u64(&x258, &x259, x257, x204, x239); + fiat_np521_addcarryx_u64(&x260, &x261, x259, x206, x241); + fiat_np521_addcarryx_u64(&x262, &x263, x261, x208, x243); + fiat_np521_addcarryx_u64(&x264, &x265, x263, x210, x245); + fiat_np521_addcarryx_u64(&x266, &x267, x265, x212, x247); + fiat_np521_addcarryx_u64(&x268, &x269, x267, x214, x249); + fiat_np521_mulx_u64(&x270, &x271, x250, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x272, &x273, x270, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x274, &x275, x270, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x276, &x277, x270, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x278, &x279, x270, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x280, &x281, x270, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x282, &x283, x270, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x284, &x285, x270, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x286, &x287, x270, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x288, &x289, x270, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x290, &x291, 0x0, x289, x286); + fiat_np521_addcarryx_u64(&x292, &x293, x291, x287, x284); + fiat_np521_addcarryx_u64(&x294, &x295, x293, x285, x282); + fiat_np521_addcarryx_u64(&x296, &x297, x295, x283, x280); + fiat_np521_addcarryx_u64(&x298, &x299, x297, x281, x278); + fiat_np521_addcarryx_u64(&x300, &x301, x299, x279, x276); + fiat_np521_addcarryx_u64(&x302, &x303, x301, x277, x274); + fiat_np521_addcarryx_u64(&x304, &x305, x303, x275, x272); + x306 = (x305 + x273); + fiat_np521_addcarryx_u64(&x307, &x308, 0x0, x250, x288); + fiat_np521_addcarryx_u64(&x309, &x310, x308, x252, x290); + fiat_np521_addcarryx_u64(&x311, &x312, x310, x254, x292); + fiat_np521_addcarryx_u64(&x313, &x314, x312, x256, x294); + fiat_np521_addcarryx_u64(&x315, &x316, x314, x258, x296); + fiat_np521_addcarryx_u64(&x317, &x318, x316, x260, x298); + fiat_np521_addcarryx_u64(&x319, &x320, x318, x262, x300); + fiat_np521_addcarryx_u64(&x321, &x322, x320, x264, x302); + fiat_np521_addcarryx_u64(&x323, &x324, x322, x266, x304); + fiat_np521_addcarryx_u64(&x325, &x326, x324, x268, x306); + x327 = ((uint64_t)x326 + x269); + fiat_np521_mulx_u64(&x328, &x329, x3, (arg2[8])); + fiat_np521_mulx_u64(&x330, &x331, x3, (arg2[7])); + fiat_np521_mulx_u64(&x332, &x333, x3, (arg2[6])); + fiat_np521_mulx_u64(&x334, &x335, x3, (arg2[5])); + fiat_np521_mulx_u64(&x336, &x337, x3, (arg2[4])); + fiat_np521_mulx_u64(&x338, &x339, x3, (arg2[3])); + fiat_np521_mulx_u64(&x340, &x341, x3, (arg2[2])); + fiat_np521_mulx_u64(&x342, &x343, x3, (arg2[1])); + fiat_np521_mulx_u64(&x344, &x345, x3, (arg2[0])); + fiat_np521_addcarryx_u64(&x346, &x347, 0x0, x345, x342); + fiat_np521_addcarryx_u64(&x348, &x349, x347, x343, x340); + fiat_np521_addcarryx_u64(&x350, &x351, x349, x341, x338); + fiat_np521_addcarryx_u64(&x352, &x353, x351, x339, x336); + fiat_np521_addcarryx_u64(&x354, &x355, x353, x337, x334); + fiat_np521_addcarryx_u64(&x356, &x357, x355, x335, x332); + fiat_np521_addcarryx_u64(&x358, &x359, x357, x333, x330); + fiat_np521_addcarryx_u64(&x360, &x361, x359, x331, x328); + x362 = (x361 + x329); + fiat_np521_addcarryx_u64(&x363, &x364, 0x0, x309, x344); + fiat_np521_addcarryx_u64(&x365, &x366, x364, x311, x346); + fiat_np521_addcarryx_u64(&x367, &x368, x366, x313, x348); + fiat_np521_addcarryx_u64(&x369, &x370, x368, x315, x350); + fiat_np521_addcarryx_u64(&x371, &x372, x370, x317, x352); + fiat_np521_addcarryx_u64(&x373, &x374, x372, x319, x354); + fiat_np521_addcarryx_u64(&x375, &x376, x374, x321, x356); + fiat_np521_addcarryx_u64(&x377, &x378, x376, x323, x358); + fiat_np521_addcarryx_u64(&x379, &x380, x378, x325, x360); + fiat_np521_addcarryx_u64(&x381, &x382, x380, x327, x362); + fiat_np521_mulx_u64(&x383, &x384, x363, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x385, &x386, x383, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x387, &x388, x383, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x389, &x390, x383, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x391, &x392, x383, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x393, &x394, x383, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x395, &x396, x383, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x397, &x398, x383, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x399, &x400, x383, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x401, &x402, x383, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x403, &x404, 0x0, x402, x399); + fiat_np521_addcarryx_u64(&x405, &x406, x404, x400, x397); + fiat_np521_addcarryx_u64(&x407, &x408, x406, x398, x395); + fiat_np521_addcarryx_u64(&x409, &x410, x408, x396, x393); + fiat_np521_addcarryx_u64(&x411, &x412, x410, x394, x391); + fiat_np521_addcarryx_u64(&x413, &x414, x412, x392, x389); + fiat_np521_addcarryx_u64(&x415, &x416, x414, x390, x387); + fiat_np521_addcarryx_u64(&x417, &x418, x416, x388, x385); + x419 = (x418 + x386); + fiat_np521_addcarryx_u64(&x420, &x421, 0x0, x363, x401); + fiat_np521_addcarryx_u64(&x422, &x423, x421, x365, x403); + fiat_np521_addcarryx_u64(&x424, &x425, x423, x367, x405); + fiat_np521_addcarryx_u64(&x426, &x427, x425, x369, x407); + fiat_np521_addcarryx_u64(&x428, &x429, x427, x371, x409); + fiat_np521_addcarryx_u64(&x430, &x431, x429, x373, x411); + fiat_np521_addcarryx_u64(&x432, &x433, x431, x375, x413); + fiat_np521_addcarryx_u64(&x434, &x435, x433, x377, x415); + fiat_np521_addcarryx_u64(&x436, &x437, x435, x379, x417); + fiat_np521_addcarryx_u64(&x438, &x439, x437, x381, x419); + x440 = ((uint64_t)x439 + x382); + fiat_np521_mulx_u64(&x441, &x442, x4, (arg2[8])); + fiat_np521_mulx_u64(&x443, &x444, x4, (arg2[7])); + fiat_np521_mulx_u64(&x445, &x446, x4, (arg2[6])); + fiat_np521_mulx_u64(&x447, &x448, x4, (arg2[5])); + fiat_np521_mulx_u64(&x449, &x450, x4, (arg2[4])); + fiat_np521_mulx_u64(&x451, &x452, x4, (arg2[3])); + fiat_np521_mulx_u64(&x453, &x454, x4, (arg2[2])); + fiat_np521_mulx_u64(&x455, &x456, x4, (arg2[1])); + fiat_np521_mulx_u64(&x457, &x458, x4, (arg2[0])); + fiat_np521_addcarryx_u64(&x459, &x460, 0x0, x458, x455); + fiat_np521_addcarryx_u64(&x461, &x462, x460, x456, x453); + fiat_np521_addcarryx_u64(&x463, &x464, x462, x454, x451); + fiat_np521_addcarryx_u64(&x465, &x466, x464, x452, x449); + fiat_np521_addcarryx_u64(&x467, &x468, x466, x450, x447); + fiat_np521_addcarryx_u64(&x469, &x470, x468, x448, x445); + fiat_np521_addcarryx_u64(&x471, &x472, x470, x446, x443); + fiat_np521_addcarryx_u64(&x473, &x474, x472, x444, x441); + x475 = (x474 + x442); + fiat_np521_addcarryx_u64(&x476, &x477, 0x0, x422, x457); + fiat_np521_addcarryx_u64(&x478, &x479, x477, x424, x459); + fiat_np521_addcarryx_u64(&x480, &x481, x479, x426, x461); + fiat_np521_addcarryx_u64(&x482, &x483, x481, x428, x463); + fiat_np521_addcarryx_u64(&x484, &x485, x483, x430, x465); + fiat_np521_addcarryx_u64(&x486, &x487, x485, x432, x467); + fiat_np521_addcarryx_u64(&x488, &x489, x487, x434, x469); + fiat_np521_addcarryx_u64(&x490, &x491, x489, x436, x471); + fiat_np521_addcarryx_u64(&x492, &x493, x491, x438, x473); + fiat_np521_addcarryx_u64(&x494, &x495, x493, x440, x475); + fiat_np521_mulx_u64(&x496, &x497, x476, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x498, &x499, x496, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x500, &x501, x496, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x502, &x503, x496, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x504, &x505, x496, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x506, &x507, x496, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x508, &x509, x496, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x510, &x511, x496, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x512, &x513, x496, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x514, &x515, x496, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x516, &x517, 0x0, x515, x512); + fiat_np521_addcarryx_u64(&x518, &x519, x517, x513, x510); + fiat_np521_addcarryx_u64(&x520, &x521, x519, x511, x508); + fiat_np521_addcarryx_u64(&x522, &x523, x521, x509, x506); + fiat_np521_addcarryx_u64(&x524, &x525, x523, x507, x504); + fiat_np521_addcarryx_u64(&x526, &x527, x525, x505, x502); + fiat_np521_addcarryx_u64(&x528, &x529, x527, x503, x500); + fiat_np521_addcarryx_u64(&x530, &x531, x529, x501, x498); + x532 = (x531 + x499); + fiat_np521_addcarryx_u64(&x533, &x534, 0x0, x476, x514); + fiat_np521_addcarryx_u64(&x535, &x536, x534, x478, x516); + fiat_np521_addcarryx_u64(&x537, &x538, x536, x480, x518); + fiat_np521_addcarryx_u64(&x539, &x540, x538, x482, x520); + fiat_np521_addcarryx_u64(&x541, &x542, x540, x484, x522); + fiat_np521_addcarryx_u64(&x543, &x544, x542, x486, x524); + fiat_np521_addcarryx_u64(&x545, &x546, x544, x488, x526); + fiat_np521_addcarryx_u64(&x547, &x548, x546, x490, x528); + fiat_np521_addcarryx_u64(&x549, &x550, x548, x492, x530); + fiat_np521_addcarryx_u64(&x551, &x552, x550, x494, x532); + x553 = ((uint64_t)x552 + x495); + fiat_np521_mulx_u64(&x554, &x555, x5, (arg2[8])); + fiat_np521_mulx_u64(&x556, &x557, x5, (arg2[7])); + fiat_np521_mulx_u64(&x558, &x559, x5, (arg2[6])); + fiat_np521_mulx_u64(&x560, &x561, x5, (arg2[5])); + fiat_np521_mulx_u64(&x562, &x563, x5, (arg2[4])); + fiat_np521_mulx_u64(&x564, &x565, x5, (arg2[3])); + fiat_np521_mulx_u64(&x566, &x567, x5, (arg2[2])); + fiat_np521_mulx_u64(&x568, &x569, x5, (arg2[1])); + fiat_np521_mulx_u64(&x570, &x571, x5, (arg2[0])); + fiat_np521_addcarryx_u64(&x572, &x573, 0x0, x571, x568); + fiat_np521_addcarryx_u64(&x574, &x575, x573, x569, x566); + fiat_np521_addcarryx_u64(&x576, &x577, x575, x567, x564); + fiat_np521_addcarryx_u64(&x578, &x579, x577, x565, x562); + fiat_np521_addcarryx_u64(&x580, &x581, x579, x563, x560); + fiat_np521_addcarryx_u64(&x582, &x583, x581, x561, x558); + fiat_np521_addcarryx_u64(&x584, &x585, x583, x559, x556); + fiat_np521_addcarryx_u64(&x586, &x587, x585, x557, x554); + x588 = (x587 + x555); + fiat_np521_addcarryx_u64(&x589, &x590, 0x0, x535, x570); + fiat_np521_addcarryx_u64(&x591, &x592, x590, x537, x572); + fiat_np521_addcarryx_u64(&x593, &x594, x592, x539, x574); + fiat_np521_addcarryx_u64(&x595, &x596, x594, x541, x576); + fiat_np521_addcarryx_u64(&x597, &x598, x596, x543, x578); + fiat_np521_addcarryx_u64(&x599, &x600, x598, x545, x580); + fiat_np521_addcarryx_u64(&x601, &x602, x600, x547, x582); + fiat_np521_addcarryx_u64(&x603, &x604, x602, x549, x584); + fiat_np521_addcarryx_u64(&x605, &x606, x604, x551, x586); + fiat_np521_addcarryx_u64(&x607, &x608, x606, x553, x588); + fiat_np521_mulx_u64(&x609, &x610, x589, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x611, &x612, x609, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x613, &x614, x609, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x615, &x616, x609, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x617, &x618, x609, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x619, &x620, x609, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x621, &x622, x609, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x623, &x624, x609, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x625, &x626, x609, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x627, &x628, x609, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x629, &x630, 0x0, x628, x625); + fiat_np521_addcarryx_u64(&x631, &x632, x630, x626, x623); + fiat_np521_addcarryx_u64(&x633, &x634, x632, x624, x621); + fiat_np521_addcarryx_u64(&x635, &x636, x634, x622, x619); + fiat_np521_addcarryx_u64(&x637, &x638, x636, x620, x617); + fiat_np521_addcarryx_u64(&x639, &x640, x638, x618, x615); + fiat_np521_addcarryx_u64(&x641, &x642, x640, x616, x613); + fiat_np521_addcarryx_u64(&x643, &x644, x642, x614, x611); + x645 = (x644 + x612); + fiat_np521_addcarryx_u64(&x646, &x647, 0x0, x589, x627); + fiat_np521_addcarryx_u64(&x648, &x649, x647, x591, x629); + fiat_np521_addcarryx_u64(&x650, &x651, x649, x593, x631); + fiat_np521_addcarryx_u64(&x652, &x653, x651, x595, x633); + fiat_np521_addcarryx_u64(&x654, &x655, x653, x597, x635); + fiat_np521_addcarryx_u64(&x656, &x657, x655, x599, x637); + fiat_np521_addcarryx_u64(&x658, &x659, x657, x601, x639); + fiat_np521_addcarryx_u64(&x660, &x661, x659, x603, x641); + fiat_np521_addcarryx_u64(&x662, &x663, x661, x605, x643); + fiat_np521_addcarryx_u64(&x664, &x665, x663, x607, x645); + x666 = ((uint64_t)x665 + x608); + fiat_np521_mulx_u64(&x667, &x668, x6, (arg2[8])); + fiat_np521_mulx_u64(&x669, &x670, x6, (arg2[7])); + fiat_np521_mulx_u64(&x671, &x672, x6, (arg2[6])); + fiat_np521_mulx_u64(&x673, &x674, x6, (arg2[5])); + fiat_np521_mulx_u64(&x675, &x676, x6, (arg2[4])); + fiat_np521_mulx_u64(&x677, &x678, x6, (arg2[3])); + fiat_np521_mulx_u64(&x679, &x680, x6, (arg2[2])); + fiat_np521_mulx_u64(&x681, &x682, x6, (arg2[1])); + fiat_np521_mulx_u64(&x683, &x684, x6, (arg2[0])); + fiat_np521_addcarryx_u64(&x685, &x686, 0x0, x684, x681); + fiat_np521_addcarryx_u64(&x687, &x688, x686, x682, x679); + fiat_np521_addcarryx_u64(&x689, &x690, x688, x680, x677); + fiat_np521_addcarryx_u64(&x691, &x692, x690, x678, x675); + fiat_np521_addcarryx_u64(&x693, &x694, x692, x676, x673); + fiat_np521_addcarryx_u64(&x695, &x696, x694, x674, x671); + fiat_np521_addcarryx_u64(&x697, &x698, x696, x672, x669); + fiat_np521_addcarryx_u64(&x699, &x700, x698, x670, x667); + x701 = (x700 + x668); + fiat_np521_addcarryx_u64(&x702, &x703, 0x0, x648, x683); + fiat_np521_addcarryx_u64(&x704, &x705, x703, x650, x685); + fiat_np521_addcarryx_u64(&x706, &x707, x705, x652, x687); + fiat_np521_addcarryx_u64(&x708, &x709, x707, x654, x689); + fiat_np521_addcarryx_u64(&x710, &x711, x709, x656, x691); + fiat_np521_addcarryx_u64(&x712, &x713, x711, x658, x693); + fiat_np521_addcarryx_u64(&x714, &x715, x713, x660, x695); + fiat_np521_addcarryx_u64(&x716, &x717, x715, x662, x697); + fiat_np521_addcarryx_u64(&x718, &x719, x717, x664, x699); + fiat_np521_addcarryx_u64(&x720, &x721, x719, x666, x701); + fiat_np521_mulx_u64(&x722, &x723, x702, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x724, &x725, x722, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x726, &x727, x722, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x728, &x729, x722, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x730, &x731, x722, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x732, &x733, x722, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x734, &x735, x722, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x736, &x737, x722, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x738, &x739, x722, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x740, &x741, x722, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x742, &x743, 0x0, x741, x738); + fiat_np521_addcarryx_u64(&x744, &x745, x743, x739, x736); + fiat_np521_addcarryx_u64(&x746, &x747, x745, x737, x734); + fiat_np521_addcarryx_u64(&x748, &x749, x747, x735, x732); + fiat_np521_addcarryx_u64(&x750, &x751, x749, x733, x730); + fiat_np521_addcarryx_u64(&x752, &x753, x751, x731, x728); + fiat_np521_addcarryx_u64(&x754, &x755, x753, x729, x726); + fiat_np521_addcarryx_u64(&x756, &x757, x755, x727, x724); + x758 = (x757 + x725); + fiat_np521_addcarryx_u64(&x759, &x760, 0x0, x702, x740); + fiat_np521_addcarryx_u64(&x761, &x762, x760, x704, x742); + fiat_np521_addcarryx_u64(&x763, &x764, x762, x706, x744); + fiat_np521_addcarryx_u64(&x765, &x766, x764, x708, x746); + fiat_np521_addcarryx_u64(&x767, &x768, x766, x710, x748); + fiat_np521_addcarryx_u64(&x769, &x770, x768, x712, x750); + fiat_np521_addcarryx_u64(&x771, &x772, x770, x714, x752); + fiat_np521_addcarryx_u64(&x773, &x774, x772, x716, x754); + fiat_np521_addcarryx_u64(&x775, &x776, x774, x718, x756); + fiat_np521_addcarryx_u64(&x777, &x778, x776, x720, x758); + x779 = ((uint64_t)x778 + x721); + fiat_np521_mulx_u64(&x780, &x781, x7, (arg2[8])); + fiat_np521_mulx_u64(&x782, &x783, x7, (arg2[7])); + fiat_np521_mulx_u64(&x784, &x785, x7, (arg2[6])); + fiat_np521_mulx_u64(&x786, &x787, x7, (arg2[5])); + fiat_np521_mulx_u64(&x788, &x789, x7, (arg2[4])); + fiat_np521_mulx_u64(&x790, &x791, x7, (arg2[3])); + fiat_np521_mulx_u64(&x792, &x793, x7, (arg2[2])); + fiat_np521_mulx_u64(&x794, &x795, x7, (arg2[1])); + fiat_np521_mulx_u64(&x796, &x797, x7, (arg2[0])); + fiat_np521_addcarryx_u64(&x798, &x799, 0x0, x797, x794); + fiat_np521_addcarryx_u64(&x800, &x801, x799, x795, x792); + fiat_np521_addcarryx_u64(&x802, &x803, x801, x793, x790); + fiat_np521_addcarryx_u64(&x804, &x805, x803, x791, x788); + fiat_np521_addcarryx_u64(&x806, &x807, x805, x789, x786); + fiat_np521_addcarryx_u64(&x808, &x809, x807, x787, x784); + fiat_np521_addcarryx_u64(&x810, &x811, x809, x785, x782); + fiat_np521_addcarryx_u64(&x812, &x813, x811, x783, x780); + x814 = (x813 + x781); + fiat_np521_addcarryx_u64(&x815, &x816, 0x0, x761, x796); + fiat_np521_addcarryx_u64(&x817, &x818, x816, x763, x798); + fiat_np521_addcarryx_u64(&x819, &x820, x818, x765, x800); + fiat_np521_addcarryx_u64(&x821, &x822, x820, x767, x802); + fiat_np521_addcarryx_u64(&x823, &x824, x822, x769, x804); + fiat_np521_addcarryx_u64(&x825, &x826, x824, x771, x806); + fiat_np521_addcarryx_u64(&x827, &x828, x826, x773, x808); + fiat_np521_addcarryx_u64(&x829, &x830, x828, x775, x810); + fiat_np521_addcarryx_u64(&x831, &x832, x830, x777, x812); + fiat_np521_addcarryx_u64(&x833, &x834, x832, x779, x814); + fiat_np521_mulx_u64(&x835, &x836, x815, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x837, &x838, x835, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x839, &x840, x835, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x841, &x842, x835, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x843, &x844, x835, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x845, &x846, x835, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x847, &x848, x835, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x849, &x850, x835, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x851, &x852, x835, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x853, &x854, x835, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x855, &x856, 0x0, x854, x851); + fiat_np521_addcarryx_u64(&x857, &x858, x856, x852, x849); + fiat_np521_addcarryx_u64(&x859, &x860, x858, x850, x847); + fiat_np521_addcarryx_u64(&x861, &x862, x860, x848, x845); + fiat_np521_addcarryx_u64(&x863, &x864, x862, x846, x843); + fiat_np521_addcarryx_u64(&x865, &x866, x864, x844, x841); + fiat_np521_addcarryx_u64(&x867, &x868, x866, x842, x839); + fiat_np521_addcarryx_u64(&x869, &x870, x868, x840, x837); + x871 = (x870 + x838); + fiat_np521_addcarryx_u64(&x872, &x873, 0x0, x815, x853); + fiat_np521_addcarryx_u64(&x874, &x875, x873, x817, x855); + fiat_np521_addcarryx_u64(&x876, &x877, x875, x819, x857); + fiat_np521_addcarryx_u64(&x878, &x879, x877, x821, x859); + fiat_np521_addcarryx_u64(&x880, &x881, x879, x823, x861); + fiat_np521_addcarryx_u64(&x882, &x883, x881, x825, x863); + fiat_np521_addcarryx_u64(&x884, &x885, x883, x827, x865); + fiat_np521_addcarryx_u64(&x886, &x887, x885, x829, x867); + fiat_np521_addcarryx_u64(&x888, &x889, x887, x831, x869); + fiat_np521_addcarryx_u64(&x890, &x891, x889, x833, x871); + x892 = ((uint64_t)x891 + x834); + fiat_np521_mulx_u64(&x893, &x894, x8, (arg2[8])); + fiat_np521_mulx_u64(&x895, &x896, x8, (arg2[7])); + fiat_np521_mulx_u64(&x897, &x898, x8, (arg2[6])); + fiat_np521_mulx_u64(&x899, &x900, x8, (arg2[5])); + fiat_np521_mulx_u64(&x901, &x902, x8, (arg2[4])); + fiat_np521_mulx_u64(&x903, &x904, x8, (arg2[3])); + fiat_np521_mulx_u64(&x905, &x906, x8, (arg2[2])); + fiat_np521_mulx_u64(&x907, &x908, x8, (arg2[1])); + fiat_np521_mulx_u64(&x909, &x910, x8, (arg2[0])); + fiat_np521_addcarryx_u64(&x911, &x912, 0x0, x910, x907); + fiat_np521_addcarryx_u64(&x913, &x914, x912, x908, x905); + fiat_np521_addcarryx_u64(&x915, &x916, x914, x906, x903); + fiat_np521_addcarryx_u64(&x917, &x918, x916, x904, x901); + fiat_np521_addcarryx_u64(&x919, &x920, x918, x902, x899); + fiat_np521_addcarryx_u64(&x921, &x922, x920, x900, x897); + fiat_np521_addcarryx_u64(&x923, &x924, x922, x898, x895); + fiat_np521_addcarryx_u64(&x925, &x926, x924, x896, x893); + x927 = (x926 + x894); + fiat_np521_addcarryx_u64(&x928, &x929, 0x0, x874, x909); + fiat_np521_addcarryx_u64(&x930, &x931, x929, x876, x911); + fiat_np521_addcarryx_u64(&x932, &x933, x931, x878, x913); + fiat_np521_addcarryx_u64(&x934, &x935, x933, x880, x915); + fiat_np521_addcarryx_u64(&x936, &x937, x935, x882, x917); + fiat_np521_addcarryx_u64(&x938, &x939, x937, x884, x919); + fiat_np521_addcarryx_u64(&x940, &x941, x939, x886, x921); + fiat_np521_addcarryx_u64(&x942, &x943, x941, x888, x923); + fiat_np521_addcarryx_u64(&x944, &x945, x943, x890, x925); + fiat_np521_addcarryx_u64(&x946, &x947, x945, x892, x927); + fiat_np521_mulx_u64(&x948, &x949, x928, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x950, &x951, x948, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x952, &x953, x948, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x954, &x955, x948, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x956, &x957, x948, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x958, &x959, x948, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x960, &x961, x948, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x962, &x963, x948, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x964, &x965, x948, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x966, &x967, x948, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x968, &x969, 0x0, x967, x964); + fiat_np521_addcarryx_u64(&x970, &x971, x969, x965, x962); + fiat_np521_addcarryx_u64(&x972, &x973, x971, x963, x960); + fiat_np521_addcarryx_u64(&x974, &x975, x973, x961, x958); + fiat_np521_addcarryx_u64(&x976, &x977, x975, x959, x956); + fiat_np521_addcarryx_u64(&x978, &x979, x977, x957, x954); + fiat_np521_addcarryx_u64(&x980, &x981, x979, x955, x952); + fiat_np521_addcarryx_u64(&x982, &x983, x981, x953, x950); + x984 = (x983 + x951); + fiat_np521_addcarryx_u64(&x985, &x986, 0x0, x928, x966); + fiat_np521_addcarryx_u64(&x987, &x988, x986, x930, x968); + fiat_np521_addcarryx_u64(&x989, &x990, x988, x932, x970); + fiat_np521_addcarryx_u64(&x991, &x992, x990, x934, x972); + fiat_np521_addcarryx_u64(&x993, &x994, x992, x936, x974); + fiat_np521_addcarryx_u64(&x995, &x996, x994, x938, x976); + fiat_np521_addcarryx_u64(&x997, &x998, x996, x940, x978); + fiat_np521_addcarryx_u64(&x999, &x1000, x998, x942, x980); + fiat_np521_addcarryx_u64(&x1001, &x1002, x1000, x944, x982); + fiat_np521_addcarryx_u64(&x1003, &x1004, x1002, x946, x984); + x1005 = ((uint64_t)x1004 + x947); + fiat_np521_subborrowx_u64(&x1006, &x1007, 0x0, x987, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_subborrowx_u64(&x1008, &x1009, x1007, x989, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_subborrowx_u64(&x1010, &x1011, x1009, x991, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_subborrowx_u64(&x1012, &x1013, x1011, x993, UINT64_C(0x51868783bf2f966b)); + fiat_np521_subborrowx_u64(&x1014, &x1015, x1013, x995, UINT64_C(0xfffffffffffffffa)); + fiat_np521_subborrowx_u64(&x1016, &x1017, x1015, x997, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x1018, &x1019, x1017, x999, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x1020, &x1021, x1019, x1001, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x1022, &x1023, x1021, x1003, UINT16_C(0x1ff)); + fiat_np521_subborrowx_u64(&x1024, &x1025, x1023, x1005, 0x0); + fiat_np521_cmovznz_u64(&x1026, x1025, x1006, x987); + fiat_np521_cmovznz_u64(&x1027, x1025, x1008, x989); + fiat_np521_cmovznz_u64(&x1028, x1025, x1010, x991); + fiat_np521_cmovznz_u64(&x1029, x1025, x1012, x993); + fiat_np521_cmovznz_u64(&x1030, x1025, x1014, x995); + fiat_np521_cmovznz_u64(&x1031, x1025, x1016, x997); + fiat_np521_cmovznz_u64(&x1032, x1025, x1018, x999); + fiat_np521_cmovznz_u64(&x1033, x1025, x1020, x1001); + fiat_np521_cmovznz_u64(&x1034, x1025, x1022, x1003); + out1[0] = x1026; + out1[1] = x1027; + out1[2] = x1028; + out1[3] = x1029; + out1[4] = x1030; + out1[5] = x1031; + out1[6] = x1032; + out1[7] = x1033; + out1[8] = x1034; +} + +/* + * The function fiat_np521_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np521_add(uint64_t out1[9], const uint64_t arg1[9], const uint64_t arg2[9]) { + uint64_t x1; + fiat_np521_uint1 x2; + uint64_t x3; + fiat_np521_uint1 x4; + uint64_t x5; + fiat_np521_uint1 x6; + uint64_t x7; + fiat_np521_uint1 x8; + uint64_t x9; + fiat_np521_uint1 x10; + uint64_t x11; + fiat_np521_uint1 x12; + uint64_t x13; + fiat_np521_uint1 x14; + uint64_t x15; + fiat_np521_uint1 x16; + uint64_t x17; + fiat_np521_uint1 x18; + uint64_t x19; + fiat_np521_uint1 x20; + uint64_t x21; + fiat_np521_uint1 x22; + uint64_t x23; + fiat_np521_uint1 x24; + uint64_t x25; + fiat_np521_uint1 x26; + uint64_t x27; + fiat_np521_uint1 x28; + uint64_t x29; + fiat_np521_uint1 x30; + uint64_t x31; + fiat_np521_uint1 x32; + uint64_t x33; + fiat_np521_uint1 x34; + uint64_t x35; + fiat_np521_uint1 x36; + uint64_t x37; + fiat_np521_uint1 x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + fiat_np521_addcarryx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_np521_addcarryx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_np521_addcarryx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_np521_addcarryx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_np521_addcarryx_u64(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_np521_addcarryx_u64(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_np521_addcarryx_u64(&x13, &x14, x12, (arg1[6]), (arg2[6])); + fiat_np521_addcarryx_u64(&x15, &x16, x14, (arg1[7]), (arg2[7])); + fiat_np521_addcarryx_u64(&x17, &x18, x16, (arg1[8]), (arg2[8])); + fiat_np521_subborrowx_u64(&x19, &x20, 0x0, x1, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_subborrowx_u64(&x21, &x22, x20, x3, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_subborrowx_u64(&x23, &x24, x22, x5, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_subborrowx_u64(&x25, &x26, x24, x7, UINT64_C(0x51868783bf2f966b)); + fiat_np521_subborrowx_u64(&x27, &x28, x26, x9, UINT64_C(0xfffffffffffffffa)); + fiat_np521_subborrowx_u64(&x29, &x30, x28, x11, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x31, &x32, x30, x13, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x33, &x34, x32, x15, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x35, &x36, x34, x17, UINT16_C(0x1ff)); + fiat_np521_subborrowx_u64(&x37, &x38, x36, x18, 0x0); + fiat_np521_cmovznz_u64(&x39, x38, x19, x1); + fiat_np521_cmovznz_u64(&x40, x38, x21, x3); + fiat_np521_cmovznz_u64(&x41, x38, x23, x5); + fiat_np521_cmovznz_u64(&x42, x38, x25, x7); + fiat_np521_cmovznz_u64(&x43, x38, x27, x9); + fiat_np521_cmovznz_u64(&x44, x38, x29, x11); + fiat_np521_cmovznz_u64(&x45, x38, x31, x13); + fiat_np521_cmovznz_u64(&x46, x38, x33, x15); + fiat_np521_cmovznz_u64(&x47, x38, x35, x17); + out1[0] = x39; + out1[1] = x40; + out1[2] = x41; + out1[3] = x42; + out1[4] = x43; + out1[5] = x44; + out1[6] = x45; + out1[7] = x46; + out1[8] = x47; +} + +/* + * The function fiat_np521_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np521_opp(uint64_t out1[9], const uint64_t arg1[9]) { + uint64_t x1; + fiat_np521_uint1 x2; + uint64_t x3; + fiat_np521_uint1 x4; + uint64_t x5; + fiat_np521_uint1 x6; + uint64_t x7; + fiat_np521_uint1 x8; + uint64_t x9; + fiat_np521_uint1 x10; + uint64_t x11; + fiat_np521_uint1 x12; + uint64_t x13; + fiat_np521_uint1 x14; + uint64_t x15; + fiat_np521_uint1 x16; + uint64_t x17; + fiat_np521_uint1 x18; + uint64_t x19; + uint64_t x20; + fiat_np521_uint1 x21; + uint64_t x22; + fiat_np521_uint1 x23; + uint64_t x24; + fiat_np521_uint1 x25; + uint64_t x26; + fiat_np521_uint1 x27; + uint64_t x28; + fiat_np521_uint1 x29; + uint64_t x30; + fiat_np521_uint1 x31; + uint64_t x32; + fiat_np521_uint1 x33; + uint64_t x34; + fiat_np521_uint1 x35; + uint64_t x36; + fiat_np521_uint1 x37; + fiat_np521_subborrowx_u64(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_np521_subborrowx_u64(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_np521_subborrowx_u64(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_np521_subborrowx_u64(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_np521_subborrowx_u64(&x9, &x10, x8, 0x0, (arg1[4])); + fiat_np521_subborrowx_u64(&x11, &x12, x10, 0x0, (arg1[5])); + fiat_np521_subborrowx_u64(&x13, &x14, x12, 0x0, (arg1[6])); + fiat_np521_subborrowx_u64(&x15, &x16, x14, 0x0, (arg1[7])); + fiat_np521_subborrowx_u64(&x17, &x18, x16, 0x0, (arg1[8])); + fiat_np521_cmovznz_u64(&x19, x18, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_np521_addcarryx_u64(&x20, &x21, 0x0, x1, (x19 & UINT64_C(0xbb6fb71e91386409))); + fiat_np521_addcarryx_u64(&x22, &x23, x21, x3, (x19 & UINT64_C(0x3bb5c9b8899c47ae))); + fiat_np521_addcarryx_u64(&x24, &x25, x23, x5, (x19 & UINT64_C(0x7fcc0148f709a5d0))); + fiat_np521_addcarryx_u64(&x26, &x27, x25, x7, (x19 & UINT64_C(0x51868783bf2f966b))); + fiat_np521_addcarryx_u64(&x28, &x29, x27, x9, (x19 & UINT64_C(0xfffffffffffffffa))); + fiat_np521_addcarryx_u64(&x30, &x31, x29, x11, x19); + fiat_np521_addcarryx_u64(&x32, &x33, x31, x13, x19); + fiat_np521_addcarryx_u64(&x34, &x35, x33, x15, x19); + fiat_np521_addcarryx_u64(&x36, &x37, x35, x17, (x19 & UINT16_C(0x1ff))); + out1[0] = x20; + out1[1] = x22; + out1[2] = x24; + out1[3] = x26; + out1[4] = x28; + out1[5] = x30; + out1[6] = x32; + out1[7] = x34; + out1[8] = x36; +} + +/* + * The function fiat_np521_from_montgomery translates a field element out of the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^64)⁻¹ mod m)^9) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np521_from_montgomery(uint64_t out1[9], const uint64_t arg1[9]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + fiat_np521_uint1 x23; + uint64_t x24; + fiat_np521_uint1 x25; + uint64_t x26; + fiat_np521_uint1 x27; + uint64_t x28; + fiat_np521_uint1 x29; + uint64_t x30; + fiat_np521_uint1 x31; + uint64_t x32; + fiat_np521_uint1 x33; + uint64_t x34; + fiat_np521_uint1 x35; + uint64_t x36; + fiat_np521_uint1 x37; + uint64_t x38; + fiat_np521_uint1 x39; + uint64_t x40; + fiat_np521_uint1 x41; + uint64_t x42; + fiat_np521_uint1 x43; + uint64_t x44; + fiat_np521_uint1 x45; + uint64_t x46; + fiat_np521_uint1 x47; + uint64_t x48; + fiat_np521_uint1 x49; + uint64_t x50; + fiat_np521_uint1 x51; + uint64_t x52; + fiat_np521_uint1 x53; + uint64_t x54; + fiat_np521_uint1 x55; + uint64_t x56; + fiat_np521_uint1 x57; + uint64_t x58; + fiat_np521_uint1 x59; + uint64_t x60; + fiat_np521_uint1 x61; + uint64_t x62; + fiat_np521_uint1 x63; + uint64_t x64; + fiat_np521_uint1 x65; + uint64_t x66; + fiat_np521_uint1 x67; + uint64_t x68; + fiat_np521_uint1 x69; + uint64_t x70; + fiat_np521_uint1 x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + uint64_t x81; + uint64_t x82; + uint64_t x83; + uint64_t x84; + uint64_t x85; + uint64_t x86; + uint64_t x87; + uint64_t x88; + uint64_t x89; + uint64_t x90; + uint64_t x91; + uint64_t x92; + fiat_np521_uint1 x93; + uint64_t x94; + fiat_np521_uint1 x95; + uint64_t x96; + fiat_np521_uint1 x97; + uint64_t x98; + fiat_np521_uint1 x99; + uint64_t x100; + fiat_np521_uint1 x101; + uint64_t x102; + fiat_np521_uint1 x103; + uint64_t x104; + fiat_np521_uint1 x105; + uint64_t x106; + fiat_np521_uint1 x107; + uint64_t x108; + fiat_np521_uint1 x109; + uint64_t x110; + fiat_np521_uint1 x111; + uint64_t x112; + fiat_np521_uint1 x113; + uint64_t x114; + fiat_np521_uint1 x115; + uint64_t x116; + fiat_np521_uint1 x117; + uint64_t x118; + fiat_np521_uint1 x119; + uint64_t x120; + fiat_np521_uint1 x121; + uint64_t x122; + fiat_np521_uint1 x123; + uint64_t x124; + fiat_np521_uint1 x125; + uint64_t x126; + fiat_np521_uint1 x127; + uint64_t x128; + fiat_np521_uint1 x129; + uint64_t x130; + fiat_np521_uint1 x131; + uint64_t x132; + fiat_np521_uint1 x133; + uint64_t x134; + fiat_np521_uint1 x135; + uint64_t x136; + fiat_np521_uint1 x137; + uint64_t x138; + fiat_np521_uint1 x139; + uint64_t x140; + fiat_np521_uint1 x141; + uint64_t x142; + uint64_t x143; + uint64_t x144; + uint64_t x145; + uint64_t x146; + uint64_t x147; + uint64_t x148; + uint64_t x149; + uint64_t x150; + uint64_t x151; + uint64_t x152; + uint64_t x153; + uint64_t x154; + uint64_t x155; + uint64_t x156; + uint64_t x157; + uint64_t x158; + uint64_t x159; + uint64_t x160; + uint64_t x161; + uint64_t x162; + fiat_np521_uint1 x163; + uint64_t x164; + fiat_np521_uint1 x165; + uint64_t x166; + fiat_np521_uint1 x167; + uint64_t x168; + fiat_np521_uint1 x169; + uint64_t x170; + fiat_np521_uint1 x171; + uint64_t x172; + fiat_np521_uint1 x173; + uint64_t x174; + fiat_np521_uint1 x175; + uint64_t x176; + fiat_np521_uint1 x177; + uint64_t x178; + fiat_np521_uint1 x179; + uint64_t x180; + fiat_np521_uint1 x181; + uint64_t x182; + fiat_np521_uint1 x183; + uint64_t x184; + fiat_np521_uint1 x185; + uint64_t x186; + fiat_np521_uint1 x187; + uint64_t x188; + fiat_np521_uint1 x189; + uint64_t x190; + fiat_np521_uint1 x191; + uint64_t x192; + fiat_np521_uint1 x193; + uint64_t x194; + fiat_np521_uint1 x195; + uint64_t x196; + fiat_np521_uint1 x197; + uint64_t x198; + fiat_np521_uint1 x199; + uint64_t x200; + fiat_np521_uint1 x201; + uint64_t x202; + fiat_np521_uint1 x203; + uint64_t x204; + fiat_np521_uint1 x205; + uint64_t x206; + fiat_np521_uint1 x207; + uint64_t x208; + fiat_np521_uint1 x209; + uint64_t x210; + fiat_np521_uint1 x211; + uint64_t x212; + uint64_t x213; + uint64_t x214; + uint64_t x215; + uint64_t x216; + uint64_t x217; + uint64_t x218; + uint64_t x219; + uint64_t x220; + uint64_t x221; + uint64_t x222; + uint64_t x223; + uint64_t x224; + uint64_t x225; + uint64_t x226; + uint64_t x227; + uint64_t x228; + uint64_t x229; + uint64_t x230; + uint64_t x231; + uint64_t x232; + fiat_np521_uint1 x233; + uint64_t x234; + fiat_np521_uint1 x235; + uint64_t x236; + fiat_np521_uint1 x237; + uint64_t x238; + fiat_np521_uint1 x239; + uint64_t x240; + fiat_np521_uint1 x241; + uint64_t x242; + fiat_np521_uint1 x243; + uint64_t x244; + fiat_np521_uint1 x245; + uint64_t x246; + fiat_np521_uint1 x247; + uint64_t x248; + fiat_np521_uint1 x249; + uint64_t x250; + fiat_np521_uint1 x251; + uint64_t x252; + fiat_np521_uint1 x253; + uint64_t x254; + fiat_np521_uint1 x255; + uint64_t x256; + fiat_np521_uint1 x257; + uint64_t x258; + fiat_np521_uint1 x259; + uint64_t x260; + fiat_np521_uint1 x261; + uint64_t x262; + fiat_np521_uint1 x263; + uint64_t x264; + fiat_np521_uint1 x265; + uint64_t x266; + fiat_np521_uint1 x267; + uint64_t x268; + fiat_np521_uint1 x269; + uint64_t x270; + fiat_np521_uint1 x271; + uint64_t x272; + fiat_np521_uint1 x273; + uint64_t x274; + fiat_np521_uint1 x275; + uint64_t x276; + fiat_np521_uint1 x277; + uint64_t x278; + fiat_np521_uint1 x279; + uint64_t x280; + fiat_np521_uint1 x281; + uint64_t x282; + uint64_t x283; + uint64_t x284; + uint64_t x285; + uint64_t x286; + uint64_t x287; + uint64_t x288; + uint64_t x289; + uint64_t x290; + uint64_t x291; + uint64_t x292; + uint64_t x293; + uint64_t x294; + uint64_t x295; + uint64_t x296; + uint64_t x297; + uint64_t x298; + uint64_t x299; + uint64_t x300; + uint64_t x301; + uint64_t x302; + fiat_np521_uint1 x303; + uint64_t x304; + fiat_np521_uint1 x305; + uint64_t x306; + fiat_np521_uint1 x307; + uint64_t x308; + fiat_np521_uint1 x309; + uint64_t x310; + fiat_np521_uint1 x311; + uint64_t x312; + fiat_np521_uint1 x313; + uint64_t x314; + fiat_np521_uint1 x315; + uint64_t x316; + fiat_np521_uint1 x317; + uint64_t x318; + fiat_np521_uint1 x319; + uint64_t x320; + fiat_np521_uint1 x321; + uint64_t x322; + fiat_np521_uint1 x323; + uint64_t x324; + fiat_np521_uint1 x325; + uint64_t x326; + fiat_np521_uint1 x327; + uint64_t x328; + fiat_np521_uint1 x329; + uint64_t x330; + fiat_np521_uint1 x331; + uint64_t x332; + fiat_np521_uint1 x333; + uint64_t x334; + fiat_np521_uint1 x335; + uint64_t x336; + fiat_np521_uint1 x337; + uint64_t x338; + fiat_np521_uint1 x339; + uint64_t x340; + fiat_np521_uint1 x341; + uint64_t x342; + fiat_np521_uint1 x343; + uint64_t x344; + fiat_np521_uint1 x345; + uint64_t x346; + fiat_np521_uint1 x347; + uint64_t x348; + fiat_np521_uint1 x349; + uint64_t x350; + fiat_np521_uint1 x351; + uint64_t x352; + uint64_t x353; + uint64_t x354; + uint64_t x355; + uint64_t x356; + uint64_t x357; + uint64_t x358; + uint64_t x359; + uint64_t x360; + uint64_t x361; + uint64_t x362; + uint64_t x363; + uint64_t x364; + uint64_t x365; + uint64_t x366; + uint64_t x367; + uint64_t x368; + uint64_t x369; + uint64_t x370; + uint64_t x371; + uint64_t x372; + fiat_np521_uint1 x373; + uint64_t x374; + fiat_np521_uint1 x375; + uint64_t x376; + fiat_np521_uint1 x377; + uint64_t x378; + fiat_np521_uint1 x379; + uint64_t x380; + fiat_np521_uint1 x381; + uint64_t x382; + fiat_np521_uint1 x383; + uint64_t x384; + fiat_np521_uint1 x385; + uint64_t x386; + fiat_np521_uint1 x387; + uint64_t x388; + fiat_np521_uint1 x389; + uint64_t x390; + fiat_np521_uint1 x391; + uint64_t x392; + fiat_np521_uint1 x393; + uint64_t x394; + fiat_np521_uint1 x395; + uint64_t x396; + fiat_np521_uint1 x397; + uint64_t x398; + fiat_np521_uint1 x399; + uint64_t x400; + fiat_np521_uint1 x401; + uint64_t x402; + fiat_np521_uint1 x403; + uint64_t x404; + fiat_np521_uint1 x405; + uint64_t x406; + fiat_np521_uint1 x407; + uint64_t x408; + fiat_np521_uint1 x409; + uint64_t x410; + fiat_np521_uint1 x411; + uint64_t x412; + fiat_np521_uint1 x413; + uint64_t x414; + fiat_np521_uint1 x415; + uint64_t x416; + fiat_np521_uint1 x417; + uint64_t x418; + fiat_np521_uint1 x419; + uint64_t x420; + fiat_np521_uint1 x421; + uint64_t x422; + uint64_t x423; + uint64_t x424; + uint64_t x425; + uint64_t x426; + uint64_t x427; + uint64_t x428; + uint64_t x429; + uint64_t x430; + uint64_t x431; + uint64_t x432; + uint64_t x433; + uint64_t x434; + uint64_t x435; + uint64_t x436; + uint64_t x437; + uint64_t x438; + uint64_t x439; + uint64_t x440; + uint64_t x441; + uint64_t x442; + fiat_np521_uint1 x443; + uint64_t x444; + fiat_np521_uint1 x445; + uint64_t x446; + fiat_np521_uint1 x447; + uint64_t x448; + fiat_np521_uint1 x449; + uint64_t x450; + fiat_np521_uint1 x451; + uint64_t x452; + fiat_np521_uint1 x453; + uint64_t x454; + fiat_np521_uint1 x455; + uint64_t x456; + fiat_np521_uint1 x457; + uint64_t x458; + fiat_np521_uint1 x459; + uint64_t x460; + fiat_np521_uint1 x461; + uint64_t x462; + fiat_np521_uint1 x463; + uint64_t x464; + fiat_np521_uint1 x465; + uint64_t x466; + fiat_np521_uint1 x467; + uint64_t x468; + fiat_np521_uint1 x469; + uint64_t x470; + fiat_np521_uint1 x471; + uint64_t x472; + fiat_np521_uint1 x473; + uint64_t x474; + fiat_np521_uint1 x475; + uint64_t x476; + fiat_np521_uint1 x477; + uint64_t x478; + fiat_np521_uint1 x479; + uint64_t x480; + fiat_np521_uint1 x481; + uint64_t x482; + fiat_np521_uint1 x483; + uint64_t x484; + fiat_np521_uint1 x485; + uint64_t x486; + fiat_np521_uint1 x487; + uint64_t x488; + fiat_np521_uint1 x489; + uint64_t x490; + fiat_np521_uint1 x491; + uint64_t x492; + uint64_t x493; + uint64_t x494; + uint64_t x495; + uint64_t x496; + uint64_t x497; + uint64_t x498; + uint64_t x499; + uint64_t x500; + uint64_t x501; + uint64_t x502; + uint64_t x503; + uint64_t x504; + uint64_t x505; + uint64_t x506; + uint64_t x507; + uint64_t x508; + uint64_t x509; + uint64_t x510; + uint64_t x511; + uint64_t x512; + fiat_np521_uint1 x513; + uint64_t x514; + fiat_np521_uint1 x515; + uint64_t x516; + fiat_np521_uint1 x517; + uint64_t x518; + fiat_np521_uint1 x519; + uint64_t x520; + fiat_np521_uint1 x521; + uint64_t x522; + fiat_np521_uint1 x523; + uint64_t x524; + fiat_np521_uint1 x525; + uint64_t x526; + fiat_np521_uint1 x527; + uint64_t x528; + fiat_np521_uint1 x529; + uint64_t x530; + fiat_np521_uint1 x531; + uint64_t x532; + fiat_np521_uint1 x533; + uint64_t x534; + fiat_np521_uint1 x535; + uint64_t x536; + fiat_np521_uint1 x537; + uint64_t x538; + fiat_np521_uint1 x539; + uint64_t x540; + fiat_np521_uint1 x541; + uint64_t x542; + fiat_np521_uint1 x543; + uint64_t x544; + fiat_np521_uint1 x545; + uint64_t x546; + fiat_np521_uint1 x547; + uint64_t x548; + fiat_np521_uint1 x549; + uint64_t x550; + fiat_np521_uint1 x551; + uint64_t x552; + fiat_np521_uint1 x553; + uint64_t x554; + fiat_np521_uint1 x555; + uint64_t x556; + fiat_np521_uint1 x557; + uint64_t x558; + fiat_np521_uint1 x559; + uint64_t x560; + fiat_np521_uint1 x561; + uint64_t x562; + uint64_t x563; + uint64_t x564; + uint64_t x565; + uint64_t x566; + uint64_t x567; + uint64_t x568; + uint64_t x569; + uint64_t x570; + uint64_t x571; + uint64_t x572; + uint64_t x573; + uint64_t x574; + uint64_t x575; + uint64_t x576; + uint64_t x577; + uint64_t x578; + uint64_t x579; + uint64_t x580; + uint64_t x581; + uint64_t x582; + fiat_np521_uint1 x583; + uint64_t x584; + fiat_np521_uint1 x585; + uint64_t x586; + fiat_np521_uint1 x587; + uint64_t x588; + fiat_np521_uint1 x589; + uint64_t x590; + fiat_np521_uint1 x591; + uint64_t x592; + fiat_np521_uint1 x593; + uint64_t x594; + fiat_np521_uint1 x595; + uint64_t x596; + fiat_np521_uint1 x597; + uint64_t x598; + fiat_np521_uint1 x599; + uint64_t x600; + fiat_np521_uint1 x601; + uint64_t x602; + fiat_np521_uint1 x603; + uint64_t x604; + fiat_np521_uint1 x605; + uint64_t x606; + fiat_np521_uint1 x607; + uint64_t x608; + fiat_np521_uint1 x609; + uint64_t x610; + fiat_np521_uint1 x611; + uint64_t x612; + fiat_np521_uint1 x613; + uint64_t x614; + fiat_np521_uint1 x615; + uint64_t x616; + uint64_t x617; + fiat_np521_uint1 x618; + uint64_t x619; + fiat_np521_uint1 x620; + uint64_t x621; + fiat_np521_uint1 x622; + uint64_t x623; + fiat_np521_uint1 x624; + uint64_t x625; + fiat_np521_uint1 x626; + uint64_t x627; + fiat_np521_uint1 x628; + uint64_t x629; + fiat_np521_uint1 x630; + uint64_t x631; + fiat_np521_uint1 x632; + uint64_t x633; + fiat_np521_uint1 x634; + uint64_t x635; + fiat_np521_uint1 x636; + uint64_t x637; + uint64_t x638; + uint64_t x639; + uint64_t x640; + uint64_t x641; + uint64_t x642; + uint64_t x643; + uint64_t x644; + uint64_t x645; + x1 = (arg1[0]); + fiat_np521_mulx_u64(&x2, &x3, x1, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x4, &x5, x2, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x6, &x7, x2, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x8, &x9, x2, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x10, &x11, x2, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x12, &x13, x2, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x14, &x15, x2, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x16, &x17, x2, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x18, &x19, x2, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x20, &x21, x2, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x22, &x23, 0x0, x21, x18); + fiat_np521_addcarryx_u64(&x24, &x25, x23, x19, x16); + fiat_np521_addcarryx_u64(&x26, &x27, x25, x17, x14); + fiat_np521_addcarryx_u64(&x28, &x29, x27, x15, x12); + fiat_np521_addcarryx_u64(&x30, &x31, x29, x13, x10); + fiat_np521_addcarryx_u64(&x32, &x33, x31, x11, x8); + fiat_np521_addcarryx_u64(&x34, &x35, x33, x9, x6); + fiat_np521_addcarryx_u64(&x36, &x37, x35, x7, x4); + fiat_np521_addcarryx_u64(&x38, &x39, 0x0, x1, x20); + fiat_np521_addcarryx_u64(&x40, &x41, x39, 0x0, x22); + fiat_np521_addcarryx_u64(&x42, &x43, x41, 0x0, x24); + fiat_np521_addcarryx_u64(&x44, &x45, x43, 0x0, x26); + fiat_np521_addcarryx_u64(&x46, &x47, x45, 0x0, x28); + fiat_np521_addcarryx_u64(&x48, &x49, x47, 0x0, x30); + fiat_np521_addcarryx_u64(&x50, &x51, x49, 0x0, x32); + fiat_np521_addcarryx_u64(&x52, &x53, x51, 0x0, x34); + fiat_np521_addcarryx_u64(&x54, &x55, x53, 0x0, x36); + fiat_np521_addcarryx_u64(&x56, &x57, 0x0, x40, (arg1[1])); + fiat_np521_addcarryx_u64(&x58, &x59, x57, x42, 0x0); + fiat_np521_addcarryx_u64(&x60, &x61, x59, x44, 0x0); + fiat_np521_addcarryx_u64(&x62, &x63, x61, x46, 0x0); + fiat_np521_addcarryx_u64(&x64, &x65, x63, x48, 0x0); + fiat_np521_addcarryx_u64(&x66, &x67, x65, x50, 0x0); + fiat_np521_addcarryx_u64(&x68, &x69, x67, x52, 0x0); + fiat_np521_addcarryx_u64(&x70, &x71, x69, x54, 0x0); + fiat_np521_mulx_u64(&x72, &x73, x56, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x74, &x75, x72, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x76, &x77, x72, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x78, &x79, x72, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x80, &x81, x72, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x82, &x83, x72, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x84, &x85, x72, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x86, &x87, x72, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x88, &x89, x72, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x90, &x91, x72, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x92, &x93, 0x0, x91, x88); + fiat_np521_addcarryx_u64(&x94, &x95, x93, x89, x86); + fiat_np521_addcarryx_u64(&x96, &x97, x95, x87, x84); + fiat_np521_addcarryx_u64(&x98, &x99, x97, x85, x82); + fiat_np521_addcarryx_u64(&x100, &x101, x99, x83, x80); + fiat_np521_addcarryx_u64(&x102, &x103, x101, x81, x78); + fiat_np521_addcarryx_u64(&x104, &x105, x103, x79, x76); + fiat_np521_addcarryx_u64(&x106, &x107, x105, x77, x74); + fiat_np521_addcarryx_u64(&x108, &x109, 0x0, x56, x90); + fiat_np521_addcarryx_u64(&x110, &x111, x109, x58, x92); + fiat_np521_addcarryx_u64(&x112, &x113, x111, x60, x94); + fiat_np521_addcarryx_u64(&x114, &x115, x113, x62, x96); + fiat_np521_addcarryx_u64(&x116, &x117, x115, x64, x98); + fiat_np521_addcarryx_u64(&x118, &x119, x117, x66, x100); + fiat_np521_addcarryx_u64(&x120, &x121, x119, x68, x102); + fiat_np521_addcarryx_u64(&x122, &x123, x121, x70, x104); + fiat_np521_addcarryx_u64(&x124, &x125, x123, (x71 + (x55 + (x37 + x5))), x106); + fiat_np521_addcarryx_u64(&x126, &x127, 0x0, x110, (arg1[2])); + fiat_np521_addcarryx_u64(&x128, &x129, x127, x112, 0x0); + fiat_np521_addcarryx_u64(&x130, &x131, x129, x114, 0x0); + fiat_np521_addcarryx_u64(&x132, &x133, x131, x116, 0x0); + fiat_np521_addcarryx_u64(&x134, &x135, x133, x118, 0x0); + fiat_np521_addcarryx_u64(&x136, &x137, x135, x120, 0x0); + fiat_np521_addcarryx_u64(&x138, &x139, x137, x122, 0x0); + fiat_np521_addcarryx_u64(&x140, &x141, x139, x124, 0x0); + fiat_np521_mulx_u64(&x142, &x143, x126, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x144, &x145, x142, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x146, &x147, x142, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x148, &x149, x142, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x150, &x151, x142, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x152, &x153, x142, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x154, &x155, x142, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x156, &x157, x142, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x158, &x159, x142, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x160, &x161, x142, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x162, &x163, 0x0, x161, x158); + fiat_np521_addcarryx_u64(&x164, &x165, x163, x159, x156); + fiat_np521_addcarryx_u64(&x166, &x167, x165, x157, x154); + fiat_np521_addcarryx_u64(&x168, &x169, x167, x155, x152); + fiat_np521_addcarryx_u64(&x170, &x171, x169, x153, x150); + fiat_np521_addcarryx_u64(&x172, &x173, x171, x151, x148); + fiat_np521_addcarryx_u64(&x174, &x175, x173, x149, x146); + fiat_np521_addcarryx_u64(&x176, &x177, x175, x147, x144); + fiat_np521_addcarryx_u64(&x178, &x179, 0x0, x126, x160); + fiat_np521_addcarryx_u64(&x180, &x181, x179, x128, x162); + fiat_np521_addcarryx_u64(&x182, &x183, x181, x130, x164); + fiat_np521_addcarryx_u64(&x184, &x185, x183, x132, x166); + fiat_np521_addcarryx_u64(&x186, &x187, x185, x134, x168); + fiat_np521_addcarryx_u64(&x188, &x189, x187, x136, x170); + fiat_np521_addcarryx_u64(&x190, &x191, x189, x138, x172); + fiat_np521_addcarryx_u64(&x192, &x193, x191, x140, x174); + fiat_np521_addcarryx_u64(&x194, &x195, x193, (x141 + (x125 + (x107 + x75))), x176); + fiat_np521_addcarryx_u64(&x196, &x197, 0x0, x180, (arg1[3])); + fiat_np521_addcarryx_u64(&x198, &x199, x197, x182, 0x0); + fiat_np521_addcarryx_u64(&x200, &x201, x199, x184, 0x0); + fiat_np521_addcarryx_u64(&x202, &x203, x201, x186, 0x0); + fiat_np521_addcarryx_u64(&x204, &x205, x203, x188, 0x0); + fiat_np521_addcarryx_u64(&x206, &x207, x205, x190, 0x0); + fiat_np521_addcarryx_u64(&x208, &x209, x207, x192, 0x0); + fiat_np521_addcarryx_u64(&x210, &x211, x209, x194, 0x0); + fiat_np521_mulx_u64(&x212, &x213, x196, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x214, &x215, x212, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x216, &x217, x212, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x218, &x219, x212, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x220, &x221, x212, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x222, &x223, x212, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x224, &x225, x212, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x226, &x227, x212, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x228, &x229, x212, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x230, &x231, x212, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x232, &x233, 0x0, x231, x228); + fiat_np521_addcarryx_u64(&x234, &x235, x233, x229, x226); + fiat_np521_addcarryx_u64(&x236, &x237, x235, x227, x224); + fiat_np521_addcarryx_u64(&x238, &x239, x237, x225, x222); + fiat_np521_addcarryx_u64(&x240, &x241, x239, x223, x220); + fiat_np521_addcarryx_u64(&x242, &x243, x241, x221, x218); + fiat_np521_addcarryx_u64(&x244, &x245, x243, x219, x216); + fiat_np521_addcarryx_u64(&x246, &x247, x245, x217, x214); + fiat_np521_addcarryx_u64(&x248, &x249, 0x0, x196, x230); + fiat_np521_addcarryx_u64(&x250, &x251, x249, x198, x232); + fiat_np521_addcarryx_u64(&x252, &x253, x251, x200, x234); + fiat_np521_addcarryx_u64(&x254, &x255, x253, x202, x236); + fiat_np521_addcarryx_u64(&x256, &x257, x255, x204, x238); + fiat_np521_addcarryx_u64(&x258, &x259, x257, x206, x240); + fiat_np521_addcarryx_u64(&x260, &x261, x259, x208, x242); + fiat_np521_addcarryx_u64(&x262, &x263, x261, x210, x244); + fiat_np521_addcarryx_u64(&x264, &x265, x263, (x211 + (x195 + (x177 + x145))), x246); + fiat_np521_addcarryx_u64(&x266, &x267, 0x0, x250, (arg1[4])); + fiat_np521_addcarryx_u64(&x268, &x269, x267, x252, 0x0); + fiat_np521_addcarryx_u64(&x270, &x271, x269, x254, 0x0); + fiat_np521_addcarryx_u64(&x272, &x273, x271, x256, 0x0); + fiat_np521_addcarryx_u64(&x274, &x275, x273, x258, 0x0); + fiat_np521_addcarryx_u64(&x276, &x277, x275, x260, 0x0); + fiat_np521_addcarryx_u64(&x278, &x279, x277, x262, 0x0); + fiat_np521_addcarryx_u64(&x280, &x281, x279, x264, 0x0); + fiat_np521_mulx_u64(&x282, &x283, x266, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x284, &x285, x282, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x286, &x287, x282, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x288, &x289, x282, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x290, &x291, x282, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x292, &x293, x282, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x294, &x295, x282, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x296, &x297, x282, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x298, &x299, x282, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x300, &x301, x282, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x302, &x303, 0x0, x301, x298); + fiat_np521_addcarryx_u64(&x304, &x305, x303, x299, x296); + fiat_np521_addcarryx_u64(&x306, &x307, x305, x297, x294); + fiat_np521_addcarryx_u64(&x308, &x309, x307, x295, x292); + fiat_np521_addcarryx_u64(&x310, &x311, x309, x293, x290); + fiat_np521_addcarryx_u64(&x312, &x313, x311, x291, x288); + fiat_np521_addcarryx_u64(&x314, &x315, x313, x289, x286); + fiat_np521_addcarryx_u64(&x316, &x317, x315, x287, x284); + fiat_np521_addcarryx_u64(&x318, &x319, 0x0, x266, x300); + fiat_np521_addcarryx_u64(&x320, &x321, x319, x268, x302); + fiat_np521_addcarryx_u64(&x322, &x323, x321, x270, x304); + fiat_np521_addcarryx_u64(&x324, &x325, x323, x272, x306); + fiat_np521_addcarryx_u64(&x326, &x327, x325, x274, x308); + fiat_np521_addcarryx_u64(&x328, &x329, x327, x276, x310); + fiat_np521_addcarryx_u64(&x330, &x331, x329, x278, x312); + fiat_np521_addcarryx_u64(&x332, &x333, x331, x280, x314); + fiat_np521_addcarryx_u64(&x334, &x335, x333, (x281 + (x265 + (x247 + x215))), x316); + fiat_np521_addcarryx_u64(&x336, &x337, 0x0, x320, (arg1[5])); + fiat_np521_addcarryx_u64(&x338, &x339, x337, x322, 0x0); + fiat_np521_addcarryx_u64(&x340, &x341, x339, x324, 0x0); + fiat_np521_addcarryx_u64(&x342, &x343, x341, x326, 0x0); + fiat_np521_addcarryx_u64(&x344, &x345, x343, x328, 0x0); + fiat_np521_addcarryx_u64(&x346, &x347, x345, x330, 0x0); + fiat_np521_addcarryx_u64(&x348, &x349, x347, x332, 0x0); + fiat_np521_addcarryx_u64(&x350, &x351, x349, x334, 0x0); + fiat_np521_mulx_u64(&x352, &x353, x336, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x354, &x355, x352, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x356, &x357, x352, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x358, &x359, x352, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x360, &x361, x352, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x362, &x363, x352, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x364, &x365, x352, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x366, &x367, x352, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x368, &x369, x352, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x370, &x371, x352, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x372, &x373, 0x0, x371, x368); + fiat_np521_addcarryx_u64(&x374, &x375, x373, x369, x366); + fiat_np521_addcarryx_u64(&x376, &x377, x375, x367, x364); + fiat_np521_addcarryx_u64(&x378, &x379, x377, x365, x362); + fiat_np521_addcarryx_u64(&x380, &x381, x379, x363, x360); + fiat_np521_addcarryx_u64(&x382, &x383, x381, x361, x358); + fiat_np521_addcarryx_u64(&x384, &x385, x383, x359, x356); + fiat_np521_addcarryx_u64(&x386, &x387, x385, x357, x354); + fiat_np521_addcarryx_u64(&x388, &x389, 0x0, x336, x370); + fiat_np521_addcarryx_u64(&x390, &x391, x389, x338, x372); + fiat_np521_addcarryx_u64(&x392, &x393, x391, x340, x374); + fiat_np521_addcarryx_u64(&x394, &x395, x393, x342, x376); + fiat_np521_addcarryx_u64(&x396, &x397, x395, x344, x378); + fiat_np521_addcarryx_u64(&x398, &x399, x397, x346, x380); + fiat_np521_addcarryx_u64(&x400, &x401, x399, x348, x382); + fiat_np521_addcarryx_u64(&x402, &x403, x401, x350, x384); + fiat_np521_addcarryx_u64(&x404, &x405, x403, (x351 + (x335 + (x317 + x285))), x386); + fiat_np521_addcarryx_u64(&x406, &x407, 0x0, x390, (arg1[6])); + fiat_np521_addcarryx_u64(&x408, &x409, x407, x392, 0x0); + fiat_np521_addcarryx_u64(&x410, &x411, x409, x394, 0x0); + fiat_np521_addcarryx_u64(&x412, &x413, x411, x396, 0x0); + fiat_np521_addcarryx_u64(&x414, &x415, x413, x398, 0x0); + fiat_np521_addcarryx_u64(&x416, &x417, x415, x400, 0x0); + fiat_np521_addcarryx_u64(&x418, &x419, x417, x402, 0x0); + fiat_np521_addcarryx_u64(&x420, &x421, x419, x404, 0x0); + fiat_np521_mulx_u64(&x422, &x423, x406, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x424, &x425, x422, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x426, &x427, x422, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x428, &x429, x422, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x430, &x431, x422, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x432, &x433, x422, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x434, &x435, x422, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x436, &x437, x422, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x438, &x439, x422, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x440, &x441, x422, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x442, &x443, 0x0, x441, x438); + fiat_np521_addcarryx_u64(&x444, &x445, x443, x439, x436); + fiat_np521_addcarryx_u64(&x446, &x447, x445, x437, x434); + fiat_np521_addcarryx_u64(&x448, &x449, x447, x435, x432); + fiat_np521_addcarryx_u64(&x450, &x451, x449, x433, x430); + fiat_np521_addcarryx_u64(&x452, &x453, x451, x431, x428); + fiat_np521_addcarryx_u64(&x454, &x455, x453, x429, x426); + fiat_np521_addcarryx_u64(&x456, &x457, x455, x427, x424); + fiat_np521_addcarryx_u64(&x458, &x459, 0x0, x406, x440); + fiat_np521_addcarryx_u64(&x460, &x461, x459, x408, x442); + fiat_np521_addcarryx_u64(&x462, &x463, x461, x410, x444); + fiat_np521_addcarryx_u64(&x464, &x465, x463, x412, x446); + fiat_np521_addcarryx_u64(&x466, &x467, x465, x414, x448); + fiat_np521_addcarryx_u64(&x468, &x469, x467, x416, x450); + fiat_np521_addcarryx_u64(&x470, &x471, x469, x418, x452); + fiat_np521_addcarryx_u64(&x472, &x473, x471, x420, x454); + fiat_np521_addcarryx_u64(&x474, &x475, x473, (x421 + (x405 + (x387 + x355))), x456); + fiat_np521_addcarryx_u64(&x476, &x477, 0x0, x460, (arg1[7])); + fiat_np521_addcarryx_u64(&x478, &x479, x477, x462, 0x0); + fiat_np521_addcarryx_u64(&x480, &x481, x479, x464, 0x0); + fiat_np521_addcarryx_u64(&x482, &x483, x481, x466, 0x0); + fiat_np521_addcarryx_u64(&x484, &x485, x483, x468, 0x0); + fiat_np521_addcarryx_u64(&x486, &x487, x485, x470, 0x0); + fiat_np521_addcarryx_u64(&x488, &x489, x487, x472, 0x0); + fiat_np521_addcarryx_u64(&x490, &x491, x489, x474, 0x0); + fiat_np521_mulx_u64(&x492, &x493, x476, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x494, &x495, x492, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x496, &x497, x492, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x498, &x499, x492, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x500, &x501, x492, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x502, &x503, x492, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x504, &x505, x492, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x506, &x507, x492, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x508, &x509, x492, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x510, &x511, x492, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x512, &x513, 0x0, x511, x508); + fiat_np521_addcarryx_u64(&x514, &x515, x513, x509, x506); + fiat_np521_addcarryx_u64(&x516, &x517, x515, x507, x504); + fiat_np521_addcarryx_u64(&x518, &x519, x517, x505, x502); + fiat_np521_addcarryx_u64(&x520, &x521, x519, x503, x500); + fiat_np521_addcarryx_u64(&x522, &x523, x521, x501, x498); + fiat_np521_addcarryx_u64(&x524, &x525, x523, x499, x496); + fiat_np521_addcarryx_u64(&x526, &x527, x525, x497, x494); + fiat_np521_addcarryx_u64(&x528, &x529, 0x0, x476, x510); + fiat_np521_addcarryx_u64(&x530, &x531, x529, x478, x512); + fiat_np521_addcarryx_u64(&x532, &x533, x531, x480, x514); + fiat_np521_addcarryx_u64(&x534, &x535, x533, x482, x516); + fiat_np521_addcarryx_u64(&x536, &x537, x535, x484, x518); + fiat_np521_addcarryx_u64(&x538, &x539, x537, x486, x520); + fiat_np521_addcarryx_u64(&x540, &x541, x539, x488, x522); + fiat_np521_addcarryx_u64(&x542, &x543, x541, x490, x524); + fiat_np521_addcarryx_u64(&x544, &x545, x543, (x491 + (x475 + (x457 + x425))), x526); + fiat_np521_addcarryx_u64(&x546, &x547, 0x0, x530, (arg1[8])); + fiat_np521_addcarryx_u64(&x548, &x549, x547, x532, 0x0); + fiat_np521_addcarryx_u64(&x550, &x551, x549, x534, 0x0); + fiat_np521_addcarryx_u64(&x552, &x553, x551, x536, 0x0); + fiat_np521_addcarryx_u64(&x554, &x555, x553, x538, 0x0); + fiat_np521_addcarryx_u64(&x556, &x557, x555, x540, 0x0); + fiat_np521_addcarryx_u64(&x558, &x559, x557, x542, 0x0); + fiat_np521_addcarryx_u64(&x560, &x561, x559, x544, 0x0); + fiat_np521_mulx_u64(&x562, &x563, x546, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x564, &x565, x562, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x566, &x567, x562, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x568, &x569, x562, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x570, &x571, x562, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x572, &x573, x562, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x574, &x575, x562, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x576, &x577, x562, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x578, &x579, x562, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x580, &x581, x562, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x582, &x583, 0x0, x581, x578); + fiat_np521_addcarryx_u64(&x584, &x585, x583, x579, x576); + fiat_np521_addcarryx_u64(&x586, &x587, x585, x577, x574); + fiat_np521_addcarryx_u64(&x588, &x589, x587, x575, x572); + fiat_np521_addcarryx_u64(&x590, &x591, x589, x573, x570); + fiat_np521_addcarryx_u64(&x592, &x593, x591, x571, x568); + fiat_np521_addcarryx_u64(&x594, &x595, x593, x569, x566); + fiat_np521_addcarryx_u64(&x596, &x597, x595, x567, x564); + fiat_np521_addcarryx_u64(&x598, &x599, 0x0, x546, x580); + fiat_np521_addcarryx_u64(&x600, &x601, x599, x548, x582); + fiat_np521_addcarryx_u64(&x602, &x603, x601, x550, x584); + fiat_np521_addcarryx_u64(&x604, &x605, x603, x552, x586); + fiat_np521_addcarryx_u64(&x606, &x607, x605, x554, x588); + fiat_np521_addcarryx_u64(&x608, &x609, x607, x556, x590); + fiat_np521_addcarryx_u64(&x610, &x611, x609, x558, x592); + fiat_np521_addcarryx_u64(&x612, &x613, x611, x560, x594); + fiat_np521_addcarryx_u64(&x614, &x615, x613, (x561 + (x545 + (x527 + x495))), x596); + x616 = (x615 + (x597 + x565)); + fiat_np521_subborrowx_u64(&x617, &x618, 0x0, x600, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_subborrowx_u64(&x619, &x620, x618, x602, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_subborrowx_u64(&x621, &x622, x620, x604, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_subborrowx_u64(&x623, &x624, x622, x606, UINT64_C(0x51868783bf2f966b)); + fiat_np521_subborrowx_u64(&x625, &x626, x624, x608, UINT64_C(0xfffffffffffffffa)); + fiat_np521_subborrowx_u64(&x627, &x628, x626, x610, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x629, &x630, x628, x612, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x631, &x632, x630, x614, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x633, &x634, x632, x616, UINT16_C(0x1ff)); + fiat_np521_subborrowx_u64(&x635, &x636, x634, 0x0, 0x0); + fiat_np521_cmovznz_u64(&x637, x636, x617, x600); + fiat_np521_cmovznz_u64(&x638, x636, x619, x602); + fiat_np521_cmovznz_u64(&x639, x636, x621, x604); + fiat_np521_cmovznz_u64(&x640, x636, x623, x606); + fiat_np521_cmovznz_u64(&x641, x636, x625, x608); + fiat_np521_cmovznz_u64(&x642, x636, x627, x610); + fiat_np521_cmovznz_u64(&x643, x636, x629, x612); + fiat_np521_cmovznz_u64(&x644, x636, x631, x614); + fiat_np521_cmovznz_u64(&x645, x636, x633, x616); + out1[0] = x637; + out1[1] = x638; + out1[2] = x639; + out1[3] = x640; + out1[4] = x641; + out1[5] = x642; + out1[6] = x643; + out1[7] = x644; + out1[8] = x645; +} + +/* + * The function fiat_np521_to_montgomery translates a field element into the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np521_to_montgomery(uint64_t out1[9], const uint64_t arg1[9]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + fiat_np521_uint1 x29; + uint64_t x30; + fiat_np521_uint1 x31; + uint64_t x32; + fiat_np521_uint1 x33; + uint64_t x34; + fiat_np521_uint1 x35; + uint64_t x36; + fiat_np521_uint1 x37; + uint64_t x38; + fiat_np521_uint1 x39; + uint64_t x40; + fiat_np521_uint1 x41; + uint64_t x42; + fiat_np521_uint1 x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint64_t x57; + uint64_t x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + fiat_np521_uint1 x65; + uint64_t x66; + fiat_np521_uint1 x67; + uint64_t x68; + fiat_np521_uint1 x69; + uint64_t x70; + fiat_np521_uint1 x71; + uint64_t x72; + fiat_np521_uint1 x73; + uint64_t x74; + fiat_np521_uint1 x75; + uint64_t x76; + fiat_np521_uint1 x77; + uint64_t x78; + fiat_np521_uint1 x79; + uint64_t x80; + fiat_np521_uint1 x81; + uint64_t x82; + fiat_np521_uint1 x83; + uint64_t x84; + fiat_np521_uint1 x85; + uint64_t x86; + fiat_np521_uint1 x87; + uint64_t x88; + fiat_np521_uint1 x89; + uint64_t x90; + fiat_np521_uint1 x91; + uint64_t x92; + fiat_np521_uint1 x93; + uint64_t x94; + fiat_np521_uint1 x95; + uint64_t x96; + fiat_np521_uint1 x97; + uint64_t x98; + uint64_t x99; + uint64_t x100; + uint64_t x101; + uint64_t x102; + uint64_t x103; + uint64_t x104; + uint64_t x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + uint64_t x109; + uint64_t x110; + uint64_t x111; + uint64_t x112; + uint64_t x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + fiat_np521_uint1 x117; + uint64_t x118; + fiat_np521_uint1 x119; + uint64_t x120; + fiat_np521_uint1 x121; + uint64_t x122; + fiat_np521_uint1 x123; + uint64_t x124; + fiat_np521_uint1 x125; + uint64_t x126; + fiat_np521_uint1 x127; + uint64_t x128; + fiat_np521_uint1 x129; + uint64_t x130; + fiat_np521_uint1 x131; + uint64_t x132; + fiat_np521_uint1 x133; + uint64_t x134; + fiat_np521_uint1 x135; + uint64_t x136; + fiat_np521_uint1 x137; + uint64_t x138; + fiat_np521_uint1 x139; + uint64_t x140; + fiat_np521_uint1 x141; + uint64_t x142; + fiat_np521_uint1 x143; + uint64_t x144; + fiat_np521_uint1 x145; + uint64_t x146; + fiat_np521_uint1 x147; + uint64_t x148; + fiat_np521_uint1 x149; + uint64_t x150; + uint64_t x151; + uint64_t x152; + uint64_t x153; + uint64_t x154; + uint64_t x155; + uint64_t x156; + uint64_t x157; + uint64_t x158; + uint64_t x159; + uint64_t x160; + uint64_t x161; + uint64_t x162; + uint64_t x163; + uint64_t x164; + uint64_t x165; + uint64_t x166; + uint64_t x167; + uint64_t x168; + uint64_t x169; + uint64_t x170; + fiat_np521_uint1 x171; + uint64_t x172; + fiat_np521_uint1 x173; + uint64_t x174; + fiat_np521_uint1 x175; + uint64_t x176; + fiat_np521_uint1 x177; + uint64_t x178; + fiat_np521_uint1 x179; + uint64_t x180; + fiat_np521_uint1 x181; + uint64_t x182; + fiat_np521_uint1 x183; + uint64_t x184; + fiat_np521_uint1 x185; + uint64_t x186; + fiat_np521_uint1 x187; + uint64_t x188; + fiat_np521_uint1 x189; + uint64_t x190; + fiat_np521_uint1 x191; + uint64_t x192; + fiat_np521_uint1 x193; + uint64_t x194; + fiat_np521_uint1 x195; + uint64_t x196; + fiat_np521_uint1 x197; + uint64_t x198; + fiat_np521_uint1 x199; + uint64_t x200; + fiat_np521_uint1 x201; + uint64_t x202; + fiat_np521_uint1 x203; + uint64_t x204; + uint64_t x205; + uint64_t x206; + uint64_t x207; + uint64_t x208; + uint64_t x209; + uint64_t x210; + uint64_t x211; + uint64_t x212; + uint64_t x213; + uint64_t x214; + uint64_t x215; + uint64_t x216; + uint64_t x217; + uint64_t x218; + uint64_t x219; + uint64_t x220; + uint64_t x221; + uint64_t x222; + fiat_np521_uint1 x223; + uint64_t x224; + fiat_np521_uint1 x225; + uint64_t x226; + fiat_np521_uint1 x227; + uint64_t x228; + fiat_np521_uint1 x229; + uint64_t x230; + fiat_np521_uint1 x231; + uint64_t x232; + fiat_np521_uint1 x233; + uint64_t x234; + fiat_np521_uint1 x235; + uint64_t x236; + fiat_np521_uint1 x237; + uint64_t x238; + fiat_np521_uint1 x239; + uint64_t x240; + fiat_np521_uint1 x241; + uint64_t x242; + fiat_np521_uint1 x243; + uint64_t x244; + fiat_np521_uint1 x245; + uint64_t x246; + fiat_np521_uint1 x247; + uint64_t x248; + fiat_np521_uint1 x249; + uint64_t x250; + fiat_np521_uint1 x251; + uint64_t x252; + fiat_np521_uint1 x253; + uint64_t x254; + fiat_np521_uint1 x255; + uint64_t x256; + uint64_t x257; + uint64_t x258; + uint64_t x259; + uint64_t x260; + uint64_t x261; + uint64_t x262; + uint64_t x263; + uint64_t x264; + uint64_t x265; + uint64_t x266; + uint64_t x267; + uint64_t x268; + uint64_t x269; + uint64_t x270; + uint64_t x271; + uint64_t x272; + uint64_t x273; + uint64_t x274; + uint64_t x275; + uint64_t x276; + fiat_np521_uint1 x277; + uint64_t x278; + fiat_np521_uint1 x279; + uint64_t x280; + fiat_np521_uint1 x281; + uint64_t x282; + fiat_np521_uint1 x283; + uint64_t x284; + fiat_np521_uint1 x285; + uint64_t x286; + fiat_np521_uint1 x287; + uint64_t x288; + fiat_np521_uint1 x289; + uint64_t x290; + fiat_np521_uint1 x291; + uint64_t x292; + fiat_np521_uint1 x293; + uint64_t x294; + fiat_np521_uint1 x295; + uint64_t x296; + fiat_np521_uint1 x297; + uint64_t x298; + fiat_np521_uint1 x299; + uint64_t x300; + fiat_np521_uint1 x301; + uint64_t x302; + fiat_np521_uint1 x303; + uint64_t x304; + fiat_np521_uint1 x305; + uint64_t x306; + fiat_np521_uint1 x307; + uint64_t x308; + fiat_np521_uint1 x309; + uint64_t x310; + uint64_t x311; + uint64_t x312; + uint64_t x313; + uint64_t x314; + uint64_t x315; + uint64_t x316; + uint64_t x317; + uint64_t x318; + uint64_t x319; + uint64_t x320; + uint64_t x321; + uint64_t x322; + uint64_t x323; + uint64_t x324; + uint64_t x325; + uint64_t x326; + uint64_t x327; + uint64_t x328; + fiat_np521_uint1 x329; + uint64_t x330; + fiat_np521_uint1 x331; + uint64_t x332; + fiat_np521_uint1 x333; + uint64_t x334; + fiat_np521_uint1 x335; + uint64_t x336; + fiat_np521_uint1 x337; + uint64_t x338; + fiat_np521_uint1 x339; + uint64_t x340; + fiat_np521_uint1 x341; + uint64_t x342; + fiat_np521_uint1 x343; + uint64_t x344; + fiat_np521_uint1 x345; + uint64_t x346; + fiat_np521_uint1 x347; + uint64_t x348; + fiat_np521_uint1 x349; + uint64_t x350; + fiat_np521_uint1 x351; + uint64_t x352; + fiat_np521_uint1 x353; + uint64_t x354; + fiat_np521_uint1 x355; + uint64_t x356; + fiat_np521_uint1 x357; + uint64_t x358; + fiat_np521_uint1 x359; + uint64_t x360; + fiat_np521_uint1 x361; + uint64_t x362; + uint64_t x363; + uint64_t x364; + uint64_t x365; + uint64_t x366; + uint64_t x367; + uint64_t x368; + uint64_t x369; + uint64_t x370; + uint64_t x371; + uint64_t x372; + uint64_t x373; + uint64_t x374; + uint64_t x375; + uint64_t x376; + uint64_t x377; + uint64_t x378; + uint64_t x379; + uint64_t x380; + uint64_t x381; + uint64_t x382; + fiat_np521_uint1 x383; + uint64_t x384; + fiat_np521_uint1 x385; + uint64_t x386; + fiat_np521_uint1 x387; + uint64_t x388; + fiat_np521_uint1 x389; + uint64_t x390; + fiat_np521_uint1 x391; + uint64_t x392; + fiat_np521_uint1 x393; + uint64_t x394; + fiat_np521_uint1 x395; + uint64_t x396; + fiat_np521_uint1 x397; + uint64_t x398; + fiat_np521_uint1 x399; + uint64_t x400; + fiat_np521_uint1 x401; + uint64_t x402; + fiat_np521_uint1 x403; + uint64_t x404; + fiat_np521_uint1 x405; + uint64_t x406; + fiat_np521_uint1 x407; + uint64_t x408; + fiat_np521_uint1 x409; + uint64_t x410; + fiat_np521_uint1 x411; + uint64_t x412; + fiat_np521_uint1 x413; + uint64_t x414; + fiat_np521_uint1 x415; + uint64_t x416; + uint64_t x417; + uint64_t x418; + uint64_t x419; + uint64_t x420; + uint64_t x421; + uint64_t x422; + uint64_t x423; + uint64_t x424; + uint64_t x425; + uint64_t x426; + uint64_t x427; + uint64_t x428; + uint64_t x429; + uint64_t x430; + uint64_t x431; + uint64_t x432; + uint64_t x433; + uint64_t x434; + fiat_np521_uint1 x435; + uint64_t x436; + fiat_np521_uint1 x437; + uint64_t x438; + fiat_np521_uint1 x439; + uint64_t x440; + fiat_np521_uint1 x441; + uint64_t x442; + fiat_np521_uint1 x443; + uint64_t x444; + fiat_np521_uint1 x445; + uint64_t x446; + fiat_np521_uint1 x447; + uint64_t x448; + fiat_np521_uint1 x449; + uint64_t x450; + fiat_np521_uint1 x451; + uint64_t x452; + fiat_np521_uint1 x453; + uint64_t x454; + fiat_np521_uint1 x455; + uint64_t x456; + fiat_np521_uint1 x457; + uint64_t x458; + fiat_np521_uint1 x459; + uint64_t x460; + fiat_np521_uint1 x461; + uint64_t x462; + fiat_np521_uint1 x463; + uint64_t x464; + fiat_np521_uint1 x465; + uint64_t x466; + fiat_np521_uint1 x467; + uint64_t x468; + uint64_t x469; + uint64_t x470; + uint64_t x471; + uint64_t x472; + uint64_t x473; + uint64_t x474; + uint64_t x475; + uint64_t x476; + uint64_t x477; + uint64_t x478; + uint64_t x479; + uint64_t x480; + uint64_t x481; + uint64_t x482; + uint64_t x483; + uint64_t x484; + uint64_t x485; + uint64_t x486; + uint64_t x487; + uint64_t x488; + fiat_np521_uint1 x489; + uint64_t x490; + fiat_np521_uint1 x491; + uint64_t x492; + fiat_np521_uint1 x493; + uint64_t x494; + fiat_np521_uint1 x495; + uint64_t x496; + fiat_np521_uint1 x497; + uint64_t x498; + fiat_np521_uint1 x499; + uint64_t x500; + fiat_np521_uint1 x501; + uint64_t x502; + fiat_np521_uint1 x503; + uint64_t x504; + fiat_np521_uint1 x505; + uint64_t x506; + fiat_np521_uint1 x507; + uint64_t x508; + fiat_np521_uint1 x509; + uint64_t x510; + fiat_np521_uint1 x511; + uint64_t x512; + fiat_np521_uint1 x513; + uint64_t x514; + fiat_np521_uint1 x515; + uint64_t x516; + fiat_np521_uint1 x517; + uint64_t x518; + fiat_np521_uint1 x519; + uint64_t x520; + fiat_np521_uint1 x521; + uint64_t x522; + uint64_t x523; + uint64_t x524; + uint64_t x525; + uint64_t x526; + uint64_t x527; + uint64_t x528; + uint64_t x529; + uint64_t x530; + uint64_t x531; + uint64_t x532; + uint64_t x533; + uint64_t x534; + uint64_t x535; + uint64_t x536; + uint64_t x537; + uint64_t x538; + uint64_t x539; + uint64_t x540; + fiat_np521_uint1 x541; + uint64_t x542; + fiat_np521_uint1 x543; + uint64_t x544; + fiat_np521_uint1 x545; + uint64_t x546; + fiat_np521_uint1 x547; + uint64_t x548; + fiat_np521_uint1 x549; + uint64_t x550; + fiat_np521_uint1 x551; + uint64_t x552; + fiat_np521_uint1 x553; + uint64_t x554; + fiat_np521_uint1 x555; + uint64_t x556; + fiat_np521_uint1 x557; + uint64_t x558; + fiat_np521_uint1 x559; + uint64_t x560; + fiat_np521_uint1 x561; + uint64_t x562; + fiat_np521_uint1 x563; + uint64_t x564; + fiat_np521_uint1 x565; + uint64_t x566; + fiat_np521_uint1 x567; + uint64_t x568; + fiat_np521_uint1 x569; + uint64_t x570; + fiat_np521_uint1 x571; + uint64_t x572; + fiat_np521_uint1 x573; + uint64_t x574; + uint64_t x575; + uint64_t x576; + uint64_t x577; + uint64_t x578; + uint64_t x579; + uint64_t x580; + uint64_t x581; + uint64_t x582; + uint64_t x583; + uint64_t x584; + uint64_t x585; + uint64_t x586; + uint64_t x587; + uint64_t x588; + uint64_t x589; + uint64_t x590; + uint64_t x591; + uint64_t x592; + uint64_t x593; + uint64_t x594; + fiat_np521_uint1 x595; + uint64_t x596; + fiat_np521_uint1 x597; + uint64_t x598; + fiat_np521_uint1 x599; + uint64_t x600; + fiat_np521_uint1 x601; + uint64_t x602; + fiat_np521_uint1 x603; + uint64_t x604; + fiat_np521_uint1 x605; + uint64_t x606; + fiat_np521_uint1 x607; + uint64_t x608; + fiat_np521_uint1 x609; + uint64_t x610; + fiat_np521_uint1 x611; + uint64_t x612; + fiat_np521_uint1 x613; + uint64_t x614; + fiat_np521_uint1 x615; + uint64_t x616; + fiat_np521_uint1 x617; + uint64_t x618; + fiat_np521_uint1 x619; + uint64_t x620; + fiat_np521_uint1 x621; + uint64_t x622; + fiat_np521_uint1 x623; + uint64_t x624; + fiat_np521_uint1 x625; + uint64_t x626; + fiat_np521_uint1 x627; + uint64_t x628; + uint64_t x629; + uint64_t x630; + uint64_t x631; + uint64_t x632; + uint64_t x633; + uint64_t x634; + uint64_t x635; + uint64_t x636; + uint64_t x637; + uint64_t x638; + uint64_t x639; + uint64_t x640; + uint64_t x641; + uint64_t x642; + uint64_t x643; + uint64_t x644; + uint64_t x645; + uint64_t x646; + fiat_np521_uint1 x647; + uint64_t x648; + fiat_np521_uint1 x649; + uint64_t x650; + fiat_np521_uint1 x651; + uint64_t x652; + fiat_np521_uint1 x653; + uint64_t x654; + fiat_np521_uint1 x655; + uint64_t x656; + fiat_np521_uint1 x657; + uint64_t x658; + fiat_np521_uint1 x659; + uint64_t x660; + fiat_np521_uint1 x661; + uint64_t x662; + fiat_np521_uint1 x663; + uint64_t x664; + fiat_np521_uint1 x665; + uint64_t x666; + fiat_np521_uint1 x667; + uint64_t x668; + fiat_np521_uint1 x669; + uint64_t x670; + fiat_np521_uint1 x671; + uint64_t x672; + fiat_np521_uint1 x673; + uint64_t x674; + fiat_np521_uint1 x675; + uint64_t x676; + fiat_np521_uint1 x677; + uint64_t x678; + fiat_np521_uint1 x679; + uint64_t x680; + uint64_t x681; + uint64_t x682; + uint64_t x683; + uint64_t x684; + uint64_t x685; + uint64_t x686; + uint64_t x687; + uint64_t x688; + uint64_t x689; + uint64_t x690; + uint64_t x691; + uint64_t x692; + uint64_t x693; + uint64_t x694; + uint64_t x695; + uint64_t x696; + uint64_t x697; + uint64_t x698; + uint64_t x699; + uint64_t x700; + fiat_np521_uint1 x701; + uint64_t x702; + fiat_np521_uint1 x703; + uint64_t x704; + fiat_np521_uint1 x705; + uint64_t x706; + fiat_np521_uint1 x707; + uint64_t x708; + fiat_np521_uint1 x709; + uint64_t x710; + fiat_np521_uint1 x711; + uint64_t x712; + fiat_np521_uint1 x713; + uint64_t x714; + fiat_np521_uint1 x715; + uint64_t x716; + fiat_np521_uint1 x717; + uint64_t x718; + fiat_np521_uint1 x719; + uint64_t x720; + fiat_np521_uint1 x721; + uint64_t x722; + fiat_np521_uint1 x723; + uint64_t x724; + fiat_np521_uint1 x725; + uint64_t x726; + fiat_np521_uint1 x727; + uint64_t x728; + fiat_np521_uint1 x729; + uint64_t x730; + fiat_np521_uint1 x731; + uint64_t x732; + fiat_np521_uint1 x733; + uint64_t x734; + uint64_t x735; + uint64_t x736; + uint64_t x737; + uint64_t x738; + uint64_t x739; + uint64_t x740; + uint64_t x741; + uint64_t x742; + uint64_t x743; + uint64_t x744; + uint64_t x745; + uint64_t x746; + uint64_t x747; + uint64_t x748; + uint64_t x749; + uint64_t x750; + uint64_t x751; + uint64_t x752; + fiat_np521_uint1 x753; + uint64_t x754; + fiat_np521_uint1 x755; + uint64_t x756; + fiat_np521_uint1 x757; + uint64_t x758; + fiat_np521_uint1 x759; + uint64_t x760; + fiat_np521_uint1 x761; + uint64_t x762; + fiat_np521_uint1 x763; + uint64_t x764; + fiat_np521_uint1 x765; + uint64_t x766; + fiat_np521_uint1 x767; + uint64_t x768; + fiat_np521_uint1 x769; + uint64_t x770; + fiat_np521_uint1 x771; + uint64_t x772; + fiat_np521_uint1 x773; + uint64_t x774; + fiat_np521_uint1 x775; + uint64_t x776; + fiat_np521_uint1 x777; + uint64_t x778; + fiat_np521_uint1 x779; + uint64_t x780; + fiat_np521_uint1 x781; + uint64_t x782; + fiat_np521_uint1 x783; + uint64_t x784; + fiat_np521_uint1 x785; + uint64_t x786; + uint64_t x787; + uint64_t x788; + uint64_t x789; + uint64_t x790; + uint64_t x791; + uint64_t x792; + uint64_t x793; + uint64_t x794; + uint64_t x795; + uint64_t x796; + uint64_t x797; + uint64_t x798; + uint64_t x799; + uint64_t x800; + uint64_t x801; + uint64_t x802; + uint64_t x803; + uint64_t x804; + uint64_t x805; + uint64_t x806; + fiat_np521_uint1 x807; + uint64_t x808; + fiat_np521_uint1 x809; + uint64_t x810; + fiat_np521_uint1 x811; + uint64_t x812; + fiat_np521_uint1 x813; + uint64_t x814; + fiat_np521_uint1 x815; + uint64_t x816; + fiat_np521_uint1 x817; + uint64_t x818; + fiat_np521_uint1 x819; + uint64_t x820; + fiat_np521_uint1 x821; + uint64_t x822; + fiat_np521_uint1 x823; + uint64_t x824; + fiat_np521_uint1 x825; + uint64_t x826; + fiat_np521_uint1 x827; + uint64_t x828; + fiat_np521_uint1 x829; + uint64_t x830; + fiat_np521_uint1 x831; + uint64_t x832; + fiat_np521_uint1 x833; + uint64_t x834; + fiat_np521_uint1 x835; + uint64_t x836; + fiat_np521_uint1 x837; + uint64_t x838; + fiat_np521_uint1 x839; + uint64_t x840; + uint64_t x841; + uint64_t x842; + uint64_t x843; + uint64_t x844; + uint64_t x845; + uint64_t x846; + uint64_t x847; + uint64_t x848; + uint64_t x849; + uint64_t x850; + uint64_t x851; + uint64_t x852; + uint64_t x853; + uint64_t x854; + uint64_t x855; + uint64_t x856; + uint64_t x857; + uint64_t x858; + fiat_np521_uint1 x859; + uint64_t x860; + fiat_np521_uint1 x861; + uint64_t x862; + fiat_np521_uint1 x863; + uint64_t x864; + fiat_np521_uint1 x865; + uint64_t x866; + fiat_np521_uint1 x867; + uint64_t x868; + fiat_np521_uint1 x869; + uint64_t x870; + fiat_np521_uint1 x871; + uint64_t x872; + fiat_np521_uint1 x873; + uint64_t x874; + fiat_np521_uint1 x875; + uint64_t x876; + fiat_np521_uint1 x877; + uint64_t x878; + fiat_np521_uint1 x879; + uint64_t x880; + fiat_np521_uint1 x881; + uint64_t x882; + fiat_np521_uint1 x883; + uint64_t x884; + fiat_np521_uint1 x885; + uint64_t x886; + fiat_np521_uint1 x887; + uint64_t x888; + fiat_np521_uint1 x889; + uint64_t x890; + fiat_np521_uint1 x891; + uint64_t x892; + uint64_t x893; + uint64_t x894; + uint64_t x895; + uint64_t x896; + uint64_t x897; + uint64_t x898; + uint64_t x899; + uint64_t x900; + uint64_t x901; + uint64_t x902; + uint64_t x903; + uint64_t x904; + uint64_t x905; + uint64_t x906; + uint64_t x907; + uint64_t x908; + uint64_t x909; + uint64_t x910; + uint64_t x911; + uint64_t x912; + fiat_np521_uint1 x913; + uint64_t x914; + fiat_np521_uint1 x915; + uint64_t x916; + fiat_np521_uint1 x917; + uint64_t x918; + fiat_np521_uint1 x919; + uint64_t x920; + fiat_np521_uint1 x921; + uint64_t x922; + fiat_np521_uint1 x923; + uint64_t x924; + fiat_np521_uint1 x925; + uint64_t x926; + fiat_np521_uint1 x927; + uint64_t x928; + fiat_np521_uint1 x929; + uint64_t x930; + fiat_np521_uint1 x931; + uint64_t x932; + fiat_np521_uint1 x933; + uint64_t x934; + fiat_np521_uint1 x935; + uint64_t x936; + fiat_np521_uint1 x937; + uint64_t x938; + fiat_np521_uint1 x939; + uint64_t x940; + fiat_np521_uint1 x941; + uint64_t x942; + fiat_np521_uint1 x943; + uint64_t x944; + fiat_np521_uint1 x945; + uint64_t x946; + uint64_t x947; + fiat_np521_uint1 x948; + uint64_t x949; + fiat_np521_uint1 x950; + uint64_t x951; + fiat_np521_uint1 x952; + uint64_t x953; + fiat_np521_uint1 x954; + uint64_t x955; + fiat_np521_uint1 x956; + uint64_t x957; + fiat_np521_uint1 x958; + uint64_t x959; + fiat_np521_uint1 x960; + uint64_t x961; + fiat_np521_uint1 x962; + uint64_t x963; + fiat_np521_uint1 x964; + uint64_t x965; + fiat_np521_uint1 x966; + uint64_t x967; + uint64_t x968; + uint64_t x969; + uint64_t x970; + uint64_t x971; + uint64_t x972; + uint64_t x973; + uint64_t x974; + uint64_t x975; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[8]); + x9 = (arg1[0]); + fiat_np521_mulx_u64(&x10, &x11, x9, UINT8_C(0x3d)); + fiat_np521_mulx_u64(&x12, &x13, x9, UINT64_C(0x2d8e03d1492d0d45)); + fiat_np521_mulx_u64(&x14, &x15, x9, UINT64_C(0x5bcc6d61a8e567bc)); + fiat_np521_mulx_u64(&x16, &x17, x9, UINT64_C(0xcff3d142b7756e3e)); + fiat_np521_mulx_u64(&x18, &x19, x9, UINT64_C(0xdd6e23d82e49c7db)); + fiat_np521_mulx_u64(&x20, &x21, x9, UINT64_C(0xd3721ef557f75e06)); + fiat_np521_mulx_u64(&x22, &x23, x9, UINT64_C(0x12a78d38794573ff)); + fiat_np521_mulx_u64(&x24, &x25, x9, UINT64_C(0xf707badce5547ea3)); + fiat_np521_mulx_u64(&x26, &x27, x9, UINT64_C(0x137cd04dcf15dd04)); + fiat_np521_addcarryx_u64(&x28, &x29, 0x0, x27, x24); + fiat_np521_addcarryx_u64(&x30, &x31, x29, x25, x22); + fiat_np521_addcarryx_u64(&x32, &x33, x31, x23, x20); + fiat_np521_addcarryx_u64(&x34, &x35, x33, x21, x18); + fiat_np521_addcarryx_u64(&x36, &x37, x35, x19, x16); + fiat_np521_addcarryx_u64(&x38, &x39, x37, x17, x14); + fiat_np521_addcarryx_u64(&x40, &x41, x39, x15, x12); + fiat_np521_addcarryx_u64(&x42, &x43, x41, x13, x10); + fiat_np521_mulx_u64(&x44, &x45, x26, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x46, &x47, x44, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x48, &x49, x44, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x50, &x51, x44, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x52, &x53, x44, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x54, &x55, x44, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x56, &x57, x44, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x58, &x59, x44, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x60, &x61, x44, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x62, &x63, x44, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x64, &x65, 0x0, x63, x60); + fiat_np521_addcarryx_u64(&x66, &x67, x65, x61, x58); + fiat_np521_addcarryx_u64(&x68, &x69, x67, x59, x56); + fiat_np521_addcarryx_u64(&x70, &x71, x69, x57, x54); + fiat_np521_addcarryx_u64(&x72, &x73, x71, x55, x52); + fiat_np521_addcarryx_u64(&x74, &x75, x73, x53, x50); + fiat_np521_addcarryx_u64(&x76, &x77, x75, x51, x48); + fiat_np521_addcarryx_u64(&x78, &x79, x77, x49, x46); + fiat_np521_addcarryx_u64(&x80, &x81, 0x0, x26, x62); + fiat_np521_addcarryx_u64(&x82, &x83, x81, x28, x64); + fiat_np521_addcarryx_u64(&x84, &x85, x83, x30, x66); + fiat_np521_addcarryx_u64(&x86, &x87, x85, x32, x68); + fiat_np521_addcarryx_u64(&x88, &x89, x87, x34, x70); + fiat_np521_addcarryx_u64(&x90, &x91, x89, x36, x72); + fiat_np521_addcarryx_u64(&x92, &x93, x91, x38, x74); + fiat_np521_addcarryx_u64(&x94, &x95, x93, x40, x76); + fiat_np521_addcarryx_u64(&x96, &x97, x95, x42, x78); + fiat_np521_mulx_u64(&x98, &x99, x1, UINT8_C(0x3d)); + fiat_np521_mulx_u64(&x100, &x101, x1, UINT64_C(0x2d8e03d1492d0d45)); + fiat_np521_mulx_u64(&x102, &x103, x1, UINT64_C(0x5bcc6d61a8e567bc)); + fiat_np521_mulx_u64(&x104, &x105, x1, UINT64_C(0xcff3d142b7756e3e)); + fiat_np521_mulx_u64(&x106, &x107, x1, UINT64_C(0xdd6e23d82e49c7db)); + fiat_np521_mulx_u64(&x108, &x109, x1, UINT64_C(0xd3721ef557f75e06)); + fiat_np521_mulx_u64(&x110, &x111, x1, UINT64_C(0x12a78d38794573ff)); + fiat_np521_mulx_u64(&x112, &x113, x1, UINT64_C(0xf707badce5547ea3)); + fiat_np521_mulx_u64(&x114, &x115, x1, UINT64_C(0x137cd04dcf15dd04)); + fiat_np521_addcarryx_u64(&x116, &x117, 0x0, x115, x112); + fiat_np521_addcarryx_u64(&x118, &x119, x117, x113, x110); + fiat_np521_addcarryx_u64(&x120, &x121, x119, x111, x108); + fiat_np521_addcarryx_u64(&x122, &x123, x121, x109, x106); + fiat_np521_addcarryx_u64(&x124, &x125, x123, x107, x104); + fiat_np521_addcarryx_u64(&x126, &x127, x125, x105, x102); + fiat_np521_addcarryx_u64(&x128, &x129, x127, x103, x100); + fiat_np521_addcarryx_u64(&x130, &x131, x129, x101, x98); + fiat_np521_addcarryx_u64(&x132, &x133, 0x0, x82, x114); + fiat_np521_addcarryx_u64(&x134, &x135, x133, x84, x116); + fiat_np521_addcarryx_u64(&x136, &x137, x135, x86, x118); + fiat_np521_addcarryx_u64(&x138, &x139, x137, x88, x120); + fiat_np521_addcarryx_u64(&x140, &x141, x139, x90, x122); + fiat_np521_addcarryx_u64(&x142, &x143, x141, x92, x124); + fiat_np521_addcarryx_u64(&x144, &x145, x143, x94, x126); + fiat_np521_addcarryx_u64(&x146, &x147, x145, x96, x128); + fiat_np521_addcarryx_u64(&x148, &x149, x147, ((x97 + (x43 + x11)) + (x79 + x47)), x130); + fiat_np521_mulx_u64(&x150, &x151, x132, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x152, &x153, x150, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x154, &x155, x150, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x156, &x157, x150, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x158, &x159, x150, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x160, &x161, x150, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x162, &x163, x150, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x164, &x165, x150, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x166, &x167, x150, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x168, &x169, x150, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x170, &x171, 0x0, x169, x166); + fiat_np521_addcarryx_u64(&x172, &x173, x171, x167, x164); + fiat_np521_addcarryx_u64(&x174, &x175, x173, x165, x162); + fiat_np521_addcarryx_u64(&x176, &x177, x175, x163, x160); + fiat_np521_addcarryx_u64(&x178, &x179, x177, x161, x158); + fiat_np521_addcarryx_u64(&x180, &x181, x179, x159, x156); + fiat_np521_addcarryx_u64(&x182, &x183, x181, x157, x154); + fiat_np521_addcarryx_u64(&x184, &x185, x183, x155, x152); + fiat_np521_addcarryx_u64(&x186, &x187, 0x0, x132, x168); + fiat_np521_addcarryx_u64(&x188, &x189, x187, x134, x170); + fiat_np521_addcarryx_u64(&x190, &x191, x189, x136, x172); + fiat_np521_addcarryx_u64(&x192, &x193, x191, x138, x174); + fiat_np521_addcarryx_u64(&x194, &x195, x193, x140, x176); + fiat_np521_addcarryx_u64(&x196, &x197, x195, x142, x178); + fiat_np521_addcarryx_u64(&x198, &x199, x197, x144, x180); + fiat_np521_addcarryx_u64(&x200, &x201, x199, x146, x182); + fiat_np521_addcarryx_u64(&x202, &x203, x201, x148, x184); + fiat_np521_mulx_u64(&x204, &x205, x2, UINT8_C(0x3d)); + fiat_np521_mulx_u64(&x206, &x207, x2, UINT64_C(0x2d8e03d1492d0d45)); + fiat_np521_mulx_u64(&x208, &x209, x2, UINT64_C(0x5bcc6d61a8e567bc)); + fiat_np521_mulx_u64(&x210, &x211, x2, UINT64_C(0xcff3d142b7756e3e)); + fiat_np521_mulx_u64(&x212, &x213, x2, UINT64_C(0xdd6e23d82e49c7db)); + fiat_np521_mulx_u64(&x214, &x215, x2, UINT64_C(0xd3721ef557f75e06)); + fiat_np521_mulx_u64(&x216, &x217, x2, UINT64_C(0x12a78d38794573ff)); + fiat_np521_mulx_u64(&x218, &x219, x2, UINT64_C(0xf707badce5547ea3)); + fiat_np521_mulx_u64(&x220, &x221, x2, UINT64_C(0x137cd04dcf15dd04)); + fiat_np521_addcarryx_u64(&x222, &x223, 0x0, x221, x218); + fiat_np521_addcarryx_u64(&x224, &x225, x223, x219, x216); + fiat_np521_addcarryx_u64(&x226, &x227, x225, x217, x214); + fiat_np521_addcarryx_u64(&x228, &x229, x227, x215, x212); + fiat_np521_addcarryx_u64(&x230, &x231, x229, x213, x210); + fiat_np521_addcarryx_u64(&x232, &x233, x231, x211, x208); + fiat_np521_addcarryx_u64(&x234, &x235, x233, x209, x206); + fiat_np521_addcarryx_u64(&x236, &x237, x235, x207, x204); + fiat_np521_addcarryx_u64(&x238, &x239, 0x0, x188, x220); + fiat_np521_addcarryx_u64(&x240, &x241, x239, x190, x222); + fiat_np521_addcarryx_u64(&x242, &x243, x241, x192, x224); + fiat_np521_addcarryx_u64(&x244, &x245, x243, x194, x226); + fiat_np521_addcarryx_u64(&x246, &x247, x245, x196, x228); + fiat_np521_addcarryx_u64(&x248, &x249, x247, x198, x230); + fiat_np521_addcarryx_u64(&x250, &x251, x249, x200, x232); + fiat_np521_addcarryx_u64(&x252, &x253, x251, x202, x234); + fiat_np521_addcarryx_u64(&x254, &x255, x253, ((x203 + (x149 + (x131 + x99))) + (x185 + x153)), x236); + fiat_np521_mulx_u64(&x256, &x257, x238, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x258, &x259, x256, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x260, &x261, x256, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x262, &x263, x256, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x264, &x265, x256, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x266, &x267, x256, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x268, &x269, x256, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x270, &x271, x256, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x272, &x273, x256, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x274, &x275, x256, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x276, &x277, 0x0, x275, x272); + fiat_np521_addcarryx_u64(&x278, &x279, x277, x273, x270); + fiat_np521_addcarryx_u64(&x280, &x281, x279, x271, x268); + fiat_np521_addcarryx_u64(&x282, &x283, x281, x269, x266); + fiat_np521_addcarryx_u64(&x284, &x285, x283, x267, x264); + fiat_np521_addcarryx_u64(&x286, &x287, x285, x265, x262); + fiat_np521_addcarryx_u64(&x288, &x289, x287, x263, x260); + fiat_np521_addcarryx_u64(&x290, &x291, x289, x261, x258); + fiat_np521_addcarryx_u64(&x292, &x293, 0x0, x238, x274); + fiat_np521_addcarryx_u64(&x294, &x295, x293, x240, x276); + fiat_np521_addcarryx_u64(&x296, &x297, x295, x242, x278); + fiat_np521_addcarryx_u64(&x298, &x299, x297, x244, x280); + fiat_np521_addcarryx_u64(&x300, &x301, x299, x246, x282); + fiat_np521_addcarryx_u64(&x302, &x303, x301, x248, x284); + fiat_np521_addcarryx_u64(&x304, &x305, x303, x250, x286); + fiat_np521_addcarryx_u64(&x306, &x307, x305, x252, x288); + fiat_np521_addcarryx_u64(&x308, &x309, x307, x254, x290); + fiat_np521_mulx_u64(&x310, &x311, x3, UINT8_C(0x3d)); + fiat_np521_mulx_u64(&x312, &x313, x3, UINT64_C(0x2d8e03d1492d0d45)); + fiat_np521_mulx_u64(&x314, &x315, x3, UINT64_C(0x5bcc6d61a8e567bc)); + fiat_np521_mulx_u64(&x316, &x317, x3, UINT64_C(0xcff3d142b7756e3e)); + fiat_np521_mulx_u64(&x318, &x319, x3, UINT64_C(0xdd6e23d82e49c7db)); + fiat_np521_mulx_u64(&x320, &x321, x3, UINT64_C(0xd3721ef557f75e06)); + fiat_np521_mulx_u64(&x322, &x323, x3, UINT64_C(0x12a78d38794573ff)); + fiat_np521_mulx_u64(&x324, &x325, x3, UINT64_C(0xf707badce5547ea3)); + fiat_np521_mulx_u64(&x326, &x327, x3, UINT64_C(0x137cd04dcf15dd04)); + fiat_np521_addcarryx_u64(&x328, &x329, 0x0, x327, x324); + fiat_np521_addcarryx_u64(&x330, &x331, x329, x325, x322); + fiat_np521_addcarryx_u64(&x332, &x333, x331, x323, x320); + fiat_np521_addcarryx_u64(&x334, &x335, x333, x321, x318); + fiat_np521_addcarryx_u64(&x336, &x337, x335, x319, x316); + fiat_np521_addcarryx_u64(&x338, &x339, x337, x317, x314); + fiat_np521_addcarryx_u64(&x340, &x341, x339, x315, x312); + fiat_np521_addcarryx_u64(&x342, &x343, x341, x313, x310); + fiat_np521_addcarryx_u64(&x344, &x345, 0x0, x294, x326); + fiat_np521_addcarryx_u64(&x346, &x347, x345, x296, x328); + fiat_np521_addcarryx_u64(&x348, &x349, x347, x298, x330); + fiat_np521_addcarryx_u64(&x350, &x351, x349, x300, x332); + fiat_np521_addcarryx_u64(&x352, &x353, x351, x302, x334); + fiat_np521_addcarryx_u64(&x354, &x355, x353, x304, x336); + fiat_np521_addcarryx_u64(&x356, &x357, x355, x306, x338); + fiat_np521_addcarryx_u64(&x358, &x359, x357, x308, x340); + fiat_np521_addcarryx_u64(&x360, &x361, x359, ((x309 + (x255 + (x237 + x205))) + (x291 + x259)), x342); + fiat_np521_mulx_u64(&x362, &x363, x344, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x364, &x365, x362, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x366, &x367, x362, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x368, &x369, x362, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x370, &x371, x362, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x372, &x373, x362, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x374, &x375, x362, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x376, &x377, x362, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x378, &x379, x362, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x380, &x381, x362, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x382, &x383, 0x0, x381, x378); + fiat_np521_addcarryx_u64(&x384, &x385, x383, x379, x376); + fiat_np521_addcarryx_u64(&x386, &x387, x385, x377, x374); + fiat_np521_addcarryx_u64(&x388, &x389, x387, x375, x372); + fiat_np521_addcarryx_u64(&x390, &x391, x389, x373, x370); + fiat_np521_addcarryx_u64(&x392, &x393, x391, x371, x368); + fiat_np521_addcarryx_u64(&x394, &x395, x393, x369, x366); + fiat_np521_addcarryx_u64(&x396, &x397, x395, x367, x364); + fiat_np521_addcarryx_u64(&x398, &x399, 0x0, x344, x380); + fiat_np521_addcarryx_u64(&x400, &x401, x399, x346, x382); + fiat_np521_addcarryx_u64(&x402, &x403, x401, x348, x384); + fiat_np521_addcarryx_u64(&x404, &x405, x403, x350, x386); + fiat_np521_addcarryx_u64(&x406, &x407, x405, x352, x388); + fiat_np521_addcarryx_u64(&x408, &x409, x407, x354, x390); + fiat_np521_addcarryx_u64(&x410, &x411, x409, x356, x392); + fiat_np521_addcarryx_u64(&x412, &x413, x411, x358, x394); + fiat_np521_addcarryx_u64(&x414, &x415, x413, x360, x396); + fiat_np521_mulx_u64(&x416, &x417, x4, UINT8_C(0x3d)); + fiat_np521_mulx_u64(&x418, &x419, x4, UINT64_C(0x2d8e03d1492d0d45)); + fiat_np521_mulx_u64(&x420, &x421, x4, UINT64_C(0x5bcc6d61a8e567bc)); + fiat_np521_mulx_u64(&x422, &x423, x4, UINT64_C(0xcff3d142b7756e3e)); + fiat_np521_mulx_u64(&x424, &x425, x4, UINT64_C(0xdd6e23d82e49c7db)); + fiat_np521_mulx_u64(&x426, &x427, x4, UINT64_C(0xd3721ef557f75e06)); + fiat_np521_mulx_u64(&x428, &x429, x4, UINT64_C(0x12a78d38794573ff)); + fiat_np521_mulx_u64(&x430, &x431, x4, UINT64_C(0xf707badce5547ea3)); + fiat_np521_mulx_u64(&x432, &x433, x4, UINT64_C(0x137cd04dcf15dd04)); + fiat_np521_addcarryx_u64(&x434, &x435, 0x0, x433, x430); + fiat_np521_addcarryx_u64(&x436, &x437, x435, x431, x428); + fiat_np521_addcarryx_u64(&x438, &x439, x437, x429, x426); + fiat_np521_addcarryx_u64(&x440, &x441, x439, x427, x424); + fiat_np521_addcarryx_u64(&x442, &x443, x441, x425, x422); + fiat_np521_addcarryx_u64(&x444, &x445, x443, x423, x420); + fiat_np521_addcarryx_u64(&x446, &x447, x445, x421, x418); + fiat_np521_addcarryx_u64(&x448, &x449, x447, x419, x416); + fiat_np521_addcarryx_u64(&x450, &x451, 0x0, x400, x432); + fiat_np521_addcarryx_u64(&x452, &x453, x451, x402, x434); + fiat_np521_addcarryx_u64(&x454, &x455, x453, x404, x436); + fiat_np521_addcarryx_u64(&x456, &x457, x455, x406, x438); + fiat_np521_addcarryx_u64(&x458, &x459, x457, x408, x440); + fiat_np521_addcarryx_u64(&x460, &x461, x459, x410, x442); + fiat_np521_addcarryx_u64(&x462, &x463, x461, x412, x444); + fiat_np521_addcarryx_u64(&x464, &x465, x463, x414, x446); + fiat_np521_addcarryx_u64(&x466, &x467, x465, ((x415 + (x361 + (x343 + x311))) + (x397 + x365)), x448); + fiat_np521_mulx_u64(&x468, &x469, x450, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x470, &x471, x468, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x472, &x473, x468, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x474, &x475, x468, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x476, &x477, x468, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x478, &x479, x468, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x480, &x481, x468, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x482, &x483, x468, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x484, &x485, x468, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x486, &x487, x468, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x488, &x489, 0x0, x487, x484); + fiat_np521_addcarryx_u64(&x490, &x491, x489, x485, x482); + fiat_np521_addcarryx_u64(&x492, &x493, x491, x483, x480); + fiat_np521_addcarryx_u64(&x494, &x495, x493, x481, x478); + fiat_np521_addcarryx_u64(&x496, &x497, x495, x479, x476); + fiat_np521_addcarryx_u64(&x498, &x499, x497, x477, x474); + fiat_np521_addcarryx_u64(&x500, &x501, x499, x475, x472); + fiat_np521_addcarryx_u64(&x502, &x503, x501, x473, x470); + fiat_np521_addcarryx_u64(&x504, &x505, 0x0, x450, x486); + fiat_np521_addcarryx_u64(&x506, &x507, x505, x452, x488); + fiat_np521_addcarryx_u64(&x508, &x509, x507, x454, x490); + fiat_np521_addcarryx_u64(&x510, &x511, x509, x456, x492); + fiat_np521_addcarryx_u64(&x512, &x513, x511, x458, x494); + fiat_np521_addcarryx_u64(&x514, &x515, x513, x460, x496); + fiat_np521_addcarryx_u64(&x516, &x517, x515, x462, x498); + fiat_np521_addcarryx_u64(&x518, &x519, x517, x464, x500); + fiat_np521_addcarryx_u64(&x520, &x521, x519, x466, x502); + fiat_np521_mulx_u64(&x522, &x523, x5, UINT8_C(0x3d)); + fiat_np521_mulx_u64(&x524, &x525, x5, UINT64_C(0x2d8e03d1492d0d45)); + fiat_np521_mulx_u64(&x526, &x527, x5, UINT64_C(0x5bcc6d61a8e567bc)); + fiat_np521_mulx_u64(&x528, &x529, x5, UINT64_C(0xcff3d142b7756e3e)); + fiat_np521_mulx_u64(&x530, &x531, x5, UINT64_C(0xdd6e23d82e49c7db)); + fiat_np521_mulx_u64(&x532, &x533, x5, UINT64_C(0xd3721ef557f75e06)); + fiat_np521_mulx_u64(&x534, &x535, x5, UINT64_C(0x12a78d38794573ff)); + fiat_np521_mulx_u64(&x536, &x537, x5, UINT64_C(0xf707badce5547ea3)); + fiat_np521_mulx_u64(&x538, &x539, x5, UINT64_C(0x137cd04dcf15dd04)); + fiat_np521_addcarryx_u64(&x540, &x541, 0x0, x539, x536); + fiat_np521_addcarryx_u64(&x542, &x543, x541, x537, x534); + fiat_np521_addcarryx_u64(&x544, &x545, x543, x535, x532); + fiat_np521_addcarryx_u64(&x546, &x547, x545, x533, x530); + fiat_np521_addcarryx_u64(&x548, &x549, x547, x531, x528); + fiat_np521_addcarryx_u64(&x550, &x551, x549, x529, x526); + fiat_np521_addcarryx_u64(&x552, &x553, x551, x527, x524); + fiat_np521_addcarryx_u64(&x554, &x555, x553, x525, x522); + fiat_np521_addcarryx_u64(&x556, &x557, 0x0, x506, x538); + fiat_np521_addcarryx_u64(&x558, &x559, x557, x508, x540); + fiat_np521_addcarryx_u64(&x560, &x561, x559, x510, x542); + fiat_np521_addcarryx_u64(&x562, &x563, x561, x512, x544); + fiat_np521_addcarryx_u64(&x564, &x565, x563, x514, x546); + fiat_np521_addcarryx_u64(&x566, &x567, x565, x516, x548); + fiat_np521_addcarryx_u64(&x568, &x569, x567, x518, x550); + fiat_np521_addcarryx_u64(&x570, &x571, x569, x520, x552); + fiat_np521_addcarryx_u64(&x572, &x573, x571, ((x521 + (x467 + (x449 + x417))) + (x503 + x471)), x554); + fiat_np521_mulx_u64(&x574, &x575, x556, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x576, &x577, x574, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x578, &x579, x574, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x580, &x581, x574, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x582, &x583, x574, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x584, &x585, x574, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x586, &x587, x574, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x588, &x589, x574, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x590, &x591, x574, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x592, &x593, x574, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x594, &x595, 0x0, x593, x590); + fiat_np521_addcarryx_u64(&x596, &x597, x595, x591, x588); + fiat_np521_addcarryx_u64(&x598, &x599, x597, x589, x586); + fiat_np521_addcarryx_u64(&x600, &x601, x599, x587, x584); + fiat_np521_addcarryx_u64(&x602, &x603, x601, x585, x582); + fiat_np521_addcarryx_u64(&x604, &x605, x603, x583, x580); + fiat_np521_addcarryx_u64(&x606, &x607, x605, x581, x578); + fiat_np521_addcarryx_u64(&x608, &x609, x607, x579, x576); + fiat_np521_addcarryx_u64(&x610, &x611, 0x0, x556, x592); + fiat_np521_addcarryx_u64(&x612, &x613, x611, x558, x594); + fiat_np521_addcarryx_u64(&x614, &x615, x613, x560, x596); + fiat_np521_addcarryx_u64(&x616, &x617, x615, x562, x598); + fiat_np521_addcarryx_u64(&x618, &x619, x617, x564, x600); + fiat_np521_addcarryx_u64(&x620, &x621, x619, x566, x602); + fiat_np521_addcarryx_u64(&x622, &x623, x621, x568, x604); + fiat_np521_addcarryx_u64(&x624, &x625, x623, x570, x606); + fiat_np521_addcarryx_u64(&x626, &x627, x625, x572, x608); + fiat_np521_mulx_u64(&x628, &x629, x6, UINT8_C(0x3d)); + fiat_np521_mulx_u64(&x630, &x631, x6, UINT64_C(0x2d8e03d1492d0d45)); + fiat_np521_mulx_u64(&x632, &x633, x6, UINT64_C(0x5bcc6d61a8e567bc)); + fiat_np521_mulx_u64(&x634, &x635, x6, UINT64_C(0xcff3d142b7756e3e)); + fiat_np521_mulx_u64(&x636, &x637, x6, UINT64_C(0xdd6e23d82e49c7db)); + fiat_np521_mulx_u64(&x638, &x639, x6, UINT64_C(0xd3721ef557f75e06)); + fiat_np521_mulx_u64(&x640, &x641, x6, UINT64_C(0x12a78d38794573ff)); + fiat_np521_mulx_u64(&x642, &x643, x6, UINT64_C(0xf707badce5547ea3)); + fiat_np521_mulx_u64(&x644, &x645, x6, UINT64_C(0x137cd04dcf15dd04)); + fiat_np521_addcarryx_u64(&x646, &x647, 0x0, x645, x642); + fiat_np521_addcarryx_u64(&x648, &x649, x647, x643, x640); + fiat_np521_addcarryx_u64(&x650, &x651, x649, x641, x638); + fiat_np521_addcarryx_u64(&x652, &x653, x651, x639, x636); + fiat_np521_addcarryx_u64(&x654, &x655, x653, x637, x634); + fiat_np521_addcarryx_u64(&x656, &x657, x655, x635, x632); + fiat_np521_addcarryx_u64(&x658, &x659, x657, x633, x630); + fiat_np521_addcarryx_u64(&x660, &x661, x659, x631, x628); + fiat_np521_addcarryx_u64(&x662, &x663, 0x0, x612, x644); + fiat_np521_addcarryx_u64(&x664, &x665, x663, x614, x646); + fiat_np521_addcarryx_u64(&x666, &x667, x665, x616, x648); + fiat_np521_addcarryx_u64(&x668, &x669, x667, x618, x650); + fiat_np521_addcarryx_u64(&x670, &x671, x669, x620, x652); + fiat_np521_addcarryx_u64(&x672, &x673, x671, x622, x654); + fiat_np521_addcarryx_u64(&x674, &x675, x673, x624, x656); + fiat_np521_addcarryx_u64(&x676, &x677, x675, x626, x658); + fiat_np521_addcarryx_u64(&x678, &x679, x677, ((x627 + (x573 + (x555 + x523))) + (x609 + x577)), x660); + fiat_np521_mulx_u64(&x680, &x681, x662, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x682, &x683, x680, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x684, &x685, x680, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x686, &x687, x680, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x688, &x689, x680, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x690, &x691, x680, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x692, &x693, x680, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x694, &x695, x680, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x696, &x697, x680, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x698, &x699, x680, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x700, &x701, 0x0, x699, x696); + fiat_np521_addcarryx_u64(&x702, &x703, x701, x697, x694); + fiat_np521_addcarryx_u64(&x704, &x705, x703, x695, x692); + fiat_np521_addcarryx_u64(&x706, &x707, x705, x693, x690); + fiat_np521_addcarryx_u64(&x708, &x709, x707, x691, x688); + fiat_np521_addcarryx_u64(&x710, &x711, x709, x689, x686); + fiat_np521_addcarryx_u64(&x712, &x713, x711, x687, x684); + fiat_np521_addcarryx_u64(&x714, &x715, x713, x685, x682); + fiat_np521_addcarryx_u64(&x716, &x717, 0x0, x662, x698); + fiat_np521_addcarryx_u64(&x718, &x719, x717, x664, x700); + fiat_np521_addcarryx_u64(&x720, &x721, x719, x666, x702); + fiat_np521_addcarryx_u64(&x722, &x723, x721, x668, x704); + fiat_np521_addcarryx_u64(&x724, &x725, x723, x670, x706); + fiat_np521_addcarryx_u64(&x726, &x727, x725, x672, x708); + fiat_np521_addcarryx_u64(&x728, &x729, x727, x674, x710); + fiat_np521_addcarryx_u64(&x730, &x731, x729, x676, x712); + fiat_np521_addcarryx_u64(&x732, &x733, x731, x678, x714); + fiat_np521_mulx_u64(&x734, &x735, x7, UINT8_C(0x3d)); + fiat_np521_mulx_u64(&x736, &x737, x7, UINT64_C(0x2d8e03d1492d0d45)); + fiat_np521_mulx_u64(&x738, &x739, x7, UINT64_C(0x5bcc6d61a8e567bc)); + fiat_np521_mulx_u64(&x740, &x741, x7, UINT64_C(0xcff3d142b7756e3e)); + fiat_np521_mulx_u64(&x742, &x743, x7, UINT64_C(0xdd6e23d82e49c7db)); + fiat_np521_mulx_u64(&x744, &x745, x7, UINT64_C(0xd3721ef557f75e06)); + fiat_np521_mulx_u64(&x746, &x747, x7, UINT64_C(0x12a78d38794573ff)); + fiat_np521_mulx_u64(&x748, &x749, x7, UINT64_C(0xf707badce5547ea3)); + fiat_np521_mulx_u64(&x750, &x751, x7, UINT64_C(0x137cd04dcf15dd04)); + fiat_np521_addcarryx_u64(&x752, &x753, 0x0, x751, x748); + fiat_np521_addcarryx_u64(&x754, &x755, x753, x749, x746); + fiat_np521_addcarryx_u64(&x756, &x757, x755, x747, x744); + fiat_np521_addcarryx_u64(&x758, &x759, x757, x745, x742); + fiat_np521_addcarryx_u64(&x760, &x761, x759, x743, x740); + fiat_np521_addcarryx_u64(&x762, &x763, x761, x741, x738); + fiat_np521_addcarryx_u64(&x764, &x765, x763, x739, x736); + fiat_np521_addcarryx_u64(&x766, &x767, x765, x737, x734); + fiat_np521_addcarryx_u64(&x768, &x769, 0x0, x718, x750); + fiat_np521_addcarryx_u64(&x770, &x771, x769, x720, x752); + fiat_np521_addcarryx_u64(&x772, &x773, x771, x722, x754); + fiat_np521_addcarryx_u64(&x774, &x775, x773, x724, x756); + fiat_np521_addcarryx_u64(&x776, &x777, x775, x726, x758); + fiat_np521_addcarryx_u64(&x778, &x779, x777, x728, x760); + fiat_np521_addcarryx_u64(&x780, &x781, x779, x730, x762); + fiat_np521_addcarryx_u64(&x782, &x783, x781, x732, x764); + fiat_np521_addcarryx_u64(&x784, &x785, x783, ((x733 + (x679 + (x661 + x629))) + (x715 + x683)), x766); + fiat_np521_mulx_u64(&x786, &x787, x768, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x788, &x789, x786, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x790, &x791, x786, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x792, &x793, x786, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x794, &x795, x786, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x796, &x797, x786, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x798, &x799, x786, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x800, &x801, x786, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x802, &x803, x786, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x804, &x805, x786, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x806, &x807, 0x0, x805, x802); + fiat_np521_addcarryx_u64(&x808, &x809, x807, x803, x800); + fiat_np521_addcarryx_u64(&x810, &x811, x809, x801, x798); + fiat_np521_addcarryx_u64(&x812, &x813, x811, x799, x796); + fiat_np521_addcarryx_u64(&x814, &x815, x813, x797, x794); + fiat_np521_addcarryx_u64(&x816, &x817, x815, x795, x792); + fiat_np521_addcarryx_u64(&x818, &x819, x817, x793, x790); + fiat_np521_addcarryx_u64(&x820, &x821, x819, x791, x788); + fiat_np521_addcarryx_u64(&x822, &x823, 0x0, x768, x804); + fiat_np521_addcarryx_u64(&x824, &x825, x823, x770, x806); + fiat_np521_addcarryx_u64(&x826, &x827, x825, x772, x808); + fiat_np521_addcarryx_u64(&x828, &x829, x827, x774, x810); + fiat_np521_addcarryx_u64(&x830, &x831, x829, x776, x812); + fiat_np521_addcarryx_u64(&x832, &x833, x831, x778, x814); + fiat_np521_addcarryx_u64(&x834, &x835, x833, x780, x816); + fiat_np521_addcarryx_u64(&x836, &x837, x835, x782, x818); + fiat_np521_addcarryx_u64(&x838, &x839, x837, x784, x820); + fiat_np521_mulx_u64(&x840, &x841, x8, UINT8_C(0x3d)); + fiat_np521_mulx_u64(&x842, &x843, x8, UINT64_C(0x2d8e03d1492d0d45)); + fiat_np521_mulx_u64(&x844, &x845, x8, UINT64_C(0x5bcc6d61a8e567bc)); + fiat_np521_mulx_u64(&x846, &x847, x8, UINT64_C(0xcff3d142b7756e3e)); + fiat_np521_mulx_u64(&x848, &x849, x8, UINT64_C(0xdd6e23d82e49c7db)); + fiat_np521_mulx_u64(&x850, &x851, x8, UINT64_C(0xd3721ef557f75e06)); + fiat_np521_mulx_u64(&x852, &x853, x8, UINT64_C(0x12a78d38794573ff)); + fiat_np521_mulx_u64(&x854, &x855, x8, UINT64_C(0xf707badce5547ea3)); + fiat_np521_mulx_u64(&x856, &x857, x8, UINT64_C(0x137cd04dcf15dd04)); + fiat_np521_addcarryx_u64(&x858, &x859, 0x0, x857, x854); + fiat_np521_addcarryx_u64(&x860, &x861, x859, x855, x852); + fiat_np521_addcarryx_u64(&x862, &x863, x861, x853, x850); + fiat_np521_addcarryx_u64(&x864, &x865, x863, x851, x848); + fiat_np521_addcarryx_u64(&x866, &x867, x865, x849, x846); + fiat_np521_addcarryx_u64(&x868, &x869, x867, x847, x844); + fiat_np521_addcarryx_u64(&x870, &x871, x869, x845, x842); + fiat_np521_addcarryx_u64(&x872, &x873, x871, x843, x840); + fiat_np521_addcarryx_u64(&x874, &x875, 0x0, x824, x856); + fiat_np521_addcarryx_u64(&x876, &x877, x875, x826, x858); + fiat_np521_addcarryx_u64(&x878, &x879, x877, x828, x860); + fiat_np521_addcarryx_u64(&x880, &x881, x879, x830, x862); + fiat_np521_addcarryx_u64(&x882, &x883, x881, x832, x864); + fiat_np521_addcarryx_u64(&x884, &x885, x883, x834, x866); + fiat_np521_addcarryx_u64(&x886, &x887, x885, x836, x868); + fiat_np521_addcarryx_u64(&x888, &x889, x887, x838, x870); + fiat_np521_addcarryx_u64(&x890, &x891, x889, ((x839 + (x785 + (x767 + x735))) + (x821 + x789)), x872); + fiat_np521_mulx_u64(&x892, &x893, x874, UINT64_C(0x1d2f5ccd79a995c7)); + fiat_np521_mulx_u64(&x894, &x895, x892, UINT16_C(0x1ff)); + fiat_np521_mulx_u64(&x896, &x897, x892, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x898, &x899, x892, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x900, &x901, x892, UINT64_C(0xffffffffffffffff)); + fiat_np521_mulx_u64(&x902, &x903, x892, UINT64_C(0xfffffffffffffffa)); + fiat_np521_mulx_u64(&x904, &x905, x892, UINT64_C(0x51868783bf2f966b)); + fiat_np521_mulx_u64(&x906, &x907, x892, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_mulx_u64(&x908, &x909, x892, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_mulx_u64(&x910, &x911, x892, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_addcarryx_u64(&x912, &x913, 0x0, x911, x908); + fiat_np521_addcarryx_u64(&x914, &x915, x913, x909, x906); + fiat_np521_addcarryx_u64(&x916, &x917, x915, x907, x904); + fiat_np521_addcarryx_u64(&x918, &x919, x917, x905, x902); + fiat_np521_addcarryx_u64(&x920, &x921, x919, x903, x900); + fiat_np521_addcarryx_u64(&x922, &x923, x921, x901, x898); + fiat_np521_addcarryx_u64(&x924, &x925, x923, x899, x896); + fiat_np521_addcarryx_u64(&x926, &x927, x925, x897, x894); + fiat_np521_addcarryx_u64(&x928, &x929, 0x0, x874, x910); + fiat_np521_addcarryx_u64(&x930, &x931, x929, x876, x912); + fiat_np521_addcarryx_u64(&x932, &x933, x931, x878, x914); + fiat_np521_addcarryx_u64(&x934, &x935, x933, x880, x916); + fiat_np521_addcarryx_u64(&x936, &x937, x935, x882, x918); + fiat_np521_addcarryx_u64(&x938, &x939, x937, x884, x920); + fiat_np521_addcarryx_u64(&x940, &x941, x939, x886, x922); + fiat_np521_addcarryx_u64(&x942, &x943, x941, x888, x924); + fiat_np521_addcarryx_u64(&x944, &x945, x943, x890, x926); + x946 = ((x945 + (x891 + (x873 + x841))) + (x927 + x895)); + fiat_np521_subborrowx_u64(&x947, &x948, 0x0, x930, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_subborrowx_u64(&x949, &x950, x948, x932, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_subborrowx_u64(&x951, &x952, x950, x934, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_subborrowx_u64(&x953, &x954, x952, x936, UINT64_C(0x51868783bf2f966b)); + fiat_np521_subborrowx_u64(&x955, &x956, x954, x938, UINT64_C(0xfffffffffffffffa)); + fiat_np521_subborrowx_u64(&x957, &x958, x956, x940, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x959, &x960, x958, x942, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x961, &x962, x960, x944, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x963, &x964, x962, x946, UINT16_C(0x1ff)); + fiat_np521_subborrowx_u64(&x965, &x966, x964, 0x0, 0x0); + fiat_np521_cmovznz_u64(&x967, x966, x947, x930); + fiat_np521_cmovznz_u64(&x968, x966, x949, x932); + fiat_np521_cmovznz_u64(&x969, x966, x951, x934); + fiat_np521_cmovznz_u64(&x970, x966, x953, x936); + fiat_np521_cmovznz_u64(&x971, x966, x955, x938); + fiat_np521_cmovznz_u64(&x972, x966, x957, x940); + fiat_np521_cmovznz_u64(&x973, x966, x959, x942); + fiat_np521_cmovznz_u64(&x974, x966, x961, x944); + fiat_np521_cmovznz_u64(&x975, x966, x963, x946); + out1[0] = x967; + out1[1] = x968; + out1[2] = x969; + out1[3] = x970; + out1[4] = x971; + out1[5] = x972; + out1[6] = x973; + out1[7] = x974; + out1[8] = x975; +} + +/* + * The function fiat_np521_set_one returns the field element one in the Montgomery domain. + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np521_set_one(uint64_t out1[9]) { + out1[0] = UINT64_C(0xfb80000000000000); + out1[1] = UINT64_C(0x28a2482470b763cd); + out1[2] = UINT64_C(0x17e2251b23bb31dc); + out1[3] = UINT64_C(0xca4019ff5b847b2d); + out1[4] = UINT64_C(0x2d73cbc3e206834); + out1[5] = 0x0; + out1[6] = 0x0; + out1[7] = 0x0; + out1[8] = 0x0; +} + +/* + * The function fiat_np521_msat returns the saturated represtation of the prime modulus. + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np521_msat(uint64_t out1[10]) { + out1[0] = UINT64_C(0xbb6fb71e91386409); + out1[1] = UINT64_C(0x3bb5c9b8899c47ae); + out1[2] = UINT64_C(0x7fcc0148f709a5d0); + out1[3] = UINT64_C(0x51868783bf2f966b); + out1[4] = UINT64_C(0xfffffffffffffffa); + out1[5] = UINT64_C(0xffffffffffffffff); + out1[6] = UINT64_C(0xffffffffffffffff); + out1[7] = UINT64_C(0xffffffffffffffff); + out1[8] = UINT16_C(0x1ff); + out1[9] = 0x0; +} + +/* + * The function fiat_np521_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if (log2 m) + 1 < 46 then ⌊(49 * ((log2 m) + 1) + 80) / 17⌋ else ⌊(49 * ((log2 m) + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np521_divstep_precomp(uint64_t out1[9]) { + out1[0] = UINT64_C(0x7b27a0cb33d1884b); + out1[1] = UINT64_C(0x9ef6cb011f2467d8); + out1[2] = UINT64_C(0x5fbc88e1d6e7fce); + out1[3] = UINT64_C(0xb08222d0fe97e1dc); + out1[4] = UINT64_C(0x1624870c44df3fce); + out1[5] = UINT64_C(0xb7f07b8eedbce602); + out1[6] = UINT64_C(0x62da93cf721f63bc); + out1[7] = UINT64_C(0xafd209c16c4f0d20); + out1[8] = UINT16_C(0x1c7); +} + +/* + * The function fiat_np521_divstep computes a divstep. + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_np521_divstep(uint64_t* out1, uint64_t out2[10], uint64_t out3[10], uint64_t out4[9], uint64_t out5[9], uint64_t arg1, const uint64_t arg2[10], const uint64_t arg3[10], const uint64_t arg4[9], const uint64_t arg5[9]) { + uint64_t x1; + fiat_np521_uint1 x2; + fiat_np521_uint1 x3; + uint64_t x4; + fiat_np521_uint1 x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + fiat_np521_uint1 x18; + uint64_t x19; + fiat_np521_uint1 x20; + uint64_t x21; + fiat_np521_uint1 x22; + uint64_t x23; + fiat_np521_uint1 x24; + uint64_t x25; + fiat_np521_uint1 x26; + uint64_t x27; + fiat_np521_uint1 x28; + uint64_t x29; + fiat_np521_uint1 x30; + uint64_t x31; + fiat_np521_uint1 x32; + uint64_t x33; + fiat_np521_uint1 x34; + uint64_t x35; + fiat_np521_uint1 x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + fiat_np521_uint1 x57; + uint64_t x58; + fiat_np521_uint1 x59; + uint64_t x60; + fiat_np521_uint1 x61; + uint64_t x62; + fiat_np521_uint1 x63; + uint64_t x64; + fiat_np521_uint1 x65; + uint64_t x66; + fiat_np521_uint1 x67; + uint64_t x68; + fiat_np521_uint1 x69; + uint64_t x70; + fiat_np521_uint1 x71; + uint64_t x72; + fiat_np521_uint1 x73; + uint64_t x74; + fiat_np521_uint1 x75; + uint64_t x76; + fiat_np521_uint1 x77; + uint64_t x78; + fiat_np521_uint1 x79; + uint64_t x80; + fiat_np521_uint1 x81; + uint64_t x82; + fiat_np521_uint1 x83; + uint64_t x84; + fiat_np521_uint1 x85; + uint64_t x86; + fiat_np521_uint1 x87; + uint64_t x88; + fiat_np521_uint1 x89; + uint64_t x90; + fiat_np521_uint1 x91; + uint64_t x92; + fiat_np521_uint1 x93; + uint64_t x94; + uint64_t x95; + uint64_t x96; + uint64_t x97; + uint64_t x98; + uint64_t x99; + uint64_t x100; + uint64_t x101; + uint64_t x102; + uint64_t x103; + fiat_np521_uint1 x104; + uint64_t x105; + fiat_np521_uint1 x106; + uint64_t x107; + fiat_np521_uint1 x108; + uint64_t x109; + fiat_np521_uint1 x110; + uint64_t x111; + fiat_np521_uint1 x112; + uint64_t x113; + fiat_np521_uint1 x114; + uint64_t x115; + fiat_np521_uint1 x116; + uint64_t x117; + fiat_np521_uint1 x118; + uint64_t x119; + fiat_np521_uint1 x120; + uint64_t x121; + uint64_t x122; + fiat_np521_uint1 x123; + uint64_t x124; + fiat_np521_uint1 x125; + uint64_t x126; + fiat_np521_uint1 x127; + uint64_t x128; + fiat_np521_uint1 x129; + uint64_t x130; + fiat_np521_uint1 x131; + uint64_t x132; + fiat_np521_uint1 x133; + uint64_t x134; + fiat_np521_uint1 x135; + uint64_t x136; + fiat_np521_uint1 x137; + uint64_t x138; + fiat_np521_uint1 x139; + uint64_t x140; + uint64_t x141; + uint64_t x142; + uint64_t x143; + uint64_t x144; + uint64_t x145; + uint64_t x146; + uint64_t x147; + uint64_t x148; + fiat_np521_uint1 x149; + uint64_t x150; + uint64_t x151; + uint64_t x152; + uint64_t x153; + uint64_t x154; + uint64_t x155; + uint64_t x156; + uint64_t x157; + uint64_t x158; + uint64_t x159; + uint64_t x160; + fiat_np521_uint1 x161; + uint64_t x162; + fiat_np521_uint1 x163; + uint64_t x164; + fiat_np521_uint1 x165; + uint64_t x166; + fiat_np521_uint1 x167; + uint64_t x168; + fiat_np521_uint1 x169; + uint64_t x170; + fiat_np521_uint1 x171; + uint64_t x172; + fiat_np521_uint1 x173; + uint64_t x174; + fiat_np521_uint1 x175; + uint64_t x176; + fiat_np521_uint1 x177; + uint64_t x178; + fiat_np521_uint1 x179; + uint64_t x180; + uint64_t x181; + uint64_t x182; + uint64_t x183; + uint64_t x184; + uint64_t x185; + uint64_t x186; + uint64_t x187; + uint64_t x188; + uint64_t x189; + fiat_np521_uint1 x190; + uint64_t x191; + fiat_np521_uint1 x192; + uint64_t x193; + fiat_np521_uint1 x194; + uint64_t x195; + fiat_np521_uint1 x196; + uint64_t x197; + fiat_np521_uint1 x198; + uint64_t x199; + fiat_np521_uint1 x200; + uint64_t x201; + fiat_np521_uint1 x202; + uint64_t x203; + fiat_np521_uint1 x204; + uint64_t x205; + fiat_np521_uint1 x206; + uint64_t x207; + fiat_np521_uint1 x208; + uint64_t x209; + fiat_np521_uint1 x210; + uint64_t x211; + fiat_np521_uint1 x212; + uint64_t x213; + fiat_np521_uint1 x214; + uint64_t x215; + fiat_np521_uint1 x216; + uint64_t x217; + fiat_np521_uint1 x218; + uint64_t x219; + fiat_np521_uint1 x220; + uint64_t x221; + fiat_np521_uint1 x222; + uint64_t x223; + fiat_np521_uint1 x224; + uint64_t x225; + fiat_np521_uint1 x226; + uint64_t x227; + fiat_np521_uint1 x228; + uint64_t x229; + uint64_t x230; + uint64_t x231; + uint64_t x232; + uint64_t x233; + uint64_t x234; + uint64_t x235; + uint64_t x236; + uint64_t x237; + uint64_t x238; + uint64_t x239; + uint64_t x240; + uint64_t x241; + uint64_t x242; + uint64_t x243; + uint64_t x244; + uint64_t x245; + uint64_t x246; + uint64_t x247; + uint64_t x248; + uint64_t x249; + uint64_t x250; + uint64_t x251; + uint64_t x252; + uint64_t x253; + uint64_t x254; + uint64_t x255; + uint64_t x256; + fiat_np521_addcarryx_u64(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_np521_uint1)((fiat_np521_uint1)(x1 >> 63) & (fiat_np521_uint1)((arg3[0]) & 0x1)); + fiat_np521_addcarryx_u64(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_np521_cmovznz_u64(&x6, x3, arg1, x4); + fiat_np521_cmovznz_u64(&x7, x3, (arg2[0]), (arg3[0])); + fiat_np521_cmovznz_u64(&x8, x3, (arg2[1]), (arg3[1])); + fiat_np521_cmovznz_u64(&x9, x3, (arg2[2]), (arg3[2])); + fiat_np521_cmovznz_u64(&x10, x3, (arg2[3]), (arg3[3])); + fiat_np521_cmovznz_u64(&x11, x3, (arg2[4]), (arg3[4])); + fiat_np521_cmovznz_u64(&x12, x3, (arg2[5]), (arg3[5])); + fiat_np521_cmovznz_u64(&x13, x3, (arg2[6]), (arg3[6])); + fiat_np521_cmovznz_u64(&x14, x3, (arg2[7]), (arg3[7])); + fiat_np521_cmovznz_u64(&x15, x3, (arg2[8]), (arg3[8])); + fiat_np521_cmovznz_u64(&x16, x3, (arg2[9]), (arg3[9])); + fiat_np521_addcarryx_u64(&x17, &x18, 0x0, 0x1, (~(arg2[0]))); + fiat_np521_addcarryx_u64(&x19, &x20, x18, 0x0, (~(arg2[1]))); + fiat_np521_addcarryx_u64(&x21, &x22, x20, 0x0, (~(arg2[2]))); + fiat_np521_addcarryx_u64(&x23, &x24, x22, 0x0, (~(arg2[3]))); + fiat_np521_addcarryx_u64(&x25, &x26, x24, 0x0, (~(arg2[4]))); + fiat_np521_addcarryx_u64(&x27, &x28, x26, 0x0, (~(arg2[5]))); + fiat_np521_addcarryx_u64(&x29, &x30, x28, 0x0, (~(arg2[6]))); + fiat_np521_addcarryx_u64(&x31, &x32, x30, 0x0, (~(arg2[7]))); + fiat_np521_addcarryx_u64(&x33, &x34, x32, 0x0, (~(arg2[8]))); + fiat_np521_addcarryx_u64(&x35, &x36, x34, 0x0, (~(arg2[9]))); + fiat_np521_cmovznz_u64(&x37, x3, (arg3[0]), x17); + fiat_np521_cmovznz_u64(&x38, x3, (arg3[1]), x19); + fiat_np521_cmovznz_u64(&x39, x3, (arg3[2]), x21); + fiat_np521_cmovznz_u64(&x40, x3, (arg3[3]), x23); + fiat_np521_cmovznz_u64(&x41, x3, (arg3[4]), x25); + fiat_np521_cmovznz_u64(&x42, x3, (arg3[5]), x27); + fiat_np521_cmovznz_u64(&x43, x3, (arg3[6]), x29); + fiat_np521_cmovznz_u64(&x44, x3, (arg3[7]), x31); + fiat_np521_cmovznz_u64(&x45, x3, (arg3[8]), x33); + fiat_np521_cmovznz_u64(&x46, x3, (arg3[9]), x35); + fiat_np521_cmovznz_u64(&x47, x3, (arg4[0]), (arg5[0])); + fiat_np521_cmovznz_u64(&x48, x3, (arg4[1]), (arg5[1])); + fiat_np521_cmovznz_u64(&x49, x3, (arg4[2]), (arg5[2])); + fiat_np521_cmovznz_u64(&x50, x3, (arg4[3]), (arg5[3])); + fiat_np521_cmovznz_u64(&x51, x3, (arg4[4]), (arg5[4])); + fiat_np521_cmovznz_u64(&x52, x3, (arg4[5]), (arg5[5])); + fiat_np521_cmovznz_u64(&x53, x3, (arg4[6]), (arg5[6])); + fiat_np521_cmovznz_u64(&x54, x3, (arg4[7]), (arg5[7])); + fiat_np521_cmovznz_u64(&x55, x3, (arg4[8]), (arg5[8])); + fiat_np521_addcarryx_u64(&x56, &x57, 0x0, x47, x47); + fiat_np521_addcarryx_u64(&x58, &x59, x57, x48, x48); + fiat_np521_addcarryx_u64(&x60, &x61, x59, x49, x49); + fiat_np521_addcarryx_u64(&x62, &x63, x61, x50, x50); + fiat_np521_addcarryx_u64(&x64, &x65, x63, x51, x51); + fiat_np521_addcarryx_u64(&x66, &x67, x65, x52, x52); + fiat_np521_addcarryx_u64(&x68, &x69, x67, x53, x53); + fiat_np521_addcarryx_u64(&x70, &x71, x69, x54, x54); + fiat_np521_addcarryx_u64(&x72, &x73, x71, x55, x55); + fiat_np521_subborrowx_u64(&x74, &x75, 0x0, x56, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_subborrowx_u64(&x76, &x77, x75, x58, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_subborrowx_u64(&x78, &x79, x77, x60, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_subborrowx_u64(&x80, &x81, x79, x62, UINT64_C(0x51868783bf2f966b)); + fiat_np521_subborrowx_u64(&x82, &x83, x81, x64, UINT64_C(0xfffffffffffffffa)); + fiat_np521_subborrowx_u64(&x84, &x85, x83, x66, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x86, &x87, x85, x68, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x88, &x89, x87, x70, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x90, &x91, x89, x72, UINT16_C(0x1ff)); + fiat_np521_subborrowx_u64(&x92, &x93, x91, x73, 0x0); + x94 = (arg4[8]); + x95 = (arg4[7]); + x96 = (arg4[6]); + x97 = (arg4[5]); + x98 = (arg4[4]); + x99 = (arg4[3]); + x100 = (arg4[2]); + x101 = (arg4[1]); + x102 = (arg4[0]); + fiat_np521_subborrowx_u64(&x103, &x104, 0x0, 0x0, x102); + fiat_np521_subborrowx_u64(&x105, &x106, x104, 0x0, x101); + fiat_np521_subborrowx_u64(&x107, &x108, x106, 0x0, x100); + fiat_np521_subborrowx_u64(&x109, &x110, x108, 0x0, x99); + fiat_np521_subborrowx_u64(&x111, &x112, x110, 0x0, x98); + fiat_np521_subborrowx_u64(&x113, &x114, x112, 0x0, x97); + fiat_np521_subborrowx_u64(&x115, &x116, x114, 0x0, x96); + fiat_np521_subborrowx_u64(&x117, &x118, x116, 0x0, x95); + fiat_np521_subborrowx_u64(&x119, &x120, x118, 0x0, x94); + fiat_np521_cmovznz_u64(&x121, x120, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_np521_addcarryx_u64(&x122, &x123, 0x0, x103, (x121 & UINT64_C(0xbb6fb71e91386409))); + fiat_np521_addcarryx_u64(&x124, &x125, x123, x105, (x121 & UINT64_C(0x3bb5c9b8899c47ae))); + fiat_np521_addcarryx_u64(&x126, &x127, x125, x107, (x121 & UINT64_C(0x7fcc0148f709a5d0))); + fiat_np521_addcarryx_u64(&x128, &x129, x127, x109, (x121 & UINT64_C(0x51868783bf2f966b))); + fiat_np521_addcarryx_u64(&x130, &x131, x129, x111, (x121 & UINT64_C(0xfffffffffffffffa))); + fiat_np521_addcarryx_u64(&x132, &x133, x131, x113, x121); + fiat_np521_addcarryx_u64(&x134, &x135, x133, x115, x121); + fiat_np521_addcarryx_u64(&x136, &x137, x135, x117, x121); + fiat_np521_addcarryx_u64(&x138, &x139, x137, x119, (x121 & UINT16_C(0x1ff))); + fiat_np521_cmovznz_u64(&x140, x3, (arg5[0]), x122); + fiat_np521_cmovznz_u64(&x141, x3, (arg5[1]), x124); + fiat_np521_cmovznz_u64(&x142, x3, (arg5[2]), x126); + fiat_np521_cmovznz_u64(&x143, x3, (arg5[3]), x128); + fiat_np521_cmovznz_u64(&x144, x3, (arg5[4]), x130); + fiat_np521_cmovznz_u64(&x145, x3, (arg5[5]), x132); + fiat_np521_cmovznz_u64(&x146, x3, (arg5[6]), x134); + fiat_np521_cmovznz_u64(&x147, x3, (arg5[7]), x136); + fiat_np521_cmovznz_u64(&x148, x3, (arg5[8]), x138); + x149 = (fiat_np521_uint1)(x37 & 0x1); + fiat_np521_cmovznz_u64(&x150, x149, 0x0, x7); + fiat_np521_cmovznz_u64(&x151, x149, 0x0, x8); + fiat_np521_cmovznz_u64(&x152, x149, 0x0, x9); + fiat_np521_cmovznz_u64(&x153, x149, 0x0, x10); + fiat_np521_cmovznz_u64(&x154, x149, 0x0, x11); + fiat_np521_cmovznz_u64(&x155, x149, 0x0, x12); + fiat_np521_cmovznz_u64(&x156, x149, 0x0, x13); + fiat_np521_cmovznz_u64(&x157, x149, 0x0, x14); + fiat_np521_cmovznz_u64(&x158, x149, 0x0, x15); + fiat_np521_cmovznz_u64(&x159, x149, 0x0, x16); + fiat_np521_addcarryx_u64(&x160, &x161, 0x0, x37, x150); + fiat_np521_addcarryx_u64(&x162, &x163, x161, x38, x151); + fiat_np521_addcarryx_u64(&x164, &x165, x163, x39, x152); + fiat_np521_addcarryx_u64(&x166, &x167, x165, x40, x153); + fiat_np521_addcarryx_u64(&x168, &x169, x167, x41, x154); + fiat_np521_addcarryx_u64(&x170, &x171, x169, x42, x155); + fiat_np521_addcarryx_u64(&x172, &x173, x171, x43, x156); + fiat_np521_addcarryx_u64(&x174, &x175, x173, x44, x157); + fiat_np521_addcarryx_u64(&x176, &x177, x175, x45, x158); + fiat_np521_addcarryx_u64(&x178, &x179, x177, x46, x159); + fiat_np521_cmovznz_u64(&x180, x149, 0x0, x47); + fiat_np521_cmovznz_u64(&x181, x149, 0x0, x48); + fiat_np521_cmovznz_u64(&x182, x149, 0x0, x49); + fiat_np521_cmovznz_u64(&x183, x149, 0x0, x50); + fiat_np521_cmovznz_u64(&x184, x149, 0x0, x51); + fiat_np521_cmovznz_u64(&x185, x149, 0x0, x52); + fiat_np521_cmovznz_u64(&x186, x149, 0x0, x53); + fiat_np521_cmovznz_u64(&x187, x149, 0x0, x54); + fiat_np521_cmovznz_u64(&x188, x149, 0x0, x55); + fiat_np521_addcarryx_u64(&x189, &x190, 0x0, x140, x180); + fiat_np521_addcarryx_u64(&x191, &x192, x190, x141, x181); + fiat_np521_addcarryx_u64(&x193, &x194, x192, x142, x182); + fiat_np521_addcarryx_u64(&x195, &x196, x194, x143, x183); + fiat_np521_addcarryx_u64(&x197, &x198, x196, x144, x184); + fiat_np521_addcarryx_u64(&x199, &x200, x198, x145, x185); + fiat_np521_addcarryx_u64(&x201, &x202, x200, x146, x186); + fiat_np521_addcarryx_u64(&x203, &x204, x202, x147, x187); + fiat_np521_addcarryx_u64(&x205, &x206, x204, x148, x188); + fiat_np521_subborrowx_u64(&x207, &x208, 0x0, x189, UINT64_C(0xbb6fb71e91386409)); + fiat_np521_subborrowx_u64(&x209, &x210, x208, x191, UINT64_C(0x3bb5c9b8899c47ae)); + fiat_np521_subborrowx_u64(&x211, &x212, x210, x193, UINT64_C(0x7fcc0148f709a5d0)); + fiat_np521_subborrowx_u64(&x213, &x214, x212, x195, UINT64_C(0x51868783bf2f966b)); + fiat_np521_subborrowx_u64(&x215, &x216, x214, x197, UINT64_C(0xfffffffffffffffa)); + fiat_np521_subborrowx_u64(&x217, &x218, x216, x199, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x219, &x220, x218, x201, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x221, &x222, x220, x203, UINT64_C(0xffffffffffffffff)); + fiat_np521_subborrowx_u64(&x223, &x224, x222, x205, UINT16_C(0x1ff)); + fiat_np521_subborrowx_u64(&x225, &x226, x224, x206, 0x0); + fiat_np521_addcarryx_u64(&x227, &x228, 0x0, x6, 0x1); + x229 = ((x160 >> 1) | ((x162 << 63) & UINT64_C(0xffffffffffffffff))); + x230 = ((x162 >> 1) | ((x164 << 63) & UINT64_C(0xffffffffffffffff))); + x231 = ((x164 >> 1) | ((x166 << 63) & UINT64_C(0xffffffffffffffff))); + x232 = ((x166 >> 1) | ((x168 << 63) & UINT64_C(0xffffffffffffffff))); + x233 = ((x168 >> 1) | ((x170 << 63) & UINT64_C(0xffffffffffffffff))); + x234 = ((x170 >> 1) | ((x172 << 63) & UINT64_C(0xffffffffffffffff))); + x235 = ((x172 >> 1) | ((x174 << 63) & UINT64_C(0xffffffffffffffff))); + x236 = ((x174 >> 1) | ((x176 << 63) & UINT64_C(0xffffffffffffffff))); + x237 = ((x176 >> 1) | ((x178 << 63) & UINT64_C(0xffffffffffffffff))); + x238 = ((x178 & UINT64_C(0x8000000000000000)) | (x178 >> 1)); + fiat_np521_cmovznz_u64(&x239, x93, x74, x56); + fiat_np521_cmovznz_u64(&x240, x93, x76, x58); + fiat_np521_cmovznz_u64(&x241, x93, x78, x60); + fiat_np521_cmovznz_u64(&x242, x93, x80, x62); + fiat_np521_cmovznz_u64(&x243, x93, x82, x64); + fiat_np521_cmovznz_u64(&x244, x93, x84, x66); + fiat_np521_cmovznz_u64(&x245, x93, x86, x68); + fiat_np521_cmovznz_u64(&x246, x93, x88, x70); + fiat_np521_cmovznz_u64(&x247, x93, x90, x72); + fiat_np521_cmovznz_u64(&x248, x226, x207, x189); + fiat_np521_cmovznz_u64(&x249, x226, x209, x191); + fiat_np521_cmovznz_u64(&x250, x226, x211, x193); + fiat_np521_cmovznz_u64(&x251, x226, x213, x195); + fiat_np521_cmovznz_u64(&x252, x226, x215, x197); + fiat_np521_cmovznz_u64(&x253, x226, x217, x199); + fiat_np521_cmovznz_u64(&x254, x226, x219, x201); + fiat_np521_cmovznz_u64(&x255, x226, x221, x203); + fiat_np521_cmovznz_u64(&x256, x226, x223, x205); + *out1 = x227; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out2[5] = x12; + out2[6] = x13; + out2[7] = x14; + out2[8] = x15; + out2[9] = x16; + out3[0] = x229; + out3[1] = x230; + out3[2] = x231; + out3[3] = x232; + out3[4] = x233; + out3[5] = x234; + out3[6] = x235; + out3[7] = x236; + out3[8] = x237; + out3[9] = x238; + out4[0] = x239; + out4[1] = x240; + out4[2] = x241; + out4[3] = x242; + out4[4] = x243; + out4[5] = x244; + out4[6] = x245; + out4[7] = x246; + out4[8] = x247; + out5[0] = x248; + out5[1] = x249; + out5[2] = x250; + out5[3] = x251; + out5[4] = x252; + out5[5] = x253; + out5[6] = x254; + out5[7] = x255; + out5[8] = x256; +} + +/* + * The function fiat_np521_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..65] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0x1ff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x1]] + */ +static void fiat_np521_to_bytes(uint8_t out1[66], const uint64_t arg1[9]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint8_t x10; + uint64_t x11; + uint8_t x12; + uint64_t x13; + uint8_t x14; + uint64_t x15; + uint8_t x16; + uint64_t x17; + uint8_t x18; + uint64_t x19; + uint8_t x20; + uint64_t x21; + uint8_t x22; + uint8_t x23; + uint8_t x24; + uint64_t x25; + uint8_t x26; + uint64_t x27; + uint8_t x28; + uint64_t x29; + uint8_t x30; + uint64_t x31; + uint8_t x32; + uint64_t x33; + uint8_t x34; + uint64_t x35; + uint8_t x36; + uint8_t x37; + uint8_t x38; + uint64_t x39; + uint8_t x40; + uint64_t x41; + uint8_t x42; + uint64_t x43; + uint8_t x44; + uint64_t x45; + uint8_t x46; + uint64_t x47; + uint8_t x48; + uint64_t x49; + uint8_t x50; + uint8_t x51; + uint8_t x52; + uint64_t x53; + uint8_t x54; + uint64_t x55; + uint8_t x56; + uint64_t x57; + uint8_t x58; + uint64_t x59; + uint8_t x60; + uint64_t x61; + uint8_t x62; + uint64_t x63; + uint8_t x64; + uint8_t x65; + uint8_t x66; + uint64_t x67; + uint8_t x68; + uint64_t x69; + uint8_t x70; + uint64_t x71; + uint8_t x72; + uint64_t x73; + uint8_t x74; + uint64_t x75; + uint8_t x76; + uint64_t x77; + uint8_t x78; + uint8_t x79; + uint8_t x80; + uint64_t x81; + uint8_t x82; + uint64_t x83; + uint8_t x84; + uint64_t x85; + uint8_t x86; + uint64_t x87; + uint8_t x88; + uint64_t x89; + uint8_t x90; + uint64_t x91; + uint8_t x92; + uint8_t x93; + uint8_t x94; + uint64_t x95; + uint8_t x96; + uint64_t x97; + uint8_t x98; + uint64_t x99; + uint8_t x100; + uint64_t x101; + uint8_t x102; + uint64_t x103; + uint8_t x104; + uint64_t x105; + uint8_t x106; + uint8_t x107; + uint8_t x108; + uint64_t x109; + uint8_t x110; + uint64_t x111; + uint8_t x112; + uint64_t x113; + uint8_t x114; + uint64_t x115; + uint8_t x116; + uint64_t x117; + uint8_t x118; + uint64_t x119; + uint8_t x120; + uint8_t x121; + uint8_t x122; + fiat_np521_uint1 x123; + x1 = (arg1[8]); + x2 = (arg1[7]); + x3 = (arg1[6]); + x4 = (arg1[5]); + x5 = (arg1[4]); + x6 = (arg1[3]); + x7 = (arg1[2]); + x8 = (arg1[1]); + x9 = (arg1[0]); + x10 = (uint8_t)(x9 & UINT8_C(0xff)); + x11 = (x9 >> 8); + x12 = (uint8_t)(x11 & UINT8_C(0xff)); + x13 = (x11 >> 8); + x14 = (uint8_t)(x13 & UINT8_C(0xff)); + x15 = (x13 >> 8); + x16 = (uint8_t)(x15 & UINT8_C(0xff)); + x17 = (x15 >> 8); + x18 = (uint8_t)(x17 & UINT8_C(0xff)); + x19 = (x17 >> 8); + x20 = (uint8_t)(x19 & UINT8_C(0xff)); + x21 = (x19 >> 8); + x22 = (uint8_t)(x21 & UINT8_C(0xff)); + x23 = (uint8_t)(x21 >> 8); + x24 = (uint8_t)(x8 & UINT8_C(0xff)); + x25 = (x8 >> 8); + x26 = (uint8_t)(x25 & UINT8_C(0xff)); + x27 = (x25 >> 8); + x28 = (uint8_t)(x27 & UINT8_C(0xff)); + x29 = (x27 >> 8); + x30 = (uint8_t)(x29 & UINT8_C(0xff)); + x31 = (x29 >> 8); + x32 = (uint8_t)(x31 & UINT8_C(0xff)); + x33 = (x31 >> 8); + x34 = (uint8_t)(x33 & UINT8_C(0xff)); + x35 = (x33 >> 8); + x36 = (uint8_t)(x35 & UINT8_C(0xff)); + x37 = (uint8_t)(x35 >> 8); + x38 = (uint8_t)(x7 & UINT8_C(0xff)); + x39 = (x7 >> 8); + x40 = (uint8_t)(x39 & UINT8_C(0xff)); + x41 = (x39 >> 8); + x42 = (uint8_t)(x41 & UINT8_C(0xff)); + x43 = (x41 >> 8); + x44 = (uint8_t)(x43 & UINT8_C(0xff)); + x45 = (x43 >> 8); + x46 = (uint8_t)(x45 & UINT8_C(0xff)); + x47 = (x45 >> 8); + x48 = (uint8_t)(x47 & UINT8_C(0xff)); + x49 = (x47 >> 8); + x50 = (uint8_t)(x49 & UINT8_C(0xff)); + x51 = (uint8_t)(x49 >> 8); + x52 = (uint8_t)(x6 & UINT8_C(0xff)); + x53 = (x6 >> 8); + x54 = (uint8_t)(x53 & UINT8_C(0xff)); + x55 = (x53 >> 8); + x56 = (uint8_t)(x55 & UINT8_C(0xff)); + x57 = (x55 >> 8); + x58 = (uint8_t)(x57 & UINT8_C(0xff)); + x59 = (x57 >> 8); + x60 = (uint8_t)(x59 & UINT8_C(0xff)); + x61 = (x59 >> 8); + x62 = (uint8_t)(x61 & UINT8_C(0xff)); + x63 = (x61 >> 8); + x64 = (uint8_t)(x63 & UINT8_C(0xff)); + x65 = (uint8_t)(x63 >> 8); + x66 = (uint8_t)(x5 & UINT8_C(0xff)); + x67 = (x5 >> 8); + x68 = (uint8_t)(x67 & UINT8_C(0xff)); + x69 = (x67 >> 8); + x70 = (uint8_t)(x69 & UINT8_C(0xff)); + x71 = (x69 >> 8); + x72 = (uint8_t)(x71 & UINT8_C(0xff)); + x73 = (x71 >> 8); + x74 = (uint8_t)(x73 & UINT8_C(0xff)); + x75 = (x73 >> 8); + x76 = (uint8_t)(x75 & UINT8_C(0xff)); + x77 = (x75 >> 8); + x78 = (uint8_t)(x77 & UINT8_C(0xff)); + x79 = (uint8_t)(x77 >> 8); + x80 = (uint8_t)(x4 & UINT8_C(0xff)); + x81 = (x4 >> 8); + x82 = (uint8_t)(x81 & UINT8_C(0xff)); + x83 = (x81 >> 8); + x84 = (uint8_t)(x83 & UINT8_C(0xff)); + x85 = (x83 >> 8); + x86 = (uint8_t)(x85 & UINT8_C(0xff)); + x87 = (x85 >> 8); + x88 = (uint8_t)(x87 & UINT8_C(0xff)); + x89 = (x87 >> 8); + x90 = (uint8_t)(x89 & UINT8_C(0xff)); + x91 = (x89 >> 8); + x92 = (uint8_t)(x91 & UINT8_C(0xff)); + x93 = (uint8_t)(x91 >> 8); + x94 = (uint8_t)(x3 & UINT8_C(0xff)); + x95 = (x3 >> 8); + x96 = (uint8_t)(x95 & UINT8_C(0xff)); + x97 = (x95 >> 8); + x98 = (uint8_t)(x97 & UINT8_C(0xff)); + x99 = (x97 >> 8); + x100 = (uint8_t)(x99 & UINT8_C(0xff)); + x101 = (x99 >> 8); + x102 = (uint8_t)(x101 & UINT8_C(0xff)); + x103 = (x101 >> 8); + x104 = (uint8_t)(x103 & UINT8_C(0xff)); + x105 = (x103 >> 8); + x106 = (uint8_t)(x105 & UINT8_C(0xff)); + x107 = (uint8_t)(x105 >> 8); + x108 = (uint8_t)(x2 & UINT8_C(0xff)); + x109 = (x2 >> 8); + x110 = (uint8_t)(x109 & UINT8_C(0xff)); + x111 = (x109 >> 8); + x112 = (uint8_t)(x111 & UINT8_C(0xff)); + x113 = (x111 >> 8); + x114 = (uint8_t)(x113 & UINT8_C(0xff)); + x115 = (x113 >> 8); + x116 = (uint8_t)(x115 & UINT8_C(0xff)); + x117 = (x115 >> 8); + x118 = (uint8_t)(x117 & UINT8_C(0xff)); + x119 = (x117 >> 8); + x120 = (uint8_t)(x119 & UINT8_C(0xff)); + x121 = (uint8_t)(x119 >> 8); + x122 = (uint8_t)(x1 & UINT8_C(0xff)); + x123 = (fiat_np521_uint1)(x1 >> 8); + out1[0] = x10; + out1[1] = x12; + out1[2] = x14; + out1[3] = x16; + out1[4] = x18; + out1[5] = x20; + out1[6] = x22; + out1[7] = x23; + out1[8] = x24; + out1[9] = x26; + out1[10] = x28; + out1[11] = x30; + out1[12] = x32; + out1[13] = x34; + out1[14] = x36; + out1[15] = x37; + out1[16] = x38; + out1[17] = x40; + out1[18] = x42; + out1[19] = x44; + out1[20] = x46; + out1[21] = x48; + out1[22] = x50; + out1[23] = x51; + out1[24] = x52; + out1[25] = x54; + out1[26] = x56; + out1[27] = x58; + out1[28] = x60; + out1[29] = x62; + out1[30] = x64; + out1[31] = x65; + out1[32] = x66; + out1[33] = x68; + out1[34] = x70; + out1[35] = x72; + out1[36] = x74; + out1[37] = x76; + out1[38] = x78; + out1[39] = x79; + out1[40] = x80; + out1[41] = x82; + out1[42] = x84; + out1[43] = x86; + out1[44] = x88; + out1[45] = x90; + out1[46] = x92; + out1[47] = x93; + out1[48] = x94; + out1[49] = x96; + out1[50] = x98; + out1[51] = x100; + out1[52] = x102; + out1[53] = x104; + out1[54] = x106; + out1[55] = x107; + out1[56] = x108; + out1[57] = x110; + out1[58] = x112; + out1[59] = x114; + out1[60] = x116; + out1[61] = x118; + out1[62] = x120; + out1[63] = x121; + out1[64] = x122; + out1[65] = x123; +} + +/* + * The function fiat_np521_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x1]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0x1ff]] + */ +static void fiat_np521_from_bytes(uint64_t out1[9], const uint8_t arg1[66]) { + uint64_t x1; + uint8_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint8_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint8_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint8_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint64_t x32; + uint64_t x33; + uint8_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint8_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint8_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint64_t x57; + uint8_t x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + uint64_t x65; + uint8_t x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + uint64_t x81; + uint64_t x82; + uint64_t x83; + uint64_t x84; + uint64_t x85; + uint64_t x86; + uint64_t x87; + uint64_t x88; + uint64_t x89; + uint64_t x90; + uint64_t x91; + uint64_t x92; + uint64_t x93; + uint64_t x94; + uint64_t x95; + uint64_t x96; + uint64_t x97; + uint64_t x98; + uint64_t x99; + uint64_t x100; + uint64_t x101; + uint64_t x102; + uint64_t x103; + uint64_t x104; + uint64_t x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + uint64_t x109; + uint64_t x110; + uint64_t x111; + uint64_t x112; + uint64_t x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + uint64_t x121; + uint64_t x122; + uint64_t x123; + x1 = ((uint64_t)(fiat_np521_uint1)(arg1[65]) << 8); + x2 = (arg1[64]); + x3 = ((uint64_t)(arg1[63]) << 56); + x4 = ((uint64_t)(arg1[62]) << 48); + x5 = ((uint64_t)(arg1[61]) << 40); + x6 = ((uint64_t)(arg1[60]) << 32); + x7 = ((uint64_t)(arg1[59]) << 24); + x8 = ((uint64_t)(arg1[58]) << 16); + x9 = ((uint64_t)(arg1[57]) << 8); + x10 = (arg1[56]); + x11 = ((uint64_t)(arg1[55]) << 56); + x12 = ((uint64_t)(arg1[54]) << 48); + x13 = ((uint64_t)(arg1[53]) << 40); + x14 = ((uint64_t)(arg1[52]) << 32); + x15 = ((uint64_t)(arg1[51]) << 24); + x16 = ((uint64_t)(arg1[50]) << 16); + x17 = ((uint64_t)(arg1[49]) << 8); + x18 = (arg1[48]); + x19 = ((uint64_t)(arg1[47]) << 56); + x20 = ((uint64_t)(arg1[46]) << 48); + x21 = ((uint64_t)(arg1[45]) << 40); + x22 = ((uint64_t)(arg1[44]) << 32); + x23 = ((uint64_t)(arg1[43]) << 24); + x24 = ((uint64_t)(arg1[42]) << 16); + x25 = ((uint64_t)(arg1[41]) << 8); + x26 = (arg1[40]); + x27 = ((uint64_t)(arg1[39]) << 56); + x28 = ((uint64_t)(arg1[38]) << 48); + x29 = ((uint64_t)(arg1[37]) << 40); + x30 = ((uint64_t)(arg1[36]) << 32); + x31 = ((uint64_t)(arg1[35]) << 24); + x32 = ((uint64_t)(arg1[34]) << 16); + x33 = ((uint64_t)(arg1[33]) << 8); + x34 = (arg1[32]); + x35 = ((uint64_t)(arg1[31]) << 56); + x36 = ((uint64_t)(arg1[30]) << 48); + x37 = ((uint64_t)(arg1[29]) << 40); + x38 = ((uint64_t)(arg1[28]) << 32); + x39 = ((uint64_t)(arg1[27]) << 24); + x40 = ((uint64_t)(arg1[26]) << 16); + x41 = ((uint64_t)(arg1[25]) << 8); + x42 = (arg1[24]); + x43 = ((uint64_t)(arg1[23]) << 56); + x44 = ((uint64_t)(arg1[22]) << 48); + x45 = ((uint64_t)(arg1[21]) << 40); + x46 = ((uint64_t)(arg1[20]) << 32); + x47 = ((uint64_t)(arg1[19]) << 24); + x48 = ((uint64_t)(arg1[18]) << 16); + x49 = ((uint64_t)(arg1[17]) << 8); + x50 = (arg1[16]); + x51 = ((uint64_t)(arg1[15]) << 56); + x52 = ((uint64_t)(arg1[14]) << 48); + x53 = ((uint64_t)(arg1[13]) << 40); + x54 = ((uint64_t)(arg1[12]) << 32); + x55 = ((uint64_t)(arg1[11]) << 24); + x56 = ((uint64_t)(arg1[10]) << 16); + x57 = ((uint64_t)(arg1[9]) << 8); + x58 = (arg1[8]); + x59 = ((uint64_t)(arg1[7]) << 56); + x60 = ((uint64_t)(arg1[6]) << 48); + x61 = ((uint64_t)(arg1[5]) << 40); + x62 = ((uint64_t)(arg1[4]) << 32); + x63 = ((uint64_t)(arg1[3]) << 24); + x64 = ((uint64_t)(arg1[2]) << 16); + x65 = ((uint64_t)(arg1[1]) << 8); + x66 = (arg1[0]); + x67 = (x65 + (uint64_t)x66); + x68 = (x64 + x67); + x69 = (x63 + x68); + x70 = (x62 + x69); + x71 = (x61 + x70); + x72 = (x60 + x71); + x73 = (x59 + x72); + x74 = (x57 + (uint64_t)x58); + x75 = (x56 + x74); + x76 = (x55 + x75); + x77 = (x54 + x76); + x78 = (x53 + x77); + x79 = (x52 + x78); + x80 = (x51 + x79); + x81 = (x49 + (uint64_t)x50); + x82 = (x48 + x81); + x83 = (x47 + x82); + x84 = (x46 + x83); + x85 = (x45 + x84); + x86 = (x44 + x85); + x87 = (x43 + x86); + x88 = (x41 + (uint64_t)x42); + x89 = (x40 + x88); + x90 = (x39 + x89); + x91 = (x38 + x90); + x92 = (x37 + x91); + x93 = (x36 + x92); + x94 = (x35 + x93); + x95 = (x33 + (uint64_t)x34); + x96 = (x32 + x95); + x97 = (x31 + x96); + x98 = (x30 + x97); + x99 = (x29 + x98); + x100 = (x28 + x99); + x101 = (x27 + x100); + x102 = (x25 + (uint64_t)x26); + x103 = (x24 + x102); + x104 = (x23 + x103); + x105 = (x22 + x104); + x106 = (x21 + x105); + x107 = (x20 + x106); + x108 = (x19 + x107); + x109 = (x17 + (uint64_t)x18); + x110 = (x16 + x109); + x111 = (x15 + x110); + x112 = (x14 + x111); + x113 = (x13 + x112); + x114 = (x12 + x113); + x115 = (x11 + x114); + x116 = (x9 + (uint64_t)x10); + x117 = (x8 + x116); + x118 = (x7 + x117); + x119 = (x6 + x118); + x120 = (x5 + x119); + x121 = (x4 + x120); + x122 = (x3 + x121); + x123 = (x1 + (uint64_t)x2); + out1[0] = x73; + out1[1] = x80; + out1[2] = x87; + out1[3] = x94; + out1[4] = x101; + out1[5] = x108; + out1[6] = x115; + out1[7] = x122; + out1[8] = x123; +} + diff --git a/ec/native/np521_stubs.c b/ec/native/np521_stubs.c new file mode 100644 index 00000000..aaa8bf5a --- /dev/null +++ b/ec/native/np521_stubs.c @@ -0,0 +1,77 @@ +#include "mirage_crypto.h" + +#ifdef ARCH_64BIT +#include "np521_64.h" +#define LIMBS 9 +#define WORD uint64_t +#define WORDSIZE 64 +#else +#include "np521_32.h" +#define LIMBS 17 +#define WORD uint32_t +#define WORDSIZE 32 +#endif + +#define LEN_PRIME 521 +#define CURVE_DESCRIPTION fiat_np521 + +#include "inversion_template.h" + +#include + +CAMLprim value mc_np521_inv(value out, value in) +{ + CAMLparam2(out, in); + inversion(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np521_mul(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_np521_mul(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np521_add(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_np521_add(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np521_one(value out) +{ + CAMLparam1(out); + fiat_np521_set_one(Caml_ba_data_val(out)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np521_from_bytes(value out, value in) +{ + CAMLparam2(out, in); + fiat_np521_from_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np521_to_bytes(value out, value in) +{ + CAMLparam2(out, in); + fiat_np521_to_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np521_from_montgomery(value out, value in) +{ + CAMLparam2(out, in); + fiat_np521_from_montgomery(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_np521_to_montgomery(value out, value in) +{ + CAMLparam2(out, in); + fiat_np521_to_montgomery(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + diff --git a/ec/native/p224_32.h b/ec/native/p224_32.h new file mode 100644 index 00000000..f6f12212 --- /dev/null +++ b/ec/native/p224_32.h @@ -0,0 +1,3978 @@ +/* Autogenerated: '../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery' --static --use-value-barrier p224 32 '2^224 - 2^96 + 1' */ +/* curve description: p224 */ +/* machine_wordsize = 32 (from "32") */ +/* requested operations: (all) */ +/* m = 0xffffffffffffffffffffffffffffffff000000000000000000000001 (from "2^224 - 2^96 + 1") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 32) + (z[2] << 64) + (z[3] << 96) + (z[4] << 128) + (z[5] << 160) + (z[6] << 192) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) */ + +#include +typedef unsigned char fiat_p224_uint1; +typedef signed char fiat_p224_int1; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_P224_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint32_t fiat_p224_value_barrier_u32(uint32_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_p224_value_barrier_u32(x) (x) +#endif + + +/* + * The function fiat_p224_addcarryx_u32 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^32 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p224_addcarryx_u32(uint32_t* out1, fiat_p224_uint1* out2, fiat_p224_uint1 arg1, uint32_t arg2, uint32_t arg3) { + uint64_t x1; + uint32_t x2; + fiat_p224_uint1 x3; + x1 = ((arg1 + (uint64_t)arg2) + arg3); + x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + x3 = (fiat_p224_uint1)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p224_subborrowx_u32 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^32 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p224_subborrowx_u32(uint32_t* out1, fiat_p224_uint1* out2, fiat_p224_uint1 arg1, uint32_t arg2, uint32_t arg3) { + int64_t x1; + fiat_p224_int1 x2; + uint32_t x3; + x1 = ((arg2 - (int64_t)arg1) - arg3); + x2 = (fiat_p224_int1)(x1 >> 32); + x3 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + *out1 = x3; + *out2 = (fiat_p224_uint1)(0x0 - x2); +} + +/* + * The function fiat_p224_mulx_u32 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^32 + * out2 = ⌊arg1 * arg2 / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0xffffffff] + */ +static void fiat_p224_mulx_u32(uint32_t* out1, uint32_t* out2, uint32_t arg1, uint32_t arg2) { + uint64_t x1; + uint32_t x2; + uint32_t x3; + x1 = ((uint64_t)arg1 * arg2); + x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + x3 = (uint32_t)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p224_cmovznz_u32 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static void fiat_p224_cmovznz_u32(uint32_t* out1, fiat_p224_uint1 arg1, uint32_t arg2, uint32_t arg3) { + fiat_p224_uint1 x1; + uint32_t x2; + uint32_t x3; + x1 = (!(!arg1)); + x2 = ((fiat_p224_int1)(0x0 - x1) & UINT32_C(0xffffffff)); + x3 = ((fiat_p224_value_barrier_u32(x2) & arg3) | (fiat_p224_value_barrier_u32((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_p224_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p224_mul(uint32_t out1[7], const uint32_t arg1[7], const uint32_t arg2[7]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + fiat_p224_uint1 x23; + uint32_t x24; + fiat_p224_uint1 x25; + uint32_t x26; + fiat_p224_uint1 x27; + uint32_t x28; + fiat_p224_uint1 x29; + uint32_t x30; + fiat_p224_uint1 x31; + uint32_t x32; + fiat_p224_uint1 x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + fiat_p224_uint1 x46; + uint32_t x47; + fiat_p224_uint1 x48; + uint32_t x49; + fiat_p224_uint1 x50; + uint32_t x51; + uint32_t x52; + fiat_p224_uint1 x53; + uint32_t x54; + fiat_p224_uint1 x55; + uint32_t x56; + fiat_p224_uint1 x57; + uint32_t x58; + fiat_p224_uint1 x59; + uint32_t x60; + fiat_p224_uint1 x61; + uint32_t x62; + fiat_p224_uint1 x63; + uint32_t x64; + fiat_p224_uint1 x65; + uint32_t x66; + fiat_p224_uint1 x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + uint32_t x81; + uint32_t x82; + fiat_p224_uint1 x83; + uint32_t x84; + fiat_p224_uint1 x85; + uint32_t x86; + fiat_p224_uint1 x87; + uint32_t x88; + fiat_p224_uint1 x89; + uint32_t x90; + fiat_p224_uint1 x91; + uint32_t x92; + fiat_p224_uint1 x93; + uint32_t x94; + uint32_t x95; + fiat_p224_uint1 x96; + uint32_t x97; + fiat_p224_uint1 x98; + uint32_t x99; + fiat_p224_uint1 x100; + uint32_t x101; + fiat_p224_uint1 x102; + uint32_t x103; + fiat_p224_uint1 x104; + uint32_t x105; + fiat_p224_uint1 x106; + uint32_t x107; + fiat_p224_uint1 x108; + uint32_t x109; + fiat_p224_uint1 x110; + uint32_t x111; + uint32_t x112; + uint32_t x113; + uint32_t x114; + uint32_t x115; + uint32_t x116; + uint32_t x117; + uint32_t x118; + uint32_t x119; + uint32_t x120; + uint32_t x121; + fiat_p224_uint1 x122; + uint32_t x123; + fiat_p224_uint1 x124; + uint32_t x125; + fiat_p224_uint1 x126; + uint32_t x127; + uint32_t x128; + fiat_p224_uint1 x129; + uint32_t x130; + fiat_p224_uint1 x131; + uint32_t x132; + fiat_p224_uint1 x133; + uint32_t x134; + fiat_p224_uint1 x135; + uint32_t x136; + fiat_p224_uint1 x137; + uint32_t x138; + fiat_p224_uint1 x139; + uint32_t x140; + fiat_p224_uint1 x141; + uint32_t x142; + fiat_p224_uint1 x143; + uint32_t x144; + uint32_t x145; + uint32_t x146; + uint32_t x147; + uint32_t x148; + uint32_t x149; + uint32_t x150; + uint32_t x151; + uint32_t x152; + uint32_t x153; + uint32_t x154; + uint32_t x155; + uint32_t x156; + uint32_t x157; + uint32_t x158; + uint32_t x159; + fiat_p224_uint1 x160; + uint32_t x161; + fiat_p224_uint1 x162; + uint32_t x163; + fiat_p224_uint1 x164; + uint32_t x165; + fiat_p224_uint1 x166; + uint32_t x167; + fiat_p224_uint1 x168; + uint32_t x169; + fiat_p224_uint1 x170; + uint32_t x171; + uint32_t x172; + fiat_p224_uint1 x173; + uint32_t x174; + fiat_p224_uint1 x175; + uint32_t x176; + fiat_p224_uint1 x177; + uint32_t x178; + fiat_p224_uint1 x179; + uint32_t x180; + fiat_p224_uint1 x181; + uint32_t x182; + fiat_p224_uint1 x183; + uint32_t x184; + fiat_p224_uint1 x185; + uint32_t x186; + fiat_p224_uint1 x187; + uint32_t x188; + uint32_t x189; + uint32_t x190; + uint32_t x191; + uint32_t x192; + uint32_t x193; + uint32_t x194; + uint32_t x195; + uint32_t x196; + uint32_t x197; + uint32_t x198; + fiat_p224_uint1 x199; + uint32_t x200; + fiat_p224_uint1 x201; + uint32_t x202; + fiat_p224_uint1 x203; + uint32_t x204; + uint32_t x205; + fiat_p224_uint1 x206; + uint32_t x207; + fiat_p224_uint1 x208; + uint32_t x209; + fiat_p224_uint1 x210; + uint32_t x211; + fiat_p224_uint1 x212; + uint32_t x213; + fiat_p224_uint1 x214; + uint32_t x215; + fiat_p224_uint1 x216; + uint32_t x217; + fiat_p224_uint1 x218; + uint32_t x219; + fiat_p224_uint1 x220; + uint32_t x221; + uint32_t x222; + uint32_t x223; + uint32_t x224; + uint32_t x225; + uint32_t x226; + uint32_t x227; + uint32_t x228; + uint32_t x229; + uint32_t x230; + uint32_t x231; + uint32_t x232; + uint32_t x233; + uint32_t x234; + uint32_t x235; + uint32_t x236; + fiat_p224_uint1 x237; + uint32_t x238; + fiat_p224_uint1 x239; + uint32_t x240; + fiat_p224_uint1 x241; + uint32_t x242; + fiat_p224_uint1 x243; + uint32_t x244; + fiat_p224_uint1 x245; + uint32_t x246; + fiat_p224_uint1 x247; + uint32_t x248; + uint32_t x249; + fiat_p224_uint1 x250; + uint32_t x251; + fiat_p224_uint1 x252; + uint32_t x253; + fiat_p224_uint1 x254; + uint32_t x255; + fiat_p224_uint1 x256; + uint32_t x257; + fiat_p224_uint1 x258; + uint32_t x259; + fiat_p224_uint1 x260; + uint32_t x261; + fiat_p224_uint1 x262; + uint32_t x263; + fiat_p224_uint1 x264; + uint32_t x265; + uint32_t x266; + uint32_t x267; + uint32_t x268; + uint32_t x269; + uint32_t x270; + uint32_t x271; + uint32_t x272; + uint32_t x273; + uint32_t x274; + uint32_t x275; + fiat_p224_uint1 x276; + uint32_t x277; + fiat_p224_uint1 x278; + uint32_t x279; + fiat_p224_uint1 x280; + uint32_t x281; + uint32_t x282; + fiat_p224_uint1 x283; + uint32_t x284; + fiat_p224_uint1 x285; + uint32_t x286; + fiat_p224_uint1 x287; + uint32_t x288; + fiat_p224_uint1 x289; + uint32_t x290; + fiat_p224_uint1 x291; + uint32_t x292; + fiat_p224_uint1 x293; + uint32_t x294; + fiat_p224_uint1 x295; + uint32_t x296; + fiat_p224_uint1 x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + uint32_t x303; + uint32_t x304; + uint32_t x305; + uint32_t x306; + uint32_t x307; + uint32_t x308; + uint32_t x309; + uint32_t x310; + uint32_t x311; + uint32_t x312; + uint32_t x313; + fiat_p224_uint1 x314; + uint32_t x315; + fiat_p224_uint1 x316; + uint32_t x317; + fiat_p224_uint1 x318; + uint32_t x319; + fiat_p224_uint1 x320; + uint32_t x321; + fiat_p224_uint1 x322; + uint32_t x323; + fiat_p224_uint1 x324; + uint32_t x325; + uint32_t x326; + fiat_p224_uint1 x327; + uint32_t x328; + fiat_p224_uint1 x329; + uint32_t x330; + fiat_p224_uint1 x331; + uint32_t x332; + fiat_p224_uint1 x333; + uint32_t x334; + fiat_p224_uint1 x335; + uint32_t x336; + fiat_p224_uint1 x337; + uint32_t x338; + fiat_p224_uint1 x339; + uint32_t x340; + fiat_p224_uint1 x341; + uint32_t x342; + uint32_t x343; + uint32_t x344; + uint32_t x345; + uint32_t x346; + uint32_t x347; + uint32_t x348; + uint32_t x349; + uint32_t x350; + uint32_t x351; + uint32_t x352; + fiat_p224_uint1 x353; + uint32_t x354; + fiat_p224_uint1 x355; + uint32_t x356; + fiat_p224_uint1 x357; + uint32_t x358; + uint32_t x359; + fiat_p224_uint1 x360; + uint32_t x361; + fiat_p224_uint1 x362; + uint32_t x363; + fiat_p224_uint1 x364; + uint32_t x365; + fiat_p224_uint1 x366; + uint32_t x367; + fiat_p224_uint1 x368; + uint32_t x369; + fiat_p224_uint1 x370; + uint32_t x371; + fiat_p224_uint1 x372; + uint32_t x373; + fiat_p224_uint1 x374; + uint32_t x375; + uint32_t x376; + uint32_t x377; + uint32_t x378; + uint32_t x379; + uint32_t x380; + uint32_t x381; + uint32_t x382; + uint32_t x383; + uint32_t x384; + uint32_t x385; + uint32_t x386; + uint32_t x387; + uint32_t x388; + uint32_t x389; + uint32_t x390; + fiat_p224_uint1 x391; + uint32_t x392; + fiat_p224_uint1 x393; + uint32_t x394; + fiat_p224_uint1 x395; + uint32_t x396; + fiat_p224_uint1 x397; + uint32_t x398; + fiat_p224_uint1 x399; + uint32_t x400; + fiat_p224_uint1 x401; + uint32_t x402; + uint32_t x403; + fiat_p224_uint1 x404; + uint32_t x405; + fiat_p224_uint1 x406; + uint32_t x407; + fiat_p224_uint1 x408; + uint32_t x409; + fiat_p224_uint1 x410; + uint32_t x411; + fiat_p224_uint1 x412; + uint32_t x413; + fiat_p224_uint1 x414; + uint32_t x415; + fiat_p224_uint1 x416; + uint32_t x417; + fiat_p224_uint1 x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + uint32_t x422; + uint32_t x423; + uint32_t x424; + uint32_t x425; + uint32_t x426; + uint32_t x427; + uint32_t x428; + uint32_t x429; + fiat_p224_uint1 x430; + uint32_t x431; + fiat_p224_uint1 x432; + uint32_t x433; + fiat_p224_uint1 x434; + uint32_t x435; + uint32_t x436; + fiat_p224_uint1 x437; + uint32_t x438; + fiat_p224_uint1 x439; + uint32_t x440; + fiat_p224_uint1 x441; + uint32_t x442; + fiat_p224_uint1 x443; + uint32_t x444; + fiat_p224_uint1 x445; + uint32_t x446; + fiat_p224_uint1 x447; + uint32_t x448; + fiat_p224_uint1 x449; + uint32_t x450; + fiat_p224_uint1 x451; + uint32_t x452; + uint32_t x453; + uint32_t x454; + uint32_t x455; + uint32_t x456; + uint32_t x457; + uint32_t x458; + uint32_t x459; + uint32_t x460; + uint32_t x461; + uint32_t x462; + uint32_t x463; + uint32_t x464; + uint32_t x465; + uint32_t x466; + uint32_t x467; + fiat_p224_uint1 x468; + uint32_t x469; + fiat_p224_uint1 x470; + uint32_t x471; + fiat_p224_uint1 x472; + uint32_t x473; + fiat_p224_uint1 x474; + uint32_t x475; + fiat_p224_uint1 x476; + uint32_t x477; + fiat_p224_uint1 x478; + uint32_t x479; + uint32_t x480; + fiat_p224_uint1 x481; + uint32_t x482; + fiat_p224_uint1 x483; + uint32_t x484; + fiat_p224_uint1 x485; + uint32_t x486; + fiat_p224_uint1 x487; + uint32_t x488; + fiat_p224_uint1 x489; + uint32_t x490; + fiat_p224_uint1 x491; + uint32_t x492; + fiat_p224_uint1 x493; + uint32_t x494; + fiat_p224_uint1 x495; + uint32_t x496; + uint32_t x497; + uint32_t x498; + uint32_t x499; + uint32_t x500; + uint32_t x501; + uint32_t x502; + uint32_t x503; + uint32_t x504; + uint32_t x505; + uint32_t x506; + fiat_p224_uint1 x507; + uint32_t x508; + fiat_p224_uint1 x509; + uint32_t x510; + fiat_p224_uint1 x511; + uint32_t x512; + uint32_t x513; + fiat_p224_uint1 x514; + uint32_t x515; + fiat_p224_uint1 x516; + uint32_t x517; + fiat_p224_uint1 x518; + uint32_t x519; + fiat_p224_uint1 x520; + uint32_t x521; + fiat_p224_uint1 x522; + uint32_t x523; + fiat_p224_uint1 x524; + uint32_t x525; + fiat_p224_uint1 x526; + uint32_t x527; + fiat_p224_uint1 x528; + uint32_t x529; + uint32_t x530; + fiat_p224_uint1 x531; + uint32_t x532; + fiat_p224_uint1 x533; + uint32_t x534; + fiat_p224_uint1 x535; + uint32_t x536; + fiat_p224_uint1 x537; + uint32_t x538; + fiat_p224_uint1 x539; + uint32_t x540; + fiat_p224_uint1 x541; + uint32_t x542; + fiat_p224_uint1 x543; + uint32_t x544; + fiat_p224_uint1 x545; + uint32_t x546; + uint32_t x547; + uint32_t x548; + uint32_t x549; + uint32_t x550; + uint32_t x551; + uint32_t x552; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[0]); + fiat_p224_mulx_u32(&x8, &x9, x7, (arg2[6])); + fiat_p224_mulx_u32(&x10, &x11, x7, (arg2[5])); + fiat_p224_mulx_u32(&x12, &x13, x7, (arg2[4])); + fiat_p224_mulx_u32(&x14, &x15, x7, (arg2[3])); + fiat_p224_mulx_u32(&x16, &x17, x7, (arg2[2])); + fiat_p224_mulx_u32(&x18, &x19, x7, (arg2[1])); + fiat_p224_mulx_u32(&x20, &x21, x7, (arg2[0])); + fiat_p224_addcarryx_u32(&x22, &x23, 0x0, x21, x18); + fiat_p224_addcarryx_u32(&x24, &x25, x23, x19, x16); + fiat_p224_addcarryx_u32(&x26, &x27, x25, x17, x14); + fiat_p224_addcarryx_u32(&x28, &x29, x27, x15, x12); + fiat_p224_addcarryx_u32(&x30, &x31, x29, x13, x10); + fiat_p224_addcarryx_u32(&x32, &x33, x31, x11, x8); + x34 = (x33 + x9); + fiat_p224_mulx_u32(&x35, &x36, x20, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x37, &x38, x35, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x39, &x40, x35, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x41, &x42, x35, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x43, &x44, x35, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x45, &x46, 0x0, x44, x41); + fiat_p224_addcarryx_u32(&x47, &x48, x46, x42, x39); + fiat_p224_addcarryx_u32(&x49, &x50, x48, x40, x37); + x51 = (x50 + x38); + fiat_p224_addcarryx_u32(&x52, &x53, 0x0, x20, x35); + fiat_p224_addcarryx_u32(&x54, &x55, x53, x22, 0x0); + fiat_p224_addcarryx_u32(&x56, &x57, x55, x24, 0x0); + fiat_p224_addcarryx_u32(&x58, &x59, x57, x26, x43); + fiat_p224_addcarryx_u32(&x60, &x61, x59, x28, x45); + fiat_p224_addcarryx_u32(&x62, &x63, x61, x30, x47); + fiat_p224_addcarryx_u32(&x64, &x65, x63, x32, x49); + fiat_p224_addcarryx_u32(&x66, &x67, x65, x34, x51); + fiat_p224_mulx_u32(&x68, &x69, x1, (arg2[6])); + fiat_p224_mulx_u32(&x70, &x71, x1, (arg2[5])); + fiat_p224_mulx_u32(&x72, &x73, x1, (arg2[4])); + fiat_p224_mulx_u32(&x74, &x75, x1, (arg2[3])); + fiat_p224_mulx_u32(&x76, &x77, x1, (arg2[2])); + fiat_p224_mulx_u32(&x78, &x79, x1, (arg2[1])); + fiat_p224_mulx_u32(&x80, &x81, x1, (arg2[0])); + fiat_p224_addcarryx_u32(&x82, &x83, 0x0, x81, x78); + fiat_p224_addcarryx_u32(&x84, &x85, x83, x79, x76); + fiat_p224_addcarryx_u32(&x86, &x87, x85, x77, x74); + fiat_p224_addcarryx_u32(&x88, &x89, x87, x75, x72); + fiat_p224_addcarryx_u32(&x90, &x91, x89, x73, x70); + fiat_p224_addcarryx_u32(&x92, &x93, x91, x71, x68); + x94 = (x93 + x69); + fiat_p224_addcarryx_u32(&x95, &x96, 0x0, x54, x80); + fiat_p224_addcarryx_u32(&x97, &x98, x96, x56, x82); + fiat_p224_addcarryx_u32(&x99, &x100, x98, x58, x84); + fiat_p224_addcarryx_u32(&x101, &x102, x100, x60, x86); + fiat_p224_addcarryx_u32(&x103, &x104, x102, x62, x88); + fiat_p224_addcarryx_u32(&x105, &x106, x104, x64, x90); + fiat_p224_addcarryx_u32(&x107, &x108, x106, x66, x92); + fiat_p224_addcarryx_u32(&x109, &x110, x108, x67, x94); + fiat_p224_mulx_u32(&x111, &x112, x95, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x113, &x114, x111, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x115, &x116, x111, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x117, &x118, x111, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x119, &x120, x111, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x121, &x122, 0x0, x120, x117); + fiat_p224_addcarryx_u32(&x123, &x124, x122, x118, x115); + fiat_p224_addcarryx_u32(&x125, &x126, x124, x116, x113); + x127 = (x126 + x114); + fiat_p224_addcarryx_u32(&x128, &x129, 0x0, x95, x111); + fiat_p224_addcarryx_u32(&x130, &x131, x129, x97, 0x0); + fiat_p224_addcarryx_u32(&x132, &x133, x131, x99, 0x0); + fiat_p224_addcarryx_u32(&x134, &x135, x133, x101, x119); + fiat_p224_addcarryx_u32(&x136, &x137, x135, x103, x121); + fiat_p224_addcarryx_u32(&x138, &x139, x137, x105, x123); + fiat_p224_addcarryx_u32(&x140, &x141, x139, x107, x125); + fiat_p224_addcarryx_u32(&x142, &x143, x141, x109, x127); + x144 = ((uint32_t)x143 + x110); + fiat_p224_mulx_u32(&x145, &x146, x2, (arg2[6])); + fiat_p224_mulx_u32(&x147, &x148, x2, (arg2[5])); + fiat_p224_mulx_u32(&x149, &x150, x2, (arg2[4])); + fiat_p224_mulx_u32(&x151, &x152, x2, (arg2[3])); + fiat_p224_mulx_u32(&x153, &x154, x2, (arg2[2])); + fiat_p224_mulx_u32(&x155, &x156, x2, (arg2[1])); + fiat_p224_mulx_u32(&x157, &x158, x2, (arg2[0])); + fiat_p224_addcarryx_u32(&x159, &x160, 0x0, x158, x155); + fiat_p224_addcarryx_u32(&x161, &x162, x160, x156, x153); + fiat_p224_addcarryx_u32(&x163, &x164, x162, x154, x151); + fiat_p224_addcarryx_u32(&x165, &x166, x164, x152, x149); + fiat_p224_addcarryx_u32(&x167, &x168, x166, x150, x147); + fiat_p224_addcarryx_u32(&x169, &x170, x168, x148, x145); + x171 = (x170 + x146); + fiat_p224_addcarryx_u32(&x172, &x173, 0x0, x130, x157); + fiat_p224_addcarryx_u32(&x174, &x175, x173, x132, x159); + fiat_p224_addcarryx_u32(&x176, &x177, x175, x134, x161); + fiat_p224_addcarryx_u32(&x178, &x179, x177, x136, x163); + fiat_p224_addcarryx_u32(&x180, &x181, x179, x138, x165); + fiat_p224_addcarryx_u32(&x182, &x183, x181, x140, x167); + fiat_p224_addcarryx_u32(&x184, &x185, x183, x142, x169); + fiat_p224_addcarryx_u32(&x186, &x187, x185, x144, x171); + fiat_p224_mulx_u32(&x188, &x189, x172, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x190, &x191, x188, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x192, &x193, x188, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x194, &x195, x188, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x196, &x197, x188, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x198, &x199, 0x0, x197, x194); + fiat_p224_addcarryx_u32(&x200, &x201, x199, x195, x192); + fiat_p224_addcarryx_u32(&x202, &x203, x201, x193, x190); + x204 = (x203 + x191); + fiat_p224_addcarryx_u32(&x205, &x206, 0x0, x172, x188); + fiat_p224_addcarryx_u32(&x207, &x208, x206, x174, 0x0); + fiat_p224_addcarryx_u32(&x209, &x210, x208, x176, 0x0); + fiat_p224_addcarryx_u32(&x211, &x212, x210, x178, x196); + fiat_p224_addcarryx_u32(&x213, &x214, x212, x180, x198); + fiat_p224_addcarryx_u32(&x215, &x216, x214, x182, x200); + fiat_p224_addcarryx_u32(&x217, &x218, x216, x184, x202); + fiat_p224_addcarryx_u32(&x219, &x220, x218, x186, x204); + x221 = ((uint32_t)x220 + x187); + fiat_p224_mulx_u32(&x222, &x223, x3, (arg2[6])); + fiat_p224_mulx_u32(&x224, &x225, x3, (arg2[5])); + fiat_p224_mulx_u32(&x226, &x227, x3, (arg2[4])); + fiat_p224_mulx_u32(&x228, &x229, x3, (arg2[3])); + fiat_p224_mulx_u32(&x230, &x231, x3, (arg2[2])); + fiat_p224_mulx_u32(&x232, &x233, x3, (arg2[1])); + fiat_p224_mulx_u32(&x234, &x235, x3, (arg2[0])); + fiat_p224_addcarryx_u32(&x236, &x237, 0x0, x235, x232); + fiat_p224_addcarryx_u32(&x238, &x239, x237, x233, x230); + fiat_p224_addcarryx_u32(&x240, &x241, x239, x231, x228); + fiat_p224_addcarryx_u32(&x242, &x243, x241, x229, x226); + fiat_p224_addcarryx_u32(&x244, &x245, x243, x227, x224); + fiat_p224_addcarryx_u32(&x246, &x247, x245, x225, x222); + x248 = (x247 + x223); + fiat_p224_addcarryx_u32(&x249, &x250, 0x0, x207, x234); + fiat_p224_addcarryx_u32(&x251, &x252, x250, x209, x236); + fiat_p224_addcarryx_u32(&x253, &x254, x252, x211, x238); + fiat_p224_addcarryx_u32(&x255, &x256, x254, x213, x240); + fiat_p224_addcarryx_u32(&x257, &x258, x256, x215, x242); + fiat_p224_addcarryx_u32(&x259, &x260, x258, x217, x244); + fiat_p224_addcarryx_u32(&x261, &x262, x260, x219, x246); + fiat_p224_addcarryx_u32(&x263, &x264, x262, x221, x248); + fiat_p224_mulx_u32(&x265, &x266, x249, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x267, &x268, x265, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x269, &x270, x265, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x271, &x272, x265, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x273, &x274, x265, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x275, &x276, 0x0, x274, x271); + fiat_p224_addcarryx_u32(&x277, &x278, x276, x272, x269); + fiat_p224_addcarryx_u32(&x279, &x280, x278, x270, x267); + x281 = (x280 + x268); + fiat_p224_addcarryx_u32(&x282, &x283, 0x0, x249, x265); + fiat_p224_addcarryx_u32(&x284, &x285, x283, x251, 0x0); + fiat_p224_addcarryx_u32(&x286, &x287, x285, x253, 0x0); + fiat_p224_addcarryx_u32(&x288, &x289, x287, x255, x273); + fiat_p224_addcarryx_u32(&x290, &x291, x289, x257, x275); + fiat_p224_addcarryx_u32(&x292, &x293, x291, x259, x277); + fiat_p224_addcarryx_u32(&x294, &x295, x293, x261, x279); + fiat_p224_addcarryx_u32(&x296, &x297, x295, x263, x281); + x298 = ((uint32_t)x297 + x264); + fiat_p224_mulx_u32(&x299, &x300, x4, (arg2[6])); + fiat_p224_mulx_u32(&x301, &x302, x4, (arg2[5])); + fiat_p224_mulx_u32(&x303, &x304, x4, (arg2[4])); + fiat_p224_mulx_u32(&x305, &x306, x4, (arg2[3])); + fiat_p224_mulx_u32(&x307, &x308, x4, (arg2[2])); + fiat_p224_mulx_u32(&x309, &x310, x4, (arg2[1])); + fiat_p224_mulx_u32(&x311, &x312, x4, (arg2[0])); + fiat_p224_addcarryx_u32(&x313, &x314, 0x0, x312, x309); + fiat_p224_addcarryx_u32(&x315, &x316, x314, x310, x307); + fiat_p224_addcarryx_u32(&x317, &x318, x316, x308, x305); + fiat_p224_addcarryx_u32(&x319, &x320, x318, x306, x303); + fiat_p224_addcarryx_u32(&x321, &x322, x320, x304, x301); + fiat_p224_addcarryx_u32(&x323, &x324, x322, x302, x299); + x325 = (x324 + x300); + fiat_p224_addcarryx_u32(&x326, &x327, 0x0, x284, x311); + fiat_p224_addcarryx_u32(&x328, &x329, x327, x286, x313); + fiat_p224_addcarryx_u32(&x330, &x331, x329, x288, x315); + fiat_p224_addcarryx_u32(&x332, &x333, x331, x290, x317); + fiat_p224_addcarryx_u32(&x334, &x335, x333, x292, x319); + fiat_p224_addcarryx_u32(&x336, &x337, x335, x294, x321); + fiat_p224_addcarryx_u32(&x338, &x339, x337, x296, x323); + fiat_p224_addcarryx_u32(&x340, &x341, x339, x298, x325); + fiat_p224_mulx_u32(&x342, &x343, x326, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x344, &x345, x342, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x346, &x347, x342, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x348, &x349, x342, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x350, &x351, x342, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x352, &x353, 0x0, x351, x348); + fiat_p224_addcarryx_u32(&x354, &x355, x353, x349, x346); + fiat_p224_addcarryx_u32(&x356, &x357, x355, x347, x344); + x358 = (x357 + x345); + fiat_p224_addcarryx_u32(&x359, &x360, 0x0, x326, x342); + fiat_p224_addcarryx_u32(&x361, &x362, x360, x328, 0x0); + fiat_p224_addcarryx_u32(&x363, &x364, x362, x330, 0x0); + fiat_p224_addcarryx_u32(&x365, &x366, x364, x332, x350); + fiat_p224_addcarryx_u32(&x367, &x368, x366, x334, x352); + fiat_p224_addcarryx_u32(&x369, &x370, x368, x336, x354); + fiat_p224_addcarryx_u32(&x371, &x372, x370, x338, x356); + fiat_p224_addcarryx_u32(&x373, &x374, x372, x340, x358); + x375 = ((uint32_t)x374 + x341); + fiat_p224_mulx_u32(&x376, &x377, x5, (arg2[6])); + fiat_p224_mulx_u32(&x378, &x379, x5, (arg2[5])); + fiat_p224_mulx_u32(&x380, &x381, x5, (arg2[4])); + fiat_p224_mulx_u32(&x382, &x383, x5, (arg2[3])); + fiat_p224_mulx_u32(&x384, &x385, x5, (arg2[2])); + fiat_p224_mulx_u32(&x386, &x387, x5, (arg2[1])); + fiat_p224_mulx_u32(&x388, &x389, x5, (arg2[0])); + fiat_p224_addcarryx_u32(&x390, &x391, 0x0, x389, x386); + fiat_p224_addcarryx_u32(&x392, &x393, x391, x387, x384); + fiat_p224_addcarryx_u32(&x394, &x395, x393, x385, x382); + fiat_p224_addcarryx_u32(&x396, &x397, x395, x383, x380); + fiat_p224_addcarryx_u32(&x398, &x399, x397, x381, x378); + fiat_p224_addcarryx_u32(&x400, &x401, x399, x379, x376); + x402 = (x401 + x377); + fiat_p224_addcarryx_u32(&x403, &x404, 0x0, x361, x388); + fiat_p224_addcarryx_u32(&x405, &x406, x404, x363, x390); + fiat_p224_addcarryx_u32(&x407, &x408, x406, x365, x392); + fiat_p224_addcarryx_u32(&x409, &x410, x408, x367, x394); + fiat_p224_addcarryx_u32(&x411, &x412, x410, x369, x396); + fiat_p224_addcarryx_u32(&x413, &x414, x412, x371, x398); + fiat_p224_addcarryx_u32(&x415, &x416, x414, x373, x400); + fiat_p224_addcarryx_u32(&x417, &x418, x416, x375, x402); + fiat_p224_mulx_u32(&x419, &x420, x403, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x421, &x422, x419, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x423, &x424, x419, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x425, &x426, x419, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x427, &x428, x419, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x429, &x430, 0x0, x428, x425); + fiat_p224_addcarryx_u32(&x431, &x432, x430, x426, x423); + fiat_p224_addcarryx_u32(&x433, &x434, x432, x424, x421); + x435 = (x434 + x422); + fiat_p224_addcarryx_u32(&x436, &x437, 0x0, x403, x419); + fiat_p224_addcarryx_u32(&x438, &x439, x437, x405, 0x0); + fiat_p224_addcarryx_u32(&x440, &x441, x439, x407, 0x0); + fiat_p224_addcarryx_u32(&x442, &x443, x441, x409, x427); + fiat_p224_addcarryx_u32(&x444, &x445, x443, x411, x429); + fiat_p224_addcarryx_u32(&x446, &x447, x445, x413, x431); + fiat_p224_addcarryx_u32(&x448, &x449, x447, x415, x433); + fiat_p224_addcarryx_u32(&x450, &x451, x449, x417, x435); + x452 = ((uint32_t)x451 + x418); + fiat_p224_mulx_u32(&x453, &x454, x6, (arg2[6])); + fiat_p224_mulx_u32(&x455, &x456, x6, (arg2[5])); + fiat_p224_mulx_u32(&x457, &x458, x6, (arg2[4])); + fiat_p224_mulx_u32(&x459, &x460, x6, (arg2[3])); + fiat_p224_mulx_u32(&x461, &x462, x6, (arg2[2])); + fiat_p224_mulx_u32(&x463, &x464, x6, (arg2[1])); + fiat_p224_mulx_u32(&x465, &x466, x6, (arg2[0])); + fiat_p224_addcarryx_u32(&x467, &x468, 0x0, x466, x463); + fiat_p224_addcarryx_u32(&x469, &x470, x468, x464, x461); + fiat_p224_addcarryx_u32(&x471, &x472, x470, x462, x459); + fiat_p224_addcarryx_u32(&x473, &x474, x472, x460, x457); + fiat_p224_addcarryx_u32(&x475, &x476, x474, x458, x455); + fiat_p224_addcarryx_u32(&x477, &x478, x476, x456, x453); + x479 = (x478 + x454); + fiat_p224_addcarryx_u32(&x480, &x481, 0x0, x438, x465); + fiat_p224_addcarryx_u32(&x482, &x483, x481, x440, x467); + fiat_p224_addcarryx_u32(&x484, &x485, x483, x442, x469); + fiat_p224_addcarryx_u32(&x486, &x487, x485, x444, x471); + fiat_p224_addcarryx_u32(&x488, &x489, x487, x446, x473); + fiat_p224_addcarryx_u32(&x490, &x491, x489, x448, x475); + fiat_p224_addcarryx_u32(&x492, &x493, x491, x450, x477); + fiat_p224_addcarryx_u32(&x494, &x495, x493, x452, x479); + fiat_p224_mulx_u32(&x496, &x497, x480, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x498, &x499, x496, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x500, &x501, x496, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x502, &x503, x496, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x504, &x505, x496, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x506, &x507, 0x0, x505, x502); + fiat_p224_addcarryx_u32(&x508, &x509, x507, x503, x500); + fiat_p224_addcarryx_u32(&x510, &x511, x509, x501, x498); + x512 = (x511 + x499); + fiat_p224_addcarryx_u32(&x513, &x514, 0x0, x480, x496); + fiat_p224_addcarryx_u32(&x515, &x516, x514, x482, 0x0); + fiat_p224_addcarryx_u32(&x517, &x518, x516, x484, 0x0); + fiat_p224_addcarryx_u32(&x519, &x520, x518, x486, x504); + fiat_p224_addcarryx_u32(&x521, &x522, x520, x488, x506); + fiat_p224_addcarryx_u32(&x523, &x524, x522, x490, x508); + fiat_p224_addcarryx_u32(&x525, &x526, x524, x492, x510); + fiat_p224_addcarryx_u32(&x527, &x528, x526, x494, x512); + x529 = ((uint32_t)x528 + x495); + fiat_p224_subborrowx_u32(&x530, &x531, 0x0, x515, 0x1); + fiat_p224_subborrowx_u32(&x532, &x533, x531, x517, 0x0); + fiat_p224_subborrowx_u32(&x534, &x535, x533, x519, 0x0); + fiat_p224_subborrowx_u32(&x536, &x537, x535, x521, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x538, &x539, x537, x523, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x540, &x541, x539, x525, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x542, &x543, x541, x527, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x544, &x545, x543, x529, 0x0); + fiat_p224_cmovznz_u32(&x546, x545, x530, x515); + fiat_p224_cmovznz_u32(&x547, x545, x532, x517); + fiat_p224_cmovznz_u32(&x548, x545, x534, x519); + fiat_p224_cmovznz_u32(&x549, x545, x536, x521); + fiat_p224_cmovznz_u32(&x550, x545, x538, x523); + fiat_p224_cmovznz_u32(&x551, x545, x540, x525); + fiat_p224_cmovznz_u32(&x552, x545, x542, x527); + out1[0] = x546; + out1[1] = x547; + out1[2] = x548; + out1[3] = x549; + out1[4] = x550; + out1[5] = x551; + out1[6] = x552; +} + +/* + * The function fiat_p224_square squares a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p224_square(uint32_t out1[7], const uint32_t arg1[7]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + fiat_p224_uint1 x23; + uint32_t x24; + fiat_p224_uint1 x25; + uint32_t x26; + fiat_p224_uint1 x27; + uint32_t x28; + fiat_p224_uint1 x29; + uint32_t x30; + fiat_p224_uint1 x31; + uint32_t x32; + fiat_p224_uint1 x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + fiat_p224_uint1 x46; + uint32_t x47; + fiat_p224_uint1 x48; + uint32_t x49; + fiat_p224_uint1 x50; + uint32_t x51; + uint32_t x52; + fiat_p224_uint1 x53; + uint32_t x54; + fiat_p224_uint1 x55; + uint32_t x56; + fiat_p224_uint1 x57; + uint32_t x58; + fiat_p224_uint1 x59; + uint32_t x60; + fiat_p224_uint1 x61; + uint32_t x62; + fiat_p224_uint1 x63; + uint32_t x64; + fiat_p224_uint1 x65; + uint32_t x66; + fiat_p224_uint1 x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + uint32_t x81; + uint32_t x82; + fiat_p224_uint1 x83; + uint32_t x84; + fiat_p224_uint1 x85; + uint32_t x86; + fiat_p224_uint1 x87; + uint32_t x88; + fiat_p224_uint1 x89; + uint32_t x90; + fiat_p224_uint1 x91; + uint32_t x92; + fiat_p224_uint1 x93; + uint32_t x94; + uint32_t x95; + fiat_p224_uint1 x96; + uint32_t x97; + fiat_p224_uint1 x98; + uint32_t x99; + fiat_p224_uint1 x100; + uint32_t x101; + fiat_p224_uint1 x102; + uint32_t x103; + fiat_p224_uint1 x104; + uint32_t x105; + fiat_p224_uint1 x106; + uint32_t x107; + fiat_p224_uint1 x108; + uint32_t x109; + fiat_p224_uint1 x110; + uint32_t x111; + uint32_t x112; + uint32_t x113; + uint32_t x114; + uint32_t x115; + uint32_t x116; + uint32_t x117; + uint32_t x118; + uint32_t x119; + uint32_t x120; + uint32_t x121; + fiat_p224_uint1 x122; + uint32_t x123; + fiat_p224_uint1 x124; + uint32_t x125; + fiat_p224_uint1 x126; + uint32_t x127; + uint32_t x128; + fiat_p224_uint1 x129; + uint32_t x130; + fiat_p224_uint1 x131; + uint32_t x132; + fiat_p224_uint1 x133; + uint32_t x134; + fiat_p224_uint1 x135; + uint32_t x136; + fiat_p224_uint1 x137; + uint32_t x138; + fiat_p224_uint1 x139; + uint32_t x140; + fiat_p224_uint1 x141; + uint32_t x142; + fiat_p224_uint1 x143; + uint32_t x144; + uint32_t x145; + uint32_t x146; + uint32_t x147; + uint32_t x148; + uint32_t x149; + uint32_t x150; + uint32_t x151; + uint32_t x152; + uint32_t x153; + uint32_t x154; + uint32_t x155; + uint32_t x156; + uint32_t x157; + uint32_t x158; + uint32_t x159; + fiat_p224_uint1 x160; + uint32_t x161; + fiat_p224_uint1 x162; + uint32_t x163; + fiat_p224_uint1 x164; + uint32_t x165; + fiat_p224_uint1 x166; + uint32_t x167; + fiat_p224_uint1 x168; + uint32_t x169; + fiat_p224_uint1 x170; + uint32_t x171; + uint32_t x172; + fiat_p224_uint1 x173; + uint32_t x174; + fiat_p224_uint1 x175; + uint32_t x176; + fiat_p224_uint1 x177; + uint32_t x178; + fiat_p224_uint1 x179; + uint32_t x180; + fiat_p224_uint1 x181; + uint32_t x182; + fiat_p224_uint1 x183; + uint32_t x184; + fiat_p224_uint1 x185; + uint32_t x186; + fiat_p224_uint1 x187; + uint32_t x188; + uint32_t x189; + uint32_t x190; + uint32_t x191; + uint32_t x192; + uint32_t x193; + uint32_t x194; + uint32_t x195; + uint32_t x196; + uint32_t x197; + uint32_t x198; + fiat_p224_uint1 x199; + uint32_t x200; + fiat_p224_uint1 x201; + uint32_t x202; + fiat_p224_uint1 x203; + uint32_t x204; + uint32_t x205; + fiat_p224_uint1 x206; + uint32_t x207; + fiat_p224_uint1 x208; + uint32_t x209; + fiat_p224_uint1 x210; + uint32_t x211; + fiat_p224_uint1 x212; + uint32_t x213; + fiat_p224_uint1 x214; + uint32_t x215; + fiat_p224_uint1 x216; + uint32_t x217; + fiat_p224_uint1 x218; + uint32_t x219; + fiat_p224_uint1 x220; + uint32_t x221; + uint32_t x222; + uint32_t x223; + uint32_t x224; + uint32_t x225; + uint32_t x226; + uint32_t x227; + uint32_t x228; + uint32_t x229; + uint32_t x230; + uint32_t x231; + uint32_t x232; + uint32_t x233; + uint32_t x234; + uint32_t x235; + uint32_t x236; + fiat_p224_uint1 x237; + uint32_t x238; + fiat_p224_uint1 x239; + uint32_t x240; + fiat_p224_uint1 x241; + uint32_t x242; + fiat_p224_uint1 x243; + uint32_t x244; + fiat_p224_uint1 x245; + uint32_t x246; + fiat_p224_uint1 x247; + uint32_t x248; + uint32_t x249; + fiat_p224_uint1 x250; + uint32_t x251; + fiat_p224_uint1 x252; + uint32_t x253; + fiat_p224_uint1 x254; + uint32_t x255; + fiat_p224_uint1 x256; + uint32_t x257; + fiat_p224_uint1 x258; + uint32_t x259; + fiat_p224_uint1 x260; + uint32_t x261; + fiat_p224_uint1 x262; + uint32_t x263; + fiat_p224_uint1 x264; + uint32_t x265; + uint32_t x266; + uint32_t x267; + uint32_t x268; + uint32_t x269; + uint32_t x270; + uint32_t x271; + uint32_t x272; + uint32_t x273; + uint32_t x274; + uint32_t x275; + fiat_p224_uint1 x276; + uint32_t x277; + fiat_p224_uint1 x278; + uint32_t x279; + fiat_p224_uint1 x280; + uint32_t x281; + uint32_t x282; + fiat_p224_uint1 x283; + uint32_t x284; + fiat_p224_uint1 x285; + uint32_t x286; + fiat_p224_uint1 x287; + uint32_t x288; + fiat_p224_uint1 x289; + uint32_t x290; + fiat_p224_uint1 x291; + uint32_t x292; + fiat_p224_uint1 x293; + uint32_t x294; + fiat_p224_uint1 x295; + uint32_t x296; + fiat_p224_uint1 x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + uint32_t x303; + uint32_t x304; + uint32_t x305; + uint32_t x306; + uint32_t x307; + uint32_t x308; + uint32_t x309; + uint32_t x310; + uint32_t x311; + uint32_t x312; + uint32_t x313; + fiat_p224_uint1 x314; + uint32_t x315; + fiat_p224_uint1 x316; + uint32_t x317; + fiat_p224_uint1 x318; + uint32_t x319; + fiat_p224_uint1 x320; + uint32_t x321; + fiat_p224_uint1 x322; + uint32_t x323; + fiat_p224_uint1 x324; + uint32_t x325; + uint32_t x326; + fiat_p224_uint1 x327; + uint32_t x328; + fiat_p224_uint1 x329; + uint32_t x330; + fiat_p224_uint1 x331; + uint32_t x332; + fiat_p224_uint1 x333; + uint32_t x334; + fiat_p224_uint1 x335; + uint32_t x336; + fiat_p224_uint1 x337; + uint32_t x338; + fiat_p224_uint1 x339; + uint32_t x340; + fiat_p224_uint1 x341; + uint32_t x342; + uint32_t x343; + uint32_t x344; + uint32_t x345; + uint32_t x346; + uint32_t x347; + uint32_t x348; + uint32_t x349; + uint32_t x350; + uint32_t x351; + uint32_t x352; + fiat_p224_uint1 x353; + uint32_t x354; + fiat_p224_uint1 x355; + uint32_t x356; + fiat_p224_uint1 x357; + uint32_t x358; + uint32_t x359; + fiat_p224_uint1 x360; + uint32_t x361; + fiat_p224_uint1 x362; + uint32_t x363; + fiat_p224_uint1 x364; + uint32_t x365; + fiat_p224_uint1 x366; + uint32_t x367; + fiat_p224_uint1 x368; + uint32_t x369; + fiat_p224_uint1 x370; + uint32_t x371; + fiat_p224_uint1 x372; + uint32_t x373; + fiat_p224_uint1 x374; + uint32_t x375; + uint32_t x376; + uint32_t x377; + uint32_t x378; + uint32_t x379; + uint32_t x380; + uint32_t x381; + uint32_t x382; + uint32_t x383; + uint32_t x384; + uint32_t x385; + uint32_t x386; + uint32_t x387; + uint32_t x388; + uint32_t x389; + uint32_t x390; + fiat_p224_uint1 x391; + uint32_t x392; + fiat_p224_uint1 x393; + uint32_t x394; + fiat_p224_uint1 x395; + uint32_t x396; + fiat_p224_uint1 x397; + uint32_t x398; + fiat_p224_uint1 x399; + uint32_t x400; + fiat_p224_uint1 x401; + uint32_t x402; + uint32_t x403; + fiat_p224_uint1 x404; + uint32_t x405; + fiat_p224_uint1 x406; + uint32_t x407; + fiat_p224_uint1 x408; + uint32_t x409; + fiat_p224_uint1 x410; + uint32_t x411; + fiat_p224_uint1 x412; + uint32_t x413; + fiat_p224_uint1 x414; + uint32_t x415; + fiat_p224_uint1 x416; + uint32_t x417; + fiat_p224_uint1 x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + uint32_t x422; + uint32_t x423; + uint32_t x424; + uint32_t x425; + uint32_t x426; + uint32_t x427; + uint32_t x428; + uint32_t x429; + fiat_p224_uint1 x430; + uint32_t x431; + fiat_p224_uint1 x432; + uint32_t x433; + fiat_p224_uint1 x434; + uint32_t x435; + uint32_t x436; + fiat_p224_uint1 x437; + uint32_t x438; + fiat_p224_uint1 x439; + uint32_t x440; + fiat_p224_uint1 x441; + uint32_t x442; + fiat_p224_uint1 x443; + uint32_t x444; + fiat_p224_uint1 x445; + uint32_t x446; + fiat_p224_uint1 x447; + uint32_t x448; + fiat_p224_uint1 x449; + uint32_t x450; + fiat_p224_uint1 x451; + uint32_t x452; + uint32_t x453; + uint32_t x454; + uint32_t x455; + uint32_t x456; + uint32_t x457; + uint32_t x458; + uint32_t x459; + uint32_t x460; + uint32_t x461; + uint32_t x462; + uint32_t x463; + uint32_t x464; + uint32_t x465; + uint32_t x466; + uint32_t x467; + fiat_p224_uint1 x468; + uint32_t x469; + fiat_p224_uint1 x470; + uint32_t x471; + fiat_p224_uint1 x472; + uint32_t x473; + fiat_p224_uint1 x474; + uint32_t x475; + fiat_p224_uint1 x476; + uint32_t x477; + fiat_p224_uint1 x478; + uint32_t x479; + uint32_t x480; + fiat_p224_uint1 x481; + uint32_t x482; + fiat_p224_uint1 x483; + uint32_t x484; + fiat_p224_uint1 x485; + uint32_t x486; + fiat_p224_uint1 x487; + uint32_t x488; + fiat_p224_uint1 x489; + uint32_t x490; + fiat_p224_uint1 x491; + uint32_t x492; + fiat_p224_uint1 x493; + uint32_t x494; + fiat_p224_uint1 x495; + uint32_t x496; + uint32_t x497; + uint32_t x498; + uint32_t x499; + uint32_t x500; + uint32_t x501; + uint32_t x502; + uint32_t x503; + uint32_t x504; + uint32_t x505; + uint32_t x506; + fiat_p224_uint1 x507; + uint32_t x508; + fiat_p224_uint1 x509; + uint32_t x510; + fiat_p224_uint1 x511; + uint32_t x512; + uint32_t x513; + fiat_p224_uint1 x514; + uint32_t x515; + fiat_p224_uint1 x516; + uint32_t x517; + fiat_p224_uint1 x518; + uint32_t x519; + fiat_p224_uint1 x520; + uint32_t x521; + fiat_p224_uint1 x522; + uint32_t x523; + fiat_p224_uint1 x524; + uint32_t x525; + fiat_p224_uint1 x526; + uint32_t x527; + fiat_p224_uint1 x528; + uint32_t x529; + uint32_t x530; + fiat_p224_uint1 x531; + uint32_t x532; + fiat_p224_uint1 x533; + uint32_t x534; + fiat_p224_uint1 x535; + uint32_t x536; + fiat_p224_uint1 x537; + uint32_t x538; + fiat_p224_uint1 x539; + uint32_t x540; + fiat_p224_uint1 x541; + uint32_t x542; + fiat_p224_uint1 x543; + uint32_t x544; + fiat_p224_uint1 x545; + uint32_t x546; + uint32_t x547; + uint32_t x548; + uint32_t x549; + uint32_t x550; + uint32_t x551; + uint32_t x552; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[0]); + fiat_p224_mulx_u32(&x8, &x9, x7, (arg1[6])); + fiat_p224_mulx_u32(&x10, &x11, x7, (arg1[5])); + fiat_p224_mulx_u32(&x12, &x13, x7, (arg1[4])); + fiat_p224_mulx_u32(&x14, &x15, x7, (arg1[3])); + fiat_p224_mulx_u32(&x16, &x17, x7, (arg1[2])); + fiat_p224_mulx_u32(&x18, &x19, x7, (arg1[1])); + fiat_p224_mulx_u32(&x20, &x21, x7, (arg1[0])); + fiat_p224_addcarryx_u32(&x22, &x23, 0x0, x21, x18); + fiat_p224_addcarryx_u32(&x24, &x25, x23, x19, x16); + fiat_p224_addcarryx_u32(&x26, &x27, x25, x17, x14); + fiat_p224_addcarryx_u32(&x28, &x29, x27, x15, x12); + fiat_p224_addcarryx_u32(&x30, &x31, x29, x13, x10); + fiat_p224_addcarryx_u32(&x32, &x33, x31, x11, x8); + x34 = (x33 + x9); + fiat_p224_mulx_u32(&x35, &x36, x20, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x37, &x38, x35, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x39, &x40, x35, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x41, &x42, x35, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x43, &x44, x35, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x45, &x46, 0x0, x44, x41); + fiat_p224_addcarryx_u32(&x47, &x48, x46, x42, x39); + fiat_p224_addcarryx_u32(&x49, &x50, x48, x40, x37); + x51 = (x50 + x38); + fiat_p224_addcarryx_u32(&x52, &x53, 0x0, x20, x35); + fiat_p224_addcarryx_u32(&x54, &x55, x53, x22, 0x0); + fiat_p224_addcarryx_u32(&x56, &x57, x55, x24, 0x0); + fiat_p224_addcarryx_u32(&x58, &x59, x57, x26, x43); + fiat_p224_addcarryx_u32(&x60, &x61, x59, x28, x45); + fiat_p224_addcarryx_u32(&x62, &x63, x61, x30, x47); + fiat_p224_addcarryx_u32(&x64, &x65, x63, x32, x49); + fiat_p224_addcarryx_u32(&x66, &x67, x65, x34, x51); + fiat_p224_mulx_u32(&x68, &x69, x1, (arg1[6])); + fiat_p224_mulx_u32(&x70, &x71, x1, (arg1[5])); + fiat_p224_mulx_u32(&x72, &x73, x1, (arg1[4])); + fiat_p224_mulx_u32(&x74, &x75, x1, (arg1[3])); + fiat_p224_mulx_u32(&x76, &x77, x1, (arg1[2])); + fiat_p224_mulx_u32(&x78, &x79, x1, (arg1[1])); + fiat_p224_mulx_u32(&x80, &x81, x1, (arg1[0])); + fiat_p224_addcarryx_u32(&x82, &x83, 0x0, x81, x78); + fiat_p224_addcarryx_u32(&x84, &x85, x83, x79, x76); + fiat_p224_addcarryx_u32(&x86, &x87, x85, x77, x74); + fiat_p224_addcarryx_u32(&x88, &x89, x87, x75, x72); + fiat_p224_addcarryx_u32(&x90, &x91, x89, x73, x70); + fiat_p224_addcarryx_u32(&x92, &x93, x91, x71, x68); + x94 = (x93 + x69); + fiat_p224_addcarryx_u32(&x95, &x96, 0x0, x54, x80); + fiat_p224_addcarryx_u32(&x97, &x98, x96, x56, x82); + fiat_p224_addcarryx_u32(&x99, &x100, x98, x58, x84); + fiat_p224_addcarryx_u32(&x101, &x102, x100, x60, x86); + fiat_p224_addcarryx_u32(&x103, &x104, x102, x62, x88); + fiat_p224_addcarryx_u32(&x105, &x106, x104, x64, x90); + fiat_p224_addcarryx_u32(&x107, &x108, x106, x66, x92); + fiat_p224_addcarryx_u32(&x109, &x110, x108, x67, x94); + fiat_p224_mulx_u32(&x111, &x112, x95, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x113, &x114, x111, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x115, &x116, x111, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x117, &x118, x111, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x119, &x120, x111, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x121, &x122, 0x0, x120, x117); + fiat_p224_addcarryx_u32(&x123, &x124, x122, x118, x115); + fiat_p224_addcarryx_u32(&x125, &x126, x124, x116, x113); + x127 = (x126 + x114); + fiat_p224_addcarryx_u32(&x128, &x129, 0x0, x95, x111); + fiat_p224_addcarryx_u32(&x130, &x131, x129, x97, 0x0); + fiat_p224_addcarryx_u32(&x132, &x133, x131, x99, 0x0); + fiat_p224_addcarryx_u32(&x134, &x135, x133, x101, x119); + fiat_p224_addcarryx_u32(&x136, &x137, x135, x103, x121); + fiat_p224_addcarryx_u32(&x138, &x139, x137, x105, x123); + fiat_p224_addcarryx_u32(&x140, &x141, x139, x107, x125); + fiat_p224_addcarryx_u32(&x142, &x143, x141, x109, x127); + x144 = ((uint32_t)x143 + x110); + fiat_p224_mulx_u32(&x145, &x146, x2, (arg1[6])); + fiat_p224_mulx_u32(&x147, &x148, x2, (arg1[5])); + fiat_p224_mulx_u32(&x149, &x150, x2, (arg1[4])); + fiat_p224_mulx_u32(&x151, &x152, x2, (arg1[3])); + fiat_p224_mulx_u32(&x153, &x154, x2, (arg1[2])); + fiat_p224_mulx_u32(&x155, &x156, x2, (arg1[1])); + fiat_p224_mulx_u32(&x157, &x158, x2, (arg1[0])); + fiat_p224_addcarryx_u32(&x159, &x160, 0x0, x158, x155); + fiat_p224_addcarryx_u32(&x161, &x162, x160, x156, x153); + fiat_p224_addcarryx_u32(&x163, &x164, x162, x154, x151); + fiat_p224_addcarryx_u32(&x165, &x166, x164, x152, x149); + fiat_p224_addcarryx_u32(&x167, &x168, x166, x150, x147); + fiat_p224_addcarryx_u32(&x169, &x170, x168, x148, x145); + x171 = (x170 + x146); + fiat_p224_addcarryx_u32(&x172, &x173, 0x0, x130, x157); + fiat_p224_addcarryx_u32(&x174, &x175, x173, x132, x159); + fiat_p224_addcarryx_u32(&x176, &x177, x175, x134, x161); + fiat_p224_addcarryx_u32(&x178, &x179, x177, x136, x163); + fiat_p224_addcarryx_u32(&x180, &x181, x179, x138, x165); + fiat_p224_addcarryx_u32(&x182, &x183, x181, x140, x167); + fiat_p224_addcarryx_u32(&x184, &x185, x183, x142, x169); + fiat_p224_addcarryx_u32(&x186, &x187, x185, x144, x171); + fiat_p224_mulx_u32(&x188, &x189, x172, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x190, &x191, x188, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x192, &x193, x188, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x194, &x195, x188, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x196, &x197, x188, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x198, &x199, 0x0, x197, x194); + fiat_p224_addcarryx_u32(&x200, &x201, x199, x195, x192); + fiat_p224_addcarryx_u32(&x202, &x203, x201, x193, x190); + x204 = (x203 + x191); + fiat_p224_addcarryx_u32(&x205, &x206, 0x0, x172, x188); + fiat_p224_addcarryx_u32(&x207, &x208, x206, x174, 0x0); + fiat_p224_addcarryx_u32(&x209, &x210, x208, x176, 0x0); + fiat_p224_addcarryx_u32(&x211, &x212, x210, x178, x196); + fiat_p224_addcarryx_u32(&x213, &x214, x212, x180, x198); + fiat_p224_addcarryx_u32(&x215, &x216, x214, x182, x200); + fiat_p224_addcarryx_u32(&x217, &x218, x216, x184, x202); + fiat_p224_addcarryx_u32(&x219, &x220, x218, x186, x204); + x221 = ((uint32_t)x220 + x187); + fiat_p224_mulx_u32(&x222, &x223, x3, (arg1[6])); + fiat_p224_mulx_u32(&x224, &x225, x3, (arg1[5])); + fiat_p224_mulx_u32(&x226, &x227, x3, (arg1[4])); + fiat_p224_mulx_u32(&x228, &x229, x3, (arg1[3])); + fiat_p224_mulx_u32(&x230, &x231, x3, (arg1[2])); + fiat_p224_mulx_u32(&x232, &x233, x3, (arg1[1])); + fiat_p224_mulx_u32(&x234, &x235, x3, (arg1[0])); + fiat_p224_addcarryx_u32(&x236, &x237, 0x0, x235, x232); + fiat_p224_addcarryx_u32(&x238, &x239, x237, x233, x230); + fiat_p224_addcarryx_u32(&x240, &x241, x239, x231, x228); + fiat_p224_addcarryx_u32(&x242, &x243, x241, x229, x226); + fiat_p224_addcarryx_u32(&x244, &x245, x243, x227, x224); + fiat_p224_addcarryx_u32(&x246, &x247, x245, x225, x222); + x248 = (x247 + x223); + fiat_p224_addcarryx_u32(&x249, &x250, 0x0, x207, x234); + fiat_p224_addcarryx_u32(&x251, &x252, x250, x209, x236); + fiat_p224_addcarryx_u32(&x253, &x254, x252, x211, x238); + fiat_p224_addcarryx_u32(&x255, &x256, x254, x213, x240); + fiat_p224_addcarryx_u32(&x257, &x258, x256, x215, x242); + fiat_p224_addcarryx_u32(&x259, &x260, x258, x217, x244); + fiat_p224_addcarryx_u32(&x261, &x262, x260, x219, x246); + fiat_p224_addcarryx_u32(&x263, &x264, x262, x221, x248); + fiat_p224_mulx_u32(&x265, &x266, x249, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x267, &x268, x265, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x269, &x270, x265, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x271, &x272, x265, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x273, &x274, x265, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x275, &x276, 0x0, x274, x271); + fiat_p224_addcarryx_u32(&x277, &x278, x276, x272, x269); + fiat_p224_addcarryx_u32(&x279, &x280, x278, x270, x267); + x281 = (x280 + x268); + fiat_p224_addcarryx_u32(&x282, &x283, 0x0, x249, x265); + fiat_p224_addcarryx_u32(&x284, &x285, x283, x251, 0x0); + fiat_p224_addcarryx_u32(&x286, &x287, x285, x253, 0x0); + fiat_p224_addcarryx_u32(&x288, &x289, x287, x255, x273); + fiat_p224_addcarryx_u32(&x290, &x291, x289, x257, x275); + fiat_p224_addcarryx_u32(&x292, &x293, x291, x259, x277); + fiat_p224_addcarryx_u32(&x294, &x295, x293, x261, x279); + fiat_p224_addcarryx_u32(&x296, &x297, x295, x263, x281); + x298 = ((uint32_t)x297 + x264); + fiat_p224_mulx_u32(&x299, &x300, x4, (arg1[6])); + fiat_p224_mulx_u32(&x301, &x302, x4, (arg1[5])); + fiat_p224_mulx_u32(&x303, &x304, x4, (arg1[4])); + fiat_p224_mulx_u32(&x305, &x306, x4, (arg1[3])); + fiat_p224_mulx_u32(&x307, &x308, x4, (arg1[2])); + fiat_p224_mulx_u32(&x309, &x310, x4, (arg1[1])); + fiat_p224_mulx_u32(&x311, &x312, x4, (arg1[0])); + fiat_p224_addcarryx_u32(&x313, &x314, 0x0, x312, x309); + fiat_p224_addcarryx_u32(&x315, &x316, x314, x310, x307); + fiat_p224_addcarryx_u32(&x317, &x318, x316, x308, x305); + fiat_p224_addcarryx_u32(&x319, &x320, x318, x306, x303); + fiat_p224_addcarryx_u32(&x321, &x322, x320, x304, x301); + fiat_p224_addcarryx_u32(&x323, &x324, x322, x302, x299); + x325 = (x324 + x300); + fiat_p224_addcarryx_u32(&x326, &x327, 0x0, x284, x311); + fiat_p224_addcarryx_u32(&x328, &x329, x327, x286, x313); + fiat_p224_addcarryx_u32(&x330, &x331, x329, x288, x315); + fiat_p224_addcarryx_u32(&x332, &x333, x331, x290, x317); + fiat_p224_addcarryx_u32(&x334, &x335, x333, x292, x319); + fiat_p224_addcarryx_u32(&x336, &x337, x335, x294, x321); + fiat_p224_addcarryx_u32(&x338, &x339, x337, x296, x323); + fiat_p224_addcarryx_u32(&x340, &x341, x339, x298, x325); + fiat_p224_mulx_u32(&x342, &x343, x326, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x344, &x345, x342, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x346, &x347, x342, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x348, &x349, x342, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x350, &x351, x342, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x352, &x353, 0x0, x351, x348); + fiat_p224_addcarryx_u32(&x354, &x355, x353, x349, x346); + fiat_p224_addcarryx_u32(&x356, &x357, x355, x347, x344); + x358 = (x357 + x345); + fiat_p224_addcarryx_u32(&x359, &x360, 0x0, x326, x342); + fiat_p224_addcarryx_u32(&x361, &x362, x360, x328, 0x0); + fiat_p224_addcarryx_u32(&x363, &x364, x362, x330, 0x0); + fiat_p224_addcarryx_u32(&x365, &x366, x364, x332, x350); + fiat_p224_addcarryx_u32(&x367, &x368, x366, x334, x352); + fiat_p224_addcarryx_u32(&x369, &x370, x368, x336, x354); + fiat_p224_addcarryx_u32(&x371, &x372, x370, x338, x356); + fiat_p224_addcarryx_u32(&x373, &x374, x372, x340, x358); + x375 = ((uint32_t)x374 + x341); + fiat_p224_mulx_u32(&x376, &x377, x5, (arg1[6])); + fiat_p224_mulx_u32(&x378, &x379, x5, (arg1[5])); + fiat_p224_mulx_u32(&x380, &x381, x5, (arg1[4])); + fiat_p224_mulx_u32(&x382, &x383, x5, (arg1[3])); + fiat_p224_mulx_u32(&x384, &x385, x5, (arg1[2])); + fiat_p224_mulx_u32(&x386, &x387, x5, (arg1[1])); + fiat_p224_mulx_u32(&x388, &x389, x5, (arg1[0])); + fiat_p224_addcarryx_u32(&x390, &x391, 0x0, x389, x386); + fiat_p224_addcarryx_u32(&x392, &x393, x391, x387, x384); + fiat_p224_addcarryx_u32(&x394, &x395, x393, x385, x382); + fiat_p224_addcarryx_u32(&x396, &x397, x395, x383, x380); + fiat_p224_addcarryx_u32(&x398, &x399, x397, x381, x378); + fiat_p224_addcarryx_u32(&x400, &x401, x399, x379, x376); + x402 = (x401 + x377); + fiat_p224_addcarryx_u32(&x403, &x404, 0x0, x361, x388); + fiat_p224_addcarryx_u32(&x405, &x406, x404, x363, x390); + fiat_p224_addcarryx_u32(&x407, &x408, x406, x365, x392); + fiat_p224_addcarryx_u32(&x409, &x410, x408, x367, x394); + fiat_p224_addcarryx_u32(&x411, &x412, x410, x369, x396); + fiat_p224_addcarryx_u32(&x413, &x414, x412, x371, x398); + fiat_p224_addcarryx_u32(&x415, &x416, x414, x373, x400); + fiat_p224_addcarryx_u32(&x417, &x418, x416, x375, x402); + fiat_p224_mulx_u32(&x419, &x420, x403, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x421, &x422, x419, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x423, &x424, x419, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x425, &x426, x419, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x427, &x428, x419, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x429, &x430, 0x0, x428, x425); + fiat_p224_addcarryx_u32(&x431, &x432, x430, x426, x423); + fiat_p224_addcarryx_u32(&x433, &x434, x432, x424, x421); + x435 = (x434 + x422); + fiat_p224_addcarryx_u32(&x436, &x437, 0x0, x403, x419); + fiat_p224_addcarryx_u32(&x438, &x439, x437, x405, 0x0); + fiat_p224_addcarryx_u32(&x440, &x441, x439, x407, 0x0); + fiat_p224_addcarryx_u32(&x442, &x443, x441, x409, x427); + fiat_p224_addcarryx_u32(&x444, &x445, x443, x411, x429); + fiat_p224_addcarryx_u32(&x446, &x447, x445, x413, x431); + fiat_p224_addcarryx_u32(&x448, &x449, x447, x415, x433); + fiat_p224_addcarryx_u32(&x450, &x451, x449, x417, x435); + x452 = ((uint32_t)x451 + x418); + fiat_p224_mulx_u32(&x453, &x454, x6, (arg1[6])); + fiat_p224_mulx_u32(&x455, &x456, x6, (arg1[5])); + fiat_p224_mulx_u32(&x457, &x458, x6, (arg1[4])); + fiat_p224_mulx_u32(&x459, &x460, x6, (arg1[3])); + fiat_p224_mulx_u32(&x461, &x462, x6, (arg1[2])); + fiat_p224_mulx_u32(&x463, &x464, x6, (arg1[1])); + fiat_p224_mulx_u32(&x465, &x466, x6, (arg1[0])); + fiat_p224_addcarryx_u32(&x467, &x468, 0x0, x466, x463); + fiat_p224_addcarryx_u32(&x469, &x470, x468, x464, x461); + fiat_p224_addcarryx_u32(&x471, &x472, x470, x462, x459); + fiat_p224_addcarryx_u32(&x473, &x474, x472, x460, x457); + fiat_p224_addcarryx_u32(&x475, &x476, x474, x458, x455); + fiat_p224_addcarryx_u32(&x477, &x478, x476, x456, x453); + x479 = (x478 + x454); + fiat_p224_addcarryx_u32(&x480, &x481, 0x0, x438, x465); + fiat_p224_addcarryx_u32(&x482, &x483, x481, x440, x467); + fiat_p224_addcarryx_u32(&x484, &x485, x483, x442, x469); + fiat_p224_addcarryx_u32(&x486, &x487, x485, x444, x471); + fiat_p224_addcarryx_u32(&x488, &x489, x487, x446, x473); + fiat_p224_addcarryx_u32(&x490, &x491, x489, x448, x475); + fiat_p224_addcarryx_u32(&x492, &x493, x491, x450, x477); + fiat_p224_addcarryx_u32(&x494, &x495, x493, x452, x479); + fiat_p224_mulx_u32(&x496, &x497, x480, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x498, &x499, x496, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x500, &x501, x496, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x502, &x503, x496, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x504, &x505, x496, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x506, &x507, 0x0, x505, x502); + fiat_p224_addcarryx_u32(&x508, &x509, x507, x503, x500); + fiat_p224_addcarryx_u32(&x510, &x511, x509, x501, x498); + x512 = (x511 + x499); + fiat_p224_addcarryx_u32(&x513, &x514, 0x0, x480, x496); + fiat_p224_addcarryx_u32(&x515, &x516, x514, x482, 0x0); + fiat_p224_addcarryx_u32(&x517, &x518, x516, x484, 0x0); + fiat_p224_addcarryx_u32(&x519, &x520, x518, x486, x504); + fiat_p224_addcarryx_u32(&x521, &x522, x520, x488, x506); + fiat_p224_addcarryx_u32(&x523, &x524, x522, x490, x508); + fiat_p224_addcarryx_u32(&x525, &x526, x524, x492, x510); + fiat_p224_addcarryx_u32(&x527, &x528, x526, x494, x512); + x529 = ((uint32_t)x528 + x495); + fiat_p224_subborrowx_u32(&x530, &x531, 0x0, x515, 0x1); + fiat_p224_subborrowx_u32(&x532, &x533, x531, x517, 0x0); + fiat_p224_subborrowx_u32(&x534, &x535, x533, x519, 0x0); + fiat_p224_subborrowx_u32(&x536, &x537, x535, x521, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x538, &x539, x537, x523, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x540, &x541, x539, x525, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x542, &x543, x541, x527, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x544, &x545, x543, x529, 0x0); + fiat_p224_cmovznz_u32(&x546, x545, x530, x515); + fiat_p224_cmovznz_u32(&x547, x545, x532, x517); + fiat_p224_cmovznz_u32(&x548, x545, x534, x519); + fiat_p224_cmovznz_u32(&x549, x545, x536, x521); + fiat_p224_cmovznz_u32(&x550, x545, x538, x523); + fiat_p224_cmovznz_u32(&x551, x545, x540, x525); + fiat_p224_cmovznz_u32(&x552, x545, x542, x527); + out1[0] = x546; + out1[1] = x547; + out1[2] = x548; + out1[3] = x549; + out1[4] = x550; + out1[5] = x551; + out1[6] = x552; +} + +/* + * The function fiat_p224_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p224_add(uint32_t out1[7], const uint32_t arg1[7], const uint32_t arg2[7]) { + uint32_t x1; + fiat_p224_uint1 x2; + uint32_t x3; + fiat_p224_uint1 x4; + uint32_t x5; + fiat_p224_uint1 x6; + uint32_t x7; + fiat_p224_uint1 x8; + uint32_t x9; + fiat_p224_uint1 x10; + uint32_t x11; + fiat_p224_uint1 x12; + uint32_t x13; + fiat_p224_uint1 x14; + uint32_t x15; + fiat_p224_uint1 x16; + uint32_t x17; + fiat_p224_uint1 x18; + uint32_t x19; + fiat_p224_uint1 x20; + uint32_t x21; + fiat_p224_uint1 x22; + uint32_t x23; + fiat_p224_uint1 x24; + uint32_t x25; + fiat_p224_uint1 x26; + uint32_t x27; + fiat_p224_uint1 x28; + uint32_t x29; + fiat_p224_uint1 x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + fiat_p224_addcarryx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_p224_addcarryx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_p224_addcarryx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_p224_addcarryx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_p224_addcarryx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_p224_addcarryx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_p224_addcarryx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); + fiat_p224_subborrowx_u32(&x15, &x16, 0x0, x1, 0x1); + fiat_p224_subborrowx_u32(&x17, &x18, x16, x3, 0x0); + fiat_p224_subborrowx_u32(&x19, &x20, x18, x5, 0x0); + fiat_p224_subborrowx_u32(&x21, &x22, x20, x7, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x23, &x24, x22, x9, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x25, &x26, x24, x11, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x27, &x28, x26, x13, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x29, &x30, x28, x14, 0x0); + fiat_p224_cmovznz_u32(&x31, x30, x15, x1); + fiat_p224_cmovznz_u32(&x32, x30, x17, x3); + fiat_p224_cmovznz_u32(&x33, x30, x19, x5); + fiat_p224_cmovznz_u32(&x34, x30, x21, x7); + fiat_p224_cmovznz_u32(&x35, x30, x23, x9); + fiat_p224_cmovznz_u32(&x36, x30, x25, x11); + fiat_p224_cmovznz_u32(&x37, x30, x27, x13); + out1[0] = x31; + out1[1] = x32; + out1[2] = x33; + out1[3] = x34; + out1[4] = x35; + out1[5] = x36; + out1[6] = x37; +} + +/* + * The function fiat_p224_sub subtracts two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p224_sub(uint32_t out1[7], const uint32_t arg1[7], const uint32_t arg2[7]) { + uint32_t x1; + fiat_p224_uint1 x2; + uint32_t x3; + fiat_p224_uint1 x4; + uint32_t x5; + fiat_p224_uint1 x6; + uint32_t x7; + fiat_p224_uint1 x8; + uint32_t x9; + fiat_p224_uint1 x10; + uint32_t x11; + fiat_p224_uint1 x12; + uint32_t x13; + fiat_p224_uint1 x14; + uint32_t x15; + uint32_t x16; + fiat_p224_uint1 x17; + uint32_t x18; + fiat_p224_uint1 x19; + uint32_t x20; + fiat_p224_uint1 x21; + uint32_t x22; + fiat_p224_uint1 x23; + uint32_t x24; + fiat_p224_uint1 x25; + uint32_t x26; + fiat_p224_uint1 x27; + uint32_t x28; + fiat_p224_uint1 x29; + fiat_p224_subborrowx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_p224_subborrowx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_p224_subborrowx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_p224_subborrowx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_p224_subborrowx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_p224_subborrowx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_p224_subborrowx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); + fiat_p224_cmovznz_u32(&x15, x14, 0x0, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x16, &x17, 0x0, x1, (fiat_p224_uint1)(x15 & 0x1)); + fiat_p224_addcarryx_u32(&x18, &x19, x17, x3, 0x0); + fiat_p224_addcarryx_u32(&x20, &x21, x19, x5, 0x0); + fiat_p224_addcarryx_u32(&x22, &x23, x21, x7, x15); + fiat_p224_addcarryx_u32(&x24, &x25, x23, x9, x15); + fiat_p224_addcarryx_u32(&x26, &x27, x25, x11, x15); + fiat_p224_addcarryx_u32(&x28, &x29, x27, x13, x15); + out1[0] = x16; + out1[1] = x18; + out1[2] = x20; + out1[3] = x22; + out1[4] = x24; + out1[5] = x26; + out1[6] = x28; +} + +/* + * The function fiat_p224_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p224_opp(uint32_t out1[7], const uint32_t arg1[7]) { + uint32_t x1; + fiat_p224_uint1 x2; + uint32_t x3; + fiat_p224_uint1 x4; + uint32_t x5; + fiat_p224_uint1 x6; + uint32_t x7; + fiat_p224_uint1 x8; + uint32_t x9; + fiat_p224_uint1 x10; + uint32_t x11; + fiat_p224_uint1 x12; + uint32_t x13; + fiat_p224_uint1 x14; + uint32_t x15; + uint32_t x16; + fiat_p224_uint1 x17; + uint32_t x18; + fiat_p224_uint1 x19; + uint32_t x20; + fiat_p224_uint1 x21; + uint32_t x22; + fiat_p224_uint1 x23; + uint32_t x24; + fiat_p224_uint1 x25; + uint32_t x26; + fiat_p224_uint1 x27; + uint32_t x28; + fiat_p224_uint1 x29; + fiat_p224_subborrowx_u32(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_p224_subborrowx_u32(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_p224_subborrowx_u32(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_p224_subborrowx_u32(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_p224_subborrowx_u32(&x9, &x10, x8, 0x0, (arg1[4])); + fiat_p224_subborrowx_u32(&x11, &x12, x10, 0x0, (arg1[5])); + fiat_p224_subborrowx_u32(&x13, &x14, x12, 0x0, (arg1[6])); + fiat_p224_cmovznz_u32(&x15, x14, 0x0, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x16, &x17, 0x0, x1, (fiat_p224_uint1)(x15 & 0x1)); + fiat_p224_addcarryx_u32(&x18, &x19, x17, x3, 0x0); + fiat_p224_addcarryx_u32(&x20, &x21, x19, x5, 0x0); + fiat_p224_addcarryx_u32(&x22, &x23, x21, x7, x15); + fiat_p224_addcarryx_u32(&x24, &x25, x23, x9, x15); + fiat_p224_addcarryx_u32(&x26, &x27, x25, x11, x15); + fiat_p224_addcarryx_u32(&x28, &x29, x27, x13, x15); + out1[0] = x16; + out1[1] = x18; + out1[2] = x20; + out1[3] = x22; + out1[4] = x24; + out1[5] = x26; + out1[6] = x28; +} + +/* + * The function fiat_p224_from_montgomery translates a field element out of the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^32)⁻¹ mod m)^7) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p224_from_montgomery(uint32_t out1[7], const uint32_t arg1[7]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + fiat_p224_uint1 x13; + uint32_t x14; + fiat_p224_uint1 x15; + uint32_t x16; + fiat_p224_uint1 x17; + uint32_t x18; + fiat_p224_uint1 x19; + uint32_t x20; + fiat_p224_uint1 x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint32_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint32_t x32; + fiat_p224_uint1 x33; + uint32_t x34; + fiat_p224_uint1 x35; + uint32_t x36; + fiat_p224_uint1 x37; + uint32_t x38; + fiat_p224_uint1 x39; + uint32_t x40; + fiat_p224_uint1 x41; + uint32_t x42; + fiat_p224_uint1 x43; + uint32_t x44; + fiat_p224_uint1 x45; + uint32_t x46; + fiat_p224_uint1 x47; + uint32_t x48; + fiat_p224_uint1 x49; + uint32_t x50; + fiat_p224_uint1 x51; + uint32_t x52; + fiat_p224_uint1 x53; + uint32_t x54; + fiat_p224_uint1 x55; + uint32_t x56; + fiat_p224_uint1 x57; + uint32_t x58; + fiat_p224_uint1 x59; + uint32_t x60; + fiat_p224_uint1 x61; + uint32_t x62; + fiat_p224_uint1 x63; + uint32_t x64; + uint32_t x65; + uint32_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + fiat_p224_uint1 x75; + uint32_t x76; + fiat_p224_uint1 x77; + uint32_t x78; + fiat_p224_uint1 x79; + uint32_t x80; + fiat_p224_uint1 x81; + uint32_t x82; + fiat_p224_uint1 x83; + uint32_t x84; + fiat_p224_uint1 x85; + uint32_t x86; + fiat_p224_uint1 x87; + uint32_t x88; + fiat_p224_uint1 x89; + uint32_t x90; + fiat_p224_uint1 x91; + uint32_t x92; + fiat_p224_uint1 x93; + uint32_t x94; + fiat_p224_uint1 x95; + uint32_t x96; + fiat_p224_uint1 x97; + uint32_t x98; + fiat_p224_uint1 x99; + uint32_t x100; + fiat_p224_uint1 x101; + uint32_t x102; + fiat_p224_uint1 x103; + uint32_t x104; + fiat_p224_uint1 x105; + uint32_t x106; + fiat_p224_uint1 x107; + uint32_t x108; + fiat_p224_uint1 x109; + uint32_t x110; + uint32_t x111; + uint32_t x112; + uint32_t x113; + uint32_t x114; + uint32_t x115; + uint32_t x116; + uint32_t x117; + uint32_t x118; + uint32_t x119; + uint32_t x120; + fiat_p224_uint1 x121; + uint32_t x122; + fiat_p224_uint1 x123; + uint32_t x124; + fiat_p224_uint1 x125; + uint32_t x126; + fiat_p224_uint1 x127; + uint32_t x128; + fiat_p224_uint1 x129; + uint32_t x130; + fiat_p224_uint1 x131; + uint32_t x132; + fiat_p224_uint1 x133; + uint32_t x134; + fiat_p224_uint1 x135; + uint32_t x136; + fiat_p224_uint1 x137; + uint32_t x138; + fiat_p224_uint1 x139; + uint32_t x140; + fiat_p224_uint1 x141; + uint32_t x142; + fiat_p224_uint1 x143; + uint32_t x144; + fiat_p224_uint1 x145; + uint32_t x146; + fiat_p224_uint1 x147; + uint32_t x148; + fiat_p224_uint1 x149; + uint32_t x150; + fiat_p224_uint1 x151; + uint32_t x152; + fiat_p224_uint1 x153; + uint32_t x154; + fiat_p224_uint1 x155; + uint32_t x156; + uint32_t x157; + uint32_t x158; + uint32_t x159; + uint32_t x160; + uint32_t x161; + uint32_t x162; + uint32_t x163; + uint32_t x164; + uint32_t x165; + uint32_t x166; + fiat_p224_uint1 x167; + uint32_t x168; + fiat_p224_uint1 x169; + uint32_t x170; + fiat_p224_uint1 x171; + uint32_t x172; + fiat_p224_uint1 x173; + uint32_t x174; + fiat_p224_uint1 x175; + uint32_t x176; + fiat_p224_uint1 x177; + uint32_t x178; + fiat_p224_uint1 x179; + uint32_t x180; + fiat_p224_uint1 x181; + uint32_t x182; + fiat_p224_uint1 x183; + uint32_t x184; + fiat_p224_uint1 x185; + uint32_t x186; + fiat_p224_uint1 x187; + uint32_t x188; + fiat_p224_uint1 x189; + uint32_t x190; + fiat_p224_uint1 x191; + uint32_t x192; + fiat_p224_uint1 x193; + uint32_t x194; + fiat_p224_uint1 x195; + uint32_t x196; + fiat_p224_uint1 x197; + uint32_t x198; + fiat_p224_uint1 x199; + uint32_t x200; + fiat_p224_uint1 x201; + uint32_t x202; + uint32_t x203; + uint32_t x204; + uint32_t x205; + uint32_t x206; + uint32_t x207; + uint32_t x208; + uint32_t x209; + uint32_t x210; + uint32_t x211; + uint32_t x212; + fiat_p224_uint1 x213; + uint32_t x214; + fiat_p224_uint1 x215; + uint32_t x216; + fiat_p224_uint1 x217; + uint32_t x218; + fiat_p224_uint1 x219; + uint32_t x220; + fiat_p224_uint1 x221; + uint32_t x222; + fiat_p224_uint1 x223; + uint32_t x224; + fiat_p224_uint1 x225; + uint32_t x226; + fiat_p224_uint1 x227; + uint32_t x228; + fiat_p224_uint1 x229; + uint32_t x230; + fiat_p224_uint1 x231; + uint32_t x232; + fiat_p224_uint1 x233; + uint32_t x234; + fiat_p224_uint1 x235; + uint32_t x236; + fiat_p224_uint1 x237; + uint32_t x238; + fiat_p224_uint1 x239; + uint32_t x240; + fiat_p224_uint1 x241; + uint32_t x242; + fiat_p224_uint1 x243; + uint32_t x244; + fiat_p224_uint1 x245; + uint32_t x246; + fiat_p224_uint1 x247; + uint32_t x248; + uint32_t x249; + uint32_t x250; + uint32_t x251; + uint32_t x252; + uint32_t x253; + uint32_t x254; + uint32_t x255; + uint32_t x256; + uint32_t x257; + uint32_t x258; + fiat_p224_uint1 x259; + uint32_t x260; + fiat_p224_uint1 x261; + uint32_t x262; + fiat_p224_uint1 x263; + uint32_t x264; + fiat_p224_uint1 x265; + uint32_t x266; + fiat_p224_uint1 x267; + uint32_t x268; + fiat_p224_uint1 x269; + uint32_t x270; + fiat_p224_uint1 x271; + uint32_t x272; + fiat_p224_uint1 x273; + uint32_t x274; + fiat_p224_uint1 x275; + uint32_t x276; + fiat_p224_uint1 x277; + uint32_t x278; + fiat_p224_uint1 x279; + uint32_t x280; + fiat_p224_uint1 x281; + uint32_t x282; + fiat_p224_uint1 x283; + uint32_t x284; + fiat_p224_uint1 x285; + uint32_t x286; + fiat_p224_uint1 x287; + uint32_t x288; + fiat_p224_uint1 x289; + uint32_t x290; + fiat_p224_uint1 x291; + uint32_t x292; + fiat_p224_uint1 x293; + uint32_t x294; + fiat_p224_uint1 x295; + uint32_t x296; + uint32_t x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + x1 = (arg1[0]); + fiat_p224_mulx_u32(&x2, &x3, x1, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x4, &x5, x2, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x6, &x7, x2, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x8, &x9, x2, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x10, &x11, x2, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x12, &x13, 0x0, x11, x8); + fiat_p224_addcarryx_u32(&x14, &x15, x13, x9, x6); + fiat_p224_addcarryx_u32(&x16, &x17, x15, x7, x4); + fiat_p224_addcarryx_u32(&x18, &x19, 0x0, x1, x2); + fiat_p224_addcarryx_u32(&x20, &x21, 0x0, x19, (arg1[1])); + fiat_p224_mulx_u32(&x22, &x23, x20, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x24, &x25, x22, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x26, &x27, x22, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x28, &x29, x22, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x30, &x31, x22, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x32, &x33, 0x0, x31, x28); + fiat_p224_addcarryx_u32(&x34, &x35, x33, x29, x26); + fiat_p224_addcarryx_u32(&x36, &x37, x35, x27, x24); + fiat_p224_addcarryx_u32(&x38, &x39, 0x0, x12, x30); + fiat_p224_addcarryx_u32(&x40, &x41, x39, x14, x32); + fiat_p224_addcarryx_u32(&x42, &x43, x41, x16, x34); + fiat_p224_addcarryx_u32(&x44, &x45, x43, (x17 + x5), x36); + fiat_p224_addcarryx_u32(&x46, &x47, x45, 0x0, (x37 + x25)); + fiat_p224_addcarryx_u32(&x48, &x49, 0x0, x20, x22); + fiat_p224_addcarryx_u32(&x50, &x51, 0x0, ((uint32_t)x49 + x21), (arg1[2])); + fiat_p224_addcarryx_u32(&x52, &x53, x51, x10, 0x0); + fiat_p224_addcarryx_u32(&x54, &x55, x53, x38, 0x0); + fiat_p224_addcarryx_u32(&x56, &x57, x55, x40, 0x0); + fiat_p224_addcarryx_u32(&x58, &x59, x57, x42, 0x0); + fiat_p224_addcarryx_u32(&x60, &x61, x59, x44, 0x0); + fiat_p224_addcarryx_u32(&x62, &x63, x61, x46, 0x0); + fiat_p224_mulx_u32(&x64, &x65, x50, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x66, &x67, x64, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x68, &x69, x64, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x70, &x71, x64, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x72, &x73, x64, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x74, &x75, 0x0, x73, x70); + fiat_p224_addcarryx_u32(&x76, &x77, x75, x71, x68); + fiat_p224_addcarryx_u32(&x78, &x79, x77, x69, x66); + fiat_p224_addcarryx_u32(&x80, &x81, 0x0, x50, x64); + fiat_p224_addcarryx_u32(&x82, &x83, x81, x52, 0x0); + fiat_p224_addcarryx_u32(&x84, &x85, x83, x54, 0x0); + fiat_p224_addcarryx_u32(&x86, &x87, x85, x56, x72); + fiat_p224_addcarryx_u32(&x88, &x89, x87, x58, x74); + fiat_p224_addcarryx_u32(&x90, &x91, x89, x60, x76); + fiat_p224_addcarryx_u32(&x92, &x93, x91, x62, x78); + fiat_p224_addcarryx_u32(&x94, &x95, x93, ((uint32_t)x63 + x47), (x79 + x67)); + fiat_p224_addcarryx_u32(&x96, &x97, 0x0, x82, (arg1[3])); + fiat_p224_addcarryx_u32(&x98, &x99, x97, x84, 0x0); + fiat_p224_addcarryx_u32(&x100, &x101, x99, x86, 0x0); + fiat_p224_addcarryx_u32(&x102, &x103, x101, x88, 0x0); + fiat_p224_addcarryx_u32(&x104, &x105, x103, x90, 0x0); + fiat_p224_addcarryx_u32(&x106, &x107, x105, x92, 0x0); + fiat_p224_addcarryx_u32(&x108, &x109, x107, x94, 0x0); + fiat_p224_mulx_u32(&x110, &x111, x96, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x112, &x113, x110, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x114, &x115, x110, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x116, &x117, x110, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x118, &x119, x110, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x120, &x121, 0x0, x119, x116); + fiat_p224_addcarryx_u32(&x122, &x123, x121, x117, x114); + fiat_p224_addcarryx_u32(&x124, &x125, x123, x115, x112); + fiat_p224_addcarryx_u32(&x126, &x127, 0x0, x96, x110); + fiat_p224_addcarryx_u32(&x128, &x129, x127, x98, 0x0); + fiat_p224_addcarryx_u32(&x130, &x131, x129, x100, 0x0); + fiat_p224_addcarryx_u32(&x132, &x133, x131, x102, x118); + fiat_p224_addcarryx_u32(&x134, &x135, x133, x104, x120); + fiat_p224_addcarryx_u32(&x136, &x137, x135, x106, x122); + fiat_p224_addcarryx_u32(&x138, &x139, x137, x108, x124); + fiat_p224_addcarryx_u32(&x140, &x141, x139, ((uint32_t)x109 + x95), (x125 + x113)); + fiat_p224_addcarryx_u32(&x142, &x143, 0x0, x128, (arg1[4])); + fiat_p224_addcarryx_u32(&x144, &x145, x143, x130, 0x0); + fiat_p224_addcarryx_u32(&x146, &x147, x145, x132, 0x0); + fiat_p224_addcarryx_u32(&x148, &x149, x147, x134, 0x0); + fiat_p224_addcarryx_u32(&x150, &x151, x149, x136, 0x0); + fiat_p224_addcarryx_u32(&x152, &x153, x151, x138, 0x0); + fiat_p224_addcarryx_u32(&x154, &x155, x153, x140, 0x0); + fiat_p224_mulx_u32(&x156, &x157, x142, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x158, &x159, x156, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x160, &x161, x156, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x162, &x163, x156, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x164, &x165, x156, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x166, &x167, 0x0, x165, x162); + fiat_p224_addcarryx_u32(&x168, &x169, x167, x163, x160); + fiat_p224_addcarryx_u32(&x170, &x171, x169, x161, x158); + fiat_p224_addcarryx_u32(&x172, &x173, 0x0, x142, x156); + fiat_p224_addcarryx_u32(&x174, &x175, x173, x144, 0x0); + fiat_p224_addcarryx_u32(&x176, &x177, x175, x146, 0x0); + fiat_p224_addcarryx_u32(&x178, &x179, x177, x148, x164); + fiat_p224_addcarryx_u32(&x180, &x181, x179, x150, x166); + fiat_p224_addcarryx_u32(&x182, &x183, x181, x152, x168); + fiat_p224_addcarryx_u32(&x184, &x185, x183, x154, x170); + fiat_p224_addcarryx_u32(&x186, &x187, x185, ((uint32_t)x155 + x141), (x171 + x159)); + fiat_p224_addcarryx_u32(&x188, &x189, 0x0, x174, (arg1[5])); + fiat_p224_addcarryx_u32(&x190, &x191, x189, x176, 0x0); + fiat_p224_addcarryx_u32(&x192, &x193, x191, x178, 0x0); + fiat_p224_addcarryx_u32(&x194, &x195, x193, x180, 0x0); + fiat_p224_addcarryx_u32(&x196, &x197, x195, x182, 0x0); + fiat_p224_addcarryx_u32(&x198, &x199, x197, x184, 0x0); + fiat_p224_addcarryx_u32(&x200, &x201, x199, x186, 0x0); + fiat_p224_mulx_u32(&x202, &x203, x188, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x204, &x205, x202, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x206, &x207, x202, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x208, &x209, x202, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x210, &x211, x202, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x212, &x213, 0x0, x211, x208); + fiat_p224_addcarryx_u32(&x214, &x215, x213, x209, x206); + fiat_p224_addcarryx_u32(&x216, &x217, x215, x207, x204); + fiat_p224_addcarryx_u32(&x218, &x219, 0x0, x188, x202); + fiat_p224_addcarryx_u32(&x220, &x221, x219, x190, 0x0); + fiat_p224_addcarryx_u32(&x222, &x223, x221, x192, 0x0); + fiat_p224_addcarryx_u32(&x224, &x225, x223, x194, x210); + fiat_p224_addcarryx_u32(&x226, &x227, x225, x196, x212); + fiat_p224_addcarryx_u32(&x228, &x229, x227, x198, x214); + fiat_p224_addcarryx_u32(&x230, &x231, x229, x200, x216); + fiat_p224_addcarryx_u32(&x232, &x233, x231, ((uint32_t)x201 + x187), (x217 + x205)); + fiat_p224_addcarryx_u32(&x234, &x235, 0x0, x220, (arg1[6])); + fiat_p224_addcarryx_u32(&x236, &x237, x235, x222, 0x0); + fiat_p224_addcarryx_u32(&x238, &x239, x237, x224, 0x0); + fiat_p224_addcarryx_u32(&x240, &x241, x239, x226, 0x0); + fiat_p224_addcarryx_u32(&x242, &x243, x241, x228, 0x0); + fiat_p224_addcarryx_u32(&x244, &x245, x243, x230, 0x0); + fiat_p224_addcarryx_u32(&x246, &x247, x245, x232, 0x0); + fiat_p224_mulx_u32(&x248, &x249, x234, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x250, &x251, x248, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x252, &x253, x248, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x254, &x255, x248, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x256, &x257, x248, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x258, &x259, 0x0, x257, x254); + fiat_p224_addcarryx_u32(&x260, &x261, x259, x255, x252); + fiat_p224_addcarryx_u32(&x262, &x263, x261, x253, x250); + fiat_p224_addcarryx_u32(&x264, &x265, 0x0, x234, x248); + fiat_p224_addcarryx_u32(&x266, &x267, x265, x236, 0x0); + fiat_p224_addcarryx_u32(&x268, &x269, x267, x238, 0x0); + fiat_p224_addcarryx_u32(&x270, &x271, x269, x240, x256); + fiat_p224_addcarryx_u32(&x272, &x273, x271, x242, x258); + fiat_p224_addcarryx_u32(&x274, &x275, x273, x244, x260); + fiat_p224_addcarryx_u32(&x276, &x277, x275, x246, x262); + fiat_p224_addcarryx_u32(&x278, &x279, x277, ((uint32_t)x247 + x233), (x263 + x251)); + fiat_p224_subborrowx_u32(&x280, &x281, 0x0, x266, 0x1); + fiat_p224_subborrowx_u32(&x282, &x283, x281, x268, 0x0); + fiat_p224_subborrowx_u32(&x284, &x285, x283, x270, 0x0); + fiat_p224_subborrowx_u32(&x286, &x287, x285, x272, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x288, &x289, x287, x274, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x290, &x291, x289, x276, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x292, &x293, x291, x278, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x294, &x295, x293, x279, 0x0); + fiat_p224_cmovznz_u32(&x296, x295, x280, x266); + fiat_p224_cmovznz_u32(&x297, x295, x282, x268); + fiat_p224_cmovznz_u32(&x298, x295, x284, x270); + fiat_p224_cmovznz_u32(&x299, x295, x286, x272); + fiat_p224_cmovznz_u32(&x300, x295, x288, x274); + fiat_p224_cmovznz_u32(&x301, x295, x290, x276); + fiat_p224_cmovznz_u32(&x302, x295, x292, x278); + out1[0] = x296; + out1[1] = x297; + out1[2] = x298; + out1[3] = x299; + out1[4] = x300; + out1[5] = x301; + out1[6] = x302; +} + +/* + * The function fiat_p224_to_montgomery translates a field element into the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p224_to_montgomery(uint32_t out1[7], const uint32_t arg1[7]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + fiat_p224_uint1 x15; + uint32_t x16; + fiat_p224_uint1 x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint32_t x28; + fiat_p224_uint1 x29; + uint32_t x30; + fiat_p224_uint1 x31; + uint32_t x32; + fiat_p224_uint1 x33; + uint32_t x34; + fiat_p224_uint1 x35; + uint32_t x36; + fiat_p224_uint1 x37; + uint32_t x38; + fiat_p224_uint1 x39; + uint32_t x40; + fiat_p224_uint1 x41; + uint32_t x42; + fiat_p224_uint1 x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + fiat_p224_uint1 x51; + uint32_t x52; + fiat_p224_uint1 x53; + uint32_t x54; + fiat_p224_uint1 x55; + uint32_t x56; + fiat_p224_uint1 x57; + uint32_t x58; + fiat_p224_uint1 x59; + uint32_t x60; + fiat_p224_uint1 x61; + uint32_t x62; + fiat_p224_uint1 x63; + uint32_t x64; + fiat_p224_uint1 x65; + uint32_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + fiat_p224_uint1 x77; + uint32_t x78; + fiat_p224_uint1 x79; + uint32_t x80; + fiat_p224_uint1 x81; + uint32_t x82; + fiat_p224_uint1 x83; + uint32_t x84; + fiat_p224_uint1 x85; + uint32_t x86; + fiat_p224_uint1 x87; + uint32_t x88; + fiat_p224_uint1 x89; + uint32_t x90; + fiat_p224_uint1 x91; + uint32_t x92; + uint32_t x93; + uint32_t x94; + uint32_t x95; + uint32_t x96; + uint32_t x97; + uint32_t x98; + fiat_p224_uint1 x99; + uint32_t x100; + fiat_p224_uint1 x101; + uint32_t x102; + fiat_p224_uint1 x103; + uint32_t x104; + fiat_p224_uint1 x105; + uint32_t x106; + fiat_p224_uint1 x107; + uint32_t x108; + fiat_p224_uint1 x109; + uint32_t x110; + fiat_p224_uint1 x111; + uint32_t x112; + fiat_p224_uint1 x113; + uint32_t x114; + fiat_p224_uint1 x115; + uint32_t x116; + fiat_p224_uint1 x117; + uint32_t x118; + uint32_t x119; + uint32_t x120; + uint32_t x121; + uint32_t x122; + uint32_t x123; + uint32_t x124; + uint32_t x125; + uint32_t x126; + uint32_t x127; + uint32_t x128; + fiat_p224_uint1 x129; + uint32_t x130; + fiat_p224_uint1 x131; + uint32_t x132; + fiat_p224_uint1 x133; + uint32_t x134; + fiat_p224_uint1 x135; + uint32_t x136; + fiat_p224_uint1 x137; + uint32_t x138; + fiat_p224_uint1 x139; + uint32_t x140; + fiat_p224_uint1 x141; + uint32_t x142; + fiat_p224_uint1 x143; + uint32_t x144; + fiat_p224_uint1 x145; + uint32_t x146; + fiat_p224_uint1 x147; + uint32_t x148; + fiat_p224_uint1 x149; + uint32_t x150; + uint32_t x151; + uint32_t x152; + uint32_t x153; + uint32_t x154; + uint32_t x155; + uint32_t x156; + fiat_p224_uint1 x157; + uint32_t x158; + fiat_p224_uint1 x159; + uint32_t x160; + fiat_p224_uint1 x161; + uint32_t x162; + fiat_p224_uint1 x163; + uint32_t x164; + fiat_p224_uint1 x165; + uint32_t x166; + fiat_p224_uint1 x167; + uint32_t x168; + fiat_p224_uint1 x169; + uint32_t x170; + fiat_p224_uint1 x171; + uint32_t x172; + fiat_p224_uint1 x173; + uint32_t x174; + uint32_t x175; + uint32_t x176; + uint32_t x177; + uint32_t x178; + uint32_t x179; + uint32_t x180; + uint32_t x181; + uint32_t x182; + uint32_t x183; + uint32_t x184; + fiat_p224_uint1 x185; + uint32_t x186; + fiat_p224_uint1 x187; + uint32_t x188; + fiat_p224_uint1 x189; + uint32_t x190; + fiat_p224_uint1 x191; + uint32_t x192; + fiat_p224_uint1 x193; + uint32_t x194; + fiat_p224_uint1 x195; + uint32_t x196; + fiat_p224_uint1 x197; + uint32_t x198; + fiat_p224_uint1 x199; + uint32_t x200; + fiat_p224_uint1 x201; + uint32_t x202; + fiat_p224_uint1 x203; + uint32_t x204; + fiat_p224_uint1 x205; + uint32_t x206; + uint32_t x207; + uint32_t x208; + uint32_t x209; + uint32_t x210; + uint32_t x211; + uint32_t x212; + fiat_p224_uint1 x213; + uint32_t x214; + fiat_p224_uint1 x215; + uint32_t x216; + fiat_p224_uint1 x217; + uint32_t x218; + fiat_p224_uint1 x219; + uint32_t x220; + fiat_p224_uint1 x221; + uint32_t x222; + fiat_p224_uint1 x223; + uint32_t x224; + fiat_p224_uint1 x225; + uint32_t x226; + fiat_p224_uint1 x227; + uint32_t x228; + fiat_p224_uint1 x229; + uint32_t x230; + uint32_t x231; + uint32_t x232; + uint32_t x233; + uint32_t x234; + uint32_t x235; + uint32_t x236; + uint32_t x237; + uint32_t x238; + uint32_t x239; + uint32_t x240; + fiat_p224_uint1 x241; + uint32_t x242; + fiat_p224_uint1 x243; + uint32_t x244; + fiat_p224_uint1 x245; + uint32_t x246; + fiat_p224_uint1 x247; + uint32_t x248; + fiat_p224_uint1 x249; + uint32_t x250; + fiat_p224_uint1 x251; + uint32_t x252; + fiat_p224_uint1 x253; + uint32_t x254; + fiat_p224_uint1 x255; + uint32_t x256; + fiat_p224_uint1 x257; + uint32_t x258; + fiat_p224_uint1 x259; + uint32_t x260; + fiat_p224_uint1 x261; + uint32_t x262; + uint32_t x263; + uint32_t x264; + uint32_t x265; + uint32_t x266; + uint32_t x267; + uint32_t x268; + fiat_p224_uint1 x269; + uint32_t x270; + fiat_p224_uint1 x271; + uint32_t x272; + fiat_p224_uint1 x273; + uint32_t x274; + fiat_p224_uint1 x275; + uint32_t x276; + fiat_p224_uint1 x277; + uint32_t x278; + fiat_p224_uint1 x279; + uint32_t x280; + fiat_p224_uint1 x281; + uint32_t x282; + fiat_p224_uint1 x283; + uint32_t x284; + fiat_p224_uint1 x285; + uint32_t x286; + uint32_t x287; + uint32_t x288; + uint32_t x289; + uint32_t x290; + uint32_t x291; + uint32_t x292; + uint32_t x293; + uint32_t x294; + uint32_t x295; + uint32_t x296; + fiat_p224_uint1 x297; + uint32_t x298; + fiat_p224_uint1 x299; + uint32_t x300; + fiat_p224_uint1 x301; + uint32_t x302; + fiat_p224_uint1 x303; + uint32_t x304; + fiat_p224_uint1 x305; + uint32_t x306; + fiat_p224_uint1 x307; + uint32_t x308; + fiat_p224_uint1 x309; + uint32_t x310; + fiat_p224_uint1 x311; + uint32_t x312; + fiat_p224_uint1 x313; + uint32_t x314; + fiat_p224_uint1 x315; + uint32_t x316; + fiat_p224_uint1 x317; + uint32_t x318; + uint32_t x319; + uint32_t x320; + uint32_t x321; + uint32_t x322; + uint32_t x323; + uint32_t x324; + fiat_p224_uint1 x325; + uint32_t x326; + fiat_p224_uint1 x327; + uint32_t x328; + fiat_p224_uint1 x329; + uint32_t x330; + fiat_p224_uint1 x331; + uint32_t x332; + fiat_p224_uint1 x333; + uint32_t x334; + fiat_p224_uint1 x335; + uint32_t x336; + fiat_p224_uint1 x337; + uint32_t x338; + fiat_p224_uint1 x339; + uint32_t x340; + fiat_p224_uint1 x341; + uint32_t x342; + uint32_t x343; + uint32_t x344; + uint32_t x345; + uint32_t x346; + uint32_t x347; + uint32_t x348; + uint32_t x349; + uint32_t x350; + uint32_t x351; + uint32_t x352; + fiat_p224_uint1 x353; + uint32_t x354; + fiat_p224_uint1 x355; + uint32_t x356; + fiat_p224_uint1 x357; + uint32_t x358; + fiat_p224_uint1 x359; + uint32_t x360; + fiat_p224_uint1 x361; + uint32_t x362; + fiat_p224_uint1 x363; + uint32_t x364; + fiat_p224_uint1 x365; + uint32_t x366; + fiat_p224_uint1 x367; + uint32_t x368; + fiat_p224_uint1 x369; + uint32_t x370; + fiat_p224_uint1 x371; + uint32_t x372; + fiat_p224_uint1 x373; + uint32_t x374; + fiat_p224_uint1 x375; + uint32_t x376; + fiat_p224_uint1 x377; + uint32_t x378; + fiat_p224_uint1 x379; + uint32_t x380; + fiat_p224_uint1 x381; + uint32_t x382; + fiat_p224_uint1 x383; + uint32_t x384; + fiat_p224_uint1 x385; + uint32_t x386; + fiat_p224_uint1 x387; + uint32_t x388; + fiat_p224_uint1 x389; + uint32_t x390; + uint32_t x391; + uint32_t x392; + uint32_t x393; + uint32_t x394; + uint32_t x395; + uint32_t x396; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[0]); + fiat_p224_mulx_u32(&x8, &x9, x7, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x10, &x11, x7, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x12, &x13, x7, UINT32_C(0xfffffffe)); + fiat_p224_addcarryx_u32(&x14, &x15, 0x0, x13, x10); + fiat_p224_addcarryx_u32(&x16, &x17, x15, x11, x8); + fiat_p224_mulx_u32(&x18, &x19, x7, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x20, &x21, x18, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x22, &x23, x18, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x24, &x25, x18, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x26, &x27, x18, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x28, &x29, 0x0, x27, x24); + fiat_p224_addcarryx_u32(&x30, &x31, x29, x25, x22); + fiat_p224_addcarryx_u32(&x32, &x33, x31, x23, x20); + fiat_p224_addcarryx_u32(&x34, &x35, 0x0, x12, x26); + fiat_p224_addcarryx_u32(&x36, &x37, x35, x14, x28); + fiat_p224_addcarryx_u32(&x38, &x39, x37, x16, x30); + fiat_p224_addcarryx_u32(&x40, &x41, x39, (x17 + x9), x32); + fiat_p224_addcarryx_u32(&x42, &x43, x41, 0x0, (x33 + x21)); + fiat_p224_mulx_u32(&x44, &x45, x1, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x46, &x47, x1, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x48, &x49, x1, UINT32_C(0xfffffffe)); + fiat_p224_addcarryx_u32(&x50, &x51, 0x0, x49, x46); + fiat_p224_addcarryx_u32(&x52, &x53, x51, x47, x44); + fiat_p224_addcarryx_u32(&x54, &x55, 0x0, x7, x18); + fiat_p224_addcarryx_u32(&x56, &x57, 0x0, x55, x1); + fiat_p224_addcarryx_u32(&x58, &x59, 0x0, x36, x48); + fiat_p224_addcarryx_u32(&x60, &x61, x59, x38, x50); + fiat_p224_addcarryx_u32(&x62, &x63, x61, x40, x52); + fiat_p224_addcarryx_u32(&x64, &x65, x63, x42, (x53 + x45)); + fiat_p224_mulx_u32(&x66, &x67, x56, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x68, &x69, x66, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x70, &x71, x66, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x72, &x73, x66, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x74, &x75, x66, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x76, &x77, 0x0, x75, x72); + fiat_p224_addcarryx_u32(&x78, &x79, x77, x73, x70); + fiat_p224_addcarryx_u32(&x80, &x81, x79, x71, x68); + fiat_p224_addcarryx_u32(&x82, &x83, 0x0, x58, x74); + fiat_p224_addcarryx_u32(&x84, &x85, x83, x60, x76); + fiat_p224_addcarryx_u32(&x86, &x87, x85, x62, x78); + fiat_p224_addcarryx_u32(&x88, &x89, x87, x64, x80); + fiat_p224_addcarryx_u32(&x90, &x91, x89, ((uint32_t)x65 + x43), (x81 + x69)); + fiat_p224_mulx_u32(&x92, &x93, x2, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x94, &x95, x2, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x96, &x97, x2, UINT32_C(0xfffffffe)); + fiat_p224_addcarryx_u32(&x98, &x99, 0x0, x97, x94); + fiat_p224_addcarryx_u32(&x100, &x101, x99, x95, x92); + fiat_p224_addcarryx_u32(&x102, &x103, 0x0, x56, x66); + fiat_p224_addcarryx_u32(&x104, &x105, 0x0, ((uint32_t)x103 + x57), x2); + fiat_p224_addcarryx_u32(&x106, &x107, x105, x34, 0x0); + fiat_p224_addcarryx_u32(&x108, &x109, x107, x82, 0x0); + fiat_p224_addcarryx_u32(&x110, &x111, x109, x84, x96); + fiat_p224_addcarryx_u32(&x112, &x113, x111, x86, x98); + fiat_p224_addcarryx_u32(&x114, &x115, x113, x88, x100); + fiat_p224_addcarryx_u32(&x116, &x117, x115, x90, (x101 + x93)); + fiat_p224_mulx_u32(&x118, &x119, x104, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x120, &x121, x118, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x122, &x123, x118, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x124, &x125, x118, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x126, &x127, x118, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x128, &x129, 0x0, x127, x124); + fiat_p224_addcarryx_u32(&x130, &x131, x129, x125, x122); + fiat_p224_addcarryx_u32(&x132, &x133, x131, x123, x120); + fiat_p224_addcarryx_u32(&x134, &x135, 0x0, x104, x118); + fiat_p224_addcarryx_u32(&x136, &x137, x135, x106, 0x0); + fiat_p224_addcarryx_u32(&x138, &x139, x137, x108, 0x0); + fiat_p224_addcarryx_u32(&x140, &x141, x139, x110, x126); + fiat_p224_addcarryx_u32(&x142, &x143, x141, x112, x128); + fiat_p224_addcarryx_u32(&x144, &x145, x143, x114, x130); + fiat_p224_addcarryx_u32(&x146, &x147, x145, x116, x132); + fiat_p224_addcarryx_u32(&x148, &x149, x147, ((uint32_t)x117 + x91), (x133 + x121)); + fiat_p224_mulx_u32(&x150, &x151, x3, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x152, &x153, x3, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x154, &x155, x3, UINT32_C(0xfffffffe)); + fiat_p224_addcarryx_u32(&x156, &x157, 0x0, x155, x152); + fiat_p224_addcarryx_u32(&x158, &x159, x157, x153, x150); + fiat_p224_addcarryx_u32(&x160, &x161, 0x0, x136, x3); + fiat_p224_addcarryx_u32(&x162, &x163, x161, x138, 0x0); + fiat_p224_addcarryx_u32(&x164, &x165, x163, x140, 0x0); + fiat_p224_addcarryx_u32(&x166, &x167, x165, x142, x154); + fiat_p224_addcarryx_u32(&x168, &x169, x167, x144, x156); + fiat_p224_addcarryx_u32(&x170, &x171, x169, x146, x158); + fiat_p224_addcarryx_u32(&x172, &x173, x171, x148, (x159 + x151)); + fiat_p224_mulx_u32(&x174, &x175, x160, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x176, &x177, x174, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x178, &x179, x174, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x180, &x181, x174, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x182, &x183, x174, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x184, &x185, 0x0, x183, x180); + fiat_p224_addcarryx_u32(&x186, &x187, x185, x181, x178); + fiat_p224_addcarryx_u32(&x188, &x189, x187, x179, x176); + fiat_p224_addcarryx_u32(&x190, &x191, 0x0, x160, x174); + fiat_p224_addcarryx_u32(&x192, &x193, x191, x162, 0x0); + fiat_p224_addcarryx_u32(&x194, &x195, x193, x164, 0x0); + fiat_p224_addcarryx_u32(&x196, &x197, x195, x166, x182); + fiat_p224_addcarryx_u32(&x198, &x199, x197, x168, x184); + fiat_p224_addcarryx_u32(&x200, &x201, x199, x170, x186); + fiat_p224_addcarryx_u32(&x202, &x203, x201, x172, x188); + fiat_p224_addcarryx_u32(&x204, &x205, x203, ((uint32_t)x173 + x149), (x189 + x177)); + fiat_p224_mulx_u32(&x206, &x207, x4, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x208, &x209, x4, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x210, &x211, x4, UINT32_C(0xfffffffe)); + fiat_p224_addcarryx_u32(&x212, &x213, 0x0, x211, x208); + fiat_p224_addcarryx_u32(&x214, &x215, x213, x209, x206); + fiat_p224_addcarryx_u32(&x216, &x217, 0x0, x192, x4); + fiat_p224_addcarryx_u32(&x218, &x219, x217, x194, 0x0); + fiat_p224_addcarryx_u32(&x220, &x221, x219, x196, 0x0); + fiat_p224_addcarryx_u32(&x222, &x223, x221, x198, x210); + fiat_p224_addcarryx_u32(&x224, &x225, x223, x200, x212); + fiat_p224_addcarryx_u32(&x226, &x227, x225, x202, x214); + fiat_p224_addcarryx_u32(&x228, &x229, x227, x204, (x215 + x207)); + fiat_p224_mulx_u32(&x230, &x231, x216, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x232, &x233, x230, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x234, &x235, x230, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x236, &x237, x230, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x238, &x239, x230, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x240, &x241, 0x0, x239, x236); + fiat_p224_addcarryx_u32(&x242, &x243, x241, x237, x234); + fiat_p224_addcarryx_u32(&x244, &x245, x243, x235, x232); + fiat_p224_addcarryx_u32(&x246, &x247, 0x0, x216, x230); + fiat_p224_addcarryx_u32(&x248, &x249, x247, x218, 0x0); + fiat_p224_addcarryx_u32(&x250, &x251, x249, x220, 0x0); + fiat_p224_addcarryx_u32(&x252, &x253, x251, x222, x238); + fiat_p224_addcarryx_u32(&x254, &x255, x253, x224, x240); + fiat_p224_addcarryx_u32(&x256, &x257, x255, x226, x242); + fiat_p224_addcarryx_u32(&x258, &x259, x257, x228, x244); + fiat_p224_addcarryx_u32(&x260, &x261, x259, ((uint32_t)x229 + x205), (x245 + x233)); + fiat_p224_mulx_u32(&x262, &x263, x5, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x264, &x265, x5, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x266, &x267, x5, UINT32_C(0xfffffffe)); + fiat_p224_addcarryx_u32(&x268, &x269, 0x0, x267, x264); + fiat_p224_addcarryx_u32(&x270, &x271, x269, x265, x262); + fiat_p224_addcarryx_u32(&x272, &x273, 0x0, x248, x5); + fiat_p224_addcarryx_u32(&x274, &x275, x273, x250, 0x0); + fiat_p224_addcarryx_u32(&x276, &x277, x275, x252, 0x0); + fiat_p224_addcarryx_u32(&x278, &x279, x277, x254, x266); + fiat_p224_addcarryx_u32(&x280, &x281, x279, x256, x268); + fiat_p224_addcarryx_u32(&x282, &x283, x281, x258, x270); + fiat_p224_addcarryx_u32(&x284, &x285, x283, x260, (x271 + x263)); + fiat_p224_mulx_u32(&x286, &x287, x272, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x288, &x289, x286, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x290, &x291, x286, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x292, &x293, x286, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x294, &x295, x286, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x296, &x297, 0x0, x295, x292); + fiat_p224_addcarryx_u32(&x298, &x299, x297, x293, x290); + fiat_p224_addcarryx_u32(&x300, &x301, x299, x291, x288); + fiat_p224_addcarryx_u32(&x302, &x303, 0x0, x272, x286); + fiat_p224_addcarryx_u32(&x304, &x305, x303, x274, 0x0); + fiat_p224_addcarryx_u32(&x306, &x307, x305, x276, 0x0); + fiat_p224_addcarryx_u32(&x308, &x309, x307, x278, x294); + fiat_p224_addcarryx_u32(&x310, &x311, x309, x280, x296); + fiat_p224_addcarryx_u32(&x312, &x313, x311, x282, x298); + fiat_p224_addcarryx_u32(&x314, &x315, x313, x284, x300); + fiat_p224_addcarryx_u32(&x316, &x317, x315, ((uint32_t)x285 + x261), (x301 + x289)); + fiat_p224_mulx_u32(&x318, &x319, x6, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x320, &x321, x6, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x322, &x323, x6, UINT32_C(0xfffffffe)); + fiat_p224_addcarryx_u32(&x324, &x325, 0x0, x323, x320); + fiat_p224_addcarryx_u32(&x326, &x327, x325, x321, x318); + fiat_p224_addcarryx_u32(&x328, &x329, 0x0, x304, x6); + fiat_p224_addcarryx_u32(&x330, &x331, x329, x306, 0x0); + fiat_p224_addcarryx_u32(&x332, &x333, x331, x308, 0x0); + fiat_p224_addcarryx_u32(&x334, &x335, x333, x310, x322); + fiat_p224_addcarryx_u32(&x336, &x337, x335, x312, x324); + fiat_p224_addcarryx_u32(&x338, &x339, x337, x314, x326); + fiat_p224_addcarryx_u32(&x340, &x341, x339, x316, (x327 + x319)); + fiat_p224_mulx_u32(&x342, &x343, x328, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x344, &x345, x342, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x346, &x347, x342, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x348, &x349, x342, UINT32_C(0xffffffff)); + fiat_p224_mulx_u32(&x350, &x351, x342, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x352, &x353, 0x0, x351, x348); + fiat_p224_addcarryx_u32(&x354, &x355, x353, x349, x346); + fiat_p224_addcarryx_u32(&x356, &x357, x355, x347, x344); + fiat_p224_addcarryx_u32(&x358, &x359, 0x0, x328, x342); + fiat_p224_addcarryx_u32(&x360, &x361, x359, x330, 0x0); + fiat_p224_addcarryx_u32(&x362, &x363, x361, x332, 0x0); + fiat_p224_addcarryx_u32(&x364, &x365, x363, x334, x350); + fiat_p224_addcarryx_u32(&x366, &x367, x365, x336, x352); + fiat_p224_addcarryx_u32(&x368, &x369, x367, x338, x354); + fiat_p224_addcarryx_u32(&x370, &x371, x369, x340, x356); + fiat_p224_addcarryx_u32(&x372, &x373, x371, ((uint32_t)x341 + x317), (x357 + x345)); + fiat_p224_subborrowx_u32(&x374, &x375, 0x0, x360, 0x1); + fiat_p224_subborrowx_u32(&x376, &x377, x375, x362, 0x0); + fiat_p224_subborrowx_u32(&x378, &x379, x377, x364, 0x0); + fiat_p224_subborrowx_u32(&x380, &x381, x379, x366, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x382, &x383, x381, x368, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x384, &x385, x383, x370, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x386, &x387, x385, x372, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x388, &x389, x387, x373, 0x0); + fiat_p224_cmovznz_u32(&x390, x389, x374, x360); + fiat_p224_cmovznz_u32(&x391, x389, x376, x362); + fiat_p224_cmovznz_u32(&x392, x389, x378, x364); + fiat_p224_cmovznz_u32(&x393, x389, x380, x366); + fiat_p224_cmovznz_u32(&x394, x389, x382, x368); + fiat_p224_cmovznz_u32(&x395, x389, x384, x370); + fiat_p224_cmovznz_u32(&x396, x389, x386, x372); + out1[0] = x390; + out1[1] = x391; + out1[2] = x392; + out1[3] = x393; + out1[4] = x394; + out1[5] = x395; + out1[6] = x396; +} + +/* + * The function fiat_p224_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static void fiat_p224_nonzero(uint32_t* out1, const uint32_t arg1[7]) { + uint32_t x1; + x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | ((arg1[4]) | ((arg1[5]) | (arg1[6]))))))); + *out1 = x1; +} + +/* + * The function fiat_p224_selectznz is a multi-limb conditional select. + * Postconditions: + * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p224_selectznz(uint32_t out1[7], fiat_p224_uint1 arg1, const uint32_t arg2[7], const uint32_t arg3[7]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + fiat_p224_cmovznz_u32(&x1, arg1, (arg2[0]), (arg3[0])); + fiat_p224_cmovznz_u32(&x2, arg1, (arg2[1]), (arg3[1])); + fiat_p224_cmovznz_u32(&x3, arg1, (arg2[2]), (arg3[2])); + fiat_p224_cmovznz_u32(&x4, arg1, (arg2[3]), (arg3[3])); + fiat_p224_cmovznz_u32(&x5, arg1, (arg2[4]), (arg3[4])); + fiat_p224_cmovznz_u32(&x6, arg1, (arg2[5]), (arg3[5])); + fiat_p224_cmovznz_u32(&x7, arg1, (arg2[6]), (arg3[6])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; + out1[6] = x7; +} + +/* + * The function fiat_p224_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..27] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + */ +static void fiat_p224_to_bytes(uint8_t out1[28], const uint32_t arg1[7]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint8_t x8; + uint32_t x9; + uint8_t x10; + uint32_t x11; + uint8_t x12; + uint8_t x13; + uint8_t x14; + uint32_t x15; + uint8_t x16; + uint32_t x17; + uint8_t x18; + uint8_t x19; + uint8_t x20; + uint32_t x21; + uint8_t x22; + uint32_t x23; + uint8_t x24; + uint8_t x25; + uint8_t x26; + uint32_t x27; + uint8_t x28; + uint32_t x29; + uint8_t x30; + uint8_t x31; + uint8_t x32; + uint32_t x33; + uint8_t x34; + uint32_t x35; + uint8_t x36; + uint8_t x37; + uint8_t x38; + uint32_t x39; + uint8_t x40; + uint32_t x41; + uint8_t x42; + uint8_t x43; + uint8_t x44; + uint32_t x45; + uint8_t x46; + uint32_t x47; + uint8_t x48; + uint8_t x49; + x1 = (arg1[6]); + x2 = (arg1[5]); + x3 = (arg1[4]); + x4 = (arg1[3]); + x5 = (arg1[2]); + x6 = (arg1[1]); + x7 = (arg1[0]); + x8 = (uint8_t)(x7 & UINT8_C(0xff)); + x9 = (x7 >> 8); + x10 = (uint8_t)(x9 & UINT8_C(0xff)); + x11 = (x9 >> 8); + x12 = (uint8_t)(x11 & UINT8_C(0xff)); + x13 = (uint8_t)(x11 >> 8); + x14 = (uint8_t)(x6 & UINT8_C(0xff)); + x15 = (x6 >> 8); + x16 = (uint8_t)(x15 & UINT8_C(0xff)); + x17 = (x15 >> 8); + x18 = (uint8_t)(x17 & UINT8_C(0xff)); + x19 = (uint8_t)(x17 >> 8); + x20 = (uint8_t)(x5 & UINT8_C(0xff)); + x21 = (x5 >> 8); + x22 = (uint8_t)(x21 & UINT8_C(0xff)); + x23 = (x21 >> 8); + x24 = (uint8_t)(x23 & UINT8_C(0xff)); + x25 = (uint8_t)(x23 >> 8); + x26 = (uint8_t)(x4 & UINT8_C(0xff)); + x27 = (x4 >> 8); + x28 = (uint8_t)(x27 & UINT8_C(0xff)); + x29 = (x27 >> 8); + x30 = (uint8_t)(x29 & UINT8_C(0xff)); + x31 = (uint8_t)(x29 >> 8); + x32 = (uint8_t)(x3 & UINT8_C(0xff)); + x33 = (x3 >> 8); + x34 = (uint8_t)(x33 & UINT8_C(0xff)); + x35 = (x33 >> 8); + x36 = (uint8_t)(x35 & UINT8_C(0xff)); + x37 = (uint8_t)(x35 >> 8); + x38 = (uint8_t)(x2 & UINT8_C(0xff)); + x39 = (x2 >> 8); + x40 = (uint8_t)(x39 & UINT8_C(0xff)); + x41 = (x39 >> 8); + x42 = (uint8_t)(x41 & UINT8_C(0xff)); + x43 = (uint8_t)(x41 >> 8); + x44 = (uint8_t)(x1 & UINT8_C(0xff)); + x45 = (x1 >> 8); + x46 = (uint8_t)(x45 & UINT8_C(0xff)); + x47 = (x45 >> 8); + x48 = (uint8_t)(x47 & UINT8_C(0xff)); + x49 = (uint8_t)(x47 >> 8); + out1[0] = x8; + out1[1] = x10; + out1[2] = x12; + out1[3] = x13; + out1[4] = x14; + out1[5] = x16; + out1[6] = x18; + out1[7] = x19; + out1[8] = x20; + out1[9] = x22; + out1[10] = x24; + out1[11] = x25; + out1[12] = x26; + out1[13] = x28; + out1[14] = x30; + out1[15] = x31; + out1[16] = x32; + out1[17] = x34; + out1[18] = x36; + out1[19] = x37; + out1[20] = x38; + out1[21] = x40; + out1[22] = x42; + out1[23] = x43; + out1[24] = x44; + out1[25] = x46; + out1[26] = x48; + out1[27] = x49; +} + +/* + * The function fiat_p224_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p224_from_bytes(uint32_t out1[7], const uint8_t arg1[28]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint8_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint8_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint8_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint8_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint8_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint8_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint8_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + x1 = ((uint32_t)(arg1[27]) << 24); + x2 = ((uint32_t)(arg1[26]) << 16); + x3 = ((uint32_t)(arg1[25]) << 8); + x4 = (arg1[24]); + x5 = ((uint32_t)(arg1[23]) << 24); + x6 = ((uint32_t)(arg1[22]) << 16); + x7 = ((uint32_t)(arg1[21]) << 8); + x8 = (arg1[20]); + x9 = ((uint32_t)(arg1[19]) << 24); + x10 = ((uint32_t)(arg1[18]) << 16); + x11 = ((uint32_t)(arg1[17]) << 8); + x12 = (arg1[16]); + x13 = ((uint32_t)(arg1[15]) << 24); + x14 = ((uint32_t)(arg1[14]) << 16); + x15 = ((uint32_t)(arg1[13]) << 8); + x16 = (arg1[12]); + x17 = ((uint32_t)(arg1[11]) << 24); + x18 = ((uint32_t)(arg1[10]) << 16); + x19 = ((uint32_t)(arg1[9]) << 8); + x20 = (arg1[8]); + x21 = ((uint32_t)(arg1[7]) << 24); + x22 = ((uint32_t)(arg1[6]) << 16); + x23 = ((uint32_t)(arg1[5]) << 8); + x24 = (arg1[4]); + x25 = ((uint32_t)(arg1[3]) << 24); + x26 = ((uint32_t)(arg1[2]) << 16); + x27 = ((uint32_t)(arg1[1]) << 8); + x28 = (arg1[0]); + x29 = (x27 + (uint32_t)x28); + x30 = (x26 + x29); + x31 = (x25 + x30); + x32 = (x23 + (uint32_t)x24); + x33 = (x22 + x32); + x34 = (x21 + x33); + x35 = (x19 + (uint32_t)x20); + x36 = (x18 + x35); + x37 = (x17 + x36); + x38 = (x15 + (uint32_t)x16); + x39 = (x14 + x38); + x40 = (x13 + x39); + x41 = (x11 + (uint32_t)x12); + x42 = (x10 + x41); + x43 = (x9 + x42); + x44 = (x7 + (uint32_t)x8); + x45 = (x6 + x44); + x46 = (x5 + x45); + x47 = (x3 + (uint32_t)x4); + x48 = (x2 + x47); + x49 = (x1 + x48); + out1[0] = x31; + out1[1] = x34; + out1[2] = x37; + out1[3] = x40; + out1[4] = x43; + out1[5] = x46; + out1[6] = x49; +} + +/* + * The function fiat_p224_set_one returns the field element one in the Montgomery domain. + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p224_set_one(uint32_t out1[7]) { + out1[0] = UINT32_C(0xffffffff); + out1[1] = UINT32_C(0xffffffff); + out1[2] = UINT32_C(0xffffffff); + out1[3] = 0x0; + out1[4] = 0x0; + out1[5] = 0x0; + out1[6] = 0x0; +} + +/* + * The function fiat_p224_msat returns the saturated represtation of the prime modulus. + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p224_msat(uint32_t out1[8]) { + out1[0] = 0x1; + out1[1] = 0x0; + out1[2] = 0x0; + out1[3] = UINT32_C(0xffffffff); + out1[4] = UINT32_C(0xffffffff); + out1[5] = UINT32_C(0xffffffff); + out1[6] = UINT32_C(0xffffffff); + out1[7] = 0x0; +} + +/* + * The function fiat_p224_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if (log2 m) + 1 < 46 then ⌊(49 * ((log2 m) + 1) + 80) / 17⌋ else ⌊(49 * ((log2 m) + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p224_divstep_precomp(uint32_t out1[7]) { + out1[0] = UINT32_C(0x800000); + out1[1] = UINT32_C(0x800000); + out1[2] = UINT32_C(0xfe000000); + out1[3] = UINT32_C(0xffffff); + out1[4] = 0x0; + out1[5] = UINT32_C(0xff800000); + out1[6] = UINT32_C(0x17fffff); +} + +/* + * The function fiat_p224_divstep computes a divstep. + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg4: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg5: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out4: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out5: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p224_divstep(uint32_t* out1, uint32_t out2[8], uint32_t out3[8], uint32_t out4[7], uint32_t out5[7], uint32_t arg1, const uint32_t arg2[8], const uint32_t arg3[8], const uint32_t arg4[7], const uint32_t arg5[7]) { + uint32_t x1; + fiat_p224_uint1 x2; + fiat_p224_uint1 x3; + uint32_t x4; + fiat_p224_uint1 x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + fiat_p224_uint1 x16; + uint32_t x17; + fiat_p224_uint1 x18; + uint32_t x19; + fiat_p224_uint1 x20; + uint32_t x21; + fiat_p224_uint1 x22; + uint32_t x23; + fiat_p224_uint1 x24; + uint32_t x25; + fiat_p224_uint1 x26; + uint32_t x27; + fiat_p224_uint1 x28; + uint32_t x29; + fiat_p224_uint1 x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + fiat_p224_uint1 x47; + uint32_t x48; + fiat_p224_uint1 x49; + uint32_t x50; + fiat_p224_uint1 x51; + uint32_t x52; + fiat_p224_uint1 x53; + uint32_t x54; + fiat_p224_uint1 x55; + uint32_t x56; + fiat_p224_uint1 x57; + uint32_t x58; + fiat_p224_uint1 x59; + uint32_t x60; + fiat_p224_uint1 x61; + uint32_t x62; + fiat_p224_uint1 x63; + uint32_t x64; + fiat_p224_uint1 x65; + uint32_t x66; + fiat_p224_uint1 x67; + uint32_t x68; + fiat_p224_uint1 x69; + uint32_t x70; + fiat_p224_uint1 x71; + uint32_t x72; + fiat_p224_uint1 x73; + uint32_t x74; + fiat_p224_uint1 x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + uint32_t x81; + uint32_t x82; + uint32_t x83; + fiat_p224_uint1 x84; + uint32_t x85; + fiat_p224_uint1 x86; + uint32_t x87; + fiat_p224_uint1 x88; + uint32_t x89; + fiat_p224_uint1 x90; + uint32_t x91; + fiat_p224_uint1 x92; + uint32_t x93; + fiat_p224_uint1 x94; + uint32_t x95; + fiat_p224_uint1 x96; + uint32_t x97; + uint32_t x98; + fiat_p224_uint1 x99; + uint32_t x100; + fiat_p224_uint1 x101; + uint32_t x102; + fiat_p224_uint1 x103; + uint32_t x104; + fiat_p224_uint1 x105; + uint32_t x106; + fiat_p224_uint1 x107; + uint32_t x108; + fiat_p224_uint1 x109; + uint32_t x110; + fiat_p224_uint1 x111; + uint32_t x112; + uint32_t x113; + uint32_t x114; + uint32_t x115; + uint32_t x116; + uint32_t x117; + uint32_t x118; + fiat_p224_uint1 x119; + uint32_t x120; + uint32_t x121; + uint32_t x122; + uint32_t x123; + uint32_t x124; + uint32_t x125; + uint32_t x126; + uint32_t x127; + uint32_t x128; + fiat_p224_uint1 x129; + uint32_t x130; + fiat_p224_uint1 x131; + uint32_t x132; + fiat_p224_uint1 x133; + uint32_t x134; + fiat_p224_uint1 x135; + uint32_t x136; + fiat_p224_uint1 x137; + uint32_t x138; + fiat_p224_uint1 x139; + uint32_t x140; + fiat_p224_uint1 x141; + uint32_t x142; + fiat_p224_uint1 x143; + uint32_t x144; + uint32_t x145; + uint32_t x146; + uint32_t x147; + uint32_t x148; + uint32_t x149; + uint32_t x150; + uint32_t x151; + fiat_p224_uint1 x152; + uint32_t x153; + fiat_p224_uint1 x154; + uint32_t x155; + fiat_p224_uint1 x156; + uint32_t x157; + fiat_p224_uint1 x158; + uint32_t x159; + fiat_p224_uint1 x160; + uint32_t x161; + fiat_p224_uint1 x162; + uint32_t x163; + fiat_p224_uint1 x164; + uint32_t x165; + fiat_p224_uint1 x166; + uint32_t x167; + fiat_p224_uint1 x168; + uint32_t x169; + fiat_p224_uint1 x170; + uint32_t x171; + fiat_p224_uint1 x172; + uint32_t x173; + fiat_p224_uint1 x174; + uint32_t x175; + fiat_p224_uint1 x176; + uint32_t x177; + fiat_p224_uint1 x178; + uint32_t x179; + fiat_p224_uint1 x180; + uint32_t x181; + fiat_p224_uint1 x182; + uint32_t x183; + uint32_t x184; + uint32_t x185; + uint32_t x186; + uint32_t x187; + uint32_t x188; + uint32_t x189; + uint32_t x190; + uint32_t x191; + uint32_t x192; + uint32_t x193; + uint32_t x194; + uint32_t x195; + uint32_t x196; + uint32_t x197; + uint32_t x198; + uint32_t x199; + uint32_t x200; + uint32_t x201; + uint32_t x202; + uint32_t x203; + uint32_t x204; + fiat_p224_addcarryx_u32(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_p224_uint1)((fiat_p224_uint1)(x1 >> 31) & (fiat_p224_uint1)((arg3[0]) & 0x1)); + fiat_p224_addcarryx_u32(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_p224_cmovznz_u32(&x6, x3, arg1, x4); + fiat_p224_cmovznz_u32(&x7, x3, (arg2[0]), (arg3[0])); + fiat_p224_cmovznz_u32(&x8, x3, (arg2[1]), (arg3[1])); + fiat_p224_cmovznz_u32(&x9, x3, (arg2[2]), (arg3[2])); + fiat_p224_cmovznz_u32(&x10, x3, (arg2[3]), (arg3[3])); + fiat_p224_cmovznz_u32(&x11, x3, (arg2[4]), (arg3[4])); + fiat_p224_cmovznz_u32(&x12, x3, (arg2[5]), (arg3[5])); + fiat_p224_cmovznz_u32(&x13, x3, (arg2[6]), (arg3[6])); + fiat_p224_cmovznz_u32(&x14, x3, (arg2[7]), (arg3[7])); + fiat_p224_addcarryx_u32(&x15, &x16, 0x0, 0x1, (~(arg2[0]))); + fiat_p224_addcarryx_u32(&x17, &x18, x16, 0x0, (~(arg2[1]))); + fiat_p224_addcarryx_u32(&x19, &x20, x18, 0x0, (~(arg2[2]))); + fiat_p224_addcarryx_u32(&x21, &x22, x20, 0x0, (~(arg2[3]))); + fiat_p224_addcarryx_u32(&x23, &x24, x22, 0x0, (~(arg2[4]))); + fiat_p224_addcarryx_u32(&x25, &x26, x24, 0x0, (~(arg2[5]))); + fiat_p224_addcarryx_u32(&x27, &x28, x26, 0x0, (~(arg2[6]))); + fiat_p224_addcarryx_u32(&x29, &x30, x28, 0x0, (~(arg2[7]))); + fiat_p224_cmovznz_u32(&x31, x3, (arg3[0]), x15); + fiat_p224_cmovznz_u32(&x32, x3, (arg3[1]), x17); + fiat_p224_cmovznz_u32(&x33, x3, (arg3[2]), x19); + fiat_p224_cmovznz_u32(&x34, x3, (arg3[3]), x21); + fiat_p224_cmovznz_u32(&x35, x3, (arg3[4]), x23); + fiat_p224_cmovznz_u32(&x36, x3, (arg3[5]), x25); + fiat_p224_cmovznz_u32(&x37, x3, (arg3[6]), x27); + fiat_p224_cmovznz_u32(&x38, x3, (arg3[7]), x29); + fiat_p224_cmovznz_u32(&x39, x3, (arg4[0]), (arg5[0])); + fiat_p224_cmovznz_u32(&x40, x3, (arg4[1]), (arg5[1])); + fiat_p224_cmovznz_u32(&x41, x3, (arg4[2]), (arg5[2])); + fiat_p224_cmovznz_u32(&x42, x3, (arg4[3]), (arg5[3])); + fiat_p224_cmovznz_u32(&x43, x3, (arg4[4]), (arg5[4])); + fiat_p224_cmovznz_u32(&x44, x3, (arg4[5]), (arg5[5])); + fiat_p224_cmovznz_u32(&x45, x3, (arg4[6]), (arg5[6])); + fiat_p224_addcarryx_u32(&x46, &x47, 0x0, x39, x39); + fiat_p224_addcarryx_u32(&x48, &x49, x47, x40, x40); + fiat_p224_addcarryx_u32(&x50, &x51, x49, x41, x41); + fiat_p224_addcarryx_u32(&x52, &x53, x51, x42, x42); + fiat_p224_addcarryx_u32(&x54, &x55, x53, x43, x43); + fiat_p224_addcarryx_u32(&x56, &x57, x55, x44, x44); + fiat_p224_addcarryx_u32(&x58, &x59, x57, x45, x45); + fiat_p224_subborrowx_u32(&x60, &x61, 0x0, x46, 0x1); + fiat_p224_subborrowx_u32(&x62, &x63, x61, x48, 0x0); + fiat_p224_subborrowx_u32(&x64, &x65, x63, x50, 0x0); + fiat_p224_subborrowx_u32(&x66, &x67, x65, x52, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x68, &x69, x67, x54, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x70, &x71, x69, x56, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x72, &x73, x71, x58, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x74, &x75, x73, x59, 0x0); + x76 = (arg4[6]); + x77 = (arg4[5]); + x78 = (arg4[4]); + x79 = (arg4[3]); + x80 = (arg4[2]); + x81 = (arg4[1]); + x82 = (arg4[0]); + fiat_p224_subborrowx_u32(&x83, &x84, 0x0, 0x0, x82); + fiat_p224_subborrowx_u32(&x85, &x86, x84, 0x0, x81); + fiat_p224_subborrowx_u32(&x87, &x88, x86, 0x0, x80); + fiat_p224_subborrowx_u32(&x89, &x90, x88, 0x0, x79); + fiat_p224_subborrowx_u32(&x91, &x92, x90, 0x0, x78); + fiat_p224_subborrowx_u32(&x93, &x94, x92, 0x0, x77); + fiat_p224_subborrowx_u32(&x95, &x96, x94, 0x0, x76); + fiat_p224_cmovznz_u32(&x97, x96, 0x0, UINT32_C(0xffffffff)); + fiat_p224_addcarryx_u32(&x98, &x99, 0x0, x83, (fiat_p224_uint1)(x97 & 0x1)); + fiat_p224_addcarryx_u32(&x100, &x101, x99, x85, 0x0); + fiat_p224_addcarryx_u32(&x102, &x103, x101, x87, 0x0); + fiat_p224_addcarryx_u32(&x104, &x105, x103, x89, x97); + fiat_p224_addcarryx_u32(&x106, &x107, x105, x91, x97); + fiat_p224_addcarryx_u32(&x108, &x109, x107, x93, x97); + fiat_p224_addcarryx_u32(&x110, &x111, x109, x95, x97); + fiat_p224_cmovznz_u32(&x112, x3, (arg5[0]), x98); + fiat_p224_cmovznz_u32(&x113, x3, (arg5[1]), x100); + fiat_p224_cmovznz_u32(&x114, x3, (arg5[2]), x102); + fiat_p224_cmovznz_u32(&x115, x3, (arg5[3]), x104); + fiat_p224_cmovznz_u32(&x116, x3, (arg5[4]), x106); + fiat_p224_cmovznz_u32(&x117, x3, (arg5[5]), x108); + fiat_p224_cmovznz_u32(&x118, x3, (arg5[6]), x110); + x119 = (fiat_p224_uint1)(x31 & 0x1); + fiat_p224_cmovznz_u32(&x120, x119, 0x0, x7); + fiat_p224_cmovznz_u32(&x121, x119, 0x0, x8); + fiat_p224_cmovznz_u32(&x122, x119, 0x0, x9); + fiat_p224_cmovznz_u32(&x123, x119, 0x0, x10); + fiat_p224_cmovznz_u32(&x124, x119, 0x0, x11); + fiat_p224_cmovznz_u32(&x125, x119, 0x0, x12); + fiat_p224_cmovznz_u32(&x126, x119, 0x0, x13); + fiat_p224_cmovznz_u32(&x127, x119, 0x0, x14); + fiat_p224_addcarryx_u32(&x128, &x129, 0x0, x31, x120); + fiat_p224_addcarryx_u32(&x130, &x131, x129, x32, x121); + fiat_p224_addcarryx_u32(&x132, &x133, x131, x33, x122); + fiat_p224_addcarryx_u32(&x134, &x135, x133, x34, x123); + fiat_p224_addcarryx_u32(&x136, &x137, x135, x35, x124); + fiat_p224_addcarryx_u32(&x138, &x139, x137, x36, x125); + fiat_p224_addcarryx_u32(&x140, &x141, x139, x37, x126); + fiat_p224_addcarryx_u32(&x142, &x143, x141, x38, x127); + fiat_p224_cmovznz_u32(&x144, x119, 0x0, x39); + fiat_p224_cmovznz_u32(&x145, x119, 0x0, x40); + fiat_p224_cmovznz_u32(&x146, x119, 0x0, x41); + fiat_p224_cmovznz_u32(&x147, x119, 0x0, x42); + fiat_p224_cmovznz_u32(&x148, x119, 0x0, x43); + fiat_p224_cmovznz_u32(&x149, x119, 0x0, x44); + fiat_p224_cmovznz_u32(&x150, x119, 0x0, x45); + fiat_p224_addcarryx_u32(&x151, &x152, 0x0, x112, x144); + fiat_p224_addcarryx_u32(&x153, &x154, x152, x113, x145); + fiat_p224_addcarryx_u32(&x155, &x156, x154, x114, x146); + fiat_p224_addcarryx_u32(&x157, &x158, x156, x115, x147); + fiat_p224_addcarryx_u32(&x159, &x160, x158, x116, x148); + fiat_p224_addcarryx_u32(&x161, &x162, x160, x117, x149); + fiat_p224_addcarryx_u32(&x163, &x164, x162, x118, x150); + fiat_p224_subborrowx_u32(&x165, &x166, 0x0, x151, 0x1); + fiat_p224_subborrowx_u32(&x167, &x168, x166, x153, 0x0); + fiat_p224_subborrowx_u32(&x169, &x170, x168, x155, 0x0); + fiat_p224_subborrowx_u32(&x171, &x172, x170, x157, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x173, &x174, x172, x159, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x175, &x176, x174, x161, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x177, &x178, x176, x163, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u32(&x179, &x180, x178, x164, 0x0); + fiat_p224_addcarryx_u32(&x181, &x182, 0x0, x6, 0x1); + x183 = ((x128 >> 1) | ((x130 << 31) & UINT32_C(0xffffffff))); + x184 = ((x130 >> 1) | ((x132 << 31) & UINT32_C(0xffffffff))); + x185 = ((x132 >> 1) | ((x134 << 31) & UINT32_C(0xffffffff))); + x186 = ((x134 >> 1) | ((x136 << 31) & UINT32_C(0xffffffff))); + x187 = ((x136 >> 1) | ((x138 << 31) & UINT32_C(0xffffffff))); + x188 = ((x138 >> 1) | ((x140 << 31) & UINT32_C(0xffffffff))); + x189 = ((x140 >> 1) | ((x142 << 31) & UINT32_C(0xffffffff))); + x190 = ((x142 & UINT32_C(0x80000000)) | (x142 >> 1)); + fiat_p224_cmovznz_u32(&x191, x75, x60, x46); + fiat_p224_cmovznz_u32(&x192, x75, x62, x48); + fiat_p224_cmovznz_u32(&x193, x75, x64, x50); + fiat_p224_cmovznz_u32(&x194, x75, x66, x52); + fiat_p224_cmovznz_u32(&x195, x75, x68, x54); + fiat_p224_cmovznz_u32(&x196, x75, x70, x56); + fiat_p224_cmovznz_u32(&x197, x75, x72, x58); + fiat_p224_cmovznz_u32(&x198, x180, x165, x151); + fiat_p224_cmovznz_u32(&x199, x180, x167, x153); + fiat_p224_cmovznz_u32(&x200, x180, x169, x155); + fiat_p224_cmovznz_u32(&x201, x180, x171, x157); + fiat_p224_cmovznz_u32(&x202, x180, x173, x159); + fiat_p224_cmovznz_u32(&x203, x180, x175, x161); + fiat_p224_cmovznz_u32(&x204, x180, x177, x163); + *out1 = x181; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out2[5] = x12; + out2[6] = x13; + out2[7] = x14; + out3[0] = x183; + out3[1] = x184; + out3[2] = x185; + out3[3] = x186; + out3[4] = x187; + out3[5] = x188; + out3[6] = x189; + out3[7] = x190; + out4[0] = x191; + out4[1] = x192; + out4[2] = x193; + out4[3] = x194; + out4[4] = x195; + out4[5] = x196; + out4[6] = x197; + out5[0] = x198; + out5[1] = x199; + out5[2] = x200; + out5[3] = x201; + out5[4] = x202; + out5[5] = x203; + out5[6] = x204; +} + diff --git a/ec/native/p224_64.h b/ec/native/p224_64.h new file mode 100644 index 00000000..fc8deb65 --- /dev/null +++ b/ec/native/p224_64.h @@ -0,0 +1,2079 @@ +/* Autogenerated: '../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery' --static --use-value-barrier p224 64 '2^224 - 2^96 + 1' */ +/* curve description: p224 */ +/* machine_wordsize = 64 (from "64") */ +/* requested operations: (all) */ +/* m = 0xffffffffffffffffffffffffffffffff000000000000000000000001 (from "2^224 - 2^96 + 1") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) */ + +#include +typedef unsigned char fiat_p224_uint1; +typedef signed char fiat_p224_int1; +#ifdef __GNUC__ +# define FIAT_P224_FIAT_EXTENSION __extension__ +#else +# define FIAT_P224_FIAT_EXTENSION +#endif + +FIAT_P224_FIAT_EXTENSION typedef signed __int128 fiat_p224_int128; +FIAT_P224_FIAT_EXTENSION typedef unsigned __int128 fiat_p224_uint128; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_P224_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint64_t fiat_p224_value_barrier_u64(uint64_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_p224_value_barrier_u64(x) (x) +#endif + + +/* + * The function fiat_p224_addcarryx_u64 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^64 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p224_addcarryx_u64(uint64_t* out1, fiat_p224_uint1* out2, fiat_p224_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_p224_uint128 x1; + uint64_t x2; + fiat_p224_uint1 x3; + x1 = ((arg1 + (fiat_p224_uint128)arg2) + arg3); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (fiat_p224_uint1)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p224_subborrowx_u64 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^64 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p224_subborrowx_u64(uint64_t* out1, fiat_p224_uint1* out2, fiat_p224_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_p224_int128 x1; + fiat_p224_int1 x2; + uint64_t x3; + x1 = ((arg2 - (fiat_p224_int128)arg1) - arg3); + x2 = (fiat_p224_int1)(x1 >> 64); + x3 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + *out1 = x3; + *out2 = (fiat_p224_uint1)(0x0 - x2); +} + +/* + * The function fiat_p224_mulx_u64 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^64 + * out2 = ⌊arg1 * arg2 / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_p224_mulx_u64(uint64_t* out1, uint64_t* out2, uint64_t arg1, uint64_t arg2) { + fiat_p224_uint128 x1; + uint64_t x2; + uint64_t x3; + x1 = ((fiat_p224_uint128)arg1 * arg2); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (uint64_t)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p224_cmovznz_u64 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_p224_cmovznz_u64(uint64_t* out1, fiat_p224_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_p224_uint1 x1; + uint64_t x2; + uint64_t x3; + x1 = (!(!arg1)); + x2 = ((fiat_p224_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); + x3 = ((fiat_p224_value_barrier_u64(x2) & arg3) | (fiat_p224_value_barrier_u64((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_p224_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p224_mul(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + fiat_p224_uint1 x14; + uint64_t x15; + fiat_p224_uint1 x16; + uint64_t x17; + fiat_p224_uint1 x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + fiat_p224_uint1 x29; + uint64_t x30; + fiat_p224_uint1 x31; + uint64_t x32; + uint64_t x33; + fiat_p224_uint1 x34; + uint64_t x35; + fiat_p224_uint1 x36; + uint64_t x37; + fiat_p224_uint1 x38; + uint64_t x39; + fiat_p224_uint1 x40; + uint64_t x41; + fiat_p224_uint1 x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + fiat_p224_uint1 x52; + uint64_t x53; + fiat_p224_uint1 x54; + uint64_t x55; + fiat_p224_uint1 x56; + uint64_t x57; + uint64_t x58; + fiat_p224_uint1 x59; + uint64_t x60; + fiat_p224_uint1 x61; + uint64_t x62; + fiat_p224_uint1 x63; + uint64_t x64; + fiat_p224_uint1 x65; + uint64_t x66; + fiat_p224_uint1 x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint64_t x76; + fiat_p224_uint1 x77; + uint64_t x78; + fiat_p224_uint1 x79; + uint64_t x80; + uint64_t x81; + fiat_p224_uint1 x82; + uint64_t x83; + fiat_p224_uint1 x84; + uint64_t x85; + fiat_p224_uint1 x86; + uint64_t x87; + fiat_p224_uint1 x88; + uint64_t x89; + fiat_p224_uint1 x90; + uint64_t x91; + uint64_t x92; + uint64_t x93; + uint64_t x94; + uint64_t x95; + uint64_t x96; + uint64_t x97; + uint64_t x98; + uint64_t x99; + uint64_t x100; + fiat_p224_uint1 x101; + uint64_t x102; + fiat_p224_uint1 x103; + uint64_t x104; + fiat_p224_uint1 x105; + uint64_t x106; + uint64_t x107; + fiat_p224_uint1 x108; + uint64_t x109; + fiat_p224_uint1 x110; + uint64_t x111; + fiat_p224_uint1 x112; + uint64_t x113; + fiat_p224_uint1 x114; + uint64_t x115; + fiat_p224_uint1 x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + uint64_t x121; + uint64_t x122; + uint64_t x123; + uint64_t x124; + uint64_t x125; + fiat_p224_uint1 x126; + uint64_t x127; + fiat_p224_uint1 x128; + uint64_t x129; + uint64_t x130; + fiat_p224_uint1 x131; + uint64_t x132; + fiat_p224_uint1 x133; + uint64_t x134; + fiat_p224_uint1 x135; + uint64_t x136; + fiat_p224_uint1 x137; + uint64_t x138; + fiat_p224_uint1 x139; + uint64_t x140; + uint64_t x141; + uint64_t x142; + uint64_t x143; + uint64_t x144; + uint64_t x145; + uint64_t x146; + uint64_t x147; + uint64_t x148; + uint64_t x149; + fiat_p224_uint1 x150; + uint64_t x151; + fiat_p224_uint1 x152; + uint64_t x153; + fiat_p224_uint1 x154; + uint64_t x155; + uint64_t x156; + fiat_p224_uint1 x157; + uint64_t x158; + fiat_p224_uint1 x159; + uint64_t x160; + fiat_p224_uint1 x161; + uint64_t x162; + fiat_p224_uint1 x163; + uint64_t x164; + fiat_p224_uint1 x165; + uint64_t x166; + uint64_t x167; + uint64_t x168; + uint64_t x169; + uint64_t x170; + uint64_t x171; + uint64_t x172; + uint64_t x173; + uint64_t x174; + fiat_p224_uint1 x175; + uint64_t x176; + fiat_p224_uint1 x177; + uint64_t x178; + uint64_t x179; + fiat_p224_uint1 x180; + uint64_t x181; + fiat_p224_uint1 x182; + uint64_t x183; + fiat_p224_uint1 x184; + uint64_t x185; + fiat_p224_uint1 x186; + uint64_t x187; + fiat_p224_uint1 x188; + uint64_t x189; + uint64_t x190; + fiat_p224_uint1 x191; + uint64_t x192; + fiat_p224_uint1 x193; + uint64_t x194; + fiat_p224_uint1 x195; + uint64_t x196; + fiat_p224_uint1 x197; + uint64_t x198; + fiat_p224_uint1 x199; + uint64_t x200; + uint64_t x201; + uint64_t x202; + uint64_t x203; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[0]); + fiat_p224_mulx_u64(&x5, &x6, x4, (arg2[3])); + fiat_p224_mulx_u64(&x7, &x8, x4, (arg2[2])); + fiat_p224_mulx_u64(&x9, &x10, x4, (arg2[1])); + fiat_p224_mulx_u64(&x11, &x12, x4, (arg2[0])); + fiat_p224_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + fiat_p224_addcarryx_u64(&x15, &x16, x14, x10, x7); + fiat_p224_addcarryx_u64(&x17, &x18, x16, x8, x5); + x19 = (x18 + x6); + fiat_p224_mulx_u64(&x20, &x21, x11, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x22, &x23, x20, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x24, &x25, x20, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x26, &x27, x20, UINT64_C(0xffffffff00000000)); + fiat_p224_addcarryx_u64(&x28, &x29, 0x0, x27, x24); + fiat_p224_addcarryx_u64(&x30, &x31, x29, x25, x22); + x32 = (x31 + x23); + fiat_p224_addcarryx_u64(&x33, &x34, 0x0, x11, x20); + fiat_p224_addcarryx_u64(&x35, &x36, x34, x13, x26); + fiat_p224_addcarryx_u64(&x37, &x38, x36, x15, x28); + fiat_p224_addcarryx_u64(&x39, &x40, x38, x17, x30); + fiat_p224_addcarryx_u64(&x41, &x42, x40, x19, x32); + fiat_p224_mulx_u64(&x43, &x44, x1, (arg2[3])); + fiat_p224_mulx_u64(&x45, &x46, x1, (arg2[2])); + fiat_p224_mulx_u64(&x47, &x48, x1, (arg2[1])); + fiat_p224_mulx_u64(&x49, &x50, x1, (arg2[0])); + fiat_p224_addcarryx_u64(&x51, &x52, 0x0, x50, x47); + fiat_p224_addcarryx_u64(&x53, &x54, x52, x48, x45); + fiat_p224_addcarryx_u64(&x55, &x56, x54, x46, x43); + x57 = (x56 + x44); + fiat_p224_addcarryx_u64(&x58, &x59, 0x0, x35, x49); + fiat_p224_addcarryx_u64(&x60, &x61, x59, x37, x51); + fiat_p224_addcarryx_u64(&x62, &x63, x61, x39, x53); + fiat_p224_addcarryx_u64(&x64, &x65, x63, x41, x55); + fiat_p224_addcarryx_u64(&x66, &x67, x65, x42, x57); + fiat_p224_mulx_u64(&x68, &x69, x58, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x70, &x71, x68, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x72, &x73, x68, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x74, &x75, x68, UINT64_C(0xffffffff00000000)); + fiat_p224_addcarryx_u64(&x76, &x77, 0x0, x75, x72); + fiat_p224_addcarryx_u64(&x78, &x79, x77, x73, x70); + x80 = (x79 + x71); + fiat_p224_addcarryx_u64(&x81, &x82, 0x0, x58, x68); + fiat_p224_addcarryx_u64(&x83, &x84, x82, x60, x74); + fiat_p224_addcarryx_u64(&x85, &x86, x84, x62, x76); + fiat_p224_addcarryx_u64(&x87, &x88, x86, x64, x78); + fiat_p224_addcarryx_u64(&x89, &x90, x88, x66, x80); + x91 = ((uint64_t)x90 + x67); + fiat_p224_mulx_u64(&x92, &x93, x2, (arg2[3])); + fiat_p224_mulx_u64(&x94, &x95, x2, (arg2[2])); + fiat_p224_mulx_u64(&x96, &x97, x2, (arg2[1])); + fiat_p224_mulx_u64(&x98, &x99, x2, (arg2[0])); + fiat_p224_addcarryx_u64(&x100, &x101, 0x0, x99, x96); + fiat_p224_addcarryx_u64(&x102, &x103, x101, x97, x94); + fiat_p224_addcarryx_u64(&x104, &x105, x103, x95, x92); + x106 = (x105 + x93); + fiat_p224_addcarryx_u64(&x107, &x108, 0x0, x83, x98); + fiat_p224_addcarryx_u64(&x109, &x110, x108, x85, x100); + fiat_p224_addcarryx_u64(&x111, &x112, x110, x87, x102); + fiat_p224_addcarryx_u64(&x113, &x114, x112, x89, x104); + fiat_p224_addcarryx_u64(&x115, &x116, x114, x91, x106); + fiat_p224_mulx_u64(&x117, &x118, x107, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x119, &x120, x117, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x121, &x122, x117, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x123, &x124, x117, UINT64_C(0xffffffff00000000)); + fiat_p224_addcarryx_u64(&x125, &x126, 0x0, x124, x121); + fiat_p224_addcarryx_u64(&x127, &x128, x126, x122, x119); + x129 = (x128 + x120); + fiat_p224_addcarryx_u64(&x130, &x131, 0x0, x107, x117); + fiat_p224_addcarryx_u64(&x132, &x133, x131, x109, x123); + fiat_p224_addcarryx_u64(&x134, &x135, x133, x111, x125); + fiat_p224_addcarryx_u64(&x136, &x137, x135, x113, x127); + fiat_p224_addcarryx_u64(&x138, &x139, x137, x115, x129); + x140 = ((uint64_t)x139 + x116); + fiat_p224_mulx_u64(&x141, &x142, x3, (arg2[3])); + fiat_p224_mulx_u64(&x143, &x144, x3, (arg2[2])); + fiat_p224_mulx_u64(&x145, &x146, x3, (arg2[1])); + fiat_p224_mulx_u64(&x147, &x148, x3, (arg2[0])); + fiat_p224_addcarryx_u64(&x149, &x150, 0x0, x148, x145); + fiat_p224_addcarryx_u64(&x151, &x152, x150, x146, x143); + fiat_p224_addcarryx_u64(&x153, &x154, x152, x144, x141); + x155 = (x154 + x142); + fiat_p224_addcarryx_u64(&x156, &x157, 0x0, x132, x147); + fiat_p224_addcarryx_u64(&x158, &x159, x157, x134, x149); + fiat_p224_addcarryx_u64(&x160, &x161, x159, x136, x151); + fiat_p224_addcarryx_u64(&x162, &x163, x161, x138, x153); + fiat_p224_addcarryx_u64(&x164, &x165, x163, x140, x155); + fiat_p224_mulx_u64(&x166, &x167, x156, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x168, &x169, x166, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x170, &x171, x166, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x172, &x173, x166, UINT64_C(0xffffffff00000000)); + fiat_p224_addcarryx_u64(&x174, &x175, 0x0, x173, x170); + fiat_p224_addcarryx_u64(&x176, &x177, x175, x171, x168); + x178 = (x177 + x169); + fiat_p224_addcarryx_u64(&x179, &x180, 0x0, x156, x166); + fiat_p224_addcarryx_u64(&x181, &x182, x180, x158, x172); + fiat_p224_addcarryx_u64(&x183, &x184, x182, x160, x174); + fiat_p224_addcarryx_u64(&x185, &x186, x184, x162, x176); + fiat_p224_addcarryx_u64(&x187, &x188, x186, x164, x178); + x189 = ((uint64_t)x188 + x165); + fiat_p224_subborrowx_u64(&x190, &x191, 0x0, x181, 0x1); + fiat_p224_subborrowx_u64(&x192, &x193, x191, x183, UINT64_C(0xffffffff00000000)); + fiat_p224_subborrowx_u64(&x194, &x195, x193, x185, UINT64_C(0xffffffffffffffff)); + fiat_p224_subborrowx_u64(&x196, &x197, x195, x187, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u64(&x198, &x199, x197, x189, 0x0); + fiat_p224_cmovznz_u64(&x200, x199, x190, x181); + fiat_p224_cmovznz_u64(&x201, x199, x192, x183); + fiat_p224_cmovznz_u64(&x202, x199, x194, x185); + fiat_p224_cmovznz_u64(&x203, x199, x196, x187); + out1[0] = x200; + out1[1] = x201; + out1[2] = x202; + out1[3] = x203; +} + +/* + * The function fiat_p224_square squares a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p224_square(uint64_t out1[4], const uint64_t arg1[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + fiat_p224_uint1 x14; + uint64_t x15; + fiat_p224_uint1 x16; + uint64_t x17; + fiat_p224_uint1 x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + fiat_p224_uint1 x29; + uint64_t x30; + fiat_p224_uint1 x31; + uint64_t x32; + uint64_t x33; + fiat_p224_uint1 x34; + uint64_t x35; + fiat_p224_uint1 x36; + uint64_t x37; + fiat_p224_uint1 x38; + uint64_t x39; + fiat_p224_uint1 x40; + uint64_t x41; + fiat_p224_uint1 x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + fiat_p224_uint1 x52; + uint64_t x53; + fiat_p224_uint1 x54; + uint64_t x55; + fiat_p224_uint1 x56; + uint64_t x57; + uint64_t x58; + fiat_p224_uint1 x59; + uint64_t x60; + fiat_p224_uint1 x61; + uint64_t x62; + fiat_p224_uint1 x63; + uint64_t x64; + fiat_p224_uint1 x65; + uint64_t x66; + fiat_p224_uint1 x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint64_t x76; + fiat_p224_uint1 x77; + uint64_t x78; + fiat_p224_uint1 x79; + uint64_t x80; + uint64_t x81; + fiat_p224_uint1 x82; + uint64_t x83; + fiat_p224_uint1 x84; + uint64_t x85; + fiat_p224_uint1 x86; + uint64_t x87; + fiat_p224_uint1 x88; + uint64_t x89; + fiat_p224_uint1 x90; + uint64_t x91; + uint64_t x92; + uint64_t x93; + uint64_t x94; + uint64_t x95; + uint64_t x96; + uint64_t x97; + uint64_t x98; + uint64_t x99; + uint64_t x100; + fiat_p224_uint1 x101; + uint64_t x102; + fiat_p224_uint1 x103; + uint64_t x104; + fiat_p224_uint1 x105; + uint64_t x106; + uint64_t x107; + fiat_p224_uint1 x108; + uint64_t x109; + fiat_p224_uint1 x110; + uint64_t x111; + fiat_p224_uint1 x112; + uint64_t x113; + fiat_p224_uint1 x114; + uint64_t x115; + fiat_p224_uint1 x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + uint64_t x121; + uint64_t x122; + uint64_t x123; + uint64_t x124; + uint64_t x125; + fiat_p224_uint1 x126; + uint64_t x127; + fiat_p224_uint1 x128; + uint64_t x129; + uint64_t x130; + fiat_p224_uint1 x131; + uint64_t x132; + fiat_p224_uint1 x133; + uint64_t x134; + fiat_p224_uint1 x135; + uint64_t x136; + fiat_p224_uint1 x137; + uint64_t x138; + fiat_p224_uint1 x139; + uint64_t x140; + uint64_t x141; + uint64_t x142; + uint64_t x143; + uint64_t x144; + uint64_t x145; + uint64_t x146; + uint64_t x147; + uint64_t x148; + uint64_t x149; + fiat_p224_uint1 x150; + uint64_t x151; + fiat_p224_uint1 x152; + uint64_t x153; + fiat_p224_uint1 x154; + uint64_t x155; + uint64_t x156; + fiat_p224_uint1 x157; + uint64_t x158; + fiat_p224_uint1 x159; + uint64_t x160; + fiat_p224_uint1 x161; + uint64_t x162; + fiat_p224_uint1 x163; + uint64_t x164; + fiat_p224_uint1 x165; + uint64_t x166; + uint64_t x167; + uint64_t x168; + uint64_t x169; + uint64_t x170; + uint64_t x171; + uint64_t x172; + uint64_t x173; + uint64_t x174; + fiat_p224_uint1 x175; + uint64_t x176; + fiat_p224_uint1 x177; + uint64_t x178; + uint64_t x179; + fiat_p224_uint1 x180; + uint64_t x181; + fiat_p224_uint1 x182; + uint64_t x183; + fiat_p224_uint1 x184; + uint64_t x185; + fiat_p224_uint1 x186; + uint64_t x187; + fiat_p224_uint1 x188; + uint64_t x189; + uint64_t x190; + fiat_p224_uint1 x191; + uint64_t x192; + fiat_p224_uint1 x193; + uint64_t x194; + fiat_p224_uint1 x195; + uint64_t x196; + fiat_p224_uint1 x197; + uint64_t x198; + fiat_p224_uint1 x199; + uint64_t x200; + uint64_t x201; + uint64_t x202; + uint64_t x203; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[0]); + fiat_p224_mulx_u64(&x5, &x6, x4, (arg1[3])); + fiat_p224_mulx_u64(&x7, &x8, x4, (arg1[2])); + fiat_p224_mulx_u64(&x9, &x10, x4, (arg1[1])); + fiat_p224_mulx_u64(&x11, &x12, x4, (arg1[0])); + fiat_p224_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + fiat_p224_addcarryx_u64(&x15, &x16, x14, x10, x7); + fiat_p224_addcarryx_u64(&x17, &x18, x16, x8, x5); + x19 = (x18 + x6); + fiat_p224_mulx_u64(&x20, &x21, x11, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x22, &x23, x20, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x24, &x25, x20, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x26, &x27, x20, UINT64_C(0xffffffff00000000)); + fiat_p224_addcarryx_u64(&x28, &x29, 0x0, x27, x24); + fiat_p224_addcarryx_u64(&x30, &x31, x29, x25, x22); + x32 = (x31 + x23); + fiat_p224_addcarryx_u64(&x33, &x34, 0x0, x11, x20); + fiat_p224_addcarryx_u64(&x35, &x36, x34, x13, x26); + fiat_p224_addcarryx_u64(&x37, &x38, x36, x15, x28); + fiat_p224_addcarryx_u64(&x39, &x40, x38, x17, x30); + fiat_p224_addcarryx_u64(&x41, &x42, x40, x19, x32); + fiat_p224_mulx_u64(&x43, &x44, x1, (arg1[3])); + fiat_p224_mulx_u64(&x45, &x46, x1, (arg1[2])); + fiat_p224_mulx_u64(&x47, &x48, x1, (arg1[1])); + fiat_p224_mulx_u64(&x49, &x50, x1, (arg1[0])); + fiat_p224_addcarryx_u64(&x51, &x52, 0x0, x50, x47); + fiat_p224_addcarryx_u64(&x53, &x54, x52, x48, x45); + fiat_p224_addcarryx_u64(&x55, &x56, x54, x46, x43); + x57 = (x56 + x44); + fiat_p224_addcarryx_u64(&x58, &x59, 0x0, x35, x49); + fiat_p224_addcarryx_u64(&x60, &x61, x59, x37, x51); + fiat_p224_addcarryx_u64(&x62, &x63, x61, x39, x53); + fiat_p224_addcarryx_u64(&x64, &x65, x63, x41, x55); + fiat_p224_addcarryx_u64(&x66, &x67, x65, x42, x57); + fiat_p224_mulx_u64(&x68, &x69, x58, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x70, &x71, x68, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x72, &x73, x68, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x74, &x75, x68, UINT64_C(0xffffffff00000000)); + fiat_p224_addcarryx_u64(&x76, &x77, 0x0, x75, x72); + fiat_p224_addcarryx_u64(&x78, &x79, x77, x73, x70); + x80 = (x79 + x71); + fiat_p224_addcarryx_u64(&x81, &x82, 0x0, x58, x68); + fiat_p224_addcarryx_u64(&x83, &x84, x82, x60, x74); + fiat_p224_addcarryx_u64(&x85, &x86, x84, x62, x76); + fiat_p224_addcarryx_u64(&x87, &x88, x86, x64, x78); + fiat_p224_addcarryx_u64(&x89, &x90, x88, x66, x80); + x91 = ((uint64_t)x90 + x67); + fiat_p224_mulx_u64(&x92, &x93, x2, (arg1[3])); + fiat_p224_mulx_u64(&x94, &x95, x2, (arg1[2])); + fiat_p224_mulx_u64(&x96, &x97, x2, (arg1[1])); + fiat_p224_mulx_u64(&x98, &x99, x2, (arg1[0])); + fiat_p224_addcarryx_u64(&x100, &x101, 0x0, x99, x96); + fiat_p224_addcarryx_u64(&x102, &x103, x101, x97, x94); + fiat_p224_addcarryx_u64(&x104, &x105, x103, x95, x92); + x106 = (x105 + x93); + fiat_p224_addcarryx_u64(&x107, &x108, 0x0, x83, x98); + fiat_p224_addcarryx_u64(&x109, &x110, x108, x85, x100); + fiat_p224_addcarryx_u64(&x111, &x112, x110, x87, x102); + fiat_p224_addcarryx_u64(&x113, &x114, x112, x89, x104); + fiat_p224_addcarryx_u64(&x115, &x116, x114, x91, x106); + fiat_p224_mulx_u64(&x117, &x118, x107, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x119, &x120, x117, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x121, &x122, x117, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x123, &x124, x117, UINT64_C(0xffffffff00000000)); + fiat_p224_addcarryx_u64(&x125, &x126, 0x0, x124, x121); + fiat_p224_addcarryx_u64(&x127, &x128, x126, x122, x119); + x129 = (x128 + x120); + fiat_p224_addcarryx_u64(&x130, &x131, 0x0, x107, x117); + fiat_p224_addcarryx_u64(&x132, &x133, x131, x109, x123); + fiat_p224_addcarryx_u64(&x134, &x135, x133, x111, x125); + fiat_p224_addcarryx_u64(&x136, &x137, x135, x113, x127); + fiat_p224_addcarryx_u64(&x138, &x139, x137, x115, x129); + x140 = ((uint64_t)x139 + x116); + fiat_p224_mulx_u64(&x141, &x142, x3, (arg1[3])); + fiat_p224_mulx_u64(&x143, &x144, x3, (arg1[2])); + fiat_p224_mulx_u64(&x145, &x146, x3, (arg1[1])); + fiat_p224_mulx_u64(&x147, &x148, x3, (arg1[0])); + fiat_p224_addcarryx_u64(&x149, &x150, 0x0, x148, x145); + fiat_p224_addcarryx_u64(&x151, &x152, x150, x146, x143); + fiat_p224_addcarryx_u64(&x153, &x154, x152, x144, x141); + x155 = (x154 + x142); + fiat_p224_addcarryx_u64(&x156, &x157, 0x0, x132, x147); + fiat_p224_addcarryx_u64(&x158, &x159, x157, x134, x149); + fiat_p224_addcarryx_u64(&x160, &x161, x159, x136, x151); + fiat_p224_addcarryx_u64(&x162, &x163, x161, x138, x153); + fiat_p224_addcarryx_u64(&x164, &x165, x163, x140, x155); + fiat_p224_mulx_u64(&x166, &x167, x156, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x168, &x169, x166, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x170, &x171, x166, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x172, &x173, x166, UINT64_C(0xffffffff00000000)); + fiat_p224_addcarryx_u64(&x174, &x175, 0x0, x173, x170); + fiat_p224_addcarryx_u64(&x176, &x177, x175, x171, x168); + x178 = (x177 + x169); + fiat_p224_addcarryx_u64(&x179, &x180, 0x0, x156, x166); + fiat_p224_addcarryx_u64(&x181, &x182, x180, x158, x172); + fiat_p224_addcarryx_u64(&x183, &x184, x182, x160, x174); + fiat_p224_addcarryx_u64(&x185, &x186, x184, x162, x176); + fiat_p224_addcarryx_u64(&x187, &x188, x186, x164, x178); + x189 = ((uint64_t)x188 + x165); + fiat_p224_subborrowx_u64(&x190, &x191, 0x0, x181, 0x1); + fiat_p224_subborrowx_u64(&x192, &x193, x191, x183, UINT64_C(0xffffffff00000000)); + fiat_p224_subborrowx_u64(&x194, &x195, x193, x185, UINT64_C(0xffffffffffffffff)); + fiat_p224_subborrowx_u64(&x196, &x197, x195, x187, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u64(&x198, &x199, x197, x189, 0x0); + fiat_p224_cmovznz_u64(&x200, x199, x190, x181); + fiat_p224_cmovznz_u64(&x201, x199, x192, x183); + fiat_p224_cmovznz_u64(&x202, x199, x194, x185); + fiat_p224_cmovznz_u64(&x203, x199, x196, x187); + out1[0] = x200; + out1[1] = x201; + out1[2] = x202; + out1[3] = x203; +} + +/* + * The function fiat_p224_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p224_add(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { + uint64_t x1; + fiat_p224_uint1 x2; + uint64_t x3; + fiat_p224_uint1 x4; + uint64_t x5; + fiat_p224_uint1 x6; + uint64_t x7; + fiat_p224_uint1 x8; + uint64_t x9; + fiat_p224_uint1 x10; + uint64_t x11; + fiat_p224_uint1 x12; + uint64_t x13; + fiat_p224_uint1 x14; + uint64_t x15; + fiat_p224_uint1 x16; + uint64_t x17; + fiat_p224_uint1 x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + fiat_p224_addcarryx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_p224_addcarryx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_p224_addcarryx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_p224_addcarryx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_p224_subborrowx_u64(&x9, &x10, 0x0, x1, 0x1); + fiat_p224_subborrowx_u64(&x11, &x12, x10, x3, UINT64_C(0xffffffff00000000)); + fiat_p224_subborrowx_u64(&x13, &x14, x12, x5, UINT64_C(0xffffffffffffffff)); + fiat_p224_subborrowx_u64(&x15, &x16, x14, x7, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u64(&x17, &x18, x16, x8, 0x0); + fiat_p224_cmovznz_u64(&x19, x18, x9, x1); + fiat_p224_cmovznz_u64(&x20, x18, x11, x3); + fiat_p224_cmovznz_u64(&x21, x18, x13, x5); + fiat_p224_cmovznz_u64(&x22, x18, x15, x7); + out1[0] = x19; + out1[1] = x20; + out1[2] = x21; + out1[3] = x22; +} + +/* + * The function fiat_p224_sub subtracts two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p224_sub(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { + uint64_t x1; + fiat_p224_uint1 x2; + uint64_t x3; + fiat_p224_uint1 x4; + uint64_t x5; + fiat_p224_uint1 x6; + uint64_t x7; + fiat_p224_uint1 x8; + uint64_t x9; + uint64_t x10; + fiat_p224_uint1 x11; + uint64_t x12; + fiat_p224_uint1 x13; + uint64_t x14; + fiat_p224_uint1 x15; + uint64_t x16; + fiat_p224_uint1 x17; + fiat_p224_subborrowx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_p224_subborrowx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_p224_subborrowx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_p224_subborrowx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_p224_cmovznz_u64(&x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_p224_addcarryx_u64(&x10, &x11, 0x0, x1, (fiat_p224_uint1)(x9 & 0x1)); + fiat_p224_addcarryx_u64(&x12, &x13, x11, x3, (x9 & UINT64_C(0xffffffff00000000))); + fiat_p224_addcarryx_u64(&x14, &x15, x13, x5, x9); + fiat_p224_addcarryx_u64(&x16, &x17, x15, x7, (x9 & UINT32_C(0xffffffff))); + out1[0] = x10; + out1[1] = x12; + out1[2] = x14; + out1[3] = x16; +} + +/* + * The function fiat_p224_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p224_opp(uint64_t out1[4], const uint64_t arg1[4]) { + uint64_t x1; + fiat_p224_uint1 x2; + uint64_t x3; + fiat_p224_uint1 x4; + uint64_t x5; + fiat_p224_uint1 x6; + uint64_t x7; + fiat_p224_uint1 x8; + uint64_t x9; + uint64_t x10; + fiat_p224_uint1 x11; + uint64_t x12; + fiat_p224_uint1 x13; + uint64_t x14; + fiat_p224_uint1 x15; + uint64_t x16; + fiat_p224_uint1 x17; + fiat_p224_subborrowx_u64(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_p224_subborrowx_u64(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_p224_subborrowx_u64(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_p224_subborrowx_u64(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_p224_cmovznz_u64(&x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_p224_addcarryx_u64(&x10, &x11, 0x0, x1, (fiat_p224_uint1)(x9 & 0x1)); + fiat_p224_addcarryx_u64(&x12, &x13, x11, x3, (x9 & UINT64_C(0xffffffff00000000))); + fiat_p224_addcarryx_u64(&x14, &x15, x13, x5, x9); + fiat_p224_addcarryx_u64(&x16, &x17, x15, x7, (x9 & UINT32_C(0xffffffff))); + out1[0] = x10; + out1[1] = x12; + out1[2] = x14; + out1[3] = x16; +} + +/* + * The function fiat_p224_from_montgomery translates a field element out of the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^64)⁻¹ mod m)^4) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p224_from_montgomery(uint64_t out1[4], const uint64_t arg1[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + fiat_p224_uint1 x11; + uint64_t x12; + fiat_p224_uint1 x13; + uint64_t x14; + fiat_p224_uint1 x15; + uint64_t x16; + fiat_p224_uint1 x17; + uint64_t x18; + fiat_p224_uint1 x19; + uint64_t x20; + fiat_p224_uint1 x21; + uint64_t x22; + fiat_p224_uint1 x23; + uint64_t x24; + fiat_p224_uint1 x25; + uint64_t x26; + fiat_p224_uint1 x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint64_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + fiat_p224_uint1 x37; + uint64_t x38; + fiat_p224_uint1 x39; + uint64_t x40; + fiat_p224_uint1 x41; + uint64_t x42; + fiat_p224_uint1 x43; + uint64_t x44; + fiat_p224_uint1 x45; + uint64_t x46; + fiat_p224_uint1 x47; + uint64_t x48; + fiat_p224_uint1 x49; + uint64_t x50; + fiat_p224_uint1 x51; + uint64_t x52; + fiat_p224_uint1 x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint64_t x57; + uint64_t x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + uint64_t x62; + fiat_p224_uint1 x63; + uint64_t x64; + fiat_p224_uint1 x65; + uint64_t x66; + fiat_p224_uint1 x67; + uint64_t x68; + fiat_p224_uint1 x69; + uint64_t x70; + fiat_p224_uint1 x71; + uint64_t x72; + fiat_p224_uint1 x73; + uint64_t x74; + fiat_p224_uint1 x75; + uint64_t x76; + fiat_p224_uint1 x77; + uint64_t x78; + fiat_p224_uint1 x79; + uint64_t x80; + uint64_t x81; + uint64_t x82; + uint64_t x83; + uint64_t x84; + uint64_t x85; + uint64_t x86; + uint64_t x87; + uint64_t x88; + fiat_p224_uint1 x89; + uint64_t x90; + fiat_p224_uint1 x91; + uint64_t x92; + fiat_p224_uint1 x93; + uint64_t x94; + fiat_p224_uint1 x95; + uint64_t x96; + fiat_p224_uint1 x97; + uint64_t x98; + fiat_p224_uint1 x99; + uint64_t x100; + uint64_t x101; + fiat_p224_uint1 x102; + uint64_t x103; + fiat_p224_uint1 x104; + uint64_t x105; + fiat_p224_uint1 x106; + uint64_t x107; + fiat_p224_uint1 x108; + uint64_t x109; + fiat_p224_uint1 x110; + uint64_t x111; + uint64_t x112; + uint64_t x113; + uint64_t x114; + x1 = (arg1[0]); + fiat_p224_mulx_u64(&x2, &x3, x1, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x4, &x5, x2, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x6, &x7, x2, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x8, &x9, x2, UINT64_C(0xffffffff00000000)); + fiat_p224_addcarryx_u64(&x10, &x11, 0x0, x9, x6); + fiat_p224_addcarryx_u64(&x12, &x13, x11, x7, x4); + fiat_p224_addcarryx_u64(&x14, &x15, 0x0, x1, x2); + fiat_p224_addcarryx_u64(&x16, &x17, x15, 0x0, x8); + fiat_p224_addcarryx_u64(&x18, &x19, x17, 0x0, x10); + fiat_p224_addcarryx_u64(&x20, &x21, x19, 0x0, x12); + fiat_p224_addcarryx_u64(&x22, &x23, 0x0, x16, (arg1[1])); + fiat_p224_addcarryx_u64(&x24, &x25, x23, x18, 0x0); + fiat_p224_addcarryx_u64(&x26, &x27, x25, x20, 0x0); + fiat_p224_mulx_u64(&x28, &x29, x22, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x30, &x31, x28, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x32, &x33, x28, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x34, &x35, x28, UINT64_C(0xffffffff00000000)); + fiat_p224_addcarryx_u64(&x36, &x37, 0x0, x35, x32); + fiat_p224_addcarryx_u64(&x38, &x39, x37, x33, x30); + fiat_p224_addcarryx_u64(&x40, &x41, 0x0, x22, x28); + fiat_p224_addcarryx_u64(&x42, &x43, x41, x24, x34); + fiat_p224_addcarryx_u64(&x44, &x45, x43, x26, x36); + fiat_p224_addcarryx_u64(&x46, &x47, x45, (x27 + (x21 + (x13 + x5))), x38); + fiat_p224_addcarryx_u64(&x48, &x49, 0x0, x42, (arg1[2])); + fiat_p224_addcarryx_u64(&x50, &x51, x49, x44, 0x0); + fiat_p224_addcarryx_u64(&x52, &x53, x51, x46, 0x0); + fiat_p224_mulx_u64(&x54, &x55, x48, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x56, &x57, x54, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x58, &x59, x54, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x60, &x61, x54, UINT64_C(0xffffffff00000000)); + fiat_p224_addcarryx_u64(&x62, &x63, 0x0, x61, x58); + fiat_p224_addcarryx_u64(&x64, &x65, x63, x59, x56); + fiat_p224_addcarryx_u64(&x66, &x67, 0x0, x48, x54); + fiat_p224_addcarryx_u64(&x68, &x69, x67, x50, x60); + fiat_p224_addcarryx_u64(&x70, &x71, x69, x52, x62); + fiat_p224_addcarryx_u64(&x72, &x73, x71, (x53 + (x47 + (x39 + x31))), x64); + fiat_p224_addcarryx_u64(&x74, &x75, 0x0, x68, (arg1[3])); + fiat_p224_addcarryx_u64(&x76, &x77, x75, x70, 0x0); + fiat_p224_addcarryx_u64(&x78, &x79, x77, x72, 0x0); + fiat_p224_mulx_u64(&x80, &x81, x74, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x82, &x83, x80, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x84, &x85, x80, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x86, &x87, x80, UINT64_C(0xffffffff00000000)); + fiat_p224_addcarryx_u64(&x88, &x89, 0x0, x87, x84); + fiat_p224_addcarryx_u64(&x90, &x91, x89, x85, x82); + fiat_p224_addcarryx_u64(&x92, &x93, 0x0, x74, x80); + fiat_p224_addcarryx_u64(&x94, &x95, x93, x76, x86); + fiat_p224_addcarryx_u64(&x96, &x97, x95, x78, x88); + fiat_p224_addcarryx_u64(&x98, &x99, x97, (x79 + (x73 + (x65 + x57))), x90); + x100 = (x99 + (x91 + x83)); + fiat_p224_subborrowx_u64(&x101, &x102, 0x0, x94, 0x1); + fiat_p224_subborrowx_u64(&x103, &x104, x102, x96, UINT64_C(0xffffffff00000000)); + fiat_p224_subborrowx_u64(&x105, &x106, x104, x98, UINT64_C(0xffffffffffffffff)); + fiat_p224_subborrowx_u64(&x107, &x108, x106, x100, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u64(&x109, &x110, x108, 0x0, 0x0); + fiat_p224_cmovznz_u64(&x111, x110, x101, x94); + fiat_p224_cmovznz_u64(&x112, x110, x103, x96); + fiat_p224_cmovznz_u64(&x113, x110, x105, x98); + fiat_p224_cmovznz_u64(&x114, x110, x107, x100); + out1[0] = x111; + out1[1] = x112; + out1[2] = x113; + out1[3] = x114; +} + +/* + * The function fiat_p224_to_montgomery translates a field element into the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p224_to_montgomery(uint64_t out1[4], const uint64_t arg1[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + fiat_p224_uint1 x14; + uint64_t x15; + fiat_p224_uint1 x16; + uint64_t x17; + fiat_p224_uint1 x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + fiat_p224_uint1 x28; + uint64_t x29; + fiat_p224_uint1 x30; + uint64_t x31; + fiat_p224_uint1 x32; + uint64_t x33; + fiat_p224_uint1 x34; + uint64_t x35; + fiat_p224_uint1 x36; + uint64_t x37; + fiat_p224_uint1 x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + fiat_p224_uint1 x48; + uint64_t x49; + fiat_p224_uint1 x50; + uint64_t x51; + fiat_p224_uint1 x52; + uint64_t x53; + fiat_p224_uint1 x54; + uint64_t x55; + fiat_p224_uint1 x56; + uint64_t x57; + fiat_p224_uint1 x58; + uint64_t x59; + fiat_p224_uint1 x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + uint64_t x65; + uint64_t x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + fiat_p224_uint1 x70; + uint64_t x71; + fiat_p224_uint1 x72; + uint64_t x73; + fiat_p224_uint1 x74; + uint64_t x75; + fiat_p224_uint1 x76; + uint64_t x77; + fiat_p224_uint1 x78; + uint64_t x79; + fiat_p224_uint1 x80; + uint64_t x81; + uint64_t x82; + uint64_t x83; + uint64_t x84; + uint64_t x85; + uint64_t x86; + uint64_t x87; + uint64_t x88; + uint64_t x89; + fiat_p224_uint1 x90; + uint64_t x91; + fiat_p224_uint1 x92; + uint64_t x93; + fiat_p224_uint1 x94; + uint64_t x95; + fiat_p224_uint1 x96; + uint64_t x97; + fiat_p224_uint1 x98; + uint64_t x99; + fiat_p224_uint1 x100; + uint64_t x101; + fiat_p224_uint1 x102; + uint64_t x103; + uint64_t x104; + uint64_t x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + uint64_t x109; + uint64_t x110; + uint64_t x111; + fiat_p224_uint1 x112; + uint64_t x113; + fiat_p224_uint1 x114; + uint64_t x115; + fiat_p224_uint1 x116; + uint64_t x117; + fiat_p224_uint1 x118; + uint64_t x119; + fiat_p224_uint1 x120; + uint64_t x121; + fiat_p224_uint1 x122; + uint64_t x123; + uint64_t x124; + uint64_t x125; + uint64_t x126; + uint64_t x127; + uint64_t x128; + uint64_t x129; + uint64_t x130; + uint64_t x131; + fiat_p224_uint1 x132; + uint64_t x133; + fiat_p224_uint1 x134; + uint64_t x135; + fiat_p224_uint1 x136; + uint64_t x137; + fiat_p224_uint1 x138; + uint64_t x139; + fiat_p224_uint1 x140; + uint64_t x141; + fiat_p224_uint1 x142; + uint64_t x143; + fiat_p224_uint1 x144; + uint64_t x145; + uint64_t x146; + uint64_t x147; + uint64_t x148; + uint64_t x149; + uint64_t x150; + uint64_t x151; + uint64_t x152; + uint64_t x153; + fiat_p224_uint1 x154; + uint64_t x155; + fiat_p224_uint1 x156; + uint64_t x157; + fiat_p224_uint1 x158; + uint64_t x159; + fiat_p224_uint1 x160; + uint64_t x161; + fiat_p224_uint1 x162; + uint64_t x163; + fiat_p224_uint1 x164; + uint64_t x165; + uint64_t x166; + fiat_p224_uint1 x167; + uint64_t x168; + fiat_p224_uint1 x169; + uint64_t x170; + fiat_p224_uint1 x171; + uint64_t x172; + fiat_p224_uint1 x173; + uint64_t x174; + fiat_p224_uint1 x175; + uint64_t x176; + uint64_t x177; + uint64_t x178; + uint64_t x179; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[0]); + fiat_p224_mulx_u64(&x5, &x6, x4, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x7, &x8, x4, UINT64_C(0xfffffffe00000000)); + fiat_p224_mulx_u64(&x9, &x10, x4, UINT64_C(0xffffffff00000000)); + fiat_p224_mulx_u64(&x11, &x12, x4, UINT64_C(0xffffffff00000001)); + fiat_p224_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + fiat_p224_addcarryx_u64(&x15, &x16, x14, x10, x7); + fiat_p224_addcarryx_u64(&x17, &x18, x16, x8, x5); + fiat_p224_mulx_u64(&x19, &x20, x11, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x21, &x22, x19, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x23, &x24, x19, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x25, &x26, x19, UINT64_C(0xffffffff00000000)); + fiat_p224_addcarryx_u64(&x27, &x28, 0x0, x26, x23); + fiat_p224_addcarryx_u64(&x29, &x30, x28, x24, x21); + fiat_p224_addcarryx_u64(&x31, &x32, 0x0, x11, x19); + fiat_p224_addcarryx_u64(&x33, &x34, x32, x13, x25); + fiat_p224_addcarryx_u64(&x35, &x36, x34, x15, x27); + fiat_p224_addcarryx_u64(&x37, &x38, x36, x17, x29); + fiat_p224_mulx_u64(&x39, &x40, x1, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x41, &x42, x1, UINT64_C(0xfffffffe00000000)); + fiat_p224_mulx_u64(&x43, &x44, x1, UINT64_C(0xffffffff00000000)); + fiat_p224_mulx_u64(&x45, &x46, x1, UINT64_C(0xffffffff00000001)); + fiat_p224_addcarryx_u64(&x47, &x48, 0x0, x46, x43); + fiat_p224_addcarryx_u64(&x49, &x50, x48, x44, x41); + fiat_p224_addcarryx_u64(&x51, &x52, x50, x42, x39); + fiat_p224_addcarryx_u64(&x53, &x54, 0x0, x33, x45); + fiat_p224_addcarryx_u64(&x55, &x56, x54, x35, x47); + fiat_p224_addcarryx_u64(&x57, &x58, x56, x37, x49); + fiat_p224_addcarryx_u64(&x59, &x60, x58, ((x38 + (x18 + x6)) + (x30 + x22)), x51); + fiat_p224_mulx_u64(&x61, &x62, x53, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x63, &x64, x61, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x65, &x66, x61, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x67, &x68, x61, UINT64_C(0xffffffff00000000)); + fiat_p224_addcarryx_u64(&x69, &x70, 0x0, x68, x65); + fiat_p224_addcarryx_u64(&x71, &x72, x70, x66, x63); + fiat_p224_addcarryx_u64(&x73, &x74, 0x0, x53, x61); + fiat_p224_addcarryx_u64(&x75, &x76, x74, x55, x67); + fiat_p224_addcarryx_u64(&x77, &x78, x76, x57, x69); + fiat_p224_addcarryx_u64(&x79, &x80, x78, x59, x71); + fiat_p224_mulx_u64(&x81, &x82, x2, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x83, &x84, x2, UINT64_C(0xfffffffe00000000)); + fiat_p224_mulx_u64(&x85, &x86, x2, UINT64_C(0xffffffff00000000)); + fiat_p224_mulx_u64(&x87, &x88, x2, UINT64_C(0xffffffff00000001)); + fiat_p224_addcarryx_u64(&x89, &x90, 0x0, x88, x85); + fiat_p224_addcarryx_u64(&x91, &x92, x90, x86, x83); + fiat_p224_addcarryx_u64(&x93, &x94, x92, x84, x81); + fiat_p224_addcarryx_u64(&x95, &x96, 0x0, x75, x87); + fiat_p224_addcarryx_u64(&x97, &x98, x96, x77, x89); + fiat_p224_addcarryx_u64(&x99, &x100, x98, x79, x91); + fiat_p224_addcarryx_u64(&x101, &x102, x100, ((x80 + (x60 + (x52 + x40))) + (x72 + x64)), x93); + fiat_p224_mulx_u64(&x103, &x104, x95, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x105, &x106, x103, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x107, &x108, x103, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x109, &x110, x103, UINT64_C(0xffffffff00000000)); + fiat_p224_addcarryx_u64(&x111, &x112, 0x0, x110, x107); + fiat_p224_addcarryx_u64(&x113, &x114, x112, x108, x105); + fiat_p224_addcarryx_u64(&x115, &x116, 0x0, x95, x103); + fiat_p224_addcarryx_u64(&x117, &x118, x116, x97, x109); + fiat_p224_addcarryx_u64(&x119, &x120, x118, x99, x111); + fiat_p224_addcarryx_u64(&x121, &x122, x120, x101, x113); + fiat_p224_mulx_u64(&x123, &x124, x3, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x125, &x126, x3, UINT64_C(0xfffffffe00000000)); + fiat_p224_mulx_u64(&x127, &x128, x3, UINT64_C(0xffffffff00000000)); + fiat_p224_mulx_u64(&x129, &x130, x3, UINT64_C(0xffffffff00000001)); + fiat_p224_addcarryx_u64(&x131, &x132, 0x0, x130, x127); + fiat_p224_addcarryx_u64(&x133, &x134, x132, x128, x125); + fiat_p224_addcarryx_u64(&x135, &x136, x134, x126, x123); + fiat_p224_addcarryx_u64(&x137, &x138, 0x0, x117, x129); + fiat_p224_addcarryx_u64(&x139, &x140, x138, x119, x131); + fiat_p224_addcarryx_u64(&x141, &x142, x140, x121, x133); + fiat_p224_addcarryx_u64(&x143, &x144, x142, ((x122 + (x102 + (x94 + x82))) + (x114 + x106)), x135); + fiat_p224_mulx_u64(&x145, &x146, x137, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x147, &x148, x145, UINT32_C(0xffffffff)); + fiat_p224_mulx_u64(&x149, &x150, x145, UINT64_C(0xffffffffffffffff)); + fiat_p224_mulx_u64(&x151, &x152, x145, UINT64_C(0xffffffff00000000)); + fiat_p224_addcarryx_u64(&x153, &x154, 0x0, x152, x149); + fiat_p224_addcarryx_u64(&x155, &x156, x154, x150, x147); + fiat_p224_addcarryx_u64(&x157, &x158, 0x0, x137, x145); + fiat_p224_addcarryx_u64(&x159, &x160, x158, x139, x151); + fiat_p224_addcarryx_u64(&x161, &x162, x160, x141, x153); + fiat_p224_addcarryx_u64(&x163, &x164, x162, x143, x155); + x165 = ((x164 + (x144 + (x136 + x124))) + (x156 + x148)); + fiat_p224_subborrowx_u64(&x166, &x167, 0x0, x159, 0x1); + fiat_p224_subborrowx_u64(&x168, &x169, x167, x161, UINT64_C(0xffffffff00000000)); + fiat_p224_subborrowx_u64(&x170, &x171, x169, x163, UINT64_C(0xffffffffffffffff)); + fiat_p224_subborrowx_u64(&x172, &x173, x171, x165, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u64(&x174, &x175, x173, 0x0, 0x0); + fiat_p224_cmovznz_u64(&x176, x175, x166, x159); + fiat_p224_cmovznz_u64(&x177, x175, x168, x161); + fiat_p224_cmovznz_u64(&x178, x175, x170, x163); + fiat_p224_cmovznz_u64(&x179, x175, x172, x165); + out1[0] = x176; + out1[1] = x177; + out1[2] = x178; + out1[3] = x179; +} + +/* + * The function fiat_p224_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_p224_nonzero(uint64_t* out1, const uint64_t arg1[4]) { + uint64_t x1; + x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | (arg1[3])))); + *out1 = x1; +} + +/* + * The function fiat_p224_selectznz is a multi-limb conditional select. + * Postconditions: + * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p224_selectznz(uint64_t out1[4], fiat_p224_uint1 arg1, const uint64_t arg2[4], const uint64_t arg3[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + fiat_p224_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0])); + fiat_p224_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1])); + fiat_p224_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2])); + fiat_p224_cmovznz_u64(&x4, arg1, (arg2[3]), (arg3[3])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; +} + +/* + * The function fiat_p224_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..27] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + */ +static void fiat_p224_to_bytes(uint8_t out1[28], const uint64_t arg1[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint8_t x5; + uint64_t x6; + uint8_t x7; + uint64_t x8; + uint8_t x9; + uint64_t x10; + uint8_t x11; + uint64_t x12; + uint8_t x13; + uint64_t x14; + uint8_t x15; + uint64_t x16; + uint8_t x17; + uint8_t x18; + uint8_t x19; + uint64_t x20; + uint8_t x21; + uint64_t x22; + uint8_t x23; + uint64_t x24; + uint8_t x25; + uint64_t x26; + uint8_t x27; + uint64_t x28; + uint8_t x29; + uint64_t x30; + uint8_t x31; + uint8_t x32; + uint8_t x33; + uint64_t x34; + uint8_t x35; + uint64_t x36; + uint8_t x37; + uint64_t x38; + uint8_t x39; + uint64_t x40; + uint8_t x41; + uint64_t x42; + uint8_t x43; + uint64_t x44; + uint8_t x45; + uint8_t x46; + uint8_t x47; + uint64_t x48; + uint8_t x49; + uint64_t x50; + uint8_t x51; + uint8_t x52; + x1 = (arg1[3]); + x2 = (arg1[2]); + x3 = (arg1[1]); + x4 = (arg1[0]); + x5 = (uint8_t)(x4 & UINT8_C(0xff)); + x6 = (x4 >> 8); + x7 = (uint8_t)(x6 & UINT8_C(0xff)); + x8 = (x6 >> 8); + x9 = (uint8_t)(x8 & UINT8_C(0xff)); + x10 = (x8 >> 8); + x11 = (uint8_t)(x10 & UINT8_C(0xff)); + x12 = (x10 >> 8); + x13 = (uint8_t)(x12 & UINT8_C(0xff)); + x14 = (x12 >> 8); + x15 = (uint8_t)(x14 & UINT8_C(0xff)); + x16 = (x14 >> 8); + x17 = (uint8_t)(x16 & UINT8_C(0xff)); + x18 = (uint8_t)(x16 >> 8); + x19 = (uint8_t)(x3 & UINT8_C(0xff)); + x20 = (x3 >> 8); + x21 = (uint8_t)(x20 & UINT8_C(0xff)); + x22 = (x20 >> 8); + x23 = (uint8_t)(x22 & UINT8_C(0xff)); + x24 = (x22 >> 8); + x25 = (uint8_t)(x24 & UINT8_C(0xff)); + x26 = (x24 >> 8); + x27 = (uint8_t)(x26 & UINT8_C(0xff)); + x28 = (x26 >> 8); + x29 = (uint8_t)(x28 & UINT8_C(0xff)); + x30 = (x28 >> 8); + x31 = (uint8_t)(x30 & UINT8_C(0xff)); + x32 = (uint8_t)(x30 >> 8); + x33 = (uint8_t)(x2 & UINT8_C(0xff)); + x34 = (x2 >> 8); + x35 = (uint8_t)(x34 & UINT8_C(0xff)); + x36 = (x34 >> 8); + x37 = (uint8_t)(x36 & UINT8_C(0xff)); + x38 = (x36 >> 8); + x39 = (uint8_t)(x38 & UINT8_C(0xff)); + x40 = (x38 >> 8); + x41 = (uint8_t)(x40 & UINT8_C(0xff)); + x42 = (x40 >> 8); + x43 = (uint8_t)(x42 & UINT8_C(0xff)); + x44 = (x42 >> 8); + x45 = (uint8_t)(x44 & UINT8_C(0xff)); + x46 = (uint8_t)(x44 >> 8); + x47 = (uint8_t)(x1 & UINT8_C(0xff)); + x48 = (x1 >> 8); + x49 = (uint8_t)(x48 & UINT8_C(0xff)); + x50 = (x48 >> 8); + x51 = (uint8_t)(x50 & UINT8_C(0xff)); + x52 = (uint8_t)(x50 >> 8); + out1[0] = x5; + out1[1] = x7; + out1[2] = x9; + out1[3] = x11; + out1[4] = x13; + out1[5] = x15; + out1[6] = x17; + out1[7] = x18; + out1[8] = x19; + out1[9] = x21; + out1[10] = x23; + out1[11] = x25; + out1[12] = x27; + out1[13] = x29; + out1[14] = x31; + out1[15] = x32; + out1[16] = x33; + out1[17] = x35; + out1[18] = x37; + out1[19] = x39; + out1[20] = x41; + out1[21] = x43; + out1[22] = x45; + out1[23] = x46; + out1[24] = x47; + out1[25] = x49; + out1[26] = x51; + out1[27] = x52; +} + +/* + * The function fiat_p224_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p224_from_bytes(uint64_t out1[4], const uint8_t arg1[28]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint8_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint8_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint8_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint8_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint64_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + x1 = ((uint64_t)(arg1[27]) << 24); + x2 = ((uint64_t)(arg1[26]) << 16); + x3 = ((uint64_t)(arg1[25]) << 8); + x4 = (arg1[24]); + x5 = ((uint64_t)(arg1[23]) << 56); + x6 = ((uint64_t)(arg1[22]) << 48); + x7 = ((uint64_t)(arg1[21]) << 40); + x8 = ((uint64_t)(arg1[20]) << 32); + x9 = ((uint64_t)(arg1[19]) << 24); + x10 = ((uint64_t)(arg1[18]) << 16); + x11 = ((uint64_t)(arg1[17]) << 8); + x12 = (arg1[16]); + x13 = ((uint64_t)(arg1[15]) << 56); + x14 = ((uint64_t)(arg1[14]) << 48); + x15 = ((uint64_t)(arg1[13]) << 40); + x16 = ((uint64_t)(arg1[12]) << 32); + x17 = ((uint64_t)(arg1[11]) << 24); + x18 = ((uint64_t)(arg1[10]) << 16); + x19 = ((uint64_t)(arg1[9]) << 8); + x20 = (arg1[8]); + x21 = ((uint64_t)(arg1[7]) << 56); + x22 = ((uint64_t)(arg1[6]) << 48); + x23 = ((uint64_t)(arg1[5]) << 40); + x24 = ((uint64_t)(arg1[4]) << 32); + x25 = ((uint64_t)(arg1[3]) << 24); + x26 = ((uint64_t)(arg1[2]) << 16); + x27 = ((uint64_t)(arg1[1]) << 8); + x28 = (arg1[0]); + x29 = (x27 + (uint64_t)x28); + x30 = (x26 + x29); + x31 = (x25 + x30); + x32 = (x24 + x31); + x33 = (x23 + x32); + x34 = (x22 + x33); + x35 = (x21 + x34); + x36 = (x19 + (uint64_t)x20); + x37 = (x18 + x36); + x38 = (x17 + x37); + x39 = (x16 + x38); + x40 = (x15 + x39); + x41 = (x14 + x40); + x42 = (x13 + x41); + x43 = (x11 + (uint64_t)x12); + x44 = (x10 + x43); + x45 = (x9 + x44); + x46 = (x8 + x45); + x47 = (x7 + x46); + x48 = (x6 + x47); + x49 = (x5 + x48); + x50 = (x3 + (uint64_t)x4); + x51 = (x2 + x50); + x52 = (x1 + x51); + out1[0] = x35; + out1[1] = x42; + out1[2] = x49; + out1[3] = x52; +} + +/* + * The function fiat_p224_set_one returns the field element one in the Montgomery domain. + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p224_set_one(uint64_t out1[4]) { + out1[0] = UINT64_C(0xffffffff00000000); + out1[1] = UINT64_C(0xffffffffffffffff); + out1[2] = 0x0; + out1[3] = 0x0; +} + +/* + * The function fiat_p224_msat returns the saturated represtation of the prime modulus. + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p224_msat(uint64_t out1[5]) { + out1[0] = 0x1; + out1[1] = UINT64_C(0xffffffff00000000); + out1[2] = UINT64_C(0xffffffffffffffff); + out1[3] = UINT32_C(0xffffffff); + out1[4] = 0x0; +} + +/* + * The function fiat_p224_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if (log2 m) + 1 < 46 then ⌊(49 * ((log2 m) + 1) + 80) / 17⌋ else ⌊(49 * ((log2 m) + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p224_divstep_precomp(uint64_t out1[4]) { + out1[0] = UINT64_C(0x7ffffffe800001); + out1[1] = UINT64_C(0xff7fffff00800000); + out1[2] = UINT32_C(0xffffff); + out1[3] = UINT32_C(0xff800000); +} + +/* + * The function fiat_p224_divstep computes a divstep. + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p224_divstep(uint64_t* out1, uint64_t out2[5], uint64_t out3[5], uint64_t out4[4], uint64_t out5[4], uint64_t arg1, const uint64_t arg2[5], const uint64_t arg3[5], const uint64_t arg4[4], const uint64_t arg5[4]) { + uint64_t x1; + fiat_p224_uint1 x2; + fiat_p224_uint1 x3; + uint64_t x4; + fiat_p224_uint1 x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + fiat_p224_uint1 x13; + uint64_t x14; + fiat_p224_uint1 x15; + uint64_t x16; + fiat_p224_uint1 x17; + uint64_t x18; + fiat_p224_uint1 x19; + uint64_t x20; + fiat_p224_uint1 x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + fiat_p224_uint1 x32; + uint64_t x33; + fiat_p224_uint1 x34; + uint64_t x35; + fiat_p224_uint1 x36; + uint64_t x37; + fiat_p224_uint1 x38; + uint64_t x39; + fiat_p224_uint1 x40; + uint64_t x41; + fiat_p224_uint1 x42; + uint64_t x43; + fiat_p224_uint1 x44; + uint64_t x45; + fiat_p224_uint1 x46; + uint64_t x47; + fiat_p224_uint1 x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + fiat_p224_uint1 x54; + uint64_t x55; + fiat_p224_uint1 x56; + uint64_t x57; + fiat_p224_uint1 x58; + uint64_t x59; + fiat_p224_uint1 x60; + uint64_t x61; + uint64_t x62; + fiat_p224_uint1 x63; + uint64_t x64; + fiat_p224_uint1 x65; + uint64_t x66; + fiat_p224_uint1 x67; + uint64_t x68; + fiat_p224_uint1 x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + fiat_p224_uint1 x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + fiat_p224_uint1 x81; + uint64_t x82; + fiat_p224_uint1 x83; + uint64_t x84; + fiat_p224_uint1 x85; + uint64_t x86; + fiat_p224_uint1 x87; + uint64_t x88; + fiat_p224_uint1 x89; + uint64_t x90; + uint64_t x91; + uint64_t x92; + uint64_t x93; + uint64_t x94; + fiat_p224_uint1 x95; + uint64_t x96; + fiat_p224_uint1 x97; + uint64_t x98; + fiat_p224_uint1 x99; + uint64_t x100; + fiat_p224_uint1 x101; + uint64_t x102; + fiat_p224_uint1 x103; + uint64_t x104; + fiat_p224_uint1 x105; + uint64_t x106; + fiat_p224_uint1 x107; + uint64_t x108; + fiat_p224_uint1 x109; + uint64_t x110; + fiat_p224_uint1 x111; + uint64_t x112; + fiat_p224_uint1 x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + uint64_t x121; + uint64_t x122; + uint64_t x123; + uint64_t x124; + uint64_t x125; + uint64_t x126; + fiat_p224_addcarryx_u64(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_p224_uint1)((fiat_p224_uint1)(x1 >> 63) & (fiat_p224_uint1)((arg3[0]) & 0x1)); + fiat_p224_addcarryx_u64(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_p224_cmovznz_u64(&x6, x3, arg1, x4); + fiat_p224_cmovznz_u64(&x7, x3, (arg2[0]), (arg3[0])); + fiat_p224_cmovznz_u64(&x8, x3, (arg2[1]), (arg3[1])); + fiat_p224_cmovznz_u64(&x9, x3, (arg2[2]), (arg3[2])); + fiat_p224_cmovznz_u64(&x10, x3, (arg2[3]), (arg3[3])); + fiat_p224_cmovznz_u64(&x11, x3, (arg2[4]), (arg3[4])); + fiat_p224_addcarryx_u64(&x12, &x13, 0x0, 0x1, (~(arg2[0]))); + fiat_p224_addcarryx_u64(&x14, &x15, x13, 0x0, (~(arg2[1]))); + fiat_p224_addcarryx_u64(&x16, &x17, x15, 0x0, (~(arg2[2]))); + fiat_p224_addcarryx_u64(&x18, &x19, x17, 0x0, (~(arg2[3]))); + fiat_p224_addcarryx_u64(&x20, &x21, x19, 0x0, (~(arg2[4]))); + fiat_p224_cmovznz_u64(&x22, x3, (arg3[0]), x12); + fiat_p224_cmovznz_u64(&x23, x3, (arg3[1]), x14); + fiat_p224_cmovznz_u64(&x24, x3, (arg3[2]), x16); + fiat_p224_cmovznz_u64(&x25, x3, (arg3[3]), x18); + fiat_p224_cmovznz_u64(&x26, x3, (arg3[4]), x20); + fiat_p224_cmovznz_u64(&x27, x3, (arg4[0]), (arg5[0])); + fiat_p224_cmovznz_u64(&x28, x3, (arg4[1]), (arg5[1])); + fiat_p224_cmovznz_u64(&x29, x3, (arg4[2]), (arg5[2])); + fiat_p224_cmovznz_u64(&x30, x3, (arg4[3]), (arg5[3])); + fiat_p224_addcarryx_u64(&x31, &x32, 0x0, x27, x27); + fiat_p224_addcarryx_u64(&x33, &x34, x32, x28, x28); + fiat_p224_addcarryx_u64(&x35, &x36, x34, x29, x29); + fiat_p224_addcarryx_u64(&x37, &x38, x36, x30, x30); + fiat_p224_subborrowx_u64(&x39, &x40, 0x0, x31, 0x1); + fiat_p224_subborrowx_u64(&x41, &x42, x40, x33, UINT64_C(0xffffffff00000000)); + fiat_p224_subborrowx_u64(&x43, &x44, x42, x35, UINT64_C(0xffffffffffffffff)); + fiat_p224_subborrowx_u64(&x45, &x46, x44, x37, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u64(&x47, &x48, x46, x38, 0x0); + x49 = (arg4[3]); + x50 = (arg4[2]); + x51 = (arg4[1]); + x52 = (arg4[0]); + fiat_p224_subborrowx_u64(&x53, &x54, 0x0, 0x0, x52); + fiat_p224_subborrowx_u64(&x55, &x56, x54, 0x0, x51); + fiat_p224_subborrowx_u64(&x57, &x58, x56, 0x0, x50); + fiat_p224_subborrowx_u64(&x59, &x60, x58, 0x0, x49); + fiat_p224_cmovznz_u64(&x61, x60, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_p224_addcarryx_u64(&x62, &x63, 0x0, x53, (fiat_p224_uint1)(x61 & 0x1)); + fiat_p224_addcarryx_u64(&x64, &x65, x63, x55, (x61 & UINT64_C(0xffffffff00000000))); + fiat_p224_addcarryx_u64(&x66, &x67, x65, x57, x61); + fiat_p224_addcarryx_u64(&x68, &x69, x67, x59, (x61 & UINT32_C(0xffffffff))); + fiat_p224_cmovznz_u64(&x70, x3, (arg5[0]), x62); + fiat_p224_cmovznz_u64(&x71, x3, (arg5[1]), x64); + fiat_p224_cmovznz_u64(&x72, x3, (arg5[2]), x66); + fiat_p224_cmovznz_u64(&x73, x3, (arg5[3]), x68); + x74 = (fiat_p224_uint1)(x22 & 0x1); + fiat_p224_cmovznz_u64(&x75, x74, 0x0, x7); + fiat_p224_cmovznz_u64(&x76, x74, 0x0, x8); + fiat_p224_cmovznz_u64(&x77, x74, 0x0, x9); + fiat_p224_cmovznz_u64(&x78, x74, 0x0, x10); + fiat_p224_cmovznz_u64(&x79, x74, 0x0, x11); + fiat_p224_addcarryx_u64(&x80, &x81, 0x0, x22, x75); + fiat_p224_addcarryx_u64(&x82, &x83, x81, x23, x76); + fiat_p224_addcarryx_u64(&x84, &x85, x83, x24, x77); + fiat_p224_addcarryx_u64(&x86, &x87, x85, x25, x78); + fiat_p224_addcarryx_u64(&x88, &x89, x87, x26, x79); + fiat_p224_cmovznz_u64(&x90, x74, 0x0, x27); + fiat_p224_cmovznz_u64(&x91, x74, 0x0, x28); + fiat_p224_cmovznz_u64(&x92, x74, 0x0, x29); + fiat_p224_cmovznz_u64(&x93, x74, 0x0, x30); + fiat_p224_addcarryx_u64(&x94, &x95, 0x0, x70, x90); + fiat_p224_addcarryx_u64(&x96, &x97, x95, x71, x91); + fiat_p224_addcarryx_u64(&x98, &x99, x97, x72, x92); + fiat_p224_addcarryx_u64(&x100, &x101, x99, x73, x93); + fiat_p224_subborrowx_u64(&x102, &x103, 0x0, x94, 0x1); + fiat_p224_subborrowx_u64(&x104, &x105, x103, x96, UINT64_C(0xffffffff00000000)); + fiat_p224_subborrowx_u64(&x106, &x107, x105, x98, UINT64_C(0xffffffffffffffff)); + fiat_p224_subborrowx_u64(&x108, &x109, x107, x100, UINT32_C(0xffffffff)); + fiat_p224_subborrowx_u64(&x110, &x111, x109, x101, 0x0); + fiat_p224_addcarryx_u64(&x112, &x113, 0x0, x6, 0x1); + x114 = ((x80 >> 1) | ((x82 << 63) & UINT64_C(0xffffffffffffffff))); + x115 = ((x82 >> 1) | ((x84 << 63) & UINT64_C(0xffffffffffffffff))); + x116 = ((x84 >> 1) | ((x86 << 63) & UINT64_C(0xffffffffffffffff))); + x117 = ((x86 >> 1) | ((x88 << 63) & UINT64_C(0xffffffffffffffff))); + x118 = ((x88 & UINT64_C(0x8000000000000000)) | (x88 >> 1)); + fiat_p224_cmovznz_u64(&x119, x48, x39, x31); + fiat_p224_cmovznz_u64(&x120, x48, x41, x33); + fiat_p224_cmovznz_u64(&x121, x48, x43, x35); + fiat_p224_cmovznz_u64(&x122, x48, x45, x37); + fiat_p224_cmovznz_u64(&x123, x111, x102, x94); + fiat_p224_cmovznz_u64(&x124, x111, x104, x96); + fiat_p224_cmovznz_u64(&x125, x111, x106, x98); + fiat_p224_cmovznz_u64(&x126, x111, x108, x100); + *out1 = x112; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out3[0] = x114; + out3[1] = x115; + out3[2] = x116; + out3[3] = x117; + out3[4] = x118; + out4[0] = x119; + out4[1] = x120; + out4[2] = x121; + out4[3] = x122; + out5[0] = x123; + out5[1] = x124; + out5[2] = x125; + out5[3] = x126; +} + diff --git a/ec/native/p224_stubs.c b/ec/native/p224_stubs.c new file mode 100644 index 00000000..0a5da891 --- /dev/null +++ b/ec/native/p224_stubs.c @@ -0,0 +1,143 @@ +#include "mirage_crypto.h" + +#ifdef ARCH_64BIT +#include "p224_64.h" +#define LIMBS 4 +#define WORD uint64_t +#define WORDSIZE 64 +#else +#include "p224_32.h" +#define LIMBS 7 +#define WORD uint32_t +#define WORDSIZE 32 +#endif + +#define LEN_PRIME 224 +#define CURVE_DESCRIPTION fiat_p224 + +#include "inversion_template.h" +#include "point_operations.h" + +#include + +CAMLprim value mc_p224_sub(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_p224_sub(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p224_add(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_p224_add(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p224_mul(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_p224_mul(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p224_from_bytes(value out, value in) +{ + CAMLparam2(out, in); + fiat_p224_from_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p224_to_bytes(value out, value in) +{ + CAMLparam2(out, in); + fiat_p224_to_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p224_sqr(value out, value in) +{ + CAMLparam2(out, in); + fiat_p224_square(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p224_from_montgomery(value x) +{ + CAMLparam1(x); + WORD *l = Caml_ba_data_val(x); + fiat_p224_from_montgomery(l, l); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p224_to_montgomery(value x) +{ + CAMLparam1(x); + WORD *l = Caml_ba_data_val(x); + fiat_p224_to_montgomery(l, l); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p224_nz(value x) +{ + CAMLparam1(x); + CAMLreturn(Val_bool(fe_nz(Caml_ba_data_val(x)))); +} + +CAMLprim value mc_p224_set_one(value x) +{ + CAMLparam1(x); + fiat_p224_set_one(Caml_ba_data_val(x)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p224_inv(value out, value in) +{ + CAMLparam2(out, in); + inversion(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p224_point_double(value out, value in) +{ + CAMLparam2(out, in); + point_double( + Caml_ba_data_val(Field(out, 0)), + Caml_ba_data_val(Field(out, 1)), + Caml_ba_data_val(Field(out, 2)), + Caml_ba_data_val(Field(in, 0)), + Caml_ba_data_val(Field(in, 1)), + Caml_ba_data_val(Field(in, 2)) + ); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p224_point_add(value out, value p, value q) +{ + CAMLparam3(out, p, q); + point_add( + Caml_ba_data_val(Field(out, 0)), + Caml_ba_data_val(Field(out, 1)), + Caml_ba_data_val(Field(out, 2)), + Caml_ba_data_val(Field(p, 0)), + Caml_ba_data_val(Field(p, 1)), + Caml_ba_data_val(Field(p, 2)), + 0, + Caml_ba_data_val(Field(q, 0)), + Caml_ba_data_val(Field(q, 1)), + Caml_ba_data_val(Field(q, 2)) + ); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p224_select(value out, value bit, value t, value f) +{ + CAMLparam4(out, bit, t, f); + fe_cmovznz( + Caml_ba_data_val(out), + Bool_val(bit), + Caml_ba_data_val(f), + Caml_ba_data_val(t) + ); + CAMLreturn(Val_unit); +} diff --git a/ec/native/p256_32.h b/ec/native/p256_32.h index 2bb3097c..d974c208 100644 --- a/ec/native/p256_32.h +++ b/ec/native/p256_32.h @@ -1,8 +1,8 @@ -/* Autogenerated */ +/* Autogenerated: '../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery' --static --use-value-barrier p256 32 '2^256 - 2^224 + 2^192 + 2^96 - 1' */ /* curve description: p256 */ +/* machine_wordsize = 32 (from "32") */ /* requested operations: (all) */ /* m = 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff (from "2^256 - 2^224 + 2^192 + 2^96 - 1") */ -/* machine_wordsize = 32 (from "32") */ /* */ /* NOTE: In addition to the bounds specified above each function, all */ /* functions synthesized for this Montgomery arithmetic require the */ @@ -10,11 +10,28 @@ /* require the input to be in the unique saturated representation. */ /* All functions also ensure that these two properties are true of */ /* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 32) + (z[2] << 64) + (z[3] << 96) + (z[4] << 128) + (z[5] << 160) + (z[6] << 192) + (z[7] << 224) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ #include typedef unsigned char fiat_p256_uint1; typedef signed char fiat_p256_int1; +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_P256_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint32_t fiat_p256_value_barrier_u32(uint32_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_p256_value_barrier_u32(x) (x) +#endif + /* * The function fiat_p256_addcarryx_u32 is an addition with carry. @@ -31,9 +48,12 @@ typedef signed char fiat_p256_int1; * out2: [0x0 ~> 0x1] */ static void fiat_p256_addcarryx_u32(uint32_t* out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint32_t arg2, uint32_t arg3) { - uint64_t x1 = ((arg1 + (uint64_t)arg2) + arg3); - uint32_t x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); - fiat_p256_uint1 x3 = (fiat_p256_uint1)(x1 >> 32); + uint64_t x1; + uint32_t x2; + fiat_p256_uint1 x3; + x1 = ((arg1 + (uint64_t)arg2) + arg3); + x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + x3 = (fiat_p256_uint1)(x1 >> 32); *out1 = x2; *out2 = x3; } @@ -53,9 +73,12 @@ static void fiat_p256_addcarryx_u32(uint32_t* out1, fiat_p256_uint1* out2, fiat_ * out2: [0x0 ~> 0x1] */ static void fiat_p256_subborrowx_u32(uint32_t* out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint32_t arg2, uint32_t arg3) { - int64_t x1 = ((arg2 - (int64_t)arg1) - arg3); - fiat_p256_int1 x2 = (fiat_p256_int1)(x1 >> 32); - uint32_t x3 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + int64_t x1; + fiat_p256_int1 x2; + uint32_t x3; + x1 = ((arg2 - (int64_t)arg1) - arg3); + x2 = (fiat_p256_int1)(x1 >> 32); + x3 = (uint32_t)(x1 & UINT32_C(0xffffffff)); *out1 = x3; *out2 = (fiat_p256_uint1)(0x0 - x2); } @@ -74,9 +97,12 @@ static void fiat_p256_subborrowx_u32(uint32_t* out1, fiat_p256_uint1* out2, fiat * out2: [0x0 ~> 0xffffffff] */ static void fiat_p256_mulx_u32(uint32_t* out1, uint32_t* out2, uint32_t arg1, uint32_t arg2) { - uint64_t x1 = ((uint64_t)arg1 * arg2); - uint32_t x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); - uint32_t x3 = (uint32_t)(x1 >> 32); + uint64_t x1; + uint32_t x2; + uint32_t x3; + x1 = ((uint64_t)arg1 * arg2); + x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + x3 = (uint32_t)(x1 >> 32); *out1 = x2; *out2 = x3; } @@ -94,9 +120,12 @@ static void fiat_p256_mulx_u32(uint32_t* out1, uint32_t* out2, uint32_t arg1, ui * out1: [0x0 ~> 0xffffffff] */ static void fiat_p256_cmovznz_u32(uint32_t* out1, fiat_p256_uint1 arg1, uint32_t arg2, uint32_t arg3) { - fiat_p256_uint1 x1 = (!(!arg1)); - uint32_t x2 = ((fiat_p256_int1)(0x0 - x1) & UINT32_C(0xffffffff)); - uint32_t x3 = ((x2 & arg3) | ((~x2) & arg2)); + fiat_p256_uint1 x1; + uint32_t x2; + uint32_t x3; + x1 = (!(!arg1)); + x2 = ((fiat_p256_int1)(0x0 - x1) & UINT32_C(0xffffffff)); + x3 = ((fiat_p256_value_barrier_u32(x2) & arg3) | (fiat_p256_value_barrier_u32((~x2)) & arg2)); *out1 = x3; } @@ -116,1046 +145,1028 @@ static void fiat_p256_cmovznz_u32(uint32_t* out1, fiat_p256_uint1 arg1, uint32_t * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_p256_mul(uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { - uint32_t x1 = (arg1[1]); - uint32_t x2 = (arg1[2]); - uint32_t x3 = (arg1[3]); - uint32_t x4 = (arg1[4]); - uint32_t x5 = (arg1[5]); - uint32_t x6 = (arg1[6]); - uint32_t x7 = (arg1[7]); - uint32_t x8 = (arg1[0]); + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; uint32_t x9; uint32_t x10; - fiat_p256_mulx_u32(&x9, &x10, x8, (arg2[7])); uint32_t x11; uint32_t x12; - fiat_p256_mulx_u32(&x11, &x12, x8, (arg2[6])); uint32_t x13; uint32_t x14; - fiat_p256_mulx_u32(&x13, &x14, x8, (arg2[5])); uint32_t x15; uint32_t x16; - fiat_p256_mulx_u32(&x15, &x16, x8, (arg2[4])); uint32_t x17; uint32_t x18; - fiat_p256_mulx_u32(&x17, &x18, x8, (arg2[3])); uint32_t x19; uint32_t x20; - fiat_p256_mulx_u32(&x19, &x20, x8, (arg2[2])); uint32_t x21; uint32_t x22; - fiat_p256_mulx_u32(&x21, &x22, x8, (arg2[1])); uint32_t x23; uint32_t x24; - fiat_p256_mulx_u32(&x23, &x24, x8, (arg2[0])); uint32_t x25; fiat_p256_uint1 x26; - fiat_p256_addcarryx_u32(&x25, &x26, 0x0, x24, x21); uint32_t x27; fiat_p256_uint1 x28; - fiat_p256_addcarryx_u32(&x27, &x28, x26, x22, x19); uint32_t x29; fiat_p256_uint1 x30; - fiat_p256_addcarryx_u32(&x29, &x30, x28, x20, x17); uint32_t x31; fiat_p256_uint1 x32; - fiat_p256_addcarryx_u32(&x31, &x32, x30, x18, x15); uint32_t x33; fiat_p256_uint1 x34; - fiat_p256_addcarryx_u32(&x33, &x34, x32, x16, x13); uint32_t x35; fiat_p256_uint1 x36; - fiat_p256_addcarryx_u32(&x35, &x36, x34, x14, x11); uint32_t x37; fiat_p256_uint1 x38; - fiat_p256_addcarryx_u32(&x37, &x38, x36, x12, x9); uint32_t x39; - fiat_p256_uint1 x40; - fiat_p256_addcarryx_u32(&x39, &x40, x38, x10, 0x0); + uint32_t x40; uint32_t x41; uint32_t x42; - fiat_p256_mulx_u32(&x41, &x42, x23, UINT32_C(0xffffffff)); uint32_t x43; uint32_t x44; - fiat_p256_mulx_u32(&x43, &x44, x23, UINT32_C(0xffffffff)); uint32_t x45; uint32_t x46; - fiat_p256_mulx_u32(&x45, &x46, x23, UINT32_C(0xffffffff)); uint32_t x47; uint32_t x48; - fiat_p256_mulx_u32(&x47, &x48, x23, UINT32_C(0xffffffff)); - uint32_t x49; - fiat_p256_uint1 x50; - fiat_p256_addcarryx_u32(&x49, &x50, 0x0, x48, x45); - uint32_t x51; - fiat_p256_uint1 x52; - fiat_p256_addcarryx_u32(&x51, &x52, x50, x46, x43); + fiat_p256_uint1 x49; + uint32_t x50; + fiat_p256_uint1 x51; + uint32_t x52; uint32_t x53; fiat_p256_uint1 x54; - fiat_p256_addcarryx_u32(&x53, &x54, x52, x44, 0x0); uint32_t x55; fiat_p256_uint1 x56; - fiat_p256_addcarryx_u32(&x55, &x56, 0x0, x23, x47); uint32_t x57; fiat_p256_uint1 x58; - fiat_p256_addcarryx_u32(&x57, &x58, x56, x25, x49); uint32_t x59; fiat_p256_uint1 x60; - fiat_p256_addcarryx_u32(&x59, &x60, x58, x27, x51); uint32_t x61; fiat_p256_uint1 x62; - fiat_p256_addcarryx_u32(&x61, &x62, x60, x29, x53); uint32_t x63; fiat_p256_uint1 x64; - fiat_p256_addcarryx_u32(&x63, &x64, x62, x31, 0x0); uint32_t x65; fiat_p256_uint1 x66; - fiat_p256_addcarryx_u32(&x65, &x66, x64, x33, 0x0); uint32_t x67; fiat_p256_uint1 x68; - fiat_p256_addcarryx_u32(&x67, &x68, x66, x35, x23); uint32_t x69; fiat_p256_uint1 x70; - fiat_p256_addcarryx_u32(&x69, &x70, x68, x37, x41); uint32_t x71; - fiat_p256_uint1 x72; - fiat_p256_addcarryx_u32(&x71, &x72, x70, x39, x42); + uint32_t x72; uint32_t x73; - fiat_p256_uint1 x74; - fiat_p256_addcarryx_u32(&x73, &x74, x72, 0x0, 0x0); + uint32_t x74; uint32_t x75; uint32_t x76; - fiat_p256_mulx_u32(&x75, &x76, x1, (arg2[7])); uint32_t x77; uint32_t x78; - fiat_p256_mulx_u32(&x77, &x78, x1, (arg2[6])); uint32_t x79; uint32_t x80; - fiat_p256_mulx_u32(&x79, &x80, x1, (arg2[5])); uint32_t x81; uint32_t x82; - fiat_p256_mulx_u32(&x81, &x82, x1, (arg2[4])); uint32_t x83; uint32_t x84; - fiat_p256_mulx_u32(&x83, &x84, x1, (arg2[3])); uint32_t x85; uint32_t x86; - fiat_p256_mulx_u32(&x85, &x86, x1, (arg2[2])); uint32_t x87; - uint32_t x88; - fiat_p256_mulx_u32(&x87, &x88, x1, (arg2[1])); + fiat_p256_uint1 x88; uint32_t x89; - uint32_t x90; - fiat_p256_mulx_u32(&x89, &x90, x1, (arg2[0])); + fiat_p256_uint1 x90; uint32_t x91; fiat_p256_uint1 x92; - fiat_p256_addcarryx_u32(&x91, &x92, 0x0, x90, x87); uint32_t x93; fiat_p256_uint1 x94; - fiat_p256_addcarryx_u32(&x93, &x94, x92, x88, x85); uint32_t x95; fiat_p256_uint1 x96; - fiat_p256_addcarryx_u32(&x95, &x96, x94, x86, x83); uint32_t x97; fiat_p256_uint1 x98; - fiat_p256_addcarryx_u32(&x97, &x98, x96, x84, x81); uint32_t x99; fiat_p256_uint1 x100; - fiat_p256_addcarryx_u32(&x99, &x100, x98, x82, x79); uint32_t x101; - fiat_p256_uint1 x102; - fiat_p256_addcarryx_u32(&x101, &x102, x100, x80, x77); - uint32_t x103; - fiat_p256_uint1 x104; - fiat_p256_addcarryx_u32(&x103, &x104, x102, x78, x75); - uint32_t x105; - fiat_p256_uint1 x106; - fiat_p256_addcarryx_u32(&x105, &x106, x104, x76, 0x0); - uint32_t x107; - fiat_p256_uint1 x108; - fiat_p256_addcarryx_u32(&x107, &x108, 0x0, x57, x89); - uint32_t x109; - fiat_p256_uint1 x110; - fiat_p256_addcarryx_u32(&x109, &x110, x108, x59, x91); - uint32_t x111; - fiat_p256_uint1 x112; - fiat_p256_addcarryx_u32(&x111, &x112, x110, x61, x93); - uint32_t x113; - fiat_p256_uint1 x114; - fiat_p256_addcarryx_u32(&x113, &x114, x112, x63, x95); - uint32_t x115; - fiat_p256_uint1 x116; - fiat_p256_addcarryx_u32(&x115, &x116, x114, x65, x97); - uint32_t x117; - fiat_p256_uint1 x118; - fiat_p256_addcarryx_u32(&x117, &x118, x116, x67, x99); - uint32_t x119; - fiat_p256_uint1 x120; - fiat_p256_addcarryx_u32(&x119, &x120, x118, x69, x101); + uint32_t x102; + fiat_p256_uint1 x103; + uint32_t x104; + fiat_p256_uint1 x105; + uint32_t x106; + fiat_p256_uint1 x107; + uint32_t x108; + fiat_p256_uint1 x109; + uint32_t x110; + fiat_p256_uint1 x111; + uint32_t x112; + fiat_p256_uint1 x113; + uint32_t x114; + fiat_p256_uint1 x115; + uint32_t x116; + fiat_p256_uint1 x117; + uint32_t x118; + fiat_p256_uint1 x119; + uint32_t x120; uint32_t x121; - fiat_p256_uint1 x122; - fiat_p256_addcarryx_u32(&x121, &x122, x120, x71, x103); + uint32_t x122; uint32_t x123; - fiat_p256_uint1 x124; - fiat_p256_addcarryx_u32(&x123, &x124, x122, (fiat_p256_uint1)x73, x105); + uint32_t x124; uint32_t x125; uint32_t x126; - fiat_p256_mulx_u32(&x125, &x126, x107, UINT32_C(0xffffffff)); uint32_t x127; uint32_t x128; - fiat_p256_mulx_u32(&x127, &x128, x107, UINT32_C(0xffffffff)); - uint32_t x129; + fiat_p256_uint1 x129; uint32_t x130; - fiat_p256_mulx_u32(&x129, &x130, x107, UINT32_C(0xffffffff)); - uint32_t x131; + fiat_p256_uint1 x131; uint32_t x132; - fiat_p256_mulx_u32(&x131, &x132, x107, UINT32_C(0xffffffff)); uint32_t x133; fiat_p256_uint1 x134; - fiat_p256_addcarryx_u32(&x133, &x134, 0x0, x132, x129); uint32_t x135; fiat_p256_uint1 x136; - fiat_p256_addcarryx_u32(&x135, &x136, x134, x130, x127); uint32_t x137; fiat_p256_uint1 x138; - fiat_p256_addcarryx_u32(&x137, &x138, x136, x128, 0x0); uint32_t x139; fiat_p256_uint1 x140; - fiat_p256_addcarryx_u32(&x139, &x140, 0x0, x107, x131); uint32_t x141; fiat_p256_uint1 x142; - fiat_p256_addcarryx_u32(&x141, &x142, x140, x109, x133); uint32_t x143; fiat_p256_uint1 x144; - fiat_p256_addcarryx_u32(&x143, &x144, x142, x111, x135); uint32_t x145; fiat_p256_uint1 x146; - fiat_p256_addcarryx_u32(&x145, &x146, x144, x113, x137); uint32_t x147; fiat_p256_uint1 x148; - fiat_p256_addcarryx_u32(&x147, &x148, x146, x115, 0x0); uint32_t x149; fiat_p256_uint1 x150; - fiat_p256_addcarryx_u32(&x149, &x150, x148, x117, 0x0); uint32_t x151; - fiat_p256_uint1 x152; - fiat_p256_addcarryx_u32(&x151, &x152, x150, x119, x107); + uint32_t x152; uint32_t x153; - fiat_p256_uint1 x154; - fiat_p256_addcarryx_u32(&x153, &x154, x152, x121, x125); + uint32_t x154; uint32_t x155; - fiat_p256_uint1 x156; - fiat_p256_addcarryx_u32(&x155, &x156, x154, x123, x126); + uint32_t x156; uint32_t x157; - fiat_p256_uint1 x158; - fiat_p256_addcarryx_u32(&x157, &x158, x156, x124, 0x0); + uint32_t x158; uint32_t x159; uint32_t x160; - fiat_p256_mulx_u32(&x159, &x160, x2, (arg2[7])); uint32_t x161; uint32_t x162; - fiat_p256_mulx_u32(&x161, &x162, x2, (arg2[6])); uint32_t x163; uint32_t x164; - fiat_p256_mulx_u32(&x163, &x164, x2, (arg2[5])); uint32_t x165; uint32_t x166; - fiat_p256_mulx_u32(&x165, &x166, x2, (arg2[4])); uint32_t x167; uint32_t x168; - fiat_p256_mulx_u32(&x167, &x168, x2, (arg2[3])); - uint32_t x169; + fiat_p256_uint1 x169; uint32_t x170; - fiat_p256_mulx_u32(&x169, &x170, x2, (arg2[2])); - uint32_t x171; + fiat_p256_uint1 x171; uint32_t x172; - fiat_p256_mulx_u32(&x171, &x172, x2, (arg2[1])); - uint32_t x173; + fiat_p256_uint1 x173; uint32_t x174; - fiat_p256_mulx_u32(&x173, &x174, x2, (arg2[0])); - uint32_t x175; - fiat_p256_uint1 x176; - fiat_p256_addcarryx_u32(&x175, &x176, 0x0, x174, x171); - uint32_t x177; - fiat_p256_uint1 x178; - fiat_p256_addcarryx_u32(&x177, &x178, x176, x172, x169); - uint32_t x179; - fiat_p256_uint1 x180; - fiat_p256_addcarryx_u32(&x179, &x180, x178, x170, x167); - uint32_t x181; - fiat_p256_uint1 x182; - fiat_p256_addcarryx_u32(&x181, &x182, x180, x168, x165); + fiat_p256_uint1 x175; + uint32_t x176; + fiat_p256_uint1 x177; + uint32_t x178; + fiat_p256_uint1 x179; + uint32_t x180; + fiat_p256_uint1 x181; + uint32_t x182; uint32_t x183; fiat_p256_uint1 x184; - fiat_p256_addcarryx_u32(&x183, &x184, x182, x166, x163); uint32_t x185; fiat_p256_uint1 x186; - fiat_p256_addcarryx_u32(&x185, &x186, x184, x164, x161); uint32_t x187; fiat_p256_uint1 x188; - fiat_p256_addcarryx_u32(&x187, &x188, x186, x162, x159); uint32_t x189; fiat_p256_uint1 x190; - fiat_p256_addcarryx_u32(&x189, &x190, x188, x160, 0x0); uint32_t x191; fiat_p256_uint1 x192; - fiat_p256_addcarryx_u32(&x191, &x192, 0x0, x141, x173); uint32_t x193; fiat_p256_uint1 x194; - fiat_p256_addcarryx_u32(&x193, &x194, x192, x143, x175); uint32_t x195; fiat_p256_uint1 x196; - fiat_p256_addcarryx_u32(&x195, &x196, x194, x145, x177); uint32_t x197; fiat_p256_uint1 x198; - fiat_p256_addcarryx_u32(&x197, &x198, x196, x147, x179); uint32_t x199; fiat_p256_uint1 x200; - fiat_p256_addcarryx_u32(&x199, &x200, x198, x149, x181); uint32_t x201; - fiat_p256_uint1 x202; - fiat_p256_addcarryx_u32(&x201, &x202, x200, x151, x183); + uint32_t x202; uint32_t x203; - fiat_p256_uint1 x204; - fiat_p256_addcarryx_u32(&x203, &x204, x202, x153, x185); + uint32_t x204; uint32_t x205; - fiat_p256_uint1 x206; - fiat_p256_addcarryx_u32(&x205, &x206, x204, x155, x187); + uint32_t x206; uint32_t x207; - fiat_p256_uint1 x208; - fiat_p256_addcarryx_u32(&x207, &x208, x206, x157, x189); + uint32_t x208; uint32_t x209; - uint32_t x210; - fiat_p256_mulx_u32(&x209, &x210, x191, UINT32_C(0xffffffff)); + fiat_p256_uint1 x210; uint32_t x211; - uint32_t x212; - fiat_p256_mulx_u32(&x211, &x212, x191, UINT32_C(0xffffffff)); + fiat_p256_uint1 x212; uint32_t x213; uint32_t x214; - fiat_p256_mulx_u32(&x213, &x214, x191, UINT32_C(0xffffffff)); - uint32_t x215; + fiat_p256_uint1 x215; uint32_t x216; - fiat_p256_mulx_u32(&x215, &x216, x191, UINT32_C(0xffffffff)); - uint32_t x217; - fiat_p256_uint1 x218; - fiat_p256_addcarryx_u32(&x217, &x218, 0x0, x216, x213); - uint32_t x219; - fiat_p256_uint1 x220; - fiat_p256_addcarryx_u32(&x219, &x220, x218, x214, x211); - uint32_t x221; - fiat_p256_uint1 x222; - fiat_p256_addcarryx_u32(&x221, &x222, x220, x212, 0x0); - uint32_t x223; - fiat_p256_uint1 x224; - fiat_p256_addcarryx_u32(&x223, &x224, 0x0, x191, x215); - uint32_t x225; - fiat_p256_uint1 x226; - fiat_p256_addcarryx_u32(&x225, &x226, x224, x193, x217); - uint32_t x227; - fiat_p256_uint1 x228; - fiat_p256_addcarryx_u32(&x227, &x228, x226, x195, x219); - uint32_t x229; - fiat_p256_uint1 x230; - fiat_p256_addcarryx_u32(&x229, &x230, x228, x197, x221); - uint32_t x231; - fiat_p256_uint1 x232; - fiat_p256_addcarryx_u32(&x231, &x232, x230, x199, 0x0); + fiat_p256_uint1 x217; + uint32_t x218; + fiat_p256_uint1 x219; + uint32_t x220; + fiat_p256_uint1 x221; + uint32_t x222; + fiat_p256_uint1 x223; + uint32_t x224; + fiat_p256_uint1 x225; + uint32_t x226; + fiat_p256_uint1 x227; + uint32_t x228; + fiat_p256_uint1 x229; + uint32_t x230; + fiat_p256_uint1 x231; + uint32_t x232; uint32_t x233; - fiat_p256_uint1 x234; - fiat_p256_addcarryx_u32(&x233, &x234, x232, x201, 0x0); + uint32_t x234; uint32_t x235; - fiat_p256_uint1 x236; - fiat_p256_addcarryx_u32(&x235, &x236, x234, x203, x191); + uint32_t x236; uint32_t x237; - fiat_p256_uint1 x238; - fiat_p256_addcarryx_u32(&x237, &x238, x236, x205, x209); + uint32_t x238; uint32_t x239; - fiat_p256_uint1 x240; - fiat_p256_addcarryx_u32(&x239, &x240, x238, x207, x210); + uint32_t x240; uint32_t x241; - fiat_p256_uint1 x242; - fiat_p256_addcarryx_u32(&x241, &x242, x240, x208, 0x0); + uint32_t x242; uint32_t x243; uint32_t x244; - fiat_p256_mulx_u32(&x243, &x244, x3, (arg2[7])); uint32_t x245; uint32_t x246; - fiat_p256_mulx_u32(&x245, &x246, x3, (arg2[6])); uint32_t x247; uint32_t x248; - fiat_p256_mulx_u32(&x247, &x248, x3, (arg2[5])); uint32_t x249; - uint32_t x250; - fiat_p256_mulx_u32(&x249, &x250, x3, (arg2[4])); + fiat_p256_uint1 x250; uint32_t x251; - uint32_t x252; - fiat_p256_mulx_u32(&x251, &x252, x3, (arg2[3])); + fiat_p256_uint1 x252; uint32_t x253; - uint32_t x254; - fiat_p256_mulx_u32(&x253, &x254, x3, (arg2[2])); + fiat_p256_uint1 x254; uint32_t x255; - uint32_t x256; - fiat_p256_mulx_u32(&x255, &x256, x3, (arg2[1])); + fiat_p256_uint1 x256; uint32_t x257; - uint32_t x258; - fiat_p256_mulx_u32(&x257, &x258, x3, (arg2[0])); + fiat_p256_uint1 x258; uint32_t x259; fiat_p256_uint1 x260; - fiat_p256_addcarryx_u32(&x259, &x260, 0x0, x258, x255); uint32_t x261; fiat_p256_uint1 x262; - fiat_p256_addcarryx_u32(&x261, &x262, x260, x256, x253); uint32_t x263; - fiat_p256_uint1 x264; - fiat_p256_addcarryx_u32(&x263, &x264, x262, x254, x251); - uint32_t x265; - fiat_p256_uint1 x266; - fiat_p256_addcarryx_u32(&x265, &x266, x264, x252, x249); - uint32_t x267; - fiat_p256_uint1 x268; - fiat_p256_addcarryx_u32(&x267, &x268, x266, x250, x247); - uint32_t x269; - fiat_p256_uint1 x270; - fiat_p256_addcarryx_u32(&x269, &x270, x268, x248, x245); - uint32_t x271; - fiat_p256_uint1 x272; - fiat_p256_addcarryx_u32(&x271, &x272, x270, x246, x243); - uint32_t x273; - fiat_p256_uint1 x274; - fiat_p256_addcarryx_u32(&x273, &x274, x272, x244, 0x0); - uint32_t x275; - fiat_p256_uint1 x276; - fiat_p256_addcarryx_u32(&x275, &x276, 0x0, x225, x257); - uint32_t x277; - fiat_p256_uint1 x278; - fiat_p256_addcarryx_u32(&x277, &x278, x276, x227, x259); - uint32_t x279; - fiat_p256_uint1 x280; - fiat_p256_addcarryx_u32(&x279, &x280, x278, x229, x261); - uint32_t x281; - fiat_p256_uint1 x282; - fiat_p256_addcarryx_u32(&x281, &x282, x280, x231, x263); + uint32_t x264; + fiat_p256_uint1 x265; + uint32_t x266; + fiat_p256_uint1 x267; + uint32_t x268; + fiat_p256_uint1 x269; + uint32_t x270; + fiat_p256_uint1 x271; + uint32_t x272; + fiat_p256_uint1 x273; + uint32_t x274; + fiat_p256_uint1 x275; + uint32_t x276; + fiat_p256_uint1 x277; + uint32_t x278; + fiat_p256_uint1 x279; + uint32_t x280; + fiat_p256_uint1 x281; + uint32_t x282; uint32_t x283; - fiat_p256_uint1 x284; - fiat_p256_addcarryx_u32(&x283, &x284, x282, x233, x265); + uint32_t x284; uint32_t x285; - fiat_p256_uint1 x286; - fiat_p256_addcarryx_u32(&x285, &x286, x284, x235, x267); + uint32_t x286; uint32_t x287; - fiat_p256_uint1 x288; - fiat_p256_addcarryx_u32(&x287, &x288, x286, x237, x269); + uint32_t x288; uint32_t x289; - fiat_p256_uint1 x290; - fiat_p256_addcarryx_u32(&x289, &x290, x288, x239, x271); - uint32_t x291; - fiat_p256_uint1 x292; - fiat_p256_addcarryx_u32(&x291, &x292, x290, x241, x273); - uint32_t x293; + uint32_t x290; + fiat_p256_uint1 x291; + uint32_t x292; + fiat_p256_uint1 x293; uint32_t x294; - fiat_p256_mulx_u32(&x293, &x294, x275, UINT32_C(0xffffffff)); uint32_t x295; - uint32_t x296; - fiat_p256_mulx_u32(&x295, &x296, x275, UINT32_C(0xffffffff)); + fiat_p256_uint1 x296; uint32_t x297; - uint32_t x298; - fiat_p256_mulx_u32(&x297, &x298, x275, UINT32_C(0xffffffff)); + fiat_p256_uint1 x298; uint32_t x299; - uint32_t x300; - fiat_p256_mulx_u32(&x299, &x300, x275, UINT32_C(0xffffffff)); + fiat_p256_uint1 x300; uint32_t x301; fiat_p256_uint1 x302; - fiat_p256_addcarryx_u32(&x301, &x302, 0x0, x300, x297); uint32_t x303; fiat_p256_uint1 x304; - fiat_p256_addcarryx_u32(&x303, &x304, x302, x298, x295); uint32_t x305; fiat_p256_uint1 x306; - fiat_p256_addcarryx_u32(&x305, &x306, x304, x296, 0x0); uint32_t x307; fiat_p256_uint1 x308; - fiat_p256_addcarryx_u32(&x307, &x308, 0x0, x275, x299); uint32_t x309; fiat_p256_uint1 x310; - fiat_p256_addcarryx_u32(&x309, &x310, x308, x277, x301); uint32_t x311; fiat_p256_uint1 x312; - fiat_p256_addcarryx_u32(&x311, &x312, x310, x279, x303); uint32_t x313; - fiat_p256_uint1 x314; - fiat_p256_addcarryx_u32(&x313, &x314, x312, x281, x305); + uint32_t x314; uint32_t x315; - fiat_p256_uint1 x316; - fiat_p256_addcarryx_u32(&x315, &x316, x314, x283, 0x0); + uint32_t x316; uint32_t x317; - fiat_p256_uint1 x318; - fiat_p256_addcarryx_u32(&x317, &x318, x316, x285, 0x0); + uint32_t x318; uint32_t x319; - fiat_p256_uint1 x320; - fiat_p256_addcarryx_u32(&x319, &x320, x318, x287, x275); + uint32_t x320; uint32_t x321; - fiat_p256_uint1 x322; - fiat_p256_addcarryx_u32(&x321, &x322, x320, x289, x293); + uint32_t x322; uint32_t x323; - fiat_p256_uint1 x324; - fiat_p256_addcarryx_u32(&x323, &x324, x322, x291, x294); + uint32_t x324; uint32_t x325; - fiat_p256_uint1 x326; - fiat_p256_addcarryx_u32(&x325, &x326, x324, x292, 0x0); + uint32_t x326; uint32_t x327; uint32_t x328; - fiat_p256_mulx_u32(&x327, &x328, x4, (arg2[7])); uint32_t x329; uint32_t x330; - fiat_p256_mulx_u32(&x329, &x330, x4, (arg2[6])); - uint32_t x331; + fiat_p256_uint1 x331; uint32_t x332; - fiat_p256_mulx_u32(&x331, &x332, x4, (arg2[5])); - uint32_t x333; + fiat_p256_uint1 x333; uint32_t x334; - fiat_p256_mulx_u32(&x333, &x334, x4, (arg2[4])); - uint32_t x335; + fiat_p256_uint1 x335; uint32_t x336; - fiat_p256_mulx_u32(&x335, &x336, x4, (arg2[3])); - uint32_t x337; + fiat_p256_uint1 x337; uint32_t x338; - fiat_p256_mulx_u32(&x337, &x338, x4, (arg2[2])); - uint32_t x339; + fiat_p256_uint1 x339; uint32_t x340; - fiat_p256_mulx_u32(&x339, &x340, x4, (arg2[1])); - uint32_t x341; + fiat_p256_uint1 x341; uint32_t x342; - fiat_p256_mulx_u32(&x341, &x342, x4, (arg2[0])); - uint32_t x343; - fiat_p256_uint1 x344; - fiat_p256_addcarryx_u32(&x343, &x344, 0x0, x342, x339); + fiat_p256_uint1 x343; + uint32_t x344; uint32_t x345; fiat_p256_uint1 x346; - fiat_p256_addcarryx_u32(&x345, &x346, x344, x340, x337); uint32_t x347; fiat_p256_uint1 x348; - fiat_p256_addcarryx_u32(&x347, &x348, x346, x338, x335); uint32_t x349; fiat_p256_uint1 x350; - fiat_p256_addcarryx_u32(&x349, &x350, x348, x336, x333); uint32_t x351; fiat_p256_uint1 x352; - fiat_p256_addcarryx_u32(&x351, &x352, x350, x334, x331); uint32_t x353; fiat_p256_uint1 x354; - fiat_p256_addcarryx_u32(&x353, &x354, x352, x332, x329); uint32_t x355; fiat_p256_uint1 x356; - fiat_p256_addcarryx_u32(&x355, &x356, x354, x330, x327); uint32_t x357; fiat_p256_uint1 x358; - fiat_p256_addcarryx_u32(&x357, &x358, x356, x328, 0x0); uint32_t x359; fiat_p256_uint1 x360; - fiat_p256_addcarryx_u32(&x359, &x360, 0x0, x309, x341); uint32_t x361; fiat_p256_uint1 x362; - fiat_p256_addcarryx_u32(&x361, &x362, x360, x311, x343); uint32_t x363; - fiat_p256_uint1 x364; - fiat_p256_addcarryx_u32(&x363, &x364, x362, x313, x345); + uint32_t x364; uint32_t x365; - fiat_p256_uint1 x366; - fiat_p256_addcarryx_u32(&x365, &x366, x364, x315, x347); + uint32_t x366; uint32_t x367; - fiat_p256_uint1 x368; - fiat_p256_addcarryx_u32(&x367, &x368, x366, x317, x349); + uint32_t x368; uint32_t x369; - fiat_p256_uint1 x370; - fiat_p256_addcarryx_u32(&x369, &x370, x368, x319, x351); + uint32_t x370; uint32_t x371; fiat_p256_uint1 x372; - fiat_p256_addcarryx_u32(&x371, &x372, x370, x321, x353); uint32_t x373; fiat_p256_uint1 x374; - fiat_p256_addcarryx_u32(&x373, &x374, x372, x323, x355); uint32_t x375; - fiat_p256_uint1 x376; - fiat_p256_addcarryx_u32(&x375, &x376, x374, x325, x357); - uint32_t x377; + uint32_t x376; + fiat_p256_uint1 x377; uint32_t x378; - fiat_p256_mulx_u32(&x377, &x378, x359, UINT32_C(0xffffffff)); - uint32_t x379; + fiat_p256_uint1 x379; uint32_t x380; - fiat_p256_mulx_u32(&x379, &x380, x359, UINT32_C(0xffffffff)); - uint32_t x381; + fiat_p256_uint1 x381; uint32_t x382; - fiat_p256_mulx_u32(&x381, &x382, x359, UINT32_C(0xffffffff)); - uint32_t x383; + fiat_p256_uint1 x383; uint32_t x384; - fiat_p256_mulx_u32(&x383, &x384, x359, UINT32_C(0xffffffff)); - uint32_t x385; - fiat_p256_uint1 x386; - fiat_p256_addcarryx_u32(&x385, &x386, 0x0, x384, x381); - uint32_t x387; - fiat_p256_uint1 x388; - fiat_p256_addcarryx_u32(&x387, &x388, x386, x382, x379); - uint32_t x389; - fiat_p256_uint1 x390; - fiat_p256_addcarryx_u32(&x389, &x390, x388, x380, 0x0); - uint32_t x391; - fiat_p256_uint1 x392; - fiat_p256_addcarryx_u32(&x391, &x392, 0x0, x359, x383); - uint32_t x393; - fiat_p256_uint1 x394; - fiat_p256_addcarryx_u32(&x393, &x394, x392, x361, x385); + fiat_p256_uint1 x385; + uint32_t x386; + fiat_p256_uint1 x387; + uint32_t x388; + fiat_p256_uint1 x389; + uint32_t x390; + fiat_p256_uint1 x391; + uint32_t x392; + fiat_p256_uint1 x393; + uint32_t x394; uint32_t x395; - fiat_p256_uint1 x396; - fiat_p256_addcarryx_u32(&x395, &x396, x394, x363, x387); + uint32_t x396; uint32_t x397; - fiat_p256_uint1 x398; - fiat_p256_addcarryx_u32(&x397, &x398, x396, x365, x389); + uint32_t x398; uint32_t x399; - fiat_p256_uint1 x400; - fiat_p256_addcarryx_u32(&x399, &x400, x398, x367, 0x0); + uint32_t x400; uint32_t x401; - fiat_p256_uint1 x402; - fiat_p256_addcarryx_u32(&x401, &x402, x400, x369, 0x0); + uint32_t x402; uint32_t x403; - fiat_p256_uint1 x404; - fiat_p256_addcarryx_u32(&x403, &x404, x402, x371, x359); + uint32_t x404; uint32_t x405; - fiat_p256_uint1 x406; - fiat_p256_addcarryx_u32(&x405, &x406, x404, x373, x377); + uint32_t x406; uint32_t x407; - fiat_p256_uint1 x408; - fiat_p256_addcarryx_u32(&x407, &x408, x406, x375, x378); + uint32_t x408; uint32_t x409; - fiat_p256_uint1 x410; - fiat_p256_addcarryx_u32(&x409, &x410, x408, x376, 0x0); + uint32_t x410; uint32_t x411; - uint32_t x412; - fiat_p256_mulx_u32(&x411, &x412, x5, (arg2[7])); + fiat_p256_uint1 x412; uint32_t x413; - uint32_t x414; - fiat_p256_mulx_u32(&x413, &x414, x5, (arg2[6])); + fiat_p256_uint1 x414; uint32_t x415; - uint32_t x416; - fiat_p256_mulx_u32(&x415, &x416, x5, (arg2[5])); + fiat_p256_uint1 x416; uint32_t x417; - uint32_t x418; - fiat_p256_mulx_u32(&x417, &x418, x5, (arg2[4])); + fiat_p256_uint1 x418; uint32_t x419; - uint32_t x420; - fiat_p256_mulx_u32(&x419, &x420, x5, (arg2[3])); + fiat_p256_uint1 x420; uint32_t x421; - uint32_t x422; - fiat_p256_mulx_u32(&x421, &x422, x5, (arg2[2])); + fiat_p256_uint1 x422; uint32_t x423; - uint32_t x424; - fiat_p256_mulx_u32(&x423, &x424, x5, (arg2[1])); + fiat_p256_uint1 x424; uint32_t x425; uint32_t x426; - fiat_p256_mulx_u32(&x425, &x426, x5, (arg2[0])); - uint32_t x427; - fiat_p256_uint1 x428; - fiat_p256_addcarryx_u32(&x427, &x428, 0x0, x426, x423); - uint32_t x429; - fiat_p256_uint1 x430; - fiat_p256_addcarryx_u32(&x429, &x430, x428, x424, x421); - uint32_t x431; - fiat_p256_uint1 x432; - fiat_p256_addcarryx_u32(&x431, &x432, x430, x422, x419); - uint32_t x433; - fiat_p256_uint1 x434; - fiat_p256_addcarryx_u32(&x433, &x434, x432, x420, x417); - uint32_t x435; - fiat_p256_uint1 x436; - fiat_p256_addcarryx_u32(&x435, &x436, x434, x418, x415); - uint32_t x437; - fiat_p256_uint1 x438; - fiat_p256_addcarryx_u32(&x437, &x438, x436, x416, x413); - uint32_t x439; - fiat_p256_uint1 x440; - fiat_p256_addcarryx_u32(&x439, &x440, x438, x414, x411); - uint32_t x441; - fiat_p256_uint1 x442; - fiat_p256_addcarryx_u32(&x441, &x442, x440, x412, 0x0); - uint32_t x443; - fiat_p256_uint1 x444; - fiat_p256_addcarryx_u32(&x443, &x444, 0x0, x393, x425); + fiat_p256_uint1 x427; + uint32_t x428; + fiat_p256_uint1 x429; + uint32_t x430; + fiat_p256_uint1 x431; + uint32_t x432; + fiat_p256_uint1 x433; + uint32_t x434; + fiat_p256_uint1 x435; + uint32_t x436; + fiat_p256_uint1 x437; + uint32_t x438; + fiat_p256_uint1 x439; + uint32_t x440; + fiat_p256_uint1 x441; + uint32_t x442; + fiat_p256_uint1 x443; + uint32_t x444; uint32_t x445; - fiat_p256_uint1 x446; - fiat_p256_addcarryx_u32(&x445, &x446, x444, x395, x427); + uint32_t x446; uint32_t x447; - fiat_p256_uint1 x448; - fiat_p256_addcarryx_u32(&x447, &x448, x446, x397, x429); + uint32_t x448; uint32_t x449; - fiat_p256_uint1 x450; - fiat_p256_addcarryx_u32(&x449, &x450, x448, x399, x431); + uint32_t x450; uint32_t x451; - fiat_p256_uint1 x452; - fiat_p256_addcarryx_u32(&x451, &x452, x450, x401, x433); - uint32_t x453; - fiat_p256_uint1 x454; - fiat_p256_addcarryx_u32(&x453, &x454, x452, x403, x435); - uint32_t x455; - fiat_p256_uint1 x456; - fiat_p256_addcarryx_u32(&x455, &x456, x454, x405, x437); + uint32_t x452; + fiat_p256_uint1 x453; + uint32_t x454; + fiat_p256_uint1 x455; + uint32_t x456; uint32_t x457; fiat_p256_uint1 x458; - fiat_p256_addcarryx_u32(&x457, &x458, x456, x407, x439); uint32_t x459; fiat_p256_uint1 x460; - fiat_p256_addcarryx_u32(&x459, &x460, x458, x409, x441); uint32_t x461; - uint32_t x462; - fiat_p256_mulx_u32(&x461, &x462, x443, UINT32_C(0xffffffff)); + fiat_p256_uint1 x462; uint32_t x463; - uint32_t x464; - fiat_p256_mulx_u32(&x463, &x464, x443, UINT32_C(0xffffffff)); + fiat_p256_uint1 x464; uint32_t x465; - uint32_t x466; - fiat_p256_mulx_u32(&x465, &x466, x443, UINT32_C(0xffffffff)); + fiat_p256_uint1 x466; uint32_t x467; - uint32_t x468; - fiat_p256_mulx_u32(&x467, &x468, x443, UINT32_C(0xffffffff)); + fiat_p256_uint1 x468; uint32_t x469; fiat_p256_uint1 x470; - fiat_p256_addcarryx_u32(&x469, &x470, 0x0, x468, x465); uint32_t x471; fiat_p256_uint1 x472; - fiat_p256_addcarryx_u32(&x471, &x472, x470, x466, x463); uint32_t x473; fiat_p256_uint1 x474; - fiat_p256_addcarryx_u32(&x473, &x474, x472, x464, 0x0); uint32_t x475; - fiat_p256_uint1 x476; - fiat_p256_addcarryx_u32(&x475, &x476, 0x0, x443, x467); + uint32_t x476; uint32_t x477; - fiat_p256_uint1 x478; - fiat_p256_addcarryx_u32(&x477, &x478, x476, x445, x469); + uint32_t x478; uint32_t x479; - fiat_p256_uint1 x480; - fiat_p256_addcarryx_u32(&x479, &x480, x478, x447, x471); + uint32_t x480; uint32_t x481; - fiat_p256_uint1 x482; - fiat_p256_addcarryx_u32(&x481, &x482, x480, x449, x473); + uint32_t x482; uint32_t x483; - fiat_p256_uint1 x484; - fiat_p256_addcarryx_u32(&x483, &x484, x482, x451, 0x0); + uint32_t x484; uint32_t x485; - fiat_p256_uint1 x486; - fiat_p256_addcarryx_u32(&x485, &x486, x484, x453, 0x0); + uint32_t x486; uint32_t x487; - fiat_p256_uint1 x488; - fiat_p256_addcarryx_u32(&x487, &x488, x486, x455, x443); + uint32_t x488; uint32_t x489; - fiat_p256_uint1 x490; - fiat_p256_addcarryx_u32(&x489, &x490, x488, x457, x461); + uint32_t x490; uint32_t x491; - fiat_p256_uint1 x492; - fiat_p256_addcarryx_u32(&x491, &x492, x490, x459, x462); - uint32_t x493; - fiat_p256_uint1 x494; - fiat_p256_addcarryx_u32(&x493, &x494, x492, x460, 0x0); - uint32_t x495; + uint32_t x492; + fiat_p256_uint1 x493; + uint32_t x494; + fiat_p256_uint1 x495; uint32_t x496; - fiat_p256_mulx_u32(&x495, &x496, x6, (arg2[7])); - uint32_t x497; + fiat_p256_uint1 x497; uint32_t x498; - fiat_p256_mulx_u32(&x497, &x498, x6, (arg2[6])); - uint32_t x499; + fiat_p256_uint1 x499; uint32_t x500; - fiat_p256_mulx_u32(&x499, &x500, x6, (arg2[5])); - uint32_t x501; + fiat_p256_uint1 x501; uint32_t x502; - fiat_p256_mulx_u32(&x501, &x502, x6, (arg2[4])); - uint32_t x503; + fiat_p256_uint1 x503; uint32_t x504; - fiat_p256_mulx_u32(&x503, &x504, x6, (arg2[3])); - uint32_t x505; + fiat_p256_uint1 x505; uint32_t x506; - fiat_p256_mulx_u32(&x505, &x506, x6, (arg2[2])); uint32_t x507; - uint32_t x508; - fiat_p256_mulx_u32(&x507, &x508, x6, (arg2[1])); + fiat_p256_uint1 x508; uint32_t x509; - uint32_t x510; - fiat_p256_mulx_u32(&x509, &x510, x6, (arg2[0])); + fiat_p256_uint1 x510; uint32_t x511; fiat_p256_uint1 x512; - fiat_p256_addcarryx_u32(&x511, &x512, 0x0, x510, x507); uint32_t x513; fiat_p256_uint1 x514; - fiat_p256_addcarryx_u32(&x513, &x514, x512, x508, x505); uint32_t x515; fiat_p256_uint1 x516; - fiat_p256_addcarryx_u32(&x515, &x516, x514, x506, x503); uint32_t x517; fiat_p256_uint1 x518; - fiat_p256_addcarryx_u32(&x517, &x518, x516, x504, x501); uint32_t x519; fiat_p256_uint1 x520; - fiat_p256_addcarryx_u32(&x519, &x520, x518, x502, x499); uint32_t x521; fiat_p256_uint1 x522; - fiat_p256_addcarryx_u32(&x521, &x522, x520, x500, x497); uint32_t x523; fiat_p256_uint1 x524; - fiat_p256_addcarryx_u32(&x523, &x524, x522, x498, x495); uint32_t x525; - fiat_p256_uint1 x526; - fiat_p256_addcarryx_u32(&x525, &x526, x524, x496, 0x0); + uint32_t x526; uint32_t x527; - fiat_p256_uint1 x528; - fiat_p256_addcarryx_u32(&x527, &x528, 0x0, x477, x509); + uint32_t x528; uint32_t x529; - fiat_p256_uint1 x530; - fiat_p256_addcarryx_u32(&x529, &x530, x528, x479, x511); + uint32_t x530; uint32_t x531; - fiat_p256_uint1 x532; - fiat_p256_addcarryx_u32(&x531, &x532, x530, x481, x513); + uint32_t x532; uint32_t x533; fiat_p256_uint1 x534; - fiat_p256_addcarryx_u32(&x533, &x534, x532, x483, x515); uint32_t x535; fiat_p256_uint1 x536; - fiat_p256_addcarryx_u32(&x535, &x536, x534, x485, x517); uint32_t x537; - fiat_p256_uint1 x538; - fiat_p256_addcarryx_u32(&x537, &x538, x536, x487, x519); - uint32_t x539; - fiat_p256_uint1 x540; - fiat_p256_addcarryx_u32(&x539, &x540, x538, x489, x521); - uint32_t x541; - fiat_p256_uint1 x542; - fiat_p256_addcarryx_u32(&x541, &x542, x540, x491, x523); - uint32_t x543; - fiat_p256_uint1 x544; - fiat_p256_addcarryx_u32(&x543, &x544, x542, x493, x525); - uint32_t x545; + uint32_t x538; + fiat_p256_uint1 x539; + uint32_t x540; + fiat_p256_uint1 x541; + uint32_t x542; + fiat_p256_uint1 x543; + uint32_t x544; + fiat_p256_uint1 x545; uint32_t x546; - fiat_p256_mulx_u32(&x545, &x546, x527, UINT32_C(0xffffffff)); - uint32_t x547; + fiat_p256_uint1 x547; uint32_t x548; - fiat_p256_mulx_u32(&x547, &x548, x527, UINT32_C(0xffffffff)); - uint32_t x549; + fiat_p256_uint1 x549; uint32_t x550; - fiat_p256_mulx_u32(&x549, &x550, x527, UINT32_C(0xffffffff)); - uint32_t x551; + fiat_p256_uint1 x551; uint32_t x552; - fiat_p256_mulx_u32(&x551, &x552, x527, UINT32_C(0xffffffff)); - uint32_t x553; - fiat_p256_uint1 x554; - fiat_p256_addcarryx_u32(&x553, &x554, 0x0, x552, x549); - uint32_t x555; - fiat_p256_uint1 x556; - fiat_p256_addcarryx_u32(&x555, &x556, x554, x550, x547); + fiat_p256_uint1 x553; + uint32_t x554; + fiat_p256_uint1 x555; + uint32_t x556; uint32_t x557; - fiat_p256_uint1 x558; - fiat_p256_addcarryx_u32(&x557, &x558, x556, x548, 0x0); + uint32_t x558; uint32_t x559; - fiat_p256_uint1 x560; - fiat_p256_addcarryx_u32(&x559, &x560, 0x0, x527, x551); + uint32_t x560; uint32_t x561; - fiat_p256_uint1 x562; - fiat_p256_addcarryx_u32(&x561, &x562, x560, x529, x553); + uint32_t x562; uint32_t x563; - fiat_p256_uint1 x564; - fiat_p256_addcarryx_u32(&x563, &x564, x562, x531, x555); + uint32_t x564; uint32_t x565; - fiat_p256_uint1 x566; - fiat_p256_addcarryx_u32(&x565, &x566, x564, x533, x557); + uint32_t x566; uint32_t x567; - fiat_p256_uint1 x568; - fiat_p256_addcarryx_u32(&x567, &x568, x566, x535, 0x0); + uint32_t x568; uint32_t x569; - fiat_p256_uint1 x570; - fiat_p256_addcarryx_u32(&x569, &x570, x568, x537, 0x0); + uint32_t x570; uint32_t x571; - fiat_p256_uint1 x572; - fiat_p256_addcarryx_u32(&x571, &x572, x570, x539, x527); + uint32_t x572; uint32_t x573; fiat_p256_uint1 x574; - fiat_p256_addcarryx_u32(&x573, &x574, x572, x541, x545); uint32_t x575; fiat_p256_uint1 x576; - fiat_p256_addcarryx_u32(&x575, &x576, x574, x543, x546); uint32_t x577; fiat_p256_uint1 x578; - fiat_p256_addcarryx_u32(&x577, &x578, x576, x544, 0x0); uint32_t x579; - uint32_t x580; - fiat_p256_mulx_u32(&x579, &x580, x7, (arg2[7])); + fiat_p256_uint1 x580; uint32_t x581; - uint32_t x582; - fiat_p256_mulx_u32(&x581, &x582, x7, (arg2[6])); + fiat_p256_uint1 x582; uint32_t x583; - uint32_t x584; - fiat_p256_mulx_u32(&x583, &x584, x7, (arg2[5])); + fiat_p256_uint1 x584; uint32_t x585; - uint32_t x586; - fiat_p256_mulx_u32(&x585, &x586, x7, (arg2[4])); + fiat_p256_uint1 x586; uint32_t x587; uint32_t x588; - fiat_p256_mulx_u32(&x587, &x588, x7, (arg2[3])); - uint32_t x589; + fiat_p256_uint1 x589; uint32_t x590; - fiat_p256_mulx_u32(&x589, &x590, x7, (arg2[2])); - uint32_t x591; + fiat_p256_uint1 x591; uint32_t x592; - fiat_p256_mulx_u32(&x591, &x592, x7, (arg2[1])); - uint32_t x593; + fiat_p256_uint1 x593; uint32_t x594; - fiat_p256_mulx_u32(&x593, &x594, x7, (arg2[0])); - uint32_t x595; - fiat_p256_uint1 x596; - fiat_p256_addcarryx_u32(&x595, &x596, 0x0, x594, x591); - uint32_t x597; - fiat_p256_uint1 x598; - fiat_p256_addcarryx_u32(&x597, &x598, x596, x592, x589); - uint32_t x599; - fiat_p256_uint1 x600; - fiat_p256_addcarryx_u32(&x599, &x600, x598, x590, x587); - uint32_t x601; - fiat_p256_uint1 x602; - fiat_p256_addcarryx_u32(&x601, &x602, x600, x588, x585); - uint32_t x603; - fiat_p256_uint1 x604; - fiat_p256_addcarryx_u32(&x603, &x604, x602, x586, x583); - uint32_t x605; - fiat_p256_uint1 x606; - fiat_p256_addcarryx_u32(&x605, &x606, x604, x584, x581); + fiat_p256_uint1 x595; + uint32_t x596; + fiat_p256_uint1 x597; + uint32_t x598; + fiat_p256_uint1 x599; + uint32_t x600; + fiat_p256_uint1 x601; + uint32_t x602; + fiat_p256_uint1 x603; + uint32_t x604; + fiat_p256_uint1 x605; + uint32_t x606; uint32_t x607; - fiat_p256_uint1 x608; - fiat_p256_addcarryx_u32(&x607, &x608, x606, x582, x579); + uint32_t x608; uint32_t x609; - fiat_p256_uint1 x610; - fiat_p256_addcarryx_u32(&x609, &x610, x608, x580, 0x0); + uint32_t x610; uint32_t x611; - fiat_p256_uint1 x612; - fiat_p256_addcarryx_u32(&x611, &x612, 0x0, x561, x593); + uint32_t x612; uint32_t x613; - fiat_p256_uint1 x614; - fiat_p256_addcarryx_u32(&x613, &x614, x612, x563, x595); - uint32_t x615; - fiat_p256_uint1 x616; - fiat_p256_addcarryx_u32(&x615, &x616, x614, x565, x597); - uint32_t x617; - fiat_p256_uint1 x618; - fiat_p256_addcarryx_u32(&x617, &x618, x616, x567, x599); + uint32_t x614; + fiat_p256_uint1 x615; + uint32_t x616; + fiat_p256_uint1 x617; + uint32_t x618; uint32_t x619; fiat_p256_uint1 x620; - fiat_p256_addcarryx_u32(&x619, &x620, x618, x569, x601); uint32_t x621; fiat_p256_uint1 x622; - fiat_p256_addcarryx_u32(&x621, &x622, x620, x571, x603); uint32_t x623; fiat_p256_uint1 x624; - fiat_p256_addcarryx_u32(&x623, &x624, x622, x573, x605); uint32_t x625; fiat_p256_uint1 x626; - fiat_p256_addcarryx_u32(&x625, &x626, x624, x575, x607); uint32_t x627; fiat_p256_uint1 x628; - fiat_p256_addcarryx_u32(&x627, &x628, x626, x577, x609); uint32_t x629; - uint32_t x630; - fiat_p256_mulx_u32(&x629, &x630, x611, UINT32_C(0xffffffff)); + fiat_p256_uint1 x630; uint32_t x631; - uint32_t x632; - fiat_p256_mulx_u32(&x631, &x632, x611, UINT32_C(0xffffffff)); + fiat_p256_uint1 x632; uint32_t x633; - uint32_t x634; - fiat_p256_mulx_u32(&x633, &x634, x611, UINT32_C(0xffffffff)); + fiat_p256_uint1 x634; uint32_t x635; - uint32_t x636; - fiat_p256_mulx_u32(&x635, &x636, x611, UINT32_C(0xffffffff)); + fiat_p256_uint1 x636; uint32_t x637; - fiat_p256_uint1 x638; - fiat_p256_addcarryx_u32(&x637, &x638, 0x0, x636, x633); - uint32_t x639; - fiat_p256_uint1 x640; - fiat_p256_addcarryx_u32(&x639, &x640, x638, x634, x631); - uint32_t x641; - fiat_p256_uint1 x642; - fiat_p256_addcarryx_u32(&x641, &x642, x640, x632, 0x0); - uint32_t x643; - fiat_p256_uint1 x644; - fiat_p256_addcarryx_u32(&x643, &x644, 0x0, x611, x635); - uint32_t x645; - fiat_p256_uint1 x646; - fiat_p256_addcarryx_u32(&x645, &x646, x644, x613, x637); - uint32_t x647; - fiat_p256_uint1 x648; - fiat_p256_addcarryx_u32(&x647, &x648, x646, x615, x639); - uint32_t x649; - fiat_p256_uint1 x650; - fiat_p256_addcarryx_u32(&x649, &x650, x648, x617, x641); - uint32_t x651; - fiat_p256_uint1 x652; - fiat_p256_addcarryx_u32(&x651, &x652, x650, x619, 0x0); - uint32_t x653; - fiat_p256_uint1 x654; - fiat_p256_addcarryx_u32(&x653, &x654, x652, x621, 0x0); - uint32_t x655; - fiat_p256_uint1 x656; - fiat_p256_addcarryx_u32(&x655, &x656, x654, x623, x611); + uint32_t x638; + fiat_p256_uint1 x639; + uint32_t x640; + fiat_p256_uint1 x641; + uint32_t x642; + fiat_p256_uint1 x643; + uint32_t x644; + fiat_p256_uint1 x645; + uint32_t x646; + fiat_p256_uint1 x647; + uint32_t x648; + fiat_p256_uint1 x649; + uint32_t x650; + fiat_p256_uint1 x651; + uint32_t x652; + fiat_p256_uint1 x653; + uint32_t x654; + fiat_p256_uint1 x655; + uint32_t x656; uint32_t x657; - fiat_p256_uint1 x658; - fiat_p256_addcarryx_u32(&x657, &x658, x656, x625, x629); + uint32_t x658; uint32_t x659; - fiat_p256_uint1 x660; - fiat_p256_addcarryx_u32(&x659, &x660, x658, x627, x630); + uint32_t x660; uint32_t x661; - fiat_p256_uint1 x662; - fiat_p256_addcarryx_u32(&x661, &x662, x660, x628, 0x0); + uint32_t x662; uint32_t x663; - fiat_p256_uint1 x664; - fiat_p256_subborrowx_u32(&x663, &x664, 0x0, x645, UINT32_C(0xffffffff)); - uint32_t x665; - fiat_p256_uint1 x666; - fiat_p256_subborrowx_u32(&x665, &x666, x664, x647, UINT32_C(0xffffffff)); - uint32_t x667; - fiat_p256_uint1 x668; - fiat_p256_subborrowx_u32(&x667, &x668, x666, x649, UINT32_C(0xffffffff)); - uint32_t x669; - fiat_p256_uint1 x670; - fiat_p256_subborrowx_u32(&x669, &x670, x668, x651, 0x0); - uint32_t x671; - fiat_p256_uint1 x672; - fiat_p256_subborrowx_u32(&x671, &x672, x670, x653, 0x0); - uint32_t x673; - fiat_p256_uint1 x674; - fiat_p256_subborrowx_u32(&x673, &x674, x672, x655, 0x0); - uint32_t x675; - fiat_p256_uint1 x676; - fiat_p256_subborrowx_u32(&x675, &x676, x674, x657, 0x1); - uint32_t x677; - fiat_p256_uint1 x678; - fiat_p256_subborrowx_u32(&x677, &x678, x676, x659, UINT32_C(0xffffffff)); - uint32_t x679; - fiat_p256_uint1 x680; - fiat_p256_subborrowx_u32(&x679, &x680, x678, x661, 0x0); - uint32_t x681; - fiat_p256_cmovznz_u32(&x681, x680, x663, x645); - uint32_t x682; - fiat_p256_cmovznz_u32(&x682, x680, x665, x647); - uint32_t x683; - fiat_p256_cmovznz_u32(&x683, x680, x667, x649); - uint32_t x684; - fiat_p256_cmovznz_u32(&x684, x680, x669, x651); - uint32_t x685; - fiat_p256_cmovznz_u32(&x685, x680, x671, x653); - uint32_t x686; - fiat_p256_cmovznz_u32(&x686, x680, x673, x655); - uint32_t x687; - fiat_p256_cmovznz_u32(&x687, x680, x675, x657); - uint32_t x688; - fiat_p256_cmovznz_u32(&x688, x680, x677, x659); - out1[0] = x681; - out1[1] = x682; - out1[2] = x683; - out1[3] = x684; - out1[4] = x685; - out1[5] = x686; - out1[6] = x687; - out1[7] = x688; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[0]); + fiat_p256_mulx_u32(&x9, &x10, x8, (arg2[7])); + fiat_p256_mulx_u32(&x11, &x12, x8, (arg2[6])); + fiat_p256_mulx_u32(&x13, &x14, x8, (arg2[5])); + fiat_p256_mulx_u32(&x15, &x16, x8, (arg2[4])); + fiat_p256_mulx_u32(&x17, &x18, x8, (arg2[3])); + fiat_p256_mulx_u32(&x19, &x20, x8, (arg2[2])); + fiat_p256_mulx_u32(&x21, &x22, x8, (arg2[1])); + fiat_p256_mulx_u32(&x23, &x24, x8, (arg2[0])); + fiat_p256_addcarryx_u32(&x25, &x26, 0x0, x24, x21); + fiat_p256_addcarryx_u32(&x27, &x28, x26, x22, x19); + fiat_p256_addcarryx_u32(&x29, &x30, x28, x20, x17); + fiat_p256_addcarryx_u32(&x31, &x32, x30, x18, x15); + fiat_p256_addcarryx_u32(&x33, &x34, x32, x16, x13); + fiat_p256_addcarryx_u32(&x35, &x36, x34, x14, x11); + fiat_p256_addcarryx_u32(&x37, &x38, x36, x12, x9); + x39 = (x38 + x10); + fiat_p256_mulx_u32(&x40, &x41, x23, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x42, &x43, x23, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x44, &x45, x23, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x46, &x47, x23, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x48, &x49, 0x0, x47, x44); + fiat_p256_addcarryx_u32(&x50, &x51, x49, x45, x42); + x52 = (x51 + x43); + fiat_p256_addcarryx_u32(&x53, &x54, 0x0, x23, x46); + fiat_p256_addcarryx_u32(&x55, &x56, x54, x25, x48); + fiat_p256_addcarryx_u32(&x57, &x58, x56, x27, x50); + fiat_p256_addcarryx_u32(&x59, &x60, x58, x29, x52); + fiat_p256_addcarryx_u32(&x61, &x62, x60, x31, 0x0); + fiat_p256_addcarryx_u32(&x63, &x64, x62, x33, 0x0); + fiat_p256_addcarryx_u32(&x65, &x66, x64, x35, x23); + fiat_p256_addcarryx_u32(&x67, &x68, x66, x37, x40); + fiat_p256_addcarryx_u32(&x69, &x70, x68, x39, x41); + fiat_p256_mulx_u32(&x71, &x72, x1, (arg2[7])); + fiat_p256_mulx_u32(&x73, &x74, x1, (arg2[6])); + fiat_p256_mulx_u32(&x75, &x76, x1, (arg2[5])); + fiat_p256_mulx_u32(&x77, &x78, x1, (arg2[4])); + fiat_p256_mulx_u32(&x79, &x80, x1, (arg2[3])); + fiat_p256_mulx_u32(&x81, &x82, x1, (arg2[2])); + fiat_p256_mulx_u32(&x83, &x84, x1, (arg2[1])); + fiat_p256_mulx_u32(&x85, &x86, x1, (arg2[0])); + fiat_p256_addcarryx_u32(&x87, &x88, 0x0, x86, x83); + fiat_p256_addcarryx_u32(&x89, &x90, x88, x84, x81); + fiat_p256_addcarryx_u32(&x91, &x92, x90, x82, x79); + fiat_p256_addcarryx_u32(&x93, &x94, x92, x80, x77); + fiat_p256_addcarryx_u32(&x95, &x96, x94, x78, x75); + fiat_p256_addcarryx_u32(&x97, &x98, x96, x76, x73); + fiat_p256_addcarryx_u32(&x99, &x100, x98, x74, x71); + x101 = (x100 + x72); + fiat_p256_addcarryx_u32(&x102, &x103, 0x0, x55, x85); + fiat_p256_addcarryx_u32(&x104, &x105, x103, x57, x87); + fiat_p256_addcarryx_u32(&x106, &x107, x105, x59, x89); + fiat_p256_addcarryx_u32(&x108, &x109, x107, x61, x91); + fiat_p256_addcarryx_u32(&x110, &x111, x109, x63, x93); + fiat_p256_addcarryx_u32(&x112, &x113, x111, x65, x95); + fiat_p256_addcarryx_u32(&x114, &x115, x113, x67, x97); + fiat_p256_addcarryx_u32(&x116, &x117, x115, x69, x99); + fiat_p256_addcarryx_u32(&x118, &x119, x117, x70, x101); + fiat_p256_mulx_u32(&x120, &x121, x102, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x122, &x123, x102, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x124, &x125, x102, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x126, &x127, x102, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x128, &x129, 0x0, x127, x124); + fiat_p256_addcarryx_u32(&x130, &x131, x129, x125, x122); + x132 = (x131 + x123); + fiat_p256_addcarryx_u32(&x133, &x134, 0x0, x102, x126); + fiat_p256_addcarryx_u32(&x135, &x136, x134, x104, x128); + fiat_p256_addcarryx_u32(&x137, &x138, x136, x106, x130); + fiat_p256_addcarryx_u32(&x139, &x140, x138, x108, x132); + fiat_p256_addcarryx_u32(&x141, &x142, x140, x110, 0x0); + fiat_p256_addcarryx_u32(&x143, &x144, x142, x112, 0x0); + fiat_p256_addcarryx_u32(&x145, &x146, x144, x114, x102); + fiat_p256_addcarryx_u32(&x147, &x148, x146, x116, x120); + fiat_p256_addcarryx_u32(&x149, &x150, x148, x118, x121); + x151 = ((uint32_t)x150 + x119); + fiat_p256_mulx_u32(&x152, &x153, x2, (arg2[7])); + fiat_p256_mulx_u32(&x154, &x155, x2, (arg2[6])); + fiat_p256_mulx_u32(&x156, &x157, x2, (arg2[5])); + fiat_p256_mulx_u32(&x158, &x159, x2, (arg2[4])); + fiat_p256_mulx_u32(&x160, &x161, x2, (arg2[3])); + fiat_p256_mulx_u32(&x162, &x163, x2, (arg2[2])); + fiat_p256_mulx_u32(&x164, &x165, x2, (arg2[1])); + fiat_p256_mulx_u32(&x166, &x167, x2, (arg2[0])); + fiat_p256_addcarryx_u32(&x168, &x169, 0x0, x167, x164); + fiat_p256_addcarryx_u32(&x170, &x171, x169, x165, x162); + fiat_p256_addcarryx_u32(&x172, &x173, x171, x163, x160); + fiat_p256_addcarryx_u32(&x174, &x175, x173, x161, x158); + fiat_p256_addcarryx_u32(&x176, &x177, x175, x159, x156); + fiat_p256_addcarryx_u32(&x178, &x179, x177, x157, x154); + fiat_p256_addcarryx_u32(&x180, &x181, x179, x155, x152); + x182 = (x181 + x153); + fiat_p256_addcarryx_u32(&x183, &x184, 0x0, x135, x166); + fiat_p256_addcarryx_u32(&x185, &x186, x184, x137, x168); + fiat_p256_addcarryx_u32(&x187, &x188, x186, x139, x170); + fiat_p256_addcarryx_u32(&x189, &x190, x188, x141, x172); + fiat_p256_addcarryx_u32(&x191, &x192, x190, x143, x174); + fiat_p256_addcarryx_u32(&x193, &x194, x192, x145, x176); + fiat_p256_addcarryx_u32(&x195, &x196, x194, x147, x178); + fiat_p256_addcarryx_u32(&x197, &x198, x196, x149, x180); + fiat_p256_addcarryx_u32(&x199, &x200, x198, x151, x182); + fiat_p256_mulx_u32(&x201, &x202, x183, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x203, &x204, x183, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x205, &x206, x183, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x207, &x208, x183, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x209, &x210, 0x0, x208, x205); + fiat_p256_addcarryx_u32(&x211, &x212, x210, x206, x203); + x213 = (x212 + x204); + fiat_p256_addcarryx_u32(&x214, &x215, 0x0, x183, x207); + fiat_p256_addcarryx_u32(&x216, &x217, x215, x185, x209); + fiat_p256_addcarryx_u32(&x218, &x219, x217, x187, x211); + fiat_p256_addcarryx_u32(&x220, &x221, x219, x189, x213); + fiat_p256_addcarryx_u32(&x222, &x223, x221, x191, 0x0); + fiat_p256_addcarryx_u32(&x224, &x225, x223, x193, 0x0); + fiat_p256_addcarryx_u32(&x226, &x227, x225, x195, x183); + fiat_p256_addcarryx_u32(&x228, &x229, x227, x197, x201); + fiat_p256_addcarryx_u32(&x230, &x231, x229, x199, x202); + x232 = ((uint32_t)x231 + x200); + fiat_p256_mulx_u32(&x233, &x234, x3, (arg2[7])); + fiat_p256_mulx_u32(&x235, &x236, x3, (arg2[6])); + fiat_p256_mulx_u32(&x237, &x238, x3, (arg2[5])); + fiat_p256_mulx_u32(&x239, &x240, x3, (arg2[4])); + fiat_p256_mulx_u32(&x241, &x242, x3, (arg2[3])); + fiat_p256_mulx_u32(&x243, &x244, x3, (arg2[2])); + fiat_p256_mulx_u32(&x245, &x246, x3, (arg2[1])); + fiat_p256_mulx_u32(&x247, &x248, x3, (arg2[0])); + fiat_p256_addcarryx_u32(&x249, &x250, 0x0, x248, x245); + fiat_p256_addcarryx_u32(&x251, &x252, x250, x246, x243); + fiat_p256_addcarryx_u32(&x253, &x254, x252, x244, x241); + fiat_p256_addcarryx_u32(&x255, &x256, x254, x242, x239); + fiat_p256_addcarryx_u32(&x257, &x258, x256, x240, x237); + fiat_p256_addcarryx_u32(&x259, &x260, x258, x238, x235); + fiat_p256_addcarryx_u32(&x261, &x262, x260, x236, x233); + x263 = (x262 + x234); + fiat_p256_addcarryx_u32(&x264, &x265, 0x0, x216, x247); + fiat_p256_addcarryx_u32(&x266, &x267, x265, x218, x249); + fiat_p256_addcarryx_u32(&x268, &x269, x267, x220, x251); + fiat_p256_addcarryx_u32(&x270, &x271, x269, x222, x253); + fiat_p256_addcarryx_u32(&x272, &x273, x271, x224, x255); + fiat_p256_addcarryx_u32(&x274, &x275, x273, x226, x257); + fiat_p256_addcarryx_u32(&x276, &x277, x275, x228, x259); + fiat_p256_addcarryx_u32(&x278, &x279, x277, x230, x261); + fiat_p256_addcarryx_u32(&x280, &x281, x279, x232, x263); + fiat_p256_mulx_u32(&x282, &x283, x264, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x284, &x285, x264, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x286, &x287, x264, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x288, &x289, x264, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x290, &x291, 0x0, x289, x286); + fiat_p256_addcarryx_u32(&x292, &x293, x291, x287, x284); + x294 = (x293 + x285); + fiat_p256_addcarryx_u32(&x295, &x296, 0x0, x264, x288); + fiat_p256_addcarryx_u32(&x297, &x298, x296, x266, x290); + fiat_p256_addcarryx_u32(&x299, &x300, x298, x268, x292); + fiat_p256_addcarryx_u32(&x301, &x302, x300, x270, x294); + fiat_p256_addcarryx_u32(&x303, &x304, x302, x272, 0x0); + fiat_p256_addcarryx_u32(&x305, &x306, x304, x274, 0x0); + fiat_p256_addcarryx_u32(&x307, &x308, x306, x276, x264); + fiat_p256_addcarryx_u32(&x309, &x310, x308, x278, x282); + fiat_p256_addcarryx_u32(&x311, &x312, x310, x280, x283); + x313 = ((uint32_t)x312 + x281); + fiat_p256_mulx_u32(&x314, &x315, x4, (arg2[7])); + fiat_p256_mulx_u32(&x316, &x317, x4, (arg2[6])); + fiat_p256_mulx_u32(&x318, &x319, x4, (arg2[5])); + fiat_p256_mulx_u32(&x320, &x321, x4, (arg2[4])); + fiat_p256_mulx_u32(&x322, &x323, x4, (arg2[3])); + fiat_p256_mulx_u32(&x324, &x325, x4, (arg2[2])); + fiat_p256_mulx_u32(&x326, &x327, x4, (arg2[1])); + fiat_p256_mulx_u32(&x328, &x329, x4, (arg2[0])); + fiat_p256_addcarryx_u32(&x330, &x331, 0x0, x329, x326); + fiat_p256_addcarryx_u32(&x332, &x333, x331, x327, x324); + fiat_p256_addcarryx_u32(&x334, &x335, x333, x325, x322); + fiat_p256_addcarryx_u32(&x336, &x337, x335, x323, x320); + fiat_p256_addcarryx_u32(&x338, &x339, x337, x321, x318); + fiat_p256_addcarryx_u32(&x340, &x341, x339, x319, x316); + fiat_p256_addcarryx_u32(&x342, &x343, x341, x317, x314); + x344 = (x343 + x315); + fiat_p256_addcarryx_u32(&x345, &x346, 0x0, x297, x328); + fiat_p256_addcarryx_u32(&x347, &x348, x346, x299, x330); + fiat_p256_addcarryx_u32(&x349, &x350, x348, x301, x332); + fiat_p256_addcarryx_u32(&x351, &x352, x350, x303, x334); + fiat_p256_addcarryx_u32(&x353, &x354, x352, x305, x336); + fiat_p256_addcarryx_u32(&x355, &x356, x354, x307, x338); + fiat_p256_addcarryx_u32(&x357, &x358, x356, x309, x340); + fiat_p256_addcarryx_u32(&x359, &x360, x358, x311, x342); + fiat_p256_addcarryx_u32(&x361, &x362, x360, x313, x344); + fiat_p256_mulx_u32(&x363, &x364, x345, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x365, &x366, x345, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x367, &x368, x345, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x369, &x370, x345, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x371, &x372, 0x0, x370, x367); + fiat_p256_addcarryx_u32(&x373, &x374, x372, x368, x365); + x375 = (x374 + x366); + fiat_p256_addcarryx_u32(&x376, &x377, 0x0, x345, x369); + fiat_p256_addcarryx_u32(&x378, &x379, x377, x347, x371); + fiat_p256_addcarryx_u32(&x380, &x381, x379, x349, x373); + fiat_p256_addcarryx_u32(&x382, &x383, x381, x351, x375); + fiat_p256_addcarryx_u32(&x384, &x385, x383, x353, 0x0); + fiat_p256_addcarryx_u32(&x386, &x387, x385, x355, 0x0); + fiat_p256_addcarryx_u32(&x388, &x389, x387, x357, x345); + fiat_p256_addcarryx_u32(&x390, &x391, x389, x359, x363); + fiat_p256_addcarryx_u32(&x392, &x393, x391, x361, x364); + x394 = ((uint32_t)x393 + x362); + fiat_p256_mulx_u32(&x395, &x396, x5, (arg2[7])); + fiat_p256_mulx_u32(&x397, &x398, x5, (arg2[6])); + fiat_p256_mulx_u32(&x399, &x400, x5, (arg2[5])); + fiat_p256_mulx_u32(&x401, &x402, x5, (arg2[4])); + fiat_p256_mulx_u32(&x403, &x404, x5, (arg2[3])); + fiat_p256_mulx_u32(&x405, &x406, x5, (arg2[2])); + fiat_p256_mulx_u32(&x407, &x408, x5, (arg2[1])); + fiat_p256_mulx_u32(&x409, &x410, x5, (arg2[0])); + fiat_p256_addcarryx_u32(&x411, &x412, 0x0, x410, x407); + fiat_p256_addcarryx_u32(&x413, &x414, x412, x408, x405); + fiat_p256_addcarryx_u32(&x415, &x416, x414, x406, x403); + fiat_p256_addcarryx_u32(&x417, &x418, x416, x404, x401); + fiat_p256_addcarryx_u32(&x419, &x420, x418, x402, x399); + fiat_p256_addcarryx_u32(&x421, &x422, x420, x400, x397); + fiat_p256_addcarryx_u32(&x423, &x424, x422, x398, x395); + x425 = (x424 + x396); + fiat_p256_addcarryx_u32(&x426, &x427, 0x0, x378, x409); + fiat_p256_addcarryx_u32(&x428, &x429, x427, x380, x411); + fiat_p256_addcarryx_u32(&x430, &x431, x429, x382, x413); + fiat_p256_addcarryx_u32(&x432, &x433, x431, x384, x415); + fiat_p256_addcarryx_u32(&x434, &x435, x433, x386, x417); + fiat_p256_addcarryx_u32(&x436, &x437, x435, x388, x419); + fiat_p256_addcarryx_u32(&x438, &x439, x437, x390, x421); + fiat_p256_addcarryx_u32(&x440, &x441, x439, x392, x423); + fiat_p256_addcarryx_u32(&x442, &x443, x441, x394, x425); + fiat_p256_mulx_u32(&x444, &x445, x426, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x446, &x447, x426, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x448, &x449, x426, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x450, &x451, x426, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x452, &x453, 0x0, x451, x448); + fiat_p256_addcarryx_u32(&x454, &x455, x453, x449, x446); + x456 = (x455 + x447); + fiat_p256_addcarryx_u32(&x457, &x458, 0x0, x426, x450); + fiat_p256_addcarryx_u32(&x459, &x460, x458, x428, x452); + fiat_p256_addcarryx_u32(&x461, &x462, x460, x430, x454); + fiat_p256_addcarryx_u32(&x463, &x464, x462, x432, x456); + fiat_p256_addcarryx_u32(&x465, &x466, x464, x434, 0x0); + fiat_p256_addcarryx_u32(&x467, &x468, x466, x436, 0x0); + fiat_p256_addcarryx_u32(&x469, &x470, x468, x438, x426); + fiat_p256_addcarryx_u32(&x471, &x472, x470, x440, x444); + fiat_p256_addcarryx_u32(&x473, &x474, x472, x442, x445); + x475 = ((uint32_t)x474 + x443); + fiat_p256_mulx_u32(&x476, &x477, x6, (arg2[7])); + fiat_p256_mulx_u32(&x478, &x479, x6, (arg2[6])); + fiat_p256_mulx_u32(&x480, &x481, x6, (arg2[5])); + fiat_p256_mulx_u32(&x482, &x483, x6, (arg2[4])); + fiat_p256_mulx_u32(&x484, &x485, x6, (arg2[3])); + fiat_p256_mulx_u32(&x486, &x487, x6, (arg2[2])); + fiat_p256_mulx_u32(&x488, &x489, x6, (arg2[1])); + fiat_p256_mulx_u32(&x490, &x491, x6, (arg2[0])); + fiat_p256_addcarryx_u32(&x492, &x493, 0x0, x491, x488); + fiat_p256_addcarryx_u32(&x494, &x495, x493, x489, x486); + fiat_p256_addcarryx_u32(&x496, &x497, x495, x487, x484); + fiat_p256_addcarryx_u32(&x498, &x499, x497, x485, x482); + fiat_p256_addcarryx_u32(&x500, &x501, x499, x483, x480); + fiat_p256_addcarryx_u32(&x502, &x503, x501, x481, x478); + fiat_p256_addcarryx_u32(&x504, &x505, x503, x479, x476); + x506 = (x505 + x477); + fiat_p256_addcarryx_u32(&x507, &x508, 0x0, x459, x490); + fiat_p256_addcarryx_u32(&x509, &x510, x508, x461, x492); + fiat_p256_addcarryx_u32(&x511, &x512, x510, x463, x494); + fiat_p256_addcarryx_u32(&x513, &x514, x512, x465, x496); + fiat_p256_addcarryx_u32(&x515, &x516, x514, x467, x498); + fiat_p256_addcarryx_u32(&x517, &x518, x516, x469, x500); + fiat_p256_addcarryx_u32(&x519, &x520, x518, x471, x502); + fiat_p256_addcarryx_u32(&x521, &x522, x520, x473, x504); + fiat_p256_addcarryx_u32(&x523, &x524, x522, x475, x506); + fiat_p256_mulx_u32(&x525, &x526, x507, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x527, &x528, x507, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x529, &x530, x507, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x531, &x532, x507, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x533, &x534, 0x0, x532, x529); + fiat_p256_addcarryx_u32(&x535, &x536, x534, x530, x527); + x537 = (x536 + x528); + fiat_p256_addcarryx_u32(&x538, &x539, 0x0, x507, x531); + fiat_p256_addcarryx_u32(&x540, &x541, x539, x509, x533); + fiat_p256_addcarryx_u32(&x542, &x543, x541, x511, x535); + fiat_p256_addcarryx_u32(&x544, &x545, x543, x513, x537); + fiat_p256_addcarryx_u32(&x546, &x547, x545, x515, 0x0); + fiat_p256_addcarryx_u32(&x548, &x549, x547, x517, 0x0); + fiat_p256_addcarryx_u32(&x550, &x551, x549, x519, x507); + fiat_p256_addcarryx_u32(&x552, &x553, x551, x521, x525); + fiat_p256_addcarryx_u32(&x554, &x555, x553, x523, x526); + x556 = ((uint32_t)x555 + x524); + fiat_p256_mulx_u32(&x557, &x558, x7, (arg2[7])); + fiat_p256_mulx_u32(&x559, &x560, x7, (arg2[6])); + fiat_p256_mulx_u32(&x561, &x562, x7, (arg2[5])); + fiat_p256_mulx_u32(&x563, &x564, x7, (arg2[4])); + fiat_p256_mulx_u32(&x565, &x566, x7, (arg2[3])); + fiat_p256_mulx_u32(&x567, &x568, x7, (arg2[2])); + fiat_p256_mulx_u32(&x569, &x570, x7, (arg2[1])); + fiat_p256_mulx_u32(&x571, &x572, x7, (arg2[0])); + fiat_p256_addcarryx_u32(&x573, &x574, 0x0, x572, x569); + fiat_p256_addcarryx_u32(&x575, &x576, x574, x570, x567); + fiat_p256_addcarryx_u32(&x577, &x578, x576, x568, x565); + fiat_p256_addcarryx_u32(&x579, &x580, x578, x566, x563); + fiat_p256_addcarryx_u32(&x581, &x582, x580, x564, x561); + fiat_p256_addcarryx_u32(&x583, &x584, x582, x562, x559); + fiat_p256_addcarryx_u32(&x585, &x586, x584, x560, x557); + x587 = (x586 + x558); + fiat_p256_addcarryx_u32(&x588, &x589, 0x0, x540, x571); + fiat_p256_addcarryx_u32(&x590, &x591, x589, x542, x573); + fiat_p256_addcarryx_u32(&x592, &x593, x591, x544, x575); + fiat_p256_addcarryx_u32(&x594, &x595, x593, x546, x577); + fiat_p256_addcarryx_u32(&x596, &x597, x595, x548, x579); + fiat_p256_addcarryx_u32(&x598, &x599, x597, x550, x581); + fiat_p256_addcarryx_u32(&x600, &x601, x599, x552, x583); + fiat_p256_addcarryx_u32(&x602, &x603, x601, x554, x585); + fiat_p256_addcarryx_u32(&x604, &x605, x603, x556, x587); + fiat_p256_mulx_u32(&x606, &x607, x588, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x608, &x609, x588, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x610, &x611, x588, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x612, &x613, x588, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x614, &x615, 0x0, x613, x610); + fiat_p256_addcarryx_u32(&x616, &x617, x615, x611, x608); + x618 = (x617 + x609); + fiat_p256_addcarryx_u32(&x619, &x620, 0x0, x588, x612); + fiat_p256_addcarryx_u32(&x621, &x622, x620, x590, x614); + fiat_p256_addcarryx_u32(&x623, &x624, x622, x592, x616); + fiat_p256_addcarryx_u32(&x625, &x626, x624, x594, x618); + fiat_p256_addcarryx_u32(&x627, &x628, x626, x596, 0x0); + fiat_p256_addcarryx_u32(&x629, &x630, x628, x598, 0x0); + fiat_p256_addcarryx_u32(&x631, &x632, x630, x600, x588); + fiat_p256_addcarryx_u32(&x633, &x634, x632, x602, x606); + fiat_p256_addcarryx_u32(&x635, &x636, x634, x604, x607); + x637 = ((uint32_t)x636 + x605); + fiat_p256_subborrowx_u32(&x638, &x639, 0x0, x621, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x640, &x641, x639, x623, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x642, &x643, x641, x625, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x644, &x645, x643, x627, 0x0); + fiat_p256_subborrowx_u32(&x646, &x647, x645, x629, 0x0); + fiat_p256_subborrowx_u32(&x648, &x649, x647, x631, 0x0); + fiat_p256_subborrowx_u32(&x650, &x651, x649, x633, 0x1); + fiat_p256_subborrowx_u32(&x652, &x653, x651, x635, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x654, &x655, x653, x637, 0x0); + fiat_p256_cmovznz_u32(&x656, x655, x638, x621); + fiat_p256_cmovznz_u32(&x657, x655, x640, x623); + fiat_p256_cmovznz_u32(&x658, x655, x642, x625); + fiat_p256_cmovznz_u32(&x659, x655, x644, x627); + fiat_p256_cmovznz_u32(&x660, x655, x646, x629); + fiat_p256_cmovznz_u32(&x661, x655, x648, x631); + fiat_p256_cmovznz_u32(&x662, x655, x650, x633); + fiat_p256_cmovznz_u32(&x663, x655, x652, x635); + out1[0] = x656; + out1[1] = x657; + out1[2] = x658; + out1[3] = x659; + out1[4] = x660; + out1[5] = x661; + out1[6] = x662; + out1[7] = x663; } /* @@ -1172,1046 +1183,1028 @@ static void fiat_p256_mul(uint32_t out1[8], const uint32_t arg1[8], const uint32 * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_p256_square(uint32_t out1[8], const uint32_t arg1[8]) { - uint32_t x1 = (arg1[1]); - uint32_t x2 = (arg1[2]); - uint32_t x3 = (arg1[3]); - uint32_t x4 = (arg1[4]); - uint32_t x5 = (arg1[5]); - uint32_t x6 = (arg1[6]); - uint32_t x7 = (arg1[7]); - uint32_t x8 = (arg1[0]); + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; uint32_t x9; uint32_t x10; - fiat_p256_mulx_u32(&x9, &x10, x8, (arg1[7])); uint32_t x11; uint32_t x12; - fiat_p256_mulx_u32(&x11, &x12, x8, (arg1[6])); uint32_t x13; uint32_t x14; - fiat_p256_mulx_u32(&x13, &x14, x8, (arg1[5])); uint32_t x15; uint32_t x16; - fiat_p256_mulx_u32(&x15, &x16, x8, (arg1[4])); uint32_t x17; uint32_t x18; - fiat_p256_mulx_u32(&x17, &x18, x8, (arg1[3])); uint32_t x19; uint32_t x20; - fiat_p256_mulx_u32(&x19, &x20, x8, (arg1[2])); uint32_t x21; uint32_t x22; - fiat_p256_mulx_u32(&x21, &x22, x8, (arg1[1])); uint32_t x23; uint32_t x24; - fiat_p256_mulx_u32(&x23, &x24, x8, (arg1[0])); uint32_t x25; fiat_p256_uint1 x26; - fiat_p256_addcarryx_u32(&x25, &x26, 0x0, x24, x21); uint32_t x27; fiat_p256_uint1 x28; - fiat_p256_addcarryx_u32(&x27, &x28, x26, x22, x19); uint32_t x29; fiat_p256_uint1 x30; - fiat_p256_addcarryx_u32(&x29, &x30, x28, x20, x17); uint32_t x31; fiat_p256_uint1 x32; - fiat_p256_addcarryx_u32(&x31, &x32, x30, x18, x15); uint32_t x33; fiat_p256_uint1 x34; - fiat_p256_addcarryx_u32(&x33, &x34, x32, x16, x13); uint32_t x35; fiat_p256_uint1 x36; - fiat_p256_addcarryx_u32(&x35, &x36, x34, x14, x11); uint32_t x37; fiat_p256_uint1 x38; - fiat_p256_addcarryx_u32(&x37, &x38, x36, x12, x9); uint32_t x39; - fiat_p256_uint1 x40; - fiat_p256_addcarryx_u32(&x39, &x40, x38, x10, 0x0); + uint32_t x40; uint32_t x41; uint32_t x42; - fiat_p256_mulx_u32(&x41, &x42, x23, UINT32_C(0xffffffff)); uint32_t x43; uint32_t x44; - fiat_p256_mulx_u32(&x43, &x44, x23, UINT32_C(0xffffffff)); uint32_t x45; uint32_t x46; - fiat_p256_mulx_u32(&x45, &x46, x23, UINT32_C(0xffffffff)); uint32_t x47; uint32_t x48; - fiat_p256_mulx_u32(&x47, &x48, x23, UINT32_C(0xffffffff)); - uint32_t x49; - fiat_p256_uint1 x50; - fiat_p256_addcarryx_u32(&x49, &x50, 0x0, x48, x45); - uint32_t x51; - fiat_p256_uint1 x52; - fiat_p256_addcarryx_u32(&x51, &x52, x50, x46, x43); + fiat_p256_uint1 x49; + uint32_t x50; + fiat_p256_uint1 x51; + uint32_t x52; uint32_t x53; fiat_p256_uint1 x54; - fiat_p256_addcarryx_u32(&x53, &x54, x52, x44, 0x0); uint32_t x55; fiat_p256_uint1 x56; - fiat_p256_addcarryx_u32(&x55, &x56, 0x0, x23, x47); uint32_t x57; fiat_p256_uint1 x58; - fiat_p256_addcarryx_u32(&x57, &x58, x56, x25, x49); uint32_t x59; fiat_p256_uint1 x60; - fiat_p256_addcarryx_u32(&x59, &x60, x58, x27, x51); uint32_t x61; fiat_p256_uint1 x62; - fiat_p256_addcarryx_u32(&x61, &x62, x60, x29, x53); uint32_t x63; fiat_p256_uint1 x64; - fiat_p256_addcarryx_u32(&x63, &x64, x62, x31, 0x0); uint32_t x65; fiat_p256_uint1 x66; - fiat_p256_addcarryx_u32(&x65, &x66, x64, x33, 0x0); uint32_t x67; fiat_p256_uint1 x68; - fiat_p256_addcarryx_u32(&x67, &x68, x66, x35, x23); uint32_t x69; fiat_p256_uint1 x70; - fiat_p256_addcarryx_u32(&x69, &x70, x68, x37, x41); uint32_t x71; - fiat_p256_uint1 x72; - fiat_p256_addcarryx_u32(&x71, &x72, x70, x39, x42); + uint32_t x72; uint32_t x73; - fiat_p256_uint1 x74; - fiat_p256_addcarryx_u32(&x73, &x74, x72, 0x0, 0x0); + uint32_t x74; uint32_t x75; uint32_t x76; - fiat_p256_mulx_u32(&x75, &x76, x1, (arg1[7])); uint32_t x77; uint32_t x78; - fiat_p256_mulx_u32(&x77, &x78, x1, (arg1[6])); uint32_t x79; uint32_t x80; - fiat_p256_mulx_u32(&x79, &x80, x1, (arg1[5])); uint32_t x81; uint32_t x82; - fiat_p256_mulx_u32(&x81, &x82, x1, (arg1[4])); uint32_t x83; uint32_t x84; - fiat_p256_mulx_u32(&x83, &x84, x1, (arg1[3])); uint32_t x85; uint32_t x86; - fiat_p256_mulx_u32(&x85, &x86, x1, (arg1[2])); uint32_t x87; - uint32_t x88; - fiat_p256_mulx_u32(&x87, &x88, x1, (arg1[1])); + fiat_p256_uint1 x88; uint32_t x89; - uint32_t x90; - fiat_p256_mulx_u32(&x89, &x90, x1, (arg1[0])); + fiat_p256_uint1 x90; uint32_t x91; fiat_p256_uint1 x92; - fiat_p256_addcarryx_u32(&x91, &x92, 0x0, x90, x87); uint32_t x93; fiat_p256_uint1 x94; - fiat_p256_addcarryx_u32(&x93, &x94, x92, x88, x85); uint32_t x95; fiat_p256_uint1 x96; - fiat_p256_addcarryx_u32(&x95, &x96, x94, x86, x83); uint32_t x97; fiat_p256_uint1 x98; - fiat_p256_addcarryx_u32(&x97, &x98, x96, x84, x81); uint32_t x99; fiat_p256_uint1 x100; - fiat_p256_addcarryx_u32(&x99, &x100, x98, x82, x79); uint32_t x101; - fiat_p256_uint1 x102; - fiat_p256_addcarryx_u32(&x101, &x102, x100, x80, x77); - uint32_t x103; - fiat_p256_uint1 x104; - fiat_p256_addcarryx_u32(&x103, &x104, x102, x78, x75); - uint32_t x105; - fiat_p256_uint1 x106; - fiat_p256_addcarryx_u32(&x105, &x106, x104, x76, 0x0); - uint32_t x107; - fiat_p256_uint1 x108; - fiat_p256_addcarryx_u32(&x107, &x108, 0x0, x57, x89); - uint32_t x109; - fiat_p256_uint1 x110; - fiat_p256_addcarryx_u32(&x109, &x110, x108, x59, x91); - uint32_t x111; - fiat_p256_uint1 x112; - fiat_p256_addcarryx_u32(&x111, &x112, x110, x61, x93); - uint32_t x113; - fiat_p256_uint1 x114; - fiat_p256_addcarryx_u32(&x113, &x114, x112, x63, x95); - uint32_t x115; - fiat_p256_uint1 x116; - fiat_p256_addcarryx_u32(&x115, &x116, x114, x65, x97); - uint32_t x117; - fiat_p256_uint1 x118; - fiat_p256_addcarryx_u32(&x117, &x118, x116, x67, x99); - uint32_t x119; - fiat_p256_uint1 x120; - fiat_p256_addcarryx_u32(&x119, &x120, x118, x69, x101); + uint32_t x102; + fiat_p256_uint1 x103; + uint32_t x104; + fiat_p256_uint1 x105; + uint32_t x106; + fiat_p256_uint1 x107; + uint32_t x108; + fiat_p256_uint1 x109; + uint32_t x110; + fiat_p256_uint1 x111; + uint32_t x112; + fiat_p256_uint1 x113; + uint32_t x114; + fiat_p256_uint1 x115; + uint32_t x116; + fiat_p256_uint1 x117; + uint32_t x118; + fiat_p256_uint1 x119; + uint32_t x120; uint32_t x121; - fiat_p256_uint1 x122; - fiat_p256_addcarryx_u32(&x121, &x122, x120, x71, x103); + uint32_t x122; uint32_t x123; - fiat_p256_uint1 x124; - fiat_p256_addcarryx_u32(&x123, &x124, x122, (fiat_p256_uint1)x73, x105); + uint32_t x124; uint32_t x125; uint32_t x126; - fiat_p256_mulx_u32(&x125, &x126, x107, UINT32_C(0xffffffff)); uint32_t x127; uint32_t x128; - fiat_p256_mulx_u32(&x127, &x128, x107, UINT32_C(0xffffffff)); - uint32_t x129; + fiat_p256_uint1 x129; uint32_t x130; - fiat_p256_mulx_u32(&x129, &x130, x107, UINT32_C(0xffffffff)); - uint32_t x131; + fiat_p256_uint1 x131; uint32_t x132; - fiat_p256_mulx_u32(&x131, &x132, x107, UINT32_C(0xffffffff)); uint32_t x133; fiat_p256_uint1 x134; - fiat_p256_addcarryx_u32(&x133, &x134, 0x0, x132, x129); uint32_t x135; fiat_p256_uint1 x136; - fiat_p256_addcarryx_u32(&x135, &x136, x134, x130, x127); uint32_t x137; fiat_p256_uint1 x138; - fiat_p256_addcarryx_u32(&x137, &x138, x136, x128, 0x0); uint32_t x139; fiat_p256_uint1 x140; - fiat_p256_addcarryx_u32(&x139, &x140, 0x0, x107, x131); uint32_t x141; fiat_p256_uint1 x142; - fiat_p256_addcarryx_u32(&x141, &x142, x140, x109, x133); uint32_t x143; fiat_p256_uint1 x144; - fiat_p256_addcarryx_u32(&x143, &x144, x142, x111, x135); uint32_t x145; fiat_p256_uint1 x146; - fiat_p256_addcarryx_u32(&x145, &x146, x144, x113, x137); uint32_t x147; fiat_p256_uint1 x148; - fiat_p256_addcarryx_u32(&x147, &x148, x146, x115, 0x0); uint32_t x149; fiat_p256_uint1 x150; - fiat_p256_addcarryx_u32(&x149, &x150, x148, x117, 0x0); uint32_t x151; - fiat_p256_uint1 x152; - fiat_p256_addcarryx_u32(&x151, &x152, x150, x119, x107); + uint32_t x152; uint32_t x153; - fiat_p256_uint1 x154; - fiat_p256_addcarryx_u32(&x153, &x154, x152, x121, x125); + uint32_t x154; uint32_t x155; - fiat_p256_uint1 x156; - fiat_p256_addcarryx_u32(&x155, &x156, x154, x123, x126); + uint32_t x156; uint32_t x157; - fiat_p256_uint1 x158; - fiat_p256_addcarryx_u32(&x157, &x158, x156, x124, 0x0); + uint32_t x158; uint32_t x159; uint32_t x160; - fiat_p256_mulx_u32(&x159, &x160, x2, (arg1[7])); uint32_t x161; uint32_t x162; - fiat_p256_mulx_u32(&x161, &x162, x2, (arg1[6])); uint32_t x163; uint32_t x164; - fiat_p256_mulx_u32(&x163, &x164, x2, (arg1[5])); uint32_t x165; uint32_t x166; - fiat_p256_mulx_u32(&x165, &x166, x2, (arg1[4])); uint32_t x167; uint32_t x168; - fiat_p256_mulx_u32(&x167, &x168, x2, (arg1[3])); - uint32_t x169; + fiat_p256_uint1 x169; uint32_t x170; - fiat_p256_mulx_u32(&x169, &x170, x2, (arg1[2])); - uint32_t x171; + fiat_p256_uint1 x171; uint32_t x172; - fiat_p256_mulx_u32(&x171, &x172, x2, (arg1[1])); - uint32_t x173; + fiat_p256_uint1 x173; uint32_t x174; - fiat_p256_mulx_u32(&x173, &x174, x2, (arg1[0])); - uint32_t x175; - fiat_p256_uint1 x176; - fiat_p256_addcarryx_u32(&x175, &x176, 0x0, x174, x171); - uint32_t x177; - fiat_p256_uint1 x178; - fiat_p256_addcarryx_u32(&x177, &x178, x176, x172, x169); - uint32_t x179; - fiat_p256_uint1 x180; - fiat_p256_addcarryx_u32(&x179, &x180, x178, x170, x167); - uint32_t x181; - fiat_p256_uint1 x182; - fiat_p256_addcarryx_u32(&x181, &x182, x180, x168, x165); + fiat_p256_uint1 x175; + uint32_t x176; + fiat_p256_uint1 x177; + uint32_t x178; + fiat_p256_uint1 x179; + uint32_t x180; + fiat_p256_uint1 x181; + uint32_t x182; uint32_t x183; fiat_p256_uint1 x184; - fiat_p256_addcarryx_u32(&x183, &x184, x182, x166, x163); uint32_t x185; fiat_p256_uint1 x186; - fiat_p256_addcarryx_u32(&x185, &x186, x184, x164, x161); uint32_t x187; fiat_p256_uint1 x188; - fiat_p256_addcarryx_u32(&x187, &x188, x186, x162, x159); uint32_t x189; fiat_p256_uint1 x190; - fiat_p256_addcarryx_u32(&x189, &x190, x188, x160, 0x0); uint32_t x191; fiat_p256_uint1 x192; - fiat_p256_addcarryx_u32(&x191, &x192, 0x0, x141, x173); uint32_t x193; fiat_p256_uint1 x194; - fiat_p256_addcarryx_u32(&x193, &x194, x192, x143, x175); uint32_t x195; fiat_p256_uint1 x196; - fiat_p256_addcarryx_u32(&x195, &x196, x194, x145, x177); uint32_t x197; fiat_p256_uint1 x198; - fiat_p256_addcarryx_u32(&x197, &x198, x196, x147, x179); uint32_t x199; fiat_p256_uint1 x200; - fiat_p256_addcarryx_u32(&x199, &x200, x198, x149, x181); uint32_t x201; - fiat_p256_uint1 x202; - fiat_p256_addcarryx_u32(&x201, &x202, x200, x151, x183); + uint32_t x202; uint32_t x203; - fiat_p256_uint1 x204; - fiat_p256_addcarryx_u32(&x203, &x204, x202, x153, x185); + uint32_t x204; uint32_t x205; - fiat_p256_uint1 x206; - fiat_p256_addcarryx_u32(&x205, &x206, x204, x155, x187); + uint32_t x206; uint32_t x207; - fiat_p256_uint1 x208; - fiat_p256_addcarryx_u32(&x207, &x208, x206, x157, x189); + uint32_t x208; uint32_t x209; - uint32_t x210; - fiat_p256_mulx_u32(&x209, &x210, x191, UINT32_C(0xffffffff)); + fiat_p256_uint1 x210; uint32_t x211; - uint32_t x212; - fiat_p256_mulx_u32(&x211, &x212, x191, UINT32_C(0xffffffff)); + fiat_p256_uint1 x212; uint32_t x213; uint32_t x214; - fiat_p256_mulx_u32(&x213, &x214, x191, UINT32_C(0xffffffff)); - uint32_t x215; + fiat_p256_uint1 x215; uint32_t x216; - fiat_p256_mulx_u32(&x215, &x216, x191, UINT32_C(0xffffffff)); - uint32_t x217; - fiat_p256_uint1 x218; - fiat_p256_addcarryx_u32(&x217, &x218, 0x0, x216, x213); - uint32_t x219; - fiat_p256_uint1 x220; - fiat_p256_addcarryx_u32(&x219, &x220, x218, x214, x211); - uint32_t x221; - fiat_p256_uint1 x222; - fiat_p256_addcarryx_u32(&x221, &x222, x220, x212, 0x0); - uint32_t x223; - fiat_p256_uint1 x224; - fiat_p256_addcarryx_u32(&x223, &x224, 0x0, x191, x215); - uint32_t x225; - fiat_p256_uint1 x226; - fiat_p256_addcarryx_u32(&x225, &x226, x224, x193, x217); - uint32_t x227; - fiat_p256_uint1 x228; - fiat_p256_addcarryx_u32(&x227, &x228, x226, x195, x219); - uint32_t x229; - fiat_p256_uint1 x230; - fiat_p256_addcarryx_u32(&x229, &x230, x228, x197, x221); - uint32_t x231; - fiat_p256_uint1 x232; - fiat_p256_addcarryx_u32(&x231, &x232, x230, x199, 0x0); + fiat_p256_uint1 x217; + uint32_t x218; + fiat_p256_uint1 x219; + uint32_t x220; + fiat_p256_uint1 x221; + uint32_t x222; + fiat_p256_uint1 x223; + uint32_t x224; + fiat_p256_uint1 x225; + uint32_t x226; + fiat_p256_uint1 x227; + uint32_t x228; + fiat_p256_uint1 x229; + uint32_t x230; + fiat_p256_uint1 x231; + uint32_t x232; uint32_t x233; - fiat_p256_uint1 x234; - fiat_p256_addcarryx_u32(&x233, &x234, x232, x201, 0x0); + uint32_t x234; uint32_t x235; - fiat_p256_uint1 x236; - fiat_p256_addcarryx_u32(&x235, &x236, x234, x203, x191); + uint32_t x236; uint32_t x237; - fiat_p256_uint1 x238; - fiat_p256_addcarryx_u32(&x237, &x238, x236, x205, x209); + uint32_t x238; uint32_t x239; - fiat_p256_uint1 x240; - fiat_p256_addcarryx_u32(&x239, &x240, x238, x207, x210); + uint32_t x240; uint32_t x241; - fiat_p256_uint1 x242; - fiat_p256_addcarryx_u32(&x241, &x242, x240, x208, 0x0); + uint32_t x242; uint32_t x243; uint32_t x244; - fiat_p256_mulx_u32(&x243, &x244, x3, (arg1[7])); uint32_t x245; uint32_t x246; - fiat_p256_mulx_u32(&x245, &x246, x3, (arg1[6])); uint32_t x247; uint32_t x248; - fiat_p256_mulx_u32(&x247, &x248, x3, (arg1[5])); uint32_t x249; - uint32_t x250; - fiat_p256_mulx_u32(&x249, &x250, x3, (arg1[4])); + fiat_p256_uint1 x250; uint32_t x251; - uint32_t x252; - fiat_p256_mulx_u32(&x251, &x252, x3, (arg1[3])); + fiat_p256_uint1 x252; uint32_t x253; - uint32_t x254; - fiat_p256_mulx_u32(&x253, &x254, x3, (arg1[2])); + fiat_p256_uint1 x254; uint32_t x255; - uint32_t x256; - fiat_p256_mulx_u32(&x255, &x256, x3, (arg1[1])); + fiat_p256_uint1 x256; uint32_t x257; - uint32_t x258; - fiat_p256_mulx_u32(&x257, &x258, x3, (arg1[0])); + fiat_p256_uint1 x258; uint32_t x259; fiat_p256_uint1 x260; - fiat_p256_addcarryx_u32(&x259, &x260, 0x0, x258, x255); uint32_t x261; fiat_p256_uint1 x262; - fiat_p256_addcarryx_u32(&x261, &x262, x260, x256, x253); uint32_t x263; - fiat_p256_uint1 x264; - fiat_p256_addcarryx_u32(&x263, &x264, x262, x254, x251); - uint32_t x265; - fiat_p256_uint1 x266; - fiat_p256_addcarryx_u32(&x265, &x266, x264, x252, x249); - uint32_t x267; - fiat_p256_uint1 x268; - fiat_p256_addcarryx_u32(&x267, &x268, x266, x250, x247); - uint32_t x269; - fiat_p256_uint1 x270; - fiat_p256_addcarryx_u32(&x269, &x270, x268, x248, x245); - uint32_t x271; - fiat_p256_uint1 x272; - fiat_p256_addcarryx_u32(&x271, &x272, x270, x246, x243); - uint32_t x273; - fiat_p256_uint1 x274; - fiat_p256_addcarryx_u32(&x273, &x274, x272, x244, 0x0); - uint32_t x275; - fiat_p256_uint1 x276; - fiat_p256_addcarryx_u32(&x275, &x276, 0x0, x225, x257); - uint32_t x277; - fiat_p256_uint1 x278; - fiat_p256_addcarryx_u32(&x277, &x278, x276, x227, x259); - uint32_t x279; - fiat_p256_uint1 x280; - fiat_p256_addcarryx_u32(&x279, &x280, x278, x229, x261); - uint32_t x281; - fiat_p256_uint1 x282; - fiat_p256_addcarryx_u32(&x281, &x282, x280, x231, x263); + uint32_t x264; + fiat_p256_uint1 x265; + uint32_t x266; + fiat_p256_uint1 x267; + uint32_t x268; + fiat_p256_uint1 x269; + uint32_t x270; + fiat_p256_uint1 x271; + uint32_t x272; + fiat_p256_uint1 x273; + uint32_t x274; + fiat_p256_uint1 x275; + uint32_t x276; + fiat_p256_uint1 x277; + uint32_t x278; + fiat_p256_uint1 x279; + uint32_t x280; + fiat_p256_uint1 x281; + uint32_t x282; uint32_t x283; - fiat_p256_uint1 x284; - fiat_p256_addcarryx_u32(&x283, &x284, x282, x233, x265); + uint32_t x284; uint32_t x285; - fiat_p256_uint1 x286; - fiat_p256_addcarryx_u32(&x285, &x286, x284, x235, x267); + uint32_t x286; uint32_t x287; - fiat_p256_uint1 x288; - fiat_p256_addcarryx_u32(&x287, &x288, x286, x237, x269); + uint32_t x288; uint32_t x289; - fiat_p256_uint1 x290; - fiat_p256_addcarryx_u32(&x289, &x290, x288, x239, x271); - uint32_t x291; - fiat_p256_uint1 x292; - fiat_p256_addcarryx_u32(&x291, &x292, x290, x241, x273); - uint32_t x293; + uint32_t x290; + fiat_p256_uint1 x291; + uint32_t x292; + fiat_p256_uint1 x293; uint32_t x294; - fiat_p256_mulx_u32(&x293, &x294, x275, UINT32_C(0xffffffff)); uint32_t x295; - uint32_t x296; - fiat_p256_mulx_u32(&x295, &x296, x275, UINT32_C(0xffffffff)); + fiat_p256_uint1 x296; uint32_t x297; - uint32_t x298; - fiat_p256_mulx_u32(&x297, &x298, x275, UINT32_C(0xffffffff)); + fiat_p256_uint1 x298; uint32_t x299; - uint32_t x300; - fiat_p256_mulx_u32(&x299, &x300, x275, UINT32_C(0xffffffff)); + fiat_p256_uint1 x300; uint32_t x301; fiat_p256_uint1 x302; - fiat_p256_addcarryx_u32(&x301, &x302, 0x0, x300, x297); uint32_t x303; fiat_p256_uint1 x304; - fiat_p256_addcarryx_u32(&x303, &x304, x302, x298, x295); uint32_t x305; fiat_p256_uint1 x306; - fiat_p256_addcarryx_u32(&x305, &x306, x304, x296, 0x0); uint32_t x307; fiat_p256_uint1 x308; - fiat_p256_addcarryx_u32(&x307, &x308, 0x0, x275, x299); uint32_t x309; fiat_p256_uint1 x310; - fiat_p256_addcarryx_u32(&x309, &x310, x308, x277, x301); uint32_t x311; fiat_p256_uint1 x312; - fiat_p256_addcarryx_u32(&x311, &x312, x310, x279, x303); uint32_t x313; - fiat_p256_uint1 x314; - fiat_p256_addcarryx_u32(&x313, &x314, x312, x281, x305); + uint32_t x314; uint32_t x315; - fiat_p256_uint1 x316; - fiat_p256_addcarryx_u32(&x315, &x316, x314, x283, 0x0); + uint32_t x316; uint32_t x317; - fiat_p256_uint1 x318; - fiat_p256_addcarryx_u32(&x317, &x318, x316, x285, 0x0); + uint32_t x318; uint32_t x319; - fiat_p256_uint1 x320; - fiat_p256_addcarryx_u32(&x319, &x320, x318, x287, x275); + uint32_t x320; uint32_t x321; - fiat_p256_uint1 x322; - fiat_p256_addcarryx_u32(&x321, &x322, x320, x289, x293); + uint32_t x322; uint32_t x323; - fiat_p256_uint1 x324; - fiat_p256_addcarryx_u32(&x323, &x324, x322, x291, x294); + uint32_t x324; uint32_t x325; - fiat_p256_uint1 x326; - fiat_p256_addcarryx_u32(&x325, &x326, x324, x292, 0x0); + uint32_t x326; uint32_t x327; uint32_t x328; - fiat_p256_mulx_u32(&x327, &x328, x4, (arg1[7])); uint32_t x329; uint32_t x330; - fiat_p256_mulx_u32(&x329, &x330, x4, (arg1[6])); - uint32_t x331; + fiat_p256_uint1 x331; uint32_t x332; - fiat_p256_mulx_u32(&x331, &x332, x4, (arg1[5])); - uint32_t x333; + fiat_p256_uint1 x333; uint32_t x334; - fiat_p256_mulx_u32(&x333, &x334, x4, (arg1[4])); - uint32_t x335; + fiat_p256_uint1 x335; uint32_t x336; - fiat_p256_mulx_u32(&x335, &x336, x4, (arg1[3])); - uint32_t x337; + fiat_p256_uint1 x337; uint32_t x338; - fiat_p256_mulx_u32(&x337, &x338, x4, (arg1[2])); - uint32_t x339; + fiat_p256_uint1 x339; uint32_t x340; - fiat_p256_mulx_u32(&x339, &x340, x4, (arg1[1])); - uint32_t x341; + fiat_p256_uint1 x341; uint32_t x342; - fiat_p256_mulx_u32(&x341, &x342, x4, (arg1[0])); - uint32_t x343; - fiat_p256_uint1 x344; - fiat_p256_addcarryx_u32(&x343, &x344, 0x0, x342, x339); + fiat_p256_uint1 x343; + uint32_t x344; uint32_t x345; fiat_p256_uint1 x346; - fiat_p256_addcarryx_u32(&x345, &x346, x344, x340, x337); uint32_t x347; fiat_p256_uint1 x348; - fiat_p256_addcarryx_u32(&x347, &x348, x346, x338, x335); uint32_t x349; fiat_p256_uint1 x350; - fiat_p256_addcarryx_u32(&x349, &x350, x348, x336, x333); uint32_t x351; fiat_p256_uint1 x352; - fiat_p256_addcarryx_u32(&x351, &x352, x350, x334, x331); uint32_t x353; fiat_p256_uint1 x354; - fiat_p256_addcarryx_u32(&x353, &x354, x352, x332, x329); uint32_t x355; fiat_p256_uint1 x356; - fiat_p256_addcarryx_u32(&x355, &x356, x354, x330, x327); uint32_t x357; fiat_p256_uint1 x358; - fiat_p256_addcarryx_u32(&x357, &x358, x356, x328, 0x0); uint32_t x359; fiat_p256_uint1 x360; - fiat_p256_addcarryx_u32(&x359, &x360, 0x0, x309, x341); uint32_t x361; fiat_p256_uint1 x362; - fiat_p256_addcarryx_u32(&x361, &x362, x360, x311, x343); uint32_t x363; - fiat_p256_uint1 x364; - fiat_p256_addcarryx_u32(&x363, &x364, x362, x313, x345); + uint32_t x364; uint32_t x365; - fiat_p256_uint1 x366; - fiat_p256_addcarryx_u32(&x365, &x366, x364, x315, x347); + uint32_t x366; uint32_t x367; - fiat_p256_uint1 x368; - fiat_p256_addcarryx_u32(&x367, &x368, x366, x317, x349); + uint32_t x368; uint32_t x369; - fiat_p256_uint1 x370; - fiat_p256_addcarryx_u32(&x369, &x370, x368, x319, x351); + uint32_t x370; uint32_t x371; fiat_p256_uint1 x372; - fiat_p256_addcarryx_u32(&x371, &x372, x370, x321, x353); uint32_t x373; fiat_p256_uint1 x374; - fiat_p256_addcarryx_u32(&x373, &x374, x372, x323, x355); uint32_t x375; - fiat_p256_uint1 x376; - fiat_p256_addcarryx_u32(&x375, &x376, x374, x325, x357); - uint32_t x377; + uint32_t x376; + fiat_p256_uint1 x377; uint32_t x378; - fiat_p256_mulx_u32(&x377, &x378, x359, UINT32_C(0xffffffff)); - uint32_t x379; + fiat_p256_uint1 x379; uint32_t x380; - fiat_p256_mulx_u32(&x379, &x380, x359, UINT32_C(0xffffffff)); - uint32_t x381; + fiat_p256_uint1 x381; uint32_t x382; - fiat_p256_mulx_u32(&x381, &x382, x359, UINT32_C(0xffffffff)); - uint32_t x383; + fiat_p256_uint1 x383; uint32_t x384; - fiat_p256_mulx_u32(&x383, &x384, x359, UINT32_C(0xffffffff)); - uint32_t x385; - fiat_p256_uint1 x386; - fiat_p256_addcarryx_u32(&x385, &x386, 0x0, x384, x381); - uint32_t x387; - fiat_p256_uint1 x388; - fiat_p256_addcarryx_u32(&x387, &x388, x386, x382, x379); - uint32_t x389; - fiat_p256_uint1 x390; - fiat_p256_addcarryx_u32(&x389, &x390, x388, x380, 0x0); - uint32_t x391; - fiat_p256_uint1 x392; - fiat_p256_addcarryx_u32(&x391, &x392, 0x0, x359, x383); - uint32_t x393; - fiat_p256_uint1 x394; - fiat_p256_addcarryx_u32(&x393, &x394, x392, x361, x385); + fiat_p256_uint1 x385; + uint32_t x386; + fiat_p256_uint1 x387; + uint32_t x388; + fiat_p256_uint1 x389; + uint32_t x390; + fiat_p256_uint1 x391; + uint32_t x392; + fiat_p256_uint1 x393; + uint32_t x394; uint32_t x395; - fiat_p256_uint1 x396; - fiat_p256_addcarryx_u32(&x395, &x396, x394, x363, x387); + uint32_t x396; uint32_t x397; - fiat_p256_uint1 x398; - fiat_p256_addcarryx_u32(&x397, &x398, x396, x365, x389); + uint32_t x398; uint32_t x399; - fiat_p256_uint1 x400; - fiat_p256_addcarryx_u32(&x399, &x400, x398, x367, 0x0); + uint32_t x400; uint32_t x401; - fiat_p256_uint1 x402; - fiat_p256_addcarryx_u32(&x401, &x402, x400, x369, 0x0); + uint32_t x402; uint32_t x403; - fiat_p256_uint1 x404; - fiat_p256_addcarryx_u32(&x403, &x404, x402, x371, x359); + uint32_t x404; uint32_t x405; - fiat_p256_uint1 x406; - fiat_p256_addcarryx_u32(&x405, &x406, x404, x373, x377); + uint32_t x406; uint32_t x407; - fiat_p256_uint1 x408; - fiat_p256_addcarryx_u32(&x407, &x408, x406, x375, x378); + uint32_t x408; uint32_t x409; - fiat_p256_uint1 x410; - fiat_p256_addcarryx_u32(&x409, &x410, x408, x376, 0x0); + uint32_t x410; uint32_t x411; - uint32_t x412; - fiat_p256_mulx_u32(&x411, &x412, x5, (arg1[7])); + fiat_p256_uint1 x412; uint32_t x413; - uint32_t x414; - fiat_p256_mulx_u32(&x413, &x414, x5, (arg1[6])); + fiat_p256_uint1 x414; uint32_t x415; - uint32_t x416; - fiat_p256_mulx_u32(&x415, &x416, x5, (arg1[5])); + fiat_p256_uint1 x416; uint32_t x417; - uint32_t x418; - fiat_p256_mulx_u32(&x417, &x418, x5, (arg1[4])); + fiat_p256_uint1 x418; uint32_t x419; - uint32_t x420; - fiat_p256_mulx_u32(&x419, &x420, x5, (arg1[3])); + fiat_p256_uint1 x420; uint32_t x421; - uint32_t x422; - fiat_p256_mulx_u32(&x421, &x422, x5, (arg1[2])); + fiat_p256_uint1 x422; uint32_t x423; - uint32_t x424; - fiat_p256_mulx_u32(&x423, &x424, x5, (arg1[1])); + fiat_p256_uint1 x424; uint32_t x425; uint32_t x426; - fiat_p256_mulx_u32(&x425, &x426, x5, (arg1[0])); - uint32_t x427; - fiat_p256_uint1 x428; - fiat_p256_addcarryx_u32(&x427, &x428, 0x0, x426, x423); - uint32_t x429; - fiat_p256_uint1 x430; - fiat_p256_addcarryx_u32(&x429, &x430, x428, x424, x421); - uint32_t x431; - fiat_p256_uint1 x432; - fiat_p256_addcarryx_u32(&x431, &x432, x430, x422, x419); - uint32_t x433; - fiat_p256_uint1 x434; - fiat_p256_addcarryx_u32(&x433, &x434, x432, x420, x417); - uint32_t x435; - fiat_p256_uint1 x436; - fiat_p256_addcarryx_u32(&x435, &x436, x434, x418, x415); - uint32_t x437; - fiat_p256_uint1 x438; - fiat_p256_addcarryx_u32(&x437, &x438, x436, x416, x413); - uint32_t x439; - fiat_p256_uint1 x440; - fiat_p256_addcarryx_u32(&x439, &x440, x438, x414, x411); - uint32_t x441; - fiat_p256_uint1 x442; - fiat_p256_addcarryx_u32(&x441, &x442, x440, x412, 0x0); - uint32_t x443; - fiat_p256_uint1 x444; - fiat_p256_addcarryx_u32(&x443, &x444, 0x0, x393, x425); + fiat_p256_uint1 x427; + uint32_t x428; + fiat_p256_uint1 x429; + uint32_t x430; + fiat_p256_uint1 x431; + uint32_t x432; + fiat_p256_uint1 x433; + uint32_t x434; + fiat_p256_uint1 x435; + uint32_t x436; + fiat_p256_uint1 x437; + uint32_t x438; + fiat_p256_uint1 x439; + uint32_t x440; + fiat_p256_uint1 x441; + uint32_t x442; + fiat_p256_uint1 x443; + uint32_t x444; uint32_t x445; - fiat_p256_uint1 x446; - fiat_p256_addcarryx_u32(&x445, &x446, x444, x395, x427); + uint32_t x446; uint32_t x447; - fiat_p256_uint1 x448; - fiat_p256_addcarryx_u32(&x447, &x448, x446, x397, x429); + uint32_t x448; uint32_t x449; - fiat_p256_uint1 x450; - fiat_p256_addcarryx_u32(&x449, &x450, x448, x399, x431); + uint32_t x450; uint32_t x451; - fiat_p256_uint1 x452; - fiat_p256_addcarryx_u32(&x451, &x452, x450, x401, x433); - uint32_t x453; - fiat_p256_uint1 x454; - fiat_p256_addcarryx_u32(&x453, &x454, x452, x403, x435); - uint32_t x455; - fiat_p256_uint1 x456; - fiat_p256_addcarryx_u32(&x455, &x456, x454, x405, x437); + uint32_t x452; + fiat_p256_uint1 x453; + uint32_t x454; + fiat_p256_uint1 x455; + uint32_t x456; uint32_t x457; fiat_p256_uint1 x458; - fiat_p256_addcarryx_u32(&x457, &x458, x456, x407, x439); uint32_t x459; fiat_p256_uint1 x460; - fiat_p256_addcarryx_u32(&x459, &x460, x458, x409, x441); uint32_t x461; - uint32_t x462; - fiat_p256_mulx_u32(&x461, &x462, x443, UINT32_C(0xffffffff)); + fiat_p256_uint1 x462; uint32_t x463; - uint32_t x464; - fiat_p256_mulx_u32(&x463, &x464, x443, UINT32_C(0xffffffff)); + fiat_p256_uint1 x464; uint32_t x465; - uint32_t x466; - fiat_p256_mulx_u32(&x465, &x466, x443, UINT32_C(0xffffffff)); + fiat_p256_uint1 x466; uint32_t x467; - uint32_t x468; - fiat_p256_mulx_u32(&x467, &x468, x443, UINT32_C(0xffffffff)); + fiat_p256_uint1 x468; uint32_t x469; fiat_p256_uint1 x470; - fiat_p256_addcarryx_u32(&x469, &x470, 0x0, x468, x465); uint32_t x471; fiat_p256_uint1 x472; - fiat_p256_addcarryx_u32(&x471, &x472, x470, x466, x463); uint32_t x473; fiat_p256_uint1 x474; - fiat_p256_addcarryx_u32(&x473, &x474, x472, x464, 0x0); uint32_t x475; - fiat_p256_uint1 x476; - fiat_p256_addcarryx_u32(&x475, &x476, 0x0, x443, x467); + uint32_t x476; uint32_t x477; - fiat_p256_uint1 x478; - fiat_p256_addcarryx_u32(&x477, &x478, x476, x445, x469); + uint32_t x478; uint32_t x479; - fiat_p256_uint1 x480; - fiat_p256_addcarryx_u32(&x479, &x480, x478, x447, x471); + uint32_t x480; uint32_t x481; - fiat_p256_uint1 x482; - fiat_p256_addcarryx_u32(&x481, &x482, x480, x449, x473); + uint32_t x482; uint32_t x483; - fiat_p256_uint1 x484; - fiat_p256_addcarryx_u32(&x483, &x484, x482, x451, 0x0); + uint32_t x484; uint32_t x485; - fiat_p256_uint1 x486; - fiat_p256_addcarryx_u32(&x485, &x486, x484, x453, 0x0); + uint32_t x486; uint32_t x487; - fiat_p256_uint1 x488; - fiat_p256_addcarryx_u32(&x487, &x488, x486, x455, x443); + uint32_t x488; uint32_t x489; - fiat_p256_uint1 x490; - fiat_p256_addcarryx_u32(&x489, &x490, x488, x457, x461); + uint32_t x490; uint32_t x491; - fiat_p256_uint1 x492; - fiat_p256_addcarryx_u32(&x491, &x492, x490, x459, x462); - uint32_t x493; - fiat_p256_uint1 x494; - fiat_p256_addcarryx_u32(&x493, &x494, x492, x460, 0x0); - uint32_t x495; + uint32_t x492; + fiat_p256_uint1 x493; + uint32_t x494; + fiat_p256_uint1 x495; uint32_t x496; - fiat_p256_mulx_u32(&x495, &x496, x6, (arg1[7])); - uint32_t x497; + fiat_p256_uint1 x497; uint32_t x498; - fiat_p256_mulx_u32(&x497, &x498, x6, (arg1[6])); - uint32_t x499; + fiat_p256_uint1 x499; uint32_t x500; - fiat_p256_mulx_u32(&x499, &x500, x6, (arg1[5])); - uint32_t x501; + fiat_p256_uint1 x501; uint32_t x502; - fiat_p256_mulx_u32(&x501, &x502, x6, (arg1[4])); - uint32_t x503; + fiat_p256_uint1 x503; uint32_t x504; - fiat_p256_mulx_u32(&x503, &x504, x6, (arg1[3])); - uint32_t x505; + fiat_p256_uint1 x505; uint32_t x506; - fiat_p256_mulx_u32(&x505, &x506, x6, (arg1[2])); uint32_t x507; - uint32_t x508; - fiat_p256_mulx_u32(&x507, &x508, x6, (arg1[1])); + fiat_p256_uint1 x508; uint32_t x509; - uint32_t x510; - fiat_p256_mulx_u32(&x509, &x510, x6, (arg1[0])); + fiat_p256_uint1 x510; uint32_t x511; fiat_p256_uint1 x512; - fiat_p256_addcarryx_u32(&x511, &x512, 0x0, x510, x507); uint32_t x513; fiat_p256_uint1 x514; - fiat_p256_addcarryx_u32(&x513, &x514, x512, x508, x505); uint32_t x515; fiat_p256_uint1 x516; - fiat_p256_addcarryx_u32(&x515, &x516, x514, x506, x503); uint32_t x517; fiat_p256_uint1 x518; - fiat_p256_addcarryx_u32(&x517, &x518, x516, x504, x501); uint32_t x519; fiat_p256_uint1 x520; - fiat_p256_addcarryx_u32(&x519, &x520, x518, x502, x499); uint32_t x521; fiat_p256_uint1 x522; - fiat_p256_addcarryx_u32(&x521, &x522, x520, x500, x497); uint32_t x523; fiat_p256_uint1 x524; - fiat_p256_addcarryx_u32(&x523, &x524, x522, x498, x495); uint32_t x525; - fiat_p256_uint1 x526; - fiat_p256_addcarryx_u32(&x525, &x526, x524, x496, 0x0); + uint32_t x526; uint32_t x527; - fiat_p256_uint1 x528; - fiat_p256_addcarryx_u32(&x527, &x528, 0x0, x477, x509); + uint32_t x528; uint32_t x529; - fiat_p256_uint1 x530; - fiat_p256_addcarryx_u32(&x529, &x530, x528, x479, x511); + uint32_t x530; uint32_t x531; - fiat_p256_uint1 x532; - fiat_p256_addcarryx_u32(&x531, &x532, x530, x481, x513); + uint32_t x532; uint32_t x533; fiat_p256_uint1 x534; - fiat_p256_addcarryx_u32(&x533, &x534, x532, x483, x515); uint32_t x535; fiat_p256_uint1 x536; - fiat_p256_addcarryx_u32(&x535, &x536, x534, x485, x517); uint32_t x537; - fiat_p256_uint1 x538; - fiat_p256_addcarryx_u32(&x537, &x538, x536, x487, x519); - uint32_t x539; - fiat_p256_uint1 x540; - fiat_p256_addcarryx_u32(&x539, &x540, x538, x489, x521); - uint32_t x541; - fiat_p256_uint1 x542; - fiat_p256_addcarryx_u32(&x541, &x542, x540, x491, x523); - uint32_t x543; - fiat_p256_uint1 x544; - fiat_p256_addcarryx_u32(&x543, &x544, x542, x493, x525); - uint32_t x545; + uint32_t x538; + fiat_p256_uint1 x539; + uint32_t x540; + fiat_p256_uint1 x541; + uint32_t x542; + fiat_p256_uint1 x543; + uint32_t x544; + fiat_p256_uint1 x545; uint32_t x546; - fiat_p256_mulx_u32(&x545, &x546, x527, UINT32_C(0xffffffff)); - uint32_t x547; + fiat_p256_uint1 x547; uint32_t x548; - fiat_p256_mulx_u32(&x547, &x548, x527, UINT32_C(0xffffffff)); - uint32_t x549; + fiat_p256_uint1 x549; uint32_t x550; - fiat_p256_mulx_u32(&x549, &x550, x527, UINT32_C(0xffffffff)); - uint32_t x551; + fiat_p256_uint1 x551; uint32_t x552; - fiat_p256_mulx_u32(&x551, &x552, x527, UINT32_C(0xffffffff)); - uint32_t x553; - fiat_p256_uint1 x554; - fiat_p256_addcarryx_u32(&x553, &x554, 0x0, x552, x549); - uint32_t x555; - fiat_p256_uint1 x556; - fiat_p256_addcarryx_u32(&x555, &x556, x554, x550, x547); + fiat_p256_uint1 x553; + uint32_t x554; + fiat_p256_uint1 x555; + uint32_t x556; uint32_t x557; - fiat_p256_uint1 x558; - fiat_p256_addcarryx_u32(&x557, &x558, x556, x548, 0x0); + uint32_t x558; uint32_t x559; - fiat_p256_uint1 x560; - fiat_p256_addcarryx_u32(&x559, &x560, 0x0, x527, x551); + uint32_t x560; uint32_t x561; - fiat_p256_uint1 x562; - fiat_p256_addcarryx_u32(&x561, &x562, x560, x529, x553); + uint32_t x562; uint32_t x563; - fiat_p256_uint1 x564; - fiat_p256_addcarryx_u32(&x563, &x564, x562, x531, x555); + uint32_t x564; uint32_t x565; - fiat_p256_uint1 x566; - fiat_p256_addcarryx_u32(&x565, &x566, x564, x533, x557); + uint32_t x566; uint32_t x567; - fiat_p256_uint1 x568; - fiat_p256_addcarryx_u32(&x567, &x568, x566, x535, 0x0); + uint32_t x568; uint32_t x569; - fiat_p256_uint1 x570; - fiat_p256_addcarryx_u32(&x569, &x570, x568, x537, 0x0); + uint32_t x570; uint32_t x571; - fiat_p256_uint1 x572; - fiat_p256_addcarryx_u32(&x571, &x572, x570, x539, x527); + uint32_t x572; uint32_t x573; fiat_p256_uint1 x574; - fiat_p256_addcarryx_u32(&x573, &x574, x572, x541, x545); uint32_t x575; fiat_p256_uint1 x576; - fiat_p256_addcarryx_u32(&x575, &x576, x574, x543, x546); uint32_t x577; fiat_p256_uint1 x578; - fiat_p256_addcarryx_u32(&x577, &x578, x576, x544, 0x0); uint32_t x579; - uint32_t x580; - fiat_p256_mulx_u32(&x579, &x580, x7, (arg1[7])); + fiat_p256_uint1 x580; uint32_t x581; - uint32_t x582; - fiat_p256_mulx_u32(&x581, &x582, x7, (arg1[6])); + fiat_p256_uint1 x582; uint32_t x583; - uint32_t x584; - fiat_p256_mulx_u32(&x583, &x584, x7, (arg1[5])); + fiat_p256_uint1 x584; uint32_t x585; - uint32_t x586; - fiat_p256_mulx_u32(&x585, &x586, x7, (arg1[4])); + fiat_p256_uint1 x586; uint32_t x587; uint32_t x588; - fiat_p256_mulx_u32(&x587, &x588, x7, (arg1[3])); - uint32_t x589; + fiat_p256_uint1 x589; uint32_t x590; - fiat_p256_mulx_u32(&x589, &x590, x7, (arg1[2])); - uint32_t x591; + fiat_p256_uint1 x591; uint32_t x592; - fiat_p256_mulx_u32(&x591, &x592, x7, (arg1[1])); - uint32_t x593; + fiat_p256_uint1 x593; uint32_t x594; - fiat_p256_mulx_u32(&x593, &x594, x7, (arg1[0])); - uint32_t x595; - fiat_p256_uint1 x596; - fiat_p256_addcarryx_u32(&x595, &x596, 0x0, x594, x591); - uint32_t x597; - fiat_p256_uint1 x598; - fiat_p256_addcarryx_u32(&x597, &x598, x596, x592, x589); - uint32_t x599; - fiat_p256_uint1 x600; - fiat_p256_addcarryx_u32(&x599, &x600, x598, x590, x587); - uint32_t x601; - fiat_p256_uint1 x602; - fiat_p256_addcarryx_u32(&x601, &x602, x600, x588, x585); - uint32_t x603; - fiat_p256_uint1 x604; - fiat_p256_addcarryx_u32(&x603, &x604, x602, x586, x583); - uint32_t x605; - fiat_p256_uint1 x606; - fiat_p256_addcarryx_u32(&x605, &x606, x604, x584, x581); + fiat_p256_uint1 x595; + uint32_t x596; + fiat_p256_uint1 x597; + uint32_t x598; + fiat_p256_uint1 x599; + uint32_t x600; + fiat_p256_uint1 x601; + uint32_t x602; + fiat_p256_uint1 x603; + uint32_t x604; + fiat_p256_uint1 x605; + uint32_t x606; uint32_t x607; - fiat_p256_uint1 x608; - fiat_p256_addcarryx_u32(&x607, &x608, x606, x582, x579); + uint32_t x608; uint32_t x609; - fiat_p256_uint1 x610; - fiat_p256_addcarryx_u32(&x609, &x610, x608, x580, 0x0); + uint32_t x610; uint32_t x611; - fiat_p256_uint1 x612; - fiat_p256_addcarryx_u32(&x611, &x612, 0x0, x561, x593); + uint32_t x612; uint32_t x613; - fiat_p256_uint1 x614; - fiat_p256_addcarryx_u32(&x613, &x614, x612, x563, x595); - uint32_t x615; - fiat_p256_uint1 x616; - fiat_p256_addcarryx_u32(&x615, &x616, x614, x565, x597); - uint32_t x617; - fiat_p256_uint1 x618; - fiat_p256_addcarryx_u32(&x617, &x618, x616, x567, x599); + uint32_t x614; + fiat_p256_uint1 x615; + uint32_t x616; + fiat_p256_uint1 x617; + uint32_t x618; uint32_t x619; fiat_p256_uint1 x620; - fiat_p256_addcarryx_u32(&x619, &x620, x618, x569, x601); uint32_t x621; fiat_p256_uint1 x622; - fiat_p256_addcarryx_u32(&x621, &x622, x620, x571, x603); uint32_t x623; fiat_p256_uint1 x624; - fiat_p256_addcarryx_u32(&x623, &x624, x622, x573, x605); uint32_t x625; fiat_p256_uint1 x626; - fiat_p256_addcarryx_u32(&x625, &x626, x624, x575, x607); uint32_t x627; fiat_p256_uint1 x628; - fiat_p256_addcarryx_u32(&x627, &x628, x626, x577, x609); uint32_t x629; - uint32_t x630; - fiat_p256_mulx_u32(&x629, &x630, x611, UINT32_C(0xffffffff)); + fiat_p256_uint1 x630; uint32_t x631; - uint32_t x632; - fiat_p256_mulx_u32(&x631, &x632, x611, UINT32_C(0xffffffff)); + fiat_p256_uint1 x632; uint32_t x633; - uint32_t x634; - fiat_p256_mulx_u32(&x633, &x634, x611, UINT32_C(0xffffffff)); + fiat_p256_uint1 x634; uint32_t x635; - uint32_t x636; - fiat_p256_mulx_u32(&x635, &x636, x611, UINT32_C(0xffffffff)); + fiat_p256_uint1 x636; uint32_t x637; - fiat_p256_uint1 x638; - fiat_p256_addcarryx_u32(&x637, &x638, 0x0, x636, x633); - uint32_t x639; - fiat_p256_uint1 x640; - fiat_p256_addcarryx_u32(&x639, &x640, x638, x634, x631); - uint32_t x641; - fiat_p256_uint1 x642; - fiat_p256_addcarryx_u32(&x641, &x642, x640, x632, 0x0); - uint32_t x643; - fiat_p256_uint1 x644; - fiat_p256_addcarryx_u32(&x643, &x644, 0x0, x611, x635); - uint32_t x645; - fiat_p256_uint1 x646; - fiat_p256_addcarryx_u32(&x645, &x646, x644, x613, x637); - uint32_t x647; - fiat_p256_uint1 x648; - fiat_p256_addcarryx_u32(&x647, &x648, x646, x615, x639); - uint32_t x649; - fiat_p256_uint1 x650; - fiat_p256_addcarryx_u32(&x649, &x650, x648, x617, x641); - uint32_t x651; - fiat_p256_uint1 x652; - fiat_p256_addcarryx_u32(&x651, &x652, x650, x619, 0x0); - uint32_t x653; - fiat_p256_uint1 x654; - fiat_p256_addcarryx_u32(&x653, &x654, x652, x621, 0x0); - uint32_t x655; - fiat_p256_uint1 x656; - fiat_p256_addcarryx_u32(&x655, &x656, x654, x623, x611); + uint32_t x638; + fiat_p256_uint1 x639; + uint32_t x640; + fiat_p256_uint1 x641; + uint32_t x642; + fiat_p256_uint1 x643; + uint32_t x644; + fiat_p256_uint1 x645; + uint32_t x646; + fiat_p256_uint1 x647; + uint32_t x648; + fiat_p256_uint1 x649; + uint32_t x650; + fiat_p256_uint1 x651; + uint32_t x652; + fiat_p256_uint1 x653; + uint32_t x654; + fiat_p256_uint1 x655; + uint32_t x656; uint32_t x657; - fiat_p256_uint1 x658; - fiat_p256_addcarryx_u32(&x657, &x658, x656, x625, x629); + uint32_t x658; uint32_t x659; - fiat_p256_uint1 x660; - fiat_p256_addcarryx_u32(&x659, &x660, x658, x627, x630); + uint32_t x660; uint32_t x661; - fiat_p256_uint1 x662; - fiat_p256_addcarryx_u32(&x661, &x662, x660, x628, 0x0); + uint32_t x662; uint32_t x663; - fiat_p256_uint1 x664; - fiat_p256_subborrowx_u32(&x663, &x664, 0x0, x645, UINT32_C(0xffffffff)); - uint32_t x665; - fiat_p256_uint1 x666; - fiat_p256_subborrowx_u32(&x665, &x666, x664, x647, UINT32_C(0xffffffff)); - uint32_t x667; - fiat_p256_uint1 x668; - fiat_p256_subborrowx_u32(&x667, &x668, x666, x649, UINT32_C(0xffffffff)); - uint32_t x669; - fiat_p256_uint1 x670; - fiat_p256_subborrowx_u32(&x669, &x670, x668, x651, 0x0); - uint32_t x671; - fiat_p256_uint1 x672; - fiat_p256_subborrowx_u32(&x671, &x672, x670, x653, 0x0); - uint32_t x673; - fiat_p256_uint1 x674; - fiat_p256_subborrowx_u32(&x673, &x674, x672, x655, 0x0); - uint32_t x675; - fiat_p256_uint1 x676; - fiat_p256_subborrowx_u32(&x675, &x676, x674, x657, 0x1); - uint32_t x677; - fiat_p256_uint1 x678; - fiat_p256_subborrowx_u32(&x677, &x678, x676, x659, UINT32_C(0xffffffff)); - uint32_t x679; - fiat_p256_uint1 x680; - fiat_p256_subborrowx_u32(&x679, &x680, x678, x661, 0x0); - uint32_t x681; - fiat_p256_cmovznz_u32(&x681, x680, x663, x645); - uint32_t x682; - fiat_p256_cmovznz_u32(&x682, x680, x665, x647); - uint32_t x683; - fiat_p256_cmovznz_u32(&x683, x680, x667, x649); - uint32_t x684; - fiat_p256_cmovznz_u32(&x684, x680, x669, x651); - uint32_t x685; - fiat_p256_cmovznz_u32(&x685, x680, x671, x653); - uint32_t x686; - fiat_p256_cmovznz_u32(&x686, x680, x673, x655); - uint32_t x687; - fiat_p256_cmovznz_u32(&x687, x680, x675, x657); - uint32_t x688; - fiat_p256_cmovznz_u32(&x688, x680, x677, x659); - out1[0] = x681; - out1[1] = x682; - out1[2] = x683; - out1[3] = x684; - out1[4] = x685; - out1[5] = x686; - out1[6] = x687; - out1[7] = x688; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[0]); + fiat_p256_mulx_u32(&x9, &x10, x8, (arg1[7])); + fiat_p256_mulx_u32(&x11, &x12, x8, (arg1[6])); + fiat_p256_mulx_u32(&x13, &x14, x8, (arg1[5])); + fiat_p256_mulx_u32(&x15, &x16, x8, (arg1[4])); + fiat_p256_mulx_u32(&x17, &x18, x8, (arg1[3])); + fiat_p256_mulx_u32(&x19, &x20, x8, (arg1[2])); + fiat_p256_mulx_u32(&x21, &x22, x8, (arg1[1])); + fiat_p256_mulx_u32(&x23, &x24, x8, (arg1[0])); + fiat_p256_addcarryx_u32(&x25, &x26, 0x0, x24, x21); + fiat_p256_addcarryx_u32(&x27, &x28, x26, x22, x19); + fiat_p256_addcarryx_u32(&x29, &x30, x28, x20, x17); + fiat_p256_addcarryx_u32(&x31, &x32, x30, x18, x15); + fiat_p256_addcarryx_u32(&x33, &x34, x32, x16, x13); + fiat_p256_addcarryx_u32(&x35, &x36, x34, x14, x11); + fiat_p256_addcarryx_u32(&x37, &x38, x36, x12, x9); + x39 = (x38 + x10); + fiat_p256_mulx_u32(&x40, &x41, x23, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x42, &x43, x23, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x44, &x45, x23, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x46, &x47, x23, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x48, &x49, 0x0, x47, x44); + fiat_p256_addcarryx_u32(&x50, &x51, x49, x45, x42); + x52 = (x51 + x43); + fiat_p256_addcarryx_u32(&x53, &x54, 0x0, x23, x46); + fiat_p256_addcarryx_u32(&x55, &x56, x54, x25, x48); + fiat_p256_addcarryx_u32(&x57, &x58, x56, x27, x50); + fiat_p256_addcarryx_u32(&x59, &x60, x58, x29, x52); + fiat_p256_addcarryx_u32(&x61, &x62, x60, x31, 0x0); + fiat_p256_addcarryx_u32(&x63, &x64, x62, x33, 0x0); + fiat_p256_addcarryx_u32(&x65, &x66, x64, x35, x23); + fiat_p256_addcarryx_u32(&x67, &x68, x66, x37, x40); + fiat_p256_addcarryx_u32(&x69, &x70, x68, x39, x41); + fiat_p256_mulx_u32(&x71, &x72, x1, (arg1[7])); + fiat_p256_mulx_u32(&x73, &x74, x1, (arg1[6])); + fiat_p256_mulx_u32(&x75, &x76, x1, (arg1[5])); + fiat_p256_mulx_u32(&x77, &x78, x1, (arg1[4])); + fiat_p256_mulx_u32(&x79, &x80, x1, (arg1[3])); + fiat_p256_mulx_u32(&x81, &x82, x1, (arg1[2])); + fiat_p256_mulx_u32(&x83, &x84, x1, (arg1[1])); + fiat_p256_mulx_u32(&x85, &x86, x1, (arg1[0])); + fiat_p256_addcarryx_u32(&x87, &x88, 0x0, x86, x83); + fiat_p256_addcarryx_u32(&x89, &x90, x88, x84, x81); + fiat_p256_addcarryx_u32(&x91, &x92, x90, x82, x79); + fiat_p256_addcarryx_u32(&x93, &x94, x92, x80, x77); + fiat_p256_addcarryx_u32(&x95, &x96, x94, x78, x75); + fiat_p256_addcarryx_u32(&x97, &x98, x96, x76, x73); + fiat_p256_addcarryx_u32(&x99, &x100, x98, x74, x71); + x101 = (x100 + x72); + fiat_p256_addcarryx_u32(&x102, &x103, 0x0, x55, x85); + fiat_p256_addcarryx_u32(&x104, &x105, x103, x57, x87); + fiat_p256_addcarryx_u32(&x106, &x107, x105, x59, x89); + fiat_p256_addcarryx_u32(&x108, &x109, x107, x61, x91); + fiat_p256_addcarryx_u32(&x110, &x111, x109, x63, x93); + fiat_p256_addcarryx_u32(&x112, &x113, x111, x65, x95); + fiat_p256_addcarryx_u32(&x114, &x115, x113, x67, x97); + fiat_p256_addcarryx_u32(&x116, &x117, x115, x69, x99); + fiat_p256_addcarryx_u32(&x118, &x119, x117, x70, x101); + fiat_p256_mulx_u32(&x120, &x121, x102, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x122, &x123, x102, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x124, &x125, x102, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x126, &x127, x102, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x128, &x129, 0x0, x127, x124); + fiat_p256_addcarryx_u32(&x130, &x131, x129, x125, x122); + x132 = (x131 + x123); + fiat_p256_addcarryx_u32(&x133, &x134, 0x0, x102, x126); + fiat_p256_addcarryx_u32(&x135, &x136, x134, x104, x128); + fiat_p256_addcarryx_u32(&x137, &x138, x136, x106, x130); + fiat_p256_addcarryx_u32(&x139, &x140, x138, x108, x132); + fiat_p256_addcarryx_u32(&x141, &x142, x140, x110, 0x0); + fiat_p256_addcarryx_u32(&x143, &x144, x142, x112, 0x0); + fiat_p256_addcarryx_u32(&x145, &x146, x144, x114, x102); + fiat_p256_addcarryx_u32(&x147, &x148, x146, x116, x120); + fiat_p256_addcarryx_u32(&x149, &x150, x148, x118, x121); + x151 = ((uint32_t)x150 + x119); + fiat_p256_mulx_u32(&x152, &x153, x2, (arg1[7])); + fiat_p256_mulx_u32(&x154, &x155, x2, (arg1[6])); + fiat_p256_mulx_u32(&x156, &x157, x2, (arg1[5])); + fiat_p256_mulx_u32(&x158, &x159, x2, (arg1[4])); + fiat_p256_mulx_u32(&x160, &x161, x2, (arg1[3])); + fiat_p256_mulx_u32(&x162, &x163, x2, (arg1[2])); + fiat_p256_mulx_u32(&x164, &x165, x2, (arg1[1])); + fiat_p256_mulx_u32(&x166, &x167, x2, (arg1[0])); + fiat_p256_addcarryx_u32(&x168, &x169, 0x0, x167, x164); + fiat_p256_addcarryx_u32(&x170, &x171, x169, x165, x162); + fiat_p256_addcarryx_u32(&x172, &x173, x171, x163, x160); + fiat_p256_addcarryx_u32(&x174, &x175, x173, x161, x158); + fiat_p256_addcarryx_u32(&x176, &x177, x175, x159, x156); + fiat_p256_addcarryx_u32(&x178, &x179, x177, x157, x154); + fiat_p256_addcarryx_u32(&x180, &x181, x179, x155, x152); + x182 = (x181 + x153); + fiat_p256_addcarryx_u32(&x183, &x184, 0x0, x135, x166); + fiat_p256_addcarryx_u32(&x185, &x186, x184, x137, x168); + fiat_p256_addcarryx_u32(&x187, &x188, x186, x139, x170); + fiat_p256_addcarryx_u32(&x189, &x190, x188, x141, x172); + fiat_p256_addcarryx_u32(&x191, &x192, x190, x143, x174); + fiat_p256_addcarryx_u32(&x193, &x194, x192, x145, x176); + fiat_p256_addcarryx_u32(&x195, &x196, x194, x147, x178); + fiat_p256_addcarryx_u32(&x197, &x198, x196, x149, x180); + fiat_p256_addcarryx_u32(&x199, &x200, x198, x151, x182); + fiat_p256_mulx_u32(&x201, &x202, x183, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x203, &x204, x183, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x205, &x206, x183, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x207, &x208, x183, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x209, &x210, 0x0, x208, x205); + fiat_p256_addcarryx_u32(&x211, &x212, x210, x206, x203); + x213 = (x212 + x204); + fiat_p256_addcarryx_u32(&x214, &x215, 0x0, x183, x207); + fiat_p256_addcarryx_u32(&x216, &x217, x215, x185, x209); + fiat_p256_addcarryx_u32(&x218, &x219, x217, x187, x211); + fiat_p256_addcarryx_u32(&x220, &x221, x219, x189, x213); + fiat_p256_addcarryx_u32(&x222, &x223, x221, x191, 0x0); + fiat_p256_addcarryx_u32(&x224, &x225, x223, x193, 0x0); + fiat_p256_addcarryx_u32(&x226, &x227, x225, x195, x183); + fiat_p256_addcarryx_u32(&x228, &x229, x227, x197, x201); + fiat_p256_addcarryx_u32(&x230, &x231, x229, x199, x202); + x232 = ((uint32_t)x231 + x200); + fiat_p256_mulx_u32(&x233, &x234, x3, (arg1[7])); + fiat_p256_mulx_u32(&x235, &x236, x3, (arg1[6])); + fiat_p256_mulx_u32(&x237, &x238, x3, (arg1[5])); + fiat_p256_mulx_u32(&x239, &x240, x3, (arg1[4])); + fiat_p256_mulx_u32(&x241, &x242, x3, (arg1[3])); + fiat_p256_mulx_u32(&x243, &x244, x3, (arg1[2])); + fiat_p256_mulx_u32(&x245, &x246, x3, (arg1[1])); + fiat_p256_mulx_u32(&x247, &x248, x3, (arg1[0])); + fiat_p256_addcarryx_u32(&x249, &x250, 0x0, x248, x245); + fiat_p256_addcarryx_u32(&x251, &x252, x250, x246, x243); + fiat_p256_addcarryx_u32(&x253, &x254, x252, x244, x241); + fiat_p256_addcarryx_u32(&x255, &x256, x254, x242, x239); + fiat_p256_addcarryx_u32(&x257, &x258, x256, x240, x237); + fiat_p256_addcarryx_u32(&x259, &x260, x258, x238, x235); + fiat_p256_addcarryx_u32(&x261, &x262, x260, x236, x233); + x263 = (x262 + x234); + fiat_p256_addcarryx_u32(&x264, &x265, 0x0, x216, x247); + fiat_p256_addcarryx_u32(&x266, &x267, x265, x218, x249); + fiat_p256_addcarryx_u32(&x268, &x269, x267, x220, x251); + fiat_p256_addcarryx_u32(&x270, &x271, x269, x222, x253); + fiat_p256_addcarryx_u32(&x272, &x273, x271, x224, x255); + fiat_p256_addcarryx_u32(&x274, &x275, x273, x226, x257); + fiat_p256_addcarryx_u32(&x276, &x277, x275, x228, x259); + fiat_p256_addcarryx_u32(&x278, &x279, x277, x230, x261); + fiat_p256_addcarryx_u32(&x280, &x281, x279, x232, x263); + fiat_p256_mulx_u32(&x282, &x283, x264, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x284, &x285, x264, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x286, &x287, x264, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x288, &x289, x264, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x290, &x291, 0x0, x289, x286); + fiat_p256_addcarryx_u32(&x292, &x293, x291, x287, x284); + x294 = (x293 + x285); + fiat_p256_addcarryx_u32(&x295, &x296, 0x0, x264, x288); + fiat_p256_addcarryx_u32(&x297, &x298, x296, x266, x290); + fiat_p256_addcarryx_u32(&x299, &x300, x298, x268, x292); + fiat_p256_addcarryx_u32(&x301, &x302, x300, x270, x294); + fiat_p256_addcarryx_u32(&x303, &x304, x302, x272, 0x0); + fiat_p256_addcarryx_u32(&x305, &x306, x304, x274, 0x0); + fiat_p256_addcarryx_u32(&x307, &x308, x306, x276, x264); + fiat_p256_addcarryx_u32(&x309, &x310, x308, x278, x282); + fiat_p256_addcarryx_u32(&x311, &x312, x310, x280, x283); + x313 = ((uint32_t)x312 + x281); + fiat_p256_mulx_u32(&x314, &x315, x4, (arg1[7])); + fiat_p256_mulx_u32(&x316, &x317, x4, (arg1[6])); + fiat_p256_mulx_u32(&x318, &x319, x4, (arg1[5])); + fiat_p256_mulx_u32(&x320, &x321, x4, (arg1[4])); + fiat_p256_mulx_u32(&x322, &x323, x4, (arg1[3])); + fiat_p256_mulx_u32(&x324, &x325, x4, (arg1[2])); + fiat_p256_mulx_u32(&x326, &x327, x4, (arg1[1])); + fiat_p256_mulx_u32(&x328, &x329, x4, (arg1[0])); + fiat_p256_addcarryx_u32(&x330, &x331, 0x0, x329, x326); + fiat_p256_addcarryx_u32(&x332, &x333, x331, x327, x324); + fiat_p256_addcarryx_u32(&x334, &x335, x333, x325, x322); + fiat_p256_addcarryx_u32(&x336, &x337, x335, x323, x320); + fiat_p256_addcarryx_u32(&x338, &x339, x337, x321, x318); + fiat_p256_addcarryx_u32(&x340, &x341, x339, x319, x316); + fiat_p256_addcarryx_u32(&x342, &x343, x341, x317, x314); + x344 = (x343 + x315); + fiat_p256_addcarryx_u32(&x345, &x346, 0x0, x297, x328); + fiat_p256_addcarryx_u32(&x347, &x348, x346, x299, x330); + fiat_p256_addcarryx_u32(&x349, &x350, x348, x301, x332); + fiat_p256_addcarryx_u32(&x351, &x352, x350, x303, x334); + fiat_p256_addcarryx_u32(&x353, &x354, x352, x305, x336); + fiat_p256_addcarryx_u32(&x355, &x356, x354, x307, x338); + fiat_p256_addcarryx_u32(&x357, &x358, x356, x309, x340); + fiat_p256_addcarryx_u32(&x359, &x360, x358, x311, x342); + fiat_p256_addcarryx_u32(&x361, &x362, x360, x313, x344); + fiat_p256_mulx_u32(&x363, &x364, x345, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x365, &x366, x345, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x367, &x368, x345, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x369, &x370, x345, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x371, &x372, 0x0, x370, x367); + fiat_p256_addcarryx_u32(&x373, &x374, x372, x368, x365); + x375 = (x374 + x366); + fiat_p256_addcarryx_u32(&x376, &x377, 0x0, x345, x369); + fiat_p256_addcarryx_u32(&x378, &x379, x377, x347, x371); + fiat_p256_addcarryx_u32(&x380, &x381, x379, x349, x373); + fiat_p256_addcarryx_u32(&x382, &x383, x381, x351, x375); + fiat_p256_addcarryx_u32(&x384, &x385, x383, x353, 0x0); + fiat_p256_addcarryx_u32(&x386, &x387, x385, x355, 0x0); + fiat_p256_addcarryx_u32(&x388, &x389, x387, x357, x345); + fiat_p256_addcarryx_u32(&x390, &x391, x389, x359, x363); + fiat_p256_addcarryx_u32(&x392, &x393, x391, x361, x364); + x394 = ((uint32_t)x393 + x362); + fiat_p256_mulx_u32(&x395, &x396, x5, (arg1[7])); + fiat_p256_mulx_u32(&x397, &x398, x5, (arg1[6])); + fiat_p256_mulx_u32(&x399, &x400, x5, (arg1[5])); + fiat_p256_mulx_u32(&x401, &x402, x5, (arg1[4])); + fiat_p256_mulx_u32(&x403, &x404, x5, (arg1[3])); + fiat_p256_mulx_u32(&x405, &x406, x5, (arg1[2])); + fiat_p256_mulx_u32(&x407, &x408, x5, (arg1[1])); + fiat_p256_mulx_u32(&x409, &x410, x5, (arg1[0])); + fiat_p256_addcarryx_u32(&x411, &x412, 0x0, x410, x407); + fiat_p256_addcarryx_u32(&x413, &x414, x412, x408, x405); + fiat_p256_addcarryx_u32(&x415, &x416, x414, x406, x403); + fiat_p256_addcarryx_u32(&x417, &x418, x416, x404, x401); + fiat_p256_addcarryx_u32(&x419, &x420, x418, x402, x399); + fiat_p256_addcarryx_u32(&x421, &x422, x420, x400, x397); + fiat_p256_addcarryx_u32(&x423, &x424, x422, x398, x395); + x425 = (x424 + x396); + fiat_p256_addcarryx_u32(&x426, &x427, 0x0, x378, x409); + fiat_p256_addcarryx_u32(&x428, &x429, x427, x380, x411); + fiat_p256_addcarryx_u32(&x430, &x431, x429, x382, x413); + fiat_p256_addcarryx_u32(&x432, &x433, x431, x384, x415); + fiat_p256_addcarryx_u32(&x434, &x435, x433, x386, x417); + fiat_p256_addcarryx_u32(&x436, &x437, x435, x388, x419); + fiat_p256_addcarryx_u32(&x438, &x439, x437, x390, x421); + fiat_p256_addcarryx_u32(&x440, &x441, x439, x392, x423); + fiat_p256_addcarryx_u32(&x442, &x443, x441, x394, x425); + fiat_p256_mulx_u32(&x444, &x445, x426, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x446, &x447, x426, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x448, &x449, x426, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x450, &x451, x426, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x452, &x453, 0x0, x451, x448); + fiat_p256_addcarryx_u32(&x454, &x455, x453, x449, x446); + x456 = (x455 + x447); + fiat_p256_addcarryx_u32(&x457, &x458, 0x0, x426, x450); + fiat_p256_addcarryx_u32(&x459, &x460, x458, x428, x452); + fiat_p256_addcarryx_u32(&x461, &x462, x460, x430, x454); + fiat_p256_addcarryx_u32(&x463, &x464, x462, x432, x456); + fiat_p256_addcarryx_u32(&x465, &x466, x464, x434, 0x0); + fiat_p256_addcarryx_u32(&x467, &x468, x466, x436, 0x0); + fiat_p256_addcarryx_u32(&x469, &x470, x468, x438, x426); + fiat_p256_addcarryx_u32(&x471, &x472, x470, x440, x444); + fiat_p256_addcarryx_u32(&x473, &x474, x472, x442, x445); + x475 = ((uint32_t)x474 + x443); + fiat_p256_mulx_u32(&x476, &x477, x6, (arg1[7])); + fiat_p256_mulx_u32(&x478, &x479, x6, (arg1[6])); + fiat_p256_mulx_u32(&x480, &x481, x6, (arg1[5])); + fiat_p256_mulx_u32(&x482, &x483, x6, (arg1[4])); + fiat_p256_mulx_u32(&x484, &x485, x6, (arg1[3])); + fiat_p256_mulx_u32(&x486, &x487, x6, (arg1[2])); + fiat_p256_mulx_u32(&x488, &x489, x6, (arg1[1])); + fiat_p256_mulx_u32(&x490, &x491, x6, (arg1[0])); + fiat_p256_addcarryx_u32(&x492, &x493, 0x0, x491, x488); + fiat_p256_addcarryx_u32(&x494, &x495, x493, x489, x486); + fiat_p256_addcarryx_u32(&x496, &x497, x495, x487, x484); + fiat_p256_addcarryx_u32(&x498, &x499, x497, x485, x482); + fiat_p256_addcarryx_u32(&x500, &x501, x499, x483, x480); + fiat_p256_addcarryx_u32(&x502, &x503, x501, x481, x478); + fiat_p256_addcarryx_u32(&x504, &x505, x503, x479, x476); + x506 = (x505 + x477); + fiat_p256_addcarryx_u32(&x507, &x508, 0x0, x459, x490); + fiat_p256_addcarryx_u32(&x509, &x510, x508, x461, x492); + fiat_p256_addcarryx_u32(&x511, &x512, x510, x463, x494); + fiat_p256_addcarryx_u32(&x513, &x514, x512, x465, x496); + fiat_p256_addcarryx_u32(&x515, &x516, x514, x467, x498); + fiat_p256_addcarryx_u32(&x517, &x518, x516, x469, x500); + fiat_p256_addcarryx_u32(&x519, &x520, x518, x471, x502); + fiat_p256_addcarryx_u32(&x521, &x522, x520, x473, x504); + fiat_p256_addcarryx_u32(&x523, &x524, x522, x475, x506); + fiat_p256_mulx_u32(&x525, &x526, x507, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x527, &x528, x507, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x529, &x530, x507, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x531, &x532, x507, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x533, &x534, 0x0, x532, x529); + fiat_p256_addcarryx_u32(&x535, &x536, x534, x530, x527); + x537 = (x536 + x528); + fiat_p256_addcarryx_u32(&x538, &x539, 0x0, x507, x531); + fiat_p256_addcarryx_u32(&x540, &x541, x539, x509, x533); + fiat_p256_addcarryx_u32(&x542, &x543, x541, x511, x535); + fiat_p256_addcarryx_u32(&x544, &x545, x543, x513, x537); + fiat_p256_addcarryx_u32(&x546, &x547, x545, x515, 0x0); + fiat_p256_addcarryx_u32(&x548, &x549, x547, x517, 0x0); + fiat_p256_addcarryx_u32(&x550, &x551, x549, x519, x507); + fiat_p256_addcarryx_u32(&x552, &x553, x551, x521, x525); + fiat_p256_addcarryx_u32(&x554, &x555, x553, x523, x526); + x556 = ((uint32_t)x555 + x524); + fiat_p256_mulx_u32(&x557, &x558, x7, (arg1[7])); + fiat_p256_mulx_u32(&x559, &x560, x7, (arg1[6])); + fiat_p256_mulx_u32(&x561, &x562, x7, (arg1[5])); + fiat_p256_mulx_u32(&x563, &x564, x7, (arg1[4])); + fiat_p256_mulx_u32(&x565, &x566, x7, (arg1[3])); + fiat_p256_mulx_u32(&x567, &x568, x7, (arg1[2])); + fiat_p256_mulx_u32(&x569, &x570, x7, (arg1[1])); + fiat_p256_mulx_u32(&x571, &x572, x7, (arg1[0])); + fiat_p256_addcarryx_u32(&x573, &x574, 0x0, x572, x569); + fiat_p256_addcarryx_u32(&x575, &x576, x574, x570, x567); + fiat_p256_addcarryx_u32(&x577, &x578, x576, x568, x565); + fiat_p256_addcarryx_u32(&x579, &x580, x578, x566, x563); + fiat_p256_addcarryx_u32(&x581, &x582, x580, x564, x561); + fiat_p256_addcarryx_u32(&x583, &x584, x582, x562, x559); + fiat_p256_addcarryx_u32(&x585, &x586, x584, x560, x557); + x587 = (x586 + x558); + fiat_p256_addcarryx_u32(&x588, &x589, 0x0, x540, x571); + fiat_p256_addcarryx_u32(&x590, &x591, x589, x542, x573); + fiat_p256_addcarryx_u32(&x592, &x593, x591, x544, x575); + fiat_p256_addcarryx_u32(&x594, &x595, x593, x546, x577); + fiat_p256_addcarryx_u32(&x596, &x597, x595, x548, x579); + fiat_p256_addcarryx_u32(&x598, &x599, x597, x550, x581); + fiat_p256_addcarryx_u32(&x600, &x601, x599, x552, x583); + fiat_p256_addcarryx_u32(&x602, &x603, x601, x554, x585); + fiat_p256_addcarryx_u32(&x604, &x605, x603, x556, x587); + fiat_p256_mulx_u32(&x606, &x607, x588, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x608, &x609, x588, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x610, &x611, x588, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x612, &x613, x588, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x614, &x615, 0x0, x613, x610); + fiat_p256_addcarryx_u32(&x616, &x617, x615, x611, x608); + x618 = (x617 + x609); + fiat_p256_addcarryx_u32(&x619, &x620, 0x0, x588, x612); + fiat_p256_addcarryx_u32(&x621, &x622, x620, x590, x614); + fiat_p256_addcarryx_u32(&x623, &x624, x622, x592, x616); + fiat_p256_addcarryx_u32(&x625, &x626, x624, x594, x618); + fiat_p256_addcarryx_u32(&x627, &x628, x626, x596, 0x0); + fiat_p256_addcarryx_u32(&x629, &x630, x628, x598, 0x0); + fiat_p256_addcarryx_u32(&x631, &x632, x630, x600, x588); + fiat_p256_addcarryx_u32(&x633, &x634, x632, x602, x606); + fiat_p256_addcarryx_u32(&x635, &x636, x634, x604, x607); + x637 = ((uint32_t)x636 + x605); + fiat_p256_subborrowx_u32(&x638, &x639, 0x0, x621, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x640, &x641, x639, x623, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x642, &x643, x641, x625, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x644, &x645, x643, x627, 0x0); + fiat_p256_subborrowx_u32(&x646, &x647, x645, x629, 0x0); + fiat_p256_subborrowx_u32(&x648, &x649, x647, x631, 0x0); + fiat_p256_subborrowx_u32(&x650, &x651, x649, x633, 0x1); + fiat_p256_subborrowx_u32(&x652, &x653, x651, x635, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x654, &x655, x653, x637, 0x0); + fiat_p256_cmovznz_u32(&x656, x655, x638, x621); + fiat_p256_cmovznz_u32(&x657, x655, x640, x623); + fiat_p256_cmovznz_u32(&x658, x655, x642, x625); + fiat_p256_cmovznz_u32(&x659, x655, x644, x627); + fiat_p256_cmovznz_u32(&x660, x655, x646, x629); + fiat_p256_cmovznz_u32(&x661, x655, x648, x631); + fiat_p256_cmovznz_u32(&x662, x655, x650, x633); + fiat_p256_cmovznz_u32(&x663, x655, x652, x635); + out1[0] = x656; + out1[1] = x657; + out1[2] = x658; + out1[3] = x659; + out1[4] = x660; + out1[5] = x661; + out1[6] = x662; + out1[7] = x663; } /* @@ -2232,70 +2225,70 @@ static void fiat_p256_square(uint32_t out1[8], const uint32_t arg1[8]) { static void fiat_p256_add(uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { uint32_t x1; fiat_p256_uint1 x2; - fiat_p256_addcarryx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); uint32_t x3; fiat_p256_uint1 x4; - fiat_p256_addcarryx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); uint32_t x5; fiat_p256_uint1 x6; - fiat_p256_addcarryx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); uint32_t x7; fiat_p256_uint1 x8; - fiat_p256_addcarryx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); uint32_t x9; fiat_p256_uint1 x10; - fiat_p256_addcarryx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); uint32_t x11; fiat_p256_uint1 x12; - fiat_p256_addcarryx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); uint32_t x13; fiat_p256_uint1 x14; - fiat_p256_addcarryx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); uint32_t x15; fiat_p256_uint1 x16; - fiat_p256_addcarryx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); uint32_t x17; fiat_p256_uint1 x18; - fiat_p256_subborrowx_u32(&x17, &x18, 0x0, x1, UINT32_C(0xffffffff)); uint32_t x19; fiat_p256_uint1 x20; - fiat_p256_subborrowx_u32(&x19, &x20, x18, x3, UINT32_C(0xffffffff)); uint32_t x21; fiat_p256_uint1 x22; - fiat_p256_subborrowx_u32(&x21, &x22, x20, x5, UINT32_C(0xffffffff)); uint32_t x23; fiat_p256_uint1 x24; - fiat_p256_subborrowx_u32(&x23, &x24, x22, x7, 0x0); uint32_t x25; fiat_p256_uint1 x26; - fiat_p256_subborrowx_u32(&x25, &x26, x24, x9, 0x0); uint32_t x27; fiat_p256_uint1 x28; - fiat_p256_subborrowx_u32(&x27, &x28, x26, x11, 0x0); uint32_t x29; fiat_p256_uint1 x30; - fiat_p256_subborrowx_u32(&x29, &x30, x28, x13, 0x1); uint32_t x31; fiat_p256_uint1 x32; - fiat_p256_subborrowx_u32(&x31, &x32, x30, x15, UINT32_C(0xffffffff)); uint32_t x33; fiat_p256_uint1 x34; - fiat_p256_subborrowx_u32(&x33, &x34, x32, x16, 0x0); uint32_t x35; - fiat_p256_cmovznz_u32(&x35, x34, x17, x1); uint32_t x36; - fiat_p256_cmovznz_u32(&x36, x34, x19, x3); uint32_t x37; - fiat_p256_cmovznz_u32(&x37, x34, x21, x5); uint32_t x38; - fiat_p256_cmovznz_u32(&x38, x34, x23, x7); uint32_t x39; - fiat_p256_cmovznz_u32(&x39, x34, x25, x9); uint32_t x40; - fiat_p256_cmovznz_u32(&x40, x34, x27, x11); uint32_t x41; - fiat_p256_cmovznz_u32(&x41, x34, x29, x13); uint32_t x42; + fiat_p256_addcarryx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_p256_addcarryx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_p256_addcarryx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_p256_addcarryx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_p256_addcarryx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_p256_addcarryx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_p256_addcarryx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); + fiat_p256_addcarryx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); + fiat_p256_subborrowx_u32(&x17, &x18, 0x0, x1, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x19, &x20, x18, x3, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x21, &x22, x20, x5, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x23, &x24, x22, x7, 0x0); + fiat_p256_subborrowx_u32(&x25, &x26, x24, x9, 0x0); + fiat_p256_subborrowx_u32(&x27, &x28, x26, x11, 0x0); + fiat_p256_subborrowx_u32(&x29, &x30, x28, x13, 0x1); + fiat_p256_subborrowx_u32(&x31, &x32, x30, x15, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x33, &x34, x32, x16, 0x0); + fiat_p256_cmovznz_u32(&x35, x34, x17, x1); + fiat_p256_cmovznz_u32(&x36, x34, x19, x3); + fiat_p256_cmovznz_u32(&x37, x34, x21, x5); + fiat_p256_cmovznz_u32(&x38, x34, x23, x7); + fiat_p256_cmovznz_u32(&x39, x34, x25, x9); + fiat_p256_cmovznz_u32(&x40, x34, x27, x11); + fiat_p256_cmovznz_u32(&x41, x34, x29, x13); fiat_p256_cmovznz_u32(&x42, x34, x31, x15); out1[0] = x35; out1[1] = x36; @@ -2325,62 +2318,62 @@ static void fiat_p256_add(uint32_t out1[8], const uint32_t arg1[8], const uint32 static void fiat_p256_sub(uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { uint32_t x1; fiat_p256_uint1 x2; - fiat_p256_subborrowx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); uint32_t x3; fiat_p256_uint1 x4; - fiat_p256_subborrowx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); uint32_t x5; fiat_p256_uint1 x6; - fiat_p256_subborrowx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); uint32_t x7; fiat_p256_uint1 x8; - fiat_p256_subborrowx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); uint32_t x9; fiat_p256_uint1 x10; - fiat_p256_subborrowx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); uint32_t x11; fiat_p256_uint1 x12; - fiat_p256_subborrowx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); uint32_t x13; fiat_p256_uint1 x14; - fiat_p256_subborrowx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); uint32_t x15; fiat_p256_uint1 x16; - fiat_p256_subborrowx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); uint32_t x17; - fiat_p256_cmovznz_u32(&x17, x16, 0x0, UINT32_C(0xffffffff)); uint32_t x18; fiat_p256_uint1 x19; - fiat_p256_addcarryx_u32(&x18, &x19, 0x0, x1, (x17 & UINT32_C(0xffffffff))); uint32_t x20; fiat_p256_uint1 x21; - fiat_p256_addcarryx_u32(&x20, &x21, x19, x3, (x17 & UINT32_C(0xffffffff))); uint32_t x22; fiat_p256_uint1 x23; - fiat_p256_addcarryx_u32(&x22, &x23, x21, x5, (x17 & UINT32_C(0xffffffff))); uint32_t x24; fiat_p256_uint1 x25; - fiat_p256_addcarryx_u32(&x24, &x25, x23, x7, 0x0); uint32_t x26; fiat_p256_uint1 x27; - fiat_p256_addcarryx_u32(&x26, &x27, x25, x9, 0x0); uint32_t x28; fiat_p256_uint1 x29; - fiat_p256_addcarryx_u32(&x28, &x29, x27, x11, 0x0); uint32_t x30; fiat_p256_uint1 x31; - fiat_p256_addcarryx_u32(&x30, &x31, x29, x13, (fiat_p256_uint1)(x17 & 0x1)); uint32_t x32; fiat_p256_uint1 x33; - fiat_p256_addcarryx_u32(&x32, &x33, x31, x15, (x17 & UINT32_C(0xffffffff))); - out1[0] = x18; - out1[1] = x20; - out1[2] = x22; - out1[3] = x24; - out1[4] = x26; - out1[5] = x28; - out1[6] = x30; - out1[7] = x32; + fiat_p256_subborrowx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_p256_subborrowx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_p256_subborrowx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_p256_subborrowx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_p256_subborrowx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_p256_subborrowx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_p256_subborrowx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); + fiat_p256_subborrowx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); + fiat_p256_cmovznz_u32(&x17, x16, 0x0, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x18, &x19, 0x0, x1, x17); + fiat_p256_addcarryx_u32(&x20, &x21, x19, x3, x17); + fiat_p256_addcarryx_u32(&x22, &x23, x21, x5, x17); + fiat_p256_addcarryx_u32(&x24, &x25, x23, x7, 0x0); + fiat_p256_addcarryx_u32(&x26, &x27, x25, x9, 0x0); + fiat_p256_addcarryx_u32(&x28, &x29, x27, x11, 0x0); + fiat_p256_addcarryx_u32(&x30, &x31, x29, x13, (fiat_p256_uint1)(x17 & 0x1)); + fiat_p256_addcarryx_u32(&x32, &x33, x31, x15, x17); + out1[0] = x18; + out1[1] = x20; + out1[2] = x22; + out1[3] = x24; + out1[4] = x26; + out1[5] = x28; + out1[6] = x30; + out1[7] = x32; } /* @@ -2399,54 +2392,54 @@ static void fiat_p256_sub(uint32_t out1[8], const uint32_t arg1[8], const uint32 static void fiat_p256_opp(uint32_t out1[8], const uint32_t arg1[8]) { uint32_t x1; fiat_p256_uint1 x2; - fiat_p256_subborrowx_u32(&x1, &x2, 0x0, 0x0, (arg1[0])); uint32_t x3; fiat_p256_uint1 x4; - fiat_p256_subborrowx_u32(&x3, &x4, x2, 0x0, (arg1[1])); uint32_t x5; fiat_p256_uint1 x6; - fiat_p256_subborrowx_u32(&x5, &x6, x4, 0x0, (arg1[2])); uint32_t x7; fiat_p256_uint1 x8; - fiat_p256_subborrowx_u32(&x7, &x8, x6, 0x0, (arg1[3])); uint32_t x9; fiat_p256_uint1 x10; - fiat_p256_subborrowx_u32(&x9, &x10, x8, 0x0, (arg1[4])); uint32_t x11; fiat_p256_uint1 x12; - fiat_p256_subborrowx_u32(&x11, &x12, x10, 0x0, (arg1[5])); uint32_t x13; fiat_p256_uint1 x14; - fiat_p256_subborrowx_u32(&x13, &x14, x12, 0x0, (arg1[6])); uint32_t x15; fiat_p256_uint1 x16; - fiat_p256_subborrowx_u32(&x15, &x16, x14, 0x0, (arg1[7])); uint32_t x17; - fiat_p256_cmovznz_u32(&x17, x16, 0x0, UINT32_C(0xffffffff)); uint32_t x18; fiat_p256_uint1 x19; - fiat_p256_addcarryx_u32(&x18, &x19, 0x0, x1, (x17 & UINT32_C(0xffffffff))); uint32_t x20; fiat_p256_uint1 x21; - fiat_p256_addcarryx_u32(&x20, &x21, x19, x3, (x17 & UINT32_C(0xffffffff))); uint32_t x22; fiat_p256_uint1 x23; - fiat_p256_addcarryx_u32(&x22, &x23, x21, x5, (x17 & UINT32_C(0xffffffff))); uint32_t x24; fiat_p256_uint1 x25; - fiat_p256_addcarryx_u32(&x24, &x25, x23, x7, 0x0); uint32_t x26; fiat_p256_uint1 x27; - fiat_p256_addcarryx_u32(&x26, &x27, x25, x9, 0x0); uint32_t x28; fiat_p256_uint1 x29; - fiat_p256_addcarryx_u32(&x28, &x29, x27, x11, 0x0); uint32_t x30; fiat_p256_uint1 x31; - fiat_p256_addcarryx_u32(&x30, &x31, x29, x13, (fiat_p256_uint1)(x17 & 0x1)); uint32_t x32; fiat_p256_uint1 x33; - fiat_p256_addcarryx_u32(&x32, &x33, x31, x15, (x17 & UINT32_C(0xffffffff))); + fiat_p256_subborrowx_u32(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_p256_subborrowx_u32(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_p256_subborrowx_u32(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_p256_subborrowx_u32(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_p256_subborrowx_u32(&x9, &x10, x8, 0x0, (arg1[4])); + fiat_p256_subborrowx_u32(&x11, &x12, x10, 0x0, (arg1[5])); + fiat_p256_subborrowx_u32(&x13, &x14, x12, 0x0, (arg1[6])); + fiat_p256_subborrowx_u32(&x15, &x16, x14, 0x0, (arg1[7])); + fiat_p256_cmovznz_u32(&x17, x16, 0x0, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x18, &x19, 0x0, x1, x17); + fiat_p256_addcarryx_u32(&x20, &x21, x19, x3, x17); + fiat_p256_addcarryx_u32(&x22, &x23, x21, x5, x17); + fiat_p256_addcarryx_u32(&x24, &x25, x23, x7, 0x0); + fiat_p256_addcarryx_u32(&x26, &x27, x25, x9, 0x0); + fiat_p256_addcarryx_u32(&x28, &x29, x27, x11, 0x0); + fiat_p256_addcarryx_u32(&x30, &x31, x29, x13, (fiat_p256_uint1)(x17 & 0x1)); + fiat_p256_addcarryx_u32(&x32, &x33, x31, x15, x17); out1[0] = x18; out1[1] = x20; out1[2] = x22; @@ -2471,837 +2464,2300 @@ static void fiat_p256_opp(uint32_t out1[8], const uint32_t arg1[8]) { * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_p256_from_montgomery(uint32_t out1[8], const uint32_t arg1[8]) { - uint32_t x1 = (arg1[0]); + uint32_t x1; uint32_t x2; uint32_t x3; - fiat_p256_mulx_u32(&x2, &x3, x1, UINT32_C(0xffffffff)); uint32_t x4; uint32_t x5; - fiat_p256_mulx_u32(&x4, &x5, x1, UINT32_C(0xffffffff)); uint32_t x6; uint32_t x7; - fiat_p256_mulx_u32(&x6, &x7, x1, UINT32_C(0xffffffff)); uint32_t x8; uint32_t x9; - fiat_p256_mulx_u32(&x8, &x9, x1, UINT32_C(0xffffffff)); uint32_t x10; fiat_p256_uint1 x11; - fiat_p256_addcarryx_u32(&x10, &x11, 0x0, x9, x6); uint32_t x12; fiat_p256_uint1 x13; - fiat_p256_addcarryx_u32(&x12, &x13, x11, x7, x4); uint32_t x14; fiat_p256_uint1 x15; - fiat_p256_addcarryx_u32(&x14, &x15, 0x0, x1, x8); uint32_t x16; fiat_p256_uint1 x17; - fiat_p256_addcarryx_u32(&x16, &x17, x15, 0x0, x10); uint32_t x18; fiat_p256_uint1 x19; - fiat_p256_addcarryx_u32(&x18, &x19, x17, 0x0, x12); uint32_t x20; fiat_p256_uint1 x21; - fiat_p256_addcarryx_u32(&x20, &x21, x13, x5, 0x0); uint32_t x22; fiat_p256_uint1 x23; - fiat_p256_addcarryx_u32(&x22, &x23, x19, 0x0, x20); uint32_t x24; fiat_p256_uint1 x25; - fiat_p256_addcarryx_u32(&x24, &x25, 0x0, x16, (arg1[1])); uint32_t x26; fiat_p256_uint1 x27; - fiat_p256_addcarryx_u32(&x26, &x27, x25, x18, 0x0); uint32_t x28; - fiat_p256_uint1 x29; - fiat_p256_addcarryx_u32(&x28, &x29, x27, x22, 0x0); + uint32_t x29; uint32_t x30; uint32_t x31; - fiat_p256_mulx_u32(&x30, &x31, x24, UINT32_C(0xffffffff)); uint32_t x32; uint32_t x33; - fiat_p256_mulx_u32(&x32, &x33, x24, UINT32_C(0xffffffff)); uint32_t x34; uint32_t x35; - fiat_p256_mulx_u32(&x34, &x35, x24, UINT32_C(0xffffffff)); uint32_t x36; - uint32_t x37; - fiat_p256_mulx_u32(&x36, &x37, x24, UINT32_C(0xffffffff)); + fiat_p256_uint1 x37; uint32_t x38; fiat_p256_uint1 x39; - fiat_p256_addcarryx_u32(&x38, &x39, 0x0, x37, x34); uint32_t x40; fiat_p256_uint1 x41; - fiat_p256_addcarryx_u32(&x40, &x41, x39, x35, x32); uint32_t x42; fiat_p256_uint1 x43; - fiat_p256_addcarryx_u32(&x42, &x43, 0x0, x24, x36); uint32_t x44; fiat_p256_uint1 x45; - fiat_p256_addcarryx_u32(&x44, &x45, x43, x26, x38); uint32_t x46; fiat_p256_uint1 x47; - fiat_p256_addcarryx_u32(&x46, &x47, x45, x28, x40); uint32_t x48; fiat_p256_uint1 x49; - fiat_p256_addcarryx_u32(&x48, &x49, x41, x33, 0x0); uint32_t x50; fiat_p256_uint1 x51; - fiat_p256_addcarryx_u32(&x50, &x51, x23, 0x0, 0x0); uint32_t x52; fiat_p256_uint1 x53; - fiat_p256_addcarryx_u32(&x52, &x53, x29, (fiat_p256_uint1)x50, 0x0); uint32_t x54; fiat_p256_uint1 x55; - fiat_p256_addcarryx_u32(&x54, &x55, x47, x52, x48); uint32_t x56; fiat_p256_uint1 x57; - fiat_p256_addcarryx_u32(&x56, &x57, 0x0, x2, x24); uint32_t x58; - fiat_p256_uint1 x59; - fiat_p256_addcarryx_u32(&x58, &x59, x57, x3, x30); + uint32_t x59; uint32_t x60; - fiat_p256_uint1 x61; - fiat_p256_addcarryx_u32(&x60, &x61, 0x0, x44, (arg1[2])); + uint32_t x61; uint32_t x62; - fiat_p256_uint1 x63; - fiat_p256_addcarryx_u32(&x62, &x63, x61, x46, 0x0); + uint32_t x63; uint32_t x64; - fiat_p256_uint1 x65; - fiat_p256_addcarryx_u32(&x64, &x65, x63, x54, 0x0); + uint32_t x65; uint32_t x66; - uint32_t x67; - fiat_p256_mulx_u32(&x66, &x67, x60, UINT32_C(0xffffffff)); + fiat_p256_uint1 x67; uint32_t x68; - uint32_t x69; - fiat_p256_mulx_u32(&x68, &x69, x60, UINT32_C(0xffffffff)); + fiat_p256_uint1 x69; uint32_t x70; - uint32_t x71; - fiat_p256_mulx_u32(&x70, &x71, x60, UINT32_C(0xffffffff)); + fiat_p256_uint1 x71; uint32_t x72; - uint32_t x73; - fiat_p256_mulx_u32(&x72, &x73, x60, UINT32_C(0xffffffff)); + fiat_p256_uint1 x73; uint32_t x74; fiat_p256_uint1 x75; - fiat_p256_addcarryx_u32(&x74, &x75, 0x0, x73, x70); uint32_t x76; fiat_p256_uint1 x77; - fiat_p256_addcarryx_u32(&x76, &x77, x75, x71, x68); uint32_t x78; fiat_p256_uint1 x79; - fiat_p256_addcarryx_u32(&x78, &x79, 0x0, x60, x72); uint32_t x80; fiat_p256_uint1 x81; - fiat_p256_addcarryx_u32(&x80, &x81, x79, x62, x74); uint32_t x82; fiat_p256_uint1 x83; - fiat_p256_addcarryx_u32(&x82, &x83, x81, x64, x76); uint32_t x84; fiat_p256_uint1 x85; - fiat_p256_addcarryx_u32(&x84, &x85, x77, x69, 0x0); uint32_t x86; fiat_p256_uint1 x87; - fiat_p256_addcarryx_u32(&x86, &x87, x55, 0x0, 0x0); uint32_t x88; fiat_p256_uint1 x89; - fiat_p256_addcarryx_u32(&x88, &x89, x65, (fiat_p256_uint1)x86, 0x0); uint32_t x90; fiat_p256_uint1 x91; - fiat_p256_addcarryx_u32(&x90, &x91, x83, x88, x84); uint32_t x92; fiat_p256_uint1 x93; - fiat_p256_addcarryx_u32(&x92, &x93, x91, x1, 0x0); uint32_t x94; fiat_p256_uint1 x95; - fiat_p256_addcarryx_u32(&x94, &x95, x93, x56, 0x0); uint32_t x96; fiat_p256_uint1 x97; - fiat_p256_addcarryx_u32(&x96, &x97, x95, x58, x60); uint32_t x98; fiat_p256_uint1 x99; - fiat_p256_addcarryx_u32(&x98, &x99, x59, 0x0, x31); uint32_t x100; fiat_p256_uint1 x101; - fiat_p256_addcarryx_u32(&x100, &x101, x97, x98, x66); uint32_t x102; - fiat_p256_uint1 x103; - fiat_p256_addcarryx_u32(&x102, &x103, 0x0, x80, (arg1[3])); + uint32_t x103; uint32_t x104; - fiat_p256_uint1 x105; - fiat_p256_addcarryx_u32(&x104, &x105, x103, x82, 0x0); + uint32_t x105; uint32_t x106; - fiat_p256_uint1 x107; - fiat_p256_addcarryx_u32(&x106, &x107, x105, x90, 0x0); + uint32_t x107; uint32_t x108; - fiat_p256_uint1 x109; - fiat_p256_addcarryx_u32(&x108, &x109, x107, x92, 0x0); + uint32_t x109; uint32_t x110; fiat_p256_uint1 x111; - fiat_p256_addcarryx_u32(&x110, &x111, x109, x94, 0x0); uint32_t x112; fiat_p256_uint1 x113; - fiat_p256_addcarryx_u32(&x112, &x113, x111, x96, 0x0); uint32_t x114; fiat_p256_uint1 x115; - fiat_p256_addcarryx_u32(&x114, &x115, x113, x100, 0x0); uint32_t x116; fiat_p256_uint1 x117; - fiat_p256_addcarryx_u32(&x116, &x117, x101, 0x0, x67); uint32_t x118; fiat_p256_uint1 x119; - fiat_p256_addcarryx_u32(&x118, &x119, x115, x116, 0x0); uint32_t x120; - uint32_t x121; - fiat_p256_mulx_u32(&x120, &x121, x102, UINT32_C(0xffffffff)); + fiat_p256_uint1 x121; uint32_t x122; - uint32_t x123; - fiat_p256_mulx_u32(&x122, &x123, x102, UINT32_C(0xffffffff)); + fiat_p256_uint1 x123; uint32_t x124; - uint32_t x125; - fiat_p256_mulx_u32(&x124, &x125, x102, UINT32_C(0xffffffff)); + fiat_p256_uint1 x125; uint32_t x126; - uint32_t x127; - fiat_p256_mulx_u32(&x126, &x127, x102, UINT32_C(0xffffffff)); + fiat_p256_uint1 x127; uint32_t x128; fiat_p256_uint1 x129; - fiat_p256_addcarryx_u32(&x128, &x129, 0x0, x127, x124); uint32_t x130; fiat_p256_uint1 x131; - fiat_p256_addcarryx_u32(&x130, &x131, x129, x125, x122); uint32_t x132; fiat_p256_uint1 x133; - fiat_p256_addcarryx_u32(&x132, &x133, 0x0, x102, x126); uint32_t x134; fiat_p256_uint1 x135; - fiat_p256_addcarryx_u32(&x134, &x135, x133, x104, x128); uint32_t x136; fiat_p256_uint1 x137; - fiat_p256_addcarryx_u32(&x136, &x137, x135, x106, x130); uint32_t x138; fiat_p256_uint1 x139; - fiat_p256_addcarryx_u32(&x138, &x139, x131, x123, 0x0); uint32_t x140; fiat_p256_uint1 x141; - fiat_p256_addcarryx_u32(&x140, &x141, x137, x108, x138); uint32_t x142; fiat_p256_uint1 x143; - fiat_p256_addcarryx_u32(&x142, &x143, x141, x110, 0x0); uint32_t x144; fiat_p256_uint1 x145; - fiat_p256_addcarryx_u32(&x144, &x145, x143, x112, 0x0); uint32_t x146; fiat_p256_uint1 x147; - fiat_p256_addcarryx_u32(&x146, &x147, x145, x114, x102); uint32_t x148; - fiat_p256_uint1 x149; - fiat_p256_addcarryx_u32(&x148, &x149, x147, x118, x120); + uint32_t x149; uint32_t x150; - fiat_p256_uint1 x151; - fiat_p256_addcarryx_u32(&x150, &x151, x119, 0x0, 0x0); + uint32_t x151; uint32_t x152; - fiat_p256_uint1 x153; - fiat_p256_addcarryx_u32(&x152, &x153, x149, (fiat_p256_uint1)x150, x121); + uint32_t x153; uint32_t x154; - fiat_p256_uint1 x155; - fiat_p256_addcarryx_u32(&x154, &x155, 0x0, x134, (arg1[4])); + uint32_t x155; uint32_t x156; fiat_p256_uint1 x157; - fiat_p256_addcarryx_u32(&x156, &x157, x155, x136, 0x0); uint32_t x158; fiat_p256_uint1 x159; - fiat_p256_addcarryx_u32(&x158, &x159, x157, x140, 0x0); uint32_t x160; fiat_p256_uint1 x161; - fiat_p256_addcarryx_u32(&x160, &x161, x159, x142, 0x0); uint32_t x162; fiat_p256_uint1 x163; - fiat_p256_addcarryx_u32(&x162, &x163, x161, x144, 0x0); uint32_t x164; fiat_p256_uint1 x165; - fiat_p256_addcarryx_u32(&x164, &x165, x163, x146, 0x0); uint32_t x166; fiat_p256_uint1 x167; - fiat_p256_addcarryx_u32(&x166, &x167, x165, x148, 0x0); uint32_t x168; fiat_p256_uint1 x169; - fiat_p256_addcarryx_u32(&x168, &x169, x167, x152, 0x0); uint32_t x170; - uint32_t x171; - fiat_p256_mulx_u32(&x170, &x171, x154, UINT32_C(0xffffffff)); + fiat_p256_uint1 x171; uint32_t x172; - uint32_t x173; - fiat_p256_mulx_u32(&x172, &x173, x154, UINT32_C(0xffffffff)); + fiat_p256_uint1 x173; uint32_t x174; - uint32_t x175; - fiat_p256_mulx_u32(&x174, &x175, x154, UINT32_C(0xffffffff)); + fiat_p256_uint1 x175; uint32_t x176; - uint32_t x177; - fiat_p256_mulx_u32(&x176, &x177, x154, UINT32_C(0xffffffff)); + fiat_p256_uint1 x177; uint32_t x178; fiat_p256_uint1 x179; - fiat_p256_addcarryx_u32(&x178, &x179, 0x0, x177, x174); uint32_t x180; fiat_p256_uint1 x181; - fiat_p256_addcarryx_u32(&x180, &x181, x179, x175, x172); uint32_t x182; fiat_p256_uint1 x183; - fiat_p256_addcarryx_u32(&x182, &x183, 0x0, x154, x176); uint32_t x184; fiat_p256_uint1 x185; - fiat_p256_addcarryx_u32(&x184, &x185, x183, x156, x178); uint32_t x186; fiat_p256_uint1 x187; - fiat_p256_addcarryx_u32(&x186, &x187, x185, x158, x180); uint32_t x188; fiat_p256_uint1 x189; - fiat_p256_addcarryx_u32(&x188, &x189, x181, x173, 0x0); uint32_t x190; fiat_p256_uint1 x191; - fiat_p256_addcarryx_u32(&x190, &x191, x187, x160, x188); uint32_t x192; fiat_p256_uint1 x193; - fiat_p256_addcarryx_u32(&x192, &x193, x191, x162, 0x0); uint32_t x194; - fiat_p256_uint1 x195; - fiat_p256_addcarryx_u32(&x194, &x195, x193, x164, 0x0); + uint32_t x195; uint32_t x196; - fiat_p256_uint1 x197; - fiat_p256_addcarryx_u32(&x196, &x197, x195, x166, x154); + uint32_t x197; uint32_t x198; - fiat_p256_uint1 x199; - fiat_p256_addcarryx_u32(&x198, &x199, x197, x168, x170); + uint32_t x199; uint32_t x200; - fiat_p256_uint1 x201; - fiat_p256_addcarryx_u32(&x200, &x201, x153, 0x0, 0x0); + uint32_t x201; uint32_t x202; fiat_p256_uint1 x203; - fiat_p256_addcarryx_u32(&x202, &x203, x169, (fiat_p256_uint1)x200, 0x0); uint32_t x204; fiat_p256_uint1 x205; - fiat_p256_addcarryx_u32(&x204, &x205, x199, x202, x171); uint32_t x206; fiat_p256_uint1 x207; - fiat_p256_addcarryx_u32(&x206, &x207, 0x0, x184, (arg1[5])); uint32_t x208; fiat_p256_uint1 x209; - fiat_p256_addcarryx_u32(&x208, &x209, x207, x186, 0x0); uint32_t x210; fiat_p256_uint1 x211; - fiat_p256_addcarryx_u32(&x210, &x211, x209, x190, 0x0); uint32_t x212; fiat_p256_uint1 x213; - fiat_p256_addcarryx_u32(&x212, &x213, x211, x192, 0x0); uint32_t x214; fiat_p256_uint1 x215; - fiat_p256_addcarryx_u32(&x214, &x215, x213, x194, 0x0); uint32_t x216; fiat_p256_uint1 x217; - fiat_p256_addcarryx_u32(&x216, &x217, x215, x196, 0x0); uint32_t x218; fiat_p256_uint1 x219; - fiat_p256_addcarryx_u32(&x218, &x219, x217, x198, 0x0); uint32_t x220; fiat_p256_uint1 x221; - fiat_p256_addcarryx_u32(&x220, &x221, x219, x204, 0x0); uint32_t x222; - uint32_t x223; - fiat_p256_mulx_u32(&x222, &x223, x206, UINT32_C(0xffffffff)); + fiat_p256_uint1 x223; uint32_t x224; - uint32_t x225; - fiat_p256_mulx_u32(&x224, &x225, x206, UINT32_C(0xffffffff)); + fiat_p256_uint1 x225; uint32_t x226; - uint32_t x227; - fiat_p256_mulx_u32(&x226, &x227, x206, UINT32_C(0xffffffff)); + fiat_p256_uint1 x227; uint32_t x228; - uint32_t x229; - fiat_p256_mulx_u32(&x228, &x229, x206, UINT32_C(0xffffffff)); + fiat_p256_uint1 x229; uint32_t x230; fiat_p256_uint1 x231; - fiat_p256_addcarryx_u32(&x230, &x231, 0x0, x229, x226); uint32_t x232; fiat_p256_uint1 x233; - fiat_p256_addcarryx_u32(&x232, &x233, x231, x227, x224); uint32_t x234; fiat_p256_uint1 x235; - fiat_p256_addcarryx_u32(&x234, &x235, 0x0, x206, x228); uint32_t x236; fiat_p256_uint1 x237; - fiat_p256_addcarryx_u32(&x236, &x237, x235, x208, x230); uint32_t x238; fiat_p256_uint1 x239; - fiat_p256_addcarryx_u32(&x238, &x239, x237, x210, x232); uint32_t x240; - fiat_p256_uint1 x241; - fiat_p256_addcarryx_u32(&x240, &x241, x233, x225, 0x0); + uint32_t x241; uint32_t x242; - fiat_p256_uint1 x243; - fiat_p256_addcarryx_u32(&x242, &x243, x239, x212, x240); + uint32_t x243; uint32_t x244; - fiat_p256_uint1 x245; - fiat_p256_addcarryx_u32(&x244, &x245, x243, x214, 0x0); + uint32_t x245; uint32_t x246; - fiat_p256_uint1 x247; - fiat_p256_addcarryx_u32(&x246, &x247, x245, x216, 0x0); + uint32_t x247; uint32_t x248; fiat_p256_uint1 x249; - fiat_p256_addcarryx_u32(&x248, &x249, x247, x218, x206); uint32_t x250; fiat_p256_uint1 x251; - fiat_p256_addcarryx_u32(&x250, &x251, x249, x220, x222); uint32_t x252; fiat_p256_uint1 x253; - fiat_p256_addcarryx_u32(&x252, &x253, x205, 0x0, 0x0); uint32_t x254; fiat_p256_uint1 x255; - fiat_p256_addcarryx_u32(&x254, &x255, x221, (fiat_p256_uint1)x252, 0x0); uint32_t x256; fiat_p256_uint1 x257; - fiat_p256_addcarryx_u32(&x256, &x257, x251, x254, x223); uint32_t x258; fiat_p256_uint1 x259; - fiat_p256_addcarryx_u32(&x258, &x259, 0x0, x236, (arg1[6])); uint32_t x260; fiat_p256_uint1 x261; - fiat_p256_addcarryx_u32(&x260, &x261, x259, x238, 0x0); uint32_t x262; fiat_p256_uint1 x263; - fiat_p256_addcarryx_u32(&x262, &x263, x261, x242, 0x0); uint32_t x264; fiat_p256_uint1 x265; - fiat_p256_addcarryx_u32(&x264, &x265, x263, x244, 0x0); uint32_t x266; fiat_p256_uint1 x267; - fiat_p256_addcarryx_u32(&x266, &x267, x265, x246, 0x0); uint32_t x268; fiat_p256_uint1 x269; - fiat_p256_addcarryx_u32(&x268, &x269, x267, x248, 0x0); uint32_t x270; fiat_p256_uint1 x271; - fiat_p256_addcarryx_u32(&x270, &x271, x269, x250, 0x0); uint32_t x272; fiat_p256_uint1 x273; - fiat_p256_addcarryx_u32(&x272, &x273, x271, x256, 0x0); uint32_t x274; - uint32_t x275; - fiat_p256_mulx_u32(&x274, &x275, x258, UINT32_C(0xffffffff)); + fiat_p256_uint1 x275; uint32_t x276; - uint32_t x277; - fiat_p256_mulx_u32(&x276, &x277, x258, UINT32_C(0xffffffff)); + fiat_p256_uint1 x277; uint32_t x278; - uint32_t x279; - fiat_p256_mulx_u32(&x278, &x279, x258, UINT32_C(0xffffffff)); + fiat_p256_uint1 x279; uint32_t x280; - uint32_t x281; - fiat_p256_mulx_u32(&x280, &x281, x258, UINT32_C(0xffffffff)); + fiat_p256_uint1 x281; uint32_t x282; fiat_p256_uint1 x283; - fiat_p256_addcarryx_u32(&x282, &x283, 0x0, x281, x278); uint32_t x284; fiat_p256_uint1 x285; - fiat_p256_addcarryx_u32(&x284, &x285, x283, x279, x276); uint32_t x286; - fiat_p256_uint1 x287; - fiat_p256_addcarryx_u32(&x286, &x287, 0x0, x258, x280); + uint32_t x287; uint32_t x288; - fiat_p256_uint1 x289; - fiat_p256_addcarryx_u32(&x288, &x289, x287, x260, x282); + uint32_t x289; uint32_t x290; - fiat_p256_uint1 x291; - fiat_p256_addcarryx_u32(&x290, &x291, x289, x262, x284); + uint32_t x291; uint32_t x292; - fiat_p256_uint1 x293; - fiat_p256_addcarryx_u32(&x292, &x293, x285, x277, 0x0); + uint32_t x293; uint32_t x294; fiat_p256_uint1 x295; - fiat_p256_addcarryx_u32(&x294, &x295, x291, x264, x292); uint32_t x296; fiat_p256_uint1 x297; - fiat_p256_addcarryx_u32(&x296, &x297, x295, x266, 0x0); uint32_t x298; fiat_p256_uint1 x299; - fiat_p256_addcarryx_u32(&x298, &x299, x297, x268, 0x0); uint32_t x300; fiat_p256_uint1 x301; - fiat_p256_addcarryx_u32(&x300, &x301, x299, x270, x258); uint32_t x302; fiat_p256_uint1 x303; - fiat_p256_addcarryx_u32(&x302, &x303, x301, x272, x274); uint32_t x304; fiat_p256_uint1 x305; - fiat_p256_addcarryx_u32(&x304, &x305, x257, 0x0, 0x0); uint32_t x306; fiat_p256_uint1 x307; - fiat_p256_addcarryx_u32(&x306, &x307, x273, (fiat_p256_uint1)x304, 0x0); uint32_t x308; fiat_p256_uint1 x309; - fiat_p256_addcarryx_u32(&x308, &x309, x303, x306, x275); uint32_t x310; fiat_p256_uint1 x311; - fiat_p256_addcarryx_u32(&x310, &x311, 0x0, x288, (arg1[7])); uint32_t x312; fiat_p256_uint1 x313; - fiat_p256_addcarryx_u32(&x312, &x313, x311, x290, 0x0); uint32_t x314; fiat_p256_uint1 x315; - fiat_p256_addcarryx_u32(&x314, &x315, x313, x294, 0x0); uint32_t x316; fiat_p256_uint1 x317; - fiat_p256_addcarryx_u32(&x316, &x317, x315, x296, 0x0); uint32_t x318; fiat_p256_uint1 x319; - fiat_p256_addcarryx_u32(&x318, &x319, x317, x298, 0x0); uint32_t x320; fiat_p256_uint1 x321; - fiat_p256_addcarryx_u32(&x320, &x321, x319, x300, 0x0); uint32_t x322; fiat_p256_uint1 x323; - fiat_p256_addcarryx_u32(&x322, &x323, x321, x302, 0x0); uint32_t x324; fiat_p256_uint1 x325; - fiat_p256_addcarryx_u32(&x324, &x325, x323, x308, 0x0); uint32_t x326; - uint32_t x327; - fiat_p256_mulx_u32(&x326, &x327, x310, UINT32_C(0xffffffff)); + fiat_p256_uint1 x327; uint32_t x328; - uint32_t x329; - fiat_p256_mulx_u32(&x328, &x329, x310, UINT32_C(0xffffffff)); + fiat_p256_uint1 x329; uint32_t x330; - uint32_t x331; - fiat_p256_mulx_u32(&x330, &x331, x310, UINT32_C(0xffffffff)); + fiat_p256_uint1 x331; uint32_t x332; - uint32_t x333; - fiat_p256_mulx_u32(&x332, &x333, x310, UINT32_C(0xffffffff)); + fiat_p256_uint1 x333; uint32_t x334; - fiat_p256_uint1 x335; - fiat_p256_addcarryx_u32(&x334, &x335, 0x0, x333, x330); + uint32_t x335; uint32_t x336; - fiat_p256_uint1 x337; - fiat_p256_addcarryx_u32(&x336, &x337, x335, x331, x328); + uint32_t x337; uint32_t x338; - fiat_p256_uint1 x339; - fiat_p256_addcarryx_u32(&x338, &x339, 0x0, x310, x332); + uint32_t x339; uint32_t x340; - fiat_p256_uint1 x341; - fiat_p256_addcarryx_u32(&x340, &x341, x339, x312, x334); - uint32_t x342; - fiat_p256_uint1 x343; - fiat_p256_addcarryx_u32(&x342, &x343, x341, x314, x336); - uint32_t x344; - fiat_p256_uint1 x345; - fiat_p256_addcarryx_u32(&x344, &x345, x337, x329, 0x0); - uint32_t x346; - fiat_p256_uint1 x347; - fiat_p256_addcarryx_u32(&x346, &x347, x343, x316, x344); - uint32_t x348; - fiat_p256_uint1 x349; - fiat_p256_addcarryx_u32(&x348, &x349, x347, x318, 0x0); - uint32_t x350; - fiat_p256_uint1 x351; - fiat_p256_addcarryx_u32(&x350, &x351, x349, x320, 0x0); - uint32_t x352; - fiat_p256_uint1 x353; - fiat_p256_addcarryx_u32(&x352, &x353, x351, x322, x310); - uint32_t x354; - fiat_p256_uint1 x355; - fiat_p256_addcarryx_u32(&x354, &x355, x353, x324, x326); - uint32_t x356; - fiat_p256_uint1 x357; - fiat_p256_addcarryx_u32(&x356, &x357, x309, 0x0, 0x0); - uint32_t x358; - fiat_p256_uint1 x359; - fiat_p256_addcarryx_u32(&x358, &x359, x325, (fiat_p256_uint1)x356, 0x0); - uint32_t x360; - fiat_p256_uint1 x361; - fiat_p256_addcarryx_u32(&x360, &x361, x355, x358, x327); - uint32_t x362; - fiat_p256_uint1 x363; - fiat_p256_subborrowx_u32(&x362, &x363, 0x0, x340, UINT32_C(0xffffffff)); - uint32_t x364; - fiat_p256_uint1 x365; - fiat_p256_subborrowx_u32(&x364, &x365, x363, x342, UINT32_C(0xffffffff)); - uint32_t x366; - fiat_p256_uint1 x367; - fiat_p256_subborrowx_u32(&x366, &x367, x365, x346, UINT32_C(0xffffffff)); - uint32_t x368; - fiat_p256_uint1 x369; - fiat_p256_subborrowx_u32(&x368, &x369, x367, x348, 0x0); - uint32_t x370; - fiat_p256_uint1 x371; - fiat_p256_subborrowx_u32(&x370, &x371, x369, x350, 0x0); - uint32_t x372; - fiat_p256_uint1 x373; - fiat_p256_subborrowx_u32(&x372, &x373, x371, x352, 0x0); - uint32_t x374; - fiat_p256_uint1 x375; - fiat_p256_subborrowx_u32(&x374, &x375, x373, x354, 0x1); - uint32_t x376; - fiat_p256_uint1 x377; - fiat_p256_subborrowx_u32(&x376, &x377, x375, x360, UINT32_C(0xffffffff)); - uint32_t x378; - fiat_p256_uint1 x379; - fiat_p256_addcarryx_u32(&x378, &x379, x361, 0x0, 0x0); - uint32_t x380; - fiat_p256_uint1 x381; - fiat_p256_subborrowx_u32(&x380, &x381, x377, (fiat_p256_uint1)x378, 0x0); - uint32_t x382; - fiat_p256_cmovznz_u32(&x382, x381, x362, x340); - uint32_t x383; - fiat_p256_cmovznz_u32(&x383, x381, x364, x342); - uint32_t x384; - fiat_p256_cmovznz_u32(&x384, x381, x366, x346); - uint32_t x385; - fiat_p256_cmovznz_u32(&x385, x381, x368, x348); - uint32_t x386; - fiat_p256_cmovznz_u32(&x386, x381, x370, x350); - uint32_t x387; - fiat_p256_cmovznz_u32(&x387, x381, x372, x352); - uint32_t x388; - fiat_p256_cmovznz_u32(&x388, x381, x374, x354); - uint32_t x389; - fiat_p256_cmovznz_u32(&x389, x381, x376, x360); - out1[0] = x382; - out1[1] = x383; - out1[2] = x384; - out1[3] = x385; - out1[4] = x386; - out1[5] = x387; - out1[6] = x388; - out1[7] = x389; + uint32_t x341; + x1 = (arg1[0]); + fiat_p256_mulx_u32(&x2, &x3, x1, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x4, &x5, x1, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x6, &x7, x1, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x8, &x9, x1, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x10, &x11, 0x0, x9, x6); + fiat_p256_addcarryx_u32(&x12, &x13, x11, x7, x4); + fiat_p256_addcarryx_u32(&x14, &x15, 0x0, x1, x8); + fiat_p256_addcarryx_u32(&x16, &x17, x15, 0x0, x10); + fiat_p256_addcarryx_u32(&x18, &x19, x17, 0x0, x12); + fiat_p256_addcarryx_u32(&x20, &x21, x19, 0x0, (x13 + x5)); + fiat_p256_addcarryx_u32(&x22, &x23, 0x0, x16, (arg1[1])); + fiat_p256_addcarryx_u32(&x24, &x25, x23, x18, 0x0); + fiat_p256_addcarryx_u32(&x26, &x27, x25, x20, 0x0); + fiat_p256_mulx_u32(&x28, &x29, x22, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x30, &x31, x22, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x32, &x33, x22, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x34, &x35, x22, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x36, &x37, 0x0, x35, x32); + fiat_p256_addcarryx_u32(&x38, &x39, x37, x33, x30); + fiat_p256_addcarryx_u32(&x40, &x41, 0x0, x22, x34); + fiat_p256_addcarryx_u32(&x42, &x43, x41, x24, x36); + fiat_p256_addcarryx_u32(&x44, &x45, x43, x26, x38); + fiat_p256_addcarryx_u32(&x46, &x47, x45, ((uint32_t)x27 + x21), (x39 + x31)); + fiat_p256_addcarryx_u32(&x48, &x49, 0x0, x2, x22); + fiat_p256_addcarryx_u32(&x50, &x51, x49, x3, x28); + fiat_p256_addcarryx_u32(&x52, &x53, 0x0, x42, (arg1[2])); + fiat_p256_addcarryx_u32(&x54, &x55, x53, x44, 0x0); + fiat_p256_addcarryx_u32(&x56, &x57, x55, x46, 0x0); + fiat_p256_mulx_u32(&x58, &x59, x52, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x60, &x61, x52, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x62, &x63, x52, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x64, &x65, x52, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x66, &x67, 0x0, x65, x62); + fiat_p256_addcarryx_u32(&x68, &x69, x67, x63, x60); + fiat_p256_addcarryx_u32(&x70, &x71, 0x0, x52, x64); + fiat_p256_addcarryx_u32(&x72, &x73, x71, x54, x66); + fiat_p256_addcarryx_u32(&x74, &x75, x73, x56, x68); + fiat_p256_addcarryx_u32(&x76, &x77, x75, ((uint32_t)x57 + x47), (x69 + x61)); + fiat_p256_addcarryx_u32(&x78, &x79, x77, x1, 0x0); + fiat_p256_addcarryx_u32(&x80, &x81, x79, x48, 0x0); + fiat_p256_addcarryx_u32(&x82, &x83, x81, x50, x52); + fiat_p256_addcarryx_u32(&x84, &x85, x83, (x51 + x29), x58); + fiat_p256_addcarryx_u32(&x86, &x87, 0x0, x72, (arg1[3])); + fiat_p256_addcarryx_u32(&x88, &x89, x87, x74, 0x0); + fiat_p256_addcarryx_u32(&x90, &x91, x89, x76, 0x0); + fiat_p256_addcarryx_u32(&x92, &x93, x91, x78, 0x0); + fiat_p256_addcarryx_u32(&x94, &x95, x93, x80, 0x0); + fiat_p256_addcarryx_u32(&x96, &x97, x95, x82, 0x0); + fiat_p256_addcarryx_u32(&x98, &x99, x97, x84, 0x0); + fiat_p256_addcarryx_u32(&x100, &x101, x99, (x85 + x59), 0x0); + fiat_p256_mulx_u32(&x102, &x103, x86, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x104, &x105, x86, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x106, &x107, x86, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x108, &x109, x86, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x110, &x111, 0x0, x109, x106); + fiat_p256_addcarryx_u32(&x112, &x113, x111, x107, x104); + fiat_p256_addcarryx_u32(&x114, &x115, 0x0, x86, x108); + fiat_p256_addcarryx_u32(&x116, &x117, x115, x88, x110); + fiat_p256_addcarryx_u32(&x118, &x119, x117, x90, x112); + fiat_p256_addcarryx_u32(&x120, &x121, x119, x92, (x113 + x105)); + fiat_p256_addcarryx_u32(&x122, &x123, x121, x94, 0x0); + fiat_p256_addcarryx_u32(&x124, &x125, x123, x96, 0x0); + fiat_p256_addcarryx_u32(&x126, &x127, x125, x98, x86); + fiat_p256_addcarryx_u32(&x128, &x129, x127, x100, x102); + fiat_p256_addcarryx_u32(&x130, &x131, x129, x101, x103); + fiat_p256_addcarryx_u32(&x132, &x133, 0x0, x116, (arg1[4])); + fiat_p256_addcarryx_u32(&x134, &x135, x133, x118, 0x0); + fiat_p256_addcarryx_u32(&x136, &x137, x135, x120, 0x0); + fiat_p256_addcarryx_u32(&x138, &x139, x137, x122, 0x0); + fiat_p256_addcarryx_u32(&x140, &x141, x139, x124, 0x0); + fiat_p256_addcarryx_u32(&x142, &x143, x141, x126, 0x0); + fiat_p256_addcarryx_u32(&x144, &x145, x143, x128, 0x0); + fiat_p256_addcarryx_u32(&x146, &x147, x145, x130, 0x0); + fiat_p256_mulx_u32(&x148, &x149, x132, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x150, &x151, x132, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x152, &x153, x132, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x154, &x155, x132, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x156, &x157, 0x0, x155, x152); + fiat_p256_addcarryx_u32(&x158, &x159, x157, x153, x150); + fiat_p256_addcarryx_u32(&x160, &x161, 0x0, x132, x154); + fiat_p256_addcarryx_u32(&x162, &x163, x161, x134, x156); + fiat_p256_addcarryx_u32(&x164, &x165, x163, x136, x158); + fiat_p256_addcarryx_u32(&x166, &x167, x165, x138, (x159 + x151)); + fiat_p256_addcarryx_u32(&x168, &x169, x167, x140, 0x0); + fiat_p256_addcarryx_u32(&x170, &x171, x169, x142, 0x0); + fiat_p256_addcarryx_u32(&x172, &x173, x171, x144, x132); + fiat_p256_addcarryx_u32(&x174, &x175, x173, x146, x148); + fiat_p256_addcarryx_u32(&x176, &x177, x175, ((uint32_t)x147 + x131), x149); + fiat_p256_addcarryx_u32(&x178, &x179, 0x0, x162, (arg1[5])); + fiat_p256_addcarryx_u32(&x180, &x181, x179, x164, 0x0); + fiat_p256_addcarryx_u32(&x182, &x183, x181, x166, 0x0); + fiat_p256_addcarryx_u32(&x184, &x185, x183, x168, 0x0); + fiat_p256_addcarryx_u32(&x186, &x187, x185, x170, 0x0); + fiat_p256_addcarryx_u32(&x188, &x189, x187, x172, 0x0); + fiat_p256_addcarryx_u32(&x190, &x191, x189, x174, 0x0); + fiat_p256_addcarryx_u32(&x192, &x193, x191, x176, 0x0); + fiat_p256_mulx_u32(&x194, &x195, x178, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x196, &x197, x178, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x198, &x199, x178, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x200, &x201, x178, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x202, &x203, 0x0, x201, x198); + fiat_p256_addcarryx_u32(&x204, &x205, x203, x199, x196); + fiat_p256_addcarryx_u32(&x206, &x207, 0x0, x178, x200); + fiat_p256_addcarryx_u32(&x208, &x209, x207, x180, x202); + fiat_p256_addcarryx_u32(&x210, &x211, x209, x182, x204); + fiat_p256_addcarryx_u32(&x212, &x213, x211, x184, (x205 + x197)); + fiat_p256_addcarryx_u32(&x214, &x215, x213, x186, 0x0); + fiat_p256_addcarryx_u32(&x216, &x217, x215, x188, 0x0); + fiat_p256_addcarryx_u32(&x218, &x219, x217, x190, x178); + fiat_p256_addcarryx_u32(&x220, &x221, x219, x192, x194); + fiat_p256_addcarryx_u32(&x222, &x223, x221, ((uint32_t)x193 + x177), x195); + fiat_p256_addcarryx_u32(&x224, &x225, 0x0, x208, (arg1[6])); + fiat_p256_addcarryx_u32(&x226, &x227, x225, x210, 0x0); + fiat_p256_addcarryx_u32(&x228, &x229, x227, x212, 0x0); + fiat_p256_addcarryx_u32(&x230, &x231, x229, x214, 0x0); + fiat_p256_addcarryx_u32(&x232, &x233, x231, x216, 0x0); + fiat_p256_addcarryx_u32(&x234, &x235, x233, x218, 0x0); + fiat_p256_addcarryx_u32(&x236, &x237, x235, x220, 0x0); + fiat_p256_addcarryx_u32(&x238, &x239, x237, x222, 0x0); + fiat_p256_mulx_u32(&x240, &x241, x224, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x242, &x243, x224, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x244, &x245, x224, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x246, &x247, x224, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x248, &x249, 0x0, x247, x244); + fiat_p256_addcarryx_u32(&x250, &x251, x249, x245, x242); + fiat_p256_addcarryx_u32(&x252, &x253, 0x0, x224, x246); + fiat_p256_addcarryx_u32(&x254, &x255, x253, x226, x248); + fiat_p256_addcarryx_u32(&x256, &x257, x255, x228, x250); + fiat_p256_addcarryx_u32(&x258, &x259, x257, x230, (x251 + x243)); + fiat_p256_addcarryx_u32(&x260, &x261, x259, x232, 0x0); + fiat_p256_addcarryx_u32(&x262, &x263, x261, x234, 0x0); + fiat_p256_addcarryx_u32(&x264, &x265, x263, x236, x224); + fiat_p256_addcarryx_u32(&x266, &x267, x265, x238, x240); + fiat_p256_addcarryx_u32(&x268, &x269, x267, ((uint32_t)x239 + x223), x241); + fiat_p256_addcarryx_u32(&x270, &x271, 0x0, x254, (arg1[7])); + fiat_p256_addcarryx_u32(&x272, &x273, x271, x256, 0x0); + fiat_p256_addcarryx_u32(&x274, &x275, x273, x258, 0x0); + fiat_p256_addcarryx_u32(&x276, &x277, x275, x260, 0x0); + fiat_p256_addcarryx_u32(&x278, &x279, x277, x262, 0x0); + fiat_p256_addcarryx_u32(&x280, &x281, x279, x264, 0x0); + fiat_p256_addcarryx_u32(&x282, &x283, x281, x266, 0x0); + fiat_p256_addcarryx_u32(&x284, &x285, x283, x268, 0x0); + fiat_p256_mulx_u32(&x286, &x287, x270, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x288, &x289, x270, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x290, &x291, x270, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x292, &x293, x270, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x294, &x295, 0x0, x293, x290); + fiat_p256_addcarryx_u32(&x296, &x297, x295, x291, x288); + fiat_p256_addcarryx_u32(&x298, &x299, 0x0, x270, x292); + fiat_p256_addcarryx_u32(&x300, &x301, x299, x272, x294); + fiat_p256_addcarryx_u32(&x302, &x303, x301, x274, x296); + fiat_p256_addcarryx_u32(&x304, &x305, x303, x276, (x297 + x289)); + fiat_p256_addcarryx_u32(&x306, &x307, x305, x278, 0x0); + fiat_p256_addcarryx_u32(&x308, &x309, x307, x280, 0x0); + fiat_p256_addcarryx_u32(&x310, &x311, x309, x282, x270); + fiat_p256_addcarryx_u32(&x312, &x313, x311, x284, x286); + fiat_p256_addcarryx_u32(&x314, &x315, x313, ((uint32_t)x285 + x269), x287); + fiat_p256_subborrowx_u32(&x316, &x317, 0x0, x300, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x318, &x319, x317, x302, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x320, &x321, x319, x304, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x322, &x323, x321, x306, 0x0); + fiat_p256_subborrowx_u32(&x324, &x325, x323, x308, 0x0); + fiat_p256_subborrowx_u32(&x326, &x327, x325, x310, 0x0); + fiat_p256_subborrowx_u32(&x328, &x329, x327, x312, 0x1); + fiat_p256_subborrowx_u32(&x330, &x331, x329, x314, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x332, &x333, x331, x315, 0x0); + fiat_p256_cmovznz_u32(&x334, x333, x316, x300); + fiat_p256_cmovznz_u32(&x335, x333, x318, x302); + fiat_p256_cmovznz_u32(&x336, x333, x320, x304); + fiat_p256_cmovznz_u32(&x337, x333, x322, x306); + fiat_p256_cmovznz_u32(&x338, x333, x324, x308); + fiat_p256_cmovznz_u32(&x339, x333, x326, x310); + fiat_p256_cmovznz_u32(&x340, x333, x328, x312); + fiat_p256_cmovznz_u32(&x341, x333, x330, x314); + out1[0] = x334; + out1[1] = x335; + out1[2] = x336; + out1[3] = x337; + out1[4] = x338; + out1[5] = x339; + out1[6] = x340; + out1[7] = x341; } /* - * The function fiat_p256_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. + * The function fiat_p256_to_montgomery translates a field element into the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: - * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: - * out1: [0x0 ~> 0xffffffff] - */ -static void fiat_p256_nonzero(uint32_t* out1, const uint32_t arg1[8]) { - uint32_t x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | ((arg1[4]) | ((arg1[5]) | ((arg1[6]) | ((arg1[7]) | (uint32_t)0x0)))))))); - *out1 = x1; -} - -/* - * The function fiat_p256_selectznz is a multi-limb conditional select. - * Postconditions: - * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) - * - * Input Bounds: - * arg1: [0x0 ~> 0x1] - * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] - * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] - * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ -static void fiat_p256_selectznz(uint32_t out1[8], fiat_p256_uint1 arg1, const uint32_t arg2[8], const uint32_t arg3[8]) { +static void fiat_p256_to_montgomery(uint32_t out1[8], const uint32_t arg1[8]) { uint32_t x1; - fiat_p256_cmovznz_u32(&x1, arg1, (arg2[0]), (arg3[0])); uint32_t x2; - fiat_p256_cmovznz_u32(&x2, arg1, (arg2[1]), (arg3[1])); uint32_t x3; - fiat_p256_cmovznz_u32(&x3, arg1, (arg2[2]), (arg3[2])); uint32_t x4; - fiat_p256_cmovznz_u32(&x4, arg1, (arg2[3]), (arg3[3])); uint32_t x5; - fiat_p256_cmovznz_u32(&x5, arg1, (arg2[4]), (arg3[4])); uint32_t x6; - fiat_p256_cmovznz_u32(&x6, arg1, (arg2[5]), (arg3[5])); uint32_t x7; - fiat_p256_cmovznz_u32(&x7, arg1, (arg2[6]), (arg3[6])); uint32_t x8; - fiat_p256_cmovznz_u32(&x8, arg1, (arg2[7]), (arg3[7])); - out1[0] = x1; - out1[1] = x2; - out1[2] = x3; - out1[3] = x4; - out1[4] = x5; - out1[5] = x6; - out1[6] = x7; - out1[7] = x8; -} - -/* - * The function fiat_p256_to_bytes serializes a field element in the Montgomery domain to bytes in little-endian order. - * Preconditions: - * 0 ≤ eval arg1 < m - * Postconditions: - * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] - * - * Input Bounds: - * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] - * Output Bounds: - * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] - */ -static void fiat_p256_to_bytes(uint8_t out1[32], const uint32_t arg1[8]) { - uint32_t x1 = (arg1[7]); - uint32_t x2 = (arg1[6]); - uint32_t x3 = (arg1[5]); - uint32_t x4 = (arg1[4]); - uint32_t x5 = (arg1[3]); - uint32_t x6 = (arg1[2]); - uint32_t x7 = (arg1[1]); - uint32_t x8 = (arg1[0]); - uint32_t x9 = (x8 >> 8); - uint8_t x10 = (uint8_t)(x8 & UINT8_C(0xff)); - uint32_t x11 = (x9 >> 8); - uint8_t x12 = (uint8_t)(x9 & UINT8_C(0xff)); - uint8_t x13 = (uint8_t)(x11 >> 8); - uint8_t x14 = (uint8_t)(x11 & UINT8_C(0xff)); - uint8_t x15 = (uint8_t)(x13 & UINT8_C(0xff)); - uint32_t x16 = (x7 >> 8); - uint8_t x17 = (uint8_t)(x7 & UINT8_C(0xff)); - uint32_t x18 = (x16 >> 8); - uint8_t x19 = (uint8_t)(x16 & UINT8_C(0xff)); - uint8_t x20 = (uint8_t)(x18 >> 8); - uint8_t x21 = (uint8_t)(x18 & UINT8_C(0xff)); - uint8_t x22 = (uint8_t)(x20 & UINT8_C(0xff)); - uint32_t x23 = (x6 >> 8); - uint8_t x24 = (uint8_t)(x6 & UINT8_C(0xff)); - uint32_t x25 = (x23 >> 8); - uint8_t x26 = (uint8_t)(x23 & UINT8_C(0xff)); - uint8_t x27 = (uint8_t)(x25 >> 8); - uint8_t x28 = (uint8_t)(x25 & UINT8_C(0xff)); - uint8_t x29 = (uint8_t)(x27 & UINT8_C(0xff)); - uint32_t x30 = (x5 >> 8); - uint8_t x31 = (uint8_t)(x5 & UINT8_C(0xff)); - uint32_t x32 = (x30 >> 8); - uint8_t x33 = (uint8_t)(x30 & UINT8_C(0xff)); - uint8_t x34 = (uint8_t)(x32 >> 8); - uint8_t x35 = (uint8_t)(x32 & UINT8_C(0xff)); - uint8_t x36 = (uint8_t)(x34 & UINT8_C(0xff)); - uint32_t x37 = (x4 >> 8); - uint8_t x38 = (uint8_t)(x4 & UINT8_C(0xff)); - uint32_t x39 = (x37 >> 8); - uint8_t x40 = (uint8_t)(x37 & UINT8_C(0xff)); - uint8_t x41 = (uint8_t)(x39 >> 8); - uint8_t x42 = (uint8_t)(x39 & UINT8_C(0xff)); - uint8_t x43 = (uint8_t)(x41 & UINT8_C(0xff)); - uint32_t x44 = (x3 >> 8); - uint8_t x45 = (uint8_t)(x3 & UINT8_C(0xff)); - uint32_t x46 = (x44 >> 8); - uint8_t x47 = (uint8_t)(x44 & UINT8_C(0xff)); - uint8_t x48 = (uint8_t)(x46 >> 8); - uint8_t x49 = (uint8_t)(x46 & UINT8_C(0xff)); - uint8_t x50 = (uint8_t)(x48 & UINT8_C(0xff)); - uint32_t x51 = (x2 >> 8); - uint8_t x52 = (uint8_t)(x2 & UINT8_C(0xff)); - uint32_t x53 = (x51 >> 8); - uint8_t x54 = (uint8_t)(x51 & UINT8_C(0xff)); - uint8_t x55 = (uint8_t)(x53 >> 8); - uint8_t x56 = (uint8_t)(x53 & UINT8_C(0xff)); - uint8_t x57 = (uint8_t)(x55 & UINT8_C(0xff)); - uint32_t x58 = (x1 >> 8); - uint8_t x59 = (uint8_t)(x1 & UINT8_C(0xff)); - uint32_t x60 = (x58 >> 8); - uint8_t x61 = (uint8_t)(x58 & UINT8_C(0xff)); - uint8_t x62 = (uint8_t)(x60 >> 8); - uint8_t x63 = (uint8_t)(x60 & UINT8_C(0xff)); - out1[0] = x10; - out1[1] = x12; - out1[2] = x14; - out1[3] = x15; - out1[4] = x17; - out1[5] = x19; - out1[6] = x21; - out1[7] = x22; - out1[8] = x24; - out1[9] = x26; - out1[10] = x28; - out1[11] = x29; - out1[12] = x31; - out1[13] = x33; - out1[14] = x35; - out1[15] = x36; - out1[16] = x38; - out1[17] = x40; - out1[18] = x42; - out1[19] = x43; - out1[20] = x45; - out1[21] = x47; - out1[22] = x49; - out1[23] = x50; - out1[24] = x52; - out1[25] = x54; - out1[26] = x56; - out1[27] = x57; - out1[28] = x59; - out1[29] = x61; - out1[30] = x63; - out1[31] = x62; -} - -/* - * The function fiat_p256_from_bytes deserializes a field element in the Montgomery domain from bytes in little-endian order. - * Preconditions: - * 0 ≤ bytes_eval arg1 < m - * Postconditions: - * eval out1 mod m = bytes_eval arg1 mod m - * 0 ≤ eval out1 < m - * - * Input Bounds: - * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] - * Output Bounds: - * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] - */ -static void fiat_p256_from_bytes(uint32_t out1[8], const uint8_t arg1[32]) { - uint32_t x1 = ((uint32_t)(arg1[31]) << 24); - uint32_t x2 = ((uint32_t)(arg1[30]) << 16); - uint32_t x3 = ((uint32_t)(arg1[29]) << 8); - uint8_t x4 = (arg1[28]); - uint32_t x5 = ((uint32_t)(arg1[27]) << 24); - uint32_t x6 = ((uint32_t)(arg1[26]) << 16); - uint32_t x7 = ((uint32_t)(arg1[25]) << 8); - uint8_t x8 = (arg1[24]); - uint32_t x9 = ((uint32_t)(arg1[23]) << 24); - uint32_t x10 = ((uint32_t)(arg1[22]) << 16); - uint32_t x11 = ((uint32_t)(arg1[21]) << 8); - uint8_t x12 = (arg1[20]); - uint32_t x13 = ((uint32_t)(arg1[19]) << 24); - uint32_t x14 = ((uint32_t)(arg1[18]) << 16); - uint32_t x15 = ((uint32_t)(arg1[17]) << 8); - uint8_t x16 = (arg1[16]); - uint32_t x17 = ((uint32_t)(arg1[15]) << 24); - uint32_t x18 = ((uint32_t)(arg1[14]) << 16); - uint32_t x19 = ((uint32_t)(arg1[13]) << 8); - uint8_t x20 = (arg1[12]); - uint32_t x21 = ((uint32_t)(arg1[11]) << 24); - uint32_t x22 = ((uint32_t)(arg1[10]) << 16); - uint32_t x23 = ((uint32_t)(arg1[9]) << 8); - uint8_t x24 = (arg1[8]); - uint32_t x25 = ((uint32_t)(arg1[7]) << 24); - uint32_t x26 = ((uint32_t)(arg1[6]) << 16); - uint32_t x27 = ((uint32_t)(arg1[5]) << 8); - uint8_t x28 = (arg1[4]); - uint32_t x29 = ((uint32_t)(arg1[3]) << 24); - uint32_t x30 = ((uint32_t)(arg1[2]) << 16); - uint32_t x31 = ((uint32_t)(arg1[1]) << 8); - uint8_t x32 = (arg1[0]); - uint32_t x33 = (x32 + (x31 + (x30 + x29))); - uint32_t x34 = (x33 & UINT32_C(0xffffffff)); - uint32_t x35 = (x4 + (x3 + (x2 + x1))); - uint32_t x36 = (x8 + (x7 + (x6 + x5))); - uint32_t x37 = (x12 + (x11 + (x10 + x9))); - uint32_t x38 = (x16 + (x15 + (x14 + x13))); - uint32_t x39 = (x20 + (x19 + (x18 + x17))); - uint32_t x40 = (x24 + (x23 + (x22 + x21))); - uint32_t x41 = (x28 + (x27 + (x26 + x25))); - uint32_t x42 = (x41 & UINT32_C(0xffffffff)); - uint32_t x43 = (x40 & UINT32_C(0xffffffff)); - uint32_t x44 = (x39 & UINT32_C(0xffffffff)); - uint32_t x45 = (x38 & UINT32_C(0xffffffff)); - uint32_t x46 = (x37 & UINT32_C(0xffffffff)); - uint32_t x47 = (x36 & UINT32_C(0xffffffff)); - out1[0] = x34; - out1[1] = x42; - out1[2] = x43; - out1[3] = x44; - out1[4] = x45; - out1[5] = x46; - out1[6] = x47; - out1[7] = x35; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + fiat_p256_uint1 x24; + uint32_t x25; + fiat_p256_uint1 x26; + uint32_t x27; + fiat_p256_uint1 x28; + uint32_t x29; + fiat_p256_uint1 x30; + uint32_t x31; + fiat_p256_uint1 x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + fiat_p256_uint1 x42; + uint32_t x43; + fiat_p256_uint1 x44; + uint32_t x45; + fiat_p256_uint1 x46; + uint32_t x47; + fiat_p256_uint1 x48; + uint32_t x49; + fiat_p256_uint1 x50; + uint32_t x51; + fiat_p256_uint1 x52; + uint32_t x53; + fiat_p256_uint1 x54; + uint32_t x55; + fiat_p256_uint1 x56; + uint32_t x57; + fiat_p256_uint1 x58; + uint32_t x59; + fiat_p256_uint1 x60; + uint32_t x61; + fiat_p256_uint1 x62; + uint32_t x63; + uint32_t x64; + uint32_t x65; + uint32_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + uint32_t x77; + fiat_p256_uint1 x78; + uint32_t x79; + fiat_p256_uint1 x80; + uint32_t x81; + fiat_p256_uint1 x82; + uint32_t x83; + fiat_p256_uint1 x84; + uint32_t x85; + fiat_p256_uint1 x86; + uint32_t x87; + fiat_p256_uint1 x88; + uint32_t x89; + fiat_p256_uint1 x90; + uint32_t x91; + fiat_p256_uint1 x92; + uint32_t x93; + fiat_p256_uint1 x94; + uint32_t x95; + fiat_p256_uint1 x96; + uint32_t x97; + fiat_p256_uint1 x98; + uint32_t x99; + fiat_p256_uint1 x100; + uint32_t x101; + fiat_p256_uint1 x102; + uint32_t x103; + uint32_t x104; + uint32_t x105; + uint32_t x106; + uint32_t x107; + uint32_t x108; + uint32_t x109; + uint32_t x110; + uint32_t x111; + fiat_p256_uint1 x112; + uint32_t x113; + fiat_p256_uint1 x114; + uint32_t x115; + fiat_p256_uint1 x116; + uint32_t x117; + fiat_p256_uint1 x118; + uint32_t x119; + fiat_p256_uint1 x120; + uint32_t x121; + fiat_p256_uint1 x122; + uint32_t x123; + fiat_p256_uint1 x124; + uint32_t x125; + fiat_p256_uint1 x126; + uint32_t x127; + fiat_p256_uint1 x128; + uint32_t x129; + fiat_p256_uint1 x130; + uint32_t x131; + fiat_p256_uint1 x132; + uint32_t x133; + uint32_t x134; + uint32_t x135; + uint32_t x136; + uint32_t x137; + uint32_t x138; + uint32_t x139; + uint32_t x140; + uint32_t x141; + uint32_t x142; + uint32_t x143; + uint32_t x144; + uint32_t x145; + uint32_t x146; + uint32_t x147; + fiat_p256_uint1 x148; + uint32_t x149; + fiat_p256_uint1 x150; + uint32_t x151; + fiat_p256_uint1 x152; + uint32_t x153; + fiat_p256_uint1 x154; + uint32_t x155; + fiat_p256_uint1 x156; + uint32_t x157; + fiat_p256_uint1 x158; + uint32_t x159; + fiat_p256_uint1 x160; + uint32_t x161; + fiat_p256_uint1 x162; + uint32_t x163; + fiat_p256_uint1 x164; + uint32_t x165; + fiat_p256_uint1 x166; + uint32_t x167; + fiat_p256_uint1 x168; + uint32_t x169; + fiat_p256_uint1 x170; + uint32_t x171; + fiat_p256_uint1 x172; + uint32_t x173; + uint32_t x174; + uint32_t x175; + uint32_t x176; + uint32_t x177; + uint32_t x178; + uint32_t x179; + uint32_t x180; + uint32_t x181; + fiat_p256_uint1 x182; + uint32_t x183; + fiat_p256_uint1 x184; + uint32_t x185; + fiat_p256_uint1 x186; + uint32_t x187; + fiat_p256_uint1 x188; + uint32_t x189; + fiat_p256_uint1 x190; + uint32_t x191; + fiat_p256_uint1 x192; + uint32_t x193; + fiat_p256_uint1 x194; + uint32_t x195; + fiat_p256_uint1 x196; + uint32_t x197; + fiat_p256_uint1 x198; + uint32_t x199; + fiat_p256_uint1 x200; + uint32_t x201; + fiat_p256_uint1 x202; + uint32_t x203; + uint32_t x204; + uint32_t x205; + uint32_t x206; + uint32_t x207; + uint32_t x208; + uint32_t x209; + uint32_t x210; + uint32_t x211; + uint32_t x212; + uint32_t x213; + uint32_t x214; + uint32_t x215; + uint32_t x216; + uint32_t x217; + fiat_p256_uint1 x218; + uint32_t x219; + fiat_p256_uint1 x220; + uint32_t x221; + fiat_p256_uint1 x222; + uint32_t x223; + fiat_p256_uint1 x224; + uint32_t x225; + fiat_p256_uint1 x226; + uint32_t x227; + fiat_p256_uint1 x228; + uint32_t x229; + fiat_p256_uint1 x230; + uint32_t x231; + fiat_p256_uint1 x232; + uint32_t x233; + fiat_p256_uint1 x234; + uint32_t x235; + fiat_p256_uint1 x236; + uint32_t x237; + fiat_p256_uint1 x238; + uint32_t x239; + fiat_p256_uint1 x240; + uint32_t x241; + fiat_p256_uint1 x242; + uint32_t x243; + uint32_t x244; + uint32_t x245; + uint32_t x246; + uint32_t x247; + uint32_t x248; + uint32_t x249; + uint32_t x250; + uint32_t x251; + fiat_p256_uint1 x252; + uint32_t x253; + fiat_p256_uint1 x254; + uint32_t x255; + fiat_p256_uint1 x256; + uint32_t x257; + fiat_p256_uint1 x258; + uint32_t x259; + fiat_p256_uint1 x260; + uint32_t x261; + fiat_p256_uint1 x262; + uint32_t x263; + fiat_p256_uint1 x264; + uint32_t x265; + fiat_p256_uint1 x266; + uint32_t x267; + fiat_p256_uint1 x268; + uint32_t x269; + fiat_p256_uint1 x270; + uint32_t x271; + fiat_p256_uint1 x272; + uint32_t x273; + uint32_t x274; + uint32_t x275; + uint32_t x276; + uint32_t x277; + uint32_t x278; + uint32_t x279; + uint32_t x280; + uint32_t x281; + uint32_t x282; + uint32_t x283; + uint32_t x284; + uint32_t x285; + uint32_t x286; + uint32_t x287; + fiat_p256_uint1 x288; + uint32_t x289; + fiat_p256_uint1 x290; + uint32_t x291; + fiat_p256_uint1 x292; + uint32_t x293; + fiat_p256_uint1 x294; + uint32_t x295; + fiat_p256_uint1 x296; + uint32_t x297; + fiat_p256_uint1 x298; + uint32_t x299; + fiat_p256_uint1 x300; + uint32_t x301; + fiat_p256_uint1 x302; + uint32_t x303; + fiat_p256_uint1 x304; + uint32_t x305; + fiat_p256_uint1 x306; + uint32_t x307; + fiat_p256_uint1 x308; + uint32_t x309; + fiat_p256_uint1 x310; + uint32_t x311; + fiat_p256_uint1 x312; + uint32_t x313; + uint32_t x314; + uint32_t x315; + uint32_t x316; + uint32_t x317; + uint32_t x318; + uint32_t x319; + uint32_t x320; + uint32_t x321; + fiat_p256_uint1 x322; + uint32_t x323; + fiat_p256_uint1 x324; + uint32_t x325; + fiat_p256_uint1 x326; + uint32_t x327; + fiat_p256_uint1 x328; + uint32_t x329; + fiat_p256_uint1 x330; + uint32_t x331; + fiat_p256_uint1 x332; + uint32_t x333; + fiat_p256_uint1 x334; + uint32_t x335; + fiat_p256_uint1 x336; + uint32_t x337; + fiat_p256_uint1 x338; + uint32_t x339; + fiat_p256_uint1 x340; + uint32_t x341; + fiat_p256_uint1 x342; + uint32_t x343; + uint32_t x344; + uint32_t x345; + uint32_t x346; + uint32_t x347; + uint32_t x348; + uint32_t x349; + uint32_t x350; + uint32_t x351; + uint32_t x352; + uint32_t x353; + uint32_t x354; + uint32_t x355; + uint32_t x356; + uint32_t x357; + fiat_p256_uint1 x358; + uint32_t x359; + fiat_p256_uint1 x360; + uint32_t x361; + fiat_p256_uint1 x362; + uint32_t x363; + fiat_p256_uint1 x364; + uint32_t x365; + fiat_p256_uint1 x366; + uint32_t x367; + fiat_p256_uint1 x368; + uint32_t x369; + fiat_p256_uint1 x370; + uint32_t x371; + fiat_p256_uint1 x372; + uint32_t x373; + fiat_p256_uint1 x374; + uint32_t x375; + fiat_p256_uint1 x376; + uint32_t x377; + fiat_p256_uint1 x378; + uint32_t x379; + fiat_p256_uint1 x380; + uint32_t x381; + fiat_p256_uint1 x382; + uint32_t x383; + uint32_t x384; + uint32_t x385; + uint32_t x386; + uint32_t x387; + uint32_t x388; + uint32_t x389; + uint32_t x390; + uint32_t x391; + fiat_p256_uint1 x392; + uint32_t x393; + fiat_p256_uint1 x394; + uint32_t x395; + fiat_p256_uint1 x396; + uint32_t x397; + fiat_p256_uint1 x398; + uint32_t x399; + fiat_p256_uint1 x400; + uint32_t x401; + fiat_p256_uint1 x402; + uint32_t x403; + fiat_p256_uint1 x404; + uint32_t x405; + fiat_p256_uint1 x406; + uint32_t x407; + fiat_p256_uint1 x408; + uint32_t x409; + fiat_p256_uint1 x410; + uint32_t x411; + fiat_p256_uint1 x412; + uint32_t x413; + uint32_t x414; + uint32_t x415; + uint32_t x416; + uint32_t x417; + uint32_t x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + uint32_t x422; + uint32_t x423; + uint32_t x424; + uint32_t x425; + uint32_t x426; + uint32_t x427; + fiat_p256_uint1 x428; + uint32_t x429; + fiat_p256_uint1 x430; + uint32_t x431; + fiat_p256_uint1 x432; + uint32_t x433; + fiat_p256_uint1 x434; + uint32_t x435; + fiat_p256_uint1 x436; + uint32_t x437; + fiat_p256_uint1 x438; + uint32_t x439; + fiat_p256_uint1 x440; + uint32_t x441; + fiat_p256_uint1 x442; + uint32_t x443; + fiat_p256_uint1 x444; + uint32_t x445; + fiat_p256_uint1 x446; + uint32_t x447; + fiat_p256_uint1 x448; + uint32_t x449; + fiat_p256_uint1 x450; + uint32_t x451; + fiat_p256_uint1 x452; + uint32_t x453; + uint32_t x454; + uint32_t x455; + uint32_t x456; + uint32_t x457; + uint32_t x458; + uint32_t x459; + uint32_t x460; + uint32_t x461; + fiat_p256_uint1 x462; + uint32_t x463; + fiat_p256_uint1 x464; + uint32_t x465; + fiat_p256_uint1 x466; + uint32_t x467; + fiat_p256_uint1 x468; + uint32_t x469; + fiat_p256_uint1 x470; + uint32_t x471; + fiat_p256_uint1 x472; + uint32_t x473; + fiat_p256_uint1 x474; + uint32_t x475; + fiat_p256_uint1 x476; + uint32_t x477; + fiat_p256_uint1 x478; + uint32_t x479; + fiat_p256_uint1 x480; + uint32_t x481; + fiat_p256_uint1 x482; + uint32_t x483; + uint32_t x484; + uint32_t x485; + uint32_t x486; + uint32_t x487; + uint32_t x488; + uint32_t x489; + uint32_t x490; + uint32_t x491; + uint32_t x492; + uint32_t x493; + uint32_t x494; + uint32_t x495; + uint32_t x496; + uint32_t x497; + fiat_p256_uint1 x498; + uint32_t x499; + fiat_p256_uint1 x500; + uint32_t x501; + fiat_p256_uint1 x502; + uint32_t x503; + fiat_p256_uint1 x504; + uint32_t x505; + fiat_p256_uint1 x506; + uint32_t x507; + fiat_p256_uint1 x508; + uint32_t x509; + fiat_p256_uint1 x510; + uint32_t x511; + fiat_p256_uint1 x512; + uint32_t x513; + fiat_p256_uint1 x514; + uint32_t x515; + fiat_p256_uint1 x516; + uint32_t x517; + fiat_p256_uint1 x518; + uint32_t x519; + fiat_p256_uint1 x520; + uint32_t x521; + fiat_p256_uint1 x522; + uint32_t x523; + uint32_t x524; + uint32_t x525; + uint32_t x526; + uint32_t x527; + uint32_t x528; + uint32_t x529; + uint32_t x530; + uint32_t x531; + fiat_p256_uint1 x532; + uint32_t x533; + fiat_p256_uint1 x534; + uint32_t x535; + fiat_p256_uint1 x536; + uint32_t x537; + fiat_p256_uint1 x538; + uint32_t x539; + fiat_p256_uint1 x540; + uint32_t x541; + fiat_p256_uint1 x542; + uint32_t x543; + fiat_p256_uint1 x544; + uint32_t x545; + fiat_p256_uint1 x546; + uint32_t x547; + fiat_p256_uint1 x548; + uint32_t x549; + fiat_p256_uint1 x550; + uint32_t x551; + fiat_p256_uint1 x552; + uint32_t x553; + fiat_p256_uint1 x554; + uint32_t x555; + fiat_p256_uint1 x556; + uint32_t x557; + fiat_p256_uint1 x558; + uint32_t x559; + fiat_p256_uint1 x560; + uint32_t x561; + fiat_p256_uint1 x562; + uint32_t x563; + fiat_p256_uint1 x564; + uint32_t x565; + fiat_p256_uint1 x566; + uint32_t x567; + fiat_p256_uint1 x568; + uint32_t x569; + fiat_p256_uint1 x570; + uint32_t x571; + uint32_t x572; + uint32_t x573; + uint32_t x574; + uint32_t x575; + uint32_t x576; + uint32_t x577; + uint32_t x578; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[0]); + fiat_p256_mulx_u32(&x9, &x10, x8, 0x4); + fiat_p256_mulx_u32(&x11, &x12, x8, UINT32_C(0xfffffffd)); + fiat_p256_mulx_u32(&x13, &x14, x8, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x15, &x16, x8, UINT32_C(0xfffffffe)); + fiat_p256_mulx_u32(&x17, &x18, x8, UINT32_C(0xfffffffb)); + fiat_p256_mulx_u32(&x19, &x20, x8, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x21, &x22, x8, 0x3); + fiat_p256_addcarryx_u32(&x23, &x24, 0x0, x20, x17); + fiat_p256_addcarryx_u32(&x25, &x26, x24, x18, x15); + fiat_p256_addcarryx_u32(&x27, &x28, x26, x16, x13); + fiat_p256_addcarryx_u32(&x29, &x30, x28, x14, x11); + fiat_p256_addcarryx_u32(&x31, &x32, x30, x12, x9); + fiat_p256_mulx_u32(&x33, &x34, x21, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x35, &x36, x21, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x37, &x38, x21, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x39, &x40, x21, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x41, &x42, 0x0, x40, x37); + fiat_p256_addcarryx_u32(&x43, &x44, x42, x38, x35); + fiat_p256_addcarryx_u32(&x45, &x46, 0x0, x21, x39); + fiat_p256_addcarryx_u32(&x47, &x48, x46, x22, x41); + fiat_p256_addcarryx_u32(&x49, &x50, x48, x19, x43); + fiat_p256_addcarryx_u32(&x51, &x52, x50, x23, (x44 + x36)); + fiat_p256_addcarryx_u32(&x53, &x54, x52, x25, 0x0); + fiat_p256_addcarryx_u32(&x55, &x56, x54, x27, 0x0); + fiat_p256_addcarryx_u32(&x57, &x58, x56, x29, x21); + fiat_p256_addcarryx_u32(&x59, &x60, x58, x31, x33); + fiat_p256_addcarryx_u32(&x61, &x62, x60, (x32 + x10), x34); + fiat_p256_mulx_u32(&x63, &x64, x1, 0x4); + fiat_p256_mulx_u32(&x65, &x66, x1, UINT32_C(0xfffffffd)); + fiat_p256_mulx_u32(&x67, &x68, x1, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x69, &x70, x1, UINT32_C(0xfffffffe)); + fiat_p256_mulx_u32(&x71, &x72, x1, UINT32_C(0xfffffffb)); + fiat_p256_mulx_u32(&x73, &x74, x1, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x75, &x76, x1, 0x3); + fiat_p256_addcarryx_u32(&x77, &x78, 0x0, x74, x71); + fiat_p256_addcarryx_u32(&x79, &x80, x78, x72, x69); + fiat_p256_addcarryx_u32(&x81, &x82, x80, x70, x67); + fiat_p256_addcarryx_u32(&x83, &x84, x82, x68, x65); + fiat_p256_addcarryx_u32(&x85, &x86, x84, x66, x63); + fiat_p256_addcarryx_u32(&x87, &x88, 0x0, x47, x75); + fiat_p256_addcarryx_u32(&x89, &x90, x88, x49, x76); + fiat_p256_addcarryx_u32(&x91, &x92, x90, x51, x73); + fiat_p256_addcarryx_u32(&x93, &x94, x92, x53, x77); + fiat_p256_addcarryx_u32(&x95, &x96, x94, x55, x79); + fiat_p256_addcarryx_u32(&x97, &x98, x96, x57, x81); + fiat_p256_addcarryx_u32(&x99, &x100, x98, x59, x83); + fiat_p256_addcarryx_u32(&x101, &x102, x100, x61, x85); + fiat_p256_mulx_u32(&x103, &x104, x87, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x105, &x106, x87, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x107, &x108, x87, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x109, &x110, x87, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x111, &x112, 0x0, x110, x107); + fiat_p256_addcarryx_u32(&x113, &x114, x112, x108, x105); + fiat_p256_addcarryx_u32(&x115, &x116, 0x0, x87, x109); + fiat_p256_addcarryx_u32(&x117, &x118, x116, x89, x111); + fiat_p256_addcarryx_u32(&x119, &x120, x118, x91, x113); + fiat_p256_addcarryx_u32(&x121, &x122, x120, x93, (x114 + x106)); + fiat_p256_addcarryx_u32(&x123, &x124, x122, x95, 0x0); + fiat_p256_addcarryx_u32(&x125, &x126, x124, x97, 0x0); + fiat_p256_addcarryx_u32(&x127, &x128, x126, x99, x87); + fiat_p256_addcarryx_u32(&x129, &x130, x128, x101, x103); + fiat_p256_addcarryx_u32(&x131, &x132, x130, (((uint32_t)x102 + x62) + (x86 + x64)), x104); + fiat_p256_mulx_u32(&x133, &x134, x2, 0x4); + fiat_p256_mulx_u32(&x135, &x136, x2, UINT32_C(0xfffffffd)); + fiat_p256_mulx_u32(&x137, &x138, x2, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x139, &x140, x2, UINT32_C(0xfffffffe)); + fiat_p256_mulx_u32(&x141, &x142, x2, UINT32_C(0xfffffffb)); + fiat_p256_mulx_u32(&x143, &x144, x2, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x145, &x146, x2, 0x3); + fiat_p256_addcarryx_u32(&x147, &x148, 0x0, x144, x141); + fiat_p256_addcarryx_u32(&x149, &x150, x148, x142, x139); + fiat_p256_addcarryx_u32(&x151, &x152, x150, x140, x137); + fiat_p256_addcarryx_u32(&x153, &x154, x152, x138, x135); + fiat_p256_addcarryx_u32(&x155, &x156, x154, x136, x133); + fiat_p256_addcarryx_u32(&x157, &x158, 0x0, x117, x145); + fiat_p256_addcarryx_u32(&x159, &x160, x158, x119, x146); + fiat_p256_addcarryx_u32(&x161, &x162, x160, x121, x143); + fiat_p256_addcarryx_u32(&x163, &x164, x162, x123, x147); + fiat_p256_addcarryx_u32(&x165, &x166, x164, x125, x149); + fiat_p256_addcarryx_u32(&x167, &x168, x166, x127, x151); + fiat_p256_addcarryx_u32(&x169, &x170, x168, x129, x153); + fiat_p256_addcarryx_u32(&x171, &x172, x170, x131, x155); + fiat_p256_mulx_u32(&x173, &x174, x157, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x175, &x176, x157, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x177, &x178, x157, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x179, &x180, x157, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x181, &x182, 0x0, x180, x177); + fiat_p256_addcarryx_u32(&x183, &x184, x182, x178, x175); + fiat_p256_addcarryx_u32(&x185, &x186, 0x0, x157, x179); + fiat_p256_addcarryx_u32(&x187, &x188, x186, x159, x181); + fiat_p256_addcarryx_u32(&x189, &x190, x188, x161, x183); + fiat_p256_addcarryx_u32(&x191, &x192, x190, x163, (x184 + x176)); + fiat_p256_addcarryx_u32(&x193, &x194, x192, x165, 0x0); + fiat_p256_addcarryx_u32(&x195, &x196, x194, x167, 0x0); + fiat_p256_addcarryx_u32(&x197, &x198, x196, x169, x157); + fiat_p256_addcarryx_u32(&x199, &x200, x198, x171, x173); + fiat_p256_addcarryx_u32(&x201, &x202, x200, (((uint32_t)x172 + x132) + (x156 + x134)), x174); + fiat_p256_mulx_u32(&x203, &x204, x3, 0x4); + fiat_p256_mulx_u32(&x205, &x206, x3, UINT32_C(0xfffffffd)); + fiat_p256_mulx_u32(&x207, &x208, x3, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x209, &x210, x3, UINT32_C(0xfffffffe)); + fiat_p256_mulx_u32(&x211, &x212, x3, UINT32_C(0xfffffffb)); + fiat_p256_mulx_u32(&x213, &x214, x3, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x215, &x216, x3, 0x3); + fiat_p256_addcarryx_u32(&x217, &x218, 0x0, x214, x211); + fiat_p256_addcarryx_u32(&x219, &x220, x218, x212, x209); + fiat_p256_addcarryx_u32(&x221, &x222, x220, x210, x207); + fiat_p256_addcarryx_u32(&x223, &x224, x222, x208, x205); + fiat_p256_addcarryx_u32(&x225, &x226, x224, x206, x203); + fiat_p256_addcarryx_u32(&x227, &x228, 0x0, x187, x215); + fiat_p256_addcarryx_u32(&x229, &x230, x228, x189, x216); + fiat_p256_addcarryx_u32(&x231, &x232, x230, x191, x213); + fiat_p256_addcarryx_u32(&x233, &x234, x232, x193, x217); + fiat_p256_addcarryx_u32(&x235, &x236, x234, x195, x219); + fiat_p256_addcarryx_u32(&x237, &x238, x236, x197, x221); + fiat_p256_addcarryx_u32(&x239, &x240, x238, x199, x223); + fiat_p256_addcarryx_u32(&x241, &x242, x240, x201, x225); + fiat_p256_mulx_u32(&x243, &x244, x227, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x245, &x246, x227, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x247, &x248, x227, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x249, &x250, x227, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x251, &x252, 0x0, x250, x247); + fiat_p256_addcarryx_u32(&x253, &x254, x252, x248, x245); + fiat_p256_addcarryx_u32(&x255, &x256, 0x0, x227, x249); + fiat_p256_addcarryx_u32(&x257, &x258, x256, x229, x251); + fiat_p256_addcarryx_u32(&x259, &x260, x258, x231, x253); + fiat_p256_addcarryx_u32(&x261, &x262, x260, x233, (x254 + x246)); + fiat_p256_addcarryx_u32(&x263, &x264, x262, x235, 0x0); + fiat_p256_addcarryx_u32(&x265, &x266, x264, x237, 0x0); + fiat_p256_addcarryx_u32(&x267, &x268, x266, x239, x227); + fiat_p256_addcarryx_u32(&x269, &x270, x268, x241, x243); + fiat_p256_addcarryx_u32(&x271, &x272, x270, (((uint32_t)x242 + x202) + (x226 + x204)), x244); + fiat_p256_mulx_u32(&x273, &x274, x4, 0x4); + fiat_p256_mulx_u32(&x275, &x276, x4, UINT32_C(0xfffffffd)); + fiat_p256_mulx_u32(&x277, &x278, x4, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x279, &x280, x4, UINT32_C(0xfffffffe)); + fiat_p256_mulx_u32(&x281, &x282, x4, UINT32_C(0xfffffffb)); + fiat_p256_mulx_u32(&x283, &x284, x4, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x285, &x286, x4, 0x3); + fiat_p256_addcarryx_u32(&x287, &x288, 0x0, x284, x281); + fiat_p256_addcarryx_u32(&x289, &x290, x288, x282, x279); + fiat_p256_addcarryx_u32(&x291, &x292, x290, x280, x277); + fiat_p256_addcarryx_u32(&x293, &x294, x292, x278, x275); + fiat_p256_addcarryx_u32(&x295, &x296, x294, x276, x273); + fiat_p256_addcarryx_u32(&x297, &x298, 0x0, x257, x285); + fiat_p256_addcarryx_u32(&x299, &x300, x298, x259, x286); + fiat_p256_addcarryx_u32(&x301, &x302, x300, x261, x283); + fiat_p256_addcarryx_u32(&x303, &x304, x302, x263, x287); + fiat_p256_addcarryx_u32(&x305, &x306, x304, x265, x289); + fiat_p256_addcarryx_u32(&x307, &x308, x306, x267, x291); + fiat_p256_addcarryx_u32(&x309, &x310, x308, x269, x293); + fiat_p256_addcarryx_u32(&x311, &x312, x310, x271, x295); + fiat_p256_mulx_u32(&x313, &x314, x297, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x315, &x316, x297, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x317, &x318, x297, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x319, &x320, x297, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x321, &x322, 0x0, x320, x317); + fiat_p256_addcarryx_u32(&x323, &x324, x322, x318, x315); + fiat_p256_addcarryx_u32(&x325, &x326, 0x0, x297, x319); + fiat_p256_addcarryx_u32(&x327, &x328, x326, x299, x321); + fiat_p256_addcarryx_u32(&x329, &x330, x328, x301, x323); + fiat_p256_addcarryx_u32(&x331, &x332, x330, x303, (x324 + x316)); + fiat_p256_addcarryx_u32(&x333, &x334, x332, x305, 0x0); + fiat_p256_addcarryx_u32(&x335, &x336, x334, x307, 0x0); + fiat_p256_addcarryx_u32(&x337, &x338, x336, x309, x297); + fiat_p256_addcarryx_u32(&x339, &x340, x338, x311, x313); + fiat_p256_addcarryx_u32(&x341, &x342, x340, (((uint32_t)x312 + x272) + (x296 + x274)), x314); + fiat_p256_mulx_u32(&x343, &x344, x5, 0x4); + fiat_p256_mulx_u32(&x345, &x346, x5, UINT32_C(0xfffffffd)); + fiat_p256_mulx_u32(&x347, &x348, x5, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x349, &x350, x5, UINT32_C(0xfffffffe)); + fiat_p256_mulx_u32(&x351, &x352, x5, UINT32_C(0xfffffffb)); + fiat_p256_mulx_u32(&x353, &x354, x5, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x355, &x356, x5, 0x3); + fiat_p256_addcarryx_u32(&x357, &x358, 0x0, x354, x351); + fiat_p256_addcarryx_u32(&x359, &x360, x358, x352, x349); + fiat_p256_addcarryx_u32(&x361, &x362, x360, x350, x347); + fiat_p256_addcarryx_u32(&x363, &x364, x362, x348, x345); + fiat_p256_addcarryx_u32(&x365, &x366, x364, x346, x343); + fiat_p256_addcarryx_u32(&x367, &x368, 0x0, x327, x355); + fiat_p256_addcarryx_u32(&x369, &x370, x368, x329, x356); + fiat_p256_addcarryx_u32(&x371, &x372, x370, x331, x353); + fiat_p256_addcarryx_u32(&x373, &x374, x372, x333, x357); + fiat_p256_addcarryx_u32(&x375, &x376, x374, x335, x359); + fiat_p256_addcarryx_u32(&x377, &x378, x376, x337, x361); + fiat_p256_addcarryx_u32(&x379, &x380, x378, x339, x363); + fiat_p256_addcarryx_u32(&x381, &x382, x380, x341, x365); + fiat_p256_mulx_u32(&x383, &x384, x367, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x385, &x386, x367, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x387, &x388, x367, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x389, &x390, x367, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x391, &x392, 0x0, x390, x387); + fiat_p256_addcarryx_u32(&x393, &x394, x392, x388, x385); + fiat_p256_addcarryx_u32(&x395, &x396, 0x0, x367, x389); + fiat_p256_addcarryx_u32(&x397, &x398, x396, x369, x391); + fiat_p256_addcarryx_u32(&x399, &x400, x398, x371, x393); + fiat_p256_addcarryx_u32(&x401, &x402, x400, x373, (x394 + x386)); + fiat_p256_addcarryx_u32(&x403, &x404, x402, x375, 0x0); + fiat_p256_addcarryx_u32(&x405, &x406, x404, x377, 0x0); + fiat_p256_addcarryx_u32(&x407, &x408, x406, x379, x367); + fiat_p256_addcarryx_u32(&x409, &x410, x408, x381, x383); + fiat_p256_addcarryx_u32(&x411, &x412, x410, (((uint32_t)x382 + x342) + (x366 + x344)), x384); + fiat_p256_mulx_u32(&x413, &x414, x6, 0x4); + fiat_p256_mulx_u32(&x415, &x416, x6, UINT32_C(0xfffffffd)); + fiat_p256_mulx_u32(&x417, &x418, x6, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x419, &x420, x6, UINT32_C(0xfffffffe)); + fiat_p256_mulx_u32(&x421, &x422, x6, UINT32_C(0xfffffffb)); + fiat_p256_mulx_u32(&x423, &x424, x6, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x425, &x426, x6, 0x3); + fiat_p256_addcarryx_u32(&x427, &x428, 0x0, x424, x421); + fiat_p256_addcarryx_u32(&x429, &x430, x428, x422, x419); + fiat_p256_addcarryx_u32(&x431, &x432, x430, x420, x417); + fiat_p256_addcarryx_u32(&x433, &x434, x432, x418, x415); + fiat_p256_addcarryx_u32(&x435, &x436, x434, x416, x413); + fiat_p256_addcarryx_u32(&x437, &x438, 0x0, x397, x425); + fiat_p256_addcarryx_u32(&x439, &x440, x438, x399, x426); + fiat_p256_addcarryx_u32(&x441, &x442, x440, x401, x423); + fiat_p256_addcarryx_u32(&x443, &x444, x442, x403, x427); + fiat_p256_addcarryx_u32(&x445, &x446, x444, x405, x429); + fiat_p256_addcarryx_u32(&x447, &x448, x446, x407, x431); + fiat_p256_addcarryx_u32(&x449, &x450, x448, x409, x433); + fiat_p256_addcarryx_u32(&x451, &x452, x450, x411, x435); + fiat_p256_mulx_u32(&x453, &x454, x437, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x455, &x456, x437, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x457, &x458, x437, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x459, &x460, x437, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x461, &x462, 0x0, x460, x457); + fiat_p256_addcarryx_u32(&x463, &x464, x462, x458, x455); + fiat_p256_addcarryx_u32(&x465, &x466, 0x0, x437, x459); + fiat_p256_addcarryx_u32(&x467, &x468, x466, x439, x461); + fiat_p256_addcarryx_u32(&x469, &x470, x468, x441, x463); + fiat_p256_addcarryx_u32(&x471, &x472, x470, x443, (x464 + x456)); + fiat_p256_addcarryx_u32(&x473, &x474, x472, x445, 0x0); + fiat_p256_addcarryx_u32(&x475, &x476, x474, x447, 0x0); + fiat_p256_addcarryx_u32(&x477, &x478, x476, x449, x437); + fiat_p256_addcarryx_u32(&x479, &x480, x478, x451, x453); + fiat_p256_addcarryx_u32(&x481, &x482, x480, (((uint32_t)x452 + x412) + (x436 + x414)), x454); + fiat_p256_mulx_u32(&x483, &x484, x7, 0x4); + fiat_p256_mulx_u32(&x485, &x486, x7, UINT32_C(0xfffffffd)); + fiat_p256_mulx_u32(&x487, &x488, x7, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x489, &x490, x7, UINT32_C(0xfffffffe)); + fiat_p256_mulx_u32(&x491, &x492, x7, UINT32_C(0xfffffffb)); + fiat_p256_mulx_u32(&x493, &x494, x7, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x495, &x496, x7, 0x3); + fiat_p256_addcarryx_u32(&x497, &x498, 0x0, x494, x491); + fiat_p256_addcarryx_u32(&x499, &x500, x498, x492, x489); + fiat_p256_addcarryx_u32(&x501, &x502, x500, x490, x487); + fiat_p256_addcarryx_u32(&x503, &x504, x502, x488, x485); + fiat_p256_addcarryx_u32(&x505, &x506, x504, x486, x483); + fiat_p256_addcarryx_u32(&x507, &x508, 0x0, x467, x495); + fiat_p256_addcarryx_u32(&x509, &x510, x508, x469, x496); + fiat_p256_addcarryx_u32(&x511, &x512, x510, x471, x493); + fiat_p256_addcarryx_u32(&x513, &x514, x512, x473, x497); + fiat_p256_addcarryx_u32(&x515, &x516, x514, x475, x499); + fiat_p256_addcarryx_u32(&x517, &x518, x516, x477, x501); + fiat_p256_addcarryx_u32(&x519, &x520, x518, x479, x503); + fiat_p256_addcarryx_u32(&x521, &x522, x520, x481, x505); + fiat_p256_mulx_u32(&x523, &x524, x507, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x525, &x526, x507, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x527, &x528, x507, UINT32_C(0xffffffff)); + fiat_p256_mulx_u32(&x529, &x530, x507, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x531, &x532, 0x0, x530, x527); + fiat_p256_addcarryx_u32(&x533, &x534, x532, x528, x525); + fiat_p256_addcarryx_u32(&x535, &x536, 0x0, x507, x529); + fiat_p256_addcarryx_u32(&x537, &x538, x536, x509, x531); + fiat_p256_addcarryx_u32(&x539, &x540, x538, x511, x533); + fiat_p256_addcarryx_u32(&x541, &x542, x540, x513, (x534 + x526)); + fiat_p256_addcarryx_u32(&x543, &x544, x542, x515, 0x0); + fiat_p256_addcarryx_u32(&x545, &x546, x544, x517, 0x0); + fiat_p256_addcarryx_u32(&x547, &x548, x546, x519, x507); + fiat_p256_addcarryx_u32(&x549, &x550, x548, x521, x523); + fiat_p256_addcarryx_u32(&x551, &x552, x550, (((uint32_t)x522 + x482) + (x506 + x484)), x524); + fiat_p256_subborrowx_u32(&x553, &x554, 0x0, x537, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x555, &x556, x554, x539, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x557, &x558, x556, x541, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x559, &x560, x558, x543, 0x0); + fiat_p256_subborrowx_u32(&x561, &x562, x560, x545, 0x0); + fiat_p256_subborrowx_u32(&x563, &x564, x562, x547, 0x0); + fiat_p256_subborrowx_u32(&x565, &x566, x564, x549, 0x1); + fiat_p256_subborrowx_u32(&x567, &x568, x566, x551, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x569, &x570, x568, x552, 0x0); + fiat_p256_cmovznz_u32(&x571, x570, x553, x537); + fiat_p256_cmovznz_u32(&x572, x570, x555, x539); + fiat_p256_cmovznz_u32(&x573, x570, x557, x541); + fiat_p256_cmovznz_u32(&x574, x570, x559, x543); + fiat_p256_cmovznz_u32(&x575, x570, x561, x545); + fiat_p256_cmovznz_u32(&x576, x570, x563, x547); + fiat_p256_cmovznz_u32(&x577, x570, x565, x549); + fiat_p256_cmovznz_u32(&x578, x570, x567, x551); + out1[0] = x571; + out1[1] = x572; + out1[2] = x573; + out1[3] = x574; + out1[4] = x575; + out1[5] = x576; + out1[6] = x577; + out1[7] = x578; +} + +/* + * The function fiat_p256_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static void fiat_p256_nonzero(uint32_t* out1, const uint32_t arg1[8]) { + uint32_t x1; + x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | ((arg1[4]) | ((arg1[5]) | ((arg1[6]) | (arg1[7])))))))); + *out1 = x1; +} + +/* + * The function fiat_p256_selectznz is a multi-limb conditional select. + * Postconditions: + * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_selectznz(uint32_t out1[8], fiat_p256_uint1 arg1, const uint32_t arg2[8], const uint32_t arg3[8]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + fiat_p256_cmovznz_u32(&x1, arg1, (arg2[0]), (arg3[0])); + fiat_p256_cmovznz_u32(&x2, arg1, (arg2[1]), (arg3[1])); + fiat_p256_cmovznz_u32(&x3, arg1, (arg2[2]), (arg3[2])); + fiat_p256_cmovznz_u32(&x4, arg1, (arg2[3]), (arg3[3])); + fiat_p256_cmovznz_u32(&x5, arg1, (arg2[4]), (arg3[4])); + fiat_p256_cmovznz_u32(&x6, arg1, (arg2[5]), (arg3[5])); + fiat_p256_cmovznz_u32(&x7, arg1, (arg2[6]), (arg3[6])); + fiat_p256_cmovznz_u32(&x8, arg1, (arg2[7]), (arg3[7])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; + out1[6] = x7; + out1[7] = x8; +} + +/* + * The function fiat_p256_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + */ +static void fiat_p256_to_bytes(uint8_t out1[32], const uint32_t arg1[8]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint8_t x9; + uint32_t x10; + uint8_t x11; + uint32_t x12; + uint8_t x13; + uint8_t x14; + uint8_t x15; + uint32_t x16; + uint8_t x17; + uint32_t x18; + uint8_t x19; + uint8_t x20; + uint8_t x21; + uint32_t x22; + uint8_t x23; + uint32_t x24; + uint8_t x25; + uint8_t x26; + uint8_t x27; + uint32_t x28; + uint8_t x29; + uint32_t x30; + uint8_t x31; + uint8_t x32; + uint8_t x33; + uint32_t x34; + uint8_t x35; + uint32_t x36; + uint8_t x37; + uint8_t x38; + uint8_t x39; + uint32_t x40; + uint8_t x41; + uint32_t x42; + uint8_t x43; + uint8_t x44; + uint8_t x45; + uint32_t x46; + uint8_t x47; + uint32_t x48; + uint8_t x49; + uint8_t x50; + uint8_t x51; + uint32_t x52; + uint8_t x53; + uint32_t x54; + uint8_t x55; + uint8_t x56; + x1 = (arg1[7]); + x2 = (arg1[6]); + x3 = (arg1[5]); + x4 = (arg1[4]); + x5 = (arg1[3]); + x6 = (arg1[2]); + x7 = (arg1[1]); + x8 = (arg1[0]); + x9 = (uint8_t)(x8 & UINT8_C(0xff)); + x10 = (x8 >> 8); + x11 = (uint8_t)(x10 & UINT8_C(0xff)); + x12 = (x10 >> 8); + x13 = (uint8_t)(x12 & UINT8_C(0xff)); + x14 = (uint8_t)(x12 >> 8); + x15 = (uint8_t)(x7 & UINT8_C(0xff)); + x16 = (x7 >> 8); + x17 = (uint8_t)(x16 & UINT8_C(0xff)); + x18 = (x16 >> 8); + x19 = (uint8_t)(x18 & UINT8_C(0xff)); + x20 = (uint8_t)(x18 >> 8); + x21 = (uint8_t)(x6 & UINT8_C(0xff)); + x22 = (x6 >> 8); + x23 = (uint8_t)(x22 & UINT8_C(0xff)); + x24 = (x22 >> 8); + x25 = (uint8_t)(x24 & UINT8_C(0xff)); + x26 = (uint8_t)(x24 >> 8); + x27 = (uint8_t)(x5 & UINT8_C(0xff)); + x28 = (x5 >> 8); + x29 = (uint8_t)(x28 & UINT8_C(0xff)); + x30 = (x28 >> 8); + x31 = (uint8_t)(x30 & UINT8_C(0xff)); + x32 = (uint8_t)(x30 >> 8); + x33 = (uint8_t)(x4 & UINT8_C(0xff)); + x34 = (x4 >> 8); + x35 = (uint8_t)(x34 & UINT8_C(0xff)); + x36 = (x34 >> 8); + x37 = (uint8_t)(x36 & UINT8_C(0xff)); + x38 = (uint8_t)(x36 >> 8); + x39 = (uint8_t)(x3 & UINT8_C(0xff)); + x40 = (x3 >> 8); + x41 = (uint8_t)(x40 & UINT8_C(0xff)); + x42 = (x40 >> 8); + x43 = (uint8_t)(x42 & UINT8_C(0xff)); + x44 = (uint8_t)(x42 >> 8); + x45 = (uint8_t)(x2 & UINT8_C(0xff)); + x46 = (x2 >> 8); + x47 = (uint8_t)(x46 & UINT8_C(0xff)); + x48 = (x46 >> 8); + x49 = (uint8_t)(x48 & UINT8_C(0xff)); + x50 = (uint8_t)(x48 >> 8); + x51 = (uint8_t)(x1 & UINT8_C(0xff)); + x52 = (x1 >> 8); + x53 = (uint8_t)(x52 & UINT8_C(0xff)); + x54 = (x52 >> 8); + x55 = (uint8_t)(x54 & UINT8_C(0xff)); + x56 = (uint8_t)(x54 >> 8); + out1[0] = x9; + out1[1] = x11; + out1[2] = x13; + out1[3] = x14; + out1[4] = x15; + out1[5] = x17; + out1[6] = x19; + out1[7] = x20; + out1[8] = x21; + out1[9] = x23; + out1[10] = x25; + out1[11] = x26; + out1[12] = x27; + out1[13] = x29; + out1[14] = x31; + out1[15] = x32; + out1[16] = x33; + out1[17] = x35; + out1[18] = x37; + out1[19] = x38; + out1[20] = x39; + out1[21] = x41; + out1[22] = x43; + out1[23] = x44; + out1[24] = x45; + out1[25] = x47; + out1[26] = x49; + out1[27] = x50; + out1[28] = x51; + out1[29] = x53; + out1[30] = x55; + out1[31] = x56; +} + +/* + * The function fiat_p256_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_from_bytes(uint32_t out1[8], const uint8_t arg1[32]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint8_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint8_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint8_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint8_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint8_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint8_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint8_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint8_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + uint32_t x52; + uint32_t x53; + uint32_t x54; + uint32_t x55; + uint32_t x56; + x1 = ((uint32_t)(arg1[31]) << 24); + x2 = ((uint32_t)(arg1[30]) << 16); + x3 = ((uint32_t)(arg1[29]) << 8); + x4 = (arg1[28]); + x5 = ((uint32_t)(arg1[27]) << 24); + x6 = ((uint32_t)(arg1[26]) << 16); + x7 = ((uint32_t)(arg1[25]) << 8); + x8 = (arg1[24]); + x9 = ((uint32_t)(arg1[23]) << 24); + x10 = ((uint32_t)(arg1[22]) << 16); + x11 = ((uint32_t)(arg1[21]) << 8); + x12 = (arg1[20]); + x13 = ((uint32_t)(arg1[19]) << 24); + x14 = ((uint32_t)(arg1[18]) << 16); + x15 = ((uint32_t)(arg1[17]) << 8); + x16 = (arg1[16]); + x17 = ((uint32_t)(arg1[15]) << 24); + x18 = ((uint32_t)(arg1[14]) << 16); + x19 = ((uint32_t)(arg1[13]) << 8); + x20 = (arg1[12]); + x21 = ((uint32_t)(arg1[11]) << 24); + x22 = ((uint32_t)(arg1[10]) << 16); + x23 = ((uint32_t)(arg1[9]) << 8); + x24 = (arg1[8]); + x25 = ((uint32_t)(arg1[7]) << 24); + x26 = ((uint32_t)(arg1[6]) << 16); + x27 = ((uint32_t)(arg1[5]) << 8); + x28 = (arg1[4]); + x29 = ((uint32_t)(arg1[3]) << 24); + x30 = ((uint32_t)(arg1[2]) << 16); + x31 = ((uint32_t)(arg1[1]) << 8); + x32 = (arg1[0]); + x33 = (x31 + (uint32_t)x32); + x34 = (x30 + x33); + x35 = (x29 + x34); + x36 = (x27 + (uint32_t)x28); + x37 = (x26 + x36); + x38 = (x25 + x37); + x39 = (x23 + (uint32_t)x24); + x40 = (x22 + x39); + x41 = (x21 + x40); + x42 = (x19 + (uint32_t)x20); + x43 = (x18 + x42); + x44 = (x17 + x43); + x45 = (x15 + (uint32_t)x16); + x46 = (x14 + x45); + x47 = (x13 + x46); + x48 = (x11 + (uint32_t)x12); + x49 = (x10 + x48); + x50 = (x9 + x49); + x51 = (x7 + (uint32_t)x8); + x52 = (x6 + x51); + x53 = (x5 + x52); + x54 = (x3 + (uint32_t)x4); + x55 = (x2 + x54); + x56 = (x1 + x55); + out1[0] = x35; + out1[1] = x38; + out1[2] = x41; + out1[3] = x44; + out1[4] = x47; + out1[5] = x50; + out1[6] = x53; + out1[7] = x56; +} + +/* + * The function fiat_p256_set_one returns the field element one in the Montgomery domain. + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_set_one(uint32_t out1[8]) { + out1[0] = 0x1; + out1[1] = 0x0; + out1[2] = 0x0; + out1[3] = UINT32_C(0xffffffff); + out1[4] = UINT32_C(0xffffffff); + out1[5] = UINT32_C(0xffffffff); + out1[6] = UINT32_C(0xfffffffe); + out1[7] = 0x0; +} + +/* + * The function fiat_p256_msat returns the saturated represtation of the prime modulus. + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_msat(uint32_t out1[9]) { + out1[0] = UINT32_C(0xffffffff); + out1[1] = UINT32_C(0xffffffff); + out1[2] = UINT32_C(0xffffffff); + out1[3] = 0x0; + out1[4] = 0x0; + out1[5] = 0x0; + out1[6] = 0x1; + out1[7] = UINT32_C(0xffffffff); + out1[8] = 0x0; +} + +/* + * The function fiat_p256_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if (log2 m) + 1 < 46 then ⌊(49 * ((log2 m) + 1) + 80) / 17⌋ else ⌊(49 * ((log2 m) + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_divstep_precomp(uint32_t out1[8]) { + out1[0] = UINT32_C(0xb8000000); + out1[1] = UINT32_C(0x67ffffff); + out1[2] = UINT32_C(0x38000000); + out1[3] = UINT32_C(0xc0000000); + out1[4] = UINT32_C(0x7fffffff); + out1[5] = UINT32_C(0xd8000000); + out1[6] = UINT32_C(0xffffffff); + out1[7] = UINT32_C(0x2fffffff); +} + +/* + * The function fiat_p256_divstep computes a divstep. + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg4: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg5: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out4: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out5: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p256_divstep(uint32_t* out1, uint32_t out2[9], uint32_t out3[9], uint32_t out4[8], uint32_t out5[8], uint32_t arg1, const uint32_t arg2[9], const uint32_t arg3[9], const uint32_t arg4[8], const uint32_t arg5[8]) { + uint32_t x1; + fiat_p256_uint1 x2; + fiat_p256_uint1 x3; + uint32_t x4; + fiat_p256_uint1 x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + fiat_p256_uint1 x17; + uint32_t x18; + fiat_p256_uint1 x19; + uint32_t x20; + fiat_p256_uint1 x21; + uint32_t x22; + fiat_p256_uint1 x23; + uint32_t x24; + fiat_p256_uint1 x25; + uint32_t x26; + fiat_p256_uint1 x27; + uint32_t x28; + fiat_p256_uint1 x29; + uint32_t x30; + fiat_p256_uint1 x31; + uint32_t x32; + fiat_p256_uint1 x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + fiat_p256_uint1 x52; + uint32_t x53; + fiat_p256_uint1 x54; + uint32_t x55; + fiat_p256_uint1 x56; + uint32_t x57; + fiat_p256_uint1 x58; + uint32_t x59; + fiat_p256_uint1 x60; + uint32_t x61; + fiat_p256_uint1 x62; + uint32_t x63; + fiat_p256_uint1 x64; + uint32_t x65; + fiat_p256_uint1 x66; + uint32_t x67; + fiat_p256_uint1 x68; + uint32_t x69; + fiat_p256_uint1 x70; + uint32_t x71; + fiat_p256_uint1 x72; + uint32_t x73; + fiat_p256_uint1 x74; + uint32_t x75; + fiat_p256_uint1 x76; + uint32_t x77; + fiat_p256_uint1 x78; + uint32_t x79; + fiat_p256_uint1 x80; + uint32_t x81; + fiat_p256_uint1 x82; + uint32_t x83; + fiat_p256_uint1 x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + uint32_t x88; + uint32_t x89; + uint32_t x90; + uint32_t x91; + uint32_t x92; + uint32_t x93; + fiat_p256_uint1 x94; + uint32_t x95; + fiat_p256_uint1 x96; + uint32_t x97; + fiat_p256_uint1 x98; + uint32_t x99; + fiat_p256_uint1 x100; + uint32_t x101; + fiat_p256_uint1 x102; + uint32_t x103; + fiat_p256_uint1 x104; + uint32_t x105; + fiat_p256_uint1 x106; + uint32_t x107; + fiat_p256_uint1 x108; + uint32_t x109; + uint32_t x110; + fiat_p256_uint1 x111; + uint32_t x112; + fiat_p256_uint1 x113; + uint32_t x114; + fiat_p256_uint1 x115; + uint32_t x116; + fiat_p256_uint1 x117; + uint32_t x118; + fiat_p256_uint1 x119; + uint32_t x120; + fiat_p256_uint1 x121; + uint32_t x122; + fiat_p256_uint1 x123; + uint32_t x124; + fiat_p256_uint1 x125; + uint32_t x126; + uint32_t x127; + uint32_t x128; + uint32_t x129; + uint32_t x130; + uint32_t x131; + uint32_t x132; + uint32_t x133; + fiat_p256_uint1 x134; + uint32_t x135; + uint32_t x136; + uint32_t x137; + uint32_t x138; + uint32_t x139; + uint32_t x140; + uint32_t x141; + uint32_t x142; + uint32_t x143; + uint32_t x144; + fiat_p256_uint1 x145; + uint32_t x146; + fiat_p256_uint1 x147; + uint32_t x148; + fiat_p256_uint1 x149; + uint32_t x150; + fiat_p256_uint1 x151; + uint32_t x152; + fiat_p256_uint1 x153; + uint32_t x154; + fiat_p256_uint1 x155; + uint32_t x156; + fiat_p256_uint1 x157; + uint32_t x158; + fiat_p256_uint1 x159; + uint32_t x160; + fiat_p256_uint1 x161; + uint32_t x162; + uint32_t x163; + uint32_t x164; + uint32_t x165; + uint32_t x166; + uint32_t x167; + uint32_t x168; + uint32_t x169; + uint32_t x170; + fiat_p256_uint1 x171; + uint32_t x172; + fiat_p256_uint1 x173; + uint32_t x174; + fiat_p256_uint1 x175; + uint32_t x176; + fiat_p256_uint1 x177; + uint32_t x178; + fiat_p256_uint1 x179; + uint32_t x180; + fiat_p256_uint1 x181; + uint32_t x182; + fiat_p256_uint1 x183; + uint32_t x184; + fiat_p256_uint1 x185; + uint32_t x186; + fiat_p256_uint1 x187; + uint32_t x188; + fiat_p256_uint1 x189; + uint32_t x190; + fiat_p256_uint1 x191; + uint32_t x192; + fiat_p256_uint1 x193; + uint32_t x194; + fiat_p256_uint1 x195; + uint32_t x196; + fiat_p256_uint1 x197; + uint32_t x198; + fiat_p256_uint1 x199; + uint32_t x200; + fiat_p256_uint1 x201; + uint32_t x202; + fiat_p256_uint1 x203; + uint32_t x204; + fiat_p256_uint1 x205; + uint32_t x206; + uint32_t x207; + uint32_t x208; + uint32_t x209; + uint32_t x210; + uint32_t x211; + uint32_t x212; + uint32_t x213; + uint32_t x214; + uint32_t x215; + uint32_t x216; + uint32_t x217; + uint32_t x218; + uint32_t x219; + uint32_t x220; + uint32_t x221; + uint32_t x222; + uint32_t x223; + uint32_t x224; + uint32_t x225; + uint32_t x226; + uint32_t x227; + uint32_t x228; + uint32_t x229; + uint32_t x230; + fiat_p256_addcarryx_u32(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_p256_uint1)((fiat_p256_uint1)(x1 >> 31) & (fiat_p256_uint1)((arg3[0]) & 0x1)); + fiat_p256_addcarryx_u32(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_p256_cmovznz_u32(&x6, x3, arg1, x4); + fiat_p256_cmovznz_u32(&x7, x3, (arg2[0]), (arg3[0])); + fiat_p256_cmovznz_u32(&x8, x3, (arg2[1]), (arg3[1])); + fiat_p256_cmovznz_u32(&x9, x3, (arg2[2]), (arg3[2])); + fiat_p256_cmovznz_u32(&x10, x3, (arg2[3]), (arg3[3])); + fiat_p256_cmovznz_u32(&x11, x3, (arg2[4]), (arg3[4])); + fiat_p256_cmovznz_u32(&x12, x3, (arg2[5]), (arg3[5])); + fiat_p256_cmovznz_u32(&x13, x3, (arg2[6]), (arg3[6])); + fiat_p256_cmovznz_u32(&x14, x3, (arg2[7]), (arg3[7])); + fiat_p256_cmovznz_u32(&x15, x3, (arg2[8]), (arg3[8])); + fiat_p256_addcarryx_u32(&x16, &x17, 0x0, 0x1, (~(arg2[0]))); + fiat_p256_addcarryx_u32(&x18, &x19, x17, 0x0, (~(arg2[1]))); + fiat_p256_addcarryx_u32(&x20, &x21, x19, 0x0, (~(arg2[2]))); + fiat_p256_addcarryx_u32(&x22, &x23, x21, 0x0, (~(arg2[3]))); + fiat_p256_addcarryx_u32(&x24, &x25, x23, 0x0, (~(arg2[4]))); + fiat_p256_addcarryx_u32(&x26, &x27, x25, 0x0, (~(arg2[5]))); + fiat_p256_addcarryx_u32(&x28, &x29, x27, 0x0, (~(arg2[6]))); + fiat_p256_addcarryx_u32(&x30, &x31, x29, 0x0, (~(arg2[7]))); + fiat_p256_addcarryx_u32(&x32, &x33, x31, 0x0, (~(arg2[8]))); + fiat_p256_cmovznz_u32(&x34, x3, (arg3[0]), x16); + fiat_p256_cmovznz_u32(&x35, x3, (arg3[1]), x18); + fiat_p256_cmovznz_u32(&x36, x3, (arg3[2]), x20); + fiat_p256_cmovznz_u32(&x37, x3, (arg3[3]), x22); + fiat_p256_cmovznz_u32(&x38, x3, (arg3[4]), x24); + fiat_p256_cmovznz_u32(&x39, x3, (arg3[5]), x26); + fiat_p256_cmovznz_u32(&x40, x3, (arg3[6]), x28); + fiat_p256_cmovznz_u32(&x41, x3, (arg3[7]), x30); + fiat_p256_cmovznz_u32(&x42, x3, (arg3[8]), x32); + fiat_p256_cmovznz_u32(&x43, x3, (arg4[0]), (arg5[0])); + fiat_p256_cmovznz_u32(&x44, x3, (arg4[1]), (arg5[1])); + fiat_p256_cmovznz_u32(&x45, x3, (arg4[2]), (arg5[2])); + fiat_p256_cmovznz_u32(&x46, x3, (arg4[3]), (arg5[3])); + fiat_p256_cmovznz_u32(&x47, x3, (arg4[4]), (arg5[4])); + fiat_p256_cmovznz_u32(&x48, x3, (arg4[5]), (arg5[5])); + fiat_p256_cmovznz_u32(&x49, x3, (arg4[6]), (arg5[6])); + fiat_p256_cmovznz_u32(&x50, x3, (arg4[7]), (arg5[7])); + fiat_p256_addcarryx_u32(&x51, &x52, 0x0, x43, x43); + fiat_p256_addcarryx_u32(&x53, &x54, x52, x44, x44); + fiat_p256_addcarryx_u32(&x55, &x56, x54, x45, x45); + fiat_p256_addcarryx_u32(&x57, &x58, x56, x46, x46); + fiat_p256_addcarryx_u32(&x59, &x60, x58, x47, x47); + fiat_p256_addcarryx_u32(&x61, &x62, x60, x48, x48); + fiat_p256_addcarryx_u32(&x63, &x64, x62, x49, x49); + fiat_p256_addcarryx_u32(&x65, &x66, x64, x50, x50); + fiat_p256_subborrowx_u32(&x67, &x68, 0x0, x51, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x69, &x70, x68, x53, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x71, &x72, x70, x55, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x73, &x74, x72, x57, 0x0); + fiat_p256_subborrowx_u32(&x75, &x76, x74, x59, 0x0); + fiat_p256_subborrowx_u32(&x77, &x78, x76, x61, 0x0); + fiat_p256_subborrowx_u32(&x79, &x80, x78, x63, 0x1); + fiat_p256_subborrowx_u32(&x81, &x82, x80, x65, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x83, &x84, x82, x66, 0x0); + x85 = (arg4[7]); + x86 = (arg4[6]); + x87 = (arg4[5]); + x88 = (arg4[4]); + x89 = (arg4[3]); + x90 = (arg4[2]); + x91 = (arg4[1]); + x92 = (arg4[0]); + fiat_p256_subborrowx_u32(&x93, &x94, 0x0, 0x0, x92); + fiat_p256_subborrowx_u32(&x95, &x96, x94, 0x0, x91); + fiat_p256_subborrowx_u32(&x97, &x98, x96, 0x0, x90); + fiat_p256_subborrowx_u32(&x99, &x100, x98, 0x0, x89); + fiat_p256_subborrowx_u32(&x101, &x102, x100, 0x0, x88); + fiat_p256_subborrowx_u32(&x103, &x104, x102, 0x0, x87); + fiat_p256_subborrowx_u32(&x105, &x106, x104, 0x0, x86); + fiat_p256_subborrowx_u32(&x107, &x108, x106, 0x0, x85); + fiat_p256_cmovznz_u32(&x109, x108, 0x0, UINT32_C(0xffffffff)); + fiat_p256_addcarryx_u32(&x110, &x111, 0x0, x93, x109); + fiat_p256_addcarryx_u32(&x112, &x113, x111, x95, x109); + fiat_p256_addcarryx_u32(&x114, &x115, x113, x97, x109); + fiat_p256_addcarryx_u32(&x116, &x117, x115, x99, 0x0); + fiat_p256_addcarryx_u32(&x118, &x119, x117, x101, 0x0); + fiat_p256_addcarryx_u32(&x120, &x121, x119, x103, 0x0); + fiat_p256_addcarryx_u32(&x122, &x123, x121, x105, (fiat_p256_uint1)(x109 & 0x1)); + fiat_p256_addcarryx_u32(&x124, &x125, x123, x107, x109); + fiat_p256_cmovznz_u32(&x126, x3, (arg5[0]), x110); + fiat_p256_cmovznz_u32(&x127, x3, (arg5[1]), x112); + fiat_p256_cmovznz_u32(&x128, x3, (arg5[2]), x114); + fiat_p256_cmovznz_u32(&x129, x3, (arg5[3]), x116); + fiat_p256_cmovznz_u32(&x130, x3, (arg5[4]), x118); + fiat_p256_cmovznz_u32(&x131, x3, (arg5[5]), x120); + fiat_p256_cmovznz_u32(&x132, x3, (arg5[6]), x122); + fiat_p256_cmovznz_u32(&x133, x3, (arg5[7]), x124); + x134 = (fiat_p256_uint1)(x34 & 0x1); + fiat_p256_cmovznz_u32(&x135, x134, 0x0, x7); + fiat_p256_cmovznz_u32(&x136, x134, 0x0, x8); + fiat_p256_cmovznz_u32(&x137, x134, 0x0, x9); + fiat_p256_cmovznz_u32(&x138, x134, 0x0, x10); + fiat_p256_cmovznz_u32(&x139, x134, 0x0, x11); + fiat_p256_cmovznz_u32(&x140, x134, 0x0, x12); + fiat_p256_cmovznz_u32(&x141, x134, 0x0, x13); + fiat_p256_cmovznz_u32(&x142, x134, 0x0, x14); + fiat_p256_cmovznz_u32(&x143, x134, 0x0, x15); + fiat_p256_addcarryx_u32(&x144, &x145, 0x0, x34, x135); + fiat_p256_addcarryx_u32(&x146, &x147, x145, x35, x136); + fiat_p256_addcarryx_u32(&x148, &x149, x147, x36, x137); + fiat_p256_addcarryx_u32(&x150, &x151, x149, x37, x138); + fiat_p256_addcarryx_u32(&x152, &x153, x151, x38, x139); + fiat_p256_addcarryx_u32(&x154, &x155, x153, x39, x140); + fiat_p256_addcarryx_u32(&x156, &x157, x155, x40, x141); + fiat_p256_addcarryx_u32(&x158, &x159, x157, x41, x142); + fiat_p256_addcarryx_u32(&x160, &x161, x159, x42, x143); + fiat_p256_cmovznz_u32(&x162, x134, 0x0, x43); + fiat_p256_cmovznz_u32(&x163, x134, 0x0, x44); + fiat_p256_cmovznz_u32(&x164, x134, 0x0, x45); + fiat_p256_cmovznz_u32(&x165, x134, 0x0, x46); + fiat_p256_cmovznz_u32(&x166, x134, 0x0, x47); + fiat_p256_cmovznz_u32(&x167, x134, 0x0, x48); + fiat_p256_cmovznz_u32(&x168, x134, 0x0, x49); + fiat_p256_cmovznz_u32(&x169, x134, 0x0, x50); + fiat_p256_addcarryx_u32(&x170, &x171, 0x0, x126, x162); + fiat_p256_addcarryx_u32(&x172, &x173, x171, x127, x163); + fiat_p256_addcarryx_u32(&x174, &x175, x173, x128, x164); + fiat_p256_addcarryx_u32(&x176, &x177, x175, x129, x165); + fiat_p256_addcarryx_u32(&x178, &x179, x177, x130, x166); + fiat_p256_addcarryx_u32(&x180, &x181, x179, x131, x167); + fiat_p256_addcarryx_u32(&x182, &x183, x181, x132, x168); + fiat_p256_addcarryx_u32(&x184, &x185, x183, x133, x169); + fiat_p256_subborrowx_u32(&x186, &x187, 0x0, x170, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x188, &x189, x187, x172, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x190, &x191, x189, x174, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x192, &x193, x191, x176, 0x0); + fiat_p256_subborrowx_u32(&x194, &x195, x193, x178, 0x0); + fiat_p256_subborrowx_u32(&x196, &x197, x195, x180, 0x0); + fiat_p256_subborrowx_u32(&x198, &x199, x197, x182, 0x1); + fiat_p256_subborrowx_u32(&x200, &x201, x199, x184, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u32(&x202, &x203, x201, x185, 0x0); + fiat_p256_addcarryx_u32(&x204, &x205, 0x0, x6, 0x1); + x206 = ((x144 >> 1) | ((x146 << 31) & UINT32_C(0xffffffff))); + x207 = ((x146 >> 1) | ((x148 << 31) & UINT32_C(0xffffffff))); + x208 = ((x148 >> 1) | ((x150 << 31) & UINT32_C(0xffffffff))); + x209 = ((x150 >> 1) | ((x152 << 31) & UINT32_C(0xffffffff))); + x210 = ((x152 >> 1) | ((x154 << 31) & UINT32_C(0xffffffff))); + x211 = ((x154 >> 1) | ((x156 << 31) & UINT32_C(0xffffffff))); + x212 = ((x156 >> 1) | ((x158 << 31) & UINT32_C(0xffffffff))); + x213 = ((x158 >> 1) | ((x160 << 31) & UINT32_C(0xffffffff))); + x214 = ((x160 & UINT32_C(0x80000000)) | (x160 >> 1)); + fiat_p256_cmovznz_u32(&x215, x84, x67, x51); + fiat_p256_cmovznz_u32(&x216, x84, x69, x53); + fiat_p256_cmovznz_u32(&x217, x84, x71, x55); + fiat_p256_cmovznz_u32(&x218, x84, x73, x57); + fiat_p256_cmovznz_u32(&x219, x84, x75, x59); + fiat_p256_cmovznz_u32(&x220, x84, x77, x61); + fiat_p256_cmovznz_u32(&x221, x84, x79, x63); + fiat_p256_cmovznz_u32(&x222, x84, x81, x65); + fiat_p256_cmovznz_u32(&x223, x203, x186, x170); + fiat_p256_cmovznz_u32(&x224, x203, x188, x172); + fiat_p256_cmovznz_u32(&x225, x203, x190, x174); + fiat_p256_cmovznz_u32(&x226, x203, x192, x176); + fiat_p256_cmovznz_u32(&x227, x203, x194, x178); + fiat_p256_cmovznz_u32(&x228, x203, x196, x180); + fiat_p256_cmovznz_u32(&x229, x203, x198, x182); + fiat_p256_cmovznz_u32(&x230, x203, x200, x184); + *out1 = x204; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out2[5] = x12; + out2[6] = x13; + out2[7] = x14; + out2[8] = x15; + out3[0] = x206; + out3[1] = x207; + out3[2] = x208; + out3[3] = x209; + out3[4] = x210; + out3[5] = x211; + out3[6] = x212; + out3[7] = x213; + out3[8] = x214; + out4[0] = x215; + out4[1] = x216; + out4[2] = x217; + out4[3] = x218; + out4[4] = x219; + out4[5] = x220; + out4[6] = x221; + out4[7] = x222; + out5[0] = x223; + out5[1] = x224; + out5[2] = x225; + out5[3] = x226; + out5[4] = x227; + out5[5] = x228; + out5[6] = x229; + out5[7] = x230; } diff --git a/ec/native/p256_64.h b/ec/native/p256_64.h index 3279a82d..db8d5b02 100644 --- a/ec/native/p256_64.h +++ b/ec/native/p256_64.h @@ -1,8 +1,8 @@ -/* Autogenerated */ +/* Autogenerated: '../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery' --static --use-value-barrier p256 64 '2^256 - 2^224 + 2^192 + 2^96 - 1' */ /* curve description: p256 */ +/* machine_wordsize = 64 (from "64") */ /* requested operations: (all) */ /* m = 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff (from "2^256 - 2^224 + 2^192 + 2^96 - 1") */ -/* machine_wordsize = 64 (from "64") */ /* */ /* NOTE: In addition to the bounds specified above each function, all */ /* functions synthesized for this Montgomery arithmetic require the */ @@ -10,12 +10,35 @@ /* require the input to be in the unique saturated representation. */ /* All functions also ensure that these two properties are true of */ /* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ #include typedef unsigned char fiat_p256_uint1; typedef signed char fiat_p256_int1; -typedef signed __int128 fiat_p256_int128; -typedef unsigned __int128 fiat_p256_uint128; +#ifdef __GNUC__ +# define FIAT_P256_FIAT_EXTENSION __extension__ +#else +# define FIAT_P256_FIAT_EXTENSION +#endif + +FIAT_P256_FIAT_EXTENSION typedef signed __int128 fiat_p256_int128; +FIAT_P256_FIAT_EXTENSION typedef unsigned __int128 fiat_p256_uint128; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_P256_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint64_t fiat_p256_value_barrier_u64(uint64_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_p256_value_barrier_u64(x) (x) +#endif /* @@ -33,9 +56,12 @@ typedef unsigned __int128 fiat_p256_uint128; * out2: [0x0 ~> 0x1] */ static void fiat_p256_addcarryx_u64(uint64_t* out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint64_t arg2, uint64_t arg3) { - fiat_p256_uint128 x1 = ((arg1 + (fiat_p256_uint128)arg2) + arg3); - uint64_t x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); - fiat_p256_uint1 x3 = (fiat_p256_uint1)(x1 >> 64); + fiat_p256_uint128 x1; + uint64_t x2; + fiat_p256_uint1 x3; + x1 = ((arg1 + (fiat_p256_uint128)arg2) + arg3); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (fiat_p256_uint1)(x1 >> 64); *out1 = x2; *out2 = x3; } @@ -55,9 +81,12 @@ static void fiat_p256_addcarryx_u64(uint64_t* out1, fiat_p256_uint1* out2, fiat_ * out2: [0x0 ~> 0x1] */ static void fiat_p256_subborrowx_u64(uint64_t* out1, fiat_p256_uint1* out2, fiat_p256_uint1 arg1, uint64_t arg2, uint64_t arg3) { - fiat_p256_int128 x1 = ((arg2 - (fiat_p256_int128)arg1) - arg3); - fiat_p256_int1 x2 = (fiat_p256_int1)(x1 >> 64); - uint64_t x3 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + fiat_p256_int128 x1; + fiat_p256_int1 x2; + uint64_t x3; + x1 = ((arg2 - (fiat_p256_int128)arg1) - arg3); + x2 = (fiat_p256_int1)(x1 >> 64); + x3 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); *out1 = x3; *out2 = (fiat_p256_uint1)(0x0 - x2); } @@ -76,9 +105,12 @@ static void fiat_p256_subborrowx_u64(uint64_t* out1, fiat_p256_uint1* out2, fiat * out2: [0x0 ~> 0xffffffffffffffff] */ static void fiat_p256_mulx_u64(uint64_t* out1, uint64_t* out2, uint64_t arg1, uint64_t arg2) { - fiat_p256_uint128 x1 = ((fiat_p256_uint128)arg1 * arg2); - uint64_t x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); - uint64_t x3 = (uint64_t)(x1 >> 64); + fiat_p256_uint128 x1; + uint64_t x2; + uint64_t x3; + x1 = ((fiat_p256_uint128)arg1 * arg2); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (uint64_t)(x1 >> 64); *out1 = x2; *out2 = x3; } @@ -96,9 +128,12 @@ static void fiat_p256_mulx_u64(uint64_t* out1, uint64_t* out2, uint64_t arg1, ui * out1: [0x0 ~> 0xffffffffffffffff] */ static void fiat_p256_cmovznz_u64(uint64_t* out1, fiat_p256_uint1 arg1, uint64_t arg2, uint64_t arg3) { - fiat_p256_uint1 x1 = (!(!arg1)); - uint64_t x2 = ((fiat_p256_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); - uint64_t x3 = ((x2 & arg3) | ((~x2) & arg2)); + fiat_p256_uint1 x1; + uint64_t x2; + uint64_t x3; + x1 = (!(!arg1)); + x2 = ((fiat_p256_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); + x3 = ((fiat_p256_value_barrier_u64(x2) & arg3) | (fiat_p256_value_barrier_u64((~x2)) & arg2)); *out1 = x3; } @@ -118,310 +153,300 @@ static void fiat_p256_cmovznz_u64(uint64_t* out1, fiat_p256_uint1 arg1, uint64_t * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_p256_mul(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { - uint64_t x1 = (arg1[1]); - uint64_t x2 = (arg1[2]); - uint64_t x3 = (arg1[3]); - uint64_t x4 = (arg1[0]); + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; uint64_t x5; uint64_t x6; - fiat_p256_mulx_u64(&x5, &x6, x4, (arg2[3])); uint64_t x7; uint64_t x8; - fiat_p256_mulx_u64(&x7, &x8, x4, (arg2[2])); uint64_t x9; uint64_t x10; - fiat_p256_mulx_u64(&x9, &x10, x4, (arg2[1])); uint64_t x11; uint64_t x12; - fiat_p256_mulx_u64(&x11, &x12, x4, (arg2[0])); uint64_t x13; fiat_p256_uint1 x14; - fiat_p256_addcarryx_u64(&x13, &x14, 0x0, x12, x9); uint64_t x15; fiat_p256_uint1 x16; - fiat_p256_addcarryx_u64(&x15, &x16, x14, x10, x7); uint64_t x17; fiat_p256_uint1 x18; - fiat_p256_addcarryx_u64(&x17, &x18, x16, x8, x5); uint64_t x19; - fiat_p256_uint1 x20; - fiat_p256_addcarryx_u64(&x19, &x20, x18, x6, 0x0); + uint64_t x20; uint64_t x21; uint64_t x22; - fiat_p256_mulx_u64(&x21, &x22, x11, UINT64_C(0xffffffff00000001)); uint64_t x23; uint64_t x24; - fiat_p256_mulx_u64(&x23, &x24, x11, UINT32_C(0xffffffff)); uint64_t x25; uint64_t x26; - fiat_p256_mulx_u64(&x25, &x26, x11, UINT64_C(0xffffffffffffffff)); - uint64_t x27; - fiat_p256_uint1 x28; - fiat_p256_addcarryx_u64(&x27, &x28, 0x0, x26, x23); + fiat_p256_uint1 x27; + uint64_t x28; uint64_t x29; fiat_p256_uint1 x30; - fiat_p256_addcarryx_u64(&x29, &x30, x28, x24, 0x0); uint64_t x31; fiat_p256_uint1 x32; - fiat_p256_addcarryx_u64(&x31, &x32, 0x0, x11, x25); uint64_t x33; fiat_p256_uint1 x34; - fiat_p256_addcarryx_u64(&x33, &x34, x32, x13, x27); uint64_t x35; fiat_p256_uint1 x36; - fiat_p256_addcarryx_u64(&x35, &x36, x34, x15, x29); uint64_t x37; fiat_p256_uint1 x38; - fiat_p256_addcarryx_u64(&x37, &x38, x36, x17, x21); uint64_t x39; - fiat_p256_uint1 x40; - fiat_p256_addcarryx_u64(&x39, &x40, x38, x19, x22); + uint64_t x40; uint64_t x41; - fiat_p256_uint1 x42; - fiat_p256_addcarryx_u64(&x41, &x42, x40, 0x0, 0x0); + uint64_t x42; uint64_t x43; uint64_t x44; - fiat_p256_mulx_u64(&x43, &x44, x1, (arg2[3])); uint64_t x45; uint64_t x46; - fiat_p256_mulx_u64(&x45, &x46, x1, (arg2[2])); uint64_t x47; - uint64_t x48; - fiat_p256_mulx_u64(&x47, &x48, x1, (arg2[1])); + fiat_p256_uint1 x48; uint64_t x49; - uint64_t x50; - fiat_p256_mulx_u64(&x49, &x50, x1, (arg2[0])); + fiat_p256_uint1 x50; uint64_t x51; fiat_p256_uint1 x52; - fiat_p256_addcarryx_u64(&x51, &x52, 0x0, x50, x47); uint64_t x53; - fiat_p256_uint1 x54; - fiat_p256_addcarryx_u64(&x53, &x54, x52, x48, x45); - uint64_t x55; - fiat_p256_uint1 x56; - fiat_p256_addcarryx_u64(&x55, &x56, x54, x46, x43); - uint64_t x57; - fiat_p256_uint1 x58; - fiat_p256_addcarryx_u64(&x57, &x58, x56, x44, 0x0); - uint64_t x59; - fiat_p256_uint1 x60; - fiat_p256_addcarryx_u64(&x59, &x60, 0x0, x33, x49); - uint64_t x61; - fiat_p256_uint1 x62; - fiat_p256_addcarryx_u64(&x61, &x62, x60, x35, x51); - uint64_t x63; - fiat_p256_uint1 x64; - fiat_p256_addcarryx_u64(&x63, &x64, x62, x37, x53); + uint64_t x54; + fiat_p256_uint1 x55; + uint64_t x56; + fiat_p256_uint1 x57; + uint64_t x58; + fiat_p256_uint1 x59; + uint64_t x60; + fiat_p256_uint1 x61; + uint64_t x62; + fiat_p256_uint1 x63; + uint64_t x64; uint64_t x65; - fiat_p256_uint1 x66; - fiat_p256_addcarryx_u64(&x65, &x66, x64, x39, x55); + uint64_t x66; uint64_t x67; - fiat_p256_uint1 x68; - fiat_p256_addcarryx_u64(&x67, &x68, x66, (fiat_p256_uint1)x41, x57); + uint64_t x68; uint64_t x69; uint64_t x70; - fiat_p256_mulx_u64(&x69, &x70, x59, UINT64_C(0xffffffff00000001)); - uint64_t x71; + fiat_p256_uint1 x71; uint64_t x72; - fiat_p256_mulx_u64(&x71, &x72, x59, UINT32_C(0xffffffff)); uint64_t x73; - uint64_t x74; - fiat_p256_mulx_u64(&x73, &x74, x59, UINT64_C(0xffffffffffffffff)); + fiat_p256_uint1 x74; uint64_t x75; fiat_p256_uint1 x76; - fiat_p256_addcarryx_u64(&x75, &x76, 0x0, x74, x71); uint64_t x77; fiat_p256_uint1 x78; - fiat_p256_addcarryx_u64(&x77, &x78, x76, x72, 0x0); uint64_t x79; fiat_p256_uint1 x80; - fiat_p256_addcarryx_u64(&x79, &x80, 0x0, x59, x73); uint64_t x81; fiat_p256_uint1 x82; - fiat_p256_addcarryx_u64(&x81, &x82, x80, x61, x75); uint64_t x83; - fiat_p256_uint1 x84; - fiat_p256_addcarryx_u64(&x83, &x84, x82, x63, x77); + uint64_t x84; uint64_t x85; - fiat_p256_uint1 x86; - fiat_p256_addcarryx_u64(&x85, &x86, x84, x65, x69); + uint64_t x86; uint64_t x87; - fiat_p256_uint1 x88; - fiat_p256_addcarryx_u64(&x87, &x88, x86, x67, x70); + uint64_t x88; uint64_t x89; - fiat_p256_uint1 x90; - fiat_p256_addcarryx_u64(&x89, &x90, x88, x68, 0x0); + uint64_t x90; uint64_t x91; uint64_t x92; - fiat_p256_mulx_u64(&x91, &x92, x2, (arg2[3])); - uint64_t x93; + fiat_p256_uint1 x93; uint64_t x94; - fiat_p256_mulx_u64(&x93, &x94, x2, (arg2[2])); - uint64_t x95; + fiat_p256_uint1 x95; uint64_t x96; - fiat_p256_mulx_u64(&x95, &x96, x2, (arg2[1])); - uint64_t x97; + fiat_p256_uint1 x97; uint64_t x98; - fiat_p256_mulx_u64(&x97, &x98, x2, (arg2[0])); uint64_t x99; fiat_p256_uint1 x100; - fiat_p256_addcarryx_u64(&x99, &x100, 0x0, x98, x95); uint64_t x101; fiat_p256_uint1 x102; - fiat_p256_addcarryx_u64(&x101, &x102, x100, x96, x93); uint64_t x103; fiat_p256_uint1 x104; - fiat_p256_addcarryx_u64(&x103, &x104, x102, x94, x91); uint64_t x105; fiat_p256_uint1 x106; - fiat_p256_addcarryx_u64(&x105, &x106, x104, x92, 0x0); uint64_t x107; fiat_p256_uint1 x108; - fiat_p256_addcarryx_u64(&x107, &x108, 0x0, x81, x97); uint64_t x109; - fiat_p256_uint1 x110; - fiat_p256_addcarryx_u64(&x109, &x110, x108, x83, x99); + uint64_t x110; uint64_t x111; - fiat_p256_uint1 x112; - fiat_p256_addcarryx_u64(&x111, &x112, x110, x85, x101); + uint64_t x112; uint64_t x113; - fiat_p256_uint1 x114; - fiat_p256_addcarryx_u64(&x113, &x114, x112, x87, x103); + uint64_t x114; uint64_t x115; fiat_p256_uint1 x116; - fiat_p256_addcarryx_u64(&x115, &x116, x114, x89, x105); uint64_t x117; uint64_t x118; - fiat_p256_mulx_u64(&x117, &x118, x107, UINT64_C(0xffffffff00000001)); - uint64_t x119; + fiat_p256_uint1 x119; uint64_t x120; - fiat_p256_mulx_u64(&x119, &x120, x107, UINT32_C(0xffffffff)); - uint64_t x121; + fiat_p256_uint1 x121; uint64_t x122; - fiat_p256_mulx_u64(&x121, &x122, x107, UINT64_C(0xffffffffffffffff)); - uint64_t x123; - fiat_p256_uint1 x124; - fiat_p256_addcarryx_u64(&x123, &x124, 0x0, x122, x119); - uint64_t x125; - fiat_p256_uint1 x126; - fiat_p256_addcarryx_u64(&x125, &x126, x124, x120, 0x0); - uint64_t x127; - fiat_p256_uint1 x128; - fiat_p256_addcarryx_u64(&x127, &x128, 0x0, x107, x121); + fiat_p256_uint1 x123; + uint64_t x124; + fiat_p256_uint1 x125; + uint64_t x126; + fiat_p256_uint1 x127; + uint64_t x128; uint64_t x129; - fiat_p256_uint1 x130; - fiat_p256_addcarryx_u64(&x129, &x130, x128, x109, x123); + uint64_t x130; uint64_t x131; - fiat_p256_uint1 x132; - fiat_p256_addcarryx_u64(&x131, &x132, x130, x111, x125); + uint64_t x132; uint64_t x133; - fiat_p256_uint1 x134; - fiat_p256_addcarryx_u64(&x133, &x134, x132, x113, x117); + uint64_t x134; uint64_t x135; - fiat_p256_uint1 x136; - fiat_p256_addcarryx_u64(&x135, &x136, x134, x115, x118); + uint64_t x136; uint64_t x137; fiat_p256_uint1 x138; - fiat_p256_addcarryx_u64(&x137, &x138, x136, x116, 0x0); uint64_t x139; - uint64_t x140; - fiat_p256_mulx_u64(&x139, &x140, x3, (arg2[3])); + fiat_p256_uint1 x140; uint64_t x141; - uint64_t x142; - fiat_p256_mulx_u64(&x141, &x142, x3, (arg2[2])); + fiat_p256_uint1 x142; uint64_t x143; uint64_t x144; - fiat_p256_mulx_u64(&x143, &x144, x3, (arg2[1])); - uint64_t x145; + fiat_p256_uint1 x145; uint64_t x146; - fiat_p256_mulx_u64(&x145, &x146, x3, (arg2[0])); - uint64_t x147; - fiat_p256_uint1 x148; - fiat_p256_addcarryx_u64(&x147, &x148, 0x0, x146, x143); - uint64_t x149; - fiat_p256_uint1 x150; - fiat_p256_addcarryx_u64(&x149, &x150, x148, x144, x141); - uint64_t x151; - fiat_p256_uint1 x152; - fiat_p256_addcarryx_u64(&x151, &x152, x150, x142, x139); - uint64_t x153; - fiat_p256_uint1 x154; - fiat_p256_addcarryx_u64(&x153, &x154, x152, x140, 0x0); + fiat_p256_uint1 x147; + uint64_t x148; + fiat_p256_uint1 x149; + uint64_t x150; + fiat_p256_uint1 x151; + uint64_t x152; + fiat_p256_uint1 x153; + uint64_t x154; uint64_t x155; - fiat_p256_uint1 x156; - fiat_p256_addcarryx_u64(&x155, &x156, 0x0, x129, x145); + uint64_t x156; uint64_t x157; - fiat_p256_uint1 x158; - fiat_p256_addcarryx_u64(&x157, &x158, x156, x131, x147); + uint64_t x158; uint64_t x159; - fiat_p256_uint1 x160; - fiat_p256_addcarryx_u64(&x159, &x160, x158, x133, x149); - uint64_t x161; - fiat_p256_uint1 x162; - fiat_p256_addcarryx_u64(&x161, &x162, x160, x135, x151); + uint64_t x160; + fiat_p256_uint1 x161; + uint64_t x162; uint64_t x163; fiat_p256_uint1 x164; - fiat_p256_addcarryx_u64(&x163, &x164, x162, x137, x153); uint64_t x165; - uint64_t x166; - fiat_p256_mulx_u64(&x165, &x166, x155, UINT64_C(0xffffffff00000001)); + fiat_p256_uint1 x166; uint64_t x167; - uint64_t x168; - fiat_p256_mulx_u64(&x167, &x168, x155, UINT32_C(0xffffffff)); + fiat_p256_uint1 x168; uint64_t x169; - uint64_t x170; - fiat_p256_mulx_u64(&x169, &x170, x155, UINT64_C(0xffffffffffffffff)); + fiat_p256_uint1 x170; uint64_t x171; fiat_p256_uint1 x172; - fiat_p256_addcarryx_u64(&x171, &x172, 0x0, x170, x167); uint64_t x173; - fiat_p256_uint1 x174; - fiat_p256_addcarryx_u64(&x173, &x174, x172, x168, 0x0); - uint64_t x175; - fiat_p256_uint1 x176; - fiat_p256_addcarryx_u64(&x175, &x176, 0x0, x155, x169); - uint64_t x177; - fiat_p256_uint1 x178; - fiat_p256_addcarryx_u64(&x177, &x178, x176, x157, x171); - uint64_t x179; - fiat_p256_uint1 x180; - fiat_p256_addcarryx_u64(&x179, &x180, x178, x159, x173); - uint64_t x181; - fiat_p256_uint1 x182; - fiat_p256_addcarryx_u64(&x181, &x182, x180, x161, x165); - uint64_t x183; - fiat_p256_uint1 x184; - fiat_p256_addcarryx_u64(&x183, &x184, x182, x163, x166); + uint64_t x174; + fiat_p256_uint1 x175; + uint64_t x176; + fiat_p256_uint1 x177; + uint64_t x178; + fiat_p256_uint1 x179; + uint64_t x180; + fiat_p256_uint1 x181; + uint64_t x182; + fiat_p256_uint1 x183; + uint64_t x184; uint64_t x185; - fiat_p256_uint1 x186; - fiat_p256_addcarryx_u64(&x185, &x186, x184, x164, 0x0); + uint64_t x186; uint64_t x187; - fiat_p256_uint1 x188; - fiat_p256_subborrowx_u64(&x187, &x188, 0x0, x177, UINT64_C(0xffffffffffffffff)); - uint64_t x189; - fiat_p256_uint1 x190; - fiat_p256_subborrowx_u64(&x189, &x190, x188, x179, UINT32_C(0xffffffff)); - uint64_t x191; - fiat_p256_uint1 x192; - fiat_p256_subborrowx_u64(&x191, &x192, x190, x181, 0x0); - uint64_t x193; - fiat_p256_uint1 x194; - fiat_p256_subborrowx_u64(&x193, &x194, x192, x183, UINT64_C(0xffffffff00000001)); - uint64_t x195; - fiat_p256_uint1 x196; - fiat_p256_subborrowx_u64(&x195, &x196, x194, x185, 0x0); - uint64_t x197; - fiat_p256_cmovznz_u64(&x197, x196, x187, x177); - uint64_t x198; - fiat_p256_cmovznz_u64(&x198, x196, x189, x179); - uint64_t x199; - fiat_p256_cmovznz_u64(&x199, x196, x191, x181); - uint64_t x200; - fiat_p256_cmovznz_u64(&x200, x196, x193, x183); - out1[0] = x197; - out1[1] = x198; - out1[2] = x199; - out1[3] = x200; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[0]); + fiat_p256_mulx_u64(&x5, &x6, x4, (arg2[3])); + fiat_p256_mulx_u64(&x7, &x8, x4, (arg2[2])); + fiat_p256_mulx_u64(&x9, &x10, x4, (arg2[1])); + fiat_p256_mulx_u64(&x11, &x12, x4, (arg2[0])); + fiat_p256_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + fiat_p256_addcarryx_u64(&x15, &x16, x14, x10, x7); + fiat_p256_addcarryx_u64(&x17, &x18, x16, x8, x5); + x19 = (x18 + x6); + fiat_p256_mulx_u64(&x20, &x21, x11, UINT64_C(0xffffffff00000001)); + fiat_p256_mulx_u64(&x22, &x23, x11, UINT32_C(0xffffffff)); + fiat_p256_mulx_u64(&x24, &x25, x11, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x26, &x27, 0x0, x25, x22); + x28 = (x27 + x23); + fiat_p256_addcarryx_u64(&x29, &x30, 0x0, x11, x24); + fiat_p256_addcarryx_u64(&x31, &x32, x30, x13, x26); + fiat_p256_addcarryx_u64(&x33, &x34, x32, x15, x28); + fiat_p256_addcarryx_u64(&x35, &x36, x34, x17, x20); + fiat_p256_addcarryx_u64(&x37, &x38, x36, x19, x21); + fiat_p256_mulx_u64(&x39, &x40, x1, (arg2[3])); + fiat_p256_mulx_u64(&x41, &x42, x1, (arg2[2])); + fiat_p256_mulx_u64(&x43, &x44, x1, (arg2[1])); + fiat_p256_mulx_u64(&x45, &x46, x1, (arg2[0])); + fiat_p256_addcarryx_u64(&x47, &x48, 0x0, x46, x43); + fiat_p256_addcarryx_u64(&x49, &x50, x48, x44, x41); + fiat_p256_addcarryx_u64(&x51, &x52, x50, x42, x39); + x53 = (x52 + x40); + fiat_p256_addcarryx_u64(&x54, &x55, 0x0, x31, x45); + fiat_p256_addcarryx_u64(&x56, &x57, x55, x33, x47); + fiat_p256_addcarryx_u64(&x58, &x59, x57, x35, x49); + fiat_p256_addcarryx_u64(&x60, &x61, x59, x37, x51); + fiat_p256_addcarryx_u64(&x62, &x63, x61, x38, x53); + fiat_p256_mulx_u64(&x64, &x65, x54, UINT64_C(0xffffffff00000001)); + fiat_p256_mulx_u64(&x66, &x67, x54, UINT32_C(0xffffffff)); + fiat_p256_mulx_u64(&x68, &x69, x54, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x70, &x71, 0x0, x69, x66); + x72 = (x71 + x67); + fiat_p256_addcarryx_u64(&x73, &x74, 0x0, x54, x68); + fiat_p256_addcarryx_u64(&x75, &x76, x74, x56, x70); + fiat_p256_addcarryx_u64(&x77, &x78, x76, x58, x72); + fiat_p256_addcarryx_u64(&x79, &x80, x78, x60, x64); + fiat_p256_addcarryx_u64(&x81, &x82, x80, x62, x65); + x83 = ((uint64_t)x82 + x63); + fiat_p256_mulx_u64(&x84, &x85, x2, (arg2[3])); + fiat_p256_mulx_u64(&x86, &x87, x2, (arg2[2])); + fiat_p256_mulx_u64(&x88, &x89, x2, (arg2[1])); + fiat_p256_mulx_u64(&x90, &x91, x2, (arg2[0])); + fiat_p256_addcarryx_u64(&x92, &x93, 0x0, x91, x88); + fiat_p256_addcarryx_u64(&x94, &x95, x93, x89, x86); + fiat_p256_addcarryx_u64(&x96, &x97, x95, x87, x84); + x98 = (x97 + x85); + fiat_p256_addcarryx_u64(&x99, &x100, 0x0, x75, x90); + fiat_p256_addcarryx_u64(&x101, &x102, x100, x77, x92); + fiat_p256_addcarryx_u64(&x103, &x104, x102, x79, x94); + fiat_p256_addcarryx_u64(&x105, &x106, x104, x81, x96); + fiat_p256_addcarryx_u64(&x107, &x108, x106, x83, x98); + fiat_p256_mulx_u64(&x109, &x110, x99, UINT64_C(0xffffffff00000001)); + fiat_p256_mulx_u64(&x111, &x112, x99, UINT32_C(0xffffffff)); + fiat_p256_mulx_u64(&x113, &x114, x99, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x115, &x116, 0x0, x114, x111); + x117 = (x116 + x112); + fiat_p256_addcarryx_u64(&x118, &x119, 0x0, x99, x113); + fiat_p256_addcarryx_u64(&x120, &x121, x119, x101, x115); + fiat_p256_addcarryx_u64(&x122, &x123, x121, x103, x117); + fiat_p256_addcarryx_u64(&x124, &x125, x123, x105, x109); + fiat_p256_addcarryx_u64(&x126, &x127, x125, x107, x110); + x128 = ((uint64_t)x127 + x108); + fiat_p256_mulx_u64(&x129, &x130, x3, (arg2[3])); + fiat_p256_mulx_u64(&x131, &x132, x3, (arg2[2])); + fiat_p256_mulx_u64(&x133, &x134, x3, (arg2[1])); + fiat_p256_mulx_u64(&x135, &x136, x3, (arg2[0])); + fiat_p256_addcarryx_u64(&x137, &x138, 0x0, x136, x133); + fiat_p256_addcarryx_u64(&x139, &x140, x138, x134, x131); + fiat_p256_addcarryx_u64(&x141, &x142, x140, x132, x129); + x143 = (x142 + x130); + fiat_p256_addcarryx_u64(&x144, &x145, 0x0, x120, x135); + fiat_p256_addcarryx_u64(&x146, &x147, x145, x122, x137); + fiat_p256_addcarryx_u64(&x148, &x149, x147, x124, x139); + fiat_p256_addcarryx_u64(&x150, &x151, x149, x126, x141); + fiat_p256_addcarryx_u64(&x152, &x153, x151, x128, x143); + fiat_p256_mulx_u64(&x154, &x155, x144, UINT64_C(0xffffffff00000001)); + fiat_p256_mulx_u64(&x156, &x157, x144, UINT32_C(0xffffffff)); + fiat_p256_mulx_u64(&x158, &x159, x144, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x160, &x161, 0x0, x159, x156); + x162 = (x161 + x157); + fiat_p256_addcarryx_u64(&x163, &x164, 0x0, x144, x158); + fiat_p256_addcarryx_u64(&x165, &x166, x164, x146, x160); + fiat_p256_addcarryx_u64(&x167, &x168, x166, x148, x162); + fiat_p256_addcarryx_u64(&x169, &x170, x168, x150, x154); + fiat_p256_addcarryx_u64(&x171, &x172, x170, x152, x155); + x173 = ((uint64_t)x172 + x153); + fiat_p256_subborrowx_u64(&x174, &x175, 0x0, x165, UINT64_C(0xffffffffffffffff)); + fiat_p256_subborrowx_u64(&x176, &x177, x175, x167, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u64(&x178, &x179, x177, x169, 0x0); + fiat_p256_subborrowx_u64(&x180, &x181, x179, x171, UINT64_C(0xffffffff00000001)); + fiat_p256_subborrowx_u64(&x182, &x183, x181, x173, 0x0); + fiat_p256_cmovznz_u64(&x184, x183, x174, x165); + fiat_p256_cmovznz_u64(&x185, x183, x176, x167); + fiat_p256_cmovznz_u64(&x186, x183, x178, x169); + fiat_p256_cmovznz_u64(&x187, x183, x180, x171); + out1[0] = x184; + out1[1] = x185; + out1[2] = x186; + out1[3] = x187; } /* @@ -438,310 +463,300 @@ static void fiat_p256_mul(uint64_t out1[4], const uint64_t arg1[4], const uint64 * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_p256_square(uint64_t out1[4], const uint64_t arg1[4]) { - uint64_t x1 = (arg1[1]); - uint64_t x2 = (arg1[2]); - uint64_t x3 = (arg1[3]); - uint64_t x4 = (arg1[0]); + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; uint64_t x5; uint64_t x6; - fiat_p256_mulx_u64(&x5, &x6, x4, (arg1[3])); uint64_t x7; uint64_t x8; - fiat_p256_mulx_u64(&x7, &x8, x4, (arg1[2])); uint64_t x9; uint64_t x10; - fiat_p256_mulx_u64(&x9, &x10, x4, (arg1[1])); uint64_t x11; uint64_t x12; - fiat_p256_mulx_u64(&x11, &x12, x4, (arg1[0])); uint64_t x13; fiat_p256_uint1 x14; - fiat_p256_addcarryx_u64(&x13, &x14, 0x0, x12, x9); uint64_t x15; fiat_p256_uint1 x16; - fiat_p256_addcarryx_u64(&x15, &x16, x14, x10, x7); uint64_t x17; fiat_p256_uint1 x18; - fiat_p256_addcarryx_u64(&x17, &x18, x16, x8, x5); uint64_t x19; - fiat_p256_uint1 x20; - fiat_p256_addcarryx_u64(&x19, &x20, x18, x6, 0x0); + uint64_t x20; uint64_t x21; uint64_t x22; - fiat_p256_mulx_u64(&x21, &x22, x11, UINT64_C(0xffffffff00000001)); uint64_t x23; uint64_t x24; - fiat_p256_mulx_u64(&x23, &x24, x11, UINT32_C(0xffffffff)); uint64_t x25; uint64_t x26; - fiat_p256_mulx_u64(&x25, &x26, x11, UINT64_C(0xffffffffffffffff)); - uint64_t x27; - fiat_p256_uint1 x28; - fiat_p256_addcarryx_u64(&x27, &x28, 0x0, x26, x23); + fiat_p256_uint1 x27; + uint64_t x28; uint64_t x29; fiat_p256_uint1 x30; - fiat_p256_addcarryx_u64(&x29, &x30, x28, x24, 0x0); uint64_t x31; fiat_p256_uint1 x32; - fiat_p256_addcarryx_u64(&x31, &x32, 0x0, x11, x25); uint64_t x33; fiat_p256_uint1 x34; - fiat_p256_addcarryx_u64(&x33, &x34, x32, x13, x27); uint64_t x35; fiat_p256_uint1 x36; - fiat_p256_addcarryx_u64(&x35, &x36, x34, x15, x29); uint64_t x37; fiat_p256_uint1 x38; - fiat_p256_addcarryx_u64(&x37, &x38, x36, x17, x21); uint64_t x39; - fiat_p256_uint1 x40; - fiat_p256_addcarryx_u64(&x39, &x40, x38, x19, x22); + uint64_t x40; uint64_t x41; - fiat_p256_uint1 x42; - fiat_p256_addcarryx_u64(&x41, &x42, x40, 0x0, 0x0); + uint64_t x42; uint64_t x43; uint64_t x44; - fiat_p256_mulx_u64(&x43, &x44, x1, (arg1[3])); uint64_t x45; uint64_t x46; - fiat_p256_mulx_u64(&x45, &x46, x1, (arg1[2])); uint64_t x47; - uint64_t x48; - fiat_p256_mulx_u64(&x47, &x48, x1, (arg1[1])); + fiat_p256_uint1 x48; uint64_t x49; - uint64_t x50; - fiat_p256_mulx_u64(&x49, &x50, x1, (arg1[0])); + fiat_p256_uint1 x50; uint64_t x51; fiat_p256_uint1 x52; - fiat_p256_addcarryx_u64(&x51, &x52, 0x0, x50, x47); uint64_t x53; - fiat_p256_uint1 x54; - fiat_p256_addcarryx_u64(&x53, &x54, x52, x48, x45); - uint64_t x55; - fiat_p256_uint1 x56; - fiat_p256_addcarryx_u64(&x55, &x56, x54, x46, x43); - uint64_t x57; - fiat_p256_uint1 x58; - fiat_p256_addcarryx_u64(&x57, &x58, x56, x44, 0x0); - uint64_t x59; - fiat_p256_uint1 x60; - fiat_p256_addcarryx_u64(&x59, &x60, 0x0, x33, x49); - uint64_t x61; - fiat_p256_uint1 x62; - fiat_p256_addcarryx_u64(&x61, &x62, x60, x35, x51); - uint64_t x63; - fiat_p256_uint1 x64; - fiat_p256_addcarryx_u64(&x63, &x64, x62, x37, x53); + uint64_t x54; + fiat_p256_uint1 x55; + uint64_t x56; + fiat_p256_uint1 x57; + uint64_t x58; + fiat_p256_uint1 x59; + uint64_t x60; + fiat_p256_uint1 x61; + uint64_t x62; + fiat_p256_uint1 x63; + uint64_t x64; uint64_t x65; - fiat_p256_uint1 x66; - fiat_p256_addcarryx_u64(&x65, &x66, x64, x39, x55); + uint64_t x66; uint64_t x67; - fiat_p256_uint1 x68; - fiat_p256_addcarryx_u64(&x67, &x68, x66, (fiat_p256_uint1)x41, x57); + uint64_t x68; uint64_t x69; uint64_t x70; - fiat_p256_mulx_u64(&x69, &x70, x59, UINT64_C(0xffffffff00000001)); - uint64_t x71; + fiat_p256_uint1 x71; uint64_t x72; - fiat_p256_mulx_u64(&x71, &x72, x59, UINT32_C(0xffffffff)); uint64_t x73; - uint64_t x74; - fiat_p256_mulx_u64(&x73, &x74, x59, UINT64_C(0xffffffffffffffff)); + fiat_p256_uint1 x74; uint64_t x75; fiat_p256_uint1 x76; - fiat_p256_addcarryx_u64(&x75, &x76, 0x0, x74, x71); uint64_t x77; fiat_p256_uint1 x78; - fiat_p256_addcarryx_u64(&x77, &x78, x76, x72, 0x0); uint64_t x79; fiat_p256_uint1 x80; - fiat_p256_addcarryx_u64(&x79, &x80, 0x0, x59, x73); uint64_t x81; fiat_p256_uint1 x82; - fiat_p256_addcarryx_u64(&x81, &x82, x80, x61, x75); uint64_t x83; - fiat_p256_uint1 x84; - fiat_p256_addcarryx_u64(&x83, &x84, x82, x63, x77); + uint64_t x84; uint64_t x85; - fiat_p256_uint1 x86; - fiat_p256_addcarryx_u64(&x85, &x86, x84, x65, x69); + uint64_t x86; uint64_t x87; - fiat_p256_uint1 x88; - fiat_p256_addcarryx_u64(&x87, &x88, x86, x67, x70); + uint64_t x88; uint64_t x89; - fiat_p256_uint1 x90; - fiat_p256_addcarryx_u64(&x89, &x90, x88, x68, 0x0); + uint64_t x90; uint64_t x91; uint64_t x92; - fiat_p256_mulx_u64(&x91, &x92, x2, (arg1[3])); - uint64_t x93; + fiat_p256_uint1 x93; uint64_t x94; - fiat_p256_mulx_u64(&x93, &x94, x2, (arg1[2])); - uint64_t x95; + fiat_p256_uint1 x95; uint64_t x96; - fiat_p256_mulx_u64(&x95, &x96, x2, (arg1[1])); - uint64_t x97; + fiat_p256_uint1 x97; uint64_t x98; - fiat_p256_mulx_u64(&x97, &x98, x2, (arg1[0])); uint64_t x99; fiat_p256_uint1 x100; - fiat_p256_addcarryx_u64(&x99, &x100, 0x0, x98, x95); uint64_t x101; fiat_p256_uint1 x102; - fiat_p256_addcarryx_u64(&x101, &x102, x100, x96, x93); uint64_t x103; fiat_p256_uint1 x104; - fiat_p256_addcarryx_u64(&x103, &x104, x102, x94, x91); uint64_t x105; fiat_p256_uint1 x106; - fiat_p256_addcarryx_u64(&x105, &x106, x104, x92, 0x0); uint64_t x107; fiat_p256_uint1 x108; - fiat_p256_addcarryx_u64(&x107, &x108, 0x0, x81, x97); uint64_t x109; - fiat_p256_uint1 x110; - fiat_p256_addcarryx_u64(&x109, &x110, x108, x83, x99); + uint64_t x110; uint64_t x111; - fiat_p256_uint1 x112; - fiat_p256_addcarryx_u64(&x111, &x112, x110, x85, x101); + uint64_t x112; uint64_t x113; - fiat_p256_uint1 x114; - fiat_p256_addcarryx_u64(&x113, &x114, x112, x87, x103); + uint64_t x114; uint64_t x115; fiat_p256_uint1 x116; - fiat_p256_addcarryx_u64(&x115, &x116, x114, x89, x105); uint64_t x117; uint64_t x118; - fiat_p256_mulx_u64(&x117, &x118, x107, UINT64_C(0xffffffff00000001)); - uint64_t x119; + fiat_p256_uint1 x119; uint64_t x120; - fiat_p256_mulx_u64(&x119, &x120, x107, UINT32_C(0xffffffff)); - uint64_t x121; + fiat_p256_uint1 x121; uint64_t x122; - fiat_p256_mulx_u64(&x121, &x122, x107, UINT64_C(0xffffffffffffffff)); - uint64_t x123; - fiat_p256_uint1 x124; - fiat_p256_addcarryx_u64(&x123, &x124, 0x0, x122, x119); - uint64_t x125; - fiat_p256_uint1 x126; - fiat_p256_addcarryx_u64(&x125, &x126, x124, x120, 0x0); - uint64_t x127; - fiat_p256_uint1 x128; - fiat_p256_addcarryx_u64(&x127, &x128, 0x0, x107, x121); + fiat_p256_uint1 x123; + uint64_t x124; + fiat_p256_uint1 x125; + uint64_t x126; + fiat_p256_uint1 x127; + uint64_t x128; uint64_t x129; - fiat_p256_uint1 x130; - fiat_p256_addcarryx_u64(&x129, &x130, x128, x109, x123); + uint64_t x130; uint64_t x131; - fiat_p256_uint1 x132; - fiat_p256_addcarryx_u64(&x131, &x132, x130, x111, x125); + uint64_t x132; uint64_t x133; - fiat_p256_uint1 x134; - fiat_p256_addcarryx_u64(&x133, &x134, x132, x113, x117); + uint64_t x134; uint64_t x135; - fiat_p256_uint1 x136; - fiat_p256_addcarryx_u64(&x135, &x136, x134, x115, x118); + uint64_t x136; uint64_t x137; fiat_p256_uint1 x138; - fiat_p256_addcarryx_u64(&x137, &x138, x136, x116, 0x0); uint64_t x139; - uint64_t x140; - fiat_p256_mulx_u64(&x139, &x140, x3, (arg1[3])); + fiat_p256_uint1 x140; uint64_t x141; - uint64_t x142; - fiat_p256_mulx_u64(&x141, &x142, x3, (arg1[2])); + fiat_p256_uint1 x142; uint64_t x143; uint64_t x144; - fiat_p256_mulx_u64(&x143, &x144, x3, (arg1[1])); - uint64_t x145; + fiat_p256_uint1 x145; uint64_t x146; - fiat_p256_mulx_u64(&x145, &x146, x3, (arg1[0])); - uint64_t x147; - fiat_p256_uint1 x148; - fiat_p256_addcarryx_u64(&x147, &x148, 0x0, x146, x143); - uint64_t x149; - fiat_p256_uint1 x150; - fiat_p256_addcarryx_u64(&x149, &x150, x148, x144, x141); - uint64_t x151; - fiat_p256_uint1 x152; - fiat_p256_addcarryx_u64(&x151, &x152, x150, x142, x139); - uint64_t x153; - fiat_p256_uint1 x154; - fiat_p256_addcarryx_u64(&x153, &x154, x152, x140, 0x0); + fiat_p256_uint1 x147; + uint64_t x148; + fiat_p256_uint1 x149; + uint64_t x150; + fiat_p256_uint1 x151; + uint64_t x152; + fiat_p256_uint1 x153; + uint64_t x154; uint64_t x155; - fiat_p256_uint1 x156; - fiat_p256_addcarryx_u64(&x155, &x156, 0x0, x129, x145); + uint64_t x156; uint64_t x157; - fiat_p256_uint1 x158; - fiat_p256_addcarryx_u64(&x157, &x158, x156, x131, x147); + uint64_t x158; uint64_t x159; - fiat_p256_uint1 x160; - fiat_p256_addcarryx_u64(&x159, &x160, x158, x133, x149); - uint64_t x161; - fiat_p256_uint1 x162; - fiat_p256_addcarryx_u64(&x161, &x162, x160, x135, x151); + uint64_t x160; + fiat_p256_uint1 x161; + uint64_t x162; uint64_t x163; fiat_p256_uint1 x164; - fiat_p256_addcarryx_u64(&x163, &x164, x162, x137, x153); uint64_t x165; - uint64_t x166; - fiat_p256_mulx_u64(&x165, &x166, x155, UINT64_C(0xffffffff00000001)); + fiat_p256_uint1 x166; uint64_t x167; - uint64_t x168; - fiat_p256_mulx_u64(&x167, &x168, x155, UINT32_C(0xffffffff)); + fiat_p256_uint1 x168; uint64_t x169; - uint64_t x170; - fiat_p256_mulx_u64(&x169, &x170, x155, UINT64_C(0xffffffffffffffff)); + fiat_p256_uint1 x170; uint64_t x171; fiat_p256_uint1 x172; - fiat_p256_addcarryx_u64(&x171, &x172, 0x0, x170, x167); uint64_t x173; - fiat_p256_uint1 x174; - fiat_p256_addcarryx_u64(&x173, &x174, x172, x168, 0x0); - uint64_t x175; - fiat_p256_uint1 x176; - fiat_p256_addcarryx_u64(&x175, &x176, 0x0, x155, x169); - uint64_t x177; - fiat_p256_uint1 x178; - fiat_p256_addcarryx_u64(&x177, &x178, x176, x157, x171); - uint64_t x179; - fiat_p256_uint1 x180; - fiat_p256_addcarryx_u64(&x179, &x180, x178, x159, x173); - uint64_t x181; - fiat_p256_uint1 x182; - fiat_p256_addcarryx_u64(&x181, &x182, x180, x161, x165); - uint64_t x183; - fiat_p256_uint1 x184; - fiat_p256_addcarryx_u64(&x183, &x184, x182, x163, x166); + uint64_t x174; + fiat_p256_uint1 x175; + uint64_t x176; + fiat_p256_uint1 x177; + uint64_t x178; + fiat_p256_uint1 x179; + uint64_t x180; + fiat_p256_uint1 x181; + uint64_t x182; + fiat_p256_uint1 x183; + uint64_t x184; uint64_t x185; - fiat_p256_uint1 x186; - fiat_p256_addcarryx_u64(&x185, &x186, x184, x164, 0x0); + uint64_t x186; uint64_t x187; - fiat_p256_uint1 x188; - fiat_p256_subborrowx_u64(&x187, &x188, 0x0, x177, UINT64_C(0xffffffffffffffff)); - uint64_t x189; - fiat_p256_uint1 x190; - fiat_p256_subborrowx_u64(&x189, &x190, x188, x179, UINT32_C(0xffffffff)); - uint64_t x191; - fiat_p256_uint1 x192; - fiat_p256_subborrowx_u64(&x191, &x192, x190, x181, 0x0); - uint64_t x193; - fiat_p256_uint1 x194; - fiat_p256_subborrowx_u64(&x193, &x194, x192, x183, UINT64_C(0xffffffff00000001)); - uint64_t x195; - fiat_p256_uint1 x196; - fiat_p256_subborrowx_u64(&x195, &x196, x194, x185, 0x0); - uint64_t x197; - fiat_p256_cmovznz_u64(&x197, x196, x187, x177); - uint64_t x198; - fiat_p256_cmovznz_u64(&x198, x196, x189, x179); - uint64_t x199; - fiat_p256_cmovznz_u64(&x199, x196, x191, x181); - uint64_t x200; - fiat_p256_cmovznz_u64(&x200, x196, x193, x183); - out1[0] = x197; - out1[1] = x198; - out1[2] = x199; - out1[3] = x200; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[0]); + fiat_p256_mulx_u64(&x5, &x6, x4, (arg1[3])); + fiat_p256_mulx_u64(&x7, &x8, x4, (arg1[2])); + fiat_p256_mulx_u64(&x9, &x10, x4, (arg1[1])); + fiat_p256_mulx_u64(&x11, &x12, x4, (arg1[0])); + fiat_p256_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + fiat_p256_addcarryx_u64(&x15, &x16, x14, x10, x7); + fiat_p256_addcarryx_u64(&x17, &x18, x16, x8, x5); + x19 = (x18 + x6); + fiat_p256_mulx_u64(&x20, &x21, x11, UINT64_C(0xffffffff00000001)); + fiat_p256_mulx_u64(&x22, &x23, x11, UINT32_C(0xffffffff)); + fiat_p256_mulx_u64(&x24, &x25, x11, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x26, &x27, 0x0, x25, x22); + x28 = (x27 + x23); + fiat_p256_addcarryx_u64(&x29, &x30, 0x0, x11, x24); + fiat_p256_addcarryx_u64(&x31, &x32, x30, x13, x26); + fiat_p256_addcarryx_u64(&x33, &x34, x32, x15, x28); + fiat_p256_addcarryx_u64(&x35, &x36, x34, x17, x20); + fiat_p256_addcarryx_u64(&x37, &x38, x36, x19, x21); + fiat_p256_mulx_u64(&x39, &x40, x1, (arg1[3])); + fiat_p256_mulx_u64(&x41, &x42, x1, (arg1[2])); + fiat_p256_mulx_u64(&x43, &x44, x1, (arg1[1])); + fiat_p256_mulx_u64(&x45, &x46, x1, (arg1[0])); + fiat_p256_addcarryx_u64(&x47, &x48, 0x0, x46, x43); + fiat_p256_addcarryx_u64(&x49, &x50, x48, x44, x41); + fiat_p256_addcarryx_u64(&x51, &x52, x50, x42, x39); + x53 = (x52 + x40); + fiat_p256_addcarryx_u64(&x54, &x55, 0x0, x31, x45); + fiat_p256_addcarryx_u64(&x56, &x57, x55, x33, x47); + fiat_p256_addcarryx_u64(&x58, &x59, x57, x35, x49); + fiat_p256_addcarryx_u64(&x60, &x61, x59, x37, x51); + fiat_p256_addcarryx_u64(&x62, &x63, x61, x38, x53); + fiat_p256_mulx_u64(&x64, &x65, x54, UINT64_C(0xffffffff00000001)); + fiat_p256_mulx_u64(&x66, &x67, x54, UINT32_C(0xffffffff)); + fiat_p256_mulx_u64(&x68, &x69, x54, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x70, &x71, 0x0, x69, x66); + x72 = (x71 + x67); + fiat_p256_addcarryx_u64(&x73, &x74, 0x0, x54, x68); + fiat_p256_addcarryx_u64(&x75, &x76, x74, x56, x70); + fiat_p256_addcarryx_u64(&x77, &x78, x76, x58, x72); + fiat_p256_addcarryx_u64(&x79, &x80, x78, x60, x64); + fiat_p256_addcarryx_u64(&x81, &x82, x80, x62, x65); + x83 = ((uint64_t)x82 + x63); + fiat_p256_mulx_u64(&x84, &x85, x2, (arg1[3])); + fiat_p256_mulx_u64(&x86, &x87, x2, (arg1[2])); + fiat_p256_mulx_u64(&x88, &x89, x2, (arg1[1])); + fiat_p256_mulx_u64(&x90, &x91, x2, (arg1[0])); + fiat_p256_addcarryx_u64(&x92, &x93, 0x0, x91, x88); + fiat_p256_addcarryx_u64(&x94, &x95, x93, x89, x86); + fiat_p256_addcarryx_u64(&x96, &x97, x95, x87, x84); + x98 = (x97 + x85); + fiat_p256_addcarryx_u64(&x99, &x100, 0x0, x75, x90); + fiat_p256_addcarryx_u64(&x101, &x102, x100, x77, x92); + fiat_p256_addcarryx_u64(&x103, &x104, x102, x79, x94); + fiat_p256_addcarryx_u64(&x105, &x106, x104, x81, x96); + fiat_p256_addcarryx_u64(&x107, &x108, x106, x83, x98); + fiat_p256_mulx_u64(&x109, &x110, x99, UINT64_C(0xffffffff00000001)); + fiat_p256_mulx_u64(&x111, &x112, x99, UINT32_C(0xffffffff)); + fiat_p256_mulx_u64(&x113, &x114, x99, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x115, &x116, 0x0, x114, x111); + x117 = (x116 + x112); + fiat_p256_addcarryx_u64(&x118, &x119, 0x0, x99, x113); + fiat_p256_addcarryx_u64(&x120, &x121, x119, x101, x115); + fiat_p256_addcarryx_u64(&x122, &x123, x121, x103, x117); + fiat_p256_addcarryx_u64(&x124, &x125, x123, x105, x109); + fiat_p256_addcarryx_u64(&x126, &x127, x125, x107, x110); + x128 = ((uint64_t)x127 + x108); + fiat_p256_mulx_u64(&x129, &x130, x3, (arg1[3])); + fiat_p256_mulx_u64(&x131, &x132, x3, (arg1[2])); + fiat_p256_mulx_u64(&x133, &x134, x3, (arg1[1])); + fiat_p256_mulx_u64(&x135, &x136, x3, (arg1[0])); + fiat_p256_addcarryx_u64(&x137, &x138, 0x0, x136, x133); + fiat_p256_addcarryx_u64(&x139, &x140, x138, x134, x131); + fiat_p256_addcarryx_u64(&x141, &x142, x140, x132, x129); + x143 = (x142 + x130); + fiat_p256_addcarryx_u64(&x144, &x145, 0x0, x120, x135); + fiat_p256_addcarryx_u64(&x146, &x147, x145, x122, x137); + fiat_p256_addcarryx_u64(&x148, &x149, x147, x124, x139); + fiat_p256_addcarryx_u64(&x150, &x151, x149, x126, x141); + fiat_p256_addcarryx_u64(&x152, &x153, x151, x128, x143); + fiat_p256_mulx_u64(&x154, &x155, x144, UINT64_C(0xffffffff00000001)); + fiat_p256_mulx_u64(&x156, &x157, x144, UINT32_C(0xffffffff)); + fiat_p256_mulx_u64(&x158, &x159, x144, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x160, &x161, 0x0, x159, x156); + x162 = (x161 + x157); + fiat_p256_addcarryx_u64(&x163, &x164, 0x0, x144, x158); + fiat_p256_addcarryx_u64(&x165, &x166, x164, x146, x160); + fiat_p256_addcarryx_u64(&x167, &x168, x166, x148, x162); + fiat_p256_addcarryx_u64(&x169, &x170, x168, x150, x154); + fiat_p256_addcarryx_u64(&x171, &x172, x170, x152, x155); + x173 = ((uint64_t)x172 + x153); + fiat_p256_subborrowx_u64(&x174, &x175, 0x0, x165, UINT64_C(0xffffffffffffffff)); + fiat_p256_subborrowx_u64(&x176, &x177, x175, x167, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u64(&x178, &x179, x177, x169, 0x0); + fiat_p256_subborrowx_u64(&x180, &x181, x179, x171, UINT64_C(0xffffffff00000001)); + fiat_p256_subborrowx_u64(&x182, &x183, x181, x173, 0x0); + fiat_p256_cmovznz_u64(&x184, x183, x174, x165); + fiat_p256_cmovznz_u64(&x185, x183, x176, x167); + fiat_p256_cmovznz_u64(&x186, x183, x178, x169); + fiat_p256_cmovznz_u64(&x187, x183, x180, x171); + out1[0] = x184; + out1[1] = x185; + out1[2] = x186; + out1[3] = x187; } /* @@ -762,38 +777,38 @@ static void fiat_p256_square(uint64_t out1[4], const uint64_t arg1[4]) { static void fiat_p256_add(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { uint64_t x1; fiat_p256_uint1 x2; - fiat_p256_addcarryx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); uint64_t x3; fiat_p256_uint1 x4; - fiat_p256_addcarryx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); uint64_t x5; fiat_p256_uint1 x6; - fiat_p256_addcarryx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); uint64_t x7; fiat_p256_uint1 x8; - fiat_p256_addcarryx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); uint64_t x9; fiat_p256_uint1 x10; - fiat_p256_subborrowx_u64(&x9, &x10, 0x0, x1, UINT64_C(0xffffffffffffffff)); uint64_t x11; fiat_p256_uint1 x12; - fiat_p256_subborrowx_u64(&x11, &x12, x10, x3, UINT32_C(0xffffffff)); uint64_t x13; fiat_p256_uint1 x14; - fiat_p256_subborrowx_u64(&x13, &x14, x12, x5, 0x0); uint64_t x15; fiat_p256_uint1 x16; - fiat_p256_subborrowx_u64(&x15, &x16, x14, x7, UINT64_C(0xffffffff00000001)); uint64_t x17; fiat_p256_uint1 x18; - fiat_p256_subborrowx_u64(&x17, &x18, x16, x8, 0x0); uint64_t x19; - fiat_p256_cmovznz_u64(&x19, x18, x9, x1); uint64_t x20; - fiat_p256_cmovznz_u64(&x20, x18, x11, x3); uint64_t x21; - fiat_p256_cmovznz_u64(&x21, x18, x13, x5); uint64_t x22; + fiat_p256_addcarryx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_p256_addcarryx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_p256_addcarryx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_p256_addcarryx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_p256_subborrowx_u64(&x9, &x10, 0x0, x1, UINT64_C(0xffffffffffffffff)); + fiat_p256_subborrowx_u64(&x11, &x12, x10, x3, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u64(&x13, &x14, x12, x5, 0x0); + fiat_p256_subborrowx_u64(&x15, &x16, x14, x7, UINT64_C(0xffffffff00000001)); + fiat_p256_subborrowx_u64(&x17, &x18, x16, x8, 0x0); + fiat_p256_cmovznz_u64(&x19, x18, x9, x1); + fiat_p256_cmovznz_u64(&x20, x18, x11, x3); + fiat_p256_cmovznz_u64(&x21, x18, x13, x5); fiat_p256_cmovznz_u64(&x22, x18, x15, x7); out1[0] = x19; out1[1] = x20; @@ -819,29 +834,29 @@ static void fiat_p256_add(uint64_t out1[4], const uint64_t arg1[4], const uint64 static void fiat_p256_sub(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { uint64_t x1; fiat_p256_uint1 x2; - fiat_p256_subborrowx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); uint64_t x3; fiat_p256_uint1 x4; - fiat_p256_subborrowx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); uint64_t x5; fiat_p256_uint1 x6; - fiat_p256_subborrowx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); uint64_t x7; fiat_p256_uint1 x8; - fiat_p256_subborrowx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); uint64_t x9; - fiat_p256_cmovznz_u64(&x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); uint64_t x10; fiat_p256_uint1 x11; - fiat_p256_addcarryx_u64(&x10, &x11, 0x0, x1, (x9 & UINT64_C(0xffffffffffffffff))); uint64_t x12; fiat_p256_uint1 x13; - fiat_p256_addcarryx_u64(&x12, &x13, x11, x3, (x9 & UINT32_C(0xffffffff))); uint64_t x14; fiat_p256_uint1 x15; - fiat_p256_addcarryx_u64(&x14, &x15, x13, x5, 0x0); uint64_t x16; fiat_p256_uint1 x17; + fiat_p256_subborrowx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_p256_subborrowx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_p256_subborrowx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_p256_subborrowx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_p256_cmovznz_u64(&x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x10, &x11, 0x0, x1, x9); + fiat_p256_addcarryx_u64(&x12, &x13, x11, x3, (x9 & UINT32_C(0xffffffff))); + fiat_p256_addcarryx_u64(&x14, &x15, x13, x5, 0x0); fiat_p256_addcarryx_u64(&x16, &x17, x15, x7, (x9 & UINT64_C(0xffffffff00000001))); out1[0] = x10; out1[1] = x12; @@ -865,29 +880,29 @@ static void fiat_p256_sub(uint64_t out1[4], const uint64_t arg1[4], const uint64 static void fiat_p256_opp(uint64_t out1[4], const uint64_t arg1[4]) { uint64_t x1; fiat_p256_uint1 x2; - fiat_p256_subborrowx_u64(&x1, &x2, 0x0, 0x0, (arg1[0])); uint64_t x3; fiat_p256_uint1 x4; - fiat_p256_subborrowx_u64(&x3, &x4, x2, 0x0, (arg1[1])); uint64_t x5; fiat_p256_uint1 x6; - fiat_p256_subborrowx_u64(&x5, &x6, x4, 0x0, (arg1[2])); uint64_t x7; fiat_p256_uint1 x8; - fiat_p256_subborrowx_u64(&x7, &x8, x6, 0x0, (arg1[3])); uint64_t x9; - fiat_p256_cmovznz_u64(&x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); uint64_t x10; fiat_p256_uint1 x11; - fiat_p256_addcarryx_u64(&x10, &x11, 0x0, x1, (x9 & UINT64_C(0xffffffffffffffff))); uint64_t x12; fiat_p256_uint1 x13; - fiat_p256_addcarryx_u64(&x12, &x13, x11, x3, (x9 & UINT32_C(0xffffffff))); uint64_t x14; fiat_p256_uint1 x15; - fiat_p256_addcarryx_u64(&x14, &x15, x13, x5, 0x0); uint64_t x16; fiat_p256_uint1 x17; + fiat_p256_subborrowx_u64(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_p256_subborrowx_u64(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_p256_subborrowx_u64(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_p256_subborrowx_u64(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_p256_cmovznz_u64(&x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x10, &x11, 0x0, x1, x9); + fiat_p256_addcarryx_u64(&x12, &x13, x11, x3, (x9 & UINT32_C(0xffffffff))); + fiat_p256_addcarryx_u64(&x14, &x15, x13, x5, 0x0); fiat_p256_addcarryx_u64(&x16, &x17, x15, x7, (x9 & UINT64_C(0xffffffff00000001))); out1[0] = x10; out1[1] = x12; @@ -909,178 +924,427 @@ static void fiat_p256_opp(uint64_t out1[4], const uint64_t arg1[4]) { * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_p256_from_montgomery(uint64_t out1[4], const uint64_t arg1[4]) { - uint64_t x1 = (arg1[0]); + uint64_t x1; uint64_t x2; uint64_t x3; - fiat_p256_mulx_u64(&x2, &x3, x1, UINT64_C(0xffffffff00000001)); uint64_t x4; uint64_t x5; - fiat_p256_mulx_u64(&x4, &x5, x1, UINT32_C(0xffffffff)); uint64_t x6; uint64_t x7; - fiat_p256_mulx_u64(&x6, &x7, x1, UINT64_C(0xffffffffffffffff)); uint64_t x8; fiat_p256_uint1 x9; - fiat_p256_addcarryx_u64(&x8, &x9, 0x0, x7, x4); uint64_t x10; fiat_p256_uint1 x11; - fiat_p256_addcarryx_u64(&x10, &x11, 0x0, x1, x6); uint64_t x12; fiat_p256_uint1 x13; - fiat_p256_addcarryx_u64(&x12, &x13, x11, 0x0, x8); uint64_t x14; fiat_p256_uint1 x15; - fiat_p256_addcarryx_u64(&x14, &x15, 0x0, x12, (arg1[1])); uint64_t x16; uint64_t x17; - fiat_p256_mulx_u64(&x16, &x17, x14, UINT64_C(0xffffffff00000001)); uint64_t x18; uint64_t x19; - fiat_p256_mulx_u64(&x18, &x19, x14, UINT32_C(0xffffffff)); uint64_t x20; uint64_t x21; - fiat_p256_mulx_u64(&x20, &x21, x14, UINT64_C(0xffffffffffffffff)); uint64_t x22; fiat_p256_uint1 x23; - fiat_p256_addcarryx_u64(&x22, &x23, 0x0, x21, x18); uint64_t x24; fiat_p256_uint1 x25; - fiat_p256_addcarryx_u64(&x24, &x25, x9, x5, 0x0); uint64_t x26; fiat_p256_uint1 x27; - fiat_p256_addcarryx_u64(&x26, &x27, x13, 0x0, x24); uint64_t x28; fiat_p256_uint1 x29; - fiat_p256_addcarryx_u64(&x28, &x29, x15, x26, 0x0); uint64_t x30; fiat_p256_uint1 x31; - fiat_p256_addcarryx_u64(&x30, &x31, 0x0, x14, x20); uint64_t x32; fiat_p256_uint1 x33; - fiat_p256_addcarryx_u64(&x32, &x33, x31, x28, x22); uint64_t x34; fiat_p256_uint1 x35; - fiat_p256_addcarryx_u64(&x34, &x35, x23, x19, 0x0); uint64_t x36; fiat_p256_uint1 x37; - fiat_p256_addcarryx_u64(&x36, &x37, x33, x2, x34); uint64_t x38; - fiat_p256_uint1 x39; - fiat_p256_addcarryx_u64(&x38, &x39, x37, x3, x16); + uint64_t x39; uint64_t x40; - fiat_p256_uint1 x41; - fiat_p256_addcarryx_u64(&x40, &x41, 0x0, x32, (arg1[2])); + uint64_t x41; uint64_t x42; - fiat_p256_uint1 x43; - fiat_p256_addcarryx_u64(&x42, &x43, x41, x36, 0x0); + uint64_t x43; uint64_t x44; fiat_p256_uint1 x45; - fiat_p256_addcarryx_u64(&x44, &x45, x43, x38, 0x0); uint64_t x46; - uint64_t x47; - fiat_p256_mulx_u64(&x46, &x47, x40, UINT64_C(0xffffffff00000001)); + fiat_p256_uint1 x47; uint64_t x48; - uint64_t x49; - fiat_p256_mulx_u64(&x48, &x49, x40, UINT32_C(0xffffffff)); + fiat_p256_uint1 x49; uint64_t x50; - uint64_t x51; - fiat_p256_mulx_u64(&x50, &x51, x40, UINT64_C(0xffffffffffffffff)); + fiat_p256_uint1 x51; uint64_t x52; fiat_p256_uint1 x53; - fiat_p256_addcarryx_u64(&x52, &x53, 0x0, x51, x48); uint64_t x54; fiat_p256_uint1 x55; - fiat_p256_addcarryx_u64(&x54, &x55, 0x0, x40, x50); uint64_t x56; fiat_p256_uint1 x57; - fiat_p256_addcarryx_u64(&x56, &x57, x55, x42, x52); uint64_t x58; fiat_p256_uint1 x59; - fiat_p256_addcarryx_u64(&x58, &x59, x53, x49, 0x0); uint64_t x60; - fiat_p256_uint1 x61; - fiat_p256_addcarryx_u64(&x60, &x61, x57, x44, x58); + uint64_t x61; uint64_t x62; - fiat_p256_uint1 x63; - fiat_p256_addcarryx_u64(&x62, &x63, x39, 0x0, x17); + uint64_t x63; uint64_t x64; - fiat_p256_uint1 x65; - fiat_p256_addcarryx_u64(&x64, &x65, x45, x62, 0x0); + uint64_t x65; uint64_t x66; fiat_p256_uint1 x67; - fiat_p256_addcarryx_u64(&x66, &x67, x61, x64, x46); uint64_t x68; fiat_p256_uint1 x69; - fiat_p256_addcarryx_u64(&x68, &x69, 0x0, x56, (arg1[3])); uint64_t x70; fiat_p256_uint1 x71; - fiat_p256_addcarryx_u64(&x70, &x71, x69, x60, 0x0); uint64_t x72; fiat_p256_uint1 x73; - fiat_p256_addcarryx_u64(&x72, &x73, x71, x66, 0x0); uint64_t x74; - uint64_t x75; - fiat_p256_mulx_u64(&x74, &x75, x68, UINT64_C(0xffffffff00000001)); + fiat_p256_uint1 x75; uint64_t x76; uint64_t x77; - fiat_p256_mulx_u64(&x76, &x77, x68, UINT32_C(0xffffffff)); + fiat_p256_uint1 x78; + uint64_t x79; + fiat_p256_uint1 x80; + uint64_t x81; + fiat_p256_uint1 x82; + uint64_t x83; + fiat_p256_uint1 x84; + uint64_t x85; + fiat_p256_uint1 x86; + uint64_t x87; + uint64_t x88; + uint64_t x89; + uint64_t x90; + x1 = (arg1[0]); + fiat_p256_mulx_u64(&x2, &x3, x1, UINT64_C(0xffffffff00000001)); + fiat_p256_mulx_u64(&x4, &x5, x1, UINT32_C(0xffffffff)); + fiat_p256_mulx_u64(&x6, &x7, x1, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x8, &x9, 0x0, x7, x4); + fiat_p256_addcarryx_u64(&x10, &x11, 0x0, x1, x6); + fiat_p256_addcarryx_u64(&x12, &x13, x11, 0x0, x8); + fiat_p256_addcarryx_u64(&x14, &x15, 0x0, x12, (arg1[1])); + fiat_p256_mulx_u64(&x16, &x17, x14, UINT64_C(0xffffffff00000001)); + fiat_p256_mulx_u64(&x18, &x19, x14, UINT32_C(0xffffffff)); + fiat_p256_mulx_u64(&x20, &x21, x14, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x22, &x23, 0x0, x21, x18); + fiat_p256_addcarryx_u64(&x24, &x25, 0x0, x14, x20); + fiat_p256_addcarryx_u64(&x26, &x27, x25, (x15 + (x13 + (x9 + x5))), x22); + fiat_p256_addcarryx_u64(&x28, &x29, x27, x2, (x23 + x19)); + fiat_p256_addcarryx_u64(&x30, &x31, x29, x3, x16); + fiat_p256_addcarryx_u64(&x32, &x33, 0x0, x26, (arg1[2])); + fiat_p256_addcarryx_u64(&x34, &x35, x33, x28, 0x0); + fiat_p256_addcarryx_u64(&x36, &x37, x35, x30, 0x0); + fiat_p256_mulx_u64(&x38, &x39, x32, UINT64_C(0xffffffff00000001)); + fiat_p256_mulx_u64(&x40, &x41, x32, UINT32_C(0xffffffff)); + fiat_p256_mulx_u64(&x42, &x43, x32, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x44, &x45, 0x0, x43, x40); + fiat_p256_addcarryx_u64(&x46, &x47, 0x0, x32, x42); + fiat_p256_addcarryx_u64(&x48, &x49, x47, x34, x44); + fiat_p256_addcarryx_u64(&x50, &x51, x49, x36, (x45 + x41)); + fiat_p256_addcarryx_u64(&x52, &x53, x51, (x37 + (x31 + x17)), x38); + fiat_p256_addcarryx_u64(&x54, &x55, 0x0, x48, (arg1[3])); + fiat_p256_addcarryx_u64(&x56, &x57, x55, x50, 0x0); + fiat_p256_addcarryx_u64(&x58, &x59, x57, x52, 0x0); + fiat_p256_mulx_u64(&x60, &x61, x54, UINT64_C(0xffffffff00000001)); + fiat_p256_mulx_u64(&x62, &x63, x54, UINT32_C(0xffffffff)); + fiat_p256_mulx_u64(&x64, &x65, x54, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x66, &x67, 0x0, x65, x62); + fiat_p256_addcarryx_u64(&x68, &x69, 0x0, x54, x64); + fiat_p256_addcarryx_u64(&x70, &x71, x69, x56, x66); + fiat_p256_addcarryx_u64(&x72, &x73, x71, x58, (x67 + x63)); + fiat_p256_addcarryx_u64(&x74, &x75, x73, (x59 + (x53 + x39)), x60); + x76 = (x75 + x61); + fiat_p256_subborrowx_u64(&x77, &x78, 0x0, x70, UINT64_C(0xffffffffffffffff)); + fiat_p256_subborrowx_u64(&x79, &x80, x78, x72, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u64(&x81, &x82, x80, x74, 0x0); + fiat_p256_subborrowx_u64(&x83, &x84, x82, x76, UINT64_C(0xffffffff00000001)); + fiat_p256_subborrowx_u64(&x85, &x86, x84, 0x0, 0x0); + fiat_p256_cmovznz_u64(&x87, x86, x77, x70); + fiat_p256_cmovznz_u64(&x88, x86, x79, x72); + fiat_p256_cmovznz_u64(&x89, x86, x81, x74); + fiat_p256_cmovznz_u64(&x90, x86, x83, x76); + out1[0] = x87; + out1[1] = x88; + out1[2] = x89; + out1[3] = x90; +} + +/* + * The function fiat_p256_to_montgomery translates a field element into the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_to_montgomery(uint64_t out1[4], const uint64_t arg1[4]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + fiat_p256_uint1 x14; + uint64_t x15; + fiat_p256_uint1 x16; + uint64_t x17; + fiat_p256_uint1 x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + fiat_p256_uint1 x26; + uint64_t x27; + fiat_p256_uint1 x28; + uint64_t x29; + fiat_p256_uint1 x30; + uint64_t x31; + fiat_p256_uint1 x32; + uint64_t x33; + fiat_p256_uint1 x34; + uint64_t x35; + fiat_p256_uint1 x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + fiat_p256_uint1 x46; + uint64_t x47; + fiat_p256_uint1 x48; + uint64_t x49; + fiat_p256_uint1 x50; + uint64_t x51; + fiat_p256_uint1 x52; + uint64_t x53; + fiat_p256_uint1 x54; + uint64_t x55; + fiat_p256_uint1 x56; + uint64_t x57; + fiat_p256_uint1 x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + uint64_t x65; + fiat_p256_uint1 x66; + uint64_t x67; + fiat_p256_uint1 x68; + uint64_t x69; + fiat_p256_uint1 x70; + uint64_t x71; + fiat_p256_uint1 x72; + uint64_t x73; + fiat_p256_uint1 x74; + uint64_t x75; + fiat_p256_uint1 x76; + uint64_t x77; uint64_t x78; uint64_t x79; - fiat_p256_mulx_u64(&x78, &x79, x68, UINT64_C(0xffffffffffffffff)); uint64_t x80; - fiat_p256_uint1 x81; - fiat_p256_addcarryx_u64(&x80, &x81, 0x0, x79, x76); + uint64_t x81; uint64_t x82; - fiat_p256_uint1 x83; - fiat_p256_addcarryx_u64(&x82, &x83, 0x0, x68, x78); + uint64_t x83; uint64_t x84; - fiat_p256_uint1 x85; - fiat_p256_addcarryx_u64(&x84, &x85, x83, x70, x80); - uint64_t x86; - fiat_p256_uint1 x87; - fiat_p256_addcarryx_u64(&x86, &x87, x81, x77, 0x0); - uint64_t x88; - fiat_p256_uint1 x89; - fiat_p256_addcarryx_u64(&x88, &x89, x85, x72, x86); - uint64_t x90; - fiat_p256_uint1 x91; - fiat_p256_addcarryx_u64(&x90, &x91, x67, 0x0, x47); - uint64_t x92; - fiat_p256_uint1 x93; - fiat_p256_addcarryx_u64(&x92, &x93, x73, x90, 0x0); - uint64_t x94; - fiat_p256_uint1 x95; - fiat_p256_addcarryx_u64(&x94, &x95, x89, x92, x74); - uint64_t x96; - fiat_p256_uint1 x97; - fiat_p256_addcarryx_u64(&x96, &x97, x95, 0x0, x75); - uint64_t x98; - fiat_p256_uint1 x99; - fiat_p256_subborrowx_u64(&x98, &x99, 0x0, x84, UINT64_C(0xffffffffffffffff)); + uint64_t x85; + fiat_p256_uint1 x86; + uint64_t x87; + fiat_p256_uint1 x88; + uint64_t x89; + fiat_p256_uint1 x90; + uint64_t x91; + fiat_p256_uint1 x92; + uint64_t x93; + fiat_p256_uint1 x94; + uint64_t x95; + fiat_p256_uint1 x96; + uint64_t x97; + fiat_p256_uint1 x98; + uint64_t x99; uint64_t x100; - fiat_p256_uint1 x101; - fiat_p256_subborrowx_u64(&x100, &x101, x99, x88, UINT32_C(0xffffffff)); + uint64_t x101; uint64_t x102; - fiat_p256_uint1 x103; - fiat_p256_subborrowx_u64(&x102, &x103, x101, x94, 0x0); + uint64_t x103; uint64_t x104; - fiat_p256_uint1 x105; - fiat_p256_subborrowx_u64(&x104, &x105, x103, x96, UINT64_C(0xffffffff00000001)); - uint64_t x106; - fiat_p256_uint1 x107; - fiat_p256_subborrowx_u64(&x106, &x107, x105, 0x0, 0x0); - uint64_t x108; - fiat_p256_cmovznz_u64(&x108, x107, x98, x84); + uint64_t x105; + fiat_p256_uint1 x106; + uint64_t x107; + fiat_p256_uint1 x108; uint64_t x109; - fiat_p256_cmovznz_u64(&x109, x107, x100, x88); - uint64_t x110; - fiat_p256_cmovznz_u64(&x110, x107, x102, x94); + fiat_p256_uint1 x110; uint64_t x111; - fiat_p256_cmovznz_u64(&x111, x107, x104, x96); - out1[0] = x108; - out1[1] = x109; - out1[2] = x110; - out1[3] = x111; + fiat_p256_uint1 x112; + uint64_t x113; + fiat_p256_uint1 x114; + uint64_t x115; + fiat_p256_uint1 x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + uint64_t x121; + uint64_t x122; + uint64_t x123; + uint64_t x124; + uint64_t x125; + fiat_p256_uint1 x126; + uint64_t x127; + fiat_p256_uint1 x128; + uint64_t x129; + fiat_p256_uint1 x130; + uint64_t x131; + fiat_p256_uint1 x132; + uint64_t x133; + fiat_p256_uint1 x134; + uint64_t x135; + fiat_p256_uint1 x136; + uint64_t x137; + fiat_p256_uint1 x138; + uint64_t x139; + uint64_t x140; + uint64_t x141; + uint64_t x142; + uint64_t x143; + uint64_t x144; + uint64_t x145; + fiat_p256_uint1 x146; + uint64_t x147; + fiat_p256_uint1 x148; + uint64_t x149; + fiat_p256_uint1 x150; + uint64_t x151; + fiat_p256_uint1 x152; + uint64_t x153; + fiat_p256_uint1 x154; + uint64_t x155; + fiat_p256_uint1 x156; + uint64_t x157; + fiat_p256_uint1 x158; + uint64_t x159; + fiat_p256_uint1 x160; + uint64_t x161; + fiat_p256_uint1 x162; + uint64_t x163; + fiat_p256_uint1 x164; + uint64_t x165; + fiat_p256_uint1 x166; + uint64_t x167; + uint64_t x168; + uint64_t x169; + uint64_t x170; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[0]); + fiat_p256_mulx_u64(&x5, &x6, x4, UINT64_C(0x4fffffffd)); + fiat_p256_mulx_u64(&x7, &x8, x4, UINT64_C(0xfffffffffffffffe)); + fiat_p256_mulx_u64(&x9, &x10, x4, UINT64_C(0xfffffffbffffffff)); + fiat_p256_mulx_u64(&x11, &x12, x4, 0x3); + fiat_p256_addcarryx_u64(&x13, &x14, 0x0, x12, x9); + fiat_p256_addcarryx_u64(&x15, &x16, x14, x10, x7); + fiat_p256_addcarryx_u64(&x17, &x18, x16, x8, x5); + fiat_p256_mulx_u64(&x19, &x20, x11, UINT64_C(0xffffffff00000001)); + fiat_p256_mulx_u64(&x21, &x22, x11, UINT32_C(0xffffffff)); + fiat_p256_mulx_u64(&x23, &x24, x11, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x25, &x26, 0x0, x24, x21); + fiat_p256_addcarryx_u64(&x27, &x28, 0x0, x11, x23); + fiat_p256_addcarryx_u64(&x29, &x30, x28, x13, x25); + fiat_p256_addcarryx_u64(&x31, &x32, x30, x15, (x26 + x22)); + fiat_p256_addcarryx_u64(&x33, &x34, x32, x17, x19); + fiat_p256_addcarryx_u64(&x35, &x36, x34, (x18 + x6), x20); + fiat_p256_mulx_u64(&x37, &x38, x1, UINT64_C(0x4fffffffd)); + fiat_p256_mulx_u64(&x39, &x40, x1, UINT64_C(0xfffffffffffffffe)); + fiat_p256_mulx_u64(&x41, &x42, x1, UINT64_C(0xfffffffbffffffff)); + fiat_p256_mulx_u64(&x43, &x44, x1, 0x3); + fiat_p256_addcarryx_u64(&x45, &x46, 0x0, x44, x41); + fiat_p256_addcarryx_u64(&x47, &x48, x46, x42, x39); + fiat_p256_addcarryx_u64(&x49, &x50, x48, x40, x37); + fiat_p256_addcarryx_u64(&x51, &x52, 0x0, x29, x43); + fiat_p256_addcarryx_u64(&x53, &x54, x52, x31, x45); + fiat_p256_addcarryx_u64(&x55, &x56, x54, x33, x47); + fiat_p256_addcarryx_u64(&x57, &x58, x56, x35, x49); + fiat_p256_mulx_u64(&x59, &x60, x51, UINT64_C(0xffffffff00000001)); + fiat_p256_mulx_u64(&x61, &x62, x51, UINT32_C(0xffffffff)); + fiat_p256_mulx_u64(&x63, &x64, x51, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x65, &x66, 0x0, x64, x61); + fiat_p256_addcarryx_u64(&x67, &x68, 0x0, x51, x63); + fiat_p256_addcarryx_u64(&x69, &x70, x68, x53, x65); + fiat_p256_addcarryx_u64(&x71, &x72, x70, x55, (x66 + x62)); + fiat_p256_addcarryx_u64(&x73, &x74, x72, x57, x59); + fiat_p256_addcarryx_u64(&x75, &x76, x74, (((uint64_t)x58 + x36) + (x50 + x38)), x60); + fiat_p256_mulx_u64(&x77, &x78, x2, UINT64_C(0x4fffffffd)); + fiat_p256_mulx_u64(&x79, &x80, x2, UINT64_C(0xfffffffffffffffe)); + fiat_p256_mulx_u64(&x81, &x82, x2, UINT64_C(0xfffffffbffffffff)); + fiat_p256_mulx_u64(&x83, &x84, x2, 0x3); + fiat_p256_addcarryx_u64(&x85, &x86, 0x0, x84, x81); + fiat_p256_addcarryx_u64(&x87, &x88, x86, x82, x79); + fiat_p256_addcarryx_u64(&x89, &x90, x88, x80, x77); + fiat_p256_addcarryx_u64(&x91, &x92, 0x0, x69, x83); + fiat_p256_addcarryx_u64(&x93, &x94, x92, x71, x85); + fiat_p256_addcarryx_u64(&x95, &x96, x94, x73, x87); + fiat_p256_addcarryx_u64(&x97, &x98, x96, x75, x89); + fiat_p256_mulx_u64(&x99, &x100, x91, UINT64_C(0xffffffff00000001)); + fiat_p256_mulx_u64(&x101, &x102, x91, UINT32_C(0xffffffff)); + fiat_p256_mulx_u64(&x103, &x104, x91, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x105, &x106, 0x0, x104, x101); + fiat_p256_addcarryx_u64(&x107, &x108, 0x0, x91, x103); + fiat_p256_addcarryx_u64(&x109, &x110, x108, x93, x105); + fiat_p256_addcarryx_u64(&x111, &x112, x110, x95, (x106 + x102)); + fiat_p256_addcarryx_u64(&x113, &x114, x112, x97, x99); + fiat_p256_addcarryx_u64(&x115, &x116, x114, (((uint64_t)x98 + x76) + (x90 + x78)), x100); + fiat_p256_mulx_u64(&x117, &x118, x3, UINT64_C(0x4fffffffd)); + fiat_p256_mulx_u64(&x119, &x120, x3, UINT64_C(0xfffffffffffffffe)); + fiat_p256_mulx_u64(&x121, &x122, x3, UINT64_C(0xfffffffbffffffff)); + fiat_p256_mulx_u64(&x123, &x124, x3, 0x3); + fiat_p256_addcarryx_u64(&x125, &x126, 0x0, x124, x121); + fiat_p256_addcarryx_u64(&x127, &x128, x126, x122, x119); + fiat_p256_addcarryx_u64(&x129, &x130, x128, x120, x117); + fiat_p256_addcarryx_u64(&x131, &x132, 0x0, x109, x123); + fiat_p256_addcarryx_u64(&x133, &x134, x132, x111, x125); + fiat_p256_addcarryx_u64(&x135, &x136, x134, x113, x127); + fiat_p256_addcarryx_u64(&x137, &x138, x136, x115, x129); + fiat_p256_mulx_u64(&x139, &x140, x131, UINT64_C(0xffffffff00000001)); + fiat_p256_mulx_u64(&x141, &x142, x131, UINT32_C(0xffffffff)); + fiat_p256_mulx_u64(&x143, &x144, x131, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x145, &x146, 0x0, x144, x141); + fiat_p256_addcarryx_u64(&x147, &x148, 0x0, x131, x143); + fiat_p256_addcarryx_u64(&x149, &x150, x148, x133, x145); + fiat_p256_addcarryx_u64(&x151, &x152, x150, x135, (x146 + x142)); + fiat_p256_addcarryx_u64(&x153, &x154, x152, x137, x139); + fiat_p256_addcarryx_u64(&x155, &x156, x154, (((uint64_t)x138 + x116) + (x130 + x118)), x140); + fiat_p256_subborrowx_u64(&x157, &x158, 0x0, x149, UINT64_C(0xffffffffffffffff)); + fiat_p256_subborrowx_u64(&x159, &x160, x158, x151, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u64(&x161, &x162, x160, x153, 0x0); + fiat_p256_subborrowx_u64(&x163, &x164, x162, x155, UINT64_C(0xffffffff00000001)); + fiat_p256_subborrowx_u64(&x165, &x166, x164, x156, 0x0); + fiat_p256_cmovznz_u64(&x167, x166, x157, x149); + fiat_p256_cmovznz_u64(&x168, x166, x159, x151); + fiat_p256_cmovznz_u64(&x169, x166, x161, x153); + fiat_p256_cmovznz_u64(&x170, x166, x163, x155); + out1[0] = x167; + out1[1] = x168; + out1[2] = x169; + out1[3] = x170; } /* @@ -1096,7 +1360,8 @@ static void fiat_p256_from_montgomery(uint64_t out1[4], const uint64_t arg1[4]) * out1: [0x0 ~> 0xffffffffffffffff] */ static void fiat_p256_nonzero(uint64_t* out1, const uint64_t arg1[4]) { - uint64_t x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | (uint64_t)0x0)))); + uint64_t x1; + x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | (arg1[3])))); *out1 = x1; } @@ -1114,12 +1379,12 @@ static void fiat_p256_nonzero(uint64_t* out1, const uint64_t arg1[4]) { */ static void fiat_p256_selectznz(uint64_t out1[4], fiat_p256_uint1 arg1, const uint64_t arg2[4], const uint64_t arg3[4]) { uint64_t x1; - fiat_p256_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0])); uint64_t x2; - fiat_p256_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1])); uint64_t x3; - fiat_p256_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2])); uint64_t x4; + fiat_p256_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0])); + fiat_p256_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1])); + fiat_p256_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2])); fiat_p256_cmovznz_u64(&x4, arg1, (arg2[3]), (arg3[3])); out1[0] = x1; out1[1] = x2; @@ -1128,7 +1393,7 @@ static void fiat_p256_selectznz(uint64_t out1[4], fiat_p256_uint1 arg1, const ui } /* - * The function fiat_p256_to_bytes serializes a field element in the Montgomery domain to bytes in little-endian order. + * The function fiat_p256_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: @@ -1140,105 +1405,162 @@ static void fiat_p256_selectznz(uint64_t out1[4], fiat_p256_uint1 arg1, const ui * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_p256_to_bytes(uint8_t out1[32], const uint64_t arg1[4]) { - uint64_t x1 = (arg1[3]); - uint64_t x2 = (arg1[2]); - uint64_t x3 = (arg1[1]); - uint64_t x4 = (arg1[0]); - uint64_t x5 = (x4 >> 8); - uint8_t x6 = (uint8_t)(x4 & UINT8_C(0xff)); - uint64_t x7 = (x5 >> 8); - uint8_t x8 = (uint8_t)(x5 & UINT8_C(0xff)); - uint64_t x9 = (x7 >> 8); - uint8_t x10 = (uint8_t)(x7 & UINT8_C(0xff)); - uint64_t x11 = (x9 >> 8); - uint8_t x12 = (uint8_t)(x9 & UINT8_C(0xff)); - uint64_t x13 = (x11 >> 8); - uint8_t x14 = (uint8_t)(x11 & UINT8_C(0xff)); - uint64_t x15 = (x13 >> 8); - uint8_t x16 = (uint8_t)(x13 & UINT8_C(0xff)); - uint8_t x17 = (uint8_t)(x15 >> 8); - uint8_t x18 = (uint8_t)(x15 & UINT8_C(0xff)); - uint8_t x19 = (uint8_t)(x17 & UINT8_C(0xff)); - uint64_t x20 = (x3 >> 8); - uint8_t x21 = (uint8_t)(x3 & UINT8_C(0xff)); - uint64_t x22 = (x20 >> 8); - uint8_t x23 = (uint8_t)(x20 & UINT8_C(0xff)); - uint64_t x24 = (x22 >> 8); - uint8_t x25 = (uint8_t)(x22 & UINT8_C(0xff)); - uint64_t x26 = (x24 >> 8); - uint8_t x27 = (uint8_t)(x24 & UINT8_C(0xff)); - uint64_t x28 = (x26 >> 8); - uint8_t x29 = (uint8_t)(x26 & UINT8_C(0xff)); - uint64_t x30 = (x28 >> 8); - uint8_t x31 = (uint8_t)(x28 & UINT8_C(0xff)); - uint8_t x32 = (uint8_t)(x30 >> 8); - uint8_t x33 = (uint8_t)(x30 & UINT8_C(0xff)); - uint8_t x34 = (uint8_t)(x32 & UINT8_C(0xff)); - uint64_t x35 = (x2 >> 8); - uint8_t x36 = (uint8_t)(x2 & UINT8_C(0xff)); - uint64_t x37 = (x35 >> 8); - uint8_t x38 = (uint8_t)(x35 & UINT8_C(0xff)); - uint64_t x39 = (x37 >> 8); - uint8_t x40 = (uint8_t)(x37 & UINT8_C(0xff)); - uint64_t x41 = (x39 >> 8); - uint8_t x42 = (uint8_t)(x39 & UINT8_C(0xff)); - uint64_t x43 = (x41 >> 8); - uint8_t x44 = (uint8_t)(x41 & UINT8_C(0xff)); - uint64_t x45 = (x43 >> 8); - uint8_t x46 = (uint8_t)(x43 & UINT8_C(0xff)); - uint8_t x47 = (uint8_t)(x45 >> 8); - uint8_t x48 = (uint8_t)(x45 & UINT8_C(0xff)); - uint8_t x49 = (uint8_t)(x47 & UINT8_C(0xff)); - uint64_t x50 = (x1 >> 8); - uint8_t x51 = (uint8_t)(x1 & UINT8_C(0xff)); - uint64_t x52 = (x50 >> 8); - uint8_t x53 = (uint8_t)(x50 & UINT8_C(0xff)); - uint64_t x54 = (x52 >> 8); - uint8_t x55 = (uint8_t)(x52 & UINT8_C(0xff)); - uint64_t x56 = (x54 >> 8); - uint8_t x57 = (uint8_t)(x54 & UINT8_C(0xff)); - uint64_t x58 = (x56 >> 8); - uint8_t x59 = (uint8_t)(x56 & UINT8_C(0xff)); - uint64_t x60 = (x58 >> 8); - uint8_t x61 = (uint8_t)(x58 & UINT8_C(0xff)); - uint8_t x62 = (uint8_t)(x60 >> 8); - uint8_t x63 = (uint8_t)(x60 & UINT8_C(0xff)); - out1[0] = x6; - out1[1] = x8; - out1[2] = x10; - out1[3] = x12; - out1[4] = x14; - out1[5] = x16; - out1[6] = x18; - out1[7] = x19; - out1[8] = x21; - out1[9] = x23; - out1[10] = x25; - out1[11] = x27; - out1[12] = x29; - out1[13] = x31; - out1[14] = x33; - out1[15] = x34; - out1[16] = x36; - out1[17] = x38; - out1[18] = x40; - out1[19] = x42; - out1[20] = x44; - out1[21] = x46; - out1[22] = x48; - out1[23] = x49; - out1[24] = x51; - out1[25] = x53; - out1[26] = x55; - out1[27] = x57; - out1[28] = x59; - out1[29] = x61; - out1[30] = x63; - out1[31] = x62; + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint8_t x5; + uint64_t x6; + uint8_t x7; + uint64_t x8; + uint8_t x9; + uint64_t x10; + uint8_t x11; + uint64_t x12; + uint8_t x13; + uint64_t x14; + uint8_t x15; + uint64_t x16; + uint8_t x17; + uint8_t x18; + uint8_t x19; + uint64_t x20; + uint8_t x21; + uint64_t x22; + uint8_t x23; + uint64_t x24; + uint8_t x25; + uint64_t x26; + uint8_t x27; + uint64_t x28; + uint8_t x29; + uint64_t x30; + uint8_t x31; + uint8_t x32; + uint8_t x33; + uint64_t x34; + uint8_t x35; + uint64_t x36; + uint8_t x37; + uint64_t x38; + uint8_t x39; + uint64_t x40; + uint8_t x41; + uint64_t x42; + uint8_t x43; + uint64_t x44; + uint8_t x45; + uint8_t x46; + uint8_t x47; + uint64_t x48; + uint8_t x49; + uint64_t x50; + uint8_t x51; + uint64_t x52; + uint8_t x53; + uint64_t x54; + uint8_t x55; + uint64_t x56; + uint8_t x57; + uint64_t x58; + uint8_t x59; + uint8_t x60; + x1 = (arg1[3]); + x2 = (arg1[2]); + x3 = (arg1[1]); + x4 = (arg1[0]); + x5 = (uint8_t)(x4 & UINT8_C(0xff)); + x6 = (x4 >> 8); + x7 = (uint8_t)(x6 & UINT8_C(0xff)); + x8 = (x6 >> 8); + x9 = (uint8_t)(x8 & UINT8_C(0xff)); + x10 = (x8 >> 8); + x11 = (uint8_t)(x10 & UINT8_C(0xff)); + x12 = (x10 >> 8); + x13 = (uint8_t)(x12 & UINT8_C(0xff)); + x14 = (x12 >> 8); + x15 = (uint8_t)(x14 & UINT8_C(0xff)); + x16 = (x14 >> 8); + x17 = (uint8_t)(x16 & UINT8_C(0xff)); + x18 = (uint8_t)(x16 >> 8); + x19 = (uint8_t)(x3 & UINT8_C(0xff)); + x20 = (x3 >> 8); + x21 = (uint8_t)(x20 & UINT8_C(0xff)); + x22 = (x20 >> 8); + x23 = (uint8_t)(x22 & UINT8_C(0xff)); + x24 = (x22 >> 8); + x25 = (uint8_t)(x24 & UINT8_C(0xff)); + x26 = (x24 >> 8); + x27 = (uint8_t)(x26 & UINT8_C(0xff)); + x28 = (x26 >> 8); + x29 = (uint8_t)(x28 & UINT8_C(0xff)); + x30 = (x28 >> 8); + x31 = (uint8_t)(x30 & UINT8_C(0xff)); + x32 = (uint8_t)(x30 >> 8); + x33 = (uint8_t)(x2 & UINT8_C(0xff)); + x34 = (x2 >> 8); + x35 = (uint8_t)(x34 & UINT8_C(0xff)); + x36 = (x34 >> 8); + x37 = (uint8_t)(x36 & UINT8_C(0xff)); + x38 = (x36 >> 8); + x39 = (uint8_t)(x38 & UINT8_C(0xff)); + x40 = (x38 >> 8); + x41 = (uint8_t)(x40 & UINT8_C(0xff)); + x42 = (x40 >> 8); + x43 = (uint8_t)(x42 & UINT8_C(0xff)); + x44 = (x42 >> 8); + x45 = (uint8_t)(x44 & UINT8_C(0xff)); + x46 = (uint8_t)(x44 >> 8); + x47 = (uint8_t)(x1 & UINT8_C(0xff)); + x48 = (x1 >> 8); + x49 = (uint8_t)(x48 & UINT8_C(0xff)); + x50 = (x48 >> 8); + x51 = (uint8_t)(x50 & UINT8_C(0xff)); + x52 = (x50 >> 8); + x53 = (uint8_t)(x52 & UINT8_C(0xff)); + x54 = (x52 >> 8); + x55 = (uint8_t)(x54 & UINT8_C(0xff)); + x56 = (x54 >> 8); + x57 = (uint8_t)(x56 & UINT8_C(0xff)); + x58 = (x56 >> 8); + x59 = (uint8_t)(x58 & UINT8_C(0xff)); + x60 = (uint8_t)(x58 >> 8); + out1[0] = x5; + out1[1] = x7; + out1[2] = x9; + out1[3] = x11; + out1[4] = x13; + out1[5] = x15; + out1[6] = x17; + out1[7] = x18; + out1[8] = x19; + out1[9] = x21; + out1[10] = x23; + out1[11] = x25; + out1[12] = x27; + out1[13] = x29; + out1[14] = x31; + out1[15] = x32; + out1[16] = x33; + out1[17] = x35; + out1[18] = x37; + out1[19] = x39; + out1[20] = x41; + out1[21] = x43; + out1[22] = x45; + out1[23] = x46; + out1[24] = x47; + out1[25] = x49; + out1[26] = x51; + out1[27] = x53; + out1[28] = x55; + out1[29] = x57; + out1[30] = x59; + out1[31] = x60; } /* - * The function fiat_p256_from_bytes deserializes a field element in the Montgomery domain from bytes in little-endian order. + * The function fiat_p256_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. * Preconditions: * 0 ≤ bytes_eval arg1 < m * Postconditions: @@ -1251,48 +1573,445 @@ static void fiat_p256_to_bytes(uint8_t out1[32], const uint64_t arg1[4]) { * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_p256_from_bytes(uint64_t out1[4], const uint8_t arg1[32]) { - uint64_t x1 = ((uint64_t)(arg1[31]) << 56); - uint64_t x2 = ((uint64_t)(arg1[30]) << 48); - uint64_t x3 = ((uint64_t)(arg1[29]) << 40); - uint64_t x4 = ((uint64_t)(arg1[28]) << 32); - uint64_t x5 = ((uint64_t)(arg1[27]) << 24); - uint64_t x6 = ((uint64_t)(arg1[26]) << 16); - uint64_t x7 = ((uint64_t)(arg1[25]) << 8); - uint8_t x8 = (arg1[24]); - uint64_t x9 = ((uint64_t)(arg1[23]) << 56); - uint64_t x10 = ((uint64_t)(arg1[22]) << 48); - uint64_t x11 = ((uint64_t)(arg1[21]) << 40); - uint64_t x12 = ((uint64_t)(arg1[20]) << 32); - uint64_t x13 = ((uint64_t)(arg1[19]) << 24); - uint64_t x14 = ((uint64_t)(arg1[18]) << 16); - uint64_t x15 = ((uint64_t)(arg1[17]) << 8); - uint8_t x16 = (arg1[16]); - uint64_t x17 = ((uint64_t)(arg1[15]) << 56); - uint64_t x18 = ((uint64_t)(arg1[14]) << 48); - uint64_t x19 = ((uint64_t)(arg1[13]) << 40); - uint64_t x20 = ((uint64_t)(arg1[12]) << 32); - uint64_t x21 = ((uint64_t)(arg1[11]) << 24); - uint64_t x22 = ((uint64_t)(arg1[10]) << 16); - uint64_t x23 = ((uint64_t)(arg1[9]) << 8); - uint8_t x24 = (arg1[8]); - uint64_t x25 = ((uint64_t)(arg1[7]) << 56); - uint64_t x26 = ((uint64_t)(arg1[6]) << 48); - uint64_t x27 = ((uint64_t)(arg1[5]) << 40); - uint64_t x28 = ((uint64_t)(arg1[4]) << 32); - uint64_t x29 = ((uint64_t)(arg1[3]) << 24); - uint64_t x30 = ((uint64_t)(arg1[2]) << 16); - uint64_t x31 = ((uint64_t)(arg1[1]) << 8); - uint8_t x32 = (arg1[0]); - uint64_t x33 = (x32 + (x31 + (x30 + (x29 + (x28 + (x27 + (x26 + x25))))))); - uint64_t x34 = (x33 & UINT64_C(0xffffffffffffffff)); - uint64_t x35 = (x8 + (x7 + (x6 + (x5 + (x4 + (x3 + (x2 + x1))))))); - uint64_t x36 = (x16 + (x15 + (x14 + (x13 + (x12 + (x11 + (x10 + x9))))))); - uint64_t x37 = (x24 + (x23 + (x22 + (x21 + (x20 + (x19 + (x18 + x17))))))); - uint64_t x38 = (x37 & UINT64_C(0xffffffffffffffff)); - uint64_t x39 = (x36 & UINT64_C(0xffffffffffffffff)); - out1[0] = x34; - out1[1] = x38; - out1[2] = x39; - out1[3] = x35; + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint8_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint8_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint8_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint8_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint64_t x57; + uint64_t x58; + uint64_t x59; + uint64_t x60; + x1 = ((uint64_t)(arg1[31]) << 56); + x2 = ((uint64_t)(arg1[30]) << 48); + x3 = ((uint64_t)(arg1[29]) << 40); + x4 = ((uint64_t)(arg1[28]) << 32); + x5 = ((uint64_t)(arg1[27]) << 24); + x6 = ((uint64_t)(arg1[26]) << 16); + x7 = ((uint64_t)(arg1[25]) << 8); + x8 = (arg1[24]); + x9 = ((uint64_t)(arg1[23]) << 56); + x10 = ((uint64_t)(arg1[22]) << 48); + x11 = ((uint64_t)(arg1[21]) << 40); + x12 = ((uint64_t)(arg1[20]) << 32); + x13 = ((uint64_t)(arg1[19]) << 24); + x14 = ((uint64_t)(arg1[18]) << 16); + x15 = ((uint64_t)(arg1[17]) << 8); + x16 = (arg1[16]); + x17 = ((uint64_t)(arg1[15]) << 56); + x18 = ((uint64_t)(arg1[14]) << 48); + x19 = ((uint64_t)(arg1[13]) << 40); + x20 = ((uint64_t)(arg1[12]) << 32); + x21 = ((uint64_t)(arg1[11]) << 24); + x22 = ((uint64_t)(arg1[10]) << 16); + x23 = ((uint64_t)(arg1[9]) << 8); + x24 = (arg1[8]); + x25 = ((uint64_t)(arg1[7]) << 56); + x26 = ((uint64_t)(arg1[6]) << 48); + x27 = ((uint64_t)(arg1[5]) << 40); + x28 = ((uint64_t)(arg1[4]) << 32); + x29 = ((uint64_t)(arg1[3]) << 24); + x30 = ((uint64_t)(arg1[2]) << 16); + x31 = ((uint64_t)(arg1[1]) << 8); + x32 = (arg1[0]); + x33 = (x31 + (uint64_t)x32); + x34 = (x30 + x33); + x35 = (x29 + x34); + x36 = (x28 + x35); + x37 = (x27 + x36); + x38 = (x26 + x37); + x39 = (x25 + x38); + x40 = (x23 + (uint64_t)x24); + x41 = (x22 + x40); + x42 = (x21 + x41); + x43 = (x20 + x42); + x44 = (x19 + x43); + x45 = (x18 + x44); + x46 = (x17 + x45); + x47 = (x15 + (uint64_t)x16); + x48 = (x14 + x47); + x49 = (x13 + x48); + x50 = (x12 + x49); + x51 = (x11 + x50); + x52 = (x10 + x51); + x53 = (x9 + x52); + x54 = (x7 + (uint64_t)x8); + x55 = (x6 + x54); + x56 = (x5 + x55); + x57 = (x4 + x56); + x58 = (x3 + x57); + x59 = (x2 + x58); + x60 = (x1 + x59); + out1[0] = x39; + out1[1] = x46; + out1[2] = x53; + out1[3] = x60; +} + +/* + * The function fiat_p256_set_one returns the field element one in the Montgomery domain. + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_set_one(uint64_t out1[4]) { + out1[0] = 0x1; + out1[1] = UINT64_C(0xffffffff00000000); + out1[2] = UINT64_C(0xffffffffffffffff); + out1[3] = UINT32_C(0xfffffffe); +} + +/* + * The function fiat_p256_msat returns the saturated represtation of the prime modulus. + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_msat(uint64_t out1[5]) { + out1[0] = UINT64_C(0xffffffffffffffff); + out1[1] = UINT32_C(0xffffffff); + out1[2] = 0x0; + out1[3] = UINT64_C(0xffffffff00000001); + out1[4] = 0x0; +} + +/* + * The function fiat_p256_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if (log2 m) + 1 < 46 then ⌊(49 * ((log2 m) + 1) + 80) / 17⌋ else ⌊(49 * ((log2 m) + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_divstep_precomp(uint64_t out1[4]) { + out1[0] = UINT64_C(0x67ffffffb8000000); + out1[1] = UINT64_C(0xc000000038000000); + out1[2] = UINT64_C(0xd80000007fffffff); + out1[3] = UINT64_C(0x2fffffffffffffff); +} + +/* + * The function fiat_p256_divstep computes a divstep. + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p256_divstep(uint64_t* out1, uint64_t out2[5], uint64_t out3[5], uint64_t out4[4], uint64_t out5[4], uint64_t arg1, const uint64_t arg2[5], const uint64_t arg3[5], const uint64_t arg4[4], const uint64_t arg5[4]) { + uint64_t x1; + fiat_p256_uint1 x2; + fiat_p256_uint1 x3; + uint64_t x4; + fiat_p256_uint1 x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + fiat_p256_uint1 x13; + uint64_t x14; + fiat_p256_uint1 x15; + uint64_t x16; + fiat_p256_uint1 x17; + uint64_t x18; + fiat_p256_uint1 x19; + uint64_t x20; + fiat_p256_uint1 x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + fiat_p256_uint1 x32; + uint64_t x33; + fiat_p256_uint1 x34; + uint64_t x35; + fiat_p256_uint1 x36; + uint64_t x37; + fiat_p256_uint1 x38; + uint64_t x39; + fiat_p256_uint1 x40; + uint64_t x41; + fiat_p256_uint1 x42; + uint64_t x43; + fiat_p256_uint1 x44; + uint64_t x45; + fiat_p256_uint1 x46; + uint64_t x47; + fiat_p256_uint1 x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + fiat_p256_uint1 x54; + uint64_t x55; + fiat_p256_uint1 x56; + uint64_t x57; + fiat_p256_uint1 x58; + uint64_t x59; + fiat_p256_uint1 x60; + uint64_t x61; + uint64_t x62; + fiat_p256_uint1 x63; + uint64_t x64; + fiat_p256_uint1 x65; + uint64_t x66; + fiat_p256_uint1 x67; + uint64_t x68; + fiat_p256_uint1 x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + fiat_p256_uint1 x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + fiat_p256_uint1 x81; + uint64_t x82; + fiat_p256_uint1 x83; + uint64_t x84; + fiat_p256_uint1 x85; + uint64_t x86; + fiat_p256_uint1 x87; + uint64_t x88; + fiat_p256_uint1 x89; + uint64_t x90; + uint64_t x91; + uint64_t x92; + uint64_t x93; + uint64_t x94; + fiat_p256_uint1 x95; + uint64_t x96; + fiat_p256_uint1 x97; + uint64_t x98; + fiat_p256_uint1 x99; + uint64_t x100; + fiat_p256_uint1 x101; + uint64_t x102; + fiat_p256_uint1 x103; + uint64_t x104; + fiat_p256_uint1 x105; + uint64_t x106; + fiat_p256_uint1 x107; + uint64_t x108; + fiat_p256_uint1 x109; + uint64_t x110; + fiat_p256_uint1 x111; + uint64_t x112; + fiat_p256_uint1 x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + uint64_t x121; + uint64_t x122; + uint64_t x123; + uint64_t x124; + uint64_t x125; + uint64_t x126; + fiat_p256_addcarryx_u64(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_p256_uint1)((fiat_p256_uint1)(x1 >> 63) & (fiat_p256_uint1)((arg3[0]) & 0x1)); + fiat_p256_addcarryx_u64(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_p256_cmovznz_u64(&x6, x3, arg1, x4); + fiat_p256_cmovznz_u64(&x7, x3, (arg2[0]), (arg3[0])); + fiat_p256_cmovznz_u64(&x8, x3, (arg2[1]), (arg3[1])); + fiat_p256_cmovznz_u64(&x9, x3, (arg2[2]), (arg3[2])); + fiat_p256_cmovznz_u64(&x10, x3, (arg2[3]), (arg3[3])); + fiat_p256_cmovznz_u64(&x11, x3, (arg2[4]), (arg3[4])); + fiat_p256_addcarryx_u64(&x12, &x13, 0x0, 0x1, (~(arg2[0]))); + fiat_p256_addcarryx_u64(&x14, &x15, x13, 0x0, (~(arg2[1]))); + fiat_p256_addcarryx_u64(&x16, &x17, x15, 0x0, (~(arg2[2]))); + fiat_p256_addcarryx_u64(&x18, &x19, x17, 0x0, (~(arg2[3]))); + fiat_p256_addcarryx_u64(&x20, &x21, x19, 0x0, (~(arg2[4]))); + fiat_p256_cmovznz_u64(&x22, x3, (arg3[0]), x12); + fiat_p256_cmovznz_u64(&x23, x3, (arg3[1]), x14); + fiat_p256_cmovznz_u64(&x24, x3, (arg3[2]), x16); + fiat_p256_cmovznz_u64(&x25, x3, (arg3[3]), x18); + fiat_p256_cmovznz_u64(&x26, x3, (arg3[4]), x20); + fiat_p256_cmovznz_u64(&x27, x3, (arg4[0]), (arg5[0])); + fiat_p256_cmovznz_u64(&x28, x3, (arg4[1]), (arg5[1])); + fiat_p256_cmovznz_u64(&x29, x3, (arg4[2]), (arg5[2])); + fiat_p256_cmovznz_u64(&x30, x3, (arg4[3]), (arg5[3])); + fiat_p256_addcarryx_u64(&x31, &x32, 0x0, x27, x27); + fiat_p256_addcarryx_u64(&x33, &x34, x32, x28, x28); + fiat_p256_addcarryx_u64(&x35, &x36, x34, x29, x29); + fiat_p256_addcarryx_u64(&x37, &x38, x36, x30, x30); + fiat_p256_subborrowx_u64(&x39, &x40, 0x0, x31, UINT64_C(0xffffffffffffffff)); + fiat_p256_subborrowx_u64(&x41, &x42, x40, x33, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u64(&x43, &x44, x42, x35, 0x0); + fiat_p256_subborrowx_u64(&x45, &x46, x44, x37, UINT64_C(0xffffffff00000001)); + fiat_p256_subborrowx_u64(&x47, &x48, x46, x38, 0x0); + x49 = (arg4[3]); + x50 = (arg4[2]); + x51 = (arg4[1]); + x52 = (arg4[0]); + fiat_p256_subborrowx_u64(&x53, &x54, 0x0, 0x0, x52); + fiat_p256_subborrowx_u64(&x55, &x56, x54, 0x0, x51); + fiat_p256_subborrowx_u64(&x57, &x58, x56, 0x0, x50); + fiat_p256_subborrowx_u64(&x59, &x60, x58, 0x0, x49); + fiat_p256_cmovznz_u64(&x61, x60, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_p256_addcarryx_u64(&x62, &x63, 0x0, x53, x61); + fiat_p256_addcarryx_u64(&x64, &x65, x63, x55, (x61 & UINT32_C(0xffffffff))); + fiat_p256_addcarryx_u64(&x66, &x67, x65, x57, 0x0); + fiat_p256_addcarryx_u64(&x68, &x69, x67, x59, (x61 & UINT64_C(0xffffffff00000001))); + fiat_p256_cmovznz_u64(&x70, x3, (arg5[0]), x62); + fiat_p256_cmovznz_u64(&x71, x3, (arg5[1]), x64); + fiat_p256_cmovznz_u64(&x72, x3, (arg5[2]), x66); + fiat_p256_cmovznz_u64(&x73, x3, (arg5[3]), x68); + x74 = (fiat_p256_uint1)(x22 & 0x1); + fiat_p256_cmovznz_u64(&x75, x74, 0x0, x7); + fiat_p256_cmovznz_u64(&x76, x74, 0x0, x8); + fiat_p256_cmovznz_u64(&x77, x74, 0x0, x9); + fiat_p256_cmovznz_u64(&x78, x74, 0x0, x10); + fiat_p256_cmovznz_u64(&x79, x74, 0x0, x11); + fiat_p256_addcarryx_u64(&x80, &x81, 0x0, x22, x75); + fiat_p256_addcarryx_u64(&x82, &x83, x81, x23, x76); + fiat_p256_addcarryx_u64(&x84, &x85, x83, x24, x77); + fiat_p256_addcarryx_u64(&x86, &x87, x85, x25, x78); + fiat_p256_addcarryx_u64(&x88, &x89, x87, x26, x79); + fiat_p256_cmovznz_u64(&x90, x74, 0x0, x27); + fiat_p256_cmovznz_u64(&x91, x74, 0x0, x28); + fiat_p256_cmovznz_u64(&x92, x74, 0x0, x29); + fiat_p256_cmovznz_u64(&x93, x74, 0x0, x30); + fiat_p256_addcarryx_u64(&x94, &x95, 0x0, x70, x90); + fiat_p256_addcarryx_u64(&x96, &x97, x95, x71, x91); + fiat_p256_addcarryx_u64(&x98, &x99, x97, x72, x92); + fiat_p256_addcarryx_u64(&x100, &x101, x99, x73, x93); + fiat_p256_subborrowx_u64(&x102, &x103, 0x0, x94, UINT64_C(0xffffffffffffffff)); + fiat_p256_subborrowx_u64(&x104, &x105, x103, x96, UINT32_C(0xffffffff)); + fiat_p256_subborrowx_u64(&x106, &x107, x105, x98, 0x0); + fiat_p256_subborrowx_u64(&x108, &x109, x107, x100, UINT64_C(0xffffffff00000001)); + fiat_p256_subborrowx_u64(&x110, &x111, x109, x101, 0x0); + fiat_p256_addcarryx_u64(&x112, &x113, 0x0, x6, 0x1); + x114 = ((x80 >> 1) | ((x82 << 63) & UINT64_C(0xffffffffffffffff))); + x115 = ((x82 >> 1) | ((x84 << 63) & UINT64_C(0xffffffffffffffff))); + x116 = ((x84 >> 1) | ((x86 << 63) & UINT64_C(0xffffffffffffffff))); + x117 = ((x86 >> 1) | ((x88 << 63) & UINT64_C(0xffffffffffffffff))); + x118 = ((x88 & UINT64_C(0x8000000000000000)) | (x88 >> 1)); + fiat_p256_cmovznz_u64(&x119, x48, x39, x31); + fiat_p256_cmovznz_u64(&x120, x48, x41, x33); + fiat_p256_cmovznz_u64(&x121, x48, x43, x35); + fiat_p256_cmovznz_u64(&x122, x48, x45, x37); + fiat_p256_cmovznz_u64(&x123, x111, x102, x94); + fiat_p256_cmovznz_u64(&x124, x111, x104, x96); + fiat_p256_cmovznz_u64(&x125, x111, x106, x98); + fiat_p256_cmovznz_u64(&x126, x111, x108, x100); + *out1 = x112; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out3[0] = x114; + out3[1] = x115; + out3[2] = x116; + out3[3] = x117; + out3[4] = x118; + out4[0] = x119; + out4[1] = x120; + out4[2] = x121; + out4[3] = x122; + out5[0] = x123; + out5[1] = x124; + out5[2] = x125; + out5[3] = x126; } diff --git a/ec/native/p256_stubs.c b/ec/native/p256_stubs.c index f8dbd25b..7dc2d927 100644 --- a/ec/native/p256_stubs.c +++ b/ec/native/p256_stubs.c @@ -2,361 +2,103 @@ #ifdef ARCH_64BIT #include "p256_64.h" -#define NLIMBS 4 -typedef uint64_t limb_t; +#define LIMBS 4 +#define WORD uint64_t +#define WORDSIZE 64 #else -#define NLIMBS 8 #include "p256_32.h" -typedef uint32_t limb_t; +#define LIMBS 8 +#define WORD uint32_t +#define WORDSIZE 32 #endif -typedef limb_t fe[NLIMBS]; +#define LEN_PRIME 256 +#define CURVE_DESCRIPTION fiat_p256 -#include -#include - -#define fe_add fiat_p256_add -#define fe_sub fiat_p256_sub -#define fe_opp fiat_p256_opp - -#define fe_mul fiat_p256_mul -#define fe_sqr fiat_p256_square - -#define fe_tobytes fiat_p256_to_bytes -#define fe_frombytes fiat_p256_from_bytes - -static limb_t fe_nz(const limb_t in1[NLIMBS]) { - limb_t ret; - fiat_p256_nonzero(&ret, in1); - return ret; -} - -static void fe_copy(limb_t out[NLIMBS], const limb_t in1[NLIMBS]) { - for (int i = 0; i < NLIMBS; i++) { - out[i] = in1[i]; - } -} - -static void fe_cmovznz(limb_t out[NLIMBS], limb_t t, const limb_t z[NLIMBS], - const limb_t nz[NLIMBS]) { - fiat_p256_selectznz(out, !!t, z, nz); -} - -static void fe_from_montgomery(fe x) { - fiat_p256_from_montgomery(x, x); -} - -// fe_inv calculates |out| = |in|^{-1} -// -// Based on Fermat's Little Theorem: -// a^p = a (mod p) -// a^{p-1} = 1 (mod p) -// a^{p-2} = a^{-1} (mod p) -static void fe_inv(fe out, const fe in) { - fe ftmp, ftmp2; - // each e_I will hold |in|^{2^I - 1} - fe e2, e4, e8, e16, e32, e64; - - fe_sqr(ftmp, in); // 2^1 - fe_mul(ftmp, in, ftmp); // 2^2 - 2^0 - fe_copy(e2, ftmp); - fe_sqr(ftmp, ftmp); // 2^3 - 2^1 - fe_sqr(ftmp, ftmp); // 2^4 - 2^2 - fe_mul(ftmp, ftmp, e2); // 2^4 - 2^0 - fe_copy(e4, ftmp); - fe_sqr(ftmp, ftmp); // 2^5 - 2^1 - fe_sqr(ftmp, ftmp); // 2^6 - 2^2 - fe_sqr(ftmp, ftmp); // 2^7 - 2^3 - fe_sqr(ftmp, ftmp); // 2^8 - 2^4 - fe_mul(ftmp, ftmp, e4); // 2^8 - 2^0 - fe_copy(e8, ftmp); - for (size_t i = 0; i < 8; i++) { - fe_sqr(ftmp, ftmp); - } // 2^16 - 2^8 - fe_mul(ftmp, ftmp, e8); // 2^16 - 2^0 - fe_copy(e16, ftmp); - for (size_t i = 0; i < 16; i++) { - fe_sqr(ftmp, ftmp); - } // 2^32 - 2^16 - fe_mul(ftmp, ftmp, e16); // 2^32 - 2^0 - fe_copy(e32, ftmp); - for (size_t i = 0; i < 32; i++) { - fe_sqr(ftmp, ftmp); - } // 2^64 - 2^32 - fe_copy(e64, ftmp); - fe_mul(ftmp, ftmp, in); // 2^64 - 2^32 + 2^0 - for (size_t i = 0; i < 192; i++) { - fe_sqr(ftmp, ftmp); - } // 2^256 - 2^224 + 2^192 - - fe_mul(ftmp2, e64, e32); // 2^64 - 2^0 - for (size_t i = 0; i < 16; i++) { - fe_sqr(ftmp2, ftmp2); - } // 2^80 - 2^16 - fe_mul(ftmp2, ftmp2, e16); // 2^80 - 2^0 - for (size_t i = 0; i < 8; i++) { - fe_sqr(ftmp2, ftmp2); - } // 2^88 - 2^8 - fe_mul(ftmp2, ftmp2, e8); // 2^88 - 2^0 - for (size_t i = 0; i < 4; i++) { - fe_sqr(ftmp2, ftmp2); - } // 2^92 - 2^4 - fe_mul(ftmp2, ftmp2, e4); // 2^92 - 2^0 - fe_sqr(ftmp2, ftmp2); // 2^93 - 2^1 - fe_sqr(ftmp2, ftmp2); // 2^94 - 2^2 - fe_mul(ftmp2, ftmp2, e2); // 2^94 - 2^0 - fe_sqr(ftmp2, ftmp2); // 2^95 - 2^1 - fe_sqr(ftmp2, ftmp2); // 2^96 - 2^2 - fe_mul(ftmp2, ftmp2, in); // 2^96 - 3 - - fe_mul(out, ftmp2, ftmp); // 2^256 - 2^224 + 2^192 + 2^96 - 3 -} - -// Group operations -// ---------------- -// -// Building on top of the field operations we have the operations on the -// elliptic curve group itself. Points on the curve are represented in Jacobian -// coordinates. -// -// Both operations were transcribed to Coq and proven to correspond to naive -// implementations using Affine coordinates, for all suitable fields. In the -// Coq proofs, issues of constant-time execution and memory layout (aliasing) -// conventions were not considered. Specification of affine coordinates: -// -// As a sanity check, a proof that these points form a commutative group: -// - -// point_double calculates 2*(x_in, y_in, z_in) -// -// The method is taken from: -// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b -// -// Coq transcription and correctness proof: -// -// -// -// Outputs can equal corresponding inputs, i.e., x_out == x_in is allowed. -// while x_out == y_in is not (maybe this works, but it's not tested). -static void point_double(fe x_out, fe y_out, fe z_out, - const fe x_in, const fe y_in, const fe z_in) { - fe delta, gamma, beta, ftmp, ftmp2, tmptmp, alpha, fourbeta; - // delta = z^2 - fe_sqr(delta, z_in); - // gamma = y^2 - fe_sqr(gamma, y_in); - // beta = x*gamma - fe_mul(beta, x_in, gamma); - - // alpha = 3*(x-delta)*(x+delta) - fe_sub(ftmp, x_in, delta); - fe_add(ftmp2, x_in, delta); - - fe_add(tmptmp, ftmp2, ftmp2); - fe_add(ftmp2, ftmp2, tmptmp); - fe_mul(alpha, ftmp, ftmp2); - - // x' = alpha^2 - 8*beta - fe_sqr(x_out, alpha); - fe_add(fourbeta, beta, beta); - fe_add(fourbeta, fourbeta, fourbeta); - fe_add(tmptmp, fourbeta, fourbeta); - fe_sub(x_out, x_out, tmptmp); - - // z' = (y + z)^2 - gamma - delta - fe_add(delta, gamma, delta); - fe_add(ftmp, y_in, z_in); - fe_sqr(z_out, ftmp); - fe_sub(z_out, z_out, delta); - - // y' = alpha*(4*beta - x') - 8*gamma^2 - fe_sub(y_out, fourbeta, x_out); - fe_add(gamma, gamma, gamma); - fe_sqr(gamma, gamma); - fe_mul(y_out, alpha, y_out); - fe_add(gamma, gamma, gamma); - fe_sub(y_out, y_out, gamma); -} - -// point_add calcuates (x1, y1, z1) + (x2, y2, z2) -// -// The method is taken from: -// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-2007-bl, -// adapted for mixed addition (z2 = 1, or z2 = 0 for the point at infinity). -// -// Coq transcription and correctness proof: -// -// -// -// This function includes a branch for checking whether the two input points -// are equal, (while not equal to the point at infinity). This case never -// happens during single point multiplication, so there is no timing leak for -// ECDH or ECDSA signing. -static void point_add(fe x3, fe y3, fe z3, const fe x1, - const fe y1, const fe z1, const int mixed, - const fe x2, const fe y2, const fe z2) { - fe x_out, y_out, z_out; - limb_t z1nz = fe_nz(z1); - limb_t z2nz = fe_nz(z2); - - // z1z1 = z1z1 = z1**2 - fe z1z1; fe_sqr(z1z1, z1); - - fe u1, s1, two_z1z2; - if (!mixed) { - // z2z2 = z2**2 - fe z2z2; fe_sqr(z2z2, z2); - - // u1 = x1*z2z2 - fe_mul(u1, x1, z2z2); +#include "inversion_template.h" +#include "point_operations.h" - // two_z1z2 = (z1 + z2)**2 - (z1z1 + z2z2) = 2z1z2 - fe_add(two_z1z2, z1, z2); - fe_sqr(two_z1z2, two_z1z2); - fe_sub(two_z1z2, two_z1z2, z1z1); - fe_sub(two_z1z2, two_z1z2, z2z2); - - // s1 = y1 * z2**3 - fe_mul(s1, z2, z2z2); - fe_mul(s1, s1, y1); - } else { - // We'll assume z2 = 1 (special case z2 = 0 is handled later). - - // u1 = x1*z2z2 - fe_copy(u1, x1); - // two_z1z2 = 2z1z2 - fe_add(two_z1z2, z1, z1); - // s1 = y1 * z2**3 - fe_copy(s1, y1); - } - - // u2 = x2*z1z1 - fe u2; fe_mul(u2, x2, z1z1); - - // h = u2 - u1 - fe h; fe_sub(h, u2, u1); - - limb_t xneq = fe_nz(h); - - // z_out = two_z1z2 * h - fe_mul(z_out, h, two_z1z2); - - // z1z1z1 = z1 * z1z1 - fe z1z1z1; fe_mul(z1z1z1, z1, z1z1); - - // s2 = y2 * z1**3 - fe s2; fe_mul(s2, y2, z1z1z1); - - // r = (s2 - s1)*2 - fe r; - fe_sub(r, s2, s1); - fe_add(r, r, r); - - limb_t yneq = fe_nz(r); - - if (!xneq && !yneq && z1nz && z2nz) { - point_double(x3, y3, z3, x1, y1, z1); - return; - } - - // I = (2h)**2 - fe i; - fe_add(i, h, h); - fe_sqr(i, i); - - // J = h * I - fe j; fe_mul(j, h, i); - - // V = U1 * I - fe v; fe_mul(v, u1, i); - - // x_out = r**2 - J - 2V - fe_sqr(x_out, r); - fe_sub(x_out, x_out, j); - fe_sub(x_out, x_out, v); - fe_sub(x_out, x_out, v); - - // y_out = r(V-x_out) - 2 * s1 * J - fe_sub(y_out, v, x_out); - fe_mul(y_out, y_out, r); - fe s1j; - fe_mul(s1j, s1, j); - fe_sub(y_out, y_out, s1j); - fe_sub(y_out, y_out, s1j); - - fe_cmovznz(x_out, z1nz, x2, x_out); - fe_cmovznz(x3, z2nz, x1, x_out); - fe_cmovznz(y_out, z1nz, y2, y_out); - fe_cmovznz(y3, z2nz, y1, y_out); - fe_cmovznz(z_out, z1nz, z2, z_out); - fe_cmovznz(z3, z2nz, z1, z_out); -} +#include -CAMLprim value fiat_p256_caml_sub(value out, value a, value b) +CAMLprim value mc_p256_sub(value out, value a, value b) { CAMLparam3(out, a, b); fiat_p256_sub(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); CAMLreturn(Val_unit); } -CAMLprim value fiat_p256_caml_add(value out, value a, value b) +CAMLprim value mc_p256_add(value out, value a, value b) { CAMLparam3(out, a, b); fiat_p256_add(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); CAMLreturn(Val_unit); } -CAMLprim value fiat_p256_caml_mul(value out, value a, value b) +CAMLprim value mc_p256_mul(value out, value a, value b) { CAMLparam3(out, a, b); fiat_p256_mul(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); CAMLreturn(Val_unit); } -CAMLprim value fiat_p256_caml_from_bytes(value out, value in) +CAMLprim value mc_p256_from_bytes(value out, value in) { CAMLparam2(out, in); fiat_p256_from_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); CAMLreturn(Val_unit); } -CAMLprim value fiat_p256_caml_to_bytes(value out, value in) +CAMLprim value mc_p256_to_bytes(value out, value in) { CAMLparam2(out, in); fiat_p256_to_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); CAMLreturn(Val_unit); } -CAMLprim value fiat_p256_caml_sqr(value out, value in) +CAMLprim value mc_p256_sqr(value out, value in) { CAMLparam2(out, in); fiat_p256_square(Caml_ba_data_val(out), Caml_ba_data_val(in)); CAMLreturn(Val_unit); } -CAMLprim value fiat_p256_caml_from_montgomery(value x) +CAMLprim value mc_p256_from_montgomery(value x) { CAMLparam1(x); - limb_t *l = Caml_ba_data_val(x); + WORD *l = Caml_ba_data_val(x); fiat_p256_from_montgomery(l, l); CAMLreturn(Val_unit); } +CAMLprim value mc_p256_to_montgomery(value x) +{ + CAMLparam1(x); + WORD *l = Caml_ba_data_val(x); + fiat_p256_to_montgomery(l, l); + CAMLreturn(Val_unit); +} -CAMLprim value fiat_p256_caml_nz(value x) +CAMLprim value mc_p256_nz(value x) { CAMLparam1(x); CAMLreturn(Val_bool(fe_nz(Caml_ba_data_val(x)))); } -CAMLprim value fiat_p256_caml_inv(value out, value in) +CAMLprim value mc_p256_set_one(value x) +{ + CAMLparam1(x); + fiat_p256_set_one(Caml_ba_data_val(x)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p256_inv(value out, value in) { CAMLparam2(out, in); - fe_inv(Caml_ba_data_val(out), Caml_ba_data_val(in)); + inversion(Caml_ba_data_val(out), Caml_ba_data_val(in)); CAMLreturn(Val_unit); } -CAMLprim value fiat_p256_caml_point_double(value out, value in) +CAMLprim value mc_p256_point_double(value out, value in) { CAMLparam2(out, in); point_double( @@ -370,7 +112,7 @@ CAMLprim value fiat_p256_caml_point_double(value out, value in) CAMLreturn(Val_unit); } -CAMLprim value fiat_p256_caml_point_add(value out, value p, value q) +CAMLprim value mc_p256_point_add(value out, value p, value q) { CAMLparam3(out, p, q); point_add( @@ -388,7 +130,7 @@ CAMLprim value fiat_p256_caml_point_add(value out, value p, value q) CAMLreturn(Val_unit); } -CAMLprim value fiat_p256_caml_select(value out, value bit, value t, value f) +CAMLprim value mc_p256_select(value out, value bit, value t, value f) { CAMLparam4(out, bit, t, f); fe_cmovznz( diff --git a/ec/native/p384_32.h b/ec/native/p384_32.h new file mode 100644 index 00000000..f186c34c --- /dev/null +++ b/ec/native/p384_32.h @@ -0,0 +1,10144 @@ +/* Autogenerated: '../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery' --static --use-value-barrier p384 32 '2^384 - 2^128 - 2^96 + 2^32 - 1' */ +/* curve description: p384 */ +/* machine_wordsize = 32 (from "32") */ +/* requested operations: (all) */ +/* m = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff (from "2^384 - 2^128 - 2^96 + 2^32 - 1") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 32) + (z[2] << 64) + (z[3] << 96) + (z[4] << 128) + (z[5] << 160) + (z[6] << 192) + (z[7] << 224) + (z[8] << 256) + (z[9] << 0x120) + (z[10] << 0x140) + (z[11] << 0x160) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) + (z[32] << 256) + (z[33] << 0x108) + (z[34] << 0x110) + (z[35] << 0x118) + (z[36] << 0x120) + (z[37] << 0x128) + (z[38] << 0x130) + (z[39] << 0x138) + (z[40] << 0x140) + (z[41] << 0x148) + (z[42] << 0x150) + (z[43] << 0x158) + (z[44] << 0x160) + (z[45] << 0x168) + (z[46] << 0x170) + (z[47] << 0x178) */ + +#include +typedef unsigned char fiat_p384_uint1; +typedef signed char fiat_p384_int1; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_P384_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint32_t fiat_p384_value_barrier_u32(uint32_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_p384_value_barrier_u32(x) (x) +#endif + + +/* + * The function fiat_p384_addcarryx_u32 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^32 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p384_addcarryx_u32(uint32_t* out1, fiat_p384_uint1* out2, fiat_p384_uint1 arg1, uint32_t arg2, uint32_t arg3) { + uint64_t x1; + uint32_t x2; + fiat_p384_uint1 x3; + x1 = ((arg1 + (uint64_t)arg2) + arg3); + x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + x3 = (fiat_p384_uint1)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p384_subborrowx_u32 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^32 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p384_subborrowx_u32(uint32_t* out1, fiat_p384_uint1* out2, fiat_p384_uint1 arg1, uint32_t arg2, uint32_t arg3) { + int64_t x1; + fiat_p384_int1 x2; + uint32_t x3; + x1 = ((arg2 - (int64_t)arg1) - arg3); + x2 = (fiat_p384_int1)(x1 >> 32); + x3 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + *out1 = x3; + *out2 = (fiat_p384_uint1)(0x0 - x2); +} + +/* + * The function fiat_p384_mulx_u32 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^32 + * out2 = ⌊arg1 * arg2 / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0xffffffff] + */ +static void fiat_p384_mulx_u32(uint32_t* out1, uint32_t* out2, uint32_t arg1, uint32_t arg2) { + uint64_t x1; + uint32_t x2; + uint32_t x3; + x1 = ((uint64_t)arg1 * arg2); + x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + x3 = (uint32_t)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p384_cmovznz_u32 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static void fiat_p384_cmovznz_u32(uint32_t* out1, fiat_p384_uint1 arg1, uint32_t arg2, uint32_t arg3) { + fiat_p384_uint1 x1; + uint32_t x2; + uint32_t x3; + x1 = (!(!arg1)); + x2 = ((fiat_p384_int1)(0x0 - x1) & UINT32_C(0xffffffff)); + x3 = ((fiat_p384_value_barrier_u32(x2) & arg3) | (fiat_p384_value_barrier_u32((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_p384_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p384_mul(uint32_t out1[12], const uint32_t arg1[12], const uint32_t arg2[12]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint32_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + fiat_p384_uint1 x38; + uint32_t x39; + fiat_p384_uint1 x40; + uint32_t x41; + fiat_p384_uint1 x42; + uint32_t x43; + fiat_p384_uint1 x44; + uint32_t x45; + fiat_p384_uint1 x46; + uint32_t x47; + fiat_p384_uint1 x48; + uint32_t x49; + fiat_p384_uint1 x50; + uint32_t x51; + fiat_p384_uint1 x52; + uint32_t x53; + fiat_p384_uint1 x54; + uint32_t x55; + fiat_p384_uint1 x56; + uint32_t x57; + fiat_p384_uint1 x58; + uint32_t x59; + uint32_t x60; + uint32_t x61; + uint32_t x62; + uint32_t x63; + uint32_t x64; + uint32_t x65; + uint32_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + fiat_p384_uint1 x81; + uint32_t x82; + fiat_p384_uint1 x83; + uint32_t x84; + fiat_p384_uint1 x85; + uint32_t x86; + fiat_p384_uint1 x87; + uint32_t x88; + fiat_p384_uint1 x89; + uint32_t x90; + fiat_p384_uint1 x91; + uint32_t x92; + fiat_p384_uint1 x93; + uint32_t x94; + fiat_p384_uint1 x95; + uint32_t x96; + uint32_t x97; + fiat_p384_uint1 x98; + uint32_t x99; + fiat_p384_uint1 x100; + uint32_t x101; + fiat_p384_uint1 x102; + uint32_t x103; + fiat_p384_uint1 x104; + uint32_t x105; + fiat_p384_uint1 x106; + uint32_t x107; + fiat_p384_uint1 x108; + uint32_t x109; + fiat_p384_uint1 x110; + uint32_t x111; + fiat_p384_uint1 x112; + uint32_t x113; + fiat_p384_uint1 x114; + uint32_t x115; + fiat_p384_uint1 x116; + uint32_t x117; + fiat_p384_uint1 x118; + uint32_t x119; + fiat_p384_uint1 x120; + uint32_t x121; + fiat_p384_uint1 x122; + uint32_t x123; + uint32_t x124; + uint32_t x125; + uint32_t x126; + uint32_t x127; + uint32_t x128; + uint32_t x129; + uint32_t x130; + uint32_t x131; + uint32_t x132; + uint32_t x133; + uint32_t x134; + uint32_t x135; + uint32_t x136; + uint32_t x137; + uint32_t x138; + uint32_t x139; + uint32_t x140; + uint32_t x141; + uint32_t x142; + uint32_t x143; + uint32_t x144; + uint32_t x145; + uint32_t x146; + uint32_t x147; + fiat_p384_uint1 x148; + uint32_t x149; + fiat_p384_uint1 x150; + uint32_t x151; + fiat_p384_uint1 x152; + uint32_t x153; + fiat_p384_uint1 x154; + uint32_t x155; + fiat_p384_uint1 x156; + uint32_t x157; + fiat_p384_uint1 x158; + uint32_t x159; + fiat_p384_uint1 x160; + uint32_t x161; + fiat_p384_uint1 x162; + uint32_t x163; + fiat_p384_uint1 x164; + uint32_t x165; + fiat_p384_uint1 x166; + uint32_t x167; + fiat_p384_uint1 x168; + uint32_t x169; + uint32_t x170; + fiat_p384_uint1 x171; + uint32_t x172; + fiat_p384_uint1 x173; + uint32_t x174; + fiat_p384_uint1 x175; + uint32_t x176; + fiat_p384_uint1 x177; + uint32_t x178; + fiat_p384_uint1 x179; + uint32_t x180; + fiat_p384_uint1 x181; + uint32_t x182; + fiat_p384_uint1 x183; + uint32_t x184; + fiat_p384_uint1 x185; + uint32_t x186; + fiat_p384_uint1 x187; + uint32_t x188; + fiat_p384_uint1 x189; + uint32_t x190; + fiat_p384_uint1 x191; + uint32_t x192; + fiat_p384_uint1 x193; + uint32_t x194; + fiat_p384_uint1 x195; + uint32_t x196; + uint32_t x197; + uint32_t x198; + uint32_t x199; + uint32_t x200; + uint32_t x201; + uint32_t x202; + uint32_t x203; + uint32_t x204; + uint32_t x205; + uint32_t x206; + uint32_t x207; + uint32_t x208; + uint32_t x209; + uint32_t x210; + uint32_t x211; + uint32_t x212; + uint32_t x213; + uint32_t x214; + uint32_t x215; + uint32_t x216; + fiat_p384_uint1 x217; + uint32_t x218; + fiat_p384_uint1 x219; + uint32_t x220; + fiat_p384_uint1 x221; + uint32_t x222; + fiat_p384_uint1 x223; + uint32_t x224; + fiat_p384_uint1 x225; + uint32_t x226; + fiat_p384_uint1 x227; + uint32_t x228; + fiat_p384_uint1 x229; + uint32_t x230; + fiat_p384_uint1 x231; + uint32_t x232; + uint32_t x233; + fiat_p384_uint1 x234; + uint32_t x235; + fiat_p384_uint1 x236; + uint32_t x237; + fiat_p384_uint1 x238; + uint32_t x239; + fiat_p384_uint1 x240; + uint32_t x241; + fiat_p384_uint1 x242; + uint32_t x243; + fiat_p384_uint1 x244; + uint32_t x245; + fiat_p384_uint1 x246; + uint32_t x247; + fiat_p384_uint1 x248; + uint32_t x249; + fiat_p384_uint1 x250; + uint32_t x251; + fiat_p384_uint1 x252; + uint32_t x253; + fiat_p384_uint1 x254; + uint32_t x255; + fiat_p384_uint1 x256; + uint32_t x257; + fiat_p384_uint1 x258; + uint32_t x259; + uint32_t x260; + uint32_t x261; + uint32_t x262; + uint32_t x263; + uint32_t x264; + uint32_t x265; + uint32_t x266; + uint32_t x267; + uint32_t x268; + uint32_t x269; + uint32_t x270; + uint32_t x271; + uint32_t x272; + uint32_t x273; + uint32_t x274; + uint32_t x275; + uint32_t x276; + uint32_t x277; + uint32_t x278; + uint32_t x279; + uint32_t x280; + uint32_t x281; + uint32_t x282; + uint32_t x283; + uint32_t x284; + fiat_p384_uint1 x285; + uint32_t x286; + fiat_p384_uint1 x287; + uint32_t x288; + fiat_p384_uint1 x289; + uint32_t x290; + fiat_p384_uint1 x291; + uint32_t x292; + fiat_p384_uint1 x293; + uint32_t x294; + fiat_p384_uint1 x295; + uint32_t x296; + fiat_p384_uint1 x297; + uint32_t x298; + fiat_p384_uint1 x299; + uint32_t x300; + fiat_p384_uint1 x301; + uint32_t x302; + fiat_p384_uint1 x303; + uint32_t x304; + fiat_p384_uint1 x305; + uint32_t x306; + uint32_t x307; + fiat_p384_uint1 x308; + uint32_t x309; + fiat_p384_uint1 x310; + uint32_t x311; + fiat_p384_uint1 x312; + uint32_t x313; + fiat_p384_uint1 x314; + uint32_t x315; + fiat_p384_uint1 x316; + uint32_t x317; + fiat_p384_uint1 x318; + uint32_t x319; + fiat_p384_uint1 x320; + uint32_t x321; + fiat_p384_uint1 x322; + uint32_t x323; + fiat_p384_uint1 x324; + uint32_t x325; + fiat_p384_uint1 x326; + uint32_t x327; + fiat_p384_uint1 x328; + uint32_t x329; + fiat_p384_uint1 x330; + uint32_t x331; + fiat_p384_uint1 x332; + uint32_t x333; + uint32_t x334; + uint32_t x335; + uint32_t x336; + uint32_t x337; + uint32_t x338; + uint32_t x339; + uint32_t x340; + uint32_t x341; + uint32_t x342; + uint32_t x343; + uint32_t x344; + uint32_t x345; + uint32_t x346; + uint32_t x347; + uint32_t x348; + uint32_t x349; + uint32_t x350; + uint32_t x351; + uint32_t x352; + uint32_t x353; + fiat_p384_uint1 x354; + uint32_t x355; + fiat_p384_uint1 x356; + uint32_t x357; + fiat_p384_uint1 x358; + uint32_t x359; + fiat_p384_uint1 x360; + uint32_t x361; + fiat_p384_uint1 x362; + uint32_t x363; + fiat_p384_uint1 x364; + uint32_t x365; + fiat_p384_uint1 x366; + uint32_t x367; + fiat_p384_uint1 x368; + uint32_t x369; + uint32_t x370; + fiat_p384_uint1 x371; + uint32_t x372; + fiat_p384_uint1 x373; + uint32_t x374; + fiat_p384_uint1 x375; + uint32_t x376; + fiat_p384_uint1 x377; + uint32_t x378; + fiat_p384_uint1 x379; + uint32_t x380; + fiat_p384_uint1 x381; + uint32_t x382; + fiat_p384_uint1 x383; + uint32_t x384; + fiat_p384_uint1 x385; + uint32_t x386; + fiat_p384_uint1 x387; + uint32_t x388; + fiat_p384_uint1 x389; + uint32_t x390; + fiat_p384_uint1 x391; + uint32_t x392; + fiat_p384_uint1 x393; + uint32_t x394; + fiat_p384_uint1 x395; + uint32_t x396; + uint32_t x397; + uint32_t x398; + uint32_t x399; + uint32_t x400; + uint32_t x401; + uint32_t x402; + uint32_t x403; + uint32_t x404; + uint32_t x405; + uint32_t x406; + uint32_t x407; + uint32_t x408; + uint32_t x409; + uint32_t x410; + uint32_t x411; + uint32_t x412; + uint32_t x413; + uint32_t x414; + uint32_t x415; + uint32_t x416; + uint32_t x417; + uint32_t x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + fiat_p384_uint1 x422; + uint32_t x423; + fiat_p384_uint1 x424; + uint32_t x425; + fiat_p384_uint1 x426; + uint32_t x427; + fiat_p384_uint1 x428; + uint32_t x429; + fiat_p384_uint1 x430; + uint32_t x431; + fiat_p384_uint1 x432; + uint32_t x433; + fiat_p384_uint1 x434; + uint32_t x435; + fiat_p384_uint1 x436; + uint32_t x437; + fiat_p384_uint1 x438; + uint32_t x439; + fiat_p384_uint1 x440; + uint32_t x441; + fiat_p384_uint1 x442; + uint32_t x443; + uint32_t x444; + fiat_p384_uint1 x445; + uint32_t x446; + fiat_p384_uint1 x447; + uint32_t x448; + fiat_p384_uint1 x449; + uint32_t x450; + fiat_p384_uint1 x451; + uint32_t x452; + fiat_p384_uint1 x453; + uint32_t x454; + fiat_p384_uint1 x455; + uint32_t x456; + fiat_p384_uint1 x457; + uint32_t x458; + fiat_p384_uint1 x459; + uint32_t x460; + fiat_p384_uint1 x461; + uint32_t x462; + fiat_p384_uint1 x463; + uint32_t x464; + fiat_p384_uint1 x465; + uint32_t x466; + fiat_p384_uint1 x467; + uint32_t x468; + fiat_p384_uint1 x469; + uint32_t x470; + uint32_t x471; + uint32_t x472; + uint32_t x473; + uint32_t x474; + uint32_t x475; + uint32_t x476; + uint32_t x477; + uint32_t x478; + uint32_t x479; + uint32_t x480; + uint32_t x481; + uint32_t x482; + uint32_t x483; + uint32_t x484; + uint32_t x485; + uint32_t x486; + uint32_t x487; + uint32_t x488; + uint32_t x489; + uint32_t x490; + fiat_p384_uint1 x491; + uint32_t x492; + fiat_p384_uint1 x493; + uint32_t x494; + fiat_p384_uint1 x495; + uint32_t x496; + fiat_p384_uint1 x497; + uint32_t x498; + fiat_p384_uint1 x499; + uint32_t x500; + fiat_p384_uint1 x501; + uint32_t x502; + fiat_p384_uint1 x503; + uint32_t x504; + fiat_p384_uint1 x505; + uint32_t x506; + uint32_t x507; + fiat_p384_uint1 x508; + uint32_t x509; + fiat_p384_uint1 x510; + uint32_t x511; + fiat_p384_uint1 x512; + uint32_t x513; + fiat_p384_uint1 x514; + uint32_t x515; + fiat_p384_uint1 x516; + uint32_t x517; + fiat_p384_uint1 x518; + uint32_t x519; + fiat_p384_uint1 x520; + uint32_t x521; + fiat_p384_uint1 x522; + uint32_t x523; + fiat_p384_uint1 x524; + uint32_t x525; + fiat_p384_uint1 x526; + uint32_t x527; + fiat_p384_uint1 x528; + uint32_t x529; + fiat_p384_uint1 x530; + uint32_t x531; + fiat_p384_uint1 x532; + uint32_t x533; + uint32_t x534; + uint32_t x535; + uint32_t x536; + uint32_t x537; + uint32_t x538; + uint32_t x539; + uint32_t x540; + uint32_t x541; + uint32_t x542; + uint32_t x543; + uint32_t x544; + uint32_t x545; + uint32_t x546; + uint32_t x547; + uint32_t x548; + uint32_t x549; + uint32_t x550; + uint32_t x551; + uint32_t x552; + uint32_t x553; + uint32_t x554; + uint32_t x555; + uint32_t x556; + uint32_t x557; + uint32_t x558; + fiat_p384_uint1 x559; + uint32_t x560; + fiat_p384_uint1 x561; + uint32_t x562; + fiat_p384_uint1 x563; + uint32_t x564; + fiat_p384_uint1 x565; + uint32_t x566; + fiat_p384_uint1 x567; + uint32_t x568; + fiat_p384_uint1 x569; + uint32_t x570; + fiat_p384_uint1 x571; + uint32_t x572; + fiat_p384_uint1 x573; + uint32_t x574; + fiat_p384_uint1 x575; + uint32_t x576; + fiat_p384_uint1 x577; + uint32_t x578; + fiat_p384_uint1 x579; + uint32_t x580; + uint32_t x581; + fiat_p384_uint1 x582; + uint32_t x583; + fiat_p384_uint1 x584; + uint32_t x585; + fiat_p384_uint1 x586; + uint32_t x587; + fiat_p384_uint1 x588; + uint32_t x589; + fiat_p384_uint1 x590; + uint32_t x591; + fiat_p384_uint1 x592; + uint32_t x593; + fiat_p384_uint1 x594; + uint32_t x595; + fiat_p384_uint1 x596; + uint32_t x597; + fiat_p384_uint1 x598; + uint32_t x599; + fiat_p384_uint1 x600; + uint32_t x601; + fiat_p384_uint1 x602; + uint32_t x603; + fiat_p384_uint1 x604; + uint32_t x605; + fiat_p384_uint1 x606; + uint32_t x607; + uint32_t x608; + uint32_t x609; + uint32_t x610; + uint32_t x611; + uint32_t x612; + uint32_t x613; + uint32_t x614; + uint32_t x615; + uint32_t x616; + uint32_t x617; + uint32_t x618; + uint32_t x619; + uint32_t x620; + uint32_t x621; + uint32_t x622; + uint32_t x623; + uint32_t x624; + uint32_t x625; + uint32_t x626; + uint32_t x627; + fiat_p384_uint1 x628; + uint32_t x629; + fiat_p384_uint1 x630; + uint32_t x631; + fiat_p384_uint1 x632; + uint32_t x633; + fiat_p384_uint1 x634; + uint32_t x635; + fiat_p384_uint1 x636; + uint32_t x637; + fiat_p384_uint1 x638; + uint32_t x639; + fiat_p384_uint1 x640; + uint32_t x641; + fiat_p384_uint1 x642; + uint32_t x643; + uint32_t x644; + fiat_p384_uint1 x645; + uint32_t x646; + fiat_p384_uint1 x647; + uint32_t x648; + fiat_p384_uint1 x649; + uint32_t x650; + fiat_p384_uint1 x651; + uint32_t x652; + fiat_p384_uint1 x653; + uint32_t x654; + fiat_p384_uint1 x655; + uint32_t x656; + fiat_p384_uint1 x657; + uint32_t x658; + fiat_p384_uint1 x659; + uint32_t x660; + fiat_p384_uint1 x661; + uint32_t x662; + fiat_p384_uint1 x663; + uint32_t x664; + fiat_p384_uint1 x665; + uint32_t x666; + fiat_p384_uint1 x667; + uint32_t x668; + fiat_p384_uint1 x669; + uint32_t x670; + uint32_t x671; + uint32_t x672; + uint32_t x673; + uint32_t x674; + uint32_t x675; + uint32_t x676; + uint32_t x677; + uint32_t x678; + uint32_t x679; + uint32_t x680; + uint32_t x681; + uint32_t x682; + uint32_t x683; + uint32_t x684; + uint32_t x685; + uint32_t x686; + uint32_t x687; + uint32_t x688; + uint32_t x689; + uint32_t x690; + uint32_t x691; + uint32_t x692; + uint32_t x693; + uint32_t x694; + uint32_t x695; + fiat_p384_uint1 x696; + uint32_t x697; + fiat_p384_uint1 x698; + uint32_t x699; + fiat_p384_uint1 x700; + uint32_t x701; + fiat_p384_uint1 x702; + uint32_t x703; + fiat_p384_uint1 x704; + uint32_t x705; + fiat_p384_uint1 x706; + uint32_t x707; + fiat_p384_uint1 x708; + uint32_t x709; + fiat_p384_uint1 x710; + uint32_t x711; + fiat_p384_uint1 x712; + uint32_t x713; + fiat_p384_uint1 x714; + uint32_t x715; + fiat_p384_uint1 x716; + uint32_t x717; + uint32_t x718; + fiat_p384_uint1 x719; + uint32_t x720; + fiat_p384_uint1 x721; + uint32_t x722; + fiat_p384_uint1 x723; + uint32_t x724; + fiat_p384_uint1 x725; + uint32_t x726; + fiat_p384_uint1 x727; + uint32_t x728; + fiat_p384_uint1 x729; + uint32_t x730; + fiat_p384_uint1 x731; + uint32_t x732; + fiat_p384_uint1 x733; + uint32_t x734; + fiat_p384_uint1 x735; + uint32_t x736; + fiat_p384_uint1 x737; + uint32_t x738; + fiat_p384_uint1 x739; + uint32_t x740; + fiat_p384_uint1 x741; + uint32_t x742; + fiat_p384_uint1 x743; + uint32_t x744; + uint32_t x745; + uint32_t x746; + uint32_t x747; + uint32_t x748; + uint32_t x749; + uint32_t x750; + uint32_t x751; + uint32_t x752; + uint32_t x753; + uint32_t x754; + uint32_t x755; + uint32_t x756; + uint32_t x757; + uint32_t x758; + uint32_t x759; + uint32_t x760; + uint32_t x761; + uint32_t x762; + uint32_t x763; + uint32_t x764; + fiat_p384_uint1 x765; + uint32_t x766; + fiat_p384_uint1 x767; + uint32_t x768; + fiat_p384_uint1 x769; + uint32_t x770; + fiat_p384_uint1 x771; + uint32_t x772; + fiat_p384_uint1 x773; + uint32_t x774; + fiat_p384_uint1 x775; + uint32_t x776; + fiat_p384_uint1 x777; + uint32_t x778; + fiat_p384_uint1 x779; + uint32_t x780; + uint32_t x781; + fiat_p384_uint1 x782; + uint32_t x783; + fiat_p384_uint1 x784; + uint32_t x785; + fiat_p384_uint1 x786; + uint32_t x787; + fiat_p384_uint1 x788; + uint32_t x789; + fiat_p384_uint1 x790; + uint32_t x791; + fiat_p384_uint1 x792; + uint32_t x793; + fiat_p384_uint1 x794; + uint32_t x795; + fiat_p384_uint1 x796; + uint32_t x797; + fiat_p384_uint1 x798; + uint32_t x799; + fiat_p384_uint1 x800; + uint32_t x801; + fiat_p384_uint1 x802; + uint32_t x803; + fiat_p384_uint1 x804; + uint32_t x805; + fiat_p384_uint1 x806; + uint32_t x807; + uint32_t x808; + uint32_t x809; + uint32_t x810; + uint32_t x811; + uint32_t x812; + uint32_t x813; + uint32_t x814; + uint32_t x815; + uint32_t x816; + uint32_t x817; + uint32_t x818; + uint32_t x819; + uint32_t x820; + uint32_t x821; + uint32_t x822; + uint32_t x823; + uint32_t x824; + uint32_t x825; + uint32_t x826; + uint32_t x827; + uint32_t x828; + uint32_t x829; + uint32_t x830; + uint32_t x831; + uint32_t x832; + fiat_p384_uint1 x833; + uint32_t x834; + fiat_p384_uint1 x835; + uint32_t x836; + fiat_p384_uint1 x837; + uint32_t x838; + fiat_p384_uint1 x839; + uint32_t x840; + fiat_p384_uint1 x841; + uint32_t x842; + fiat_p384_uint1 x843; + uint32_t x844; + fiat_p384_uint1 x845; + uint32_t x846; + fiat_p384_uint1 x847; + uint32_t x848; + fiat_p384_uint1 x849; + uint32_t x850; + fiat_p384_uint1 x851; + uint32_t x852; + fiat_p384_uint1 x853; + uint32_t x854; + uint32_t x855; + fiat_p384_uint1 x856; + uint32_t x857; + fiat_p384_uint1 x858; + uint32_t x859; + fiat_p384_uint1 x860; + uint32_t x861; + fiat_p384_uint1 x862; + uint32_t x863; + fiat_p384_uint1 x864; + uint32_t x865; + fiat_p384_uint1 x866; + uint32_t x867; + fiat_p384_uint1 x868; + uint32_t x869; + fiat_p384_uint1 x870; + uint32_t x871; + fiat_p384_uint1 x872; + uint32_t x873; + fiat_p384_uint1 x874; + uint32_t x875; + fiat_p384_uint1 x876; + uint32_t x877; + fiat_p384_uint1 x878; + uint32_t x879; + fiat_p384_uint1 x880; + uint32_t x881; + uint32_t x882; + uint32_t x883; + uint32_t x884; + uint32_t x885; + uint32_t x886; + uint32_t x887; + uint32_t x888; + uint32_t x889; + uint32_t x890; + uint32_t x891; + uint32_t x892; + uint32_t x893; + uint32_t x894; + uint32_t x895; + uint32_t x896; + uint32_t x897; + uint32_t x898; + uint32_t x899; + uint32_t x900; + uint32_t x901; + fiat_p384_uint1 x902; + uint32_t x903; + fiat_p384_uint1 x904; + uint32_t x905; + fiat_p384_uint1 x906; + uint32_t x907; + fiat_p384_uint1 x908; + uint32_t x909; + fiat_p384_uint1 x910; + uint32_t x911; + fiat_p384_uint1 x912; + uint32_t x913; + fiat_p384_uint1 x914; + uint32_t x915; + fiat_p384_uint1 x916; + uint32_t x917; + uint32_t x918; + fiat_p384_uint1 x919; + uint32_t x920; + fiat_p384_uint1 x921; + uint32_t x922; + fiat_p384_uint1 x923; + uint32_t x924; + fiat_p384_uint1 x925; + uint32_t x926; + fiat_p384_uint1 x927; + uint32_t x928; + fiat_p384_uint1 x929; + uint32_t x930; + fiat_p384_uint1 x931; + uint32_t x932; + fiat_p384_uint1 x933; + uint32_t x934; + fiat_p384_uint1 x935; + uint32_t x936; + fiat_p384_uint1 x937; + uint32_t x938; + fiat_p384_uint1 x939; + uint32_t x940; + fiat_p384_uint1 x941; + uint32_t x942; + fiat_p384_uint1 x943; + uint32_t x944; + uint32_t x945; + uint32_t x946; + uint32_t x947; + uint32_t x948; + uint32_t x949; + uint32_t x950; + uint32_t x951; + uint32_t x952; + uint32_t x953; + uint32_t x954; + uint32_t x955; + uint32_t x956; + uint32_t x957; + uint32_t x958; + uint32_t x959; + uint32_t x960; + uint32_t x961; + uint32_t x962; + uint32_t x963; + uint32_t x964; + uint32_t x965; + uint32_t x966; + uint32_t x967; + uint32_t x968; + uint32_t x969; + fiat_p384_uint1 x970; + uint32_t x971; + fiat_p384_uint1 x972; + uint32_t x973; + fiat_p384_uint1 x974; + uint32_t x975; + fiat_p384_uint1 x976; + uint32_t x977; + fiat_p384_uint1 x978; + uint32_t x979; + fiat_p384_uint1 x980; + uint32_t x981; + fiat_p384_uint1 x982; + uint32_t x983; + fiat_p384_uint1 x984; + uint32_t x985; + fiat_p384_uint1 x986; + uint32_t x987; + fiat_p384_uint1 x988; + uint32_t x989; + fiat_p384_uint1 x990; + uint32_t x991; + uint32_t x992; + fiat_p384_uint1 x993; + uint32_t x994; + fiat_p384_uint1 x995; + uint32_t x996; + fiat_p384_uint1 x997; + uint32_t x998; + fiat_p384_uint1 x999; + uint32_t x1000; + fiat_p384_uint1 x1001; + uint32_t x1002; + fiat_p384_uint1 x1003; + uint32_t x1004; + fiat_p384_uint1 x1005; + uint32_t x1006; + fiat_p384_uint1 x1007; + uint32_t x1008; + fiat_p384_uint1 x1009; + uint32_t x1010; + fiat_p384_uint1 x1011; + uint32_t x1012; + fiat_p384_uint1 x1013; + uint32_t x1014; + fiat_p384_uint1 x1015; + uint32_t x1016; + fiat_p384_uint1 x1017; + uint32_t x1018; + uint32_t x1019; + uint32_t x1020; + uint32_t x1021; + uint32_t x1022; + uint32_t x1023; + uint32_t x1024; + uint32_t x1025; + uint32_t x1026; + uint32_t x1027; + uint32_t x1028; + uint32_t x1029; + uint32_t x1030; + uint32_t x1031; + uint32_t x1032; + uint32_t x1033; + uint32_t x1034; + uint32_t x1035; + uint32_t x1036; + uint32_t x1037; + uint32_t x1038; + fiat_p384_uint1 x1039; + uint32_t x1040; + fiat_p384_uint1 x1041; + uint32_t x1042; + fiat_p384_uint1 x1043; + uint32_t x1044; + fiat_p384_uint1 x1045; + uint32_t x1046; + fiat_p384_uint1 x1047; + uint32_t x1048; + fiat_p384_uint1 x1049; + uint32_t x1050; + fiat_p384_uint1 x1051; + uint32_t x1052; + fiat_p384_uint1 x1053; + uint32_t x1054; + uint32_t x1055; + fiat_p384_uint1 x1056; + uint32_t x1057; + fiat_p384_uint1 x1058; + uint32_t x1059; + fiat_p384_uint1 x1060; + uint32_t x1061; + fiat_p384_uint1 x1062; + uint32_t x1063; + fiat_p384_uint1 x1064; + uint32_t x1065; + fiat_p384_uint1 x1066; + uint32_t x1067; + fiat_p384_uint1 x1068; + uint32_t x1069; + fiat_p384_uint1 x1070; + uint32_t x1071; + fiat_p384_uint1 x1072; + uint32_t x1073; + fiat_p384_uint1 x1074; + uint32_t x1075; + fiat_p384_uint1 x1076; + uint32_t x1077; + fiat_p384_uint1 x1078; + uint32_t x1079; + fiat_p384_uint1 x1080; + uint32_t x1081; + uint32_t x1082; + uint32_t x1083; + uint32_t x1084; + uint32_t x1085; + uint32_t x1086; + uint32_t x1087; + uint32_t x1088; + uint32_t x1089; + uint32_t x1090; + uint32_t x1091; + uint32_t x1092; + uint32_t x1093; + uint32_t x1094; + uint32_t x1095; + uint32_t x1096; + uint32_t x1097; + uint32_t x1098; + uint32_t x1099; + uint32_t x1100; + uint32_t x1101; + uint32_t x1102; + uint32_t x1103; + uint32_t x1104; + uint32_t x1105; + uint32_t x1106; + fiat_p384_uint1 x1107; + uint32_t x1108; + fiat_p384_uint1 x1109; + uint32_t x1110; + fiat_p384_uint1 x1111; + uint32_t x1112; + fiat_p384_uint1 x1113; + uint32_t x1114; + fiat_p384_uint1 x1115; + uint32_t x1116; + fiat_p384_uint1 x1117; + uint32_t x1118; + fiat_p384_uint1 x1119; + uint32_t x1120; + fiat_p384_uint1 x1121; + uint32_t x1122; + fiat_p384_uint1 x1123; + uint32_t x1124; + fiat_p384_uint1 x1125; + uint32_t x1126; + fiat_p384_uint1 x1127; + uint32_t x1128; + uint32_t x1129; + fiat_p384_uint1 x1130; + uint32_t x1131; + fiat_p384_uint1 x1132; + uint32_t x1133; + fiat_p384_uint1 x1134; + uint32_t x1135; + fiat_p384_uint1 x1136; + uint32_t x1137; + fiat_p384_uint1 x1138; + uint32_t x1139; + fiat_p384_uint1 x1140; + uint32_t x1141; + fiat_p384_uint1 x1142; + uint32_t x1143; + fiat_p384_uint1 x1144; + uint32_t x1145; + fiat_p384_uint1 x1146; + uint32_t x1147; + fiat_p384_uint1 x1148; + uint32_t x1149; + fiat_p384_uint1 x1150; + uint32_t x1151; + fiat_p384_uint1 x1152; + uint32_t x1153; + fiat_p384_uint1 x1154; + uint32_t x1155; + uint32_t x1156; + uint32_t x1157; + uint32_t x1158; + uint32_t x1159; + uint32_t x1160; + uint32_t x1161; + uint32_t x1162; + uint32_t x1163; + uint32_t x1164; + uint32_t x1165; + uint32_t x1166; + uint32_t x1167; + uint32_t x1168; + uint32_t x1169; + uint32_t x1170; + uint32_t x1171; + uint32_t x1172; + uint32_t x1173; + uint32_t x1174; + uint32_t x1175; + fiat_p384_uint1 x1176; + uint32_t x1177; + fiat_p384_uint1 x1178; + uint32_t x1179; + fiat_p384_uint1 x1180; + uint32_t x1181; + fiat_p384_uint1 x1182; + uint32_t x1183; + fiat_p384_uint1 x1184; + uint32_t x1185; + fiat_p384_uint1 x1186; + uint32_t x1187; + fiat_p384_uint1 x1188; + uint32_t x1189; + fiat_p384_uint1 x1190; + uint32_t x1191; + uint32_t x1192; + fiat_p384_uint1 x1193; + uint32_t x1194; + fiat_p384_uint1 x1195; + uint32_t x1196; + fiat_p384_uint1 x1197; + uint32_t x1198; + fiat_p384_uint1 x1199; + uint32_t x1200; + fiat_p384_uint1 x1201; + uint32_t x1202; + fiat_p384_uint1 x1203; + uint32_t x1204; + fiat_p384_uint1 x1205; + uint32_t x1206; + fiat_p384_uint1 x1207; + uint32_t x1208; + fiat_p384_uint1 x1209; + uint32_t x1210; + fiat_p384_uint1 x1211; + uint32_t x1212; + fiat_p384_uint1 x1213; + uint32_t x1214; + fiat_p384_uint1 x1215; + uint32_t x1216; + fiat_p384_uint1 x1217; + uint32_t x1218; + uint32_t x1219; + uint32_t x1220; + uint32_t x1221; + uint32_t x1222; + uint32_t x1223; + uint32_t x1224; + uint32_t x1225; + uint32_t x1226; + uint32_t x1227; + uint32_t x1228; + uint32_t x1229; + uint32_t x1230; + uint32_t x1231; + uint32_t x1232; + uint32_t x1233; + uint32_t x1234; + uint32_t x1235; + uint32_t x1236; + uint32_t x1237; + uint32_t x1238; + uint32_t x1239; + uint32_t x1240; + uint32_t x1241; + uint32_t x1242; + uint32_t x1243; + fiat_p384_uint1 x1244; + uint32_t x1245; + fiat_p384_uint1 x1246; + uint32_t x1247; + fiat_p384_uint1 x1248; + uint32_t x1249; + fiat_p384_uint1 x1250; + uint32_t x1251; + fiat_p384_uint1 x1252; + uint32_t x1253; + fiat_p384_uint1 x1254; + uint32_t x1255; + fiat_p384_uint1 x1256; + uint32_t x1257; + fiat_p384_uint1 x1258; + uint32_t x1259; + fiat_p384_uint1 x1260; + uint32_t x1261; + fiat_p384_uint1 x1262; + uint32_t x1263; + fiat_p384_uint1 x1264; + uint32_t x1265; + uint32_t x1266; + fiat_p384_uint1 x1267; + uint32_t x1268; + fiat_p384_uint1 x1269; + uint32_t x1270; + fiat_p384_uint1 x1271; + uint32_t x1272; + fiat_p384_uint1 x1273; + uint32_t x1274; + fiat_p384_uint1 x1275; + uint32_t x1276; + fiat_p384_uint1 x1277; + uint32_t x1278; + fiat_p384_uint1 x1279; + uint32_t x1280; + fiat_p384_uint1 x1281; + uint32_t x1282; + fiat_p384_uint1 x1283; + uint32_t x1284; + fiat_p384_uint1 x1285; + uint32_t x1286; + fiat_p384_uint1 x1287; + uint32_t x1288; + fiat_p384_uint1 x1289; + uint32_t x1290; + fiat_p384_uint1 x1291; + uint32_t x1292; + uint32_t x1293; + uint32_t x1294; + uint32_t x1295; + uint32_t x1296; + uint32_t x1297; + uint32_t x1298; + uint32_t x1299; + uint32_t x1300; + uint32_t x1301; + uint32_t x1302; + uint32_t x1303; + uint32_t x1304; + uint32_t x1305; + uint32_t x1306; + uint32_t x1307; + uint32_t x1308; + uint32_t x1309; + uint32_t x1310; + uint32_t x1311; + uint32_t x1312; + fiat_p384_uint1 x1313; + uint32_t x1314; + fiat_p384_uint1 x1315; + uint32_t x1316; + fiat_p384_uint1 x1317; + uint32_t x1318; + fiat_p384_uint1 x1319; + uint32_t x1320; + fiat_p384_uint1 x1321; + uint32_t x1322; + fiat_p384_uint1 x1323; + uint32_t x1324; + fiat_p384_uint1 x1325; + uint32_t x1326; + fiat_p384_uint1 x1327; + uint32_t x1328; + uint32_t x1329; + fiat_p384_uint1 x1330; + uint32_t x1331; + fiat_p384_uint1 x1332; + uint32_t x1333; + fiat_p384_uint1 x1334; + uint32_t x1335; + fiat_p384_uint1 x1336; + uint32_t x1337; + fiat_p384_uint1 x1338; + uint32_t x1339; + fiat_p384_uint1 x1340; + uint32_t x1341; + fiat_p384_uint1 x1342; + uint32_t x1343; + fiat_p384_uint1 x1344; + uint32_t x1345; + fiat_p384_uint1 x1346; + uint32_t x1347; + fiat_p384_uint1 x1348; + uint32_t x1349; + fiat_p384_uint1 x1350; + uint32_t x1351; + fiat_p384_uint1 x1352; + uint32_t x1353; + fiat_p384_uint1 x1354; + uint32_t x1355; + uint32_t x1356; + uint32_t x1357; + uint32_t x1358; + uint32_t x1359; + uint32_t x1360; + uint32_t x1361; + uint32_t x1362; + uint32_t x1363; + uint32_t x1364; + uint32_t x1365; + uint32_t x1366; + uint32_t x1367; + uint32_t x1368; + uint32_t x1369; + uint32_t x1370; + uint32_t x1371; + uint32_t x1372; + uint32_t x1373; + uint32_t x1374; + uint32_t x1375; + uint32_t x1376; + uint32_t x1377; + uint32_t x1378; + uint32_t x1379; + uint32_t x1380; + fiat_p384_uint1 x1381; + uint32_t x1382; + fiat_p384_uint1 x1383; + uint32_t x1384; + fiat_p384_uint1 x1385; + uint32_t x1386; + fiat_p384_uint1 x1387; + uint32_t x1388; + fiat_p384_uint1 x1389; + uint32_t x1390; + fiat_p384_uint1 x1391; + uint32_t x1392; + fiat_p384_uint1 x1393; + uint32_t x1394; + fiat_p384_uint1 x1395; + uint32_t x1396; + fiat_p384_uint1 x1397; + uint32_t x1398; + fiat_p384_uint1 x1399; + uint32_t x1400; + fiat_p384_uint1 x1401; + uint32_t x1402; + uint32_t x1403; + fiat_p384_uint1 x1404; + uint32_t x1405; + fiat_p384_uint1 x1406; + uint32_t x1407; + fiat_p384_uint1 x1408; + uint32_t x1409; + fiat_p384_uint1 x1410; + uint32_t x1411; + fiat_p384_uint1 x1412; + uint32_t x1413; + fiat_p384_uint1 x1414; + uint32_t x1415; + fiat_p384_uint1 x1416; + uint32_t x1417; + fiat_p384_uint1 x1418; + uint32_t x1419; + fiat_p384_uint1 x1420; + uint32_t x1421; + fiat_p384_uint1 x1422; + uint32_t x1423; + fiat_p384_uint1 x1424; + uint32_t x1425; + fiat_p384_uint1 x1426; + uint32_t x1427; + fiat_p384_uint1 x1428; + uint32_t x1429; + uint32_t x1430; + uint32_t x1431; + uint32_t x1432; + uint32_t x1433; + uint32_t x1434; + uint32_t x1435; + uint32_t x1436; + uint32_t x1437; + uint32_t x1438; + uint32_t x1439; + uint32_t x1440; + uint32_t x1441; + uint32_t x1442; + uint32_t x1443; + uint32_t x1444; + uint32_t x1445; + uint32_t x1446; + uint32_t x1447; + uint32_t x1448; + uint32_t x1449; + fiat_p384_uint1 x1450; + uint32_t x1451; + fiat_p384_uint1 x1452; + uint32_t x1453; + fiat_p384_uint1 x1454; + uint32_t x1455; + fiat_p384_uint1 x1456; + uint32_t x1457; + fiat_p384_uint1 x1458; + uint32_t x1459; + fiat_p384_uint1 x1460; + uint32_t x1461; + fiat_p384_uint1 x1462; + uint32_t x1463; + fiat_p384_uint1 x1464; + uint32_t x1465; + uint32_t x1466; + fiat_p384_uint1 x1467; + uint32_t x1468; + fiat_p384_uint1 x1469; + uint32_t x1470; + fiat_p384_uint1 x1471; + uint32_t x1472; + fiat_p384_uint1 x1473; + uint32_t x1474; + fiat_p384_uint1 x1475; + uint32_t x1476; + fiat_p384_uint1 x1477; + uint32_t x1478; + fiat_p384_uint1 x1479; + uint32_t x1480; + fiat_p384_uint1 x1481; + uint32_t x1482; + fiat_p384_uint1 x1483; + uint32_t x1484; + fiat_p384_uint1 x1485; + uint32_t x1486; + fiat_p384_uint1 x1487; + uint32_t x1488; + fiat_p384_uint1 x1489; + uint32_t x1490; + fiat_p384_uint1 x1491; + uint32_t x1492; + uint32_t x1493; + uint32_t x1494; + uint32_t x1495; + uint32_t x1496; + uint32_t x1497; + uint32_t x1498; + uint32_t x1499; + uint32_t x1500; + uint32_t x1501; + uint32_t x1502; + uint32_t x1503; + uint32_t x1504; + uint32_t x1505; + uint32_t x1506; + uint32_t x1507; + uint32_t x1508; + uint32_t x1509; + uint32_t x1510; + uint32_t x1511; + uint32_t x1512; + uint32_t x1513; + uint32_t x1514; + uint32_t x1515; + uint32_t x1516; + uint32_t x1517; + fiat_p384_uint1 x1518; + uint32_t x1519; + fiat_p384_uint1 x1520; + uint32_t x1521; + fiat_p384_uint1 x1522; + uint32_t x1523; + fiat_p384_uint1 x1524; + uint32_t x1525; + fiat_p384_uint1 x1526; + uint32_t x1527; + fiat_p384_uint1 x1528; + uint32_t x1529; + fiat_p384_uint1 x1530; + uint32_t x1531; + fiat_p384_uint1 x1532; + uint32_t x1533; + fiat_p384_uint1 x1534; + uint32_t x1535; + fiat_p384_uint1 x1536; + uint32_t x1537; + fiat_p384_uint1 x1538; + uint32_t x1539; + uint32_t x1540; + fiat_p384_uint1 x1541; + uint32_t x1542; + fiat_p384_uint1 x1543; + uint32_t x1544; + fiat_p384_uint1 x1545; + uint32_t x1546; + fiat_p384_uint1 x1547; + uint32_t x1548; + fiat_p384_uint1 x1549; + uint32_t x1550; + fiat_p384_uint1 x1551; + uint32_t x1552; + fiat_p384_uint1 x1553; + uint32_t x1554; + fiat_p384_uint1 x1555; + uint32_t x1556; + fiat_p384_uint1 x1557; + uint32_t x1558; + fiat_p384_uint1 x1559; + uint32_t x1560; + fiat_p384_uint1 x1561; + uint32_t x1562; + fiat_p384_uint1 x1563; + uint32_t x1564; + fiat_p384_uint1 x1565; + uint32_t x1566; + uint32_t x1567; + uint32_t x1568; + uint32_t x1569; + uint32_t x1570; + uint32_t x1571; + uint32_t x1572; + uint32_t x1573; + uint32_t x1574; + uint32_t x1575; + uint32_t x1576; + uint32_t x1577; + uint32_t x1578; + uint32_t x1579; + uint32_t x1580; + uint32_t x1581; + uint32_t x1582; + uint32_t x1583; + uint32_t x1584; + uint32_t x1585; + uint32_t x1586; + fiat_p384_uint1 x1587; + uint32_t x1588; + fiat_p384_uint1 x1589; + uint32_t x1590; + fiat_p384_uint1 x1591; + uint32_t x1592; + fiat_p384_uint1 x1593; + uint32_t x1594; + fiat_p384_uint1 x1595; + uint32_t x1596; + fiat_p384_uint1 x1597; + uint32_t x1598; + fiat_p384_uint1 x1599; + uint32_t x1600; + fiat_p384_uint1 x1601; + uint32_t x1602; + uint32_t x1603; + fiat_p384_uint1 x1604; + uint32_t x1605; + fiat_p384_uint1 x1606; + uint32_t x1607; + fiat_p384_uint1 x1608; + uint32_t x1609; + fiat_p384_uint1 x1610; + uint32_t x1611; + fiat_p384_uint1 x1612; + uint32_t x1613; + fiat_p384_uint1 x1614; + uint32_t x1615; + fiat_p384_uint1 x1616; + uint32_t x1617; + fiat_p384_uint1 x1618; + uint32_t x1619; + fiat_p384_uint1 x1620; + uint32_t x1621; + fiat_p384_uint1 x1622; + uint32_t x1623; + fiat_p384_uint1 x1624; + uint32_t x1625; + fiat_p384_uint1 x1626; + uint32_t x1627; + fiat_p384_uint1 x1628; + uint32_t x1629; + uint32_t x1630; + fiat_p384_uint1 x1631; + uint32_t x1632; + fiat_p384_uint1 x1633; + uint32_t x1634; + fiat_p384_uint1 x1635; + uint32_t x1636; + fiat_p384_uint1 x1637; + uint32_t x1638; + fiat_p384_uint1 x1639; + uint32_t x1640; + fiat_p384_uint1 x1641; + uint32_t x1642; + fiat_p384_uint1 x1643; + uint32_t x1644; + fiat_p384_uint1 x1645; + uint32_t x1646; + fiat_p384_uint1 x1647; + uint32_t x1648; + fiat_p384_uint1 x1649; + uint32_t x1650; + fiat_p384_uint1 x1651; + uint32_t x1652; + fiat_p384_uint1 x1653; + uint32_t x1654; + fiat_p384_uint1 x1655; + uint32_t x1656; + uint32_t x1657; + uint32_t x1658; + uint32_t x1659; + uint32_t x1660; + uint32_t x1661; + uint32_t x1662; + uint32_t x1663; + uint32_t x1664; + uint32_t x1665; + uint32_t x1666; + uint32_t x1667; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[8]); + x9 = (arg1[9]); + x10 = (arg1[10]); + x11 = (arg1[11]); + x12 = (arg1[0]); + fiat_p384_mulx_u32(&x13, &x14, x12, (arg2[11])); + fiat_p384_mulx_u32(&x15, &x16, x12, (arg2[10])); + fiat_p384_mulx_u32(&x17, &x18, x12, (arg2[9])); + fiat_p384_mulx_u32(&x19, &x20, x12, (arg2[8])); + fiat_p384_mulx_u32(&x21, &x22, x12, (arg2[7])); + fiat_p384_mulx_u32(&x23, &x24, x12, (arg2[6])); + fiat_p384_mulx_u32(&x25, &x26, x12, (arg2[5])); + fiat_p384_mulx_u32(&x27, &x28, x12, (arg2[4])); + fiat_p384_mulx_u32(&x29, &x30, x12, (arg2[3])); + fiat_p384_mulx_u32(&x31, &x32, x12, (arg2[2])); + fiat_p384_mulx_u32(&x33, &x34, x12, (arg2[1])); + fiat_p384_mulx_u32(&x35, &x36, x12, (arg2[0])); + fiat_p384_addcarryx_u32(&x37, &x38, 0x0, x36, x33); + fiat_p384_addcarryx_u32(&x39, &x40, x38, x34, x31); + fiat_p384_addcarryx_u32(&x41, &x42, x40, x32, x29); + fiat_p384_addcarryx_u32(&x43, &x44, x42, x30, x27); + fiat_p384_addcarryx_u32(&x45, &x46, x44, x28, x25); + fiat_p384_addcarryx_u32(&x47, &x48, x46, x26, x23); + fiat_p384_addcarryx_u32(&x49, &x50, x48, x24, x21); + fiat_p384_addcarryx_u32(&x51, &x52, x50, x22, x19); + fiat_p384_addcarryx_u32(&x53, &x54, x52, x20, x17); + fiat_p384_addcarryx_u32(&x55, &x56, x54, x18, x15); + fiat_p384_addcarryx_u32(&x57, &x58, x56, x16, x13); + x59 = (x58 + x14); + fiat_p384_mulx_u32(&x60, &x61, x35, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x62, &x63, x35, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x64, &x65, x35, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x66, &x67, x35, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x68, &x69, x35, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x70, &x71, x35, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x72, &x73, x35, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x74, &x75, x35, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x76, &x77, x35, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x78, &x79, x35, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x80, &x81, 0x0, x77, x74); + fiat_p384_addcarryx_u32(&x82, &x83, x81, x75, x72); + fiat_p384_addcarryx_u32(&x84, &x85, x83, x73, x70); + fiat_p384_addcarryx_u32(&x86, &x87, x85, x71, x68); + fiat_p384_addcarryx_u32(&x88, &x89, x87, x69, x66); + fiat_p384_addcarryx_u32(&x90, &x91, x89, x67, x64); + fiat_p384_addcarryx_u32(&x92, &x93, x91, x65, x62); + fiat_p384_addcarryx_u32(&x94, &x95, x93, x63, x60); + x96 = (x95 + x61); + fiat_p384_addcarryx_u32(&x97, &x98, 0x0, x35, x78); + fiat_p384_addcarryx_u32(&x99, &x100, x98, x37, x79); + fiat_p384_addcarryx_u32(&x101, &x102, x100, x39, 0x0); + fiat_p384_addcarryx_u32(&x103, &x104, x102, x41, x76); + fiat_p384_addcarryx_u32(&x105, &x106, x104, x43, x80); + fiat_p384_addcarryx_u32(&x107, &x108, x106, x45, x82); + fiat_p384_addcarryx_u32(&x109, &x110, x108, x47, x84); + fiat_p384_addcarryx_u32(&x111, &x112, x110, x49, x86); + fiat_p384_addcarryx_u32(&x113, &x114, x112, x51, x88); + fiat_p384_addcarryx_u32(&x115, &x116, x114, x53, x90); + fiat_p384_addcarryx_u32(&x117, &x118, x116, x55, x92); + fiat_p384_addcarryx_u32(&x119, &x120, x118, x57, x94); + fiat_p384_addcarryx_u32(&x121, &x122, x120, x59, x96); + fiat_p384_mulx_u32(&x123, &x124, x1, (arg2[11])); + fiat_p384_mulx_u32(&x125, &x126, x1, (arg2[10])); + fiat_p384_mulx_u32(&x127, &x128, x1, (arg2[9])); + fiat_p384_mulx_u32(&x129, &x130, x1, (arg2[8])); + fiat_p384_mulx_u32(&x131, &x132, x1, (arg2[7])); + fiat_p384_mulx_u32(&x133, &x134, x1, (arg2[6])); + fiat_p384_mulx_u32(&x135, &x136, x1, (arg2[5])); + fiat_p384_mulx_u32(&x137, &x138, x1, (arg2[4])); + fiat_p384_mulx_u32(&x139, &x140, x1, (arg2[3])); + fiat_p384_mulx_u32(&x141, &x142, x1, (arg2[2])); + fiat_p384_mulx_u32(&x143, &x144, x1, (arg2[1])); + fiat_p384_mulx_u32(&x145, &x146, x1, (arg2[0])); + fiat_p384_addcarryx_u32(&x147, &x148, 0x0, x146, x143); + fiat_p384_addcarryx_u32(&x149, &x150, x148, x144, x141); + fiat_p384_addcarryx_u32(&x151, &x152, x150, x142, x139); + fiat_p384_addcarryx_u32(&x153, &x154, x152, x140, x137); + fiat_p384_addcarryx_u32(&x155, &x156, x154, x138, x135); + fiat_p384_addcarryx_u32(&x157, &x158, x156, x136, x133); + fiat_p384_addcarryx_u32(&x159, &x160, x158, x134, x131); + fiat_p384_addcarryx_u32(&x161, &x162, x160, x132, x129); + fiat_p384_addcarryx_u32(&x163, &x164, x162, x130, x127); + fiat_p384_addcarryx_u32(&x165, &x166, x164, x128, x125); + fiat_p384_addcarryx_u32(&x167, &x168, x166, x126, x123); + x169 = (x168 + x124); + fiat_p384_addcarryx_u32(&x170, &x171, 0x0, x99, x145); + fiat_p384_addcarryx_u32(&x172, &x173, x171, x101, x147); + fiat_p384_addcarryx_u32(&x174, &x175, x173, x103, x149); + fiat_p384_addcarryx_u32(&x176, &x177, x175, x105, x151); + fiat_p384_addcarryx_u32(&x178, &x179, x177, x107, x153); + fiat_p384_addcarryx_u32(&x180, &x181, x179, x109, x155); + fiat_p384_addcarryx_u32(&x182, &x183, x181, x111, x157); + fiat_p384_addcarryx_u32(&x184, &x185, x183, x113, x159); + fiat_p384_addcarryx_u32(&x186, &x187, x185, x115, x161); + fiat_p384_addcarryx_u32(&x188, &x189, x187, x117, x163); + fiat_p384_addcarryx_u32(&x190, &x191, x189, x119, x165); + fiat_p384_addcarryx_u32(&x192, &x193, x191, x121, x167); + fiat_p384_addcarryx_u32(&x194, &x195, x193, x122, x169); + fiat_p384_mulx_u32(&x196, &x197, x170, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x198, &x199, x170, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x200, &x201, x170, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x202, &x203, x170, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x204, &x205, x170, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x206, &x207, x170, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x208, &x209, x170, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x210, &x211, x170, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x212, &x213, x170, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x214, &x215, x170, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x216, &x217, 0x0, x213, x210); + fiat_p384_addcarryx_u32(&x218, &x219, x217, x211, x208); + fiat_p384_addcarryx_u32(&x220, &x221, x219, x209, x206); + fiat_p384_addcarryx_u32(&x222, &x223, x221, x207, x204); + fiat_p384_addcarryx_u32(&x224, &x225, x223, x205, x202); + fiat_p384_addcarryx_u32(&x226, &x227, x225, x203, x200); + fiat_p384_addcarryx_u32(&x228, &x229, x227, x201, x198); + fiat_p384_addcarryx_u32(&x230, &x231, x229, x199, x196); + x232 = (x231 + x197); + fiat_p384_addcarryx_u32(&x233, &x234, 0x0, x170, x214); + fiat_p384_addcarryx_u32(&x235, &x236, x234, x172, x215); + fiat_p384_addcarryx_u32(&x237, &x238, x236, x174, 0x0); + fiat_p384_addcarryx_u32(&x239, &x240, x238, x176, x212); + fiat_p384_addcarryx_u32(&x241, &x242, x240, x178, x216); + fiat_p384_addcarryx_u32(&x243, &x244, x242, x180, x218); + fiat_p384_addcarryx_u32(&x245, &x246, x244, x182, x220); + fiat_p384_addcarryx_u32(&x247, &x248, x246, x184, x222); + fiat_p384_addcarryx_u32(&x249, &x250, x248, x186, x224); + fiat_p384_addcarryx_u32(&x251, &x252, x250, x188, x226); + fiat_p384_addcarryx_u32(&x253, &x254, x252, x190, x228); + fiat_p384_addcarryx_u32(&x255, &x256, x254, x192, x230); + fiat_p384_addcarryx_u32(&x257, &x258, x256, x194, x232); + x259 = ((uint32_t)x258 + x195); + fiat_p384_mulx_u32(&x260, &x261, x2, (arg2[11])); + fiat_p384_mulx_u32(&x262, &x263, x2, (arg2[10])); + fiat_p384_mulx_u32(&x264, &x265, x2, (arg2[9])); + fiat_p384_mulx_u32(&x266, &x267, x2, (arg2[8])); + fiat_p384_mulx_u32(&x268, &x269, x2, (arg2[7])); + fiat_p384_mulx_u32(&x270, &x271, x2, (arg2[6])); + fiat_p384_mulx_u32(&x272, &x273, x2, (arg2[5])); + fiat_p384_mulx_u32(&x274, &x275, x2, (arg2[4])); + fiat_p384_mulx_u32(&x276, &x277, x2, (arg2[3])); + fiat_p384_mulx_u32(&x278, &x279, x2, (arg2[2])); + fiat_p384_mulx_u32(&x280, &x281, x2, (arg2[1])); + fiat_p384_mulx_u32(&x282, &x283, x2, (arg2[0])); + fiat_p384_addcarryx_u32(&x284, &x285, 0x0, x283, x280); + fiat_p384_addcarryx_u32(&x286, &x287, x285, x281, x278); + fiat_p384_addcarryx_u32(&x288, &x289, x287, x279, x276); + fiat_p384_addcarryx_u32(&x290, &x291, x289, x277, x274); + fiat_p384_addcarryx_u32(&x292, &x293, x291, x275, x272); + fiat_p384_addcarryx_u32(&x294, &x295, x293, x273, x270); + fiat_p384_addcarryx_u32(&x296, &x297, x295, x271, x268); + fiat_p384_addcarryx_u32(&x298, &x299, x297, x269, x266); + fiat_p384_addcarryx_u32(&x300, &x301, x299, x267, x264); + fiat_p384_addcarryx_u32(&x302, &x303, x301, x265, x262); + fiat_p384_addcarryx_u32(&x304, &x305, x303, x263, x260); + x306 = (x305 + x261); + fiat_p384_addcarryx_u32(&x307, &x308, 0x0, x235, x282); + fiat_p384_addcarryx_u32(&x309, &x310, x308, x237, x284); + fiat_p384_addcarryx_u32(&x311, &x312, x310, x239, x286); + fiat_p384_addcarryx_u32(&x313, &x314, x312, x241, x288); + fiat_p384_addcarryx_u32(&x315, &x316, x314, x243, x290); + fiat_p384_addcarryx_u32(&x317, &x318, x316, x245, x292); + fiat_p384_addcarryx_u32(&x319, &x320, x318, x247, x294); + fiat_p384_addcarryx_u32(&x321, &x322, x320, x249, x296); + fiat_p384_addcarryx_u32(&x323, &x324, x322, x251, x298); + fiat_p384_addcarryx_u32(&x325, &x326, x324, x253, x300); + fiat_p384_addcarryx_u32(&x327, &x328, x326, x255, x302); + fiat_p384_addcarryx_u32(&x329, &x330, x328, x257, x304); + fiat_p384_addcarryx_u32(&x331, &x332, x330, x259, x306); + fiat_p384_mulx_u32(&x333, &x334, x307, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x335, &x336, x307, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x337, &x338, x307, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x339, &x340, x307, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x341, &x342, x307, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x343, &x344, x307, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x345, &x346, x307, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x347, &x348, x307, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x349, &x350, x307, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x351, &x352, x307, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x353, &x354, 0x0, x350, x347); + fiat_p384_addcarryx_u32(&x355, &x356, x354, x348, x345); + fiat_p384_addcarryx_u32(&x357, &x358, x356, x346, x343); + fiat_p384_addcarryx_u32(&x359, &x360, x358, x344, x341); + fiat_p384_addcarryx_u32(&x361, &x362, x360, x342, x339); + fiat_p384_addcarryx_u32(&x363, &x364, x362, x340, x337); + fiat_p384_addcarryx_u32(&x365, &x366, x364, x338, x335); + fiat_p384_addcarryx_u32(&x367, &x368, x366, x336, x333); + x369 = (x368 + x334); + fiat_p384_addcarryx_u32(&x370, &x371, 0x0, x307, x351); + fiat_p384_addcarryx_u32(&x372, &x373, x371, x309, x352); + fiat_p384_addcarryx_u32(&x374, &x375, x373, x311, 0x0); + fiat_p384_addcarryx_u32(&x376, &x377, x375, x313, x349); + fiat_p384_addcarryx_u32(&x378, &x379, x377, x315, x353); + fiat_p384_addcarryx_u32(&x380, &x381, x379, x317, x355); + fiat_p384_addcarryx_u32(&x382, &x383, x381, x319, x357); + fiat_p384_addcarryx_u32(&x384, &x385, x383, x321, x359); + fiat_p384_addcarryx_u32(&x386, &x387, x385, x323, x361); + fiat_p384_addcarryx_u32(&x388, &x389, x387, x325, x363); + fiat_p384_addcarryx_u32(&x390, &x391, x389, x327, x365); + fiat_p384_addcarryx_u32(&x392, &x393, x391, x329, x367); + fiat_p384_addcarryx_u32(&x394, &x395, x393, x331, x369); + x396 = ((uint32_t)x395 + x332); + fiat_p384_mulx_u32(&x397, &x398, x3, (arg2[11])); + fiat_p384_mulx_u32(&x399, &x400, x3, (arg2[10])); + fiat_p384_mulx_u32(&x401, &x402, x3, (arg2[9])); + fiat_p384_mulx_u32(&x403, &x404, x3, (arg2[8])); + fiat_p384_mulx_u32(&x405, &x406, x3, (arg2[7])); + fiat_p384_mulx_u32(&x407, &x408, x3, (arg2[6])); + fiat_p384_mulx_u32(&x409, &x410, x3, (arg2[5])); + fiat_p384_mulx_u32(&x411, &x412, x3, (arg2[4])); + fiat_p384_mulx_u32(&x413, &x414, x3, (arg2[3])); + fiat_p384_mulx_u32(&x415, &x416, x3, (arg2[2])); + fiat_p384_mulx_u32(&x417, &x418, x3, (arg2[1])); + fiat_p384_mulx_u32(&x419, &x420, x3, (arg2[0])); + fiat_p384_addcarryx_u32(&x421, &x422, 0x0, x420, x417); + fiat_p384_addcarryx_u32(&x423, &x424, x422, x418, x415); + fiat_p384_addcarryx_u32(&x425, &x426, x424, x416, x413); + fiat_p384_addcarryx_u32(&x427, &x428, x426, x414, x411); + fiat_p384_addcarryx_u32(&x429, &x430, x428, x412, x409); + fiat_p384_addcarryx_u32(&x431, &x432, x430, x410, x407); + fiat_p384_addcarryx_u32(&x433, &x434, x432, x408, x405); + fiat_p384_addcarryx_u32(&x435, &x436, x434, x406, x403); + fiat_p384_addcarryx_u32(&x437, &x438, x436, x404, x401); + fiat_p384_addcarryx_u32(&x439, &x440, x438, x402, x399); + fiat_p384_addcarryx_u32(&x441, &x442, x440, x400, x397); + x443 = (x442 + x398); + fiat_p384_addcarryx_u32(&x444, &x445, 0x0, x372, x419); + fiat_p384_addcarryx_u32(&x446, &x447, x445, x374, x421); + fiat_p384_addcarryx_u32(&x448, &x449, x447, x376, x423); + fiat_p384_addcarryx_u32(&x450, &x451, x449, x378, x425); + fiat_p384_addcarryx_u32(&x452, &x453, x451, x380, x427); + fiat_p384_addcarryx_u32(&x454, &x455, x453, x382, x429); + fiat_p384_addcarryx_u32(&x456, &x457, x455, x384, x431); + fiat_p384_addcarryx_u32(&x458, &x459, x457, x386, x433); + fiat_p384_addcarryx_u32(&x460, &x461, x459, x388, x435); + fiat_p384_addcarryx_u32(&x462, &x463, x461, x390, x437); + fiat_p384_addcarryx_u32(&x464, &x465, x463, x392, x439); + fiat_p384_addcarryx_u32(&x466, &x467, x465, x394, x441); + fiat_p384_addcarryx_u32(&x468, &x469, x467, x396, x443); + fiat_p384_mulx_u32(&x470, &x471, x444, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x472, &x473, x444, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x474, &x475, x444, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x476, &x477, x444, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x478, &x479, x444, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x480, &x481, x444, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x482, &x483, x444, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x484, &x485, x444, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x486, &x487, x444, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x488, &x489, x444, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x490, &x491, 0x0, x487, x484); + fiat_p384_addcarryx_u32(&x492, &x493, x491, x485, x482); + fiat_p384_addcarryx_u32(&x494, &x495, x493, x483, x480); + fiat_p384_addcarryx_u32(&x496, &x497, x495, x481, x478); + fiat_p384_addcarryx_u32(&x498, &x499, x497, x479, x476); + fiat_p384_addcarryx_u32(&x500, &x501, x499, x477, x474); + fiat_p384_addcarryx_u32(&x502, &x503, x501, x475, x472); + fiat_p384_addcarryx_u32(&x504, &x505, x503, x473, x470); + x506 = (x505 + x471); + fiat_p384_addcarryx_u32(&x507, &x508, 0x0, x444, x488); + fiat_p384_addcarryx_u32(&x509, &x510, x508, x446, x489); + fiat_p384_addcarryx_u32(&x511, &x512, x510, x448, 0x0); + fiat_p384_addcarryx_u32(&x513, &x514, x512, x450, x486); + fiat_p384_addcarryx_u32(&x515, &x516, x514, x452, x490); + fiat_p384_addcarryx_u32(&x517, &x518, x516, x454, x492); + fiat_p384_addcarryx_u32(&x519, &x520, x518, x456, x494); + fiat_p384_addcarryx_u32(&x521, &x522, x520, x458, x496); + fiat_p384_addcarryx_u32(&x523, &x524, x522, x460, x498); + fiat_p384_addcarryx_u32(&x525, &x526, x524, x462, x500); + fiat_p384_addcarryx_u32(&x527, &x528, x526, x464, x502); + fiat_p384_addcarryx_u32(&x529, &x530, x528, x466, x504); + fiat_p384_addcarryx_u32(&x531, &x532, x530, x468, x506); + x533 = ((uint32_t)x532 + x469); + fiat_p384_mulx_u32(&x534, &x535, x4, (arg2[11])); + fiat_p384_mulx_u32(&x536, &x537, x4, (arg2[10])); + fiat_p384_mulx_u32(&x538, &x539, x4, (arg2[9])); + fiat_p384_mulx_u32(&x540, &x541, x4, (arg2[8])); + fiat_p384_mulx_u32(&x542, &x543, x4, (arg2[7])); + fiat_p384_mulx_u32(&x544, &x545, x4, (arg2[6])); + fiat_p384_mulx_u32(&x546, &x547, x4, (arg2[5])); + fiat_p384_mulx_u32(&x548, &x549, x4, (arg2[4])); + fiat_p384_mulx_u32(&x550, &x551, x4, (arg2[3])); + fiat_p384_mulx_u32(&x552, &x553, x4, (arg2[2])); + fiat_p384_mulx_u32(&x554, &x555, x4, (arg2[1])); + fiat_p384_mulx_u32(&x556, &x557, x4, (arg2[0])); + fiat_p384_addcarryx_u32(&x558, &x559, 0x0, x557, x554); + fiat_p384_addcarryx_u32(&x560, &x561, x559, x555, x552); + fiat_p384_addcarryx_u32(&x562, &x563, x561, x553, x550); + fiat_p384_addcarryx_u32(&x564, &x565, x563, x551, x548); + fiat_p384_addcarryx_u32(&x566, &x567, x565, x549, x546); + fiat_p384_addcarryx_u32(&x568, &x569, x567, x547, x544); + fiat_p384_addcarryx_u32(&x570, &x571, x569, x545, x542); + fiat_p384_addcarryx_u32(&x572, &x573, x571, x543, x540); + fiat_p384_addcarryx_u32(&x574, &x575, x573, x541, x538); + fiat_p384_addcarryx_u32(&x576, &x577, x575, x539, x536); + fiat_p384_addcarryx_u32(&x578, &x579, x577, x537, x534); + x580 = (x579 + x535); + fiat_p384_addcarryx_u32(&x581, &x582, 0x0, x509, x556); + fiat_p384_addcarryx_u32(&x583, &x584, x582, x511, x558); + fiat_p384_addcarryx_u32(&x585, &x586, x584, x513, x560); + fiat_p384_addcarryx_u32(&x587, &x588, x586, x515, x562); + fiat_p384_addcarryx_u32(&x589, &x590, x588, x517, x564); + fiat_p384_addcarryx_u32(&x591, &x592, x590, x519, x566); + fiat_p384_addcarryx_u32(&x593, &x594, x592, x521, x568); + fiat_p384_addcarryx_u32(&x595, &x596, x594, x523, x570); + fiat_p384_addcarryx_u32(&x597, &x598, x596, x525, x572); + fiat_p384_addcarryx_u32(&x599, &x600, x598, x527, x574); + fiat_p384_addcarryx_u32(&x601, &x602, x600, x529, x576); + fiat_p384_addcarryx_u32(&x603, &x604, x602, x531, x578); + fiat_p384_addcarryx_u32(&x605, &x606, x604, x533, x580); + fiat_p384_mulx_u32(&x607, &x608, x581, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x609, &x610, x581, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x611, &x612, x581, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x613, &x614, x581, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x615, &x616, x581, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x617, &x618, x581, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x619, &x620, x581, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x621, &x622, x581, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x623, &x624, x581, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x625, &x626, x581, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x627, &x628, 0x0, x624, x621); + fiat_p384_addcarryx_u32(&x629, &x630, x628, x622, x619); + fiat_p384_addcarryx_u32(&x631, &x632, x630, x620, x617); + fiat_p384_addcarryx_u32(&x633, &x634, x632, x618, x615); + fiat_p384_addcarryx_u32(&x635, &x636, x634, x616, x613); + fiat_p384_addcarryx_u32(&x637, &x638, x636, x614, x611); + fiat_p384_addcarryx_u32(&x639, &x640, x638, x612, x609); + fiat_p384_addcarryx_u32(&x641, &x642, x640, x610, x607); + x643 = (x642 + x608); + fiat_p384_addcarryx_u32(&x644, &x645, 0x0, x581, x625); + fiat_p384_addcarryx_u32(&x646, &x647, x645, x583, x626); + fiat_p384_addcarryx_u32(&x648, &x649, x647, x585, 0x0); + fiat_p384_addcarryx_u32(&x650, &x651, x649, x587, x623); + fiat_p384_addcarryx_u32(&x652, &x653, x651, x589, x627); + fiat_p384_addcarryx_u32(&x654, &x655, x653, x591, x629); + fiat_p384_addcarryx_u32(&x656, &x657, x655, x593, x631); + fiat_p384_addcarryx_u32(&x658, &x659, x657, x595, x633); + fiat_p384_addcarryx_u32(&x660, &x661, x659, x597, x635); + fiat_p384_addcarryx_u32(&x662, &x663, x661, x599, x637); + fiat_p384_addcarryx_u32(&x664, &x665, x663, x601, x639); + fiat_p384_addcarryx_u32(&x666, &x667, x665, x603, x641); + fiat_p384_addcarryx_u32(&x668, &x669, x667, x605, x643); + x670 = ((uint32_t)x669 + x606); + fiat_p384_mulx_u32(&x671, &x672, x5, (arg2[11])); + fiat_p384_mulx_u32(&x673, &x674, x5, (arg2[10])); + fiat_p384_mulx_u32(&x675, &x676, x5, (arg2[9])); + fiat_p384_mulx_u32(&x677, &x678, x5, (arg2[8])); + fiat_p384_mulx_u32(&x679, &x680, x5, (arg2[7])); + fiat_p384_mulx_u32(&x681, &x682, x5, (arg2[6])); + fiat_p384_mulx_u32(&x683, &x684, x5, (arg2[5])); + fiat_p384_mulx_u32(&x685, &x686, x5, (arg2[4])); + fiat_p384_mulx_u32(&x687, &x688, x5, (arg2[3])); + fiat_p384_mulx_u32(&x689, &x690, x5, (arg2[2])); + fiat_p384_mulx_u32(&x691, &x692, x5, (arg2[1])); + fiat_p384_mulx_u32(&x693, &x694, x5, (arg2[0])); + fiat_p384_addcarryx_u32(&x695, &x696, 0x0, x694, x691); + fiat_p384_addcarryx_u32(&x697, &x698, x696, x692, x689); + fiat_p384_addcarryx_u32(&x699, &x700, x698, x690, x687); + fiat_p384_addcarryx_u32(&x701, &x702, x700, x688, x685); + fiat_p384_addcarryx_u32(&x703, &x704, x702, x686, x683); + fiat_p384_addcarryx_u32(&x705, &x706, x704, x684, x681); + fiat_p384_addcarryx_u32(&x707, &x708, x706, x682, x679); + fiat_p384_addcarryx_u32(&x709, &x710, x708, x680, x677); + fiat_p384_addcarryx_u32(&x711, &x712, x710, x678, x675); + fiat_p384_addcarryx_u32(&x713, &x714, x712, x676, x673); + fiat_p384_addcarryx_u32(&x715, &x716, x714, x674, x671); + x717 = (x716 + x672); + fiat_p384_addcarryx_u32(&x718, &x719, 0x0, x646, x693); + fiat_p384_addcarryx_u32(&x720, &x721, x719, x648, x695); + fiat_p384_addcarryx_u32(&x722, &x723, x721, x650, x697); + fiat_p384_addcarryx_u32(&x724, &x725, x723, x652, x699); + fiat_p384_addcarryx_u32(&x726, &x727, x725, x654, x701); + fiat_p384_addcarryx_u32(&x728, &x729, x727, x656, x703); + fiat_p384_addcarryx_u32(&x730, &x731, x729, x658, x705); + fiat_p384_addcarryx_u32(&x732, &x733, x731, x660, x707); + fiat_p384_addcarryx_u32(&x734, &x735, x733, x662, x709); + fiat_p384_addcarryx_u32(&x736, &x737, x735, x664, x711); + fiat_p384_addcarryx_u32(&x738, &x739, x737, x666, x713); + fiat_p384_addcarryx_u32(&x740, &x741, x739, x668, x715); + fiat_p384_addcarryx_u32(&x742, &x743, x741, x670, x717); + fiat_p384_mulx_u32(&x744, &x745, x718, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x746, &x747, x718, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x748, &x749, x718, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x750, &x751, x718, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x752, &x753, x718, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x754, &x755, x718, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x756, &x757, x718, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x758, &x759, x718, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x760, &x761, x718, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x762, &x763, x718, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x764, &x765, 0x0, x761, x758); + fiat_p384_addcarryx_u32(&x766, &x767, x765, x759, x756); + fiat_p384_addcarryx_u32(&x768, &x769, x767, x757, x754); + fiat_p384_addcarryx_u32(&x770, &x771, x769, x755, x752); + fiat_p384_addcarryx_u32(&x772, &x773, x771, x753, x750); + fiat_p384_addcarryx_u32(&x774, &x775, x773, x751, x748); + fiat_p384_addcarryx_u32(&x776, &x777, x775, x749, x746); + fiat_p384_addcarryx_u32(&x778, &x779, x777, x747, x744); + x780 = (x779 + x745); + fiat_p384_addcarryx_u32(&x781, &x782, 0x0, x718, x762); + fiat_p384_addcarryx_u32(&x783, &x784, x782, x720, x763); + fiat_p384_addcarryx_u32(&x785, &x786, x784, x722, 0x0); + fiat_p384_addcarryx_u32(&x787, &x788, x786, x724, x760); + fiat_p384_addcarryx_u32(&x789, &x790, x788, x726, x764); + fiat_p384_addcarryx_u32(&x791, &x792, x790, x728, x766); + fiat_p384_addcarryx_u32(&x793, &x794, x792, x730, x768); + fiat_p384_addcarryx_u32(&x795, &x796, x794, x732, x770); + fiat_p384_addcarryx_u32(&x797, &x798, x796, x734, x772); + fiat_p384_addcarryx_u32(&x799, &x800, x798, x736, x774); + fiat_p384_addcarryx_u32(&x801, &x802, x800, x738, x776); + fiat_p384_addcarryx_u32(&x803, &x804, x802, x740, x778); + fiat_p384_addcarryx_u32(&x805, &x806, x804, x742, x780); + x807 = ((uint32_t)x806 + x743); + fiat_p384_mulx_u32(&x808, &x809, x6, (arg2[11])); + fiat_p384_mulx_u32(&x810, &x811, x6, (arg2[10])); + fiat_p384_mulx_u32(&x812, &x813, x6, (arg2[9])); + fiat_p384_mulx_u32(&x814, &x815, x6, (arg2[8])); + fiat_p384_mulx_u32(&x816, &x817, x6, (arg2[7])); + fiat_p384_mulx_u32(&x818, &x819, x6, (arg2[6])); + fiat_p384_mulx_u32(&x820, &x821, x6, (arg2[5])); + fiat_p384_mulx_u32(&x822, &x823, x6, (arg2[4])); + fiat_p384_mulx_u32(&x824, &x825, x6, (arg2[3])); + fiat_p384_mulx_u32(&x826, &x827, x6, (arg2[2])); + fiat_p384_mulx_u32(&x828, &x829, x6, (arg2[1])); + fiat_p384_mulx_u32(&x830, &x831, x6, (arg2[0])); + fiat_p384_addcarryx_u32(&x832, &x833, 0x0, x831, x828); + fiat_p384_addcarryx_u32(&x834, &x835, x833, x829, x826); + fiat_p384_addcarryx_u32(&x836, &x837, x835, x827, x824); + fiat_p384_addcarryx_u32(&x838, &x839, x837, x825, x822); + fiat_p384_addcarryx_u32(&x840, &x841, x839, x823, x820); + fiat_p384_addcarryx_u32(&x842, &x843, x841, x821, x818); + fiat_p384_addcarryx_u32(&x844, &x845, x843, x819, x816); + fiat_p384_addcarryx_u32(&x846, &x847, x845, x817, x814); + fiat_p384_addcarryx_u32(&x848, &x849, x847, x815, x812); + fiat_p384_addcarryx_u32(&x850, &x851, x849, x813, x810); + fiat_p384_addcarryx_u32(&x852, &x853, x851, x811, x808); + x854 = (x853 + x809); + fiat_p384_addcarryx_u32(&x855, &x856, 0x0, x783, x830); + fiat_p384_addcarryx_u32(&x857, &x858, x856, x785, x832); + fiat_p384_addcarryx_u32(&x859, &x860, x858, x787, x834); + fiat_p384_addcarryx_u32(&x861, &x862, x860, x789, x836); + fiat_p384_addcarryx_u32(&x863, &x864, x862, x791, x838); + fiat_p384_addcarryx_u32(&x865, &x866, x864, x793, x840); + fiat_p384_addcarryx_u32(&x867, &x868, x866, x795, x842); + fiat_p384_addcarryx_u32(&x869, &x870, x868, x797, x844); + fiat_p384_addcarryx_u32(&x871, &x872, x870, x799, x846); + fiat_p384_addcarryx_u32(&x873, &x874, x872, x801, x848); + fiat_p384_addcarryx_u32(&x875, &x876, x874, x803, x850); + fiat_p384_addcarryx_u32(&x877, &x878, x876, x805, x852); + fiat_p384_addcarryx_u32(&x879, &x880, x878, x807, x854); + fiat_p384_mulx_u32(&x881, &x882, x855, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x883, &x884, x855, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x885, &x886, x855, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x887, &x888, x855, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x889, &x890, x855, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x891, &x892, x855, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x893, &x894, x855, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x895, &x896, x855, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x897, &x898, x855, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x899, &x900, x855, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x901, &x902, 0x0, x898, x895); + fiat_p384_addcarryx_u32(&x903, &x904, x902, x896, x893); + fiat_p384_addcarryx_u32(&x905, &x906, x904, x894, x891); + fiat_p384_addcarryx_u32(&x907, &x908, x906, x892, x889); + fiat_p384_addcarryx_u32(&x909, &x910, x908, x890, x887); + fiat_p384_addcarryx_u32(&x911, &x912, x910, x888, x885); + fiat_p384_addcarryx_u32(&x913, &x914, x912, x886, x883); + fiat_p384_addcarryx_u32(&x915, &x916, x914, x884, x881); + x917 = (x916 + x882); + fiat_p384_addcarryx_u32(&x918, &x919, 0x0, x855, x899); + fiat_p384_addcarryx_u32(&x920, &x921, x919, x857, x900); + fiat_p384_addcarryx_u32(&x922, &x923, x921, x859, 0x0); + fiat_p384_addcarryx_u32(&x924, &x925, x923, x861, x897); + fiat_p384_addcarryx_u32(&x926, &x927, x925, x863, x901); + fiat_p384_addcarryx_u32(&x928, &x929, x927, x865, x903); + fiat_p384_addcarryx_u32(&x930, &x931, x929, x867, x905); + fiat_p384_addcarryx_u32(&x932, &x933, x931, x869, x907); + fiat_p384_addcarryx_u32(&x934, &x935, x933, x871, x909); + fiat_p384_addcarryx_u32(&x936, &x937, x935, x873, x911); + fiat_p384_addcarryx_u32(&x938, &x939, x937, x875, x913); + fiat_p384_addcarryx_u32(&x940, &x941, x939, x877, x915); + fiat_p384_addcarryx_u32(&x942, &x943, x941, x879, x917); + x944 = ((uint32_t)x943 + x880); + fiat_p384_mulx_u32(&x945, &x946, x7, (arg2[11])); + fiat_p384_mulx_u32(&x947, &x948, x7, (arg2[10])); + fiat_p384_mulx_u32(&x949, &x950, x7, (arg2[9])); + fiat_p384_mulx_u32(&x951, &x952, x7, (arg2[8])); + fiat_p384_mulx_u32(&x953, &x954, x7, (arg2[7])); + fiat_p384_mulx_u32(&x955, &x956, x7, (arg2[6])); + fiat_p384_mulx_u32(&x957, &x958, x7, (arg2[5])); + fiat_p384_mulx_u32(&x959, &x960, x7, (arg2[4])); + fiat_p384_mulx_u32(&x961, &x962, x7, (arg2[3])); + fiat_p384_mulx_u32(&x963, &x964, x7, (arg2[2])); + fiat_p384_mulx_u32(&x965, &x966, x7, (arg2[1])); + fiat_p384_mulx_u32(&x967, &x968, x7, (arg2[0])); + fiat_p384_addcarryx_u32(&x969, &x970, 0x0, x968, x965); + fiat_p384_addcarryx_u32(&x971, &x972, x970, x966, x963); + fiat_p384_addcarryx_u32(&x973, &x974, x972, x964, x961); + fiat_p384_addcarryx_u32(&x975, &x976, x974, x962, x959); + fiat_p384_addcarryx_u32(&x977, &x978, x976, x960, x957); + fiat_p384_addcarryx_u32(&x979, &x980, x978, x958, x955); + fiat_p384_addcarryx_u32(&x981, &x982, x980, x956, x953); + fiat_p384_addcarryx_u32(&x983, &x984, x982, x954, x951); + fiat_p384_addcarryx_u32(&x985, &x986, x984, x952, x949); + fiat_p384_addcarryx_u32(&x987, &x988, x986, x950, x947); + fiat_p384_addcarryx_u32(&x989, &x990, x988, x948, x945); + x991 = (x990 + x946); + fiat_p384_addcarryx_u32(&x992, &x993, 0x0, x920, x967); + fiat_p384_addcarryx_u32(&x994, &x995, x993, x922, x969); + fiat_p384_addcarryx_u32(&x996, &x997, x995, x924, x971); + fiat_p384_addcarryx_u32(&x998, &x999, x997, x926, x973); + fiat_p384_addcarryx_u32(&x1000, &x1001, x999, x928, x975); + fiat_p384_addcarryx_u32(&x1002, &x1003, x1001, x930, x977); + fiat_p384_addcarryx_u32(&x1004, &x1005, x1003, x932, x979); + fiat_p384_addcarryx_u32(&x1006, &x1007, x1005, x934, x981); + fiat_p384_addcarryx_u32(&x1008, &x1009, x1007, x936, x983); + fiat_p384_addcarryx_u32(&x1010, &x1011, x1009, x938, x985); + fiat_p384_addcarryx_u32(&x1012, &x1013, x1011, x940, x987); + fiat_p384_addcarryx_u32(&x1014, &x1015, x1013, x942, x989); + fiat_p384_addcarryx_u32(&x1016, &x1017, x1015, x944, x991); + fiat_p384_mulx_u32(&x1018, &x1019, x992, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1020, &x1021, x992, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1022, &x1023, x992, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1024, &x1025, x992, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1026, &x1027, x992, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1028, &x1029, x992, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1030, &x1031, x992, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1032, &x1033, x992, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x1034, &x1035, x992, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1036, &x1037, x992, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x1038, &x1039, 0x0, x1035, x1032); + fiat_p384_addcarryx_u32(&x1040, &x1041, x1039, x1033, x1030); + fiat_p384_addcarryx_u32(&x1042, &x1043, x1041, x1031, x1028); + fiat_p384_addcarryx_u32(&x1044, &x1045, x1043, x1029, x1026); + fiat_p384_addcarryx_u32(&x1046, &x1047, x1045, x1027, x1024); + fiat_p384_addcarryx_u32(&x1048, &x1049, x1047, x1025, x1022); + fiat_p384_addcarryx_u32(&x1050, &x1051, x1049, x1023, x1020); + fiat_p384_addcarryx_u32(&x1052, &x1053, x1051, x1021, x1018); + x1054 = (x1053 + x1019); + fiat_p384_addcarryx_u32(&x1055, &x1056, 0x0, x992, x1036); + fiat_p384_addcarryx_u32(&x1057, &x1058, x1056, x994, x1037); + fiat_p384_addcarryx_u32(&x1059, &x1060, x1058, x996, 0x0); + fiat_p384_addcarryx_u32(&x1061, &x1062, x1060, x998, x1034); + fiat_p384_addcarryx_u32(&x1063, &x1064, x1062, x1000, x1038); + fiat_p384_addcarryx_u32(&x1065, &x1066, x1064, x1002, x1040); + fiat_p384_addcarryx_u32(&x1067, &x1068, x1066, x1004, x1042); + fiat_p384_addcarryx_u32(&x1069, &x1070, x1068, x1006, x1044); + fiat_p384_addcarryx_u32(&x1071, &x1072, x1070, x1008, x1046); + fiat_p384_addcarryx_u32(&x1073, &x1074, x1072, x1010, x1048); + fiat_p384_addcarryx_u32(&x1075, &x1076, x1074, x1012, x1050); + fiat_p384_addcarryx_u32(&x1077, &x1078, x1076, x1014, x1052); + fiat_p384_addcarryx_u32(&x1079, &x1080, x1078, x1016, x1054); + x1081 = ((uint32_t)x1080 + x1017); + fiat_p384_mulx_u32(&x1082, &x1083, x8, (arg2[11])); + fiat_p384_mulx_u32(&x1084, &x1085, x8, (arg2[10])); + fiat_p384_mulx_u32(&x1086, &x1087, x8, (arg2[9])); + fiat_p384_mulx_u32(&x1088, &x1089, x8, (arg2[8])); + fiat_p384_mulx_u32(&x1090, &x1091, x8, (arg2[7])); + fiat_p384_mulx_u32(&x1092, &x1093, x8, (arg2[6])); + fiat_p384_mulx_u32(&x1094, &x1095, x8, (arg2[5])); + fiat_p384_mulx_u32(&x1096, &x1097, x8, (arg2[4])); + fiat_p384_mulx_u32(&x1098, &x1099, x8, (arg2[3])); + fiat_p384_mulx_u32(&x1100, &x1101, x8, (arg2[2])); + fiat_p384_mulx_u32(&x1102, &x1103, x8, (arg2[1])); + fiat_p384_mulx_u32(&x1104, &x1105, x8, (arg2[0])); + fiat_p384_addcarryx_u32(&x1106, &x1107, 0x0, x1105, x1102); + fiat_p384_addcarryx_u32(&x1108, &x1109, x1107, x1103, x1100); + fiat_p384_addcarryx_u32(&x1110, &x1111, x1109, x1101, x1098); + fiat_p384_addcarryx_u32(&x1112, &x1113, x1111, x1099, x1096); + fiat_p384_addcarryx_u32(&x1114, &x1115, x1113, x1097, x1094); + fiat_p384_addcarryx_u32(&x1116, &x1117, x1115, x1095, x1092); + fiat_p384_addcarryx_u32(&x1118, &x1119, x1117, x1093, x1090); + fiat_p384_addcarryx_u32(&x1120, &x1121, x1119, x1091, x1088); + fiat_p384_addcarryx_u32(&x1122, &x1123, x1121, x1089, x1086); + fiat_p384_addcarryx_u32(&x1124, &x1125, x1123, x1087, x1084); + fiat_p384_addcarryx_u32(&x1126, &x1127, x1125, x1085, x1082); + x1128 = (x1127 + x1083); + fiat_p384_addcarryx_u32(&x1129, &x1130, 0x0, x1057, x1104); + fiat_p384_addcarryx_u32(&x1131, &x1132, x1130, x1059, x1106); + fiat_p384_addcarryx_u32(&x1133, &x1134, x1132, x1061, x1108); + fiat_p384_addcarryx_u32(&x1135, &x1136, x1134, x1063, x1110); + fiat_p384_addcarryx_u32(&x1137, &x1138, x1136, x1065, x1112); + fiat_p384_addcarryx_u32(&x1139, &x1140, x1138, x1067, x1114); + fiat_p384_addcarryx_u32(&x1141, &x1142, x1140, x1069, x1116); + fiat_p384_addcarryx_u32(&x1143, &x1144, x1142, x1071, x1118); + fiat_p384_addcarryx_u32(&x1145, &x1146, x1144, x1073, x1120); + fiat_p384_addcarryx_u32(&x1147, &x1148, x1146, x1075, x1122); + fiat_p384_addcarryx_u32(&x1149, &x1150, x1148, x1077, x1124); + fiat_p384_addcarryx_u32(&x1151, &x1152, x1150, x1079, x1126); + fiat_p384_addcarryx_u32(&x1153, &x1154, x1152, x1081, x1128); + fiat_p384_mulx_u32(&x1155, &x1156, x1129, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1157, &x1158, x1129, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1159, &x1160, x1129, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1161, &x1162, x1129, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1163, &x1164, x1129, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1165, &x1166, x1129, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1167, &x1168, x1129, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1169, &x1170, x1129, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x1171, &x1172, x1129, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1173, &x1174, x1129, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x1175, &x1176, 0x0, x1172, x1169); + fiat_p384_addcarryx_u32(&x1177, &x1178, x1176, x1170, x1167); + fiat_p384_addcarryx_u32(&x1179, &x1180, x1178, x1168, x1165); + fiat_p384_addcarryx_u32(&x1181, &x1182, x1180, x1166, x1163); + fiat_p384_addcarryx_u32(&x1183, &x1184, x1182, x1164, x1161); + fiat_p384_addcarryx_u32(&x1185, &x1186, x1184, x1162, x1159); + fiat_p384_addcarryx_u32(&x1187, &x1188, x1186, x1160, x1157); + fiat_p384_addcarryx_u32(&x1189, &x1190, x1188, x1158, x1155); + x1191 = (x1190 + x1156); + fiat_p384_addcarryx_u32(&x1192, &x1193, 0x0, x1129, x1173); + fiat_p384_addcarryx_u32(&x1194, &x1195, x1193, x1131, x1174); + fiat_p384_addcarryx_u32(&x1196, &x1197, x1195, x1133, 0x0); + fiat_p384_addcarryx_u32(&x1198, &x1199, x1197, x1135, x1171); + fiat_p384_addcarryx_u32(&x1200, &x1201, x1199, x1137, x1175); + fiat_p384_addcarryx_u32(&x1202, &x1203, x1201, x1139, x1177); + fiat_p384_addcarryx_u32(&x1204, &x1205, x1203, x1141, x1179); + fiat_p384_addcarryx_u32(&x1206, &x1207, x1205, x1143, x1181); + fiat_p384_addcarryx_u32(&x1208, &x1209, x1207, x1145, x1183); + fiat_p384_addcarryx_u32(&x1210, &x1211, x1209, x1147, x1185); + fiat_p384_addcarryx_u32(&x1212, &x1213, x1211, x1149, x1187); + fiat_p384_addcarryx_u32(&x1214, &x1215, x1213, x1151, x1189); + fiat_p384_addcarryx_u32(&x1216, &x1217, x1215, x1153, x1191); + x1218 = ((uint32_t)x1217 + x1154); + fiat_p384_mulx_u32(&x1219, &x1220, x9, (arg2[11])); + fiat_p384_mulx_u32(&x1221, &x1222, x9, (arg2[10])); + fiat_p384_mulx_u32(&x1223, &x1224, x9, (arg2[9])); + fiat_p384_mulx_u32(&x1225, &x1226, x9, (arg2[8])); + fiat_p384_mulx_u32(&x1227, &x1228, x9, (arg2[7])); + fiat_p384_mulx_u32(&x1229, &x1230, x9, (arg2[6])); + fiat_p384_mulx_u32(&x1231, &x1232, x9, (arg2[5])); + fiat_p384_mulx_u32(&x1233, &x1234, x9, (arg2[4])); + fiat_p384_mulx_u32(&x1235, &x1236, x9, (arg2[3])); + fiat_p384_mulx_u32(&x1237, &x1238, x9, (arg2[2])); + fiat_p384_mulx_u32(&x1239, &x1240, x9, (arg2[1])); + fiat_p384_mulx_u32(&x1241, &x1242, x9, (arg2[0])); + fiat_p384_addcarryx_u32(&x1243, &x1244, 0x0, x1242, x1239); + fiat_p384_addcarryx_u32(&x1245, &x1246, x1244, x1240, x1237); + fiat_p384_addcarryx_u32(&x1247, &x1248, x1246, x1238, x1235); + fiat_p384_addcarryx_u32(&x1249, &x1250, x1248, x1236, x1233); + fiat_p384_addcarryx_u32(&x1251, &x1252, x1250, x1234, x1231); + fiat_p384_addcarryx_u32(&x1253, &x1254, x1252, x1232, x1229); + fiat_p384_addcarryx_u32(&x1255, &x1256, x1254, x1230, x1227); + fiat_p384_addcarryx_u32(&x1257, &x1258, x1256, x1228, x1225); + fiat_p384_addcarryx_u32(&x1259, &x1260, x1258, x1226, x1223); + fiat_p384_addcarryx_u32(&x1261, &x1262, x1260, x1224, x1221); + fiat_p384_addcarryx_u32(&x1263, &x1264, x1262, x1222, x1219); + x1265 = (x1264 + x1220); + fiat_p384_addcarryx_u32(&x1266, &x1267, 0x0, x1194, x1241); + fiat_p384_addcarryx_u32(&x1268, &x1269, x1267, x1196, x1243); + fiat_p384_addcarryx_u32(&x1270, &x1271, x1269, x1198, x1245); + fiat_p384_addcarryx_u32(&x1272, &x1273, x1271, x1200, x1247); + fiat_p384_addcarryx_u32(&x1274, &x1275, x1273, x1202, x1249); + fiat_p384_addcarryx_u32(&x1276, &x1277, x1275, x1204, x1251); + fiat_p384_addcarryx_u32(&x1278, &x1279, x1277, x1206, x1253); + fiat_p384_addcarryx_u32(&x1280, &x1281, x1279, x1208, x1255); + fiat_p384_addcarryx_u32(&x1282, &x1283, x1281, x1210, x1257); + fiat_p384_addcarryx_u32(&x1284, &x1285, x1283, x1212, x1259); + fiat_p384_addcarryx_u32(&x1286, &x1287, x1285, x1214, x1261); + fiat_p384_addcarryx_u32(&x1288, &x1289, x1287, x1216, x1263); + fiat_p384_addcarryx_u32(&x1290, &x1291, x1289, x1218, x1265); + fiat_p384_mulx_u32(&x1292, &x1293, x1266, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1294, &x1295, x1266, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1296, &x1297, x1266, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1298, &x1299, x1266, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1300, &x1301, x1266, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1302, &x1303, x1266, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1304, &x1305, x1266, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1306, &x1307, x1266, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x1308, &x1309, x1266, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1310, &x1311, x1266, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x1312, &x1313, 0x0, x1309, x1306); + fiat_p384_addcarryx_u32(&x1314, &x1315, x1313, x1307, x1304); + fiat_p384_addcarryx_u32(&x1316, &x1317, x1315, x1305, x1302); + fiat_p384_addcarryx_u32(&x1318, &x1319, x1317, x1303, x1300); + fiat_p384_addcarryx_u32(&x1320, &x1321, x1319, x1301, x1298); + fiat_p384_addcarryx_u32(&x1322, &x1323, x1321, x1299, x1296); + fiat_p384_addcarryx_u32(&x1324, &x1325, x1323, x1297, x1294); + fiat_p384_addcarryx_u32(&x1326, &x1327, x1325, x1295, x1292); + x1328 = (x1327 + x1293); + fiat_p384_addcarryx_u32(&x1329, &x1330, 0x0, x1266, x1310); + fiat_p384_addcarryx_u32(&x1331, &x1332, x1330, x1268, x1311); + fiat_p384_addcarryx_u32(&x1333, &x1334, x1332, x1270, 0x0); + fiat_p384_addcarryx_u32(&x1335, &x1336, x1334, x1272, x1308); + fiat_p384_addcarryx_u32(&x1337, &x1338, x1336, x1274, x1312); + fiat_p384_addcarryx_u32(&x1339, &x1340, x1338, x1276, x1314); + fiat_p384_addcarryx_u32(&x1341, &x1342, x1340, x1278, x1316); + fiat_p384_addcarryx_u32(&x1343, &x1344, x1342, x1280, x1318); + fiat_p384_addcarryx_u32(&x1345, &x1346, x1344, x1282, x1320); + fiat_p384_addcarryx_u32(&x1347, &x1348, x1346, x1284, x1322); + fiat_p384_addcarryx_u32(&x1349, &x1350, x1348, x1286, x1324); + fiat_p384_addcarryx_u32(&x1351, &x1352, x1350, x1288, x1326); + fiat_p384_addcarryx_u32(&x1353, &x1354, x1352, x1290, x1328); + x1355 = ((uint32_t)x1354 + x1291); + fiat_p384_mulx_u32(&x1356, &x1357, x10, (arg2[11])); + fiat_p384_mulx_u32(&x1358, &x1359, x10, (arg2[10])); + fiat_p384_mulx_u32(&x1360, &x1361, x10, (arg2[9])); + fiat_p384_mulx_u32(&x1362, &x1363, x10, (arg2[8])); + fiat_p384_mulx_u32(&x1364, &x1365, x10, (arg2[7])); + fiat_p384_mulx_u32(&x1366, &x1367, x10, (arg2[6])); + fiat_p384_mulx_u32(&x1368, &x1369, x10, (arg2[5])); + fiat_p384_mulx_u32(&x1370, &x1371, x10, (arg2[4])); + fiat_p384_mulx_u32(&x1372, &x1373, x10, (arg2[3])); + fiat_p384_mulx_u32(&x1374, &x1375, x10, (arg2[2])); + fiat_p384_mulx_u32(&x1376, &x1377, x10, (arg2[1])); + fiat_p384_mulx_u32(&x1378, &x1379, x10, (arg2[0])); + fiat_p384_addcarryx_u32(&x1380, &x1381, 0x0, x1379, x1376); + fiat_p384_addcarryx_u32(&x1382, &x1383, x1381, x1377, x1374); + fiat_p384_addcarryx_u32(&x1384, &x1385, x1383, x1375, x1372); + fiat_p384_addcarryx_u32(&x1386, &x1387, x1385, x1373, x1370); + fiat_p384_addcarryx_u32(&x1388, &x1389, x1387, x1371, x1368); + fiat_p384_addcarryx_u32(&x1390, &x1391, x1389, x1369, x1366); + fiat_p384_addcarryx_u32(&x1392, &x1393, x1391, x1367, x1364); + fiat_p384_addcarryx_u32(&x1394, &x1395, x1393, x1365, x1362); + fiat_p384_addcarryx_u32(&x1396, &x1397, x1395, x1363, x1360); + fiat_p384_addcarryx_u32(&x1398, &x1399, x1397, x1361, x1358); + fiat_p384_addcarryx_u32(&x1400, &x1401, x1399, x1359, x1356); + x1402 = (x1401 + x1357); + fiat_p384_addcarryx_u32(&x1403, &x1404, 0x0, x1331, x1378); + fiat_p384_addcarryx_u32(&x1405, &x1406, x1404, x1333, x1380); + fiat_p384_addcarryx_u32(&x1407, &x1408, x1406, x1335, x1382); + fiat_p384_addcarryx_u32(&x1409, &x1410, x1408, x1337, x1384); + fiat_p384_addcarryx_u32(&x1411, &x1412, x1410, x1339, x1386); + fiat_p384_addcarryx_u32(&x1413, &x1414, x1412, x1341, x1388); + fiat_p384_addcarryx_u32(&x1415, &x1416, x1414, x1343, x1390); + fiat_p384_addcarryx_u32(&x1417, &x1418, x1416, x1345, x1392); + fiat_p384_addcarryx_u32(&x1419, &x1420, x1418, x1347, x1394); + fiat_p384_addcarryx_u32(&x1421, &x1422, x1420, x1349, x1396); + fiat_p384_addcarryx_u32(&x1423, &x1424, x1422, x1351, x1398); + fiat_p384_addcarryx_u32(&x1425, &x1426, x1424, x1353, x1400); + fiat_p384_addcarryx_u32(&x1427, &x1428, x1426, x1355, x1402); + fiat_p384_mulx_u32(&x1429, &x1430, x1403, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1431, &x1432, x1403, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1433, &x1434, x1403, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1435, &x1436, x1403, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1437, &x1438, x1403, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1439, &x1440, x1403, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1441, &x1442, x1403, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1443, &x1444, x1403, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x1445, &x1446, x1403, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1447, &x1448, x1403, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x1449, &x1450, 0x0, x1446, x1443); + fiat_p384_addcarryx_u32(&x1451, &x1452, x1450, x1444, x1441); + fiat_p384_addcarryx_u32(&x1453, &x1454, x1452, x1442, x1439); + fiat_p384_addcarryx_u32(&x1455, &x1456, x1454, x1440, x1437); + fiat_p384_addcarryx_u32(&x1457, &x1458, x1456, x1438, x1435); + fiat_p384_addcarryx_u32(&x1459, &x1460, x1458, x1436, x1433); + fiat_p384_addcarryx_u32(&x1461, &x1462, x1460, x1434, x1431); + fiat_p384_addcarryx_u32(&x1463, &x1464, x1462, x1432, x1429); + x1465 = (x1464 + x1430); + fiat_p384_addcarryx_u32(&x1466, &x1467, 0x0, x1403, x1447); + fiat_p384_addcarryx_u32(&x1468, &x1469, x1467, x1405, x1448); + fiat_p384_addcarryx_u32(&x1470, &x1471, x1469, x1407, 0x0); + fiat_p384_addcarryx_u32(&x1472, &x1473, x1471, x1409, x1445); + fiat_p384_addcarryx_u32(&x1474, &x1475, x1473, x1411, x1449); + fiat_p384_addcarryx_u32(&x1476, &x1477, x1475, x1413, x1451); + fiat_p384_addcarryx_u32(&x1478, &x1479, x1477, x1415, x1453); + fiat_p384_addcarryx_u32(&x1480, &x1481, x1479, x1417, x1455); + fiat_p384_addcarryx_u32(&x1482, &x1483, x1481, x1419, x1457); + fiat_p384_addcarryx_u32(&x1484, &x1485, x1483, x1421, x1459); + fiat_p384_addcarryx_u32(&x1486, &x1487, x1485, x1423, x1461); + fiat_p384_addcarryx_u32(&x1488, &x1489, x1487, x1425, x1463); + fiat_p384_addcarryx_u32(&x1490, &x1491, x1489, x1427, x1465); + x1492 = ((uint32_t)x1491 + x1428); + fiat_p384_mulx_u32(&x1493, &x1494, x11, (arg2[11])); + fiat_p384_mulx_u32(&x1495, &x1496, x11, (arg2[10])); + fiat_p384_mulx_u32(&x1497, &x1498, x11, (arg2[9])); + fiat_p384_mulx_u32(&x1499, &x1500, x11, (arg2[8])); + fiat_p384_mulx_u32(&x1501, &x1502, x11, (arg2[7])); + fiat_p384_mulx_u32(&x1503, &x1504, x11, (arg2[6])); + fiat_p384_mulx_u32(&x1505, &x1506, x11, (arg2[5])); + fiat_p384_mulx_u32(&x1507, &x1508, x11, (arg2[4])); + fiat_p384_mulx_u32(&x1509, &x1510, x11, (arg2[3])); + fiat_p384_mulx_u32(&x1511, &x1512, x11, (arg2[2])); + fiat_p384_mulx_u32(&x1513, &x1514, x11, (arg2[1])); + fiat_p384_mulx_u32(&x1515, &x1516, x11, (arg2[0])); + fiat_p384_addcarryx_u32(&x1517, &x1518, 0x0, x1516, x1513); + fiat_p384_addcarryx_u32(&x1519, &x1520, x1518, x1514, x1511); + fiat_p384_addcarryx_u32(&x1521, &x1522, x1520, x1512, x1509); + fiat_p384_addcarryx_u32(&x1523, &x1524, x1522, x1510, x1507); + fiat_p384_addcarryx_u32(&x1525, &x1526, x1524, x1508, x1505); + fiat_p384_addcarryx_u32(&x1527, &x1528, x1526, x1506, x1503); + fiat_p384_addcarryx_u32(&x1529, &x1530, x1528, x1504, x1501); + fiat_p384_addcarryx_u32(&x1531, &x1532, x1530, x1502, x1499); + fiat_p384_addcarryx_u32(&x1533, &x1534, x1532, x1500, x1497); + fiat_p384_addcarryx_u32(&x1535, &x1536, x1534, x1498, x1495); + fiat_p384_addcarryx_u32(&x1537, &x1538, x1536, x1496, x1493); + x1539 = (x1538 + x1494); + fiat_p384_addcarryx_u32(&x1540, &x1541, 0x0, x1468, x1515); + fiat_p384_addcarryx_u32(&x1542, &x1543, x1541, x1470, x1517); + fiat_p384_addcarryx_u32(&x1544, &x1545, x1543, x1472, x1519); + fiat_p384_addcarryx_u32(&x1546, &x1547, x1545, x1474, x1521); + fiat_p384_addcarryx_u32(&x1548, &x1549, x1547, x1476, x1523); + fiat_p384_addcarryx_u32(&x1550, &x1551, x1549, x1478, x1525); + fiat_p384_addcarryx_u32(&x1552, &x1553, x1551, x1480, x1527); + fiat_p384_addcarryx_u32(&x1554, &x1555, x1553, x1482, x1529); + fiat_p384_addcarryx_u32(&x1556, &x1557, x1555, x1484, x1531); + fiat_p384_addcarryx_u32(&x1558, &x1559, x1557, x1486, x1533); + fiat_p384_addcarryx_u32(&x1560, &x1561, x1559, x1488, x1535); + fiat_p384_addcarryx_u32(&x1562, &x1563, x1561, x1490, x1537); + fiat_p384_addcarryx_u32(&x1564, &x1565, x1563, x1492, x1539); + fiat_p384_mulx_u32(&x1566, &x1567, x1540, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1568, &x1569, x1540, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1570, &x1571, x1540, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1572, &x1573, x1540, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1574, &x1575, x1540, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1576, &x1577, x1540, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1578, &x1579, x1540, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1580, &x1581, x1540, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x1582, &x1583, x1540, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1584, &x1585, x1540, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x1586, &x1587, 0x0, x1583, x1580); + fiat_p384_addcarryx_u32(&x1588, &x1589, x1587, x1581, x1578); + fiat_p384_addcarryx_u32(&x1590, &x1591, x1589, x1579, x1576); + fiat_p384_addcarryx_u32(&x1592, &x1593, x1591, x1577, x1574); + fiat_p384_addcarryx_u32(&x1594, &x1595, x1593, x1575, x1572); + fiat_p384_addcarryx_u32(&x1596, &x1597, x1595, x1573, x1570); + fiat_p384_addcarryx_u32(&x1598, &x1599, x1597, x1571, x1568); + fiat_p384_addcarryx_u32(&x1600, &x1601, x1599, x1569, x1566); + x1602 = (x1601 + x1567); + fiat_p384_addcarryx_u32(&x1603, &x1604, 0x0, x1540, x1584); + fiat_p384_addcarryx_u32(&x1605, &x1606, x1604, x1542, x1585); + fiat_p384_addcarryx_u32(&x1607, &x1608, x1606, x1544, 0x0); + fiat_p384_addcarryx_u32(&x1609, &x1610, x1608, x1546, x1582); + fiat_p384_addcarryx_u32(&x1611, &x1612, x1610, x1548, x1586); + fiat_p384_addcarryx_u32(&x1613, &x1614, x1612, x1550, x1588); + fiat_p384_addcarryx_u32(&x1615, &x1616, x1614, x1552, x1590); + fiat_p384_addcarryx_u32(&x1617, &x1618, x1616, x1554, x1592); + fiat_p384_addcarryx_u32(&x1619, &x1620, x1618, x1556, x1594); + fiat_p384_addcarryx_u32(&x1621, &x1622, x1620, x1558, x1596); + fiat_p384_addcarryx_u32(&x1623, &x1624, x1622, x1560, x1598); + fiat_p384_addcarryx_u32(&x1625, &x1626, x1624, x1562, x1600); + fiat_p384_addcarryx_u32(&x1627, &x1628, x1626, x1564, x1602); + x1629 = ((uint32_t)x1628 + x1565); + fiat_p384_subborrowx_u32(&x1630, &x1631, 0x0, x1605, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1632, &x1633, x1631, x1607, 0x0); + fiat_p384_subborrowx_u32(&x1634, &x1635, x1633, x1609, 0x0); + fiat_p384_subborrowx_u32(&x1636, &x1637, x1635, x1611, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1638, &x1639, x1637, x1613, UINT32_C(0xfffffffe)); + fiat_p384_subborrowx_u32(&x1640, &x1641, x1639, x1615, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1642, &x1643, x1641, x1617, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1644, &x1645, x1643, x1619, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1646, &x1647, x1645, x1621, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1648, &x1649, x1647, x1623, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1650, &x1651, x1649, x1625, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1652, &x1653, x1651, x1627, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1654, &x1655, x1653, x1629, 0x0); + fiat_p384_cmovznz_u32(&x1656, x1655, x1630, x1605); + fiat_p384_cmovznz_u32(&x1657, x1655, x1632, x1607); + fiat_p384_cmovznz_u32(&x1658, x1655, x1634, x1609); + fiat_p384_cmovznz_u32(&x1659, x1655, x1636, x1611); + fiat_p384_cmovznz_u32(&x1660, x1655, x1638, x1613); + fiat_p384_cmovznz_u32(&x1661, x1655, x1640, x1615); + fiat_p384_cmovznz_u32(&x1662, x1655, x1642, x1617); + fiat_p384_cmovznz_u32(&x1663, x1655, x1644, x1619); + fiat_p384_cmovznz_u32(&x1664, x1655, x1646, x1621); + fiat_p384_cmovznz_u32(&x1665, x1655, x1648, x1623); + fiat_p384_cmovznz_u32(&x1666, x1655, x1650, x1625); + fiat_p384_cmovznz_u32(&x1667, x1655, x1652, x1627); + out1[0] = x1656; + out1[1] = x1657; + out1[2] = x1658; + out1[3] = x1659; + out1[4] = x1660; + out1[5] = x1661; + out1[6] = x1662; + out1[7] = x1663; + out1[8] = x1664; + out1[9] = x1665; + out1[10] = x1666; + out1[11] = x1667; +} + +/* + * The function fiat_p384_square squares a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p384_square(uint32_t out1[12], const uint32_t arg1[12]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint32_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + fiat_p384_uint1 x38; + uint32_t x39; + fiat_p384_uint1 x40; + uint32_t x41; + fiat_p384_uint1 x42; + uint32_t x43; + fiat_p384_uint1 x44; + uint32_t x45; + fiat_p384_uint1 x46; + uint32_t x47; + fiat_p384_uint1 x48; + uint32_t x49; + fiat_p384_uint1 x50; + uint32_t x51; + fiat_p384_uint1 x52; + uint32_t x53; + fiat_p384_uint1 x54; + uint32_t x55; + fiat_p384_uint1 x56; + uint32_t x57; + fiat_p384_uint1 x58; + uint32_t x59; + uint32_t x60; + uint32_t x61; + uint32_t x62; + uint32_t x63; + uint32_t x64; + uint32_t x65; + uint32_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + fiat_p384_uint1 x81; + uint32_t x82; + fiat_p384_uint1 x83; + uint32_t x84; + fiat_p384_uint1 x85; + uint32_t x86; + fiat_p384_uint1 x87; + uint32_t x88; + fiat_p384_uint1 x89; + uint32_t x90; + fiat_p384_uint1 x91; + uint32_t x92; + fiat_p384_uint1 x93; + uint32_t x94; + fiat_p384_uint1 x95; + uint32_t x96; + uint32_t x97; + fiat_p384_uint1 x98; + uint32_t x99; + fiat_p384_uint1 x100; + uint32_t x101; + fiat_p384_uint1 x102; + uint32_t x103; + fiat_p384_uint1 x104; + uint32_t x105; + fiat_p384_uint1 x106; + uint32_t x107; + fiat_p384_uint1 x108; + uint32_t x109; + fiat_p384_uint1 x110; + uint32_t x111; + fiat_p384_uint1 x112; + uint32_t x113; + fiat_p384_uint1 x114; + uint32_t x115; + fiat_p384_uint1 x116; + uint32_t x117; + fiat_p384_uint1 x118; + uint32_t x119; + fiat_p384_uint1 x120; + uint32_t x121; + fiat_p384_uint1 x122; + uint32_t x123; + uint32_t x124; + uint32_t x125; + uint32_t x126; + uint32_t x127; + uint32_t x128; + uint32_t x129; + uint32_t x130; + uint32_t x131; + uint32_t x132; + uint32_t x133; + uint32_t x134; + uint32_t x135; + uint32_t x136; + uint32_t x137; + uint32_t x138; + uint32_t x139; + uint32_t x140; + uint32_t x141; + uint32_t x142; + uint32_t x143; + uint32_t x144; + uint32_t x145; + uint32_t x146; + uint32_t x147; + fiat_p384_uint1 x148; + uint32_t x149; + fiat_p384_uint1 x150; + uint32_t x151; + fiat_p384_uint1 x152; + uint32_t x153; + fiat_p384_uint1 x154; + uint32_t x155; + fiat_p384_uint1 x156; + uint32_t x157; + fiat_p384_uint1 x158; + uint32_t x159; + fiat_p384_uint1 x160; + uint32_t x161; + fiat_p384_uint1 x162; + uint32_t x163; + fiat_p384_uint1 x164; + uint32_t x165; + fiat_p384_uint1 x166; + uint32_t x167; + fiat_p384_uint1 x168; + uint32_t x169; + uint32_t x170; + fiat_p384_uint1 x171; + uint32_t x172; + fiat_p384_uint1 x173; + uint32_t x174; + fiat_p384_uint1 x175; + uint32_t x176; + fiat_p384_uint1 x177; + uint32_t x178; + fiat_p384_uint1 x179; + uint32_t x180; + fiat_p384_uint1 x181; + uint32_t x182; + fiat_p384_uint1 x183; + uint32_t x184; + fiat_p384_uint1 x185; + uint32_t x186; + fiat_p384_uint1 x187; + uint32_t x188; + fiat_p384_uint1 x189; + uint32_t x190; + fiat_p384_uint1 x191; + uint32_t x192; + fiat_p384_uint1 x193; + uint32_t x194; + fiat_p384_uint1 x195; + uint32_t x196; + uint32_t x197; + uint32_t x198; + uint32_t x199; + uint32_t x200; + uint32_t x201; + uint32_t x202; + uint32_t x203; + uint32_t x204; + uint32_t x205; + uint32_t x206; + uint32_t x207; + uint32_t x208; + uint32_t x209; + uint32_t x210; + uint32_t x211; + uint32_t x212; + uint32_t x213; + uint32_t x214; + uint32_t x215; + uint32_t x216; + fiat_p384_uint1 x217; + uint32_t x218; + fiat_p384_uint1 x219; + uint32_t x220; + fiat_p384_uint1 x221; + uint32_t x222; + fiat_p384_uint1 x223; + uint32_t x224; + fiat_p384_uint1 x225; + uint32_t x226; + fiat_p384_uint1 x227; + uint32_t x228; + fiat_p384_uint1 x229; + uint32_t x230; + fiat_p384_uint1 x231; + uint32_t x232; + uint32_t x233; + fiat_p384_uint1 x234; + uint32_t x235; + fiat_p384_uint1 x236; + uint32_t x237; + fiat_p384_uint1 x238; + uint32_t x239; + fiat_p384_uint1 x240; + uint32_t x241; + fiat_p384_uint1 x242; + uint32_t x243; + fiat_p384_uint1 x244; + uint32_t x245; + fiat_p384_uint1 x246; + uint32_t x247; + fiat_p384_uint1 x248; + uint32_t x249; + fiat_p384_uint1 x250; + uint32_t x251; + fiat_p384_uint1 x252; + uint32_t x253; + fiat_p384_uint1 x254; + uint32_t x255; + fiat_p384_uint1 x256; + uint32_t x257; + fiat_p384_uint1 x258; + uint32_t x259; + uint32_t x260; + uint32_t x261; + uint32_t x262; + uint32_t x263; + uint32_t x264; + uint32_t x265; + uint32_t x266; + uint32_t x267; + uint32_t x268; + uint32_t x269; + uint32_t x270; + uint32_t x271; + uint32_t x272; + uint32_t x273; + uint32_t x274; + uint32_t x275; + uint32_t x276; + uint32_t x277; + uint32_t x278; + uint32_t x279; + uint32_t x280; + uint32_t x281; + uint32_t x282; + uint32_t x283; + uint32_t x284; + fiat_p384_uint1 x285; + uint32_t x286; + fiat_p384_uint1 x287; + uint32_t x288; + fiat_p384_uint1 x289; + uint32_t x290; + fiat_p384_uint1 x291; + uint32_t x292; + fiat_p384_uint1 x293; + uint32_t x294; + fiat_p384_uint1 x295; + uint32_t x296; + fiat_p384_uint1 x297; + uint32_t x298; + fiat_p384_uint1 x299; + uint32_t x300; + fiat_p384_uint1 x301; + uint32_t x302; + fiat_p384_uint1 x303; + uint32_t x304; + fiat_p384_uint1 x305; + uint32_t x306; + uint32_t x307; + fiat_p384_uint1 x308; + uint32_t x309; + fiat_p384_uint1 x310; + uint32_t x311; + fiat_p384_uint1 x312; + uint32_t x313; + fiat_p384_uint1 x314; + uint32_t x315; + fiat_p384_uint1 x316; + uint32_t x317; + fiat_p384_uint1 x318; + uint32_t x319; + fiat_p384_uint1 x320; + uint32_t x321; + fiat_p384_uint1 x322; + uint32_t x323; + fiat_p384_uint1 x324; + uint32_t x325; + fiat_p384_uint1 x326; + uint32_t x327; + fiat_p384_uint1 x328; + uint32_t x329; + fiat_p384_uint1 x330; + uint32_t x331; + fiat_p384_uint1 x332; + uint32_t x333; + uint32_t x334; + uint32_t x335; + uint32_t x336; + uint32_t x337; + uint32_t x338; + uint32_t x339; + uint32_t x340; + uint32_t x341; + uint32_t x342; + uint32_t x343; + uint32_t x344; + uint32_t x345; + uint32_t x346; + uint32_t x347; + uint32_t x348; + uint32_t x349; + uint32_t x350; + uint32_t x351; + uint32_t x352; + uint32_t x353; + fiat_p384_uint1 x354; + uint32_t x355; + fiat_p384_uint1 x356; + uint32_t x357; + fiat_p384_uint1 x358; + uint32_t x359; + fiat_p384_uint1 x360; + uint32_t x361; + fiat_p384_uint1 x362; + uint32_t x363; + fiat_p384_uint1 x364; + uint32_t x365; + fiat_p384_uint1 x366; + uint32_t x367; + fiat_p384_uint1 x368; + uint32_t x369; + uint32_t x370; + fiat_p384_uint1 x371; + uint32_t x372; + fiat_p384_uint1 x373; + uint32_t x374; + fiat_p384_uint1 x375; + uint32_t x376; + fiat_p384_uint1 x377; + uint32_t x378; + fiat_p384_uint1 x379; + uint32_t x380; + fiat_p384_uint1 x381; + uint32_t x382; + fiat_p384_uint1 x383; + uint32_t x384; + fiat_p384_uint1 x385; + uint32_t x386; + fiat_p384_uint1 x387; + uint32_t x388; + fiat_p384_uint1 x389; + uint32_t x390; + fiat_p384_uint1 x391; + uint32_t x392; + fiat_p384_uint1 x393; + uint32_t x394; + fiat_p384_uint1 x395; + uint32_t x396; + uint32_t x397; + uint32_t x398; + uint32_t x399; + uint32_t x400; + uint32_t x401; + uint32_t x402; + uint32_t x403; + uint32_t x404; + uint32_t x405; + uint32_t x406; + uint32_t x407; + uint32_t x408; + uint32_t x409; + uint32_t x410; + uint32_t x411; + uint32_t x412; + uint32_t x413; + uint32_t x414; + uint32_t x415; + uint32_t x416; + uint32_t x417; + uint32_t x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + fiat_p384_uint1 x422; + uint32_t x423; + fiat_p384_uint1 x424; + uint32_t x425; + fiat_p384_uint1 x426; + uint32_t x427; + fiat_p384_uint1 x428; + uint32_t x429; + fiat_p384_uint1 x430; + uint32_t x431; + fiat_p384_uint1 x432; + uint32_t x433; + fiat_p384_uint1 x434; + uint32_t x435; + fiat_p384_uint1 x436; + uint32_t x437; + fiat_p384_uint1 x438; + uint32_t x439; + fiat_p384_uint1 x440; + uint32_t x441; + fiat_p384_uint1 x442; + uint32_t x443; + uint32_t x444; + fiat_p384_uint1 x445; + uint32_t x446; + fiat_p384_uint1 x447; + uint32_t x448; + fiat_p384_uint1 x449; + uint32_t x450; + fiat_p384_uint1 x451; + uint32_t x452; + fiat_p384_uint1 x453; + uint32_t x454; + fiat_p384_uint1 x455; + uint32_t x456; + fiat_p384_uint1 x457; + uint32_t x458; + fiat_p384_uint1 x459; + uint32_t x460; + fiat_p384_uint1 x461; + uint32_t x462; + fiat_p384_uint1 x463; + uint32_t x464; + fiat_p384_uint1 x465; + uint32_t x466; + fiat_p384_uint1 x467; + uint32_t x468; + fiat_p384_uint1 x469; + uint32_t x470; + uint32_t x471; + uint32_t x472; + uint32_t x473; + uint32_t x474; + uint32_t x475; + uint32_t x476; + uint32_t x477; + uint32_t x478; + uint32_t x479; + uint32_t x480; + uint32_t x481; + uint32_t x482; + uint32_t x483; + uint32_t x484; + uint32_t x485; + uint32_t x486; + uint32_t x487; + uint32_t x488; + uint32_t x489; + uint32_t x490; + fiat_p384_uint1 x491; + uint32_t x492; + fiat_p384_uint1 x493; + uint32_t x494; + fiat_p384_uint1 x495; + uint32_t x496; + fiat_p384_uint1 x497; + uint32_t x498; + fiat_p384_uint1 x499; + uint32_t x500; + fiat_p384_uint1 x501; + uint32_t x502; + fiat_p384_uint1 x503; + uint32_t x504; + fiat_p384_uint1 x505; + uint32_t x506; + uint32_t x507; + fiat_p384_uint1 x508; + uint32_t x509; + fiat_p384_uint1 x510; + uint32_t x511; + fiat_p384_uint1 x512; + uint32_t x513; + fiat_p384_uint1 x514; + uint32_t x515; + fiat_p384_uint1 x516; + uint32_t x517; + fiat_p384_uint1 x518; + uint32_t x519; + fiat_p384_uint1 x520; + uint32_t x521; + fiat_p384_uint1 x522; + uint32_t x523; + fiat_p384_uint1 x524; + uint32_t x525; + fiat_p384_uint1 x526; + uint32_t x527; + fiat_p384_uint1 x528; + uint32_t x529; + fiat_p384_uint1 x530; + uint32_t x531; + fiat_p384_uint1 x532; + uint32_t x533; + uint32_t x534; + uint32_t x535; + uint32_t x536; + uint32_t x537; + uint32_t x538; + uint32_t x539; + uint32_t x540; + uint32_t x541; + uint32_t x542; + uint32_t x543; + uint32_t x544; + uint32_t x545; + uint32_t x546; + uint32_t x547; + uint32_t x548; + uint32_t x549; + uint32_t x550; + uint32_t x551; + uint32_t x552; + uint32_t x553; + uint32_t x554; + uint32_t x555; + uint32_t x556; + uint32_t x557; + uint32_t x558; + fiat_p384_uint1 x559; + uint32_t x560; + fiat_p384_uint1 x561; + uint32_t x562; + fiat_p384_uint1 x563; + uint32_t x564; + fiat_p384_uint1 x565; + uint32_t x566; + fiat_p384_uint1 x567; + uint32_t x568; + fiat_p384_uint1 x569; + uint32_t x570; + fiat_p384_uint1 x571; + uint32_t x572; + fiat_p384_uint1 x573; + uint32_t x574; + fiat_p384_uint1 x575; + uint32_t x576; + fiat_p384_uint1 x577; + uint32_t x578; + fiat_p384_uint1 x579; + uint32_t x580; + uint32_t x581; + fiat_p384_uint1 x582; + uint32_t x583; + fiat_p384_uint1 x584; + uint32_t x585; + fiat_p384_uint1 x586; + uint32_t x587; + fiat_p384_uint1 x588; + uint32_t x589; + fiat_p384_uint1 x590; + uint32_t x591; + fiat_p384_uint1 x592; + uint32_t x593; + fiat_p384_uint1 x594; + uint32_t x595; + fiat_p384_uint1 x596; + uint32_t x597; + fiat_p384_uint1 x598; + uint32_t x599; + fiat_p384_uint1 x600; + uint32_t x601; + fiat_p384_uint1 x602; + uint32_t x603; + fiat_p384_uint1 x604; + uint32_t x605; + fiat_p384_uint1 x606; + uint32_t x607; + uint32_t x608; + uint32_t x609; + uint32_t x610; + uint32_t x611; + uint32_t x612; + uint32_t x613; + uint32_t x614; + uint32_t x615; + uint32_t x616; + uint32_t x617; + uint32_t x618; + uint32_t x619; + uint32_t x620; + uint32_t x621; + uint32_t x622; + uint32_t x623; + uint32_t x624; + uint32_t x625; + uint32_t x626; + uint32_t x627; + fiat_p384_uint1 x628; + uint32_t x629; + fiat_p384_uint1 x630; + uint32_t x631; + fiat_p384_uint1 x632; + uint32_t x633; + fiat_p384_uint1 x634; + uint32_t x635; + fiat_p384_uint1 x636; + uint32_t x637; + fiat_p384_uint1 x638; + uint32_t x639; + fiat_p384_uint1 x640; + uint32_t x641; + fiat_p384_uint1 x642; + uint32_t x643; + uint32_t x644; + fiat_p384_uint1 x645; + uint32_t x646; + fiat_p384_uint1 x647; + uint32_t x648; + fiat_p384_uint1 x649; + uint32_t x650; + fiat_p384_uint1 x651; + uint32_t x652; + fiat_p384_uint1 x653; + uint32_t x654; + fiat_p384_uint1 x655; + uint32_t x656; + fiat_p384_uint1 x657; + uint32_t x658; + fiat_p384_uint1 x659; + uint32_t x660; + fiat_p384_uint1 x661; + uint32_t x662; + fiat_p384_uint1 x663; + uint32_t x664; + fiat_p384_uint1 x665; + uint32_t x666; + fiat_p384_uint1 x667; + uint32_t x668; + fiat_p384_uint1 x669; + uint32_t x670; + uint32_t x671; + uint32_t x672; + uint32_t x673; + uint32_t x674; + uint32_t x675; + uint32_t x676; + uint32_t x677; + uint32_t x678; + uint32_t x679; + uint32_t x680; + uint32_t x681; + uint32_t x682; + uint32_t x683; + uint32_t x684; + uint32_t x685; + uint32_t x686; + uint32_t x687; + uint32_t x688; + uint32_t x689; + uint32_t x690; + uint32_t x691; + uint32_t x692; + uint32_t x693; + uint32_t x694; + uint32_t x695; + fiat_p384_uint1 x696; + uint32_t x697; + fiat_p384_uint1 x698; + uint32_t x699; + fiat_p384_uint1 x700; + uint32_t x701; + fiat_p384_uint1 x702; + uint32_t x703; + fiat_p384_uint1 x704; + uint32_t x705; + fiat_p384_uint1 x706; + uint32_t x707; + fiat_p384_uint1 x708; + uint32_t x709; + fiat_p384_uint1 x710; + uint32_t x711; + fiat_p384_uint1 x712; + uint32_t x713; + fiat_p384_uint1 x714; + uint32_t x715; + fiat_p384_uint1 x716; + uint32_t x717; + uint32_t x718; + fiat_p384_uint1 x719; + uint32_t x720; + fiat_p384_uint1 x721; + uint32_t x722; + fiat_p384_uint1 x723; + uint32_t x724; + fiat_p384_uint1 x725; + uint32_t x726; + fiat_p384_uint1 x727; + uint32_t x728; + fiat_p384_uint1 x729; + uint32_t x730; + fiat_p384_uint1 x731; + uint32_t x732; + fiat_p384_uint1 x733; + uint32_t x734; + fiat_p384_uint1 x735; + uint32_t x736; + fiat_p384_uint1 x737; + uint32_t x738; + fiat_p384_uint1 x739; + uint32_t x740; + fiat_p384_uint1 x741; + uint32_t x742; + fiat_p384_uint1 x743; + uint32_t x744; + uint32_t x745; + uint32_t x746; + uint32_t x747; + uint32_t x748; + uint32_t x749; + uint32_t x750; + uint32_t x751; + uint32_t x752; + uint32_t x753; + uint32_t x754; + uint32_t x755; + uint32_t x756; + uint32_t x757; + uint32_t x758; + uint32_t x759; + uint32_t x760; + uint32_t x761; + uint32_t x762; + uint32_t x763; + uint32_t x764; + fiat_p384_uint1 x765; + uint32_t x766; + fiat_p384_uint1 x767; + uint32_t x768; + fiat_p384_uint1 x769; + uint32_t x770; + fiat_p384_uint1 x771; + uint32_t x772; + fiat_p384_uint1 x773; + uint32_t x774; + fiat_p384_uint1 x775; + uint32_t x776; + fiat_p384_uint1 x777; + uint32_t x778; + fiat_p384_uint1 x779; + uint32_t x780; + uint32_t x781; + fiat_p384_uint1 x782; + uint32_t x783; + fiat_p384_uint1 x784; + uint32_t x785; + fiat_p384_uint1 x786; + uint32_t x787; + fiat_p384_uint1 x788; + uint32_t x789; + fiat_p384_uint1 x790; + uint32_t x791; + fiat_p384_uint1 x792; + uint32_t x793; + fiat_p384_uint1 x794; + uint32_t x795; + fiat_p384_uint1 x796; + uint32_t x797; + fiat_p384_uint1 x798; + uint32_t x799; + fiat_p384_uint1 x800; + uint32_t x801; + fiat_p384_uint1 x802; + uint32_t x803; + fiat_p384_uint1 x804; + uint32_t x805; + fiat_p384_uint1 x806; + uint32_t x807; + uint32_t x808; + uint32_t x809; + uint32_t x810; + uint32_t x811; + uint32_t x812; + uint32_t x813; + uint32_t x814; + uint32_t x815; + uint32_t x816; + uint32_t x817; + uint32_t x818; + uint32_t x819; + uint32_t x820; + uint32_t x821; + uint32_t x822; + uint32_t x823; + uint32_t x824; + uint32_t x825; + uint32_t x826; + uint32_t x827; + uint32_t x828; + uint32_t x829; + uint32_t x830; + uint32_t x831; + uint32_t x832; + fiat_p384_uint1 x833; + uint32_t x834; + fiat_p384_uint1 x835; + uint32_t x836; + fiat_p384_uint1 x837; + uint32_t x838; + fiat_p384_uint1 x839; + uint32_t x840; + fiat_p384_uint1 x841; + uint32_t x842; + fiat_p384_uint1 x843; + uint32_t x844; + fiat_p384_uint1 x845; + uint32_t x846; + fiat_p384_uint1 x847; + uint32_t x848; + fiat_p384_uint1 x849; + uint32_t x850; + fiat_p384_uint1 x851; + uint32_t x852; + fiat_p384_uint1 x853; + uint32_t x854; + uint32_t x855; + fiat_p384_uint1 x856; + uint32_t x857; + fiat_p384_uint1 x858; + uint32_t x859; + fiat_p384_uint1 x860; + uint32_t x861; + fiat_p384_uint1 x862; + uint32_t x863; + fiat_p384_uint1 x864; + uint32_t x865; + fiat_p384_uint1 x866; + uint32_t x867; + fiat_p384_uint1 x868; + uint32_t x869; + fiat_p384_uint1 x870; + uint32_t x871; + fiat_p384_uint1 x872; + uint32_t x873; + fiat_p384_uint1 x874; + uint32_t x875; + fiat_p384_uint1 x876; + uint32_t x877; + fiat_p384_uint1 x878; + uint32_t x879; + fiat_p384_uint1 x880; + uint32_t x881; + uint32_t x882; + uint32_t x883; + uint32_t x884; + uint32_t x885; + uint32_t x886; + uint32_t x887; + uint32_t x888; + uint32_t x889; + uint32_t x890; + uint32_t x891; + uint32_t x892; + uint32_t x893; + uint32_t x894; + uint32_t x895; + uint32_t x896; + uint32_t x897; + uint32_t x898; + uint32_t x899; + uint32_t x900; + uint32_t x901; + fiat_p384_uint1 x902; + uint32_t x903; + fiat_p384_uint1 x904; + uint32_t x905; + fiat_p384_uint1 x906; + uint32_t x907; + fiat_p384_uint1 x908; + uint32_t x909; + fiat_p384_uint1 x910; + uint32_t x911; + fiat_p384_uint1 x912; + uint32_t x913; + fiat_p384_uint1 x914; + uint32_t x915; + fiat_p384_uint1 x916; + uint32_t x917; + uint32_t x918; + fiat_p384_uint1 x919; + uint32_t x920; + fiat_p384_uint1 x921; + uint32_t x922; + fiat_p384_uint1 x923; + uint32_t x924; + fiat_p384_uint1 x925; + uint32_t x926; + fiat_p384_uint1 x927; + uint32_t x928; + fiat_p384_uint1 x929; + uint32_t x930; + fiat_p384_uint1 x931; + uint32_t x932; + fiat_p384_uint1 x933; + uint32_t x934; + fiat_p384_uint1 x935; + uint32_t x936; + fiat_p384_uint1 x937; + uint32_t x938; + fiat_p384_uint1 x939; + uint32_t x940; + fiat_p384_uint1 x941; + uint32_t x942; + fiat_p384_uint1 x943; + uint32_t x944; + uint32_t x945; + uint32_t x946; + uint32_t x947; + uint32_t x948; + uint32_t x949; + uint32_t x950; + uint32_t x951; + uint32_t x952; + uint32_t x953; + uint32_t x954; + uint32_t x955; + uint32_t x956; + uint32_t x957; + uint32_t x958; + uint32_t x959; + uint32_t x960; + uint32_t x961; + uint32_t x962; + uint32_t x963; + uint32_t x964; + uint32_t x965; + uint32_t x966; + uint32_t x967; + uint32_t x968; + uint32_t x969; + fiat_p384_uint1 x970; + uint32_t x971; + fiat_p384_uint1 x972; + uint32_t x973; + fiat_p384_uint1 x974; + uint32_t x975; + fiat_p384_uint1 x976; + uint32_t x977; + fiat_p384_uint1 x978; + uint32_t x979; + fiat_p384_uint1 x980; + uint32_t x981; + fiat_p384_uint1 x982; + uint32_t x983; + fiat_p384_uint1 x984; + uint32_t x985; + fiat_p384_uint1 x986; + uint32_t x987; + fiat_p384_uint1 x988; + uint32_t x989; + fiat_p384_uint1 x990; + uint32_t x991; + uint32_t x992; + fiat_p384_uint1 x993; + uint32_t x994; + fiat_p384_uint1 x995; + uint32_t x996; + fiat_p384_uint1 x997; + uint32_t x998; + fiat_p384_uint1 x999; + uint32_t x1000; + fiat_p384_uint1 x1001; + uint32_t x1002; + fiat_p384_uint1 x1003; + uint32_t x1004; + fiat_p384_uint1 x1005; + uint32_t x1006; + fiat_p384_uint1 x1007; + uint32_t x1008; + fiat_p384_uint1 x1009; + uint32_t x1010; + fiat_p384_uint1 x1011; + uint32_t x1012; + fiat_p384_uint1 x1013; + uint32_t x1014; + fiat_p384_uint1 x1015; + uint32_t x1016; + fiat_p384_uint1 x1017; + uint32_t x1018; + uint32_t x1019; + uint32_t x1020; + uint32_t x1021; + uint32_t x1022; + uint32_t x1023; + uint32_t x1024; + uint32_t x1025; + uint32_t x1026; + uint32_t x1027; + uint32_t x1028; + uint32_t x1029; + uint32_t x1030; + uint32_t x1031; + uint32_t x1032; + uint32_t x1033; + uint32_t x1034; + uint32_t x1035; + uint32_t x1036; + uint32_t x1037; + uint32_t x1038; + fiat_p384_uint1 x1039; + uint32_t x1040; + fiat_p384_uint1 x1041; + uint32_t x1042; + fiat_p384_uint1 x1043; + uint32_t x1044; + fiat_p384_uint1 x1045; + uint32_t x1046; + fiat_p384_uint1 x1047; + uint32_t x1048; + fiat_p384_uint1 x1049; + uint32_t x1050; + fiat_p384_uint1 x1051; + uint32_t x1052; + fiat_p384_uint1 x1053; + uint32_t x1054; + uint32_t x1055; + fiat_p384_uint1 x1056; + uint32_t x1057; + fiat_p384_uint1 x1058; + uint32_t x1059; + fiat_p384_uint1 x1060; + uint32_t x1061; + fiat_p384_uint1 x1062; + uint32_t x1063; + fiat_p384_uint1 x1064; + uint32_t x1065; + fiat_p384_uint1 x1066; + uint32_t x1067; + fiat_p384_uint1 x1068; + uint32_t x1069; + fiat_p384_uint1 x1070; + uint32_t x1071; + fiat_p384_uint1 x1072; + uint32_t x1073; + fiat_p384_uint1 x1074; + uint32_t x1075; + fiat_p384_uint1 x1076; + uint32_t x1077; + fiat_p384_uint1 x1078; + uint32_t x1079; + fiat_p384_uint1 x1080; + uint32_t x1081; + uint32_t x1082; + uint32_t x1083; + uint32_t x1084; + uint32_t x1085; + uint32_t x1086; + uint32_t x1087; + uint32_t x1088; + uint32_t x1089; + uint32_t x1090; + uint32_t x1091; + uint32_t x1092; + uint32_t x1093; + uint32_t x1094; + uint32_t x1095; + uint32_t x1096; + uint32_t x1097; + uint32_t x1098; + uint32_t x1099; + uint32_t x1100; + uint32_t x1101; + uint32_t x1102; + uint32_t x1103; + uint32_t x1104; + uint32_t x1105; + uint32_t x1106; + fiat_p384_uint1 x1107; + uint32_t x1108; + fiat_p384_uint1 x1109; + uint32_t x1110; + fiat_p384_uint1 x1111; + uint32_t x1112; + fiat_p384_uint1 x1113; + uint32_t x1114; + fiat_p384_uint1 x1115; + uint32_t x1116; + fiat_p384_uint1 x1117; + uint32_t x1118; + fiat_p384_uint1 x1119; + uint32_t x1120; + fiat_p384_uint1 x1121; + uint32_t x1122; + fiat_p384_uint1 x1123; + uint32_t x1124; + fiat_p384_uint1 x1125; + uint32_t x1126; + fiat_p384_uint1 x1127; + uint32_t x1128; + uint32_t x1129; + fiat_p384_uint1 x1130; + uint32_t x1131; + fiat_p384_uint1 x1132; + uint32_t x1133; + fiat_p384_uint1 x1134; + uint32_t x1135; + fiat_p384_uint1 x1136; + uint32_t x1137; + fiat_p384_uint1 x1138; + uint32_t x1139; + fiat_p384_uint1 x1140; + uint32_t x1141; + fiat_p384_uint1 x1142; + uint32_t x1143; + fiat_p384_uint1 x1144; + uint32_t x1145; + fiat_p384_uint1 x1146; + uint32_t x1147; + fiat_p384_uint1 x1148; + uint32_t x1149; + fiat_p384_uint1 x1150; + uint32_t x1151; + fiat_p384_uint1 x1152; + uint32_t x1153; + fiat_p384_uint1 x1154; + uint32_t x1155; + uint32_t x1156; + uint32_t x1157; + uint32_t x1158; + uint32_t x1159; + uint32_t x1160; + uint32_t x1161; + uint32_t x1162; + uint32_t x1163; + uint32_t x1164; + uint32_t x1165; + uint32_t x1166; + uint32_t x1167; + uint32_t x1168; + uint32_t x1169; + uint32_t x1170; + uint32_t x1171; + uint32_t x1172; + uint32_t x1173; + uint32_t x1174; + uint32_t x1175; + fiat_p384_uint1 x1176; + uint32_t x1177; + fiat_p384_uint1 x1178; + uint32_t x1179; + fiat_p384_uint1 x1180; + uint32_t x1181; + fiat_p384_uint1 x1182; + uint32_t x1183; + fiat_p384_uint1 x1184; + uint32_t x1185; + fiat_p384_uint1 x1186; + uint32_t x1187; + fiat_p384_uint1 x1188; + uint32_t x1189; + fiat_p384_uint1 x1190; + uint32_t x1191; + uint32_t x1192; + fiat_p384_uint1 x1193; + uint32_t x1194; + fiat_p384_uint1 x1195; + uint32_t x1196; + fiat_p384_uint1 x1197; + uint32_t x1198; + fiat_p384_uint1 x1199; + uint32_t x1200; + fiat_p384_uint1 x1201; + uint32_t x1202; + fiat_p384_uint1 x1203; + uint32_t x1204; + fiat_p384_uint1 x1205; + uint32_t x1206; + fiat_p384_uint1 x1207; + uint32_t x1208; + fiat_p384_uint1 x1209; + uint32_t x1210; + fiat_p384_uint1 x1211; + uint32_t x1212; + fiat_p384_uint1 x1213; + uint32_t x1214; + fiat_p384_uint1 x1215; + uint32_t x1216; + fiat_p384_uint1 x1217; + uint32_t x1218; + uint32_t x1219; + uint32_t x1220; + uint32_t x1221; + uint32_t x1222; + uint32_t x1223; + uint32_t x1224; + uint32_t x1225; + uint32_t x1226; + uint32_t x1227; + uint32_t x1228; + uint32_t x1229; + uint32_t x1230; + uint32_t x1231; + uint32_t x1232; + uint32_t x1233; + uint32_t x1234; + uint32_t x1235; + uint32_t x1236; + uint32_t x1237; + uint32_t x1238; + uint32_t x1239; + uint32_t x1240; + uint32_t x1241; + uint32_t x1242; + uint32_t x1243; + fiat_p384_uint1 x1244; + uint32_t x1245; + fiat_p384_uint1 x1246; + uint32_t x1247; + fiat_p384_uint1 x1248; + uint32_t x1249; + fiat_p384_uint1 x1250; + uint32_t x1251; + fiat_p384_uint1 x1252; + uint32_t x1253; + fiat_p384_uint1 x1254; + uint32_t x1255; + fiat_p384_uint1 x1256; + uint32_t x1257; + fiat_p384_uint1 x1258; + uint32_t x1259; + fiat_p384_uint1 x1260; + uint32_t x1261; + fiat_p384_uint1 x1262; + uint32_t x1263; + fiat_p384_uint1 x1264; + uint32_t x1265; + uint32_t x1266; + fiat_p384_uint1 x1267; + uint32_t x1268; + fiat_p384_uint1 x1269; + uint32_t x1270; + fiat_p384_uint1 x1271; + uint32_t x1272; + fiat_p384_uint1 x1273; + uint32_t x1274; + fiat_p384_uint1 x1275; + uint32_t x1276; + fiat_p384_uint1 x1277; + uint32_t x1278; + fiat_p384_uint1 x1279; + uint32_t x1280; + fiat_p384_uint1 x1281; + uint32_t x1282; + fiat_p384_uint1 x1283; + uint32_t x1284; + fiat_p384_uint1 x1285; + uint32_t x1286; + fiat_p384_uint1 x1287; + uint32_t x1288; + fiat_p384_uint1 x1289; + uint32_t x1290; + fiat_p384_uint1 x1291; + uint32_t x1292; + uint32_t x1293; + uint32_t x1294; + uint32_t x1295; + uint32_t x1296; + uint32_t x1297; + uint32_t x1298; + uint32_t x1299; + uint32_t x1300; + uint32_t x1301; + uint32_t x1302; + uint32_t x1303; + uint32_t x1304; + uint32_t x1305; + uint32_t x1306; + uint32_t x1307; + uint32_t x1308; + uint32_t x1309; + uint32_t x1310; + uint32_t x1311; + uint32_t x1312; + fiat_p384_uint1 x1313; + uint32_t x1314; + fiat_p384_uint1 x1315; + uint32_t x1316; + fiat_p384_uint1 x1317; + uint32_t x1318; + fiat_p384_uint1 x1319; + uint32_t x1320; + fiat_p384_uint1 x1321; + uint32_t x1322; + fiat_p384_uint1 x1323; + uint32_t x1324; + fiat_p384_uint1 x1325; + uint32_t x1326; + fiat_p384_uint1 x1327; + uint32_t x1328; + uint32_t x1329; + fiat_p384_uint1 x1330; + uint32_t x1331; + fiat_p384_uint1 x1332; + uint32_t x1333; + fiat_p384_uint1 x1334; + uint32_t x1335; + fiat_p384_uint1 x1336; + uint32_t x1337; + fiat_p384_uint1 x1338; + uint32_t x1339; + fiat_p384_uint1 x1340; + uint32_t x1341; + fiat_p384_uint1 x1342; + uint32_t x1343; + fiat_p384_uint1 x1344; + uint32_t x1345; + fiat_p384_uint1 x1346; + uint32_t x1347; + fiat_p384_uint1 x1348; + uint32_t x1349; + fiat_p384_uint1 x1350; + uint32_t x1351; + fiat_p384_uint1 x1352; + uint32_t x1353; + fiat_p384_uint1 x1354; + uint32_t x1355; + uint32_t x1356; + uint32_t x1357; + uint32_t x1358; + uint32_t x1359; + uint32_t x1360; + uint32_t x1361; + uint32_t x1362; + uint32_t x1363; + uint32_t x1364; + uint32_t x1365; + uint32_t x1366; + uint32_t x1367; + uint32_t x1368; + uint32_t x1369; + uint32_t x1370; + uint32_t x1371; + uint32_t x1372; + uint32_t x1373; + uint32_t x1374; + uint32_t x1375; + uint32_t x1376; + uint32_t x1377; + uint32_t x1378; + uint32_t x1379; + uint32_t x1380; + fiat_p384_uint1 x1381; + uint32_t x1382; + fiat_p384_uint1 x1383; + uint32_t x1384; + fiat_p384_uint1 x1385; + uint32_t x1386; + fiat_p384_uint1 x1387; + uint32_t x1388; + fiat_p384_uint1 x1389; + uint32_t x1390; + fiat_p384_uint1 x1391; + uint32_t x1392; + fiat_p384_uint1 x1393; + uint32_t x1394; + fiat_p384_uint1 x1395; + uint32_t x1396; + fiat_p384_uint1 x1397; + uint32_t x1398; + fiat_p384_uint1 x1399; + uint32_t x1400; + fiat_p384_uint1 x1401; + uint32_t x1402; + uint32_t x1403; + fiat_p384_uint1 x1404; + uint32_t x1405; + fiat_p384_uint1 x1406; + uint32_t x1407; + fiat_p384_uint1 x1408; + uint32_t x1409; + fiat_p384_uint1 x1410; + uint32_t x1411; + fiat_p384_uint1 x1412; + uint32_t x1413; + fiat_p384_uint1 x1414; + uint32_t x1415; + fiat_p384_uint1 x1416; + uint32_t x1417; + fiat_p384_uint1 x1418; + uint32_t x1419; + fiat_p384_uint1 x1420; + uint32_t x1421; + fiat_p384_uint1 x1422; + uint32_t x1423; + fiat_p384_uint1 x1424; + uint32_t x1425; + fiat_p384_uint1 x1426; + uint32_t x1427; + fiat_p384_uint1 x1428; + uint32_t x1429; + uint32_t x1430; + uint32_t x1431; + uint32_t x1432; + uint32_t x1433; + uint32_t x1434; + uint32_t x1435; + uint32_t x1436; + uint32_t x1437; + uint32_t x1438; + uint32_t x1439; + uint32_t x1440; + uint32_t x1441; + uint32_t x1442; + uint32_t x1443; + uint32_t x1444; + uint32_t x1445; + uint32_t x1446; + uint32_t x1447; + uint32_t x1448; + uint32_t x1449; + fiat_p384_uint1 x1450; + uint32_t x1451; + fiat_p384_uint1 x1452; + uint32_t x1453; + fiat_p384_uint1 x1454; + uint32_t x1455; + fiat_p384_uint1 x1456; + uint32_t x1457; + fiat_p384_uint1 x1458; + uint32_t x1459; + fiat_p384_uint1 x1460; + uint32_t x1461; + fiat_p384_uint1 x1462; + uint32_t x1463; + fiat_p384_uint1 x1464; + uint32_t x1465; + uint32_t x1466; + fiat_p384_uint1 x1467; + uint32_t x1468; + fiat_p384_uint1 x1469; + uint32_t x1470; + fiat_p384_uint1 x1471; + uint32_t x1472; + fiat_p384_uint1 x1473; + uint32_t x1474; + fiat_p384_uint1 x1475; + uint32_t x1476; + fiat_p384_uint1 x1477; + uint32_t x1478; + fiat_p384_uint1 x1479; + uint32_t x1480; + fiat_p384_uint1 x1481; + uint32_t x1482; + fiat_p384_uint1 x1483; + uint32_t x1484; + fiat_p384_uint1 x1485; + uint32_t x1486; + fiat_p384_uint1 x1487; + uint32_t x1488; + fiat_p384_uint1 x1489; + uint32_t x1490; + fiat_p384_uint1 x1491; + uint32_t x1492; + uint32_t x1493; + uint32_t x1494; + uint32_t x1495; + uint32_t x1496; + uint32_t x1497; + uint32_t x1498; + uint32_t x1499; + uint32_t x1500; + uint32_t x1501; + uint32_t x1502; + uint32_t x1503; + uint32_t x1504; + uint32_t x1505; + uint32_t x1506; + uint32_t x1507; + uint32_t x1508; + uint32_t x1509; + uint32_t x1510; + uint32_t x1511; + uint32_t x1512; + uint32_t x1513; + uint32_t x1514; + uint32_t x1515; + uint32_t x1516; + uint32_t x1517; + fiat_p384_uint1 x1518; + uint32_t x1519; + fiat_p384_uint1 x1520; + uint32_t x1521; + fiat_p384_uint1 x1522; + uint32_t x1523; + fiat_p384_uint1 x1524; + uint32_t x1525; + fiat_p384_uint1 x1526; + uint32_t x1527; + fiat_p384_uint1 x1528; + uint32_t x1529; + fiat_p384_uint1 x1530; + uint32_t x1531; + fiat_p384_uint1 x1532; + uint32_t x1533; + fiat_p384_uint1 x1534; + uint32_t x1535; + fiat_p384_uint1 x1536; + uint32_t x1537; + fiat_p384_uint1 x1538; + uint32_t x1539; + uint32_t x1540; + fiat_p384_uint1 x1541; + uint32_t x1542; + fiat_p384_uint1 x1543; + uint32_t x1544; + fiat_p384_uint1 x1545; + uint32_t x1546; + fiat_p384_uint1 x1547; + uint32_t x1548; + fiat_p384_uint1 x1549; + uint32_t x1550; + fiat_p384_uint1 x1551; + uint32_t x1552; + fiat_p384_uint1 x1553; + uint32_t x1554; + fiat_p384_uint1 x1555; + uint32_t x1556; + fiat_p384_uint1 x1557; + uint32_t x1558; + fiat_p384_uint1 x1559; + uint32_t x1560; + fiat_p384_uint1 x1561; + uint32_t x1562; + fiat_p384_uint1 x1563; + uint32_t x1564; + fiat_p384_uint1 x1565; + uint32_t x1566; + uint32_t x1567; + uint32_t x1568; + uint32_t x1569; + uint32_t x1570; + uint32_t x1571; + uint32_t x1572; + uint32_t x1573; + uint32_t x1574; + uint32_t x1575; + uint32_t x1576; + uint32_t x1577; + uint32_t x1578; + uint32_t x1579; + uint32_t x1580; + uint32_t x1581; + uint32_t x1582; + uint32_t x1583; + uint32_t x1584; + uint32_t x1585; + uint32_t x1586; + fiat_p384_uint1 x1587; + uint32_t x1588; + fiat_p384_uint1 x1589; + uint32_t x1590; + fiat_p384_uint1 x1591; + uint32_t x1592; + fiat_p384_uint1 x1593; + uint32_t x1594; + fiat_p384_uint1 x1595; + uint32_t x1596; + fiat_p384_uint1 x1597; + uint32_t x1598; + fiat_p384_uint1 x1599; + uint32_t x1600; + fiat_p384_uint1 x1601; + uint32_t x1602; + uint32_t x1603; + fiat_p384_uint1 x1604; + uint32_t x1605; + fiat_p384_uint1 x1606; + uint32_t x1607; + fiat_p384_uint1 x1608; + uint32_t x1609; + fiat_p384_uint1 x1610; + uint32_t x1611; + fiat_p384_uint1 x1612; + uint32_t x1613; + fiat_p384_uint1 x1614; + uint32_t x1615; + fiat_p384_uint1 x1616; + uint32_t x1617; + fiat_p384_uint1 x1618; + uint32_t x1619; + fiat_p384_uint1 x1620; + uint32_t x1621; + fiat_p384_uint1 x1622; + uint32_t x1623; + fiat_p384_uint1 x1624; + uint32_t x1625; + fiat_p384_uint1 x1626; + uint32_t x1627; + fiat_p384_uint1 x1628; + uint32_t x1629; + uint32_t x1630; + fiat_p384_uint1 x1631; + uint32_t x1632; + fiat_p384_uint1 x1633; + uint32_t x1634; + fiat_p384_uint1 x1635; + uint32_t x1636; + fiat_p384_uint1 x1637; + uint32_t x1638; + fiat_p384_uint1 x1639; + uint32_t x1640; + fiat_p384_uint1 x1641; + uint32_t x1642; + fiat_p384_uint1 x1643; + uint32_t x1644; + fiat_p384_uint1 x1645; + uint32_t x1646; + fiat_p384_uint1 x1647; + uint32_t x1648; + fiat_p384_uint1 x1649; + uint32_t x1650; + fiat_p384_uint1 x1651; + uint32_t x1652; + fiat_p384_uint1 x1653; + uint32_t x1654; + fiat_p384_uint1 x1655; + uint32_t x1656; + uint32_t x1657; + uint32_t x1658; + uint32_t x1659; + uint32_t x1660; + uint32_t x1661; + uint32_t x1662; + uint32_t x1663; + uint32_t x1664; + uint32_t x1665; + uint32_t x1666; + uint32_t x1667; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[8]); + x9 = (arg1[9]); + x10 = (arg1[10]); + x11 = (arg1[11]); + x12 = (arg1[0]); + fiat_p384_mulx_u32(&x13, &x14, x12, (arg1[11])); + fiat_p384_mulx_u32(&x15, &x16, x12, (arg1[10])); + fiat_p384_mulx_u32(&x17, &x18, x12, (arg1[9])); + fiat_p384_mulx_u32(&x19, &x20, x12, (arg1[8])); + fiat_p384_mulx_u32(&x21, &x22, x12, (arg1[7])); + fiat_p384_mulx_u32(&x23, &x24, x12, (arg1[6])); + fiat_p384_mulx_u32(&x25, &x26, x12, (arg1[5])); + fiat_p384_mulx_u32(&x27, &x28, x12, (arg1[4])); + fiat_p384_mulx_u32(&x29, &x30, x12, (arg1[3])); + fiat_p384_mulx_u32(&x31, &x32, x12, (arg1[2])); + fiat_p384_mulx_u32(&x33, &x34, x12, (arg1[1])); + fiat_p384_mulx_u32(&x35, &x36, x12, (arg1[0])); + fiat_p384_addcarryx_u32(&x37, &x38, 0x0, x36, x33); + fiat_p384_addcarryx_u32(&x39, &x40, x38, x34, x31); + fiat_p384_addcarryx_u32(&x41, &x42, x40, x32, x29); + fiat_p384_addcarryx_u32(&x43, &x44, x42, x30, x27); + fiat_p384_addcarryx_u32(&x45, &x46, x44, x28, x25); + fiat_p384_addcarryx_u32(&x47, &x48, x46, x26, x23); + fiat_p384_addcarryx_u32(&x49, &x50, x48, x24, x21); + fiat_p384_addcarryx_u32(&x51, &x52, x50, x22, x19); + fiat_p384_addcarryx_u32(&x53, &x54, x52, x20, x17); + fiat_p384_addcarryx_u32(&x55, &x56, x54, x18, x15); + fiat_p384_addcarryx_u32(&x57, &x58, x56, x16, x13); + x59 = (x58 + x14); + fiat_p384_mulx_u32(&x60, &x61, x35, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x62, &x63, x35, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x64, &x65, x35, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x66, &x67, x35, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x68, &x69, x35, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x70, &x71, x35, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x72, &x73, x35, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x74, &x75, x35, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x76, &x77, x35, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x78, &x79, x35, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x80, &x81, 0x0, x77, x74); + fiat_p384_addcarryx_u32(&x82, &x83, x81, x75, x72); + fiat_p384_addcarryx_u32(&x84, &x85, x83, x73, x70); + fiat_p384_addcarryx_u32(&x86, &x87, x85, x71, x68); + fiat_p384_addcarryx_u32(&x88, &x89, x87, x69, x66); + fiat_p384_addcarryx_u32(&x90, &x91, x89, x67, x64); + fiat_p384_addcarryx_u32(&x92, &x93, x91, x65, x62); + fiat_p384_addcarryx_u32(&x94, &x95, x93, x63, x60); + x96 = (x95 + x61); + fiat_p384_addcarryx_u32(&x97, &x98, 0x0, x35, x78); + fiat_p384_addcarryx_u32(&x99, &x100, x98, x37, x79); + fiat_p384_addcarryx_u32(&x101, &x102, x100, x39, 0x0); + fiat_p384_addcarryx_u32(&x103, &x104, x102, x41, x76); + fiat_p384_addcarryx_u32(&x105, &x106, x104, x43, x80); + fiat_p384_addcarryx_u32(&x107, &x108, x106, x45, x82); + fiat_p384_addcarryx_u32(&x109, &x110, x108, x47, x84); + fiat_p384_addcarryx_u32(&x111, &x112, x110, x49, x86); + fiat_p384_addcarryx_u32(&x113, &x114, x112, x51, x88); + fiat_p384_addcarryx_u32(&x115, &x116, x114, x53, x90); + fiat_p384_addcarryx_u32(&x117, &x118, x116, x55, x92); + fiat_p384_addcarryx_u32(&x119, &x120, x118, x57, x94); + fiat_p384_addcarryx_u32(&x121, &x122, x120, x59, x96); + fiat_p384_mulx_u32(&x123, &x124, x1, (arg1[11])); + fiat_p384_mulx_u32(&x125, &x126, x1, (arg1[10])); + fiat_p384_mulx_u32(&x127, &x128, x1, (arg1[9])); + fiat_p384_mulx_u32(&x129, &x130, x1, (arg1[8])); + fiat_p384_mulx_u32(&x131, &x132, x1, (arg1[7])); + fiat_p384_mulx_u32(&x133, &x134, x1, (arg1[6])); + fiat_p384_mulx_u32(&x135, &x136, x1, (arg1[5])); + fiat_p384_mulx_u32(&x137, &x138, x1, (arg1[4])); + fiat_p384_mulx_u32(&x139, &x140, x1, (arg1[3])); + fiat_p384_mulx_u32(&x141, &x142, x1, (arg1[2])); + fiat_p384_mulx_u32(&x143, &x144, x1, (arg1[1])); + fiat_p384_mulx_u32(&x145, &x146, x1, (arg1[0])); + fiat_p384_addcarryx_u32(&x147, &x148, 0x0, x146, x143); + fiat_p384_addcarryx_u32(&x149, &x150, x148, x144, x141); + fiat_p384_addcarryx_u32(&x151, &x152, x150, x142, x139); + fiat_p384_addcarryx_u32(&x153, &x154, x152, x140, x137); + fiat_p384_addcarryx_u32(&x155, &x156, x154, x138, x135); + fiat_p384_addcarryx_u32(&x157, &x158, x156, x136, x133); + fiat_p384_addcarryx_u32(&x159, &x160, x158, x134, x131); + fiat_p384_addcarryx_u32(&x161, &x162, x160, x132, x129); + fiat_p384_addcarryx_u32(&x163, &x164, x162, x130, x127); + fiat_p384_addcarryx_u32(&x165, &x166, x164, x128, x125); + fiat_p384_addcarryx_u32(&x167, &x168, x166, x126, x123); + x169 = (x168 + x124); + fiat_p384_addcarryx_u32(&x170, &x171, 0x0, x99, x145); + fiat_p384_addcarryx_u32(&x172, &x173, x171, x101, x147); + fiat_p384_addcarryx_u32(&x174, &x175, x173, x103, x149); + fiat_p384_addcarryx_u32(&x176, &x177, x175, x105, x151); + fiat_p384_addcarryx_u32(&x178, &x179, x177, x107, x153); + fiat_p384_addcarryx_u32(&x180, &x181, x179, x109, x155); + fiat_p384_addcarryx_u32(&x182, &x183, x181, x111, x157); + fiat_p384_addcarryx_u32(&x184, &x185, x183, x113, x159); + fiat_p384_addcarryx_u32(&x186, &x187, x185, x115, x161); + fiat_p384_addcarryx_u32(&x188, &x189, x187, x117, x163); + fiat_p384_addcarryx_u32(&x190, &x191, x189, x119, x165); + fiat_p384_addcarryx_u32(&x192, &x193, x191, x121, x167); + fiat_p384_addcarryx_u32(&x194, &x195, x193, x122, x169); + fiat_p384_mulx_u32(&x196, &x197, x170, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x198, &x199, x170, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x200, &x201, x170, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x202, &x203, x170, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x204, &x205, x170, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x206, &x207, x170, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x208, &x209, x170, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x210, &x211, x170, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x212, &x213, x170, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x214, &x215, x170, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x216, &x217, 0x0, x213, x210); + fiat_p384_addcarryx_u32(&x218, &x219, x217, x211, x208); + fiat_p384_addcarryx_u32(&x220, &x221, x219, x209, x206); + fiat_p384_addcarryx_u32(&x222, &x223, x221, x207, x204); + fiat_p384_addcarryx_u32(&x224, &x225, x223, x205, x202); + fiat_p384_addcarryx_u32(&x226, &x227, x225, x203, x200); + fiat_p384_addcarryx_u32(&x228, &x229, x227, x201, x198); + fiat_p384_addcarryx_u32(&x230, &x231, x229, x199, x196); + x232 = (x231 + x197); + fiat_p384_addcarryx_u32(&x233, &x234, 0x0, x170, x214); + fiat_p384_addcarryx_u32(&x235, &x236, x234, x172, x215); + fiat_p384_addcarryx_u32(&x237, &x238, x236, x174, 0x0); + fiat_p384_addcarryx_u32(&x239, &x240, x238, x176, x212); + fiat_p384_addcarryx_u32(&x241, &x242, x240, x178, x216); + fiat_p384_addcarryx_u32(&x243, &x244, x242, x180, x218); + fiat_p384_addcarryx_u32(&x245, &x246, x244, x182, x220); + fiat_p384_addcarryx_u32(&x247, &x248, x246, x184, x222); + fiat_p384_addcarryx_u32(&x249, &x250, x248, x186, x224); + fiat_p384_addcarryx_u32(&x251, &x252, x250, x188, x226); + fiat_p384_addcarryx_u32(&x253, &x254, x252, x190, x228); + fiat_p384_addcarryx_u32(&x255, &x256, x254, x192, x230); + fiat_p384_addcarryx_u32(&x257, &x258, x256, x194, x232); + x259 = ((uint32_t)x258 + x195); + fiat_p384_mulx_u32(&x260, &x261, x2, (arg1[11])); + fiat_p384_mulx_u32(&x262, &x263, x2, (arg1[10])); + fiat_p384_mulx_u32(&x264, &x265, x2, (arg1[9])); + fiat_p384_mulx_u32(&x266, &x267, x2, (arg1[8])); + fiat_p384_mulx_u32(&x268, &x269, x2, (arg1[7])); + fiat_p384_mulx_u32(&x270, &x271, x2, (arg1[6])); + fiat_p384_mulx_u32(&x272, &x273, x2, (arg1[5])); + fiat_p384_mulx_u32(&x274, &x275, x2, (arg1[4])); + fiat_p384_mulx_u32(&x276, &x277, x2, (arg1[3])); + fiat_p384_mulx_u32(&x278, &x279, x2, (arg1[2])); + fiat_p384_mulx_u32(&x280, &x281, x2, (arg1[1])); + fiat_p384_mulx_u32(&x282, &x283, x2, (arg1[0])); + fiat_p384_addcarryx_u32(&x284, &x285, 0x0, x283, x280); + fiat_p384_addcarryx_u32(&x286, &x287, x285, x281, x278); + fiat_p384_addcarryx_u32(&x288, &x289, x287, x279, x276); + fiat_p384_addcarryx_u32(&x290, &x291, x289, x277, x274); + fiat_p384_addcarryx_u32(&x292, &x293, x291, x275, x272); + fiat_p384_addcarryx_u32(&x294, &x295, x293, x273, x270); + fiat_p384_addcarryx_u32(&x296, &x297, x295, x271, x268); + fiat_p384_addcarryx_u32(&x298, &x299, x297, x269, x266); + fiat_p384_addcarryx_u32(&x300, &x301, x299, x267, x264); + fiat_p384_addcarryx_u32(&x302, &x303, x301, x265, x262); + fiat_p384_addcarryx_u32(&x304, &x305, x303, x263, x260); + x306 = (x305 + x261); + fiat_p384_addcarryx_u32(&x307, &x308, 0x0, x235, x282); + fiat_p384_addcarryx_u32(&x309, &x310, x308, x237, x284); + fiat_p384_addcarryx_u32(&x311, &x312, x310, x239, x286); + fiat_p384_addcarryx_u32(&x313, &x314, x312, x241, x288); + fiat_p384_addcarryx_u32(&x315, &x316, x314, x243, x290); + fiat_p384_addcarryx_u32(&x317, &x318, x316, x245, x292); + fiat_p384_addcarryx_u32(&x319, &x320, x318, x247, x294); + fiat_p384_addcarryx_u32(&x321, &x322, x320, x249, x296); + fiat_p384_addcarryx_u32(&x323, &x324, x322, x251, x298); + fiat_p384_addcarryx_u32(&x325, &x326, x324, x253, x300); + fiat_p384_addcarryx_u32(&x327, &x328, x326, x255, x302); + fiat_p384_addcarryx_u32(&x329, &x330, x328, x257, x304); + fiat_p384_addcarryx_u32(&x331, &x332, x330, x259, x306); + fiat_p384_mulx_u32(&x333, &x334, x307, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x335, &x336, x307, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x337, &x338, x307, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x339, &x340, x307, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x341, &x342, x307, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x343, &x344, x307, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x345, &x346, x307, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x347, &x348, x307, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x349, &x350, x307, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x351, &x352, x307, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x353, &x354, 0x0, x350, x347); + fiat_p384_addcarryx_u32(&x355, &x356, x354, x348, x345); + fiat_p384_addcarryx_u32(&x357, &x358, x356, x346, x343); + fiat_p384_addcarryx_u32(&x359, &x360, x358, x344, x341); + fiat_p384_addcarryx_u32(&x361, &x362, x360, x342, x339); + fiat_p384_addcarryx_u32(&x363, &x364, x362, x340, x337); + fiat_p384_addcarryx_u32(&x365, &x366, x364, x338, x335); + fiat_p384_addcarryx_u32(&x367, &x368, x366, x336, x333); + x369 = (x368 + x334); + fiat_p384_addcarryx_u32(&x370, &x371, 0x0, x307, x351); + fiat_p384_addcarryx_u32(&x372, &x373, x371, x309, x352); + fiat_p384_addcarryx_u32(&x374, &x375, x373, x311, 0x0); + fiat_p384_addcarryx_u32(&x376, &x377, x375, x313, x349); + fiat_p384_addcarryx_u32(&x378, &x379, x377, x315, x353); + fiat_p384_addcarryx_u32(&x380, &x381, x379, x317, x355); + fiat_p384_addcarryx_u32(&x382, &x383, x381, x319, x357); + fiat_p384_addcarryx_u32(&x384, &x385, x383, x321, x359); + fiat_p384_addcarryx_u32(&x386, &x387, x385, x323, x361); + fiat_p384_addcarryx_u32(&x388, &x389, x387, x325, x363); + fiat_p384_addcarryx_u32(&x390, &x391, x389, x327, x365); + fiat_p384_addcarryx_u32(&x392, &x393, x391, x329, x367); + fiat_p384_addcarryx_u32(&x394, &x395, x393, x331, x369); + x396 = ((uint32_t)x395 + x332); + fiat_p384_mulx_u32(&x397, &x398, x3, (arg1[11])); + fiat_p384_mulx_u32(&x399, &x400, x3, (arg1[10])); + fiat_p384_mulx_u32(&x401, &x402, x3, (arg1[9])); + fiat_p384_mulx_u32(&x403, &x404, x3, (arg1[8])); + fiat_p384_mulx_u32(&x405, &x406, x3, (arg1[7])); + fiat_p384_mulx_u32(&x407, &x408, x3, (arg1[6])); + fiat_p384_mulx_u32(&x409, &x410, x3, (arg1[5])); + fiat_p384_mulx_u32(&x411, &x412, x3, (arg1[4])); + fiat_p384_mulx_u32(&x413, &x414, x3, (arg1[3])); + fiat_p384_mulx_u32(&x415, &x416, x3, (arg1[2])); + fiat_p384_mulx_u32(&x417, &x418, x3, (arg1[1])); + fiat_p384_mulx_u32(&x419, &x420, x3, (arg1[0])); + fiat_p384_addcarryx_u32(&x421, &x422, 0x0, x420, x417); + fiat_p384_addcarryx_u32(&x423, &x424, x422, x418, x415); + fiat_p384_addcarryx_u32(&x425, &x426, x424, x416, x413); + fiat_p384_addcarryx_u32(&x427, &x428, x426, x414, x411); + fiat_p384_addcarryx_u32(&x429, &x430, x428, x412, x409); + fiat_p384_addcarryx_u32(&x431, &x432, x430, x410, x407); + fiat_p384_addcarryx_u32(&x433, &x434, x432, x408, x405); + fiat_p384_addcarryx_u32(&x435, &x436, x434, x406, x403); + fiat_p384_addcarryx_u32(&x437, &x438, x436, x404, x401); + fiat_p384_addcarryx_u32(&x439, &x440, x438, x402, x399); + fiat_p384_addcarryx_u32(&x441, &x442, x440, x400, x397); + x443 = (x442 + x398); + fiat_p384_addcarryx_u32(&x444, &x445, 0x0, x372, x419); + fiat_p384_addcarryx_u32(&x446, &x447, x445, x374, x421); + fiat_p384_addcarryx_u32(&x448, &x449, x447, x376, x423); + fiat_p384_addcarryx_u32(&x450, &x451, x449, x378, x425); + fiat_p384_addcarryx_u32(&x452, &x453, x451, x380, x427); + fiat_p384_addcarryx_u32(&x454, &x455, x453, x382, x429); + fiat_p384_addcarryx_u32(&x456, &x457, x455, x384, x431); + fiat_p384_addcarryx_u32(&x458, &x459, x457, x386, x433); + fiat_p384_addcarryx_u32(&x460, &x461, x459, x388, x435); + fiat_p384_addcarryx_u32(&x462, &x463, x461, x390, x437); + fiat_p384_addcarryx_u32(&x464, &x465, x463, x392, x439); + fiat_p384_addcarryx_u32(&x466, &x467, x465, x394, x441); + fiat_p384_addcarryx_u32(&x468, &x469, x467, x396, x443); + fiat_p384_mulx_u32(&x470, &x471, x444, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x472, &x473, x444, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x474, &x475, x444, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x476, &x477, x444, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x478, &x479, x444, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x480, &x481, x444, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x482, &x483, x444, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x484, &x485, x444, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x486, &x487, x444, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x488, &x489, x444, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x490, &x491, 0x0, x487, x484); + fiat_p384_addcarryx_u32(&x492, &x493, x491, x485, x482); + fiat_p384_addcarryx_u32(&x494, &x495, x493, x483, x480); + fiat_p384_addcarryx_u32(&x496, &x497, x495, x481, x478); + fiat_p384_addcarryx_u32(&x498, &x499, x497, x479, x476); + fiat_p384_addcarryx_u32(&x500, &x501, x499, x477, x474); + fiat_p384_addcarryx_u32(&x502, &x503, x501, x475, x472); + fiat_p384_addcarryx_u32(&x504, &x505, x503, x473, x470); + x506 = (x505 + x471); + fiat_p384_addcarryx_u32(&x507, &x508, 0x0, x444, x488); + fiat_p384_addcarryx_u32(&x509, &x510, x508, x446, x489); + fiat_p384_addcarryx_u32(&x511, &x512, x510, x448, 0x0); + fiat_p384_addcarryx_u32(&x513, &x514, x512, x450, x486); + fiat_p384_addcarryx_u32(&x515, &x516, x514, x452, x490); + fiat_p384_addcarryx_u32(&x517, &x518, x516, x454, x492); + fiat_p384_addcarryx_u32(&x519, &x520, x518, x456, x494); + fiat_p384_addcarryx_u32(&x521, &x522, x520, x458, x496); + fiat_p384_addcarryx_u32(&x523, &x524, x522, x460, x498); + fiat_p384_addcarryx_u32(&x525, &x526, x524, x462, x500); + fiat_p384_addcarryx_u32(&x527, &x528, x526, x464, x502); + fiat_p384_addcarryx_u32(&x529, &x530, x528, x466, x504); + fiat_p384_addcarryx_u32(&x531, &x532, x530, x468, x506); + x533 = ((uint32_t)x532 + x469); + fiat_p384_mulx_u32(&x534, &x535, x4, (arg1[11])); + fiat_p384_mulx_u32(&x536, &x537, x4, (arg1[10])); + fiat_p384_mulx_u32(&x538, &x539, x4, (arg1[9])); + fiat_p384_mulx_u32(&x540, &x541, x4, (arg1[8])); + fiat_p384_mulx_u32(&x542, &x543, x4, (arg1[7])); + fiat_p384_mulx_u32(&x544, &x545, x4, (arg1[6])); + fiat_p384_mulx_u32(&x546, &x547, x4, (arg1[5])); + fiat_p384_mulx_u32(&x548, &x549, x4, (arg1[4])); + fiat_p384_mulx_u32(&x550, &x551, x4, (arg1[3])); + fiat_p384_mulx_u32(&x552, &x553, x4, (arg1[2])); + fiat_p384_mulx_u32(&x554, &x555, x4, (arg1[1])); + fiat_p384_mulx_u32(&x556, &x557, x4, (arg1[0])); + fiat_p384_addcarryx_u32(&x558, &x559, 0x0, x557, x554); + fiat_p384_addcarryx_u32(&x560, &x561, x559, x555, x552); + fiat_p384_addcarryx_u32(&x562, &x563, x561, x553, x550); + fiat_p384_addcarryx_u32(&x564, &x565, x563, x551, x548); + fiat_p384_addcarryx_u32(&x566, &x567, x565, x549, x546); + fiat_p384_addcarryx_u32(&x568, &x569, x567, x547, x544); + fiat_p384_addcarryx_u32(&x570, &x571, x569, x545, x542); + fiat_p384_addcarryx_u32(&x572, &x573, x571, x543, x540); + fiat_p384_addcarryx_u32(&x574, &x575, x573, x541, x538); + fiat_p384_addcarryx_u32(&x576, &x577, x575, x539, x536); + fiat_p384_addcarryx_u32(&x578, &x579, x577, x537, x534); + x580 = (x579 + x535); + fiat_p384_addcarryx_u32(&x581, &x582, 0x0, x509, x556); + fiat_p384_addcarryx_u32(&x583, &x584, x582, x511, x558); + fiat_p384_addcarryx_u32(&x585, &x586, x584, x513, x560); + fiat_p384_addcarryx_u32(&x587, &x588, x586, x515, x562); + fiat_p384_addcarryx_u32(&x589, &x590, x588, x517, x564); + fiat_p384_addcarryx_u32(&x591, &x592, x590, x519, x566); + fiat_p384_addcarryx_u32(&x593, &x594, x592, x521, x568); + fiat_p384_addcarryx_u32(&x595, &x596, x594, x523, x570); + fiat_p384_addcarryx_u32(&x597, &x598, x596, x525, x572); + fiat_p384_addcarryx_u32(&x599, &x600, x598, x527, x574); + fiat_p384_addcarryx_u32(&x601, &x602, x600, x529, x576); + fiat_p384_addcarryx_u32(&x603, &x604, x602, x531, x578); + fiat_p384_addcarryx_u32(&x605, &x606, x604, x533, x580); + fiat_p384_mulx_u32(&x607, &x608, x581, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x609, &x610, x581, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x611, &x612, x581, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x613, &x614, x581, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x615, &x616, x581, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x617, &x618, x581, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x619, &x620, x581, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x621, &x622, x581, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x623, &x624, x581, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x625, &x626, x581, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x627, &x628, 0x0, x624, x621); + fiat_p384_addcarryx_u32(&x629, &x630, x628, x622, x619); + fiat_p384_addcarryx_u32(&x631, &x632, x630, x620, x617); + fiat_p384_addcarryx_u32(&x633, &x634, x632, x618, x615); + fiat_p384_addcarryx_u32(&x635, &x636, x634, x616, x613); + fiat_p384_addcarryx_u32(&x637, &x638, x636, x614, x611); + fiat_p384_addcarryx_u32(&x639, &x640, x638, x612, x609); + fiat_p384_addcarryx_u32(&x641, &x642, x640, x610, x607); + x643 = (x642 + x608); + fiat_p384_addcarryx_u32(&x644, &x645, 0x0, x581, x625); + fiat_p384_addcarryx_u32(&x646, &x647, x645, x583, x626); + fiat_p384_addcarryx_u32(&x648, &x649, x647, x585, 0x0); + fiat_p384_addcarryx_u32(&x650, &x651, x649, x587, x623); + fiat_p384_addcarryx_u32(&x652, &x653, x651, x589, x627); + fiat_p384_addcarryx_u32(&x654, &x655, x653, x591, x629); + fiat_p384_addcarryx_u32(&x656, &x657, x655, x593, x631); + fiat_p384_addcarryx_u32(&x658, &x659, x657, x595, x633); + fiat_p384_addcarryx_u32(&x660, &x661, x659, x597, x635); + fiat_p384_addcarryx_u32(&x662, &x663, x661, x599, x637); + fiat_p384_addcarryx_u32(&x664, &x665, x663, x601, x639); + fiat_p384_addcarryx_u32(&x666, &x667, x665, x603, x641); + fiat_p384_addcarryx_u32(&x668, &x669, x667, x605, x643); + x670 = ((uint32_t)x669 + x606); + fiat_p384_mulx_u32(&x671, &x672, x5, (arg1[11])); + fiat_p384_mulx_u32(&x673, &x674, x5, (arg1[10])); + fiat_p384_mulx_u32(&x675, &x676, x5, (arg1[9])); + fiat_p384_mulx_u32(&x677, &x678, x5, (arg1[8])); + fiat_p384_mulx_u32(&x679, &x680, x5, (arg1[7])); + fiat_p384_mulx_u32(&x681, &x682, x5, (arg1[6])); + fiat_p384_mulx_u32(&x683, &x684, x5, (arg1[5])); + fiat_p384_mulx_u32(&x685, &x686, x5, (arg1[4])); + fiat_p384_mulx_u32(&x687, &x688, x5, (arg1[3])); + fiat_p384_mulx_u32(&x689, &x690, x5, (arg1[2])); + fiat_p384_mulx_u32(&x691, &x692, x5, (arg1[1])); + fiat_p384_mulx_u32(&x693, &x694, x5, (arg1[0])); + fiat_p384_addcarryx_u32(&x695, &x696, 0x0, x694, x691); + fiat_p384_addcarryx_u32(&x697, &x698, x696, x692, x689); + fiat_p384_addcarryx_u32(&x699, &x700, x698, x690, x687); + fiat_p384_addcarryx_u32(&x701, &x702, x700, x688, x685); + fiat_p384_addcarryx_u32(&x703, &x704, x702, x686, x683); + fiat_p384_addcarryx_u32(&x705, &x706, x704, x684, x681); + fiat_p384_addcarryx_u32(&x707, &x708, x706, x682, x679); + fiat_p384_addcarryx_u32(&x709, &x710, x708, x680, x677); + fiat_p384_addcarryx_u32(&x711, &x712, x710, x678, x675); + fiat_p384_addcarryx_u32(&x713, &x714, x712, x676, x673); + fiat_p384_addcarryx_u32(&x715, &x716, x714, x674, x671); + x717 = (x716 + x672); + fiat_p384_addcarryx_u32(&x718, &x719, 0x0, x646, x693); + fiat_p384_addcarryx_u32(&x720, &x721, x719, x648, x695); + fiat_p384_addcarryx_u32(&x722, &x723, x721, x650, x697); + fiat_p384_addcarryx_u32(&x724, &x725, x723, x652, x699); + fiat_p384_addcarryx_u32(&x726, &x727, x725, x654, x701); + fiat_p384_addcarryx_u32(&x728, &x729, x727, x656, x703); + fiat_p384_addcarryx_u32(&x730, &x731, x729, x658, x705); + fiat_p384_addcarryx_u32(&x732, &x733, x731, x660, x707); + fiat_p384_addcarryx_u32(&x734, &x735, x733, x662, x709); + fiat_p384_addcarryx_u32(&x736, &x737, x735, x664, x711); + fiat_p384_addcarryx_u32(&x738, &x739, x737, x666, x713); + fiat_p384_addcarryx_u32(&x740, &x741, x739, x668, x715); + fiat_p384_addcarryx_u32(&x742, &x743, x741, x670, x717); + fiat_p384_mulx_u32(&x744, &x745, x718, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x746, &x747, x718, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x748, &x749, x718, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x750, &x751, x718, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x752, &x753, x718, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x754, &x755, x718, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x756, &x757, x718, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x758, &x759, x718, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x760, &x761, x718, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x762, &x763, x718, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x764, &x765, 0x0, x761, x758); + fiat_p384_addcarryx_u32(&x766, &x767, x765, x759, x756); + fiat_p384_addcarryx_u32(&x768, &x769, x767, x757, x754); + fiat_p384_addcarryx_u32(&x770, &x771, x769, x755, x752); + fiat_p384_addcarryx_u32(&x772, &x773, x771, x753, x750); + fiat_p384_addcarryx_u32(&x774, &x775, x773, x751, x748); + fiat_p384_addcarryx_u32(&x776, &x777, x775, x749, x746); + fiat_p384_addcarryx_u32(&x778, &x779, x777, x747, x744); + x780 = (x779 + x745); + fiat_p384_addcarryx_u32(&x781, &x782, 0x0, x718, x762); + fiat_p384_addcarryx_u32(&x783, &x784, x782, x720, x763); + fiat_p384_addcarryx_u32(&x785, &x786, x784, x722, 0x0); + fiat_p384_addcarryx_u32(&x787, &x788, x786, x724, x760); + fiat_p384_addcarryx_u32(&x789, &x790, x788, x726, x764); + fiat_p384_addcarryx_u32(&x791, &x792, x790, x728, x766); + fiat_p384_addcarryx_u32(&x793, &x794, x792, x730, x768); + fiat_p384_addcarryx_u32(&x795, &x796, x794, x732, x770); + fiat_p384_addcarryx_u32(&x797, &x798, x796, x734, x772); + fiat_p384_addcarryx_u32(&x799, &x800, x798, x736, x774); + fiat_p384_addcarryx_u32(&x801, &x802, x800, x738, x776); + fiat_p384_addcarryx_u32(&x803, &x804, x802, x740, x778); + fiat_p384_addcarryx_u32(&x805, &x806, x804, x742, x780); + x807 = ((uint32_t)x806 + x743); + fiat_p384_mulx_u32(&x808, &x809, x6, (arg1[11])); + fiat_p384_mulx_u32(&x810, &x811, x6, (arg1[10])); + fiat_p384_mulx_u32(&x812, &x813, x6, (arg1[9])); + fiat_p384_mulx_u32(&x814, &x815, x6, (arg1[8])); + fiat_p384_mulx_u32(&x816, &x817, x6, (arg1[7])); + fiat_p384_mulx_u32(&x818, &x819, x6, (arg1[6])); + fiat_p384_mulx_u32(&x820, &x821, x6, (arg1[5])); + fiat_p384_mulx_u32(&x822, &x823, x6, (arg1[4])); + fiat_p384_mulx_u32(&x824, &x825, x6, (arg1[3])); + fiat_p384_mulx_u32(&x826, &x827, x6, (arg1[2])); + fiat_p384_mulx_u32(&x828, &x829, x6, (arg1[1])); + fiat_p384_mulx_u32(&x830, &x831, x6, (arg1[0])); + fiat_p384_addcarryx_u32(&x832, &x833, 0x0, x831, x828); + fiat_p384_addcarryx_u32(&x834, &x835, x833, x829, x826); + fiat_p384_addcarryx_u32(&x836, &x837, x835, x827, x824); + fiat_p384_addcarryx_u32(&x838, &x839, x837, x825, x822); + fiat_p384_addcarryx_u32(&x840, &x841, x839, x823, x820); + fiat_p384_addcarryx_u32(&x842, &x843, x841, x821, x818); + fiat_p384_addcarryx_u32(&x844, &x845, x843, x819, x816); + fiat_p384_addcarryx_u32(&x846, &x847, x845, x817, x814); + fiat_p384_addcarryx_u32(&x848, &x849, x847, x815, x812); + fiat_p384_addcarryx_u32(&x850, &x851, x849, x813, x810); + fiat_p384_addcarryx_u32(&x852, &x853, x851, x811, x808); + x854 = (x853 + x809); + fiat_p384_addcarryx_u32(&x855, &x856, 0x0, x783, x830); + fiat_p384_addcarryx_u32(&x857, &x858, x856, x785, x832); + fiat_p384_addcarryx_u32(&x859, &x860, x858, x787, x834); + fiat_p384_addcarryx_u32(&x861, &x862, x860, x789, x836); + fiat_p384_addcarryx_u32(&x863, &x864, x862, x791, x838); + fiat_p384_addcarryx_u32(&x865, &x866, x864, x793, x840); + fiat_p384_addcarryx_u32(&x867, &x868, x866, x795, x842); + fiat_p384_addcarryx_u32(&x869, &x870, x868, x797, x844); + fiat_p384_addcarryx_u32(&x871, &x872, x870, x799, x846); + fiat_p384_addcarryx_u32(&x873, &x874, x872, x801, x848); + fiat_p384_addcarryx_u32(&x875, &x876, x874, x803, x850); + fiat_p384_addcarryx_u32(&x877, &x878, x876, x805, x852); + fiat_p384_addcarryx_u32(&x879, &x880, x878, x807, x854); + fiat_p384_mulx_u32(&x881, &x882, x855, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x883, &x884, x855, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x885, &x886, x855, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x887, &x888, x855, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x889, &x890, x855, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x891, &x892, x855, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x893, &x894, x855, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x895, &x896, x855, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x897, &x898, x855, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x899, &x900, x855, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x901, &x902, 0x0, x898, x895); + fiat_p384_addcarryx_u32(&x903, &x904, x902, x896, x893); + fiat_p384_addcarryx_u32(&x905, &x906, x904, x894, x891); + fiat_p384_addcarryx_u32(&x907, &x908, x906, x892, x889); + fiat_p384_addcarryx_u32(&x909, &x910, x908, x890, x887); + fiat_p384_addcarryx_u32(&x911, &x912, x910, x888, x885); + fiat_p384_addcarryx_u32(&x913, &x914, x912, x886, x883); + fiat_p384_addcarryx_u32(&x915, &x916, x914, x884, x881); + x917 = (x916 + x882); + fiat_p384_addcarryx_u32(&x918, &x919, 0x0, x855, x899); + fiat_p384_addcarryx_u32(&x920, &x921, x919, x857, x900); + fiat_p384_addcarryx_u32(&x922, &x923, x921, x859, 0x0); + fiat_p384_addcarryx_u32(&x924, &x925, x923, x861, x897); + fiat_p384_addcarryx_u32(&x926, &x927, x925, x863, x901); + fiat_p384_addcarryx_u32(&x928, &x929, x927, x865, x903); + fiat_p384_addcarryx_u32(&x930, &x931, x929, x867, x905); + fiat_p384_addcarryx_u32(&x932, &x933, x931, x869, x907); + fiat_p384_addcarryx_u32(&x934, &x935, x933, x871, x909); + fiat_p384_addcarryx_u32(&x936, &x937, x935, x873, x911); + fiat_p384_addcarryx_u32(&x938, &x939, x937, x875, x913); + fiat_p384_addcarryx_u32(&x940, &x941, x939, x877, x915); + fiat_p384_addcarryx_u32(&x942, &x943, x941, x879, x917); + x944 = ((uint32_t)x943 + x880); + fiat_p384_mulx_u32(&x945, &x946, x7, (arg1[11])); + fiat_p384_mulx_u32(&x947, &x948, x7, (arg1[10])); + fiat_p384_mulx_u32(&x949, &x950, x7, (arg1[9])); + fiat_p384_mulx_u32(&x951, &x952, x7, (arg1[8])); + fiat_p384_mulx_u32(&x953, &x954, x7, (arg1[7])); + fiat_p384_mulx_u32(&x955, &x956, x7, (arg1[6])); + fiat_p384_mulx_u32(&x957, &x958, x7, (arg1[5])); + fiat_p384_mulx_u32(&x959, &x960, x7, (arg1[4])); + fiat_p384_mulx_u32(&x961, &x962, x7, (arg1[3])); + fiat_p384_mulx_u32(&x963, &x964, x7, (arg1[2])); + fiat_p384_mulx_u32(&x965, &x966, x7, (arg1[1])); + fiat_p384_mulx_u32(&x967, &x968, x7, (arg1[0])); + fiat_p384_addcarryx_u32(&x969, &x970, 0x0, x968, x965); + fiat_p384_addcarryx_u32(&x971, &x972, x970, x966, x963); + fiat_p384_addcarryx_u32(&x973, &x974, x972, x964, x961); + fiat_p384_addcarryx_u32(&x975, &x976, x974, x962, x959); + fiat_p384_addcarryx_u32(&x977, &x978, x976, x960, x957); + fiat_p384_addcarryx_u32(&x979, &x980, x978, x958, x955); + fiat_p384_addcarryx_u32(&x981, &x982, x980, x956, x953); + fiat_p384_addcarryx_u32(&x983, &x984, x982, x954, x951); + fiat_p384_addcarryx_u32(&x985, &x986, x984, x952, x949); + fiat_p384_addcarryx_u32(&x987, &x988, x986, x950, x947); + fiat_p384_addcarryx_u32(&x989, &x990, x988, x948, x945); + x991 = (x990 + x946); + fiat_p384_addcarryx_u32(&x992, &x993, 0x0, x920, x967); + fiat_p384_addcarryx_u32(&x994, &x995, x993, x922, x969); + fiat_p384_addcarryx_u32(&x996, &x997, x995, x924, x971); + fiat_p384_addcarryx_u32(&x998, &x999, x997, x926, x973); + fiat_p384_addcarryx_u32(&x1000, &x1001, x999, x928, x975); + fiat_p384_addcarryx_u32(&x1002, &x1003, x1001, x930, x977); + fiat_p384_addcarryx_u32(&x1004, &x1005, x1003, x932, x979); + fiat_p384_addcarryx_u32(&x1006, &x1007, x1005, x934, x981); + fiat_p384_addcarryx_u32(&x1008, &x1009, x1007, x936, x983); + fiat_p384_addcarryx_u32(&x1010, &x1011, x1009, x938, x985); + fiat_p384_addcarryx_u32(&x1012, &x1013, x1011, x940, x987); + fiat_p384_addcarryx_u32(&x1014, &x1015, x1013, x942, x989); + fiat_p384_addcarryx_u32(&x1016, &x1017, x1015, x944, x991); + fiat_p384_mulx_u32(&x1018, &x1019, x992, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1020, &x1021, x992, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1022, &x1023, x992, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1024, &x1025, x992, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1026, &x1027, x992, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1028, &x1029, x992, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1030, &x1031, x992, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1032, &x1033, x992, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x1034, &x1035, x992, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1036, &x1037, x992, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x1038, &x1039, 0x0, x1035, x1032); + fiat_p384_addcarryx_u32(&x1040, &x1041, x1039, x1033, x1030); + fiat_p384_addcarryx_u32(&x1042, &x1043, x1041, x1031, x1028); + fiat_p384_addcarryx_u32(&x1044, &x1045, x1043, x1029, x1026); + fiat_p384_addcarryx_u32(&x1046, &x1047, x1045, x1027, x1024); + fiat_p384_addcarryx_u32(&x1048, &x1049, x1047, x1025, x1022); + fiat_p384_addcarryx_u32(&x1050, &x1051, x1049, x1023, x1020); + fiat_p384_addcarryx_u32(&x1052, &x1053, x1051, x1021, x1018); + x1054 = (x1053 + x1019); + fiat_p384_addcarryx_u32(&x1055, &x1056, 0x0, x992, x1036); + fiat_p384_addcarryx_u32(&x1057, &x1058, x1056, x994, x1037); + fiat_p384_addcarryx_u32(&x1059, &x1060, x1058, x996, 0x0); + fiat_p384_addcarryx_u32(&x1061, &x1062, x1060, x998, x1034); + fiat_p384_addcarryx_u32(&x1063, &x1064, x1062, x1000, x1038); + fiat_p384_addcarryx_u32(&x1065, &x1066, x1064, x1002, x1040); + fiat_p384_addcarryx_u32(&x1067, &x1068, x1066, x1004, x1042); + fiat_p384_addcarryx_u32(&x1069, &x1070, x1068, x1006, x1044); + fiat_p384_addcarryx_u32(&x1071, &x1072, x1070, x1008, x1046); + fiat_p384_addcarryx_u32(&x1073, &x1074, x1072, x1010, x1048); + fiat_p384_addcarryx_u32(&x1075, &x1076, x1074, x1012, x1050); + fiat_p384_addcarryx_u32(&x1077, &x1078, x1076, x1014, x1052); + fiat_p384_addcarryx_u32(&x1079, &x1080, x1078, x1016, x1054); + x1081 = ((uint32_t)x1080 + x1017); + fiat_p384_mulx_u32(&x1082, &x1083, x8, (arg1[11])); + fiat_p384_mulx_u32(&x1084, &x1085, x8, (arg1[10])); + fiat_p384_mulx_u32(&x1086, &x1087, x8, (arg1[9])); + fiat_p384_mulx_u32(&x1088, &x1089, x8, (arg1[8])); + fiat_p384_mulx_u32(&x1090, &x1091, x8, (arg1[7])); + fiat_p384_mulx_u32(&x1092, &x1093, x8, (arg1[6])); + fiat_p384_mulx_u32(&x1094, &x1095, x8, (arg1[5])); + fiat_p384_mulx_u32(&x1096, &x1097, x8, (arg1[4])); + fiat_p384_mulx_u32(&x1098, &x1099, x8, (arg1[3])); + fiat_p384_mulx_u32(&x1100, &x1101, x8, (arg1[2])); + fiat_p384_mulx_u32(&x1102, &x1103, x8, (arg1[1])); + fiat_p384_mulx_u32(&x1104, &x1105, x8, (arg1[0])); + fiat_p384_addcarryx_u32(&x1106, &x1107, 0x0, x1105, x1102); + fiat_p384_addcarryx_u32(&x1108, &x1109, x1107, x1103, x1100); + fiat_p384_addcarryx_u32(&x1110, &x1111, x1109, x1101, x1098); + fiat_p384_addcarryx_u32(&x1112, &x1113, x1111, x1099, x1096); + fiat_p384_addcarryx_u32(&x1114, &x1115, x1113, x1097, x1094); + fiat_p384_addcarryx_u32(&x1116, &x1117, x1115, x1095, x1092); + fiat_p384_addcarryx_u32(&x1118, &x1119, x1117, x1093, x1090); + fiat_p384_addcarryx_u32(&x1120, &x1121, x1119, x1091, x1088); + fiat_p384_addcarryx_u32(&x1122, &x1123, x1121, x1089, x1086); + fiat_p384_addcarryx_u32(&x1124, &x1125, x1123, x1087, x1084); + fiat_p384_addcarryx_u32(&x1126, &x1127, x1125, x1085, x1082); + x1128 = (x1127 + x1083); + fiat_p384_addcarryx_u32(&x1129, &x1130, 0x0, x1057, x1104); + fiat_p384_addcarryx_u32(&x1131, &x1132, x1130, x1059, x1106); + fiat_p384_addcarryx_u32(&x1133, &x1134, x1132, x1061, x1108); + fiat_p384_addcarryx_u32(&x1135, &x1136, x1134, x1063, x1110); + fiat_p384_addcarryx_u32(&x1137, &x1138, x1136, x1065, x1112); + fiat_p384_addcarryx_u32(&x1139, &x1140, x1138, x1067, x1114); + fiat_p384_addcarryx_u32(&x1141, &x1142, x1140, x1069, x1116); + fiat_p384_addcarryx_u32(&x1143, &x1144, x1142, x1071, x1118); + fiat_p384_addcarryx_u32(&x1145, &x1146, x1144, x1073, x1120); + fiat_p384_addcarryx_u32(&x1147, &x1148, x1146, x1075, x1122); + fiat_p384_addcarryx_u32(&x1149, &x1150, x1148, x1077, x1124); + fiat_p384_addcarryx_u32(&x1151, &x1152, x1150, x1079, x1126); + fiat_p384_addcarryx_u32(&x1153, &x1154, x1152, x1081, x1128); + fiat_p384_mulx_u32(&x1155, &x1156, x1129, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1157, &x1158, x1129, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1159, &x1160, x1129, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1161, &x1162, x1129, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1163, &x1164, x1129, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1165, &x1166, x1129, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1167, &x1168, x1129, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1169, &x1170, x1129, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x1171, &x1172, x1129, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1173, &x1174, x1129, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x1175, &x1176, 0x0, x1172, x1169); + fiat_p384_addcarryx_u32(&x1177, &x1178, x1176, x1170, x1167); + fiat_p384_addcarryx_u32(&x1179, &x1180, x1178, x1168, x1165); + fiat_p384_addcarryx_u32(&x1181, &x1182, x1180, x1166, x1163); + fiat_p384_addcarryx_u32(&x1183, &x1184, x1182, x1164, x1161); + fiat_p384_addcarryx_u32(&x1185, &x1186, x1184, x1162, x1159); + fiat_p384_addcarryx_u32(&x1187, &x1188, x1186, x1160, x1157); + fiat_p384_addcarryx_u32(&x1189, &x1190, x1188, x1158, x1155); + x1191 = (x1190 + x1156); + fiat_p384_addcarryx_u32(&x1192, &x1193, 0x0, x1129, x1173); + fiat_p384_addcarryx_u32(&x1194, &x1195, x1193, x1131, x1174); + fiat_p384_addcarryx_u32(&x1196, &x1197, x1195, x1133, 0x0); + fiat_p384_addcarryx_u32(&x1198, &x1199, x1197, x1135, x1171); + fiat_p384_addcarryx_u32(&x1200, &x1201, x1199, x1137, x1175); + fiat_p384_addcarryx_u32(&x1202, &x1203, x1201, x1139, x1177); + fiat_p384_addcarryx_u32(&x1204, &x1205, x1203, x1141, x1179); + fiat_p384_addcarryx_u32(&x1206, &x1207, x1205, x1143, x1181); + fiat_p384_addcarryx_u32(&x1208, &x1209, x1207, x1145, x1183); + fiat_p384_addcarryx_u32(&x1210, &x1211, x1209, x1147, x1185); + fiat_p384_addcarryx_u32(&x1212, &x1213, x1211, x1149, x1187); + fiat_p384_addcarryx_u32(&x1214, &x1215, x1213, x1151, x1189); + fiat_p384_addcarryx_u32(&x1216, &x1217, x1215, x1153, x1191); + x1218 = ((uint32_t)x1217 + x1154); + fiat_p384_mulx_u32(&x1219, &x1220, x9, (arg1[11])); + fiat_p384_mulx_u32(&x1221, &x1222, x9, (arg1[10])); + fiat_p384_mulx_u32(&x1223, &x1224, x9, (arg1[9])); + fiat_p384_mulx_u32(&x1225, &x1226, x9, (arg1[8])); + fiat_p384_mulx_u32(&x1227, &x1228, x9, (arg1[7])); + fiat_p384_mulx_u32(&x1229, &x1230, x9, (arg1[6])); + fiat_p384_mulx_u32(&x1231, &x1232, x9, (arg1[5])); + fiat_p384_mulx_u32(&x1233, &x1234, x9, (arg1[4])); + fiat_p384_mulx_u32(&x1235, &x1236, x9, (arg1[3])); + fiat_p384_mulx_u32(&x1237, &x1238, x9, (arg1[2])); + fiat_p384_mulx_u32(&x1239, &x1240, x9, (arg1[1])); + fiat_p384_mulx_u32(&x1241, &x1242, x9, (arg1[0])); + fiat_p384_addcarryx_u32(&x1243, &x1244, 0x0, x1242, x1239); + fiat_p384_addcarryx_u32(&x1245, &x1246, x1244, x1240, x1237); + fiat_p384_addcarryx_u32(&x1247, &x1248, x1246, x1238, x1235); + fiat_p384_addcarryx_u32(&x1249, &x1250, x1248, x1236, x1233); + fiat_p384_addcarryx_u32(&x1251, &x1252, x1250, x1234, x1231); + fiat_p384_addcarryx_u32(&x1253, &x1254, x1252, x1232, x1229); + fiat_p384_addcarryx_u32(&x1255, &x1256, x1254, x1230, x1227); + fiat_p384_addcarryx_u32(&x1257, &x1258, x1256, x1228, x1225); + fiat_p384_addcarryx_u32(&x1259, &x1260, x1258, x1226, x1223); + fiat_p384_addcarryx_u32(&x1261, &x1262, x1260, x1224, x1221); + fiat_p384_addcarryx_u32(&x1263, &x1264, x1262, x1222, x1219); + x1265 = (x1264 + x1220); + fiat_p384_addcarryx_u32(&x1266, &x1267, 0x0, x1194, x1241); + fiat_p384_addcarryx_u32(&x1268, &x1269, x1267, x1196, x1243); + fiat_p384_addcarryx_u32(&x1270, &x1271, x1269, x1198, x1245); + fiat_p384_addcarryx_u32(&x1272, &x1273, x1271, x1200, x1247); + fiat_p384_addcarryx_u32(&x1274, &x1275, x1273, x1202, x1249); + fiat_p384_addcarryx_u32(&x1276, &x1277, x1275, x1204, x1251); + fiat_p384_addcarryx_u32(&x1278, &x1279, x1277, x1206, x1253); + fiat_p384_addcarryx_u32(&x1280, &x1281, x1279, x1208, x1255); + fiat_p384_addcarryx_u32(&x1282, &x1283, x1281, x1210, x1257); + fiat_p384_addcarryx_u32(&x1284, &x1285, x1283, x1212, x1259); + fiat_p384_addcarryx_u32(&x1286, &x1287, x1285, x1214, x1261); + fiat_p384_addcarryx_u32(&x1288, &x1289, x1287, x1216, x1263); + fiat_p384_addcarryx_u32(&x1290, &x1291, x1289, x1218, x1265); + fiat_p384_mulx_u32(&x1292, &x1293, x1266, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1294, &x1295, x1266, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1296, &x1297, x1266, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1298, &x1299, x1266, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1300, &x1301, x1266, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1302, &x1303, x1266, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1304, &x1305, x1266, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1306, &x1307, x1266, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x1308, &x1309, x1266, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1310, &x1311, x1266, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x1312, &x1313, 0x0, x1309, x1306); + fiat_p384_addcarryx_u32(&x1314, &x1315, x1313, x1307, x1304); + fiat_p384_addcarryx_u32(&x1316, &x1317, x1315, x1305, x1302); + fiat_p384_addcarryx_u32(&x1318, &x1319, x1317, x1303, x1300); + fiat_p384_addcarryx_u32(&x1320, &x1321, x1319, x1301, x1298); + fiat_p384_addcarryx_u32(&x1322, &x1323, x1321, x1299, x1296); + fiat_p384_addcarryx_u32(&x1324, &x1325, x1323, x1297, x1294); + fiat_p384_addcarryx_u32(&x1326, &x1327, x1325, x1295, x1292); + x1328 = (x1327 + x1293); + fiat_p384_addcarryx_u32(&x1329, &x1330, 0x0, x1266, x1310); + fiat_p384_addcarryx_u32(&x1331, &x1332, x1330, x1268, x1311); + fiat_p384_addcarryx_u32(&x1333, &x1334, x1332, x1270, 0x0); + fiat_p384_addcarryx_u32(&x1335, &x1336, x1334, x1272, x1308); + fiat_p384_addcarryx_u32(&x1337, &x1338, x1336, x1274, x1312); + fiat_p384_addcarryx_u32(&x1339, &x1340, x1338, x1276, x1314); + fiat_p384_addcarryx_u32(&x1341, &x1342, x1340, x1278, x1316); + fiat_p384_addcarryx_u32(&x1343, &x1344, x1342, x1280, x1318); + fiat_p384_addcarryx_u32(&x1345, &x1346, x1344, x1282, x1320); + fiat_p384_addcarryx_u32(&x1347, &x1348, x1346, x1284, x1322); + fiat_p384_addcarryx_u32(&x1349, &x1350, x1348, x1286, x1324); + fiat_p384_addcarryx_u32(&x1351, &x1352, x1350, x1288, x1326); + fiat_p384_addcarryx_u32(&x1353, &x1354, x1352, x1290, x1328); + x1355 = ((uint32_t)x1354 + x1291); + fiat_p384_mulx_u32(&x1356, &x1357, x10, (arg1[11])); + fiat_p384_mulx_u32(&x1358, &x1359, x10, (arg1[10])); + fiat_p384_mulx_u32(&x1360, &x1361, x10, (arg1[9])); + fiat_p384_mulx_u32(&x1362, &x1363, x10, (arg1[8])); + fiat_p384_mulx_u32(&x1364, &x1365, x10, (arg1[7])); + fiat_p384_mulx_u32(&x1366, &x1367, x10, (arg1[6])); + fiat_p384_mulx_u32(&x1368, &x1369, x10, (arg1[5])); + fiat_p384_mulx_u32(&x1370, &x1371, x10, (arg1[4])); + fiat_p384_mulx_u32(&x1372, &x1373, x10, (arg1[3])); + fiat_p384_mulx_u32(&x1374, &x1375, x10, (arg1[2])); + fiat_p384_mulx_u32(&x1376, &x1377, x10, (arg1[1])); + fiat_p384_mulx_u32(&x1378, &x1379, x10, (arg1[0])); + fiat_p384_addcarryx_u32(&x1380, &x1381, 0x0, x1379, x1376); + fiat_p384_addcarryx_u32(&x1382, &x1383, x1381, x1377, x1374); + fiat_p384_addcarryx_u32(&x1384, &x1385, x1383, x1375, x1372); + fiat_p384_addcarryx_u32(&x1386, &x1387, x1385, x1373, x1370); + fiat_p384_addcarryx_u32(&x1388, &x1389, x1387, x1371, x1368); + fiat_p384_addcarryx_u32(&x1390, &x1391, x1389, x1369, x1366); + fiat_p384_addcarryx_u32(&x1392, &x1393, x1391, x1367, x1364); + fiat_p384_addcarryx_u32(&x1394, &x1395, x1393, x1365, x1362); + fiat_p384_addcarryx_u32(&x1396, &x1397, x1395, x1363, x1360); + fiat_p384_addcarryx_u32(&x1398, &x1399, x1397, x1361, x1358); + fiat_p384_addcarryx_u32(&x1400, &x1401, x1399, x1359, x1356); + x1402 = (x1401 + x1357); + fiat_p384_addcarryx_u32(&x1403, &x1404, 0x0, x1331, x1378); + fiat_p384_addcarryx_u32(&x1405, &x1406, x1404, x1333, x1380); + fiat_p384_addcarryx_u32(&x1407, &x1408, x1406, x1335, x1382); + fiat_p384_addcarryx_u32(&x1409, &x1410, x1408, x1337, x1384); + fiat_p384_addcarryx_u32(&x1411, &x1412, x1410, x1339, x1386); + fiat_p384_addcarryx_u32(&x1413, &x1414, x1412, x1341, x1388); + fiat_p384_addcarryx_u32(&x1415, &x1416, x1414, x1343, x1390); + fiat_p384_addcarryx_u32(&x1417, &x1418, x1416, x1345, x1392); + fiat_p384_addcarryx_u32(&x1419, &x1420, x1418, x1347, x1394); + fiat_p384_addcarryx_u32(&x1421, &x1422, x1420, x1349, x1396); + fiat_p384_addcarryx_u32(&x1423, &x1424, x1422, x1351, x1398); + fiat_p384_addcarryx_u32(&x1425, &x1426, x1424, x1353, x1400); + fiat_p384_addcarryx_u32(&x1427, &x1428, x1426, x1355, x1402); + fiat_p384_mulx_u32(&x1429, &x1430, x1403, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1431, &x1432, x1403, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1433, &x1434, x1403, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1435, &x1436, x1403, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1437, &x1438, x1403, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1439, &x1440, x1403, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1441, &x1442, x1403, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1443, &x1444, x1403, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x1445, &x1446, x1403, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1447, &x1448, x1403, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x1449, &x1450, 0x0, x1446, x1443); + fiat_p384_addcarryx_u32(&x1451, &x1452, x1450, x1444, x1441); + fiat_p384_addcarryx_u32(&x1453, &x1454, x1452, x1442, x1439); + fiat_p384_addcarryx_u32(&x1455, &x1456, x1454, x1440, x1437); + fiat_p384_addcarryx_u32(&x1457, &x1458, x1456, x1438, x1435); + fiat_p384_addcarryx_u32(&x1459, &x1460, x1458, x1436, x1433); + fiat_p384_addcarryx_u32(&x1461, &x1462, x1460, x1434, x1431); + fiat_p384_addcarryx_u32(&x1463, &x1464, x1462, x1432, x1429); + x1465 = (x1464 + x1430); + fiat_p384_addcarryx_u32(&x1466, &x1467, 0x0, x1403, x1447); + fiat_p384_addcarryx_u32(&x1468, &x1469, x1467, x1405, x1448); + fiat_p384_addcarryx_u32(&x1470, &x1471, x1469, x1407, 0x0); + fiat_p384_addcarryx_u32(&x1472, &x1473, x1471, x1409, x1445); + fiat_p384_addcarryx_u32(&x1474, &x1475, x1473, x1411, x1449); + fiat_p384_addcarryx_u32(&x1476, &x1477, x1475, x1413, x1451); + fiat_p384_addcarryx_u32(&x1478, &x1479, x1477, x1415, x1453); + fiat_p384_addcarryx_u32(&x1480, &x1481, x1479, x1417, x1455); + fiat_p384_addcarryx_u32(&x1482, &x1483, x1481, x1419, x1457); + fiat_p384_addcarryx_u32(&x1484, &x1485, x1483, x1421, x1459); + fiat_p384_addcarryx_u32(&x1486, &x1487, x1485, x1423, x1461); + fiat_p384_addcarryx_u32(&x1488, &x1489, x1487, x1425, x1463); + fiat_p384_addcarryx_u32(&x1490, &x1491, x1489, x1427, x1465); + x1492 = ((uint32_t)x1491 + x1428); + fiat_p384_mulx_u32(&x1493, &x1494, x11, (arg1[11])); + fiat_p384_mulx_u32(&x1495, &x1496, x11, (arg1[10])); + fiat_p384_mulx_u32(&x1497, &x1498, x11, (arg1[9])); + fiat_p384_mulx_u32(&x1499, &x1500, x11, (arg1[8])); + fiat_p384_mulx_u32(&x1501, &x1502, x11, (arg1[7])); + fiat_p384_mulx_u32(&x1503, &x1504, x11, (arg1[6])); + fiat_p384_mulx_u32(&x1505, &x1506, x11, (arg1[5])); + fiat_p384_mulx_u32(&x1507, &x1508, x11, (arg1[4])); + fiat_p384_mulx_u32(&x1509, &x1510, x11, (arg1[3])); + fiat_p384_mulx_u32(&x1511, &x1512, x11, (arg1[2])); + fiat_p384_mulx_u32(&x1513, &x1514, x11, (arg1[1])); + fiat_p384_mulx_u32(&x1515, &x1516, x11, (arg1[0])); + fiat_p384_addcarryx_u32(&x1517, &x1518, 0x0, x1516, x1513); + fiat_p384_addcarryx_u32(&x1519, &x1520, x1518, x1514, x1511); + fiat_p384_addcarryx_u32(&x1521, &x1522, x1520, x1512, x1509); + fiat_p384_addcarryx_u32(&x1523, &x1524, x1522, x1510, x1507); + fiat_p384_addcarryx_u32(&x1525, &x1526, x1524, x1508, x1505); + fiat_p384_addcarryx_u32(&x1527, &x1528, x1526, x1506, x1503); + fiat_p384_addcarryx_u32(&x1529, &x1530, x1528, x1504, x1501); + fiat_p384_addcarryx_u32(&x1531, &x1532, x1530, x1502, x1499); + fiat_p384_addcarryx_u32(&x1533, &x1534, x1532, x1500, x1497); + fiat_p384_addcarryx_u32(&x1535, &x1536, x1534, x1498, x1495); + fiat_p384_addcarryx_u32(&x1537, &x1538, x1536, x1496, x1493); + x1539 = (x1538 + x1494); + fiat_p384_addcarryx_u32(&x1540, &x1541, 0x0, x1468, x1515); + fiat_p384_addcarryx_u32(&x1542, &x1543, x1541, x1470, x1517); + fiat_p384_addcarryx_u32(&x1544, &x1545, x1543, x1472, x1519); + fiat_p384_addcarryx_u32(&x1546, &x1547, x1545, x1474, x1521); + fiat_p384_addcarryx_u32(&x1548, &x1549, x1547, x1476, x1523); + fiat_p384_addcarryx_u32(&x1550, &x1551, x1549, x1478, x1525); + fiat_p384_addcarryx_u32(&x1552, &x1553, x1551, x1480, x1527); + fiat_p384_addcarryx_u32(&x1554, &x1555, x1553, x1482, x1529); + fiat_p384_addcarryx_u32(&x1556, &x1557, x1555, x1484, x1531); + fiat_p384_addcarryx_u32(&x1558, &x1559, x1557, x1486, x1533); + fiat_p384_addcarryx_u32(&x1560, &x1561, x1559, x1488, x1535); + fiat_p384_addcarryx_u32(&x1562, &x1563, x1561, x1490, x1537); + fiat_p384_addcarryx_u32(&x1564, &x1565, x1563, x1492, x1539); + fiat_p384_mulx_u32(&x1566, &x1567, x1540, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1568, &x1569, x1540, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1570, &x1571, x1540, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1572, &x1573, x1540, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1574, &x1575, x1540, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1576, &x1577, x1540, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1578, &x1579, x1540, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1580, &x1581, x1540, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x1582, &x1583, x1540, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1584, &x1585, x1540, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x1586, &x1587, 0x0, x1583, x1580); + fiat_p384_addcarryx_u32(&x1588, &x1589, x1587, x1581, x1578); + fiat_p384_addcarryx_u32(&x1590, &x1591, x1589, x1579, x1576); + fiat_p384_addcarryx_u32(&x1592, &x1593, x1591, x1577, x1574); + fiat_p384_addcarryx_u32(&x1594, &x1595, x1593, x1575, x1572); + fiat_p384_addcarryx_u32(&x1596, &x1597, x1595, x1573, x1570); + fiat_p384_addcarryx_u32(&x1598, &x1599, x1597, x1571, x1568); + fiat_p384_addcarryx_u32(&x1600, &x1601, x1599, x1569, x1566); + x1602 = (x1601 + x1567); + fiat_p384_addcarryx_u32(&x1603, &x1604, 0x0, x1540, x1584); + fiat_p384_addcarryx_u32(&x1605, &x1606, x1604, x1542, x1585); + fiat_p384_addcarryx_u32(&x1607, &x1608, x1606, x1544, 0x0); + fiat_p384_addcarryx_u32(&x1609, &x1610, x1608, x1546, x1582); + fiat_p384_addcarryx_u32(&x1611, &x1612, x1610, x1548, x1586); + fiat_p384_addcarryx_u32(&x1613, &x1614, x1612, x1550, x1588); + fiat_p384_addcarryx_u32(&x1615, &x1616, x1614, x1552, x1590); + fiat_p384_addcarryx_u32(&x1617, &x1618, x1616, x1554, x1592); + fiat_p384_addcarryx_u32(&x1619, &x1620, x1618, x1556, x1594); + fiat_p384_addcarryx_u32(&x1621, &x1622, x1620, x1558, x1596); + fiat_p384_addcarryx_u32(&x1623, &x1624, x1622, x1560, x1598); + fiat_p384_addcarryx_u32(&x1625, &x1626, x1624, x1562, x1600); + fiat_p384_addcarryx_u32(&x1627, &x1628, x1626, x1564, x1602); + x1629 = ((uint32_t)x1628 + x1565); + fiat_p384_subborrowx_u32(&x1630, &x1631, 0x0, x1605, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1632, &x1633, x1631, x1607, 0x0); + fiat_p384_subborrowx_u32(&x1634, &x1635, x1633, x1609, 0x0); + fiat_p384_subborrowx_u32(&x1636, &x1637, x1635, x1611, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1638, &x1639, x1637, x1613, UINT32_C(0xfffffffe)); + fiat_p384_subborrowx_u32(&x1640, &x1641, x1639, x1615, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1642, &x1643, x1641, x1617, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1644, &x1645, x1643, x1619, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1646, &x1647, x1645, x1621, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1648, &x1649, x1647, x1623, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1650, &x1651, x1649, x1625, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1652, &x1653, x1651, x1627, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1654, &x1655, x1653, x1629, 0x0); + fiat_p384_cmovznz_u32(&x1656, x1655, x1630, x1605); + fiat_p384_cmovznz_u32(&x1657, x1655, x1632, x1607); + fiat_p384_cmovznz_u32(&x1658, x1655, x1634, x1609); + fiat_p384_cmovznz_u32(&x1659, x1655, x1636, x1611); + fiat_p384_cmovznz_u32(&x1660, x1655, x1638, x1613); + fiat_p384_cmovznz_u32(&x1661, x1655, x1640, x1615); + fiat_p384_cmovznz_u32(&x1662, x1655, x1642, x1617); + fiat_p384_cmovznz_u32(&x1663, x1655, x1644, x1619); + fiat_p384_cmovznz_u32(&x1664, x1655, x1646, x1621); + fiat_p384_cmovznz_u32(&x1665, x1655, x1648, x1623); + fiat_p384_cmovznz_u32(&x1666, x1655, x1650, x1625); + fiat_p384_cmovznz_u32(&x1667, x1655, x1652, x1627); + out1[0] = x1656; + out1[1] = x1657; + out1[2] = x1658; + out1[3] = x1659; + out1[4] = x1660; + out1[5] = x1661; + out1[6] = x1662; + out1[7] = x1663; + out1[8] = x1664; + out1[9] = x1665; + out1[10] = x1666; + out1[11] = x1667; +} + +/* + * The function fiat_p384_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p384_add(uint32_t out1[12], const uint32_t arg1[12], const uint32_t arg2[12]) { + uint32_t x1; + fiat_p384_uint1 x2; + uint32_t x3; + fiat_p384_uint1 x4; + uint32_t x5; + fiat_p384_uint1 x6; + uint32_t x7; + fiat_p384_uint1 x8; + uint32_t x9; + fiat_p384_uint1 x10; + uint32_t x11; + fiat_p384_uint1 x12; + uint32_t x13; + fiat_p384_uint1 x14; + uint32_t x15; + fiat_p384_uint1 x16; + uint32_t x17; + fiat_p384_uint1 x18; + uint32_t x19; + fiat_p384_uint1 x20; + uint32_t x21; + fiat_p384_uint1 x22; + uint32_t x23; + fiat_p384_uint1 x24; + uint32_t x25; + fiat_p384_uint1 x26; + uint32_t x27; + fiat_p384_uint1 x28; + uint32_t x29; + fiat_p384_uint1 x30; + uint32_t x31; + fiat_p384_uint1 x32; + uint32_t x33; + fiat_p384_uint1 x34; + uint32_t x35; + fiat_p384_uint1 x36; + uint32_t x37; + fiat_p384_uint1 x38; + uint32_t x39; + fiat_p384_uint1 x40; + uint32_t x41; + fiat_p384_uint1 x42; + uint32_t x43; + fiat_p384_uint1 x44; + uint32_t x45; + fiat_p384_uint1 x46; + uint32_t x47; + fiat_p384_uint1 x48; + uint32_t x49; + fiat_p384_uint1 x50; + uint32_t x51; + uint32_t x52; + uint32_t x53; + uint32_t x54; + uint32_t x55; + uint32_t x56; + uint32_t x57; + uint32_t x58; + uint32_t x59; + uint32_t x60; + uint32_t x61; + uint32_t x62; + fiat_p384_addcarryx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_p384_addcarryx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_p384_addcarryx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_p384_addcarryx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_p384_addcarryx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_p384_addcarryx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_p384_addcarryx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); + fiat_p384_addcarryx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); + fiat_p384_addcarryx_u32(&x17, &x18, x16, (arg1[8]), (arg2[8])); + fiat_p384_addcarryx_u32(&x19, &x20, x18, (arg1[9]), (arg2[9])); + fiat_p384_addcarryx_u32(&x21, &x22, x20, (arg1[10]), (arg2[10])); + fiat_p384_addcarryx_u32(&x23, &x24, x22, (arg1[11]), (arg2[11])); + fiat_p384_subborrowx_u32(&x25, &x26, 0x0, x1, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x27, &x28, x26, x3, 0x0); + fiat_p384_subborrowx_u32(&x29, &x30, x28, x5, 0x0); + fiat_p384_subborrowx_u32(&x31, &x32, x30, x7, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x33, &x34, x32, x9, UINT32_C(0xfffffffe)); + fiat_p384_subborrowx_u32(&x35, &x36, x34, x11, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x37, &x38, x36, x13, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x39, &x40, x38, x15, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x41, &x42, x40, x17, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x43, &x44, x42, x19, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x45, &x46, x44, x21, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x47, &x48, x46, x23, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x49, &x50, x48, x24, 0x0); + fiat_p384_cmovznz_u32(&x51, x50, x25, x1); + fiat_p384_cmovznz_u32(&x52, x50, x27, x3); + fiat_p384_cmovznz_u32(&x53, x50, x29, x5); + fiat_p384_cmovznz_u32(&x54, x50, x31, x7); + fiat_p384_cmovznz_u32(&x55, x50, x33, x9); + fiat_p384_cmovznz_u32(&x56, x50, x35, x11); + fiat_p384_cmovznz_u32(&x57, x50, x37, x13); + fiat_p384_cmovznz_u32(&x58, x50, x39, x15); + fiat_p384_cmovznz_u32(&x59, x50, x41, x17); + fiat_p384_cmovznz_u32(&x60, x50, x43, x19); + fiat_p384_cmovznz_u32(&x61, x50, x45, x21); + fiat_p384_cmovznz_u32(&x62, x50, x47, x23); + out1[0] = x51; + out1[1] = x52; + out1[2] = x53; + out1[3] = x54; + out1[4] = x55; + out1[5] = x56; + out1[6] = x57; + out1[7] = x58; + out1[8] = x59; + out1[9] = x60; + out1[10] = x61; + out1[11] = x62; +} + +/* + * The function fiat_p384_sub subtracts two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p384_sub(uint32_t out1[12], const uint32_t arg1[12], const uint32_t arg2[12]) { + uint32_t x1; + fiat_p384_uint1 x2; + uint32_t x3; + fiat_p384_uint1 x4; + uint32_t x5; + fiat_p384_uint1 x6; + uint32_t x7; + fiat_p384_uint1 x8; + uint32_t x9; + fiat_p384_uint1 x10; + uint32_t x11; + fiat_p384_uint1 x12; + uint32_t x13; + fiat_p384_uint1 x14; + uint32_t x15; + fiat_p384_uint1 x16; + uint32_t x17; + fiat_p384_uint1 x18; + uint32_t x19; + fiat_p384_uint1 x20; + uint32_t x21; + fiat_p384_uint1 x22; + uint32_t x23; + fiat_p384_uint1 x24; + uint32_t x25; + uint32_t x26; + fiat_p384_uint1 x27; + uint32_t x28; + fiat_p384_uint1 x29; + uint32_t x30; + fiat_p384_uint1 x31; + uint32_t x32; + fiat_p384_uint1 x33; + uint32_t x34; + fiat_p384_uint1 x35; + uint32_t x36; + fiat_p384_uint1 x37; + uint32_t x38; + fiat_p384_uint1 x39; + uint32_t x40; + fiat_p384_uint1 x41; + uint32_t x42; + fiat_p384_uint1 x43; + uint32_t x44; + fiat_p384_uint1 x45; + uint32_t x46; + fiat_p384_uint1 x47; + uint32_t x48; + fiat_p384_uint1 x49; + fiat_p384_subborrowx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_p384_subborrowx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_p384_subborrowx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_p384_subborrowx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_p384_subborrowx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_p384_subborrowx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_p384_subborrowx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); + fiat_p384_subborrowx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); + fiat_p384_subborrowx_u32(&x17, &x18, x16, (arg1[8]), (arg2[8])); + fiat_p384_subborrowx_u32(&x19, &x20, x18, (arg1[9]), (arg2[9])); + fiat_p384_subborrowx_u32(&x21, &x22, x20, (arg1[10]), (arg2[10])); + fiat_p384_subborrowx_u32(&x23, &x24, x22, (arg1[11]), (arg2[11])); + fiat_p384_cmovznz_u32(&x25, x24, 0x0, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x26, &x27, 0x0, x1, x25); + fiat_p384_addcarryx_u32(&x28, &x29, x27, x3, 0x0); + fiat_p384_addcarryx_u32(&x30, &x31, x29, x5, 0x0); + fiat_p384_addcarryx_u32(&x32, &x33, x31, x7, x25); + fiat_p384_addcarryx_u32(&x34, &x35, x33, x9, (x25 & UINT32_C(0xfffffffe))); + fiat_p384_addcarryx_u32(&x36, &x37, x35, x11, x25); + fiat_p384_addcarryx_u32(&x38, &x39, x37, x13, x25); + fiat_p384_addcarryx_u32(&x40, &x41, x39, x15, x25); + fiat_p384_addcarryx_u32(&x42, &x43, x41, x17, x25); + fiat_p384_addcarryx_u32(&x44, &x45, x43, x19, x25); + fiat_p384_addcarryx_u32(&x46, &x47, x45, x21, x25); + fiat_p384_addcarryx_u32(&x48, &x49, x47, x23, x25); + out1[0] = x26; + out1[1] = x28; + out1[2] = x30; + out1[3] = x32; + out1[4] = x34; + out1[5] = x36; + out1[6] = x38; + out1[7] = x40; + out1[8] = x42; + out1[9] = x44; + out1[10] = x46; + out1[11] = x48; +} + +/* + * The function fiat_p384_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p384_opp(uint32_t out1[12], const uint32_t arg1[12]) { + uint32_t x1; + fiat_p384_uint1 x2; + uint32_t x3; + fiat_p384_uint1 x4; + uint32_t x5; + fiat_p384_uint1 x6; + uint32_t x7; + fiat_p384_uint1 x8; + uint32_t x9; + fiat_p384_uint1 x10; + uint32_t x11; + fiat_p384_uint1 x12; + uint32_t x13; + fiat_p384_uint1 x14; + uint32_t x15; + fiat_p384_uint1 x16; + uint32_t x17; + fiat_p384_uint1 x18; + uint32_t x19; + fiat_p384_uint1 x20; + uint32_t x21; + fiat_p384_uint1 x22; + uint32_t x23; + fiat_p384_uint1 x24; + uint32_t x25; + uint32_t x26; + fiat_p384_uint1 x27; + uint32_t x28; + fiat_p384_uint1 x29; + uint32_t x30; + fiat_p384_uint1 x31; + uint32_t x32; + fiat_p384_uint1 x33; + uint32_t x34; + fiat_p384_uint1 x35; + uint32_t x36; + fiat_p384_uint1 x37; + uint32_t x38; + fiat_p384_uint1 x39; + uint32_t x40; + fiat_p384_uint1 x41; + uint32_t x42; + fiat_p384_uint1 x43; + uint32_t x44; + fiat_p384_uint1 x45; + uint32_t x46; + fiat_p384_uint1 x47; + uint32_t x48; + fiat_p384_uint1 x49; + fiat_p384_subborrowx_u32(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_p384_subborrowx_u32(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_p384_subborrowx_u32(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_p384_subborrowx_u32(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_p384_subborrowx_u32(&x9, &x10, x8, 0x0, (arg1[4])); + fiat_p384_subborrowx_u32(&x11, &x12, x10, 0x0, (arg1[5])); + fiat_p384_subborrowx_u32(&x13, &x14, x12, 0x0, (arg1[6])); + fiat_p384_subborrowx_u32(&x15, &x16, x14, 0x0, (arg1[7])); + fiat_p384_subborrowx_u32(&x17, &x18, x16, 0x0, (arg1[8])); + fiat_p384_subborrowx_u32(&x19, &x20, x18, 0x0, (arg1[9])); + fiat_p384_subborrowx_u32(&x21, &x22, x20, 0x0, (arg1[10])); + fiat_p384_subborrowx_u32(&x23, &x24, x22, 0x0, (arg1[11])); + fiat_p384_cmovznz_u32(&x25, x24, 0x0, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x26, &x27, 0x0, x1, x25); + fiat_p384_addcarryx_u32(&x28, &x29, x27, x3, 0x0); + fiat_p384_addcarryx_u32(&x30, &x31, x29, x5, 0x0); + fiat_p384_addcarryx_u32(&x32, &x33, x31, x7, x25); + fiat_p384_addcarryx_u32(&x34, &x35, x33, x9, (x25 & UINT32_C(0xfffffffe))); + fiat_p384_addcarryx_u32(&x36, &x37, x35, x11, x25); + fiat_p384_addcarryx_u32(&x38, &x39, x37, x13, x25); + fiat_p384_addcarryx_u32(&x40, &x41, x39, x15, x25); + fiat_p384_addcarryx_u32(&x42, &x43, x41, x17, x25); + fiat_p384_addcarryx_u32(&x44, &x45, x43, x19, x25); + fiat_p384_addcarryx_u32(&x46, &x47, x45, x21, x25); + fiat_p384_addcarryx_u32(&x48, &x49, x47, x23, x25); + out1[0] = x26; + out1[1] = x28; + out1[2] = x30; + out1[3] = x32; + out1[4] = x34; + out1[5] = x36; + out1[6] = x38; + out1[7] = x40; + out1[8] = x42; + out1[9] = x44; + out1[10] = x46; + out1[11] = x48; +} + +/* + * The function fiat_p384_from_montgomery translates a field element out of the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^32)⁻¹ mod m)^12) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p384_from_montgomery(uint32_t out1[12], const uint32_t arg1[12]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + fiat_p384_uint1 x23; + uint32_t x24; + fiat_p384_uint1 x25; + uint32_t x26; + fiat_p384_uint1 x27; + uint32_t x28; + fiat_p384_uint1 x29; + uint32_t x30; + fiat_p384_uint1 x31; + uint32_t x32; + fiat_p384_uint1 x33; + uint32_t x34; + fiat_p384_uint1 x35; + uint32_t x36; + fiat_p384_uint1 x37; + uint32_t x38; + fiat_p384_uint1 x39; + uint32_t x40; + fiat_p384_uint1 x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + uint32_t x52; + uint32_t x53; + uint32_t x54; + uint32_t x55; + uint32_t x56; + uint32_t x57; + uint32_t x58; + uint32_t x59; + uint32_t x60; + uint32_t x61; + uint32_t x62; + fiat_p384_uint1 x63; + uint32_t x64; + fiat_p384_uint1 x65; + uint32_t x66; + fiat_p384_uint1 x67; + uint32_t x68; + fiat_p384_uint1 x69; + uint32_t x70; + fiat_p384_uint1 x71; + uint32_t x72; + fiat_p384_uint1 x73; + uint32_t x74; + fiat_p384_uint1 x75; + uint32_t x76; + fiat_p384_uint1 x77; + uint32_t x78; + fiat_p384_uint1 x79; + uint32_t x80; + fiat_p384_uint1 x81; + uint32_t x82; + fiat_p384_uint1 x83; + uint32_t x84; + fiat_p384_uint1 x85; + uint32_t x86; + fiat_p384_uint1 x87; + uint32_t x88; + fiat_p384_uint1 x89; + uint32_t x90; + fiat_p384_uint1 x91; + uint32_t x92; + fiat_p384_uint1 x93; + uint32_t x94; + fiat_p384_uint1 x95; + uint32_t x96; + fiat_p384_uint1 x97; + uint32_t x98; + fiat_p384_uint1 x99; + uint32_t x100; + fiat_p384_uint1 x101; + uint32_t x102; + fiat_p384_uint1 x103; + uint32_t x104; + fiat_p384_uint1 x105; + uint32_t x106; + fiat_p384_uint1 x107; + uint32_t x108; + fiat_p384_uint1 x109; + uint32_t x110; + fiat_p384_uint1 x111; + uint32_t x112; + fiat_p384_uint1 x113; + uint32_t x114; + fiat_p384_uint1 x115; + uint32_t x116; + fiat_p384_uint1 x117; + uint32_t x118; + fiat_p384_uint1 x119; + uint32_t x120; + fiat_p384_uint1 x121; + uint32_t x122; + fiat_p384_uint1 x123; + uint32_t x124; + fiat_p384_uint1 x125; + uint32_t x126; + fiat_p384_uint1 x127; + uint32_t x128; + uint32_t x129; + uint32_t x130; + uint32_t x131; + uint32_t x132; + uint32_t x133; + uint32_t x134; + uint32_t x135; + uint32_t x136; + uint32_t x137; + uint32_t x138; + uint32_t x139; + uint32_t x140; + uint32_t x141; + uint32_t x142; + uint32_t x143; + uint32_t x144; + uint32_t x145; + uint32_t x146; + uint32_t x147; + uint32_t x148; + fiat_p384_uint1 x149; + uint32_t x150; + fiat_p384_uint1 x151; + uint32_t x152; + fiat_p384_uint1 x153; + uint32_t x154; + fiat_p384_uint1 x155; + uint32_t x156; + fiat_p384_uint1 x157; + uint32_t x158; + fiat_p384_uint1 x159; + uint32_t x160; + fiat_p384_uint1 x161; + uint32_t x162; + fiat_p384_uint1 x163; + uint32_t x164; + fiat_p384_uint1 x165; + uint32_t x166; + fiat_p384_uint1 x167; + uint32_t x168; + fiat_p384_uint1 x169; + uint32_t x170; + fiat_p384_uint1 x171; + uint32_t x172; + fiat_p384_uint1 x173; + uint32_t x174; + fiat_p384_uint1 x175; + uint32_t x176; + fiat_p384_uint1 x177; + uint32_t x178; + fiat_p384_uint1 x179; + uint32_t x180; + fiat_p384_uint1 x181; + uint32_t x182; + fiat_p384_uint1 x183; + uint32_t x184; + fiat_p384_uint1 x185; + uint32_t x186; + fiat_p384_uint1 x187; + uint32_t x188; + fiat_p384_uint1 x189; + uint32_t x190; + fiat_p384_uint1 x191; + uint32_t x192; + fiat_p384_uint1 x193; + uint32_t x194; + fiat_p384_uint1 x195; + uint32_t x196; + fiat_p384_uint1 x197; + uint32_t x198; + fiat_p384_uint1 x199; + uint32_t x200; + fiat_p384_uint1 x201; + uint32_t x202; + fiat_p384_uint1 x203; + uint32_t x204; + fiat_p384_uint1 x205; + uint32_t x206; + fiat_p384_uint1 x207; + uint32_t x208; + fiat_p384_uint1 x209; + uint32_t x210; + fiat_p384_uint1 x211; + uint32_t x212; + fiat_p384_uint1 x213; + uint32_t x214; + uint32_t x215; + uint32_t x216; + uint32_t x217; + uint32_t x218; + uint32_t x219; + uint32_t x220; + uint32_t x221; + uint32_t x222; + uint32_t x223; + uint32_t x224; + uint32_t x225; + uint32_t x226; + uint32_t x227; + uint32_t x228; + uint32_t x229; + uint32_t x230; + uint32_t x231; + uint32_t x232; + uint32_t x233; + uint32_t x234; + fiat_p384_uint1 x235; + uint32_t x236; + fiat_p384_uint1 x237; + uint32_t x238; + fiat_p384_uint1 x239; + uint32_t x240; + fiat_p384_uint1 x241; + uint32_t x242; + fiat_p384_uint1 x243; + uint32_t x244; + fiat_p384_uint1 x245; + uint32_t x246; + fiat_p384_uint1 x247; + uint32_t x248; + fiat_p384_uint1 x249; + uint32_t x250; + fiat_p384_uint1 x251; + uint32_t x252; + fiat_p384_uint1 x253; + uint32_t x254; + fiat_p384_uint1 x255; + uint32_t x256; + fiat_p384_uint1 x257; + uint32_t x258; + fiat_p384_uint1 x259; + uint32_t x260; + fiat_p384_uint1 x261; + uint32_t x262; + fiat_p384_uint1 x263; + uint32_t x264; + fiat_p384_uint1 x265; + uint32_t x266; + fiat_p384_uint1 x267; + uint32_t x268; + fiat_p384_uint1 x269; + uint32_t x270; + fiat_p384_uint1 x271; + uint32_t x272; + fiat_p384_uint1 x273; + uint32_t x274; + fiat_p384_uint1 x275; + uint32_t x276; + fiat_p384_uint1 x277; + uint32_t x278; + fiat_p384_uint1 x279; + uint32_t x280; + fiat_p384_uint1 x281; + uint32_t x282; + fiat_p384_uint1 x283; + uint32_t x284; + fiat_p384_uint1 x285; + uint32_t x286; + fiat_p384_uint1 x287; + uint32_t x288; + fiat_p384_uint1 x289; + uint32_t x290; + fiat_p384_uint1 x291; + uint32_t x292; + fiat_p384_uint1 x293; + uint32_t x294; + fiat_p384_uint1 x295; + uint32_t x296; + fiat_p384_uint1 x297; + uint32_t x298; + fiat_p384_uint1 x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + uint32_t x303; + uint32_t x304; + uint32_t x305; + uint32_t x306; + uint32_t x307; + uint32_t x308; + uint32_t x309; + uint32_t x310; + uint32_t x311; + uint32_t x312; + uint32_t x313; + uint32_t x314; + uint32_t x315; + uint32_t x316; + uint32_t x317; + uint32_t x318; + uint32_t x319; + uint32_t x320; + fiat_p384_uint1 x321; + uint32_t x322; + fiat_p384_uint1 x323; + uint32_t x324; + fiat_p384_uint1 x325; + uint32_t x326; + fiat_p384_uint1 x327; + uint32_t x328; + fiat_p384_uint1 x329; + uint32_t x330; + fiat_p384_uint1 x331; + uint32_t x332; + fiat_p384_uint1 x333; + uint32_t x334; + fiat_p384_uint1 x335; + uint32_t x336; + fiat_p384_uint1 x337; + uint32_t x338; + fiat_p384_uint1 x339; + uint32_t x340; + fiat_p384_uint1 x341; + uint32_t x342; + fiat_p384_uint1 x343; + uint32_t x344; + fiat_p384_uint1 x345; + uint32_t x346; + fiat_p384_uint1 x347; + uint32_t x348; + fiat_p384_uint1 x349; + uint32_t x350; + fiat_p384_uint1 x351; + uint32_t x352; + fiat_p384_uint1 x353; + uint32_t x354; + fiat_p384_uint1 x355; + uint32_t x356; + fiat_p384_uint1 x357; + uint32_t x358; + fiat_p384_uint1 x359; + uint32_t x360; + fiat_p384_uint1 x361; + uint32_t x362; + fiat_p384_uint1 x363; + uint32_t x364; + fiat_p384_uint1 x365; + uint32_t x366; + fiat_p384_uint1 x367; + uint32_t x368; + fiat_p384_uint1 x369; + uint32_t x370; + fiat_p384_uint1 x371; + uint32_t x372; + fiat_p384_uint1 x373; + uint32_t x374; + fiat_p384_uint1 x375; + uint32_t x376; + fiat_p384_uint1 x377; + uint32_t x378; + fiat_p384_uint1 x379; + uint32_t x380; + fiat_p384_uint1 x381; + uint32_t x382; + fiat_p384_uint1 x383; + uint32_t x384; + fiat_p384_uint1 x385; + uint32_t x386; + uint32_t x387; + uint32_t x388; + uint32_t x389; + uint32_t x390; + uint32_t x391; + uint32_t x392; + uint32_t x393; + uint32_t x394; + uint32_t x395; + uint32_t x396; + uint32_t x397; + uint32_t x398; + uint32_t x399; + uint32_t x400; + uint32_t x401; + uint32_t x402; + uint32_t x403; + uint32_t x404; + uint32_t x405; + uint32_t x406; + fiat_p384_uint1 x407; + uint32_t x408; + fiat_p384_uint1 x409; + uint32_t x410; + fiat_p384_uint1 x411; + uint32_t x412; + fiat_p384_uint1 x413; + uint32_t x414; + fiat_p384_uint1 x415; + uint32_t x416; + fiat_p384_uint1 x417; + uint32_t x418; + fiat_p384_uint1 x419; + uint32_t x420; + fiat_p384_uint1 x421; + uint32_t x422; + fiat_p384_uint1 x423; + uint32_t x424; + fiat_p384_uint1 x425; + uint32_t x426; + fiat_p384_uint1 x427; + uint32_t x428; + fiat_p384_uint1 x429; + uint32_t x430; + fiat_p384_uint1 x431; + uint32_t x432; + fiat_p384_uint1 x433; + uint32_t x434; + fiat_p384_uint1 x435; + uint32_t x436; + fiat_p384_uint1 x437; + uint32_t x438; + fiat_p384_uint1 x439; + uint32_t x440; + fiat_p384_uint1 x441; + uint32_t x442; + fiat_p384_uint1 x443; + uint32_t x444; + fiat_p384_uint1 x445; + uint32_t x446; + fiat_p384_uint1 x447; + uint32_t x448; + fiat_p384_uint1 x449; + uint32_t x450; + fiat_p384_uint1 x451; + uint32_t x452; + fiat_p384_uint1 x453; + uint32_t x454; + fiat_p384_uint1 x455; + uint32_t x456; + fiat_p384_uint1 x457; + uint32_t x458; + fiat_p384_uint1 x459; + uint32_t x460; + fiat_p384_uint1 x461; + uint32_t x462; + fiat_p384_uint1 x463; + uint32_t x464; + fiat_p384_uint1 x465; + uint32_t x466; + fiat_p384_uint1 x467; + uint32_t x468; + fiat_p384_uint1 x469; + uint32_t x470; + fiat_p384_uint1 x471; + uint32_t x472; + uint32_t x473; + uint32_t x474; + uint32_t x475; + uint32_t x476; + uint32_t x477; + uint32_t x478; + uint32_t x479; + uint32_t x480; + uint32_t x481; + uint32_t x482; + uint32_t x483; + uint32_t x484; + uint32_t x485; + uint32_t x486; + uint32_t x487; + uint32_t x488; + uint32_t x489; + uint32_t x490; + uint32_t x491; + uint32_t x492; + fiat_p384_uint1 x493; + uint32_t x494; + fiat_p384_uint1 x495; + uint32_t x496; + fiat_p384_uint1 x497; + uint32_t x498; + fiat_p384_uint1 x499; + uint32_t x500; + fiat_p384_uint1 x501; + uint32_t x502; + fiat_p384_uint1 x503; + uint32_t x504; + fiat_p384_uint1 x505; + uint32_t x506; + fiat_p384_uint1 x507; + uint32_t x508; + fiat_p384_uint1 x509; + uint32_t x510; + fiat_p384_uint1 x511; + uint32_t x512; + fiat_p384_uint1 x513; + uint32_t x514; + fiat_p384_uint1 x515; + uint32_t x516; + fiat_p384_uint1 x517; + uint32_t x518; + fiat_p384_uint1 x519; + uint32_t x520; + fiat_p384_uint1 x521; + uint32_t x522; + fiat_p384_uint1 x523; + uint32_t x524; + fiat_p384_uint1 x525; + uint32_t x526; + fiat_p384_uint1 x527; + uint32_t x528; + fiat_p384_uint1 x529; + uint32_t x530; + fiat_p384_uint1 x531; + uint32_t x532; + fiat_p384_uint1 x533; + uint32_t x534; + fiat_p384_uint1 x535; + uint32_t x536; + fiat_p384_uint1 x537; + uint32_t x538; + fiat_p384_uint1 x539; + uint32_t x540; + fiat_p384_uint1 x541; + uint32_t x542; + fiat_p384_uint1 x543; + uint32_t x544; + fiat_p384_uint1 x545; + uint32_t x546; + fiat_p384_uint1 x547; + uint32_t x548; + fiat_p384_uint1 x549; + uint32_t x550; + fiat_p384_uint1 x551; + uint32_t x552; + fiat_p384_uint1 x553; + uint32_t x554; + fiat_p384_uint1 x555; + uint32_t x556; + fiat_p384_uint1 x557; + uint32_t x558; + uint32_t x559; + uint32_t x560; + uint32_t x561; + uint32_t x562; + uint32_t x563; + uint32_t x564; + uint32_t x565; + uint32_t x566; + uint32_t x567; + uint32_t x568; + uint32_t x569; + uint32_t x570; + uint32_t x571; + uint32_t x572; + uint32_t x573; + uint32_t x574; + uint32_t x575; + uint32_t x576; + uint32_t x577; + uint32_t x578; + fiat_p384_uint1 x579; + uint32_t x580; + fiat_p384_uint1 x581; + uint32_t x582; + fiat_p384_uint1 x583; + uint32_t x584; + fiat_p384_uint1 x585; + uint32_t x586; + fiat_p384_uint1 x587; + uint32_t x588; + fiat_p384_uint1 x589; + uint32_t x590; + fiat_p384_uint1 x591; + uint32_t x592; + fiat_p384_uint1 x593; + uint32_t x594; + fiat_p384_uint1 x595; + uint32_t x596; + fiat_p384_uint1 x597; + uint32_t x598; + fiat_p384_uint1 x599; + uint32_t x600; + fiat_p384_uint1 x601; + uint32_t x602; + fiat_p384_uint1 x603; + uint32_t x604; + fiat_p384_uint1 x605; + uint32_t x606; + fiat_p384_uint1 x607; + uint32_t x608; + fiat_p384_uint1 x609; + uint32_t x610; + fiat_p384_uint1 x611; + uint32_t x612; + fiat_p384_uint1 x613; + uint32_t x614; + fiat_p384_uint1 x615; + uint32_t x616; + fiat_p384_uint1 x617; + uint32_t x618; + fiat_p384_uint1 x619; + uint32_t x620; + fiat_p384_uint1 x621; + uint32_t x622; + fiat_p384_uint1 x623; + uint32_t x624; + fiat_p384_uint1 x625; + uint32_t x626; + fiat_p384_uint1 x627; + uint32_t x628; + fiat_p384_uint1 x629; + uint32_t x630; + fiat_p384_uint1 x631; + uint32_t x632; + fiat_p384_uint1 x633; + uint32_t x634; + fiat_p384_uint1 x635; + uint32_t x636; + fiat_p384_uint1 x637; + uint32_t x638; + fiat_p384_uint1 x639; + uint32_t x640; + fiat_p384_uint1 x641; + uint32_t x642; + fiat_p384_uint1 x643; + uint32_t x644; + uint32_t x645; + uint32_t x646; + uint32_t x647; + uint32_t x648; + uint32_t x649; + uint32_t x650; + uint32_t x651; + uint32_t x652; + uint32_t x653; + uint32_t x654; + uint32_t x655; + uint32_t x656; + uint32_t x657; + uint32_t x658; + uint32_t x659; + uint32_t x660; + uint32_t x661; + uint32_t x662; + uint32_t x663; + uint32_t x664; + fiat_p384_uint1 x665; + uint32_t x666; + fiat_p384_uint1 x667; + uint32_t x668; + fiat_p384_uint1 x669; + uint32_t x670; + fiat_p384_uint1 x671; + uint32_t x672; + fiat_p384_uint1 x673; + uint32_t x674; + fiat_p384_uint1 x675; + uint32_t x676; + fiat_p384_uint1 x677; + uint32_t x678; + fiat_p384_uint1 x679; + uint32_t x680; + fiat_p384_uint1 x681; + uint32_t x682; + fiat_p384_uint1 x683; + uint32_t x684; + fiat_p384_uint1 x685; + uint32_t x686; + fiat_p384_uint1 x687; + uint32_t x688; + fiat_p384_uint1 x689; + uint32_t x690; + fiat_p384_uint1 x691; + uint32_t x692; + fiat_p384_uint1 x693; + uint32_t x694; + fiat_p384_uint1 x695; + uint32_t x696; + fiat_p384_uint1 x697; + uint32_t x698; + fiat_p384_uint1 x699; + uint32_t x700; + fiat_p384_uint1 x701; + uint32_t x702; + fiat_p384_uint1 x703; + uint32_t x704; + fiat_p384_uint1 x705; + uint32_t x706; + fiat_p384_uint1 x707; + uint32_t x708; + fiat_p384_uint1 x709; + uint32_t x710; + fiat_p384_uint1 x711; + uint32_t x712; + fiat_p384_uint1 x713; + uint32_t x714; + fiat_p384_uint1 x715; + uint32_t x716; + fiat_p384_uint1 x717; + uint32_t x718; + fiat_p384_uint1 x719; + uint32_t x720; + fiat_p384_uint1 x721; + uint32_t x722; + fiat_p384_uint1 x723; + uint32_t x724; + fiat_p384_uint1 x725; + uint32_t x726; + fiat_p384_uint1 x727; + uint32_t x728; + fiat_p384_uint1 x729; + uint32_t x730; + uint32_t x731; + uint32_t x732; + uint32_t x733; + uint32_t x734; + uint32_t x735; + uint32_t x736; + uint32_t x737; + uint32_t x738; + uint32_t x739; + uint32_t x740; + uint32_t x741; + uint32_t x742; + uint32_t x743; + uint32_t x744; + uint32_t x745; + uint32_t x746; + uint32_t x747; + uint32_t x748; + uint32_t x749; + uint32_t x750; + fiat_p384_uint1 x751; + uint32_t x752; + fiat_p384_uint1 x753; + uint32_t x754; + fiat_p384_uint1 x755; + uint32_t x756; + fiat_p384_uint1 x757; + uint32_t x758; + fiat_p384_uint1 x759; + uint32_t x760; + fiat_p384_uint1 x761; + uint32_t x762; + fiat_p384_uint1 x763; + uint32_t x764; + fiat_p384_uint1 x765; + uint32_t x766; + fiat_p384_uint1 x767; + uint32_t x768; + fiat_p384_uint1 x769; + uint32_t x770; + fiat_p384_uint1 x771; + uint32_t x772; + fiat_p384_uint1 x773; + uint32_t x774; + fiat_p384_uint1 x775; + uint32_t x776; + fiat_p384_uint1 x777; + uint32_t x778; + fiat_p384_uint1 x779; + uint32_t x780; + fiat_p384_uint1 x781; + uint32_t x782; + fiat_p384_uint1 x783; + uint32_t x784; + fiat_p384_uint1 x785; + uint32_t x786; + fiat_p384_uint1 x787; + uint32_t x788; + fiat_p384_uint1 x789; + uint32_t x790; + fiat_p384_uint1 x791; + uint32_t x792; + fiat_p384_uint1 x793; + uint32_t x794; + fiat_p384_uint1 x795; + uint32_t x796; + fiat_p384_uint1 x797; + uint32_t x798; + fiat_p384_uint1 x799; + uint32_t x800; + fiat_p384_uint1 x801; + uint32_t x802; + fiat_p384_uint1 x803; + uint32_t x804; + fiat_p384_uint1 x805; + uint32_t x806; + fiat_p384_uint1 x807; + uint32_t x808; + fiat_p384_uint1 x809; + uint32_t x810; + fiat_p384_uint1 x811; + uint32_t x812; + fiat_p384_uint1 x813; + uint32_t x814; + fiat_p384_uint1 x815; + uint32_t x816; + uint32_t x817; + uint32_t x818; + uint32_t x819; + uint32_t x820; + uint32_t x821; + uint32_t x822; + uint32_t x823; + uint32_t x824; + uint32_t x825; + uint32_t x826; + uint32_t x827; + uint32_t x828; + uint32_t x829; + uint32_t x830; + uint32_t x831; + uint32_t x832; + uint32_t x833; + uint32_t x834; + uint32_t x835; + uint32_t x836; + fiat_p384_uint1 x837; + uint32_t x838; + fiat_p384_uint1 x839; + uint32_t x840; + fiat_p384_uint1 x841; + uint32_t x842; + fiat_p384_uint1 x843; + uint32_t x844; + fiat_p384_uint1 x845; + uint32_t x846; + fiat_p384_uint1 x847; + uint32_t x848; + fiat_p384_uint1 x849; + uint32_t x850; + fiat_p384_uint1 x851; + uint32_t x852; + fiat_p384_uint1 x853; + uint32_t x854; + fiat_p384_uint1 x855; + uint32_t x856; + fiat_p384_uint1 x857; + uint32_t x858; + fiat_p384_uint1 x859; + uint32_t x860; + fiat_p384_uint1 x861; + uint32_t x862; + fiat_p384_uint1 x863; + uint32_t x864; + fiat_p384_uint1 x865; + uint32_t x866; + fiat_p384_uint1 x867; + uint32_t x868; + fiat_p384_uint1 x869; + uint32_t x870; + fiat_p384_uint1 x871; + uint32_t x872; + fiat_p384_uint1 x873; + uint32_t x874; + fiat_p384_uint1 x875; + uint32_t x876; + fiat_p384_uint1 x877; + uint32_t x878; + fiat_p384_uint1 x879; + uint32_t x880; + fiat_p384_uint1 x881; + uint32_t x882; + fiat_p384_uint1 x883; + uint32_t x884; + fiat_p384_uint1 x885; + uint32_t x886; + fiat_p384_uint1 x887; + uint32_t x888; + fiat_p384_uint1 x889; + uint32_t x890; + fiat_p384_uint1 x891; + uint32_t x892; + fiat_p384_uint1 x893; + uint32_t x894; + fiat_p384_uint1 x895; + uint32_t x896; + fiat_p384_uint1 x897; + uint32_t x898; + fiat_p384_uint1 x899; + uint32_t x900; + fiat_p384_uint1 x901; + uint32_t x902; + uint32_t x903; + uint32_t x904; + uint32_t x905; + uint32_t x906; + uint32_t x907; + uint32_t x908; + uint32_t x909; + uint32_t x910; + uint32_t x911; + uint32_t x912; + uint32_t x913; + uint32_t x914; + uint32_t x915; + uint32_t x916; + uint32_t x917; + uint32_t x918; + uint32_t x919; + uint32_t x920; + uint32_t x921; + uint32_t x922; + fiat_p384_uint1 x923; + uint32_t x924; + fiat_p384_uint1 x925; + uint32_t x926; + fiat_p384_uint1 x927; + uint32_t x928; + fiat_p384_uint1 x929; + uint32_t x930; + fiat_p384_uint1 x931; + uint32_t x932; + fiat_p384_uint1 x933; + uint32_t x934; + fiat_p384_uint1 x935; + uint32_t x936; + fiat_p384_uint1 x937; + uint32_t x938; + fiat_p384_uint1 x939; + uint32_t x940; + fiat_p384_uint1 x941; + uint32_t x942; + fiat_p384_uint1 x943; + uint32_t x944; + fiat_p384_uint1 x945; + uint32_t x946; + fiat_p384_uint1 x947; + uint32_t x948; + fiat_p384_uint1 x949; + uint32_t x950; + fiat_p384_uint1 x951; + uint32_t x952; + fiat_p384_uint1 x953; + uint32_t x954; + fiat_p384_uint1 x955; + uint32_t x956; + fiat_p384_uint1 x957; + uint32_t x958; + fiat_p384_uint1 x959; + uint32_t x960; + fiat_p384_uint1 x961; + uint32_t x962; + fiat_p384_uint1 x963; + uint32_t x964; + fiat_p384_uint1 x965; + uint32_t x966; + fiat_p384_uint1 x967; + uint32_t x968; + fiat_p384_uint1 x969; + uint32_t x970; + fiat_p384_uint1 x971; + uint32_t x972; + fiat_p384_uint1 x973; + uint32_t x974; + fiat_p384_uint1 x975; + uint32_t x976; + fiat_p384_uint1 x977; + uint32_t x978; + fiat_p384_uint1 x979; + uint32_t x980; + fiat_p384_uint1 x981; + uint32_t x982; + fiat_p384_uint1 x983; + uint32_t x984; + fiat_p384_uint1 x985; + uint32_t x986; + fiat_p384_uint1 x987; + uint32_t x988; + fiat_p384_uint1 x989; + uint32_t x990; + uint32_t x991; + uint32_t x992; + uint32_t x993; + uint32_t x994; + uint32_t x995; + uint32_t x996; + uint32_t x997; + uint32_t x998; + uint32_t x999; + uint32_t x1000; + uint32_t x1001; + x1 = (arg1[0]); + fiat_p384_mulx_u32(&x2, &x3, x1, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x4, &x5, x1, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x6, &x7, x1, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x8, &x9, x1, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x10, &x11, x1, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x12, &x13, x1, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x14, &x15, x1, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x16, &x17, x1, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x18, &x19, x1, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x20, &x21, x1, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x22, &x23, 0x0, x19, x16); + fiat_p384_addcarryx_u32(&x24, &x25, x23, x17, x14); + fiat_p384_addcarryx_u32(&x26, &x27, x25, x15, x12); + fiat_p384_addcarryx_u32(&x28, &x29, x27, x13, x10); + fiat_p384_addcarryx_u32(&x30, &x31, x29, x11, x8); + fiat_p384_addcarryx_u32(&x32, &x33, x31, x9, x6); + fiat_p384_addcarryx_u32(&x34, &x35, x33, x7, x4); + fiat_p384_addcarryx_u32(&x36, &x37, x35, x5, x2); + fiat_p384_addcarryx_u32(&x38, &x39, 0x0, x1, x20); + fiat_p384_addcarryx_u32(&x40, &x41, 0x0, (x39 + x21), (arg1[1])); + fiat_p384_mulx_u32(&x42, &x43, x40, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x44, &x45, x40, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x46, &x47, x40, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x48, &x49, x40, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x50, &x51, x40, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x52, &x53, x40, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x54, &x55, x40, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x56, &x57, x40, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x58, &x59, x40, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x60, &x61, x40, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x62, &x63, 0x0, x59, x56); + fiat_p384_addcarryx_u32(&x64, &x65, x63, x57, x54); + fiat_p384_addcarryx_u32(&x66, &x67, x65, x55, x52); + fiat_p384_addcarryx_u32(&x68, &x69, x67, x53, x50); + fiat_p384_addcarryx_u32(&x70, &x71, x69, x51, x48); + fiat_p384_addcarryx_u32(&x72, &x73, x71, x49, x46); + fiat_p384_addcarryx_u32(&x74, &x75, x73, x47, x44); + fiat_p384_addcarryx_u32(&x76, &x77, x75, x45, x42); + fiat_p384_addcarryx_u32(&x78, &x79, 0x0, x40, x60); + fiat_p384_addcarryx_u32(&x80, &x81, x79, x41, x61); + fiat_p384_addcarryx_u32(&x82, &x83, x81, x18, 0x0); + fiat_p384_addcarryx_u32(&x84, &x85, x83, x22, x58); + fiat_p384_addcarryx_u32(&x86, &x87, x85, x24, x62); + fiat_p384_addcarryx_u32(&x88, &x89, x87, x26, x64); + fiat_p384_addcarryx_u32(&x90, &x91, x89, x28, x66); + fiat_p384_addcarryx_u32(&x92, &x93, x91, x30, x68); + fiat_p384_addcarryx_u32(&x94, &x95, x93, x32, x70); + fiat_p384_addcarryx_u32(&x96, &x97, x95, x34, x72); + fiat_p384_addcarryx_u32(&x98, &x99, x97, x36, x74); + fiat_p384_addcarryx_u32(&x100, &x101, x99, (x37 + x3), x76); + fiat_p384_addcarryx_u32(&x102, &x103, x101, 0x0, (x77 + x43)); + fiat_p384_addcarryx_u32(&x104, &x105, 0x0, x80, (arg1[2])); + fiat_p384_addcarryx_u32(&x106, &x107, x105, x82, 0x0); + fiat_p384_addcarryx_u32(&x108, &x109, x107, x84, 0x0); + fiat_p384_addcarryx_u32(&x110, &x111, x109, x86, 0x0); + fiat_p384_addcarryx_u32(&x112, &x113, x111, x88, 0x0); + fiat_p384_addcarryx_u32(&x114, &x115, x113, x90, 0x0); + fiat_p384_addcarryx_u32(&x116, &x117, x115, x92, 0x0); + fiat_p384_addcarryx_u32(&x118, &x119, x117, x94, 0x0); + fiat_p384_addcarryx_u32(&x120, &x121, x119, x96, 0x0); + fiat_p384_addcarryx_u32(&x122, &x123, x121, x98, 0x0); + fiat_p384_addcarryx_u32(&x124, &x125, x123, x100, 0x0); + fiat_p384_addcarryx_u32(&x126, &x127, x125, x102, 0x0); + fiat_p384_mulx_u32(&x128, &x129, x104, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x130, &x131, x104, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x132, &x133, x104, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x134, &x135, x104, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x136, &x137, x104, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x138, &x139, x104, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x140, &x141, x104, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x142, &x143, x104, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x144, &x145, x104, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x146, &x147, x104, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x148, &x149, 0x0, x145, x142); + fiat_p384_addcarryx_u32(&x150, &x151, x149, x143, x140); + fiat_p384_addcarryx_u32(&x152, &x153, x151, x141, x138); + fiat_p384_addcarryx_u32(&x154, &x155, x153, x139, x136); + fiat_p384_addcarryx_u32(&x156, &x157, x155, x137, x134); + fiat_p384_addcarryx_u32(&x158, &x159, x157, x135, x132); + fiat_p384_addcarryx_u32(&x160, &x161, x159, x133, x130); + fiat_p384_addcarryx_u32(&x162, &x163, x161, x131, x128); + fiat_p384_addcarryx_u32(&x164, &x165, 0x0, x104, x146); + fiat_p384_addcarryx_u32(&x166, &x167, x165, x106, x147); + fiat_p384_addcarryx_u32(&x168, &x169, x167, x108, 0x0); + fiat_p384_addcarryx_u32(&x170, &x171, x169, x110, x144); + fiat_p384_addcarryx_u32(&x172, &x173, x171, x112, x148); + fiat_p384_addcarryx_u32(&x174, &x175, x173, x114, x150); + fiat_p384_addcarryx_u32(&x176, &x177, x175, x116, x152); + fiat_p384_addcarryx_u32(&x178, &x179, x177, x118, x154); + fiat_p384_addcarryx_u32(&x180, &x181, x179, x120, x156); + fiat_p384_addcarryx_u32(&x182, &x183, x181, x122, x158); + fiat_p384_addcarryx_u32(&x184, &x185, x183, x124, x160); + fiat_p384_addcarryx_u32(&x186, &x187, x185, x126, x162); + fiat_p384_addcarryx_u32(&x188, &x189, x187, ((uint32_t)x127 + x103), (x163 + x129)); + fiat_p384_addcarryx_u32(&x190, &x191, 0x0, x166, (arg1[3])); + fiat_p384_addcarryx_u32(&x192, &x193, x191, x168, 0x0); + fiat_p384_addcarryx_u32(&x194, &x195, x193, x170, 0x0); + fiat_p384_addcarryx_u32(&x196, &x197, x195, x172, 0x0); + fiat_p384_addcarryx_u32(&x198, &x199, x197, x174, 0x0); + fiat_p384_addcarryx_u32(&x200, &x201, x199, x176, 0x0); + fiat_p384_addcarryx_u32(&x202, &x203, x201, x178, 0x0); + fiat_p384_addcarryx_u32(&x204, &x205, x203, x180, 0x0); + fiat_p384_addcarryx_u32(&x206, &x207, x205, x182, 0x0); + fiat_p384_addcarryx_u32(&x208, &x209, x207, x184, 0x0); + fiat_p384_addcarryx_u32(&x210, &x211, x209, x186, 0x0); + fiat_p384_addcarryx_u32(&x212, &x213, x211, x188, 0x0); + fiat_p384_mulx_u32(&x214, &x215, x190, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x216, &x217, x190, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x218, &x219, x190, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x220, &x221, x190, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x222, &x223, x190, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x224, &x225, x190, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x226, &x227, x190, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x228, &x229, x190, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x230, &x231, x190, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x232, &x233, x190, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x234, &x235, 0x0, x231, x228); + fiat_p384_addcarryx_u32(&x236, &x237, x235, x229, x226); + fiat_p384_addcarryx_u32(&x238, &x239, x237, x227, x224); + fiat_p384_addcarryx_u32(&x240, &x241, x239, x225, x222); + fiat_p384_addcarryx_u32(&x242, &x243, x241, x223, x220); + fiat_p384_addcarryx_u32(&x244, &x245, x243, x221, x218); + fiat_p384_addcarryx_u32(&x246, &x247, x245, x219, x216); + fiat_p384_addcarryx_u32(&x248, &x249, x247, x217, x214); + fiat_p384_addcarryx_u32(&x250, &x251, 0x0, x190, x232); + fiat_p384_addcarryx_u32(&x252, &x253, x251, x192, x233); + fiat_p384_addcarryx_u32(&x254, &x255, x253, x194, 0x0); + fiat_p384_addcarryx_u32(&x256, &x257, x255, x196, x230); + fiat_p384_addcarryx_u32(&x258, &x259, x257, x198, x234); + fiat_p384_addcarryx_u32(&x260, &x261, x259, x200, x236); + fiat_p384_addcarryx_u32(&x262, &x263, x261, x202, x238); + fiat_p384_addcarryx_u32(&x264, &x265, x263, x204, x240); + fiat_p384_addcarryx_u32(&x266, &x267, x265, x206, x242); + fiat_p384_addcarryx_u32(&x268, &x269, x267, x208, x244); + fiat_p384_addcarryx_u32(&x270, &x271, x269, x210, x246); + fiat_p384_addcarryx_u32(&x272, &x273, x271, x212, x248); + fiat_p384_addcarryx_u32(&x274, &x275, x273, ((uint32_t)x213 + x189), (x249 + x215)); + fiat_p384_addcarryx_u32(&x276, &x277, 0x0, x252, (arg1[4])); + fiat_p384_addcarryx_u32(&x278, &x279, x277, x254, 0x0); + fiat_p384_addcarryx_u32(&x280, &x281, x279, x256, 0x0); + fiat_p384_addcarryx_u32(&x282, &x283, x281, x258, 0x0); + fiat_p384_addcarryx_u32(&x284, &x285, x283, x260, 0x0); + fiat_p384_addcarryx_u32(&x286, &x287, x285, x262, 0x0); + fiat_p384_addcarryx_u32(&x288, &x289, x287, x264, 0x0); + fiat_p384_addcarryx_u32(&x290, &x291, x289, x266, 0x0); + fiat_p384_addcarryx_u32(&x292, &x293, x291, x268, 0x0); + fiat_p384_addcarryx_u32(&x294, &x295, x293, x270, 0x0); + fiat_p384_addcarryx_u32(&x296, &x297, x295, x272, 0x0); + fiat_p384_addcarryx_u32(&x298, &x299, x297, x274, 0x0); + fiat_p384_mulx_u32(&x300, &x301, x276, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x302, &x303, x276, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x304, &x305, x276, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x306, &x307, x276, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x308, &x309, x276, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x310, &x311, x276, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x312, &x313, x276, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x314, &x315, x276, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x316, &x317, x276, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x318, &x319, x276, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x320, &x321, 0x0, x317, x314); + fiat_p384_addcarryx_u32(&x322, &x323, x321, x315, x312); + fiat_p384_addcarryx_u32(&x324, &x325, x323, x313, x310); + fiat_p384_addcarryx_u32(&x326, &x327, x325, x311, x308); + fiat_p384_addcarryx_u32(&x328, &x329, x327, x309, x306); + fiat_p384_addcarryx_u32(&x330, &x331, x329, x307, x304); + fiat_p384_addcarryx_u32(&x332, &x333, x331, x305, x302); + fiat_p384_addcarryx_u32(&x334, &x335, x333, x303, x300); + fiat_p384_addcarryx_u32(&x336, &x337, 0x0, x276, x318); + fiat_p384_addcarryx_u32(&x338, &x339, x337, x278, x319); + fiat_p384_addcarryx_u32(&x340, &x341, x339, x280, 0x0); + fiat_p384_addcarryx_u32(&x342, &x343, x341, x282, x316); + fiat_p384_addcarryx_u32(&x344, &x345, x343, x284, x320); + fiat_p384_addcarryx_u32(&x346, &x347, x345, x286, x322); + fiat_p384_addcarryx_u32(&x348, &x349, x347, x288, x324); + fiat_p384_addcarryx_u32(&x350, &x351, x349, x290, x326); + fiat_p384_addcarryx_u32(&x352, &x353, x351, x292, x328); + fiat_p384_addcarryx_u32(&x354, &x355, x353, x294, x330); + fiat_p384_addcarryx_u32(&x356, &x357, x355, x296, x332); + fiat_p384_addcarryx_u32(&x358, &x359, x357, x298, x334); + fiat_p384_addcarryx_u32(&x360, &x361, x359, ((uint32_t)x299 + x275), (x335 + x301)); + fiat_p384_addcarryx_u32(&x362, &x363, 0x0, x338, (arg1[5])); + fiat_p384_addcarryx_u32(&x364, &x365, x363, x340, 0x0); + fiat_p384_addcarryx_u32(&x366, &x367, x365, x342, 0x0); + fiat_p384_addcarryx_u32(&x368, &x369, x367, x344, 0x0); + fiat_p384_addcarryx_u32(&x370, &x371, x369, x346, 0x0); + fiat_p384_addcarryx_u32(&x372, &x373, x371, x348, 0x0); + fiat_p384_addcarryx_u32(&x374, &x375, x373, x350, 0x0); + fiat_p384_addcarryx_u32(&x376, &x377, x375, x352, 0x0); + fiat_p384_addcarryx_u32(&x378, &x379, x377, x354, 0x0); + fiat_p384_addcarryx_u32(&x380, &x381, x379, x356, 0x0); + fiat_p384_addcarryx_u32(&x382, &x383, x381, x358, 0x0); + fiat_p384_addcarryx_u32(&x384, &x385, x383, x360, 0x0); + fiat_p384_mulx_u32(&x386, &x387, x362, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x388, &x389, x362, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x390, &x391, x362, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x392, &x393, x362, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x394, &x395, x362, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x396, &x397, x362, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x398, &x399, x362, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x400, &x401, x362, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x402, &x403, x362, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x404, &x405, x362, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x406, &x407, 0x0, x403, x400); + fiat_p384_addcarryx_u32(&x408, &x409, x407, x401, x398); + fiat_p384_addcarryx_u32(&x410, &x411, x409, x399, x396); + fiat_p384_addcarryx_u32(&x412, &x413, x411, x397, x394); + fiat_p384_addcarryx_u32(&x414, &x415, x413, x395, x392); + fiat_p384_addcarryx_u32(&x416, &x417, x415, x393, x390); + fiat_p384_addcarryx_u32(&x418, &x419, x417, x391, x388); + fiat_p384_addcarryx_u32(&x420, &x421, x419, x389, x386); + fiat_p384_addcarryx_u32(&x422, &x423, 0x0, x362, x404); + fiat_p384_addcarryx_u32(&x424, &x425, x423, x364, x405); + fiat_p384_addcarryx_u32(&x426, &x427, x425, x366, 0x0); + fiat_p384_addcarryx_u32(&x428, &x429, x427, x368, x402); + fiat_p384_addcarryx_u32(&x430, &x431, x429, x370, x406); + fiat_p384_addcarryx_u32(&x432, &x433, x431, x372, x408); + fiat_p384_addcarryx_u32(&x434, &x435, x433, x374, x410); + fiat_p384_addcarryx_u32(&x436, &x437, x435, x376, x412); + fiat_p384_addcarryx_u32(&x438, &x439, x437, x378, x414); + fiat_p384_addcarryx_u32(&x440, &x441, x439, x380, x416); + fiat_p384_addcarryx_u32(&x442, &x443, x441, x382, x418); + fiat_p384_addcarryx_u32(&x444, &x445, x443, x384, x420); + fiat_p384_addcarryx_u32(&x446, &x447, x445, ((uint32_t)x385 + x361), (x421 + x387)); + fiat_p384_addcarryx_u32(&x448, &x449, 0x0, x424, (arg1[6])); + fiat_p384_addcarryx_u32(&x450, &x451, x449, x426, 0x0); + fiat_p384_addcarryx_u32(&x452, &x453, x451, x428, 0x0); + fiat_p384_addcarryx_u32(&x454, &x455, x453, x430, 0x0); + fiat_p384_addcarryx_u32(&x456, &x457, x455, x432, 0x0); + fiat_p384_addcarryx_u32(&x458, &x459, x457, x434, 0x0); + fiat_p384_addcarryx_u32(&x460, &x461, x459, x436, 0x0); + fiat_p384_addcarryx_u32(&x462, &x463, x461, x438, 0x0); + fiat_p384_addcarryx_u32(&x464, &x465, x463, x440, 0x0); + fiat_p384_addcarryx_u32(&x466, &x467, x465, x442, 0x0); + fiat_p384_addcarryx_u32(&x468, &x469, x467, x444, 0x0); + fiat_p384_addcarryx_u32(&x470, &x471, x469, x446, 0x0); + fiat_p384_mulx_u32(&x472, &x473, x448, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x474, &x475, x448, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x476, &x477, x448, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x478, &x479, x448, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x480, &x481, x448, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x482, &x483, x448, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x484, &x485, x448, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x486, &x487, x448, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x488, &x489, x448, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x490, &x491, x448, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x492, &x493, 0x0, x489, x486); + fiat_p384_addcarryx_u32(&x494, &x495, x493, x487, x484); + fiat_p384_addcarryx_u32(&x496, &x497, x495, x485, x482); + fiat_p384_addcarryx_u32(&x498, &x499, x497, x483, x480); + fiat_p384_addcarryx_u32(&x500, &x501, x499, x481, x478); + fiat_p384_addcarryx_u32(&x502, &x503, x501, x479, x476); + fiat_p384_addcarryx_u32(&x504, &x505, x503, x477, x474); + fiat_p384_addcarryx_u32(&x506, &x507, x505, x475, x472); + fiat_p384_addcarryx_u32(&x508, &x509, 0x0, x448, x490); + fiat_p384_addcarryx_u32(&x510, &x511, x509, x450, x491); + fiat_p384_addcarryx_u32(&x512, &x513, x511, x452, 0x0); + fiat_p384_addcarryx_u32(&x514, &x515, x513, x454, x488); + fiat_p384_addcarryx_u32(&x516, &x517, x515, x456, x492); + fiat_p384_addcarryx_u32(&x518, &x519, x517, x458, x494); + fiat_p384_addcarryx_u32(&x520, &x521, x519, x460, x496); + fiat_p384_addcarryx_u32(&x522, &x523, x521, x462, x498); + fiat_p384_addcarryx_u32(&x524, &x525, x523, x464, x500); + fiat_p384_addcarryx_u32(&x526, &x527, x525, x466, x502); + fiat_p384_addcarryx_u32(&x528, &x529, x527, x468, x504); + fiat_p384_addcarryx_u32(&x530, &x531, x529, x470, x506); + fiat_p384_addcarryx_u32(&x532, &x533, x531, ((uint32_t)x471 + x447), (x507 + x473)); + fiat_p384_addcarryx_u32(&x534, &x535, 0x0, x510, (arg1[7])); + fiat_p384_addcarryx_u32(&x536, &x537, x535, x512, 0x0); + fiat_p384_addcarryx_u32(&x538, &x539, x537, x514, 0x0); + fiat_p384_addcarryx_u32(&x540, &x541, x539, x516, 0x0); + fiat_p384_addcarryx_u32(&x542, &x543, x541, x518, 0x0); + fiat_p384_addcarryx_u32(&x544, &x545, x543, x520, 0x0); + fiat_p384_addcarryx_u32(&x546, &x547, x545, x522, 0x0); + fiat_p384_addcarryx_u32(&x548, &x549, x547, x524, 0x0); + fiat_p384_addcarryx_u32(&x550, &x551, x549, x526, 0x0); + fiat_p384_addcarryx_u32(&x552, &x553, x551, x528, 0x0); + fiat_p384_addcarryx_u32(&x554, &x555, x553, x530, 0x0); + fiat_p384_addcarryx_u32(&x556, &x557, x555, x532, 0x0); + fiat_p384_mulx_u32(&x558, &x559, x534, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x560, &x561, x534, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x562, &x563, x534, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x564, &x565, x534, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x566, &x567, x534, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x568, &x569, x534, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x570, &x571, x534, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x572, &x573, x534, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x574, &x575, x534, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x576, &x577, x534, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x578, &x579, 0x0, x575, x572); + fiat_p384_addcarryx_u32(&x580, &x581, x579, x573, x570); + fiat_p384_addcarryx_u32(&x582, &x583, x581, x571, x568); + fiat_p384_addcarryx_u32(&x584, &x585, x583, x569, x566); + fiat_p384_addcarryx_u32(&x586, &x587, x585, x567, x564); + fiat_p384_addcarryx_u32(&x588, &x589, x587, x565, x562); + fiat_p384_addcarryx_u32(&x590, &x591, x589, x563, x560); + fiat_p384_addcarryx_u32(&x592, &x593, x591, x561, x558); + fiat_p384_addcarryx_u32(&x594, &x595, 0x0, x534, x576); + fiat_p384_addcarryx_u32(&x596, &x597, x595, x536, x577); + fiat_p384_addcarryx_u32(&x598, &x599, x597, x538, 0x0); + fiat_p384_addcarryx_u32(&x600, &x601, x599, x540, x574); + fiat_p384_addcarryx_u32(&x602, &x603, x601, x542, x578); + fiat_p384_addcarryx_u32(&x604, &x605, x603, x544, x580); + fiat_p384_addcarryx_u32(&x606, &x607, x605, x546, x582); + fiat_p384_addcarryx_u32(&x608, &x609, x607, x548, x584); + fiat_p384_addcarryx_u32(&x610, &x611, x609, x550, x586); + fiat_p384_addcarryx_u32(&x612, &x613, x611, x552, x588); + fiat_p384_addcarryx_u32(&x614, &x615, x613, x554, x590); + fiat_p384_addcarryx_u32(&x616, &x617, x615, x556, x592); + fiat_p384_addcarryx_u32(&x618, &x619, x617, ((uint32_t)x557 + x533), (x593 + x559)); + fiat_p384_addcarryx_u32(&x620, &x621, 0x0, x596, (arg1[8])); + fiat_p384_addcarryx_u32(&x622, &x623, x621, x598, 0x0); + fiat_p384_addcarryx_u32(&x624, &x625, x623, x600, 0x0); + fiat_p384_addcarryx_u32(&x626, &x627, x625, x602, 0x0); + fiat_p384_addcarryx_u32(&x628, &x629, x627, x604, 0x0); + fiat_p384_addcarryx_u32(&x630, &x631, x629, x606, 0x0); + fiat_p384_addcarryx_u32(&x632, &x633, x631, x608, 0x0); + fiat_p384_addcarryx_u32(&x634, &x635, x633, x610, 0x0); + fiat_p384_addcarryx_u32(&x636, &x637, x635, x612, 0x0); + fiat_p384_addcarryx_u32(&x638, &x639, x637, x614, 0x0); + fiat_p384_addcarryx_u32(&x640, &x641, x639, x616, 0x0); + fiat_p384_addcarryx_u32(&x642, &x643, x641, x618, 0x0); + fiat_p384_mulx_u32(&x644, &x645, x620, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x646, &x647, x620, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x648, &x649, x620, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x650, &x651, x620, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x652, &x653, x620, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x654, &x655, x620, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x656, &x657, x620, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x658, &x659, x620, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x660, &x661, x620, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x662, &x663, x620, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x664, &x665, 0x0, x661, x658); + fiat_p384_addcarryx_u32(&x666, &x667, x665, x659, x656); + fiat_p384_addcarryx_u32(&x668, &x669, x667, x657, x654); + fiat_p384_addcarryx_u32(&x670, &x671, x669, x655, x652); + fiat_p384_addcarryx_u32(&x672, &x673, x671, x653, x650); + fiat_p384_addcarryx_u32(&x674, &x675, x673, x651, x648); + fiat_p384_addcarryx_u32(&x676, &x677, x675, x649, x646); + fiat_p384_addcarryx_u32(&x678, &x679, x677, x647, x644); + fiat_p384_addcarryx_u32(&x680, &x681, 0x0, x620, x662); + fiat_p384_addcarryx_u32(&x682, &x683, x681, x622, x663); + fiat_p384_addcarryx_u32(&x684, &x685, x683, x624, 0x0); + fiat_p384_addcarryx_u32(&x686, &x687, x685, x626, x660); + fiat_p384_addcarryx_u32(&x688, &x689, x687, x628, x664); + fiat_p384_addcarryx_u32(&x690, &x691, x689, x630, x666); + fiat_p384_addcarryx_u32(&x692, &x693, x691, x632, x668); + fiat_p384_addcarryx_u32(&x694, &x695, x693, x634, x670); + fiat_p384_addcarryx_u32(&x696, &x697, x695, x636, x672); + fiat_p384_addcarryx_u32(&x698, &x699, x697, x638, x674); + fiat_p384_addcarryx_u32(&x700, &x701, x699, x640, x676); + fiat_p384_addcarryx_u32(&x702, &x703, x701, x642, x678); + fiat_p384_addcarryx_u32(&x704, &x705, x703, ((uint32_t)x643 + x619), (x679 + x645)); + fiat_p384_addcarryx_u32(&x706, &x707, 0x0, x682, (arg1[9])); + fiat_p384_addcarryx_u32(&x708, &x709, x707, x684, 0x0); + fiat_p384_addcarryx_u32(&x710, &x711, x709, x686, 0x0); + fiat_p384_addcarryx_u32(&x712, &x713, x711, x688, 0x0); + fiat_p384_addcarryx_u32(&x714, &x715, x713, x690, 0x0); + fiat_p384_addcarryx_u32(&x716, &x717, x715, x692, 0x0); + fiat_p384_addcarryx_u32(&x718, &x719, x717, x694, 0x0); + fiat_p384_addcarryx_u32(&x720, &x721, x719, x696, 0x0); + fiat_p384_addcarryx_u32(&x722, &x723, x721, x698, 0x0); + fiat_p384_addcarryx_u32(&x724, &x725, x723, x700, 0x0); + fiat_p384_addcarryx_u32(&x726, &x727, x725, x702, 0x0); + fiat_p384_addcarryx_u32(&x728, &x729, x727, x704, 0x0); + fiat_p384_mulx_u32(&x730, &x731, x706, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x732, &x733, x706, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x734, &x735, x706, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x736, &x737, x706, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x738, &x739, x706, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x740, &x741, x706, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x742, &x743, x706, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x744, &x745, x706, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x746, &x747, x706, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x748, &x749, x706, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x750, &x751, 0x0, x747, x744); + fiat_p384_addcarryx_u32(&x752, &x753, x751, x745, x742); + fiat_p384_addcarryx_u32(&x754, &x755, x753, x743, x740); + fiat_p384_addcarryx_u32(&x756, &x757, x755, x741, x738); + fiat_p384_addcarryx_u32(&x758, &x759, x757, x739, x736); + fiat_p384_addcarryx_u32(&x760, &x761, x759, x737, x734); + fiat_p384_addcarryx_u32(&x762, &x763, x761, x735, x732); + fiat_p384_addcarryx_u32(&x764, &x765, x763, x733, x730); + fiat_p384_addcarryx_u32(&x766, &x767, 0x0, x706, x748); + fiat_p384_addcarryx_u32(&x768, &x769, x767, x708, x749); + fiat_p384_addcarryx_u32(&x770, &x771, x769, x710, 0x0); + fiat_p384_addcarryx_u32(&x772, &x773, x771, x712, x746); + fiat_p384_addcarryx_u32(&x774, &x775, x773, x714, x750); + fiat_p384_addcarryx_u32(&x776, &x777, x775, x716, x752); + fiat_p384_addcarryx_u32(&x778, &x779, x777, x718, x754); + fiat_p384_addcarryx_u32(&x780, &x781, x779, x720, x756); + fiat_p384_addcarryx_u32(&x782, &x783, x781, x722, x758); + fiat_p384_addcarryx_u32(&x784, &x785, x783, x724, x760); + fiat_p384_addcarryx_u32(&x786, &x787, x785, x726, x762); + fiat_p384_addcarryx_u32(&x788, &x789, x787, x728, x764); + fiat_p384_addcarryx_u32(&x790, &x791, x789, ((uint32_t)x729 + x705), (x765 + x731)); + fiat_p384_addcarryx_u32(&x792, &x793, 0x0, x768, (arg1[10])); + fiat_p384_addcarryx_u32(&x794, &x795, x793, x770, 0x0); + fiat_p384_addcarryx_u32(&x796, &x797, x795, x772, 0x0); + fiat_p384_addcarryx_u32(&x798, &x799, x797, x774, 0x0); + fiat_p384_addcarryx_u32(&x800, &x801, x799, x776, 0x0); + fiat_p384_addcarryx_u32(&x802, &x803, x801, x778, 0x0); + fiat_p384_addcarryx_u32(&x804, &x805, x803, x780, 0x0); + fiat_p384_addcarryx_u32(&x806, &x807, x805, x782, 0x0); + fiat_p384_addcarryx_u32(&x808, &x809, x807, x784, 0x0); + fiat_p384_addcarryx_u32(&x810, &x811, x809, x786, 0x0); + fiat_p384_addcarryx_u32(&x812, &x813, x811, x788, 0x0); + fiat_p384_addcarryx_u32(&x814, &x815, x813, x790, 0x0); + fiat_p384_mulx_u32(&x816, &x817, x792, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x818, &x819, x792, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x820, &x821, x792, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x822, &x823, x792, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x824, &x825, x792, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x826, &x827, x792, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x828, &x829, x792, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x830, &x831, x792, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x832, &x833, x792, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x834, &x835, x792, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x836, &x837, 0x0, x833, x830); + fiat_p384_addcarryx_u32(&x838, &x839, x837, x831, x828); + fiat_p384_addcarryx_u32(&x840, &x841, x839, x829, x826); + fiat_p384_addcarryx_u32(&x842, &x843, x841, x827, x824); + fiat_p384_addcarryx_u32(&x844, &x845, x843, x825, x822); + fiat_p384_addcarryx_u32(&x846, &x847, x845, x823, x820); + fiat_p384_addcarryx_u32(&x848, &x849, x847, x821, x818); + fiat_p384_addcarryx_u32(&x850, &x851, x849, x819, x816); + fiat_p384_addcarryx_u32(&x852, &x853, 0x0, x792, x834); + fiat_p384_addcarryx_u32(&x854, &x855, x853, x794, x835); + fiat_p384_addcarryx_u32(&x856, &x857, x855, x796, 0x0); + fiat_p384_addcarryx_u32(&x858, &x859, x857, x798, x832); + fiat_p384_addcarryx_u32(&x860, &x861, x859, x800, x836); + fiat_p384_addcarryx_u32(&x862, &x863, x861, x802, x838); + fiat_p384_addcarryx_u32(&x864, &x865, x863, x804, x840); + fiat_p384_addcarryx_u32(&x866, &x867, x865, x806, x842); + fiat_p384_addcarryx_u32(&x868, &x869, x867, x808, x844); + fiat_p384_addcarryx_u32(&x870, &x871, x869, x810, x846); + fiat_p384_addcarryx_u32(&x872, &x873, x871, x812, x848); + fiat_p384_addcarryx_u32(&x874, &x875, x873, x814, x850); + fiat_p384_addcarryx_u32(&x876, &x877, x875, ((uint32_t)x815 + x791), (x851 + x817)); + fiat_p384_addcarryx_u32(&x878, &x879, 0x0, x854, (arg1[11])); + fiat_p384_addcarryx_u32(&x880, &x881, x879, x856, 0x0); + fiat_p384_addcarryx_u32(&x882, &x883, x881, x858, 0x0); + fiat_p384_addcarryx_u32(&x884, &x885, x883, x860, 0x0); + fiat_p384_addcarryx_u32(&x886, &x887, x885, x862, 0x0); + fiat_p384_addcarryx_u32(&x888, &x889, x887, x864, 0x0); + fiat_p384_addcarryx_u32(&x890, &x891, x889, x866, 0x0); + fiat_p384_addcarryx_u32(&x892, &x893, x891, x868, 0x0); + fiat_p384_addcarryx_u32(&x894, &x895, x893, x870, 0x0); + fiat_p384_addcarryx_u32(&x896, &x897, x895, x872, 0x0); + fiat_p384_addcarryx_u32(&x898, &x899, x897, x874, 0x0); + fiat_p384_addcarryx_u32(&x900, &x901, x899, x876, 0x0); + fiat_p384_mulx_u32(&x902, &x903, x878, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x904, &x905, x878, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x906, &x907, x878, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x908, &x909, x878, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x910, &x911, x878, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x912, &x913, x878, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x914, &x915, x878, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x916, &x917, x878, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x918, &x919, x878, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x920, &x921, x878, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x922, &x923, 0x0, x919, x916); + fiat_p384_addcarryx_u32(&x924, &x925, x923, x917, x914); + fiat_p384_addcarryx_u32(&x926, &x927, x925, x915, x912); + fiat_p384_addcarryx_u32(&x928, &x929, x927, x913, x910); + fiat_p384_addcarryx_u32(&x930, &x931, x929, x911, x908); + fiat_p384_addcarryx_u32(&x932, &x933, x931, x909, x906); + fiat_p384_addcarryx_u32(&x934, &x935, x933, x907, x904); + fiat_p384_addcarryx_u32(&x936, &x937, x935, x905, x902); + fiat_p384_addcarryx_u32(&x938, &x939, 0x0, x878, x920); + fiat_p384_addcarryx_u32(&x940, &x941, x939, x880, x921); + fiat_p384_addcarryx_u32(&x942, &x943, x941, x882, 0x0); + fiat_p384_addcarryx_u32(&x944, &x945, x943, x884, x918); + fiat_p384_addcarryx_u32(&x946, &x947, x945, x886, x922); + fiat_p384_addcarryx_u32(&x948, &x949, x947, x888, x924); + fiat_p384_addcarryx_u32(&x950, &x951, x949, x890, x926); + fiat_p384_addcarryx_u32(&x952, &x953, x951, x892, x928); + fiat_p384_addcarryx_u32(&x954, &x955, x953, x894, x930); + fiat_p384_addcarryx_u32(&x956, &x957, x955, x896, x932); + fiat_p384_addcarryx_u32(&x958, &x959, x957, x898, x934); + fiat_p384_addcarryx_u32(&x960, &x961, x959, x900, x936); + fiat_p384_addcarryx_u32(&x962, &x963, x961, ((uint32_t)x901 + x877), (x937 + x903)); + fiat_p384_subborrowx_u32(&x964, &x965, 0x0, x940, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x966, &x967, x965, x942, 0x0); + fiat_p384_subborrowx_u32(&x968, &x969, x967, x944, 0x0); + fiat_p384_subborrowx_u32(&x970, &x971, x969, x946, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x972, &x973, x971, x948, UINT32_C(0xfffffffe)); + fiat_p384_subborrowx_u32(&x974, &x975, x973, x950, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x976, &x977, x975, x952, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x978, &x979, x977, x954, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x980, &x981, x979, x956, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x982, &x983, x981, x958, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x984, &x985, x983, x960, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x986, &x987, x985, x962, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x988, &x989, x987, x963, 0x0); + fiat_p384_cmovznz_u32(&x990, x989, x964, x940); + fiat_p384_cmovznz_u32(&x991, x989, x966, x942); + fiat_p384_cmovznz_u32(&x992, x989, x968, x944); + fiat_p384_cmovznz_u32(&x993, x989, x970, x946); + fiat_p384_cmovznz_u32(&x994, x989, x972, x948); + fiat_p384_cmovznz_u32(&x995, x989, x974, x950); + fiat_p384_cmovznz_u32(&x996, x989, x976, x952); + fiat_p384_cmovznz_u32(&x997, x989, x978, x954); + fiat_p384_cmovznz_u32(&x998, x989, x980, x956); + fiat_p384_cmovznz_u32(&x999, x989, x982, x958); + fiat_p384_cmovznz_u32(&x1000, x989, x984, x960); + fiat_p384_cmovznz_u32(&x1001, x989, x986, x962); + out1[0] = x990; + out1[1] = x991; + out1[2] = x992; + out1[3] = x993; + out1[4] = x994; + out1[5] = x995; + out1[6] = x996; + out1[7] = x997; + out1[8] = x998; + out1[9] = x999; + out1[10] = x1000; + out1[11] = x1001; +} + +/* + * The function fiat_p384_to_montgomery translates a field element into the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p384_to_montgomery(uint32_t out1[12], const uint32_t arg1[12]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + fiat_p384_uint1 x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint32_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + fiat_p384_uint1 x44; + uint32_t x45; + fiat_p384_uint1 x46; + uint32_t x47; + fiat_p384_uint1 x48; + uint32_t x49; + fiat_p384_uint1 x50; + uint32_t x51; + fiat_p384_uint1 x52; + uint32_t x53; + fiat_p384_uint1 x54; + uint32_t x55; + fiat_p384_uint1 x56; + uint32_t x57; + fiat_p384_uint1 x58; + uint32_t x59; + fiat_p384_uint1 x60; + uint32_t x61; + fiat_p384_uint1 x62; + uint32_t x63; + fiat_p384_uint1 x64; + uint32_t x65; + fiat_p384_uint1 x66; + uint32_t x67; + fiat_p384_uint1 x68; + uint32_t x69; + fiat_p384_uint1 x70; + uint32_t x71; + fiat_p384_uint1 x72; + uint32_t x73; + fiat_p384_uint1 x74; + uint32_t x75; + fiat_p384_uint1 x76; + uint32_t x77; + fiat_p384_uint1 x78; + uint32_t x79; + fiat_p384_uint1 x80; + uint32_t x81; + fiat_p384_uint1 x82; + uint32_t x83; + uint32_t x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + uint32_t x88; + uint32_t x89; + uint32_t x90; + uint32_t x91; + fiat_p384_uint1 x92; + uint32_t x93; + fiat_p384_uint1 x94; + uint32_t x95; + fiat_p384_uint1 x96; + uint32_t x97; + fiat_p384_uint1 x98; + uint32_t x99; + fiat_p384_uint1 x100; + uint32_t x101; + fiat_p384_uint1 x102; + uint32_t x103; + fiat_p384_uint1 x104; + uint32_t x105; + fiat_p384_uint1 x106; + uint32_t x107; + fiat_p384_uint1 x108; + uint32_t x109; + fiat_p384_uint1 x110; + uint32_t x111; + fiat_p384_uint1 x112; + uint32_t x113; + fiat_p384_uint1 x114; + uint32_t x115; + fiat_p384_uint1 x116; + uint32_t x117; + uint32_t x118; + uint32_t x119; + uint32_t x120; + uint32_t x121; + uint32_t x122; + uint32_t x123; + uint32_t x124; + uint32_t x125; + uint32_t x126; + uint32_t x127; + uint32_t x128; + uint32_t x129; + uint32_t x130; + uint32_t x131; + uint32_t x132; + uint32_t x133; + uint32_t x134; + uint32_t x135; + uint32_t x136; + uint32_t x137; + fiat_p384_uint1 x138; + uint32_t x139; + fiat_p384_uint1 x140; + uint32_t x141; + fiat_p384_uint1 x142; + uint32_t x143; + fiat_p384_uint1 x144; + uint32_t x145; + fiat_p384_uint1 x146; + uint32_t x147; + fiat_p384_uint1 x148; + uint32_t x149; + fiat_p384_uint1 x150; + uint32_t x151; + fiat_p384_uint1 x152; + uint32_t x153; + fiat_p384_uint1 x154; + uint32_t x155; + fiat_p384_uint1 x156; + uint32_t x157; + fiat_p384_uint1 x158; + uint32_t x159; + fiat_p384_uint1 x160; + uint32_t x161; + fiat_p384_uint1 x162; + uint32_t x163; + fiat_p384_uint1 x164; + uint32_t x165; + fiat_p384_uint1 x166; + uint32_t x167; + fiat_p384_uint1 x168; + uint32_t x169; + fiat_p384_uint1 x170; + uint32_t x171; + fiat_p384_uint1 x172; + uint32_t x173; + fiat_p384_uint1 x174; + uint32_t x175; + fiat_p384_uint1 x176; + uint32_t x177; + fiat_p384_uint1 x178; + uint32_t x179; + uint32_t x180; + uint32_t x181; + uint32_t x182; + uint32_t x183; + uint32_t x184; + uint32_t x185; + uint32_t x186; + uint32_t x187; + fiat_p384_uint1 x188; + uint32_t x189; + fiat_p384_uint1 x190; + uint32_t x191; + fiat_p384_uint1 x192; + uint32_t x193; + fiat_p384_uint1 x194; + uint32_t x195; + fiat_p384_uint1 x196; + uint32_t x197; + fiat_p384_uint1 x198; + uint32_t x199; + fiat_p384_uint1 x200; + uint32_t x201; + fiat_p384_uint1 x202; + uint32_t x203; + fiat_p384_uint1 x204; + uint32_t x205; + fiat_p384_uint1 x206; + uint32_t x207; + fiat_p384_uint1 x208; + uint32_t x209; + fiat_p384_uint1 x210; + uint32_t x211; + fiat_p384_uint1 x212; + uint32_t x213; + uint32_t x214; + uint32_t x215; + uint32_t x216; + uint32_t x217; + uint32_t x218; + uint32_t x219; + uint32_t x220; + uint32_t x221; + uint32_t x222; + uint32_t x223; + uint32_t x224; + uint32_t x225; + uint32_t x226; + uint32_t x227; + uint32_t x228; + uint32_t x229; + uint32_t x230; + uint32_t x231; + uint32_t x232; + uint32_t x233; + fiat_p384_uint1 x234; + uint32_t x235; + fiat_p384_uint1 x236; + uint32_t x237; + fiat_p384_uint1 x238; + uint32_t x239; + fiat_p384_uint1 x240; + uint32_t x241; + fiat_p384_uint1 x242; + uint32_t x243; + fiat_p384_uint1 x244; + uint32_t x245; + fiat_p384_uint1 x246; + uint32_t x247; + fiat_p384_uint1 x248; + uint32_t x249; + fiat_p384_uint1 x250; + uint32_t x251; + fiat_p384_uint1 x252; + uint32_t x253; + fiat_p384_uint1 x254; + uint32_t x255; + fiat_p384_uint1 x256; + uint32_t x257; + fiat_p384_uint1 x258; + uint32_t x259; + fiat_p384_uint1 x260; + uint32_t x261; + fiat_p384_uint1 x262; + uint32_t x263; + fiat_p384_uint1 x264; + uint32_t x265; + fiat_p384_uint1 x266; + uint32_t x267; + fiat_p384_uint1 x268; + uint32_t x269; + fiat_p384_uint1 x270; + uint32_t x271; + fiat_p384_uint1 x272; + uint32_t x273; + fiat_p384_uint1 x274; + uint32_t x275; + uint32_t x276; + uint32_t x277; + uint32_t x278; + uint32_t x279; + uint32_t x280; + uint32_t x281; + uint32_t x282; + uint32_t x283; + fiat_p384_uint1 x284; + uint32_t x285; + fiat_p384_uint1 x286; + uint32_t x287; + fiat_p384_uint1 x288; + uint32_t x289; + fiat_p384_uint1 x290; + uint32_t x291; + fiat_p384_uint1 x292; + uint32_t x293; + fiat_p384_uint1 x294; + uint32_t x295; + fiat_p384_uint1 x296; + uint32_t x297; + fiat_p384_uint1 x298; + uint32_t x299; + fiat_p384_uint1 x300; + uint32_t x301; + fiat_p384_uint1 x302; + uint32_t x303; + fiat_p384_uint1 x304; + uint32_t x305; + fiat_p384_uint1 x306; + uint32_t x307; + fiat_p384_uint1 x308; + uint32_t x309; + uint32_t x310; + uint32_t x311; + uint32_t x312; + uint32_t x313; + uint32_t x314; + uint32_t x315; + uint32_t x316; + uint32_t x317; + uint32_t x318; + uint32_t x319; + uint32_t x320; + uint32_t x321; + uint32_t x322; + uint32_t x323; + uint32_t x324; + uint32_t x325; + uint32_t x326; + uint32_t x327; + uint32_t x328; + uint32_t x329; + fiat_p384_uint1 x330; + uint32_t x331; + fiat_p384_uint1 x332; + uint32_t x333; + fiat_p384_uint1 x334; + uint32_t x335; + fiat_p384_uint1 x336; + uint32_t x337; + fiat_p384_uint1 x338; + uint32_t x339; + fiat_p384_uint1 x340; + uint32_t x341; + fiat_p384_uint1 x342; + uint32_t x343; + fiat_p384_uint1 x344; + uint32_t x345; + fiat_p384_uint1 x346; + uint32_t x347; + fiat_p384_uint1 x348; + uint32_t x349; + fiat_p384_uint1 x350; + uint32_t x351; + fiat_p384_uint1 x352; + uint32_t x353; + fiat_p384_uint1 x354; + uint32_t x355; + fiat_p384_uint1 x356; + uint32_t x357; + fiat_p384_uint1 x358; + uint32_t x359; + fiat_p384_uint1 x360; + uint32_t x361; + fiat_p384_uint1 x362; + uint32_t x363; + fiat_p384_uint1 x364; + uint32_t x365; + fiat_p384_uint1 x366; + uint32_t x367; + fiat_p384_uint1 x368; + uint32_t x369; + fiat_p384_uint1 x370; + uint32_t x371; + uint32_t x372; + uint32_t x373; + uint32_t x374; + uint32_t x375; + uint32_t x376; + uint32_t x377; + uint32_t x378; + uint32_t x379; + fiat_p384_uint1 x380; + uint32_t x381; + fiat_p384_uint1 x382; + uint32_t x383; + fiat_p384_uint1 x384; + uint32_t x385; + fiat_p384_uint1 x386; + uint32_t x387; + fiat_p384_uint1 x388; + uint32_t x389; + fiat_p384_uint1 x390; + uint32_t x391; + fiat_p384_uint1 x392; + uint32_t x393; + fiat_p384_uint1 x394; + uint32_t x395; + fiat_p384_uint1 x396; + uint32_t x397; + fiat_p384_uint1 x398; + uint32_t x399; + fiat_p384_uint1 x400; + uint32_t x401; + fiat_p384_uint1 x402; + uint32_t x403; + fiat_p384_uint1 x404; + uint32_t x405; + uint32_t x406; + uint32_t x407; + uint32_t x408; + uint32_t x409; + uint32_t x410; + uint32_t x411; + uint32_t x412; + uint32_t x413; + uint32_t x414; + uint32_t x415; + uint32_t x416; + uint32_t x417; + uint32_t x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + uint32_t x422; + uint32_t x423; + uint32_t x424; + uint32_t x425; + fiat_p384_uint1 x426; + uint32_t x427; + fiat_p384_uint1 x428; + uint32_t x429; + fiat_p384_uint1 x430; + uint32_t x431; + fiat_p384_uint1 x432; + uint32_t x433; + fiat_p384_uint1 x434; + uint32_t x435; + fiat_p384_uint1 x436; + uint32_t x437; + fiat_p384_uint1 x438; + uint32_t x439; + fiat_p384_uint1 x440; + uint32_t x441; + fiat_p384_uint1 x442; + uint32_t x443; + fiat_p384_uint1 x444; + uint32_t x445; + fiat_p384_uint1 x446; + uint32_t x447; + fiat_p384_uint1 x448; + uint32_t x449; + fiat_p384_uint1 x450; + uint32_t x451; + fiat_p384_uint1 x452; + uint32_t x453; + fiat_p384_uint1 x454; + uint32_t x455; + fiat_p384_uint1 x456; + uint32_t x457; + fiat_p384_uint1 x458; + uint32_t x459; + fiat_p384_uint1 x460; + uint32_t x461; + fiat_p384_uint1 x462; + uint32_t x463; + fiat_p384_uint1 x464; + uint32_t x465; + fiat_p384_uint1 x466; + uint32_t x467; + uint32_t x468; + uint32_t x469; + uint32_t x470; + uint32_t x471; + uint32_t x472; + uint32_t x473; + uint32_t x474; + uint32_t x475; + fiat_p384_uint1 x476; + uint32_t x477; + fiat_p384_uint1 x478; + uint32_t x479; + fiat_p384_uint1 x480; + uint32_t x481; + fiat_p384_uint1 x482; + uint32_t x483; + fiat_p384_uint1 x484; + uint32_t x485; + fiat_p384_uint1 x486; + uint32_t x487; + fiat_p384_uint1 x488; + uint32_t x489; + fiat_p384_uint1 x490; + uint32_t x491; + fiat_p384_uint1 x492; + uint32_t x493; + fiat_p384_uint1 x494; + uint32_t x495; + fiat_p384_uint1 x496; + uint32_t x497; + fiat_p384_uint1 x498; + uint32_t x499; + fiat_p384_uint1 x500; + uint32_t x501; + uint32_t x502; + uint32_t x503; + uint32_t x504; + uint32_t x505; + uint32_t x506; + uint32_t x507; + uint32_t x508; + uint32_t x509; + uint32_t x510; + uint32_t x511; + uint32_t x512; + uint32_t x513; + uint32_t x514; + uint32_t x515; + uint32_t x516; + uint32_t x517; + uint32_t x518; + uint32_t x519; + uint32_t x520; + uint32_t x521; + fiat_p384_uint1 x522; + uint32_t x523; + fiat_p384_uint1 x524; + uint32_t x525; + fiat_p384_uint1 x526; + uint32_t x527; + fiat_p384_uint1 x528; + uint32_t x529; + fiat_p384_uint1 x530; + uint32_t x531; + fiat_p384_uint1 x532; + uint32_t x533; + fiat_p384_uint1 x534; + uint32_t x535; + fiat_p384_uint1 x536; + uint32_t x537; + fiat_p384_uint1 x538; + uint32_t x539; + fiat_p384_uint1 x540; + uint32_t x541; + fiat_p384_uint1 x542; + uint32_t x543; + fiat_p384_uint1 x544; + uint32_t x545; + fiat_p384_uint1 x546; + uint32_t x547; + fiat_p384_uint1 x548; + uint32_t x549; + fiat_p384_uint1 x550; + uint32_t x551; + fiat_p384_uint1 x552; + uint32_t x553; + fiat_p384_uint1 x554; + uint32_t x555; + fiat_p384_uint1 x556; + uint32_t x557; + fiat_p384_uint1 x558; + uint32_t x559; + fiat_p384_uint1 x560; + uint32_t x561; + fiat_p384_uint1 x562; + uint32_t x563; + uint32_t x564; + uint32_t x565; + uint32_t x566; + uint32_t x567; + uint32_t x568; + uint32_t x569; + uint32_t x570; + uint32_t x571; + fiat_p384_uint1 x572; + uint32_t x573; + fiat_p384_uint1 x574; + uint32_t x575; + fiat_p384_uint1 x576; + uint32_t x577; + fiat_p384_uint1 x578; + uint32_t x579; + fiat_p384_uint1 x580; + uint32_t x581; + fiat_p384_uint1 x582; + uint32_t x583; + fiat_p384_uint1 x584; + uint32_t x585; + fiat_p384_uint1 x586; + uint32_t x587; + fiat_p384_uint1 x588; + uint32_t x589; + fiat_p384_uint1 x590; + uint32_t x591; + fiat_p384_uint1 x592; + uint32_t x593; + fiat_p384_uint1 x594; + uint32_t x595; + fiat_p384_uint1 x596; + uint32_t x597; + uint32_t x598; + uint32_t x599; + uint32_t x600; + uint32_t x601; + uint32_t x602; + uint32_t x603; + uint32_t x604; + uint32_t x605; + uint32_t x606; + uint32_t x607; + uint32_t x608; + uint32_t x609; + uint32_t x610; + uint32_t x611; + uint32_t x612; + uint32_t x613; + uint32_t x614; + uint32_t x615; + uint32_t x616; + uint32_t x617; + fiat_p384_uint1 x618; + uint32_t x619; + fiat_p384_uint1 x620; + uint32_t x621; + fiat_p384_uint1 x622; + uint32_t x623; + fiat_p384_uint1 x624; + uint32_t x625; + fiat_p384_uint1 x626; + uint32_t x627; + fiat_p384_uint1 x628; + uint32_t x629; + fiat_p384_uint1 x630; + uint32_t x631; + fiat_p384_uint1 x632; + uint32_t x633; + fiat_p384_uint1 x634; + uint32_t x635; + fiat_p384_uint1 x636; + uint32_t x637; + fiat_p384_uint1 x638; + uint32_t x639; + fiat_p384_uint1 x640; + uint32_t x641; + fiat_p384_uint1 x642; + uint32_t x643; + fiat_p384_uint1 x644; + uint32_t x645; + fiat_p384_uint1 x646; + uint32_t x647; + fiat_p384_uint1 x648; + uint32_t x649; + fiat_p384_uint1 x650; + uint32_t x651; + fiat_p384_uint1 x652; + uint32_t x653; + fiat_p384_uint1 x654; + uint32_t x655; + fiat_p384_uint1 x656; + uint32_t x657; + fiat_p384_uint1 x658; + uint32_t x659; + uint32_t x660; + uint32_t x661; + uint32_t x662; + uint32_t x663; + uint32_t x664; + uint32_t x665; + uint32_t x666; + uint32_t x667; + fiat_p384_uint1 x668; + uint32_t x669; + fiat_p384_uint1 x670; + uint32_t x671; + fiat_p384_uint1 x672; + uint32_t x673; + fiat_p384_uint1 x674; + uint32_t x675; + fiat_p384_uint1 x676; + uint32_t x677; + fiat_p384_uint1 x678; + uint32_t x679; + fiat_p384_uint1 x680; + uint32_t x681; + fiat_p384_uint1 x682; + uint32_t x683; + fiat_p384_uint1 x684; + uint32_t x685; + fiat_p384_uint1 x686; + uint32_t x687; + fiat_p384_uint1 x688; + uint32_t x689; + fiat_p384_uint1 x690; + uint32_t x691; + fiat_p384_uint1 x692; + uint32_t x693; + uint32_t x694; + uint32_t x695; + uint32_t x696; + uint32_t x697; + uint32_t x698; + uint32_t x699; + uint32_t x700; + uint32_t x701; + uint32_t x702; + uint32_t x703; + uint32_t x704; + uint32_t x705; + uint32_t x706; + uint32_t x707; + uint32_t x708; + uint32_t x709; + uint32_t x710; + uint32_t x711; + uint32_t x712; + uint32_t x713; + fiat_p384_uint1 x714; + uint32_t x715; + fiat_p384_uint1 x716; + uint32_t x717; + fiat_p384_uint1 x718; + uint32_t x719; + fiat_p384_uint1 x720; + uint32_t x721; + fiat_p384_uint1 x722; + uint32_t x723; + fiat_p384_uint1 x724; + uint32_t x725; + fiat_p384_uint1 x726; + uint32_t x727; + fiat_p384_uint1 x728; + uint32_t x729; + fiat_p384_uint1 x730; + uint32_t x731; + fiat_p384_uint1 x732; + uint32_t x733; + fiat_p384_uint1 x734; + uint32_t x735; + fiat_p384_uint1 x736; + uint32_t x737; + fiat_p384_uint1 x738; + uint32_t x739; + fiat_p384_uint1 x740; + uint32_t x741; + fiat_p384_uint1 x742; + uint32_t x743; + fiat_p384_uint1 x744; + uint32_t x745; + fiat_p384_uint1 x746; + uint32_t x747; + fiat_p384_uint1 x748; + uint32_t x749; + fiat_p384_uint1 x750; + uint32_t x751; + fiat_p384_uint1 x752; + uint32_t x753; + fiat_p384_uint1 x754; + uint32_t x755; + uint32_t x756; + uint32_t x757; + uint32_t x758; + uint32_t x759; + uint32_t x760; + uint32_t x761; + uint32_t x762; + uint32_t x763; + fiat_p384_uint1 x764; + uint32_t x765; + fiat_p384_uint1 x766; + uint32_t x767; + fiat_p384_uint1 x768; + uint32_t x769; + fiat_p384_uint1 x770; + uint32_t x771; + fiat_p384_uint1 x772; + uint32_t x773; + fiat_p384_uint1 x774; + uint32_t x775; + fiat_p384_uint1 x776; + uint32_t x777; + fiat_p384_uint1 x778; + uint32_t x779; + fiat_p384_uint1 x780; + uint32_t x781; + fiat_p384_uint1 x782; + uint32_t x783; + fiat_p384_uint1 x784; + uint32_t x785; + fiat_p384_uint1 x786; + uint32_t x787; + fiat_p384_uint1 x788; + uint32_t x789; + uint32_t x790; + uint32_t x791; + uint32_t x792; + uint32_t x793; + uint32_t x794; + uint32_t x795; + uint32_t x796; + uint32_t x797; + uint32_t x798; + uint32_t x799; + uint32_t x800; + uint32_t x801; + uint32_t x802; + uint32_t x803; + uint32_t x804; + uint32_t x805; + uint32_t x806; + uint32_t x807; + uint32_t x808; + uint32_t x809; + fiat_p384_uint1 x810; + uint32_t x811; + fiat_p384_uint1 x812; + uint32_t x813; + fiat_p384_uint1 x814; + uint32_t x815; + fiat_p384_uint1 x816; + uint32_t x817; + fiat_p384_uint1 x818; + uint32_t x819; + fiat_p384_uint1 x820; + uint32_t x821; + fiat_p384_uint1 x822; + uint32_t x823; + fiat_p384_uint1 x824; + uint32_t x825; + fiat_p384_uint1 x826; + uint32_t x827; + fiat_p384_uint1 x828; + uint32_t x829; + fiat_p384_uint1 x830; + uint32_t x831; + fiat_p384_uint1 x832; + uint32_t x833; + fiat_p384_uint1 x834; + uint32_t x835; + fiat_p384_uint1 x836; + uint32_t x837; + fiat_p384_uint1 x838; + uint32_t x839; + fiat_p384_uint1 x840; + uint32_t x841; + fiat_p384_uint1 x842; + uint32_t x843; + fiat_p384_uint1 x844; + uint32_t x845; + fiat_p384_uint1 x846; + uint32_t x847; + fiat_p384_uint1 x848; + uint32_t x849; + fiat_p384_uint1 x850; + uint32_t x851; + uint32_t x852; + uint32_t x853; + uint32_t x854; + uint32_t x855; + uint32_t x856; + uint32_t x857; + uint32_t x858; + uint32_t x859; + fiat_p384_uint1 x860; + uint32_t x861; + fiat_p384_uint1 x862; + uint32_t x863; + fiat_p384_uint1 x864; + uint32_t x865; + fiat_p384_uint1 x866; + uint32_t x867; + fiat_p384_uint1 x868; + uint32_t x869; + fiat_p384_uint1 x870; + uint32_t x871; + fiat_p384_uint1 x872; + uint32_t x873; + fiat_p384_uint1 x874; + uint32_t x875; + fiat_p384_uint1 x876; + uint32_t x877; + fiat_p384_uint1 x878; + uint32_t x879; + fiat_p384_uint1 x880; + uint32_t x881; + fiat_p384_uint1 x882; + uint32_t x883; + fiat_p384_uint1 x884; + uint32_t x885; + uint32_t x886; + uint32_t x887; + uint32_t x888; + uint32_t x889; + uint32_t x890; + uint32_t x891; + uint32_t x892; + uint32_t x893; + uint32_t x894; + uint32_t x895; + uint32_t x896; + uint32_t x897; + uint32_t x898; + uint32_t x899; + uint32_t x900; + uint32_t x901; + uint32_t x902; + uint32_t x903; + uint32_t x904; + uint32_t x905; + fiat_p384_uint1 x906; + uint32_t x907; + fiat_p384_uint1 x908; + uint32_t x909; + fiat_p384_uint1 x910; + uint32_t x911; + fiat_p384_uint1 x912; + uint32_t x913; + fiat_p384_uint1 x914; + uint32_t x915; + fiat_p384_uint1 x916; + uint32_t x917; + fiat_p384_uint1 x918; + uint32_t x919; + fiat_p384_uint1 x920; + uint32_t x921; + fiat_p384_uint1 x922; + uint32_t x923; + fiat_p384_uint1 x924; + uint32_t x925; + fiat_p384_uint1 x926; + uint32_t x927; + fiat_p384_uint1 x928; + uint32_t x929; + fiat_p384_uint1 x930; + uint32_t x931; + fiat_p384_uint1 x932; + uint32_t x933; + fiat_p384_uint1 x934; + uint32_t x935; + fiat_p384_uint1 x936; + uint32_t x937; + fiat_p384_uint1 x938; + uint32_t x939; + fiat_p384_uint1 x940; + uint32_t x941; + fiat_p384_uint1 x942; + uint32_t x943; + fiat_p384_uint1 x944; + uint32_t x945; + fiat_p384_uint1 x946; + uint32_t x947; + uint32_t x948; + uint32_t x949; + uint32_t x950; + uint32_t x951; + uint32_t x952; + uint32_t x953; + uint32_t x954; + uint32_t x955; + fiat_p384_uint1 x956; + uint32_t x957; + fiat_p384_uint1 x958; + uint32_t x959; + fiat_p384_uint1 x960; + uint32_t x961; + fiat_p384_uint1 x962; + uint32_t x963; + fiat_p384_uint1 x964; + uint32_t x965; + fiat_p384_uint1 x966; + uint32_t x967; + fiat_p384_uint1 x968; + uint32_t x969; + fiat_p384_uint1 x970; + uint32_t x971; + fiat_p384_uint1 x972; + uint32_t x973; + fiat_p384_uint1 x974; + uint32_t x975; + fiat_p384_uint1 x976; + uint32_t x977; + fiat_p384_uint1 x978; + uint32_t x979; + fiat_p384_uint1 x980; + uint32_t x981; + uint32_t x982; + uint32_t x983; + uint32_t x984; + uint32_t x985; + uint32_t x986; + uint32_t x987; + uint32_t x988; + uint32_t x989; + uint32_t x990; + uint32_t x991; + uint32_t x992; + uint32_t x993; + uint32_t x994; + uint32_t x995; + uint32_t x996; + uint32_t x997; + uint32_t x998; + uint32_t x999; + uint32_t x1000; + uint32_t x1001; + fiat_p384_uint1 x1002; + uint32_t x1003; + fiat_p384_uint1 x1004; + uint32_t x1005; + fiat_p384_uint1 x1006; + uint32_t x1007; + fiat_p384_uint1 x1008; + uint32_t x1009; + fiat_p384_uint1 x1010; + uint32_t x1011; + fiat_p384_uint1 x1012; + uint32_t x1013; + fiat_p384_uint1 x1014; + uint32_t x1015; + fiat_p384_uint1 x1016; + uint32_t x1017; + fiat_p384_uint1 x1018; + uint32_t x1019; + fiat_p384_uint1 x1020; + uint32_t x1021; + fiat_p384_uint1 x1022; + uint32_t x1023; + fiat_p384_uint1 x1024; + uint32_t x1025; + fiat_p384_uint1 x1026; + uint32_t x1027; + fiat_p384_uint1 x1028; + uint32_t x1029; + fiat_p384_uint1 x1030; + uint32_t x1031; + fiat_p384_uint1 x1032; + uint32_t x1033; + fiat_p384_uint1 x1034; + uint32_t x1035; + fiat_p384_uint1 x1036; + uint32_t x1037; + fiat_p384_uint1 x1038; + uint32_t x1039; + fiat_p384_uint1 x1040; + uint32_t x1041; + fiat_p384_uint1 x1042; + uint32_t x1043; + uint32_t x1044; + uint32_t x1045; + uint32_t x1046; + uint32_t x1047; + uint32_t x1048; + uint32_t x1049; + uint32_t x1050; + uint32_t x1051; + fiat_p384_uint1 x1052; + uint32_t x1053; + fiat_p384_uint1 x1054; + uint32_t x1055; + fiat_p384_uint1 x1056; + uint32_t x1057; + fiat_p384_uint1 x1058; + uint32_t x1059; + fiat_p384_uint1 x1060; + uint32_t x1061; + fiat_p384_uint1 x1062; + uint32_t x1063; + fiat_p384_uint1 x1064; + uint32_t x1065; + fiat_p384_uint1 x1066; + uint32_t x1067; + fiat_p384_uint1 x1068; + uint32_t x1069; + fiat_p384_uint1 x1070; + uint32_t x1071; + fiat_p384_uint1 x1072; + uint32_t x1073; + fiat_p384_uint1 x1074; + uint32_t x1075; + fiat_p384_uint1 x1076; + uint32_t x1077; + uint32_t x1078; + uint32_t x1079; + uint32_t x1080; + uint32_t x1081; + uint32_t x1082; + uint32_t x1083; + uint32_t x1084; + uint32_t x1085; + uint32_t x1086; + uint32_t x1087; + uint32_t x1088; + uint32_t x1089; + uint32_t x1090; + uint32_t x1091; + uint32_t x1092; + uint32_t x1093; + uint32_t x1094; + uint32_t x1095; + uint32_t x1096; + uint32_t x1097; + fiat_p384_uint1 x1098; + uint32_t x1099; + fiat_p384_uint1 x1100; + uint32_t x1101; + fiat_p384_uint1 x1102; + uint32_t x1103; + fiat_p384_uint1 x1104; + uint32_t x1105; + fiat_p384_uint1 x1106; + uint32_t x1107; + fiat_p384_uint1 x1108; + uint32_t x1109; + fiat_p384_uint1 x1110; + uint32_t x1111; + fiat_p384_uint1 x1112; + uint32_t x1113; + fiat_p384_uint1 x1114; + uint32_t x1115; + fiat_p384_uint1 x1116; + uint32_t x1117; + fiat_p384_uint1 x1118; + uint32_t x1119; + fiat_p384_uint1 x1120; + uint32_t x1121; + fiat_p384_uint1 x1122; + uint32_t x1123; + fiat_p384_uint1 x1124; + uint32_t x1125; + fiat_p384_uint1 x1126; + uint32_t x1127; + fiat_p384_uint1 x1128; + uint32_t x1129; + fiat_p384_uint1 x1130; + uint32_t x1131; + fiat_p384_uint1 x1132; + uint32_t x1133; + fiat_p384_uint1 x1134; + uint32_t x1135; + fiat_p384_uint1 x1136; + uint32_t x1137; + fiat_p384_uint1 x1138; + uint32_t x1139; + fiat_p384_uint1 x1140; + uint32_t x1141; + fiat_p384_uint1 x1142; + uint32_t x1143; + fiat_p384_uint1 x1144; + uint32_t x1145; + fiat_p384_uint1 x1146; + uint32_t x1147; + fiat_p384_uint1 x1148; + uint32_t x1149; + fiat_p384_uint1 x1150; + uint32_t x1151; + fiat_p384_uint1 x1152; + uint32_t x1153; + fiat_p384_uint1 x1154; + uint32_t x1155; + fiat_p384_uint1 x1156; + uint32_t x1157; + fiat_p384_uint1 x1158; + uint32_t x1159; + fiat_p384_uint1 x1160; + uint32_t x1161; + fiat_p384_uint1 x1162; + uint32_t x1163; + fiat_p384_uint1 x1164; + uint32_t x1165; + uint32_t x1166; + uint32_t x1167; + uint32_t x1168; + uint32_t x1169; + uint32_t x1170; + uint32_t x1171; + uint32_t x1172; + uint32_t x1173; + uint32_t x1174; + uint32_t x1175; + uint32_t x1176; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[8]); + x9 = (arg1[9]); + x10 = (arg1[10]); + x11 = (arg1[11]); + x12 = (arg1[0]); + fiat_p384_mulx_u32(&x13, &x14, x12, 0x2); + fiat_p384_mulx_u32(&x15, &x16, x12, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x17, &x18, x12, 0x2); + fiat_p384_mulx_u32(&x19, &x20, x12, UINT32_C(0xfffffffe)); + fiat_p384_addcarryx_u32(&x21, &x22, 0x0, (fiat_p384_uint1)x14, x12); + fiat_p384_mulx_u32(&x23, &x24, x12, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x25, &x26, x12, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x27, &x28, x12, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x29, &x30, x12, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x31, &x32, x12, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x33, &x34, x12, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x35, &x36, x12, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x37, &x38, x12, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x39, &x40, x12, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x41, &x42, x12, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x43, &x44, 0x0, x40, x37); + fiat_p384_addcarryx_u32(&x45, &x46, x44, x38, x35); + fiat_p384_addcarryx_u32(&x47, &x48, x46, x36, x33); + fiat_p384_addcarryx_u32(&x49, &x50, x48, x34, x31); + fiat_p384_addcarryx_u32(&x51, &x52, x50, x32, x29); + fiat_p384_addcarryx_u32(&x53, &x54, x52, x30, x27); + fiat_p384_addcarryx_u32(&x55, &x56, x54, x28, x25); + fiat_p384_addcarryx_u32(&x57, &x58, x56, x26, x23); + fiat_p384_addcarryx_u32(&x59, &x60, 0x0, x12, x41); + fiat_p384_addcarryx_u32(&x61, &x62, x60, x19, x42); + fiat_p384_addcarryx_u32(&x63, &x64, 0x0, x17, x39); + fiat_p384_addcarryx_u32(&x65, &x66, x64, (fiat_p384_uint1)x18, x43); + fiat_p384_addcarryx_u32(&x67, &x68, x66, x15, x45); + fiat_p384_addcarryx_u32(&x69, &x70, x68, x16, x47); + fiat_p384_addcarryx_u32(&x71, &x72, x70, x13, x49); + fiat_p384_addcarryx_u32(&x73, &x74, x72, x21, x51); + fiat_p384_addcarryx_u32(&x75, &x76, x74, x22, x53); + fiat_p384_addcarryx_u32(&x77, &x78, x76, 0x0, x55); + fiat_p384_addcarryx_u32(&x79, &x80, x78, 0x0, x57); + fiat_p384_addcarryx_u32(&x81, &x82, x80, 0x0, (x58 + x24)); + fiat_p384_mulx_u32(&x83, &x84, x1, 0x2); + fiat_p384_mulx_u32(&x85, &x86, x1, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x87, &x88, x1, 0x2); + fiat_p384_mulx_u32(&x89, &x90, x1, UINT32_C(0xfffffffe)); + fiat_p384_addcarryx_u32(&x91, &x92, 0x0, (fiat_p384_uint1)x84, x1); + fiat_p384_addcarryx_u32(&x93, &x94, 0x0, x61, x1); + fiat_p384_addcarryx_u32(&x95, &x96, x94, (x62 + x20), x89); + fiat_p384_addcarryx_u32(&x97, &x98, x96, x63, x90); + fiat_p384_addcarryx_u32(&x99, &x100, x98, x65, x87); + fiat_p384_addcarryx_u32(&x101, &x102, x100, x67, (fiat_p384_uint1)x88); + fiat_p384_addcarryx_u32(&x103, &x104, x102, x69, x85); + fiat_p384_addcarryx_u32(&x105, &x106, x104, x71, x86); + fiat_p384_addcarryx_u32(&x107, &x108, x106, x73, x83); + fiat_p384_addcarryx_u32(&x109, &x110, x108, x75, x91); + fiat_p384_addcarryx_u32(&x111, &x112, x110, x77, x92); + fiat_p384_addcarryx_u32(&x113, &x114, x112, x79, 0x0); + fiat_p384_addcarryx_u32(&x115, &x116, x114, x81, 0x0); + fiat_p384_mulx_u32(&x117, &x118, x93, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x119, &x120, x93, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x121, &x122, x93, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x123, &x124, x93, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x125, &x126, x93, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x127, &x128, x93, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x129, &x130, x93, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x131, &x132, x93, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x133, &x134, x93, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x135, &x136, x93, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x137, &x138, 0x0, x134, x131); + fiat_p384_addcarryx_u32(&x139, &x140, x138, x132, x129); + fiat_p384_addcarryx_u32(&x141, &x142, x140, x130, x127); + fiat_p384_addcarryx_u32(&x143, &x144, x142, x128, x125); + fiat_p384_addcarryx_u32(&x145, &x146, x144, x126, x123); + fiat_p384_addcarryx_u32(&x147, &x148, x146, x124, x121); + fiat_p384_addcarryx_u32(&x149, &x150, x148, x122, x119); + fiat_p384_addcarryx_u32(&x151, &x152, x150, x120, x117); + fiat_p384_addcarryx_u32(&x153, &x154, 0x0, x93, x135); + fiat_p384_addcarryx_u32(&x155, &x156, x154, x95, x136); + fiat_p384_addcarryx_u32(&x157, &x158, x156, x97, 0x0); + fiat_p384_addcarryx_u32(&x159, &x160, x158, x99, x133); + fiat_p384_addcarryx_u32(&x161, &x162, x160, x101, x137); + fiat_p384_addcarryx_u32(&x163, &x164, x162, x103, x139); + fiat_p384_addcarryx_u32(&x165, &x166, x164, x105, x141); + fiat_p384_addcarryx_u32(&x167, &x168, x166, x107, x143); + fiat_p384_addcarryx_u32(&x169, &x170, x168, x109, x145); + fiat_p384_addcarryx_u32(&x171, &x172, x170, x111, x147); + fiat_p384_addcarryx_u32(&x173, &x174, x172, x113, x149); + fiat_p384_addcarryx_u32(&x175, &x176, x174, x115, x151); + fiat_p384_addcarryx_u32(&x177, &x178, x176, ((uint32_t)x116 + x82), (x152 + x118)); + fiat_p384_mulx_u32(&x179, &x180, x2, 0x2); + fiat_p384_mulx_u32(&x181, &x182, x2, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x183, &x184, x2, 0x2); + fiat_p384_mulx_u32(&x185, &x186, x2, UINT32_C(0xfffffffe)); + fiat_p384_addcarryx_u32(&x187, &x188, 0x0, (fiat_p384_uint1)x180, x2); + fiat_p384_addcarryx_u32(&x189, &x190, 0x0, x155, x2); + fiat_p384_addcarryx_u32(&x191, &x192, x190, x157, x185); + fiat_p384_addcarryx_u32(&x193, &x194, x192, x159, x186); + fiat_p384_addcarryx_u32(&x195, &x196, x194, x161, x183); + fiat_p384_addcarryx_u32(&x197, &x198, x196, x163, (fiat_p384_uint1)x184); + fiat_p384_addcarryx_u32(&x199, &x200, x198, x165, x181); + fiat_p384_addcarryx_u32(&x201, &x202, x200, x167, x182); + fiat_p384_addcarryx_u32(&x203, &x204, x202, x169, x179); + fiat_p384_addcarryx_u32(&x205, &x206, x204, x171, x187); + fiat_p384_addcarryx_u32(&x207, &x208, x206, x173, x188); + fiat_p384_addcarryx_u32(&x209, &x210, x208, x175, 0x0); + fiat_p384_addcarryx_u32(&x211, &x212, x210, x177, 0x0); + fiat_p384_mulx_u32(&x213, &x214, x189, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x215, &x216, x189, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x217, &x218, x189, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x219, &x220, x189, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x221, &x222, x189, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x223, &x224, x189, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x225, &x226, x189, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x227, &x228, x189, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x229, &x230, x189, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x231, &x232, x189, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x233, &x234, 0x0, x230, x227); + fiat_p384_addcarryx_u32(&x235, &x236, x234, x228, x225); + fiat_p384_addcarryx_u32(&x237, &x238, x236, x226, x223); + fiat_p384_addcarryx_u32(&x239, &x240, x238, x224, x221); + fiat_p384_addcarryx_u32(&x241, &x242, x240, x222, x219); + fiat_p384_addcarryx_u32(&x243, &x244, x242, x220, x217); + fiat_p384_addcarryx_u32(&x245, &x246, x244, x218, x215); + fiat_p384_addcarryx_u32(&x247, &x248, x246, x216, x213); + fiat_p384_addcarryx_u32(&x249, &x250, 0x0, x189, x231); + fiat_p384_addcarryx_u32(&x251, &x252, x250, x191, x232); + fiat_p384_addcarryx_u32(&x253, &x254, x252, x193, 0x0); + fiat_p384_addcarryx_u32(&x255, &x256, x254, x195, x229); + fiat_p384_addcarryx_u32(&x257, &x258, x256, x197, x233); + fiat_p384_addcarryx_u32(&x259, &x260, x258, x199, x235); + fiat_p384_addcarryx_u32(&x261, &x262, x260, x201, x237); + fiat_p384_addcarryx_u32(&x263, &x264, x262, x203, x239); + fiat_p384_addcarryx_u32(&x265, &x266, x264, x205, x241); + fiat_p384_addcarryx_u32(&x267, &x268, x266, x207, x243); + fiat_p384_addcarryx_u32(&x269, &x270, x268, x209, x245); + fiat_p384_addcarryx_u32(&x271, &x272, x270, x211, x247); + fiat_p384_addcarryx_u32(&x273, &x274, x272, ((uint32_t)x212 + x178), (x248 + x214)); + fiat_p384_mulx_u32(&x275, &x276, x3, 0x2); + fiat_p384_mulx_u32(&x277, &x278, x3, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x279, &x280, x3, 0x2); + fiat_p384_mulx_u32(&x281, &x282, x3, UINT32_C(0xfffffffe)); + fiat_p384_addcarryx_u32(&x283, &x284, 0x0, (fiat_p384_uint1)x276, x3); + fiat_p384_addcarryx_u32(&x285, &x286, 0x0, x251, x3); + fiat_p384_addcarryx_u32(&x287, &x288, x286, x253, x281); + fiat_p384_addcarryx_u32(&x289, &x290, x288, x255, x282); + fiat_p384_addcarryx_u32(&x291, &x292, x290, x257, x279); + fiat_p384_addcarryx_u32(&x293, &x294, x292, x259, (fiat_p384_uint1)x280); + fiat_p384_addcarryx_u32(&x295, &x296, x294, x261, x277); + fiat_p384_addcarryx_u32(&x297, &x298, x296, x263, x278); + fiat_p384_addcarryx_u32(&x299, &x300, x298, x265, x275); + fiat_p384_addcarryx_u32(&x301, &x302, x300, x267, x283); + fiat_p384_addcarryx_u32(&x303, &x304, x302, x269, x284); + fiat_p384_addcarryx_u32(&x305, &x306, x304, x271, 0x0); + fiat_p384_addcarryx_u32(&x307, &x308, x306, x273, 0x0); + fiat_p384_mulx_u32(&x309, &x310, x285, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x311, &x312, x285, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x313, &x314, x285, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x315, &x316, x285, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x317, &x318, x285, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x319, &x320, x285, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x321, &x322, x285, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x323, &x324, x285, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x325, &x326, x285, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x327, &x328, x285, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x329, &x330, 0x0, x326, x323); + fiat_p384_addcarryx_u32(&x331, &x332, x330, x324, x321); + fiat_p384_addcarryx_u32(&x333, &x334, x332, x322, x319); + fiat_p384_addcarryx_u32(&x335, &x336, x334, x320, x317); + fiat_p384_addcarryx_u32(&x337, &x338, x336, x318, x315); + fiat_p384_addcarryx_u32(&x339, &x340, x338, x316, x313); + fiat_p384_addcarryx_u32(&x341, &x342, x340, x314, x311); + fiat_p384_addcarryx_u32(&x343, &x344, x342, x312, x309); + fiat_p384_addcarryx_u32(&x345, &x346, 0x0, x285, x327); + fiat_p384_addcarryx_u32(&x347, &x348, x346, x287, x328); + fiat_p384_addcarryx_u32(&x349, &x350, x348, x289, 0x0); + fiat_p384_addcarryx_u32(&x351, &x352, x350, x291, x325); + fiat_p384_addcarryx_u32(&x353, &x354, x352, x293, x329); + fiat_p384_addcarryx_u32(&x355, &x356, x354, x295, x331); + fiat_p384_addcarryx_u32(&x357, &x358, x356, x297, x333); + fiat_p384_addcarryx_u32(&x359, &x360, x358, x299, x335); + fiat_p384_addcarryx_u32(&x361, &x362, x360, x301, x337); + fiat_p384_addcarryx_u32(&x363, &x364, x362, x303, x339); + fiat_p384_addcarryx_u32(&x365, &x366, x364, x305, x341); + fiat_p384_addcarryx_u32(&x367, &x368, x366, x307, x343); + fiat_p384_addcarryx_u32(&x369, &x370, x368, ((uint32_t)x308 + x274), (x344 + x310)); + fiat_p384_mulx_u32(&x371, &x372, x4, 0x2); + fiat_p384_mulx_u32(&x373, &x374, x4, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x375, &x376, x4, 0x2); + fiat_p384_mulx_u32(&x377, &x378, x4, UINT32_C(0xfffffffe)); + fiat_p384_addcarryx_u32(&x379, &x380, 0x0, (fiat_p384_uint1)x372, x4); + fiat_p384_addcarryx_u32(&x381, &x382, 0x0, x347, x4); + fiat_p384_addcarryx_u32(&x383, &x384, x382, x349, x377); + fiat_p384_addcarryx_u32(&x385, &x386, x384, x351, x378); + fiat_p384_addcarryx_u32(&x387, &x388, x386, x353, x375); + fiat_p384_addcarryx_u32(&x389, &x390, x388, x355, (fiat_p384_uint1)x376); + fiat_p384_addcarryx_u32(&x391, &x392, x390, x357, x373); + fiat_p384_addcarryx_u32(&x393, &x394, x392, x359, x374); + fiat_p384_addcarryx_u32(&x395, &x396, x394, x361, x371); + fiat_p384_addcarryx_u32(&x397, &x398, x396, x363, x379); + fiat_p384_addcarryx_u32(&x399, &x400, x398, x365, x380); + fiat_p384_addcarryx_u32(&x401, &x402, x400, x367, 0x0); + fiat_p384_addcarryx_u32(&x403, &x404, x402, x369, 0x0); + fiat_p384_mulx_u32(&x405, &x406, x381, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x407, &x408, x381, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x409, &x410, x381, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x411, &x412, x381, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x413, &x414, x381, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x415, &x416, x381, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x417, &x418, x381, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x419, &x420, x381, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x421, &x422, x381, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x423, &x424, x381, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x425, &x426, 0x0, x422, x419); + fiat_p384_addcarryx_u32(&x427, &x428, x426, x420, x417); + fiat_p384_addcarryx_u32(&x429, &x430, x428, x418, x415); + fiat_p384_addcarryx_u32(&x431, &x432, x430, x416, x413); + fiat_p384_addcarryx_u32(&x433, &x434, x432, x414, x411); + fiat_p384_addcarryx_u32(&x435, &x436, x434, x412, x409); + fiat_p384_addcarryx_u32(&x437, &x438, x436, x410, x407); + fiat_p384_addcarryx_u32(&x439, &x440, x438, x408, x405); + fiat_p384_addcarryx_u32(&x441, &x442, 0x0, x381, x423); + fiat_p384_addcarryx_u32(&x443, &x444, x442, x383, x424); + fiat_p384_addcarryx_u32(&x445, &x446, x444, x385, 0x0); + fiat_p384_addcarryx_u32(&x447, &x448, x446, x387, x421); + fiat_p384_addcarryx_u32(&x449, &x450, x448, x389, x425); + fiat_p384_addcarryx_u32(&x451, &x452, x450, x391, x427); + fiat_p384_addcarryx_u32(&x453, &x454, x452, x393, x429); + fiat_p384_addcarryx_u32(&x455, &x456, x454, x395, x431); + fiat_p384_addcarryx_u32(&x457, &x458, x456, x397, x433); + fiat_p384_addcarryx_u32(&x459, &x460, x458, x399, x435); + fiat_p384_addcarryx_u32(&x461, &x462, x460, x401, x437); + fiat_p384_addcarryx_u32(&x463, &x464, x462, x403, x439); + fiat_p384_addcarryx_u32(&x465, &x466, x464, ((uint32_t)x404 + x370), (x440 + x406)); + fiat_p384_mulx_u32(&x467, &x468, x5, 0x2); + fiat_p384_mulx_u32(&x469, &x470, x5, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x471, &x472, x5, 0x2); + fiat_p384_mulx_u32(&x473, &x474, x5, UINT32_C(0xfffffffe)); + fiat_p384_addcarryx_u32(&x475, &x476, 0x0, (fiat_p384_uint1)x468, x5); + fiat_p384_addcarryx_u32(&x477, &x478, 0x0, x443, x5); + fiat_p384_addcarryx_u32(&x479, &x480, x478, x445, x473); + fiat_p384_addcarryx_u32(&x481, &x482, x480, x447, x474); + fiat_p384_addcarryx_u32(&x483, &x484, x482, x449, x471); + fiat_p384_addcarryx_u32(&x485, &x486, x484, x451, (fiat_p384_uint1)x472); + fiat_p384_addcarryx_u32(&x487, &x488, x486, x453, x469); + fiat_p384_addcarryx_u32(&x489, &x490, x488, x455, x470); + fiat_p384_addcarryx_u32(&x491, &x492, x490, x457, x467); + fiat_p384_addcarryx_u32(&x493, &x494, x492, x459, x475); + fiat_p384_addcarryx_u32(&x495, &x496, x494, x461, x476); + fiat_p384_addcarryx_u32(&x497, &x498, x496, x463, 0x0); + fiat_p384_addcarryx_u32(&x499, &x500, x498, x465, 0x0); + fiat_p384_mulx_u32(&x501, &x502, x477, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x503, &x504, x477, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x505, &x506, x477, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x507, &x508, x477, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x509, &x510, x477, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x511, &x512, x477, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x513, &x514, x477, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x515, &x516, x477, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x517, &x518, x477, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x519, &x520, x477, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x521, &x522, 0x0, x518, x515); + fiat_p384_addcarryx_u32(&x523, &x524, x522, x516, x513); + fiat_p384_addcarryx_u32(&x525, &x526, x524, x514, x511); + fiat_p384_addcarryx_u32(&x527, &x528, x526, x512, x509); + fiat_p384_addcarryx_u32(&x529, &x530, x528, x510, x507); + fiat_p384_addcarryx_u32(&x531, &x532, x530, x508, x505); + fiat_p384_addcarryx_u32(&x533, &x534, x532, x506, x503); + fiat_p384_addcarryx_u32(&x535, &x536, x534, x504, x501); + fiat_p384_addcarryx_u32(&x537, &x538, 0x0, x477, x519); + fiat_p384_addcarryx_u32(&x539, &x540, x538, x479, x520); + fiat_p384_addcarryx_u32(&x541, &x542, x540, x481, 0x0); + fiat_p384_addcarryx_u32(&x543, &x544, x542, x483, x517); + fiat_p384_addcarryx_u32(&x545, &x546, x544, x485, x521); + fiat_p384_addcarryx_u32(&x547, &x548, x546, x487, x523); + fiat_p384_addcarryx_u32(&x549, &x550, x548, x489, x525); + fiat_p384_addcarryx_u32(&x551, &x552, x550, x491, x527); + fiat_p384_addcarryx_u32(&x553, &x554, x552, x493, x529); + fiat_p384_addcarryx_u32(&x555, &x556, x554, x495, x531); + fiat_p384_addcarryx_u32(&x557, &x558, x556, x497, x533); + fiat_p384_addcarryx_u32(&x559, &x560, x558, x499, x535); + fiat_p384_addcarryx_u32(&x561, &x562, x560, ((uint32_t)x500 + x466), (x536 + x502)); + fiat_p384_mulx_u32(&x563, &x564, x6, 0x2); + fiat_p384_mulx_u32(&x565, &x566, x6, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x567, &x568, x6, 0x2); + fiat_p384_mulx_u32(&x569, &x570, x6, UINT32_C(0xfffffffe)); + fiat_p384_addcarryx_u32(&x571, &x572, 0x0, (fiat_p384_uint1)x564, x6); + fiat_p384_addcarryx_u32(&x573, &x574, 0x0, x539, x6); + fiat_p384_addcarryx_u32(&x575, &x576, x574, x541, x569); + fiat_p384_addcarryx_u32(&x577, &x578, x576, x543, x570); + fiat_p384_addcarryx_u32(&x579, &x580, x578, x545, x567); + fiat_p384_addcarryx_u32(&x581, &x582, x580, x547, (fiat_p384_uint1)x568); + fiat_p384_addcarryx_u32(&x583, &x584, x582, x549, x565); + fiat_p384_addcarryx_u32(&x585, &x586, x584, x551, x566); + fiat_p384_addcarryx_u32(&x587, &x588, x586, x553, x563); + fiat_p384_addcarryx_u32(&x589, &x590, x588, x555, x571); + fiat_p384_addcarryx_u32(&x591, &x592, x590, x557, x572); + fiat_p384_addcarryx_u32(&x593, &x594, x592, x559, 0x0); + fiat_p384_addcarryx_u32(&x595, &x596, x594, x561, 0x0); + fiat_p384_mulx_u32(&x597, &x598, x573, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x599, &x600, x573, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x601, &x602, x573, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x603, &x604, x573, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x605, &x606, x573, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x607, &x608, x573, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x609, &x610, x573, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x611, &x612, x573, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x613, &x614, x573, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x615, &x616, x573, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x617, &x618, 0x0, x614, x611); + fiat_p384_addcarryx_u32(&x619, &x620, x618, x612, x609); + fiat_p384_addcarryx_u32(&x621, &x622, x620, x610, x607); + fiat_p384_addcarryx_u32(&x623, &x624, x622, x608, x605); + fiat_p384_addcarryx_u32(&x625, &x626, x624, x606, x603); + fiat_p384_addcarryx_u32(&x627, &x628, x626, x604, x601); + fiat_p384_addcarryx_u32(&x629, &x630, x628, x602, x599); + fiat_p384_addcarryx_u32(&x631, &x632, x630, x600, x597); + fiat_p384_addcarryx_u32(&x633, &x634, 0x0, x573, x615); + fiat_p384_addcarryx_u32(&x635, &x636, x634, x575, x616); + fiat_p384_addcarryx_u32(&x637, &x638, x636, x577, 0x0); + fiat_p384_addcarryx_u32(&x639, &x640, x638, x579, x613); + fiat_p384_addcarryx_u32(&x641, &x642, x640, x581, x617); + fiat_p384_addcarryx_u32(&x643, &x644, x642, x583, x619); + fiat_p384_addcarryx_u32(&x645, &x646, x644, x585, x621); + fiat_p384_addcarryx_u32(&x647, &x648, x646, x587, x623); + fiat_p384_addcarryx_u32(&x649, &x650, x648, x589, x625); + fiat_p384_addcarryx_u32(&x651, &x652, x650, x591, x627); + fiat_p384_addcarryx_u32(&x653, &x654, x652, x593, x629); + fiat_p384_addcarryx_u32(&x655, &x656, x654, x595, x631); + fiat_p384_addcarryx_u32(&x657, &x658, x656, ((uint32_t)x596 + x562), (x632 + x598)); + fiat_p384_mulx_u32(&x659, &x660, x7, 0x2); + fiat_p384_mulx_u32(&x661, &x662, x7, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x663, &x664, x7, 0x2); + fiat_p384_mulx_u32(&x665, &x666, x7, UINT32_C(0xfffffffe)); + fiat_p384_addcarryx_u32(&x667, &x668, 0x0, (fiat_p384_uint1)x660, x7); + fiat_p384_addcarryx_u32(&x669, &x670, 0x0, x635, x7); + fiat_p384_addcarryx_u32(&x671, &x672, x670, x637, x665); + fiat_p384_addcarryx_u32(&x673, &x674, x672, x639, x666); + fiat_p384_addcarryx_u32(&x675, &x676, x674, x641, x663); + fiat_p384_addcarryx_u32(&x677, &x678, x676, x643, (fiat_p384_uint1)x664); + fiat_p384_addcarryx_u32(&x679, &x680, x678, x645, x661); + fiat_p384_addcarryx_u32(&x681, &x682, x680, x647, x662); + fiat_p384_addcarryx_u32(&x683, &x684, x682, x649, x659); + fiat_p384_addcarryx_u32(&x685, &x686, x684, x651, x667); + fiat_p384_addcarryx_u32(&x687, &x688, x686, x653, x668); + fiat_p384_addcarryx_u32(&x689, &x690, x688, x655, 0x0); + fiat_p384_addcarryx_u32(&x691, &x692, x690, x657, 0x0); + fiat_p384_mulx_u32(&x693, &x694, x669, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x695, &x696, x669, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x697, &x698, x669, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x699, &x700, x669, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x701, &x702, x669, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x703, &x704, x669, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x705, &x706, x669, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x707, &x708, x669, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x709, &x710, x669, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x711, &x712, x669, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x713, &x714, 0x0, x710, x707); + fiat_p384_addcarryx_u32(&x715, &x716, x714, x708, x705); + fiat_p384_addcarryx_u32(&x717, &x718, x716, x706, x703); + fiat_p384_addcarryx_u32(&x719, &x720, x718, x704, x701); + fiat_p384_addcarryx_u32(&x721, &x722, x720, x702, x699); + fiat_p384_addcarryx_u32(&x723, &x724, x722, x700, x697); + fiat_p384_addcarryx_u32(&x725, &x726, x724, x698, x695); + fiat_p384_addcarryx_u32(&x727, &x728, x726, x696, x693); + fiat_p384_addcarryx_u32(&x729, &x730, 0x0, x669, x711); + fiat_p384_addcarryx_u32(&x731, &x732, x730, x671, x712); + fiat_p384_addcarryx_u32(&x733, &x734, x732, x673, 0x0); + fiat_p384_addcarryx_u32(&x735, &x736, x734, x675, x709); + fiat_p384_addcarryx_u32(&x737, &x738, x736, x677, x713); + fiat_p384_addcarryx_u32(&x739, &x740, x738, x679, x715); + fiat_p384_addcarryx_u32(&x741, &x742, x740, x681, x717); + fiat_p384_addcarryx_u32(&x743, &x744, x742, x683, x719); + fiat_p384_addcarryx_u32(&x745, &x746, x744, x685, x721); + fiat_p384_addcarryx_u32(&x747, &x748, x746, x687, x723); + fiat_p384_addcarryx_u32(&x749, &x750, x748, x689, x725); + fiat_p384_addcarryx_u32(&x751, &x752, x750, x691, x727); + fiat_p384_addcarryx_u32(&x753, &x754, x752, ((uint32_t)x692 + x658), (x728 + x694)); + fiat_p384_mulx_u32(&x755, &x756, x8, 0x2); + fiat_p384_mulx_u32(&x757, &x758, x8, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x759, &x760, x8, 0x2); + fiat_p384_mulx_u32(&x761, &x762, x8, UINT32_C(0xfffffffe)); + fiat_p384_addcarryx_u32(&x763, &x764, 0x0, (fiat_p384_uint1)x756, x8); + fiat_p384_addcarryx_u32(&x765, &x766, 0x0, x731, x8); + fiat_p384_addcarryx_u32(&x767, &x768, x766, x733, x761); + fiat_p384_addcarryx_u32(&x769, &x770, x768, x735, x762); + fiat_p384_addcarryx_u32(&x771, &x772, x770, x737, x759); + fiat_p384_addcarryx_u32(&x773, &x774, x772, x739, (fiat_p384_uint1)x760); + fiat_p384_addcarryx_u32(&x775, &x776, x774, x741, x757); + fiat_p384_addcarryx_u32(&x777, &x778, x776, x743, x758); + fiat_p384_addcarryx_u32(&x779, &x780, x778, x745, x755); + fiat_p384_addcarryx_u32(&x781, &x782, x780, x747, x763); + fiat_p384_addcarryx_u32(&x783, &x784, x782, x749, x764); + fiat_p384_addcarryx_u32(&x785, &x786, x784, x751, 0x0); + fiat_p384_addcarryx_u32(&x787, &x788, x786, x753, 0x0); + fiat_p384_mulx_u32(&x789, &x790, x765, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x791, &x792, x765, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x793, &x794, x765, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x795, &x796, x765, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x797, &x798, x765, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x799, &x800, x765, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x801, &x802, x765, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x803, &x804, x765, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x805, &x806, x765, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x807, &x808, x765, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x809, &x810, 0x0, x806, x803); + fiat_p384_addcarryx_u32(&x811, &x812, x810, x804, x801); + fiat_p384_addcarryx_u32(&x813, &x814, x812, x802, x799); + fiat_p384_addcarryx_u32(&x815, &x816, x814, x800, x797); + fiat_p384_addcarryx_u32(&x817, &x818, x816, x798, x795); + fiat_p384_addcarryx_u32(&x819, &x820, x818, x796, x793); + fiat_p384_addcarryx_u32(&x821, &x822, x820, x794, x791); + fiat_p384_addcarryx_u32(&x823, &x824, x822, x792, x789); + fiat_p384_addcarryx_u32(&x825, &x826, 0x0, x765, x807); + fiat_p384_addcarryx_u32(&x827, &x828, x826, x767, x808); + fiat_p384_addcarryx_u32(&x829, &x830, x828, x769, 0x0); + fiat_p384_addcarryx_u32(&x831, &x832, x830, x771, x805); + fiat_p384_addcarryx_u32(&x833, &x834, x832, x773, x809); + fiat_p384_addcarryx_u32(&x835, &x836, x834, x775, x811); + fiat_p384_addcarryx_u32(&x837, &x838, x836, x777, x813); + fiat_p384_addcarryx_u32(&x839, &x840, x838, x779, x815); + fiat_p384_addcarryx_u32(&x841, &x842, x840, x781, x817); + fiat_p384_addcarryx_u32(&x843, &x844, x842, x783, x819); + fiat_p384_addcarryx_u32(&x845, &x846, x844, x785, x821); + fiat_p384_addcarryx_u32(&x847, &x848, x846, x787, x823); + fiat_p384_addcarryx_u32(&x849, &x850, x848, ((uint32_t)x788 + x754), (x824 + x790)); + fiat_p384_mulx_u32(&x851, &x852, x9, 0x2); + fiat_p384_mulx_u32(&x853, &x854, x9, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x855, &x856, x9, 0x2); + fiat_p384_mulx_u32(&x857, &x858, x9, UINT32_C(0xfffffffe)); + fiat_p384_addcarryx_u32(&x859, &x860, 0x0, (fiat_p384_uint1)x852, x9); + fiat_p384_addcarryx_u32(&x861, &x862, 0x0, x827, x9); + fiat_p384_addcarryx_u32(&x863, &x864, x862, x829, x857); + fiat_p384_addcarryx_u32(&x865, &x866, x864, x831, x858); + fiat_p384_addcarryx_u32(&x867, &x868, x866, x833, x855); + fiat_p384_addcarryx_u32(&x869, &x870, x868, x835, (fiat_p384_uint1)x856); + fiat_p384_addcarryx_u32(&x871, &x872, x870, x837, x853); + fiat_p384_addcarryx_u32(&x873, &x874, x872, x839, x854); + fiat_p384_addcarryx_u32(&x875, &x876, x874, x841, x851); + fiat_p384_addcarryx_u32(&x877, &x878, x876, x843, x859); + fiat_p384_addcarryx_u32(&x879, &x880, x878, x845, x860); + fiat_p384_addcarryx_u32(&x881, &x882, x880, x847, 0x0); + fiat_p384_addcarryx_u32(&x883, &x884, x882, x849, 0x0); + fiat_p384_mulx_u32(&x885, &x886, x861, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x887, &x888, x861, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x889, &x890, x861, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x891, &x892, x861, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x893, &x894, x861, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x895, &x896, x861, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x897, &x898, x861, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x899, &x900, x861, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x901, &x902, x861, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x903, &x904, x861, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x905, &x906, 0x0, x902, x899); + fiat_p384_addcarryx_u32(&x907, &x908, x906, x900, x897); + fiat_p384_addcarryx_u32(&x909, &x910, x908, x898, x895); + fiat_p384_addcarryx_u32(&x911, &x912, x910, x896, x893); + fiat_p384_addcarryx_u32(&x913, &x914, x912, x894, x891); + fiat_p384_addcarryx_u32(&x915, &x916, x914, x892, x889); + fiat_p384_addcarryx_u32(&x917, &x918, x916, x890, x887); + fiat_p384_addcarryx_u32(&x919, &x920, x918, x888, x885); + fiat_p384_addcarryx_u32(&x921, &x922, 0x0, x861, x903); + fiat_p384_addcarryx_u32(&x923, &x924, x922, x863, x904); + fiat_p384_addcarryx_u32(&x925, &x926, x924, x865, 0x0); + fiat_p384_addcarryx_u32(&x927, &x928, x926, x867, x901); + fiat_p384_addcarryx_u32(&x929, &x930, x928, x869, x905); + fiat_p384_addcarryx_u32(&x931, &x932, x930, x871, x907); + fiat_p384_addcarryx_u32(&x933, &x934, x932, x873, x909); + fiat_p384_addcarryx_u32(&x935, &x936, x934, x875, x911); + fiat_p384_addcarryx_u32(&x937, &x938, x936, x877, x913); + fiat_p384_addcarryx_u32(&x939, &x940, x938, x879, x915); + fiat_p384_addcarryx_u32(&x941, &x942, x940, x881, x917); + fiat_p384_addcarryx_u32(&x943, &x944, x942, x883, x919); + fiat_p384_addcarryx_u32(&x945, &x946, x944, ((uint32_t)x884 + x850), (x920 + x886)); + fiat_p384_mulx_u32(&x947, &x948, x10, 0x2); + fiat_p384_mulx_u32(&x949, &x950, x10, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x951, &x952, x10, 0x2); + fiat_p384_mulx_u32(&x953, &x954, x10, UINT32_C(0xfffffffe)); + fiat_p384_addcarryx_u32(&x955, &x956, 0x0, (fiat_p384_uint1)x948, x10); + fiat_p384_addcarryx_u32(&x957, &x958, 0x0, x923, x10); + fiat_p384_addcarryx_u32(&x959, &x960, x958, x925, x953); + fiat_p384_addcarryx_u32(&x961, &x962, x960, x927, x954); + fiat_p384_addcarryx_u32(&x963, &x964, x962, x929, x951); + fiat_p384_addcarryx_u32(&x965, &x966, x964, x931, (fiat_p384_uint1)x952); + fiat_p384_addcarryx_u32(&x967, &x968, x966, x933, x949); + fiat_p384_addcarryx_u32(&x969, &x970, x968, x935, x950); + fiat_p384_addcarryx_u32(&x971, &x972, x970, x937, x947); + fiat_p384_addcarryx_u32(&x973, &x974, x972, x939, x955); + fiat_p384_addcarryx_u32(&x975, &x976, x974, x941, x956); + fiat_p384_addcarryx_u32(&x977, &x978, x976, x943, 0x0); + fiat_p384_addcarryx_u32(&x979, &x980, x978, x945, 0x0); + fiat_p384_mulx_u32(&x981, &x982, x957, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x983, &x984, x957, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x985, &x986, x957, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x987, &x988, x957, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x989, &x990, x957, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x991, &x992, x957, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x993, &x994, x957, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x995, &x996, x957, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x997, &x998, x957, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x999, &x1000, x957, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x1001, &x1002, 0x0, x998, x995); + fiat_p384_addcarryx_u32(&x1003, &x1004, x1002, x996, x993); + fiat_p384_addcarryx_u32(&x1005, &x1006, x1004, x994, x991); + fiat_p384_addcarryx_u32(&x1007, &x1008, x1006, x992, x989); + fiat_p384_addcarryx_u32(&x1009, &x1010, x1008, x990, x987); + fiat_p384_addcarryx_u32(&x1011, &x1012, x1010, x988, x985); + fiat_p384_addcarryx_u32(&x1013, &x1014, x1012, x986, x983); + fiat_p384_addcarryx_u32(&x1015, &x1016, x1014, x984, x981); + fiat_p384_addcarryx_u32(&x1017, &x1018, 0x0, x957, x999); + fiat_p384_addcarryx_u32(&x1019, &x1020, x1018, x959, x1000); + fiat_p384_addcarryx_u32(&x1021, &x1022, x1020, x961, 0x0); + fiat_p384_addcarryx_u32(&x1023, &x1024, x1022, x963, x997); + fiat_p384_addcarryx_u32(&x1025, &x1026, x1024, x965, x1001); + fiat_p384_addcarryx_u32(&x1027, &x1028, x1026, x967, x1003); + fiat_p384_addcarryx_u32(&x1029, &x1030, x1028, x969, x1005); + fiat_p384_addcarryx_u32(&x1031, &x1032, x1030, x971, x1007); + fiat_p384_addcarryx_u32(&x1033, &x1034, x1032, x973, x1009); + fiat_p384_addcarryx_u32(&x1035, &x1036, x1034, x975, x1011); + fiat_p384_addcarryx_u32(&x1037, &x1038, x1036, x977, x1013); + fiat_p384_addcarryx_u32(&x1039, &x1040, x1038, x979, x1015); + fiat_p384_addcarryx_u32(&x1041, &x1042, x1040, ((uint32_t)x980 + x946), (x1016 + x982)); + fiat_p384_mulx_u32(&x1043, &x1044, x11, 0x2); + fiat_p384_mulx_u32(&x1045, &x1046, x11, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x1047, &x1048, x11, 0x2); + fiat_p384_mulx_u32(&x1049, &x1050, x11, UINT32_C(0xfffffffe)); + fiat_p384_addcarryx_u32(&x1051, &x1052, 0x0, (fiat_p384_uint1)x1044, x11); + fiat_p384_addcarryx_u32(&x1053, &x1054, 0x0, x1019, x11); + fiat_p384_addcarryx_u32(&x1055, &x1056, x1054, x1021, x1049); + fiat_p384_addcarryx_u32(&x1057, &x1058, x1056, x1023, x1050); + fiat_p384_addcarryx_u32(&x1059, &x1060, x1058, x1025, x1047); + fiat_p384_addcarryx_u32(&x1061, &x1062, x1060, x1027, (fiat_p384_uint1)x1048); + fiat_p384_addcarryx_u32(&x1063, &x1064, x1062, x1029, x1045); + fiat_p384_addcarryx_u32(&x1065, &x1066, x1064, x1031, x1046); + fiat_p384_addcarryx_u32(&x1067, &x1068, x1066, x1033, x1043); + fiat_p384_addcarryx_u32(&x1069, &x1070, x1068, x1035, x1051); + fiat_p384_addcarryx_u32(&x1071, &x1072, x1070, x1037, x1052); + fiat_p384_addcarryx_u32(&x1073, &x1074, x1072, x1039, 0x0); + fiat_p384_addcarryx_u32(&x1075, &x1076, x1074, x1041, 0x0); + fiat_p384_mulx_u32(&x1077, &x1078, x1053, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1079, &x1080, x1053, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1081, &x1082, x1053, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1083, &x1084, x1053, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1085, &x1086, x1053, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1087, &x1088, x1053, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1089, &x1090, x1053, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1091, &x1092, x1053, UINT32_C(0xfffffffe)); + fiat_p384_mulx_u32(&x1093, &x1094, x1053, UINT32_C(0xffffffff)); + fiat_p384_mulx_u32(&x1095, &x1096, x1053, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x1097, &x1098, 0x0, x1094, x1091); + fiat_p384_addcarryx_u32(&x1099, &x1100, x1098, x1092, x1089); + fiat_p384_addcarryx_u32(&x1101, &x1102, x1100, x1090, x1087); + fiat_p384_addcarryx_u32(&x1103, &x1104, x1102, x1088, x1085); + fiat_p384_addcarryx_u32(&x1105, &x1106, x1104, x1086, x1083); + fiat_p384_addcarryx_u32(&x1107, &x1108, x1106, x1084, x1081); + fiat_p384_addcarryx_u32(&x1109, &x1110, x1108, x1082, x1079); + fiat_p384_addcarryx_u32(&x1111, &x1112, x1110, x1080, x1077); + fiat_p384_addcarryx_u32(&x1113, &x1114, 0x0, x1053, x1095); + fiat_p384_addcarryx_u32(&x1115, &x1116, x1114, x1055, x1096); + fiat_p384_addcarryx_u32(&x1117, &x1118, x1116, x1057, 0x0); + fiat_p384_addcarryx_u32(&x1119, &x1120, x1118, x1059, x1093); + fiat_p384_addcarryx_u32(&x1121, &x1122, x1120, x1061, x1097); + fiat_p384_addcarryx_u32(&x1123, &x1124, x1122, x1063, x1099); + fiat_p384_addcarryx_u32(&x1125, &x1126, x1124, x1065, x1101); + fiat_p384_addcarryx_u32(&x1127, &x1128, x1126, x1067, x1103); + fiat_p384_addcarryx_u32(&x1129, &x1130, x1128, x1069, x1105); + fiat_p384_addcarryx_u32(&x1131, &x1132, x1130, x1071, x1107); + fiat_p384_addcarryx_u32(&x1133, &x1134, x1132, x1073, x1109); + fiat_p384_addcarryx_u32(&x1135, &x1136, x1134, x1075, x1111); + fiat_p384_addcarryx_u32(&x1137, &x1138, x1136, ((uint32_t)x1076 + x1042), (x1112 + x1078)); + fiat_p384_subborrowx_u32(&x1139, &x1140, 0x0, x1115, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1141, &x1142, x1140, x1117, 0x0); + fiat_p384_subborrowx_u32(&x1143, &x1144, x1142, x1119, 0x0); + fiat_p384_subborrowx_u32(&x1145, &x1146, x1144, x1121, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1147, &x1148, x1146, x1123, UINT32_C(0xfffffffe)); + fiat_p384_subborrowx_u32(&x1149, &x1150, x1148, x1125, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1151, &x1152, x1150, x1127, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1153, &x1154, x1152, x1129, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1155, &x1156, x1154, x1131, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1157, &x1158, x1156, x1133, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1159, &x1160, x1158, x1135, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1161, &x1162, x1160, x1137, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x1163, &x1164, x1162, x1138, 0x0); + fiat_p384_cmovznz_u32(&x1165, x1164, x1139, x1115); + fiat_p384_cmovznz_u32(&x1166, x1164, x1141, x1117); + fiat_p384_cmovznz_u32(&x1167, x1164, x1143, x1119); + fiat_p384_cmovznz_u32(&x1168, x1164, x1145, x1121); + fiat_p384_cmovznz_u32(&x1169, x1164, x1147, x1123); + fiat_p384_cmovznz_u32(&x1170, x1164, x1149, x1125); + fiat_p384_cmovznz_u32(&x1171, x1164, x1151, x1127); + fiat_p384_cmovznz_u32(&x1172, x1164, x1153, x1129); + fiat_p384_cmovznz_u32(&x1173, x1164, x1155, x1131); + fiat_p384_cmovznz_u32(&x1174, x1164, x1157, x1133); + fiat_p384_cmovznz_u32(&x1175, x1164, x1159, x1135); + fiat_p384_cmovznz_u32(&x1176, x1164, x1161, x1137); + out1[0] = x1165; + out1[1] = x1166; + out1[2] = x1167; + out1[3] = x1168; + out1[4] = x1169; + out1[5] = x1170; + out1[6] = x1171; + out1[7] = x1172; + out1[8] = x1173; + out1[9] = x1174; + out1[10] = x1175; + out1[11] = x1176; +} + +/* + * The function fiat_p384_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static void fiat_p384_nonzero(uint32_t* out1, const uint32_t arg1[12]) { + uint32_t x1; + x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | ((arg1[4]) | ((arg1[5]) | ((arg1[6]) | ((arg1[7]) | ((arg1[8]) | ((arg1[9]) | ((arg1[10]) | (arg1[11])))))))))))); + *out1 = x1; +} + +/* + * The function fiat_p384_selectznz is a multi-limb conditional select. + * Postconditions: + * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p384_selectznz(uint32_t out1[12], fiat_p384_uint1 arg1, const uint32_t arg2[12], const uint32_t arg3[12]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + fiat_p384_cmovznz_u32(&x1, arg1, (arg2[0]), (arg3[0])); + fiat_p384_cmovznz_u32(&x2, arg1, (arg2[1]), (arg3[1])); + fiat_p384_cmovznz_u32(&x3, arg1, (arg2[2]), (arg3[2])); + fiat_p384_cmovznz_u32(&x4, arg1, (arg2[3]), (arg3[3])); + fiat_p384_cmovznz_u32(&x5, arg1, (arg2[4]), (arg3[4])); + fiat_p384_cmovznz_u32(&x6, arg1, (arg2[5]), (arg3[5])); + fiat_p384_cmovznz_u32(&x7, arg1, (arg2[6]), (arg3[6])); + fiat_p384_cmovznz_u32(&x8, arg1, (arg2[7]), (arg3[7])); + fiat_p384_cmovznz_u32(&x9, arg1, (arg2[8]), (arg3[8])); + fiat_p384_cmovznz_u32(&x10, arg1, (arg2[9]), (arg3[9])); + fiat_p384_cmovznz_u32(&x11, arg1, (arg2[10]), (arg3[10])); + fiat_p384_cmovznz_u32(&x12, arg1, (arg2[11]), (arg3[11])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; + out1[6] = x7; + out1[7] = x8; + out1[8] = x9; + out1[9] = x10; + out1[10] = x11; + out1[11] = x12; +} + +/* + * The function fiat_p384_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..47] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + */ +static void fiat_p384_to_bytes(uint8_t out1[48], const uint32_t arg1[12]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint8_t x13; + uint32_t x14; + uint8_t x15; + uint32_t x16; + uint8_t x17; + uint8_t x18; + uint8_t x19; + uint32_t x20; + uint8_t x21; + uint32_t x22; + uint8_t x23; + uint8_t x24; + uint8_t x25; + uint32_t x26; + uint8_t x27; + uint32_t x28; + uint8_t x29; + uint8_t x30; + uint8_t x31; + uint32_t x32; + uint8_t x33; + uint32_t x34; + uint8_t x35; + uint8_t x36; + uint8_t x37; + uint32_t x38; + uint8_t x39; + uint32_t x40; + uint8_t x41; + uint8_t x42; + uint8_t x43; + uint32_t x44; + uint8_t x45; + uint32_t x46; + uint8_t x47; + uint8_t x48; + uint8_t x49; + uint32_t x50; + uint8_t x51; + uint32_t x52; + uint8_t x53; + uint8_t x54; + uint8_t x55; + uint32_t x56; + uint8_t x57; + uint32_t x58; + uint8_t x59; + uint8_t x60; + uint8_t x61; + uint32_t x62; + uint8_t x63; + uint32_t x64; + uint8_t x65; + uint8_t x66; + uint8_t x67; + uint32_t x68; + uint8_t x69; + uint32_t x70; + uint8_t x71; + uint8_t x72; + uint8_t x73; + uint32_t x74; + uint8_t x75; + uint32_t x76; + uint8_t x77; + uint8_t x78; + uint8_t x79; + uint32_t x80; + uint8_t x81; + uint32_t x82; + uint8_t x83; + uint8_t x84; + x1 = (arg1[11]); + x2 = (arg1[10]); + x3 = (arg1[9]); + x4 = (arg1[8]); + x5 = (arg1[7]); + x6 = (arg1[6]); + x7 = (arg1[5]); + x8 = (arg1[4]); + x9 = (arg1[3]); + x10 = (arg1[2]); + x11 = (arg1[1]); + x12 = (arg1[0]); + x13 = (uint8_t)(x12 & UINT8_C(0xff)); + x14 = (x12 >> 8); + x15 = (uint8_t)(x14 & UINT8_C(0xff)); + x16 = (x14 >> 8); + x17 = (uint8_t)(x16 & UINT8_C(0xff)); + x18 = (uint8_t)(x16 >> 8); + x19 = (uint8_t)(x11 & UINT8_C(0xff)); + x20 = (x11 >> 8); + x21 = (uint8_t)(x20 & UINT8_C(0xff)); + x22 = (x20 >> 8); + x23 = (uint8_t)(x22 & UINT8_C(0xff)); + x24 = (uint8_t)(x22 >> 8); + x25 = (uint8_t)(x10 & UINT8_C(0xff)); + x26 = (x10 >> 8); + x27 = (uint8_t)(x26 & UINT8_C(0xff)); + x28 = (x26 >> 8); + x29 = (uint8_t)(x28 & UINT8_C(0xff)); + x30 = (uint8_t)(x28 >> 8); + x31 = (uint8_t)(x9 & UINT8_C(0xff)); + x32 = (x9 >> 8); + x33 = (uint8_t)(x32 & UINT8_C(0xff)); + x34 = (x32 >> 8); + x35 = (uint8_t)(x34 & UINT8_C(0xff)); + x36 = (uint8_t)(x34 >> 8); + x37 = (uint8_t)(x8 & UINT8_C(0xff)); + x38 = (x8 >> 8); + x39 = (uint8_t)(x38 & UINT8_C(0xff)); + x40 = (x38 >> 8); + x41 = (uint8_t)(x40 & UINT8_C(0xff)); + x42 = (uint8_t)(x40 >> 8); + x43 = (uint8_t)(x7 & UINT8_C(0xff)); + x44 = (x7 >> 8); + x45 = (uint8_t)(x44 & UINT8_C(0xff)); + x46 = (x44 >> 8); + x47 = (uint8_t)(x46 & UINT8_C(0xff)); + x48 = (uint8_t)(x46 >> 8); + x49 = (uint8_t)(x6 & UINT8_C(0xff)); + x50 = (x6 >> 8); + x51 = (uint8_t)(x50 & UINT8_C(0xff)); + x52 = (x50 >> 8); + x53 = (uint8_t)(x52 & UINT8_C(0xff)); + x54 = (uint8_t)(x52 >> 8); + x55 = (uint8_t)(x5 & UINT8_C(0xff)); + x56 = (x5 >> 8); + x57 = (uint8_t)(x56 & UINT8_C(0xff)); + x58 = (x56 >> 8); + x59 = (uint8_t)(x58 & UINT8_C(0xff)); + x60 = (uint8_t)(x58 >> 8); + x61 = (uint8_t)(x4 & UINT8_C(0xff)); + x62 = (x4 >> 8); + x63 = (uint8_t)(x62 & UINT8_C(0xff)); + x64 = (x62 >> 8); + x65 = (uint8_t)(x64 & UINT8_C(0xff)); + x66 = (uint8_t)(x64 >> 8); + x67 = (uint8_t)(x3 & UINT8_C(0xff)); + x68 = (x3 >> 8); + x69 = (uint8_t)(x68 & UINT8_C(0xff)); + x70 = (x68 >> 8); + x71 = (uint8_t)(x70 & UINT8_C(0xff)); + x72 = (uint8_t)(x70 >> 8); + x73 = (uint8_t)(x2 & UINT8_C(0xff)); + x74 = (x2 >> 8); + x75 = (uint8_t)(x74 & UINT8_C(0xff)); + x76 = (x74 >> 8); + x77 = (uint8_t)(x76 & UINT8_C(0xff)); + x78 = (uint8_t)(x76 >> 8); + x79 = (uint8_t)(x1 & UINT8_C(0xff)); + x80 = (x1 >> 8); + x81 = (uint8_t)(x80 & UINT8_C(0xff)); + x82 = (x80 >> 8); + x83 = (uint8_t)(x82 & UINT8_C(0xff)); + x84 = (uint8_t)(x82 >> 8); + out1[0] = x13; + out1[1] = x15; + out1[2] = x17; + out1[3] = x18; + out1[4] = x19; + out1[5] = x21; + out1[6] = x23; + out1[7] = x24; + out1[8] = x25; + out1[9] = x27; + out1[10] = x29; + out1[11] = x30; + out1[12] = x31; + out1[13] = x33; + out1[14] = x35; + out1[15] = x36; + out1[16] = x37; + out1[17] = x39; + out1[18] = x41; + out1[19] = x42; + out1[20] = x43; + out1[21] = x45; + out1[22] = x47; + out1[23] = x48; + out1[24] = x49; + out1[25] = x51; + out1[26] = x53; + out1[27] = x54; + out1[28] = x55; + out1[29] = x57; + out1[30] = x59; + out1[31] = x60; + out1[32] = x61; + out1[33] = x63; + out1[34] = x65; + out1[35] = x66; + out1[36] = x67; + out1[37] = x69; + out1[38] = x71; + out1[39] = x72; + out1[40] = x73; + out1[41] = x75; + out1[42] = x77; + out1[43] = x78; + out1[44] = x79; + out1[45] = x81; + out1[46] = x83; + out1[47] = x84; +} + +/* + * The function fiat_p384_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p384_from_bytes(uint32_t out1[12], const uint8_t arg1[48]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint8_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint8_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint8_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint8_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint8_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint8_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint8_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint8_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint8_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint8_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint8_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint8_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + uint32_t x52; + uint32_t x53; + uint32_t x54; + uint32_t x55; + uint32_t x56; + uint32_t x57; + uint32_t x58; + uint32_t x59; + uint32_t x60; + uint32_t x61; + uint32_t x62; + uint32_t x63; + uint32_t x64; + uint32_t x65; + uint32_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + uint32_t x81; + uint32_t x82; + uint32_t x83; + uint32_t x84; + x1 = ((uint32_t)(arg1[47]) << 24); + x2 = ((uint32_t)(arg1[46]) << 16); + x3 = ((uint32_t)(arg1[45]) << 8); + x4 = (arg1[44]); + x5 = ((uint32_t)(arg1[43]) << 24); + x6 = ((uint32_t)(arg1[42]) << 16); + x7 = ((uint32_t)(arg1[41]) << 8); + x8 = (arg1[40]); + x9 = ((uint32_t)(arg1[39]) << 24); + x10 = ((uint32_t)(arg1[38]) << 16); + x11 = ((uint32_t)(arg1[37]) << 8); + x12 = (arg1[36]); + x13 = ((uint32_t)(arg1[35]) << 24); + x14 = ((uint32_t)(arg1[34]) << 16); + x15 = ((uint32_t)(arg1[33]) << 8); + x16 = (arg1[32]); + x17 = ((uint32_t)(arg1[31]) << 24); + x18 = ((uint32_t)(arg1[30]) << 16); + x19 = ((uint32_t)(arg1[29]) << 8); + x20 = (arg1[28]); + x21 = ((uint32_t)(arg1[27]) << 24); + x22 = ((uint32_t)(arg1[26]) << 16); + x23 = ((uint32_t)(arg1[25]) << 8); + x24 = (arg1[24]); + x25 = ((uint32_t)(arg1[23]) << 24); + x26 = ((uint32_t)(arg1[22]) << 16); + x27 = ((uint32_t)(arg1[21]) << 8); + x28 = (arg1[20]); + x29 = ((uint32_t)(arg1[19]) << 24); + x30 = ((uint32_t)(arg1[18]) << 16); + x31 = ((uint32_t)(arg1[17]) << 8); + x32 = (arg1[16]); + x33 = ((uint32_t)(arg1[15]) << 24); + x34 = ((uint32_t)(arg1[14]) << 16); + x35 = ((uint32_t)(arg1[13]) << 8); + x36 = (arg1[12]); + x37 = ((uint32_t)(arg1[11]) << 24); + x38 = ((uint32_t)(arg1[10]) << 16); + x39 = ((uint32_t)(arg1[9]) << 8); + x40 = (arg1[8]); + x41 = ((uint32_t)(arg1[7]) << 24); + x42 = ((uint32_t)(arg1[6]) << 16); + x43 = ((uint32_t)(arg1[5]) << 8); + x44 = (arg1[4]); + x45 = ((uint32_t)(arg1[3]) << 24); + x46 = ((uint32_t)(arg1[2]) << 16); + x47 = ((uint32_t)(arg1[1]) << 8); + x48 = (arg1[0]); + x49 = (x47 + (uint32_t)x48); + x50 = (x46 + x49); + x51 = (x45 + x50); + x52 = (x43 + (uint32_t)x44); + x53 = (x42 + x52); + x54 = (x41 + x53); + x55 = (x39 + (uint32_t)x40); + x56 = (x38 + x55); + x57 = (x37 + x56); + x58 = (x35 + (uint32_t)x36); + x59 = (x34 + x58); + x60 = (x33 + x59); + x61 = (x31 + (uint32_t)x32); + x62 = (x30 + x61); + x63 = (x29 + x62); + x64 = (x27 + (uint32_t)x28); + x65 = (x26 + x64); + x66 = (x25 + x65); + x67 = (x23 + (uint32_t)x24); + x68 = (x22 + x67); + x69 = (x21 + x68); + x70 = (x19 + (uint32_t)x20); + x71 = (x18 + x70); + x72 = (x17 + x71); + x73 = (x15 + (uint32_t)x16); + x74 = (x14 + x73); + x75 = (x13 + x74); + x76 = (x11 + (uint32_t)x12); + x77 = (x10 + x76); + x78 = (x9 + x77); + x79 = (x7 + (uint32_t)x8); + x80 = (x6 + x79); + x81 = (x5 + x80); + x82 = (x3 + (uint32_t)x4); + x83 = (x2 + x82); + x84 = (x1 + x83); + out1[0] = x51; + out1[1] = x54; + out1[2] = x57; + out1[3] = x60; + out1[4] = x63; + out1[5] = x66; + out1[6] = x69; + out1[7] = x72; + out1[8] = x75; + out1[9] = x78; + out1[10] = x81; + out1[11] = x84; +} + +/* + * The function fiat_p384_set_one returns the field element one in the Montgomery domain. + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p384_set_one(uint32_t out1[12]) { + out1[0] = 0x1; + out1[1] = UINT32_C(0xffffffff); + out1[2] = UINT32_C(0xffffffff); + out1[3] = 0x0; + out1[4] = 0x1; + out1[5] = 0x0; + out1[6] = 0x0; + out1[7] = 0x0; + out1[8] = 0x0; + out1[9] = 0x0; + out1[10] = 0x0; + out1[11] = 0x0; +} + +/* + * The function fiat_p384_msat returns the saturated represtation of the prime modulus. + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p384_msat(uint32_t out1[13]) { + out1[0] = UINT32_C(0xffffffff); + out1[1] = 0x0; + out1[2] = 0x0; + out1[3] = UINT32_C(0xffffffff); + out1[4] = UINT32_C(0xfffffffe); + out1[5] = UINT32_C(0xffffffff); + out1[6] = UINT32_C(0xffffffff); + out1[7] = UINT32_C(0xffffffff); + out1[8] = UINT32_C(0xffffffff); + out1[9] = UINT32_C(0xffffffff); + out1[10] = UINT32_C(0xffffffff); + out1[11] = UINT32_C(0xffffffff); + out1[12] = 0x0; +} + +/* + * The function fiat_p384_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if (log2 m) + 1 < 46 then ⌊(49 * ((log2 m) + 1) + 80) / 17⌋ else ⌊(49 * ((log2 m) + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p384_divstep_precomp(uint32_t out1[12]) { + out1[0] = UINT32_C(0xfff18fff); + out1[1] = UINT32_C(0xfff69400); + out1[2] = UINT32_C(0xffffd3ff); + out1[3] = UINT32_C(0x2b7fe); + out1[4] = UINT32_C(0xfffe97ff); + out1[5] = UINT32_C(0xfffedbff); + out1[6] = UINT16_C(0x2fff); + out1[7] = UINT32_C(0x28400); + out1[8] = UINT32_C(0x50400); + out1[9] = UINT32_C(0x60400); + out1[10] = UINT32_C(0x38000); + out1[11] = UINT32_C(0xfffc4800); +} + +/* + * The function fiat_p384_divstep computes a divstep. + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg4: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg5: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out4: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out5: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p384_divstep(uint32_t* out1, uint32_t out2[13], uint32_t out3[13], uint32_t out4[12], uint32_t out5[12], uint32_t arg1, const uint32_t arg2[13], const uint32_t arg3[13], const uint32_t arg4[12], const uint32_t arg5[12]) { + uint32_t x1; + fiat_p384_uint1 x2; + fiat_p384_uint1 x3; + uint32_t x4; + fiat_p384_uint1 x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + fiat_p384_uint1 x21; + uint32_t x22; + fiat_p384_uint1 x23; + uint32_t x24; + fiat_p384_uint1 x25; + uint32_t x26; + fiat_p384_uint1 x27; + uint32_t x28; + fiat_p384_uint1 x29; + uint32_t x30; + fiat_p384_uint1 x31; + uint32_t x32; + fiat_p384_uint1 x33; + uint32_t x34; + fiat_p384_uint1 x35; + uint32_t x36; + fiat_p384_uint1 x37; + uint32_t x38; + fiat_p384_uint1 x39; + uint32_t x40; + fiat_p384_uint1 x41; + uint32_t x42; + fiat_p384_uint1 x43; + uint32_t x44; + fiat_p384_uint1 x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + uint32_t x52; + uint32_t x53; + uint32_t x54; + uint32_t x55; + uint32_t x56; + uint32_t x57; + uint32_t x58; + uint32_t x59; + uint32_t x60; + uint32_t x61; + uint32_t x62; + uint32_t x63; + uint32_t x64; + uint32_t x65; + uint32_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + fiat_p384_uint1 x72; + uint32_t x73; + fiat_p384_uint1 x74; + uint32_t x75; + fiat_p384_uint1 x76; + uint32_t x77; + fiat_p384_uint1 x78; + uint32_t x79; + fiat_p384_uint1 x80; + uint32_t x81; + fiat_p384_uint1 x82; + uint32_t x83; + fiat_p384_uint1 x84; + uint32_t x85; + fiat_p384_uint1 x86; + uint32_t x87; + fiat_p384_uint1 x88; + uint32_t x89; + fiat_p384_uint1 x90; + uint32_t x91; + fiat_p384_uint1 x92; + uint32_t x93; + fiat_p384_uint1 x94; + uint32_t x95; + fiat_p384_uint1 x96; + uint32_t x97; + fiat_p384_uint1 x98; + uint32_t x99; + fiat_p384_uint1 x100; + uint32_t x101; + fiat_p384_uint1 x102; + uint32_t x103; + fiat_p384_uint1 x104; + uint32_t x105; + fiat_p384_uint1 x106; + uint32_t x107; + fiat_p384_uint1 x108; + uint32_t x109; + fiat_p384_uint1 x110; + uint32_t x111; + fiat_p384_uint1 x112; + uint32_t x113; + fiat_p384_uint1 x114; + uint32_t x115; + fiat_p384_uint1 x116; + uint32_t x117; + fiat_p384_uint1 x118; + uint32_t x119; + fiat_p384_uint1 x120; + uint32_t x121; + uint32_t x122; + uint32_t x123; + uint32_t x124; + uint32_t x125; + uint32_t x126; + uint32_t x127; + uint32_t x128; + uint32_t x129; + uint32_t x130; + uint32_t x131; + uint32_t x132; + uint32_t x133; + fiat_p384_uint1 x134; + uint32_t x135; + fiat_p384_uint1 x136; + uint32_t x137; + fiat_p384_uint1 x138; + uint32_t x139; + fiat_p384_uint1 x140; + uint32_t x141; + fiat_p384_uint1 x142; + uint32_t x143; + fiat_p384_uint1 x144; + uint32_t x145; + fiat_p384_uint1 x146; + uint32_t x147; + fiat_p384_uint1 x148; + uint32_t x149; + fiat_p384_uint1 x150; + uint32_t x151; + fiat_p384_uint1 x152; + uint32_t x153; + fiat_p384_uint1 x154; + uint32_t x155; + fiat_p384_uint1 x156; + uint32_t x157; + uint32_t x158; + fiat_p384_uint1 x159; + uint32_t x160; + fiat_p384_uint1 x161; + uint32_t x162; + fiat_p384_uint1 x163; + uint32_t x164; + fiat_p384_uint1 x165; + uint32_t x166; + fiat_p384_uint1 x167; + uint32_t x168; + fiat_p384_uint1 x169; + uint32_t x170; + fiat_p384_uint1 x171; + uint32_t x172; + fiat_p384_uint1 x173; + uint32_t x174; + fiat_p384_uint1 x175; + uint32_t x176; + fiat_p384_uint1 x177; + uint32_t x178; + fiat_p384_uint1 x179; + uint32_t x180; + fiat_p384_uint1 x181; + uint32_t x182; + uint32_t x183; + uint32_t x184; + uint32_t x185; + uint32_t x186; + uint32_t x187; + uint32_t x188; + uint32_t x189; + uint32_t x190; + uint32_t x191; + uint32_t x192; + uint32_t x193; + fiat_p384_uint1 x194; + uint32_t x195; + uint32_t x196; + uint32_t x197; + uint32_t x198; + uint32_t x199; + uint32_t x200; + uint32_t x201; + uint32_t x202; + uint32_t x203; + uint32_t x204; + uint32_t x205; + uint32_t x206; + uint32_t x207; + uint32_t x208; + fiat_p384_uint1 x209; + uint32_t x210; + fiat_p384_uint1 x211; + uint32_t x212; + fiat_p384_uint1 x213; + uint32_t x214; + fiat_p384_uint1 x215; + uint32_t x216; + fiat_p384_uint1 x217; + uint32_t x218; + fiat_p384_uint1 x219; + uint32_t x220; + fiat_p384_uint1 x221; + uint32_t x222; + fiat_p384_uint1 x223; + uint32_t x224; + fiat_p384_uint1 x225; + uint32_t x226; + fiat_p384_uint1 x227; + uint32_t x228; + fiat_p384_uint1 x229; + uint32_t x230; + fiat_p384_uint1 x231; + uint32_t x232; + fiat_p384_uint1 x233; + uint32_t x234; + uint32_t x235; + uint32_t x236; + uint32_t x237; + uint32_t x238; + uint32_t x239; + uint32_t x240; + uint32_t x241; + uint32_t x242; + uint32_t x243; + uint32_t x244; + uint32_t x245; + uint32_t x246; + fiat_p384_uint1 x247; + uint32_t x248; + fiat_p384_uint1 x249; + uint32_t x250; + fiat_p384_uint1 x251; + uint32_t x252; + fiat_p384_uint1 x253; + uint32_t x254; + fiat_p384_uint1 x255; + uint32_t x256; + fiat_p384_uint1 x257; + uint32_t x258; + fiat_p384_uint1 x259; + uint32_t x260; + fiat_p384_uint1 x261; + uint32_t x262; + fiat_p384_uint1 x263; + uint32_t x264; + fiat_p384_uint1 x265; + uint32_t x266; + fiat_p384_uint1 x267; + uint32_t x268; + fiat_p384_uint1 x269; + uint32_t x270; + fiat_p384_uint1 x271; + uint32_t x272; + fiat_p384_uint1 x273; + uint32_t x274; + fiat_p384_uint1 x275; + uint32_t x276; + fiat_p384_uint1 x277; + uint32_t x278; + fiat_p384_uint1 x279; + uint32_t x280; + fiat_p384_uint1 x281; + uint32_t x282; + fiat_p384_uint1 x283; + uint32_t x284; + fiat_p384_uint1 x285; + uint32_t x286; + fiat_p384_uint1 x287; + uint32_t x288; + fiat_p384_uint1 x289; + uint32_t x290; + fiat_p384_uint1 x291; + uint32_t x292; + fiat_p384_uint1 x293; + uint32_t x294; + fiat_p384_uint1 x295; + uint32_t x296; + fiat_p384_uint1 x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + uint32_t x303; + uint32_t x304; + uint32_t x305; + uint32_t x306; + uint32_t x307; + uint32_t x308; + uint32_t x309; + uint32_t x310; + uint32_t x311; + uint32_t x312; + uint32_t x313; + uint32_t x314; + uint32_t x315; + uint32_t x316; + uint32_t x317; + uint32_t x318; + uint32_t x319; + uint32_t x320; + uint32_t x321; + uint32_t x322; + uint32_t x323; + uint32_t x324; + uint32_t x325; + uint32_t x326; + uint32_t x327; + uint32_t x328; + uint32_t x329; + uint32_t x330; + uint32_t x331; + uint32_t x332; + uint32_t x333; + uint32_t x334; + fiat_p384_addcarryx_u32(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_p384_uint1)((fiat_p384_uint1)(x1 >> 31) & (fiat_p384_uint1)((arg3[0]) & 0x1)); + fiat_p384_addcarryx_u32(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_p384_cmovznz_u32(&x6, x3, arg1, x4); + fiat_p384_cmovznz_u32(&x7, x3, (arg2[0]), (arg3[0])); + fiat_p384_cmovznz_u32(&x8, x3, (arg2[1]), (arg3[1])); + fiat_p384_cmovznz_u32(&x9, x3, (arg2[2]), (arg3[2])); + fiat_p384_cmovznz_u32(&x10, x3, (arg2[3]), (arg3[3])); + fiat_p384_cmovznz_u32(&x11, x3, (arg2[4]), (arg3[4])); + fiat_p384_cmovznz_u32(&x12, x3, (arg2[5]), (arg3[5])); + fiat_p384_cmovznz_u32(&x13, x3, (arg2[6]), (arg3[6])); + fiat_p384_cmovznz_u32(&x14, x3, (arg2[7]), (arg3[7])); + fiat_p384_cmovznz_u32(&x15, x3, (arg2[8]), (arg3[8])); + fiat_p384_cmovznz_u32(&x16, x3, (arg2[9]), (arg3[9])); + fiat_p384_cmovznz_u32(&x17, x3, (arg2[10]), (arg3[10])); + fiat_p384_cmovznz_u32(&x18, x3, (arg2[11]), (arg3[11])); + fiat_p384_cmovznz_u32(&x19, x3, (arg2[12]), (arg3[12])); + fiat_p384_addcarryx_u32(&x20, &x21, 0x0, 0x1, (~(arg2[0]))); + fiat_p384_addcarryx_u32(&x22, &x23, x21, 0x0, (~(arg2[1]))); + fiat_p384_addcarryx_u32(&x24, &x25, x23, 0x0, (~(arg2[2]))); + fiat_p384_addcarryx_u32(&x26, &x27, x25, 0x0, (~(arg2[3]))); + fiat_p384_addcarryx_u32(&x28, &x29, x27, 0x0, (~(arg2[4]))); + fiat_p384_addcarryx_u32(&x30, &x31, x29, 0x0, (~(arg2[5]))); + fiat_p384_addcarryx_u32(&x32, &x33, x31, 0x0, (~(arg2[6]))); + fiat_p384_addcarryx_u32(&x34, &x35, x33, 0x0, (~(arg2[7]))); + fiat_p384_addcarryx_u32(&x36, &x37, x35, 0x0, (~(arg2[8]))); + fiat_p384_addcarryx_u32(&x38, &x39, x37, 0x0, (~(arg2[9]))); + fiat_p384_addcarryx_u32(&x40, &x41, x39, 0x0, (~(arg2[10]))); + fiat_p384_addcarryx_u32(&x42, &x43, x41, 0x0, (~(arg2[11]))); + fiat_p384_addcarryx_u32(&x44, &x45, x43, 0x0, (~(arg2[12]))); + fiat_p384_cmovznz_u32(&x46, x3, (arg3[0]), x20); + fiat_p384_cmovznz_u32(&x47, x3, (arg3[1]), x22); + fiat_p384_cmovznz_u32(&x48, x3, (arg3[2]), x24); + fiat_p384_cmovznz_u32(&x49, x3, (arg3[3]), x26); + fiat_p384_cmovznz_u32(&x50, x3, (arg3[4]), x28); + fiat_p384_cmovznz_u32(&x51, x3, (arg3[5]), x30); + fiat_p384_cmovznz_u32(&x52, x3, (arg3[6]), x32); + fiat_p384_cmovznz_u32(&x53, x3, (arg3[7]), x34); + fiat_p384_cmovznz_u32(&x54, x3, (arg3[8]), x36); + fiat_p384_cmovznz_u32(&x55, x3, (arg3[9]), x38); + fiat_p384_cmovznz_u32(&x56, x3, (arg3[10]), x40); + fiat_p384_cmovznz_u32(&x57, x3, (arg3[11]), x42); + fiat_p384_cmovznz_u32(&x58, x3, (arg3[12]), x44); + fiat_p384_cmovznz_u32(&x59, x3, (arg4[0]), (arg5[0])); + fiat_p384_cmovznz_u32(&x60, x3, (arg4[1]), (arg5[1])); + fiat_p384_cmovznz_u32(&x61, x3, (arg4[2]), (arg5[2])); + fiat_p384_cmovznz_u32(&x62, x3, (arg4[3]), (arg5[3])); + fiat_p384_cmovznz_u32(&x63, x3, (arg4[4]), (arg5[4])); + fiat_p384_cmovznz_u32(&x64, x3, (arg4[5]), (arg5[5])); + fiat_p384_cmovznz_u32(&x65, x3, (arg4[6]), (arg5[6])); + fiat_p384_cmovznz_u32(&x66, x3, (arg4[7]), (arg5[7])); + fiat_p384_cmovznz_u32(&x67, x3, (arg4[8]), (arg5[8])); + fiat_p384_cmovznz_u32(&x68, x3, (arg4[9]), (arg5[9])); + fiat_p384_cmovznz_u32(&x69, x3, (arg4[10]), (arg5[10])); + fiat_p384_cmovznz_u32(&x70, x3, (arg4[11]), (arg5[11])); + fiat_p384_addcarryx_u32(&x71, &x72, 0x0, x59, x59); + fiat_p384_addcarryx_u32(&x73, &x74, x72, x60, x60); + fiat_p384_addcarryx_u32(&x75, &x76, x74, x61, x61); + fiat_p384_addcarryx_u32(&x77, &x78, x76, x62, x62); + fiat_p384_addcarryx_u32(&x79, &x80, x78, x63, x63); + fiat_p384_addcarryx_u32(&x81, &x82, x80, x64, x64); + fiat_p384_addcarryx_u32(&x83, &x84, x82, x65, x65); + fiat_p384_addcarryx_u32(&x85, &x86, x84, x66, x66); + fiat_p384_addcarryx_u32(&x87, &x88, x86, x67, x67); + fiat_p384_addcarryx_u32(&x89, &x90, x88, x68, x68); + fiat_p384_addcarryx_u32(&x91, &x92, x90, x69, x69); + fiat_p384_addcarryx_u32(&x93, &x94, x92, x70, x70); + fiat_p384_subborrowx_u32(&x95, &x96, 0x0, x71, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x97, &x98, x96, x73, 0x0); + fiat_p384_subborrowx_u32(&x99, &x100, x98, x75, 0x0); + fiat_p384_subborrowx_u32(&x101, &x102, x100, x77, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x103, &x104, x102, x79, UINT32_C(0xfffffffe)); + fiat_p384_subborrowx_u32(&x105, &x106, x104, x81, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x107, &x108, x106, x83, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x109, &x110, x108, x85, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x111, &x112, x110, x87, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x113, &x114, x112, x89, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x115, &x116, x114, x91, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x117, &x118, x116, x93, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x119, &x120, x118, x94, 0x0); + x121 = (arg4[11]); + x122 = (arg4[10]); + x123 = (arg4[9]); + x124 = (arg4[8]); + x125 = (arg4[7]); + x126 = (arg4[6]); + x127 = (arg4[5]); + x128 = (arg4[4]); + x129 = (arg4[3]); + x130 = (arg4[2]); + x131 = (arg4[1]); + x132 = (arg4[0]); + fiat_p384_subborrowx_u32(&x133, &x134, 0x0, 0x0, x132); + fiat_p384_subborrowx_u32(&x135, &x136, x134, 0x0, x131); + fiat_p384_subborrowx_u32(&x137, &x138, x136, 0x0, x130); + fiat_p384_subborrowx_u32(&x139, &x140, x138, 0x0, x129); + fiat_p384_subborrowx_u32(&x141, &x142, x140, 0x0, x128); + fiat_p384_subborrowx_u32(&x143, &x144, x142, 0x0, x127); + fiat_p384_subborrowx_u32(&x145, &x146, x144, 0x0, x126); + fiat_p384_subborrowx_u32(&x147, &x148, x146, 0x0, x125); + fiat_p384_subborrowx_u32(&x149, &x150, x148, 0x0, x124); + fiat_p384_subborrowx_u32(&x151, &x152, x150, 0x0, x123); + fiat_p384_subborrowx_u32(&x153, &x154, x152, 0x0, x122); + fiat_p384_subborrowx_u32(&x155, &x156, x154, 0x0, x121); + fiat_p384_cmovznz_u32(&x157, x156, 0x0, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u32(&x158, &x159, 0x0, x133, x157); + fiat_p384_addcarryx_u32(&x160, &x161, x159, x135, 0x0); + fiat_p384_addcarryx_u32(&x162, &x163, x161, x137, 0x0); + fiat_p384_addcarryx_u32(&x164, &x165, x163, x139, x157); + fiat_p384_addcarryx_u32(&x166, &x167, x165, x141, (x157 & UINT32_C(0xfffffffe))); + fiat_p384_addcarryx_u32(&x168, &x169, x167, x143, x157); + fiat_p384_addcarryx_u32(&x170, &x171, x169, x145, x157); + fiat_p384_addcarryx_u32(&x172, &x173, x171, x147, x157); + fiat_p384_addcarryx_u32(&x174, &x175, x173, x149, x157); + fiat_p384_addcarryx_u32(&x176, &x177, x175, x151, x157); + fiat_p384_addcarryx_u32(&x178, &x179, x177, x153, x157); + fiat_p384_addcarryx_u32(&x180, &x181, x179, x155, x157); + fiat_p384_cmovznz_u32(&x182, x3, (arg5[0]), x158); + fiat_p384_cmovznz_u32(&x183, x3, (arg5[1]), x160); + fiat_p384_cmovznz_u32(&x184, x3, (arg5[2]), x162); + fiat_p384_cmovznz_u32(&x185, x3, (arg5[3]), x164); + fiat_p384_cmovznz_u32(&x186, x3, (arg5[4]), x166); + fiat_p384_cmovznz_u32(&x187, x3, (arg5[5]), x168); + fiat_p384_cmovznz_u32(&x188, x3, (arg5[6]), x170); + fiat_p384_cmovznz_u32(&x189, x3, (arg5[7]), x172); + fiat_p384_cmovznz_u32(&x190, x3, (arg5[8]), x174); + fiat_p384_cmovznz_u32(&x191, x3, (arg5[9]), x176); + fiat_p384_cmovznz_u32(&x192, x3, (arg5[10]), x178); + fiat_p384_cmovznz_u32(&x193, x3, (arg5[11]), x180); + x194 = (fiat_p384_uint1)(x46 & 0x1); + fiat_p384_cmovznz_u32(&x195, x194, 0x0, x7); + fiat_p384_cmovznz_u32(&x196, x194, 0x0, x8); + fiat_p384_cmovznz_u32(&x197, x194, 0x0, x9); + fiat_p384_cmovznz_u32(&x198, x194, 0x0, x10); + fiat_p384_cmovznz_u32(&x199, x194, 0x0, x11); + fiat_p384_cmovznz_u32(&x200, x194, 0x0, x12); + fiat_p384_cmovznz_u32(&x201, x194, 0x0, x13); + fiat_p384_cmovznz_u32(&x202, x194, 0x0, x14); + fiat_p384_cmovznz_u32(&x203, x194, 0x0, x15); + fiat_p384_cmovznz_u32(&x204, x194, 0x0, x16); + fiat_p384_cmovznz_u32(&x205, x194, 0x0, x17); + fiat_p384_cmovznz_u32(&x206, x194, 0x0, x18); + fiat_p384_cmovznz_u32(&x207, x194, 0x0, x19); + fiat_p384_addcarryx_u32(&x208, &x209, 0x0, x46, x195); + fiat_p384_addcarryx_u32(&x210, &x211, x209, x47, x196); + fiat_p384_addcarryx_u32(&x212, &x213, x211, x48, x197); + fiat_p384_addcarryx_u32(&x214, &x215, x213, x49, x198); + fiat_p384_addcarryx_u32(&x216, &x217, x215, x50, x199); + fiat_p384_addcarryx_u32(&x218, &x219, x217, x51, x200); + fiat_p384_addcarryx_u32(&x220, &x221, x219, x52, x201); + fiat_p384_addcarryx_u32(&x222, &x223, x221, x53, x202); + fiat_p384_addcarryx_u32(&x224, &x225, x223, x54, x203); + fiat_p384_addcarryx_u32(&x226, &x227, x225, x55, x204); + fiat_p384_addcarryx_u32(&x228, &x229, x227, x56, x205); + fiat_p384_addcarryx_u32(&x230, &x231, x229, x57, x206); + fiat_p384_addcarryx_u32(&x232, &x233, x231, x58, x207); + fiat_p384_cmovznz_u32(&x234, x194, 0x0, x59); + fiat_p384_cmovznz_u32(&x235, x194, 0x0, x60); + fiat_p384_cmovznz_u32(&x236, x194, 0x0, x61); + fiat_p384_cmovznz_u32(&x237, x194, 0x0, x62); + fiat_p384_cmovznz_u32(&x238, x194, 0x0, x63); + fiat_p384_cmovznz_u32(&x239, x194, 0x0, x64); + fiat_p384_cmovznz_u32(&x240, x194, 0x0, x65); + fiat_p384_cmovznz_u32(&x241, x194, 0x0, x66); + fiat_p384_cmovznz_u32(&x242, x194, 0x0, x67); + fiat_p384_cmovznz_u32(&x243, x194, 0x0, x68); + fiat_p384_cmovznz_u32(&x244, x194, 0x0, x69); + fiat_p384_cmovznz_u32(&x245, x194, 0x0, x70); + fiat_p384_addcarryx_u32(&x246, &x247, 0x0, x182, x234); + fiat_p384_addcarryx_u32(&x248, &x249, x247, x183, x235); + fiat_p384_addcarryx_u32(&x250, &x251, x249, x184, x236); + fiat_p384_addcarryx_u32(&x252, &x253, x251, x185, x237); + fiat_p384_addcarryx_u32(&x254, &x255, x253, x186, x238); + fiat_p384_addcarryx_u32(&x256, &x257, x255, x187, x239); + fiat_p384_addcarryx_u32(&x258, &x259, x257, x188, x240); + fiat_p384_addcarryx_u32(&x260, &x261, x259, x189, x241); + fiat_p384_addcarryx_u32(&x262, &x263, x261, x190, x242); + fiat_p384_addcarryx_u32(&x264, &x265, x263, x191, x243); + fiat_p384_addcarryx_u32(&x266, &x267, x265, x192, x244); + fiat_p384_addcarryx_u32(&x268, &x269, x267, x193, x245); + fiat_p384_subborrowx_u32(&x270, &x271, 0x0, x246, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x272, &x273, x271, x248, 0x0); + fiat_p384_subborrowx_u32(&x274, &x275, x273, x250, 0x0); + fiat_p384_subborrowx_u32(&x276, &x277, x275, x252, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x278, &x279, x277, x254, UINT32_C(0xfffffffe)); + fiat_p384_subborrowx_u32(&x280, &x281, x279, x256, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x282, &x283, x281, x258, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x284, &x285, x283, x260, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x286, &x287, x285, x262, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x288, &x289, x287, x264, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x290, &x291, x289, x266, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x292, &x293, x291, x268, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u32(&x294, &x295, x293, x269, 0x0); + fiat_p384_addcarryx_u32(&x296, &x297, 0x0, x6, 0x1); + x298 = ((x208 >> 1) | ((x210 << 31) & UINT32_C(0xffffffff))); + x299 = ((x210 >> 1) | ((x212 << 31) & UINT32_C(0xffffffff))); + x300 = ((x212 >> 1) | ((x214 << 31) & UINT32_C(0xffffffff))); + x301 = ((x214 >> 1) | ((x216 << 31) & UINT32_C(0xffffffff))); + x302 = ((x216 >> 1) | ((x218 << 31) & UINT32_C(0xffffffff))); + x303 = ((x218 >> 1) | ((x220 << 31) & UINT32_C(0xffffffff))); + x304 = ((x220 >> 1) | ((x222 << 31) & UINT32_C(0xffffffff))); + x305 = ((x222 >> 1) | ((x224 << 31) & UINT32_C(0xffffffff))); + x306 = ((x224 >> 1) | ((x226 << 31) & UINT32_C(0xffffffff))); + x307 = ((x226 >> 1) | ((x228 << 31) & UINT32_C(0xffffffff))); + x308 = ((x228 >> 1) | ((x230 << 31) & UINT32_C(0xffffffff))); + x309 = ((x230 >> 1) | ((x232 << 31) & UINT32_C(0xffffffff))); + x310 = ((x232 & UINT32_C(0x80000000)) | (x232 >> 1)); + fiat_p384_cmovznz_u32(&x311, x120, x95, x71); + fiat_p384_cmovznz_u32(&x312, x120, x97, x73); + fiat_p384_cmovznz_u32(&x313, x120, x99, x75); + fiat_p384_cmovznz_u32(&x314, x120, x101, x77); + fiat_p384_cmovznz_u32(&x315, x120, x103, x79); + fiat_p384_cmovznz_u32(&x316, x120, x105, x81); + fiat_p384_cmovznz_u32(&x317, x120, x107, x83); + fiat_p384_cmovznz_u32(&x318, x120, x109, x85); + fiat_p384_cmovznz_u32(&x319, x120, x111, x87); + fiat_p384_cmovznz_u32(&x320, x120, x113, x89); + fiat_p384_cmovznz_u32(&x321, x120, x115, x91); + fiat_p384_cmovznz_u32(&x322, x120, x117, x93); + fiat_p384_cmovznz_u32(&x323, x295, x270, x246); + fiat_p384_cmovznz_u32(&x324, x295, x272, x248); + fiat_p384_cmovznz_u32(&x325, x295, x274, x250); + fiat_p384_cmovznz_u32(&x326, x295, x276, x252); + fiat_p384_cmovznz_u32(&x327, x295, x278, x254); + fiat_p384_cmovznz_u32(&x328, x295, x280, x256); + fiat_p384_cmovznz_u32(&x329, x295, x282, x258); + fiat_p384_cmovznz_u32(&x330, x295, x284, x260); + fiat_p384_cmovznz_u32(&x331, x295, x286, x262); + fiat_p384_cmovznz_u32(&x332, x295, x288, x264); + fiat_p384_cmovznz_u32(&x333, x295, x290, x266); + fiat_p384_cmovznz_u32(&x334, x295, x292, x268); + *out1 = x296; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out2[5] = x12; + out2[6] = x13; + out2[7] = x14; + out2[8] = x15; + out2[9] = x16; + out2[10] = x17; + out2[11] = x18; + out2[12] = x19; + out3[0] = x298; + out3[1] = x299; + out3[2] = x300; + out3[3] = x301; + out3[4] = x302; + out3[5] = x303; + out3[6] = x304; + out3[7] = x305; + out3[8] = x306; + out3[9] = x307; + out3[10] = x308; + out3[11] = x309; + out3[12] = x310; + out4[0] = x311; + out4[1] = x312; + out4[2] = x313; + out4[3] = x314; + out4[4] = x315; + out4[5] = x316; + out4[6] = x317; + out4[7] = x318; + out4[8] = x319; + out4[9] = x320; + out4[10] = x321; + out4[11] = x322; + out5[0] = x323; + out5[1] = x324; + out5[2] = x325; + out5[3] = x326; + out5[4] = x327; + out5[5] = x328; + out5[6] = x329; + out5[7] = x330; + out5[8] = x331; + out5[9] = x332; + out5[10] = x333; + out5[11] = x334; +} + diff --git a/ec/native/p384_64.h b/ec/native/p384_64.h new file mode 100644 index 00000000..5df0d801 --- /dev/null +++ b/ec/native/p384_64.h @@ -0,0 +1,3876 @@ +/* Autogenerated: '../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery' --static --use-value-barrier p384 64 '2^384 - 2^128 - 2^96 + 2^32 - 1' */ +/* curve description: p384 */ +/* machine_wordsize = 64 (from "64") */ +/* requested operations: (all) */ +/* m = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff (from "2^384 - 2^128 - 2^96 + 2^32 - 1") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) + (z[4] << 256) + (z[5] << 0x140) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) + (z[32] << 256) + (z[33] << 0x108) + (z[34] << 0x110) + (z[35] << 0x118) + (z[36] << 0x120) + (z[37] << 0x128) + (z[38] << 0x130) + (z[39] << 0x138) + (z[40] << 0x140) + (z[41] << 0x148) + (z[42] << 0x150) + (z[43] << 0x158) + (z[44] << 0x160) + (z[45] << 0x168) + (z[46] << 0x170) + (z[47] << 0x178) */ + +#include +typedef unsigned char fiat_p384_uint1; +typedef signed char fiat_p384_int1; +#ifdef __GNUC__ +# define FIAT_P384_FIAT_EXTENSION __extension__ +#else +# define FIAT_P384_FIAT_EXTENSION +#endif + +FIAT_P384_FIAT_EXTENSION typedef signed __int128 fiat_p384_int128; +FIAT_P384_FIAT_EXTENSION typedef unsigned __int128 fiat_p384_uint128; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_P384_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint64_t fiat_p384_value_barrier_u64(uint64_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_p384_value_barrier_u64(x) (x) +#endif + + +/* + * The function fiat_p384_addcarryx_u64 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^64 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p384_addcarryx_u64(uint64_t* out1, fiat_p384_uint1* out2, fiat_p384_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_p384_uint128 x1; + uint64_t x2; + fiat_p384_uint1 x3; + x1 = ((arg1 + (fiat_p384_uint128)arg2) + arg3); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (fiat_p384_uint1)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p384_subborrowx_u64 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^64 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p384_subborrowx_u64(uint64_t* out1, fiat_p384_uint1* out2, fiat_p384_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_p384_int128 x1; + fiat_p384_int1 x2; + uint64_t x3; + x1 = ((arg2 - (fiat_p384_int128)arg1) - arg3); + x2 = (fiat_p384_int1)(x1 >> 64); + x3 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + *out1 = x3; + *out2 = (fiat_p384_uint1)(0x0 - x2); +} + +/* + * The function fiat_p384_mulx_u64 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^64 + * out2 = ⌊arg1 * arg2 / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_p384_mulx_u64(uint64_t* out1, uint64_t* out2, uint64_t arg1, uint64_t arg2) { + fiat_p384_uint128 x1; + uint64_t x2; + uint64_t x3; + x1 = ((fiat_p384_uint128)arg1 * arg2); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (uint64_t)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p384_cmovznz_u64 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_p384_cmovznz_u64(uint64_t* out1, fiat_p384_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_p384_uint1 x1; + uint64_t x2; + uint64_t x3; + x1 = (!(!arg1)); + x2 = ((fiat_p384_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); + x3 = ((fiat_p384_value_barrier_u64(x2) & arg3) | (fiat_p384_value_barrier_u64((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_p384_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p384_mul(uint64_t out1[6], const uint64_t arg1[6], const uint64_t arg2[6]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + fiat_p384_uint1 x20; + uint64_t x21; + fiat_p384_uint1 x22; + uint64_t x23; + fiat_p384_uint1 x24; + uint64_t x25; + fiat_p384_uint1 x26; + uint64_t x27; + fiat_p384_uint1 x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint64_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + fiat_p384_uint1 x45; + uint64_t x46; + fiat_p384_uint1 x47; + uint64_t x48; + fiat_p384_uint1 x49; + uint64_t x50; + fiat_p384_uint1 x51; + uint64_t x52; + fiat_p384_uint1 x53; + uint64_t x54; + uint64_t x55; + fiat_p384_uint1 x56; + uint64_t x57; + fiat_p384_uint1 x58; + uint64_t x59; + fiat_p384_uint1 x60; + uint64_t x61; + fiat_p384_uint1 x62; + uint64_t x63; + fiat_p384_uint1 x64; + uint64_t x65; + fiat_p384_uint1 x66; + uint64_t x67; + fiat_p384_uint1 x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + uint64_t x81; + fiat_p384_uint1 x82; + uint64_t x83; + fiat_p384_uint1 x84; + uint64_t x85; + fiat_p384_uint1 x86; + uint64_t x87; + fiat_p384_uint1 x88; + uint64_t x89; + fiat_p384_uint1 x90; + uint64_t x91; + uint64_t x92; + fiat_p384_uint1 x93; + uint64_t x94; + fiat_p384_uint1 x95; + uint64_t x96; + fiat_p384_uint1 x97; + uint64_t x98; + fiat_p384_uint1 x99; + uint64_t x100; + fiat_p384_uint1 x101; + uint64_t x102; + fiat_p384_uint1 x103; + uint64_t x104; + fiat_p384_uint1 x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + uint64_t x109; + uint64_t x110; + uint64_t x111; + uint64_t x112; + uint64_t x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + fiat_p384_uint1 x121; + uint64_t x122; + fiat_p384_uint1 x123; + uint64_t x124; + fiat_p384_uint1 x125; + uint64_t x126; + fiat_p384_uint1 x127; + uint64_t x128; + fiat_p384_uint1 x129; + uint64_t x130; + uint64_t x131; + fiat_p384_uint1 x132; + uint64_t x133; + fiat_p384_uint1 x134; + uint64_t x135; + fiat_p384_uint1 x136; + uint64_t x137; + fiat_p384_uint1 x138; + uint64_t x139; + fiat_p384_uint1 x140; + uint64_t x141; + fiat_p384_uint1 x142; + uint64_t x143; + fiat_p384_uint1 x144; + uint64_t x145; + uint64_t x146; + uint64_t x147; + uint64_t x148; + uint64_t x149; + uint64_t x150; + uint64_t x151; + uint64_t x152; + uint64_t x153; + uint64_t x154; + uint64_t x155; + uint64_t x156; + uint64_t x157; + uint64_t x158; + fiat_p384_uint1 x159; + uint64_t x160; + fiat_p384_uint1 x161; + uint64_t x162; + fiat_p384_uint1 x163; + uint64_t x164; + fiat_p384_uint1 x165; + uint64_t x166; + fiat_p384_uint1 x167; + uint64_t x168; + uint64_t x169; + fiat_p384_uint1 x170; + uint64_t x171; + fiat_p384_uint1 x172; + uint64_t x173; + fiat_p384_uint1 x174; + uint64_t x175; + fiat_p384_uint1 x176; + uint64_t x177; + fiat_p384_uint1 x178; + uint64_t x179; + fiat_p384_uint1 x180; + uint64_t x181; + fiat_p384_uint1 x182; + uint64_t x183; + uint64_t x184; + uint64_t x185; + uint64_t x186; + uint64_t x187; + uint64_t x188; + uint64_t x189; + uint64_t x190; + uint64_t x191; + uint64_t x192; + uint64_t x193; + uint64_t x194; + uint64_t x195; + uint64_t x196; + uint64_t x197; + fiat_p384_uint1 x198; + uint64_t x199; + fiat_p384_uint1 x200; + uint64_t x201; + fiat_p384_uint1 x202; + uint64_t x203; + fiat_p384_uint1 x204; + uint64_t x205; + fiat_p384_uint1 x206; + uint64_t x207; + uint64_t x208; + fiat_p384_uint1 x209; + uint64_t x210; + fiat_p384_uint1 x211; + uint64_t x212; + fiat_p384_uint1 x213; + uint64_t x214; + fiat_p384_uint1 x215; + uint64_t x216; + fiat_p384_uint1 x217; + uint64_t x218; + fiat_p384_uint1 x219; + uint64_t x220; + fiat_p384_uint1 x221; + uint64_t x222; + uint64_t x223; + uint64_t x224; + uint64_t x225; + uint64_t x226; + uint64_t x227; + uint64_t x228; + uint64_t x229; + uint64_t x230; + uint64_t x231; + uint64_t x232; + uint64_t x233; + uint64_t x234; + uint64_t x235; + fiat_p384_uint1 x236; + uint64_t x237; + fiat_p384_uint1 x238; + uint64_t x239; + fiat_p384_uint1 x240; + uint64_t x241; + fiat_p384_uint1 x242; + uint64_t x243; + fiat_p384_uint1 x244; + uint64_t x245; + uint64_t x246; + fiat_p384_uint1 x247; + uint64_t x248; + fiat_p384_uint1 x249; + uint64_t x250; + fiat_p384_uint1 x251; + uint64_t x252; + fiat_p384_uint1 x253; + uint64_t x254; + fiat_p384_uint1 x255; + uint64_t x256; + fiat_p384_uint1 x257; + uint64_t x258; + fiat_p384_uint1 x259; + uint64_t x260; + uint64_t x261; + uint64_t x262; + uint64_t x263; + uint64_t x264; + uint64_t x265; + uint64_t x266; + uint64_t x267; + uint64_t x268; + uint64_t x269; + uint64_t x270; + uint64_t x271; + uint64_t x272; + uint64_t x273; + uint64_t x274; + fiat_p384_uint1 x275; + uint64_t x276; + fiat_p384_uint1 x277; + uint64_t x278; + fiat_p384_uint1 x279; + uint64_t x280; + fiat_p384_uint1 x281; + uint64_t x282; + fiat_p384_uint1 x283; + uint64_t x284; + uint64_t x285; + fiat_p384_uint1 x286; + uint64_t x287; + fiat_p384_uint1 x288; + uint64_t x289; + fiat_p384_uint1 x290; + uint64_t x291; + fiat_p384_uint1 x292; + uint64_t x293; + fiat_p384_uint1 x294; + uint64_t x295; + fiat_p384_uint1 x296; + uint64_t x297; + fiat_p384_uint1 x298; + uint64_t x299; + uint64_t x300; + uint64_t x301; + uint64_t x302; + uint64_t x303; + uint64_t x304; + uint64_t x305; + uint64_t x306; + uint64_t x307; + uint64_t x308; + uint64_t x309; + uint64_t x310; + uint64_t x311; + uint64_t x312; + fiat_p384_uint1 x313; + uint64_t x314; + fiat_p384_uint1 x315; + uint64_t x316; + fiat_p384_uint1 x317; + uint64_t x318; + fiat_p384_uint1 x319; + uint64_t x320; + fiat_p384_uint1 x321; + uint64_t x322; + uint64_t x323; + fiat_p384_uint1 x324; + uint64_t x325; + fiat_p384_uint1 x326; + uint64_t x327; + fiat_p384_uint1 x328; + uint64_t x329; + fiat_p384_uint1 x330; + uint64_t x331; + fiat_p384_uint1 x332; + uint64_t x333; + fiat_p384_uint1 x334; + uint64_t x335; + fiat_p384_uint1 x336; + uint64_t x337; + uint64_t x338; + uint64_t x339; + uint64_t x340; + uint64_t x341; + uint64_t x342; + uint64_t x343; + uint64_t x344; + uint64_t x345; + uint64_t x346; + uint64_t x347; + uint64_t x348; + uint64_t x349; + uint64_t x350; + uint64_t x351; + fiat_p384_uint1 x352; + uint64_t x353; + fiat_p384_uint1 x354; + uint64_t x355; + fiat_p384_uint1 x356; + uint64_t x357; + fiat_p384_uint1 x358; + uint64_t x359; + fiat_p384_uint1 x360; + uint64_t x361; + uint64_t x362; + fiat_p384_uint1 x363; + uint64_t x364; + fiat_p384_uint1 x365; + uint64_t x366; + fiat_p384_uint1 x367; + uint64_t x368; + fiat_p384_uint1 x369; + uint64_t x370; + fiat_p384_uint1 x371; + uint64_t x372; + fiat_p384_uint1 x373; + uint64_t x374; + fiat_p384_uint1 x375; + uint64_t x376; + uint64_t x377; + uint64_t x378; + uint64_t x379; + uint64_t x380; + uint64_t x381; + uint64_t x382; + uint64_t x383; + uint64_t x384; + uint64_t x385; + uint64_t x386; + uint64_t x387; + uint64_t x388; + uint64_t x389; + fiat_p384_uint1 x390; + uint64_t x391; + fiat_p384_uint1 x392; + uint64_t x393; + fiat_p384_uint1 x394; + uint64_t x395; + fiat_p384_uint1 x396; + uint64_t x397; + fiat_p384_uint1 x398; + uint64_t x399; + uint64_t x400; + fiat_p384_uint1 x401; + uint64_t x402; + fiat_p384_uint1 x403; + uint64_t x404; + fiat_p384_uint1 x405; + uint64_t x406; + fiat_p384_uint1 x407; + uint64_t x408; + fiat_p384_uint1 x409; + uint64_t x410; + fiat_p384_uint1 x411; + uint64_t x412; + fiat_p384_uint1 x413; + uint64_t x414; + uint64_t x415; + uint64_t x416; + uint64_t x417; + uint64_t x418; + uint64_t x419; + uint64_t x420; + uint64_t x421; + uint64_t x422; + uint64_t x423; + uint64_t x424; + uint64_t x425; + uint64_t x426; + uint64_t x427; + uint64_t x428; + fiat_p384_uint1 x429; + uint64_t x430; + fiat_p384_uint1 x431; + uint64_t x432; + fiat_p384_uint1 x433; + uint64_t x434; + fiat_p384_uint1 x435; + uint64_t x436; + fiat_p384_uint1 x437; + uint64_t x438; + uint64_t x439; + fiat_p384_uint1 x440; + uint64_t x441; + fiat_p384_uint1 x442; + uint64_t x443; + fiat_p384_uint1 x444; + uint64_t x445; + fiat_p384_uint1 x446; + uint64_t x447; + fiat_p384_uint1 x448; + uint64_t x449; + fiat_p384_uint1 x450; + uint64_t x451; + fiat_p384_uint1 x452; + uint64_t x453; + uint64_t x454; + fiat_p384_uint1 x455; + uint64_t x456; + fiat_p384_uint1 x457; + uint64_t x458; + fiat_p384_uint1 x459; + uint64_t x460; + fiat_p384_uint1 x461; + uint64_t x462; + fiat_p384_uint1 x463; + uint64_t x464; + fiat_p384_uint1 x465; + uint64_t x466; + fiat_p384_uint1 x467; + uint64_t x468; + uint64_t x469; + uint64_t x470; + uint64_t x471; + uint64_t x472; + uint64_t x473; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[0]); + fiat_p384_mulx_u64(&x7, &x8, x6, (arg2[5])); + fiat_p384_mulx_u64(&x9, &x10, x6, (arg2[4])); + fiat_p384_mulx_u64(&x11, &x12, x6, (arg2[3])); + fiat_p384_mulx_u64(&x13, &x14, x6, (arg2[2])); + fiat_p384_mulx_u64(&x15, &x16, x6, (arg2[1])); + fiat_p384_mulx_u64(&x17, &x18, x6, (arg2[0])); + fiat_p384_addcarryx_u64(&x19, &x20, 0x0, x18, x15); + fiat_p384_addcarryx_u64(&x21, &x22, x20, x16, x13); + fiat_p384_addcarryx_u64(&x23, &x24, x22, x14, x11); + fiat_p384_addcarryx_u64(&x25, &x26, x24, x12, x9); + fiat_p384_addcarryx_u64(&x27, &x28, x26, x10, x7); + x29 = (x28 + x8); + fiat_p384_mulx_u64(&x30, &x31, x17, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x32, &x33, x30, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x34, &x35, x30, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x36, &x37, x30, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x38, &x39, x30, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x40, &x41, x30, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x42, &x43, x30, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x44, &x45, 0x0, x43, x40); + fiat_p384_addcarryx_u64(&x46, &x47, x45, x41, x38); + fiat_p384_addcarryx_u64(&x48, &x49, x47, x39, x36); + fiat_p384_addcarryx_u64(&x50, &x51, x49, x37, x34); + fiat_p384_addcarryx_u64(&x52, &x53, x51, x35, x32); + x54 = (x53 + x33); + fiat_p384_addcarryx_u64(&x55, &x56, 0x0, x17, x42); + fiat_p384_addcarryx_u64(&x57, &x58, x56, x19, x44); + fiat_p384_addcarryx_u64(&x59, &x60, x58, x21, x46); + fiat_p384_addcarryx_u64(&x61, &x62, x60, x23, x48); + fiat_p384_addcarryx_u64(&x63, &x64, x62, x25, x50); + fiat_p384_addcarryx_u64(&x65, &x66, x64, x27, x52); + fiat_p384_addcarryx_u64(&x67, &x68, x66, x29, x54); + fiat_p384_mulx_u64(&x69, &x70, x1, (arg2[5])); + fiat_p384_mulx_u64(&x71, &x72, x1, (arg2[4])); + fiat_p384_mulx_u64(&x73, &x74, x1, (arg2[3])); + fiat_p384_mulx_u64(&x75, &x76, x1, (arg2[2])); + fiat_p384_mulx_u64(&x77, &x78, x1, (arg2[1])); + fiat_p384_mulx_u64(&x79, &x80, x1, (arg2[0])); + fiat_p384_addcarryx_u64(&x81, &x82, 0x0, x80, x77); + fiat_p384_addcarryx_u64(&x83, &x84, x82, x78, x75); + fiat_p384_addcarryx_u64(&x85, &x86, x84, x76, x73); + fiat_p384_addcarryx_u64(&x87, &x88, x86, x74, x71); + fiat_p384_addcarryx_u64(&x89, &x90, x88, x72, x69); + x91 = (x90 + x70); + fiat_p384_addcarryx_u64(&x92, &x93, 0x0, x57, x79); + fiat_p384_addcarryx_u64(&x94, &x95, x93, x59, x81); + fiat_p384_addcarryx_u64(&x96, &x97, x95, x61, x83); + fiat_p384_addcarryx_u64(&x98, &x99, x97, x63, x85); + fiat_p384_addcarryx_u64(&x100, &x101, x99, x65, x87); + fiat_p384_addcarryx_u64(&x102, &x103, x101, x67, x89); + fiat_p384_addcarryx_u64(&x104, &x105, x103, x68, x91); + fiat_p384_mulx_u64(&x106, &x107, x92, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x108, &x109, x106, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x110, &x111, x106, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x112, &x113, x106, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x114, &x115, x106, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x116, &x117, x106, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x118, &x119, x106, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x120, &x121, 0x0, x119, x116); + fiat_p384_addcarryx_u64(&x122, &x123, x121, x117, x114); + fiat_p384_addcarryx_u64(&x124, &x125, x123, x115, x112); + fiat_p384_addcarryx_u64(&x126, &x127, x125, x113, x110); + fiat_p384_addcarryx_u64(&x128, &x129, x127, x111, x108); + x130 = (x129 + x109); + fiat_p384_addcarryx_u64(&x131, &x132, 0x0, x92, x118); + fiat_p384_addcarryx_u64(&x133, &x134, x132, x94, x120); + fiat_p384_addcarryx_u64(&x135, &x136, x134, x96, x122); + fiat_p384_addcarryx_u64(&x137, &x138, x136, x98, x124); + fiat_p384_addcarryx_u64(&x139, &x140, x138, x100, x126); + fiat_p384_addcarryx_u64(&x141, &x142, x140, x102, x128); + fiat_p384_addcarryx_u64(&x143, &x144, x142, x104, x130); + x145 = ((uint64_t)x144 + x105); + fiat_p384_mulx_u64(&x146, &x147, x2, (arg2[5])); + fiat_p384_mulx_u64(&x148, &x149, x2, (arg2[4])); + fiat_p384_mulx_u64(&x150, &x151, x2, (arg2[3])); + fiat_p384_mulx_u64(&x152, &x153, x2, (arg2[2])); + fiat_p384_mulx_u64(&x154, &x155, x2, (arg2[1])); + fiat_p384_mulx_u64(&x156, &x157, x2, (arg2[0])); + fiat_p384_addcarryx_u64(&x158, &x159, 0x0, x157, x154); + fiat_p384_addcarryx_u64(&x160, &x161, x159, x155, x152); + fiat_p384_addcarryx_u64(&x162, &x163, x161, x153, x150); + fiat_p384_addcarryx_u64(&x164, &x165, x163, x151, x148); + fiat_p384_addcarryx_u64(&x166, &x167, x165, x149, x146); + x168 = (x167 + x147); + fiat_p384_addcarryx_u64(&x169, &x170, 0x0, x133, x156); + fiat_p384_addcarryx_u64(&x171, &x172, x170, x135, x158); + fiat_p384_addcarryx_u64(&x173, &x174, x172, x137, x160); + fiat_p384_addcarryx_u64(&x175, &x176, x174, x139, x162); + fiat_p384_addcarryx_u64(&x177, &x178, x176, x141, x164); + fiat_p384_addcarryx_u64(&x179, &x180, x178, x143, x166); + fiat_p384_addcarryx_u64(&x181, &x182, x180, x145, x168); + fiat_p384_mulx_u64(&x183, &x184, x169, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x185, &x186, x183, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x187, &x188, x183, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x189, &x190, x183, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x191, &x192, x183, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x193, &x194, x183, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x195, &x196, x183, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x197, &x198, 0x0, x196, x193); + fiat_p384_addcarryx_u64(&x199, &x200, x198, x194, x191); + fiat_p384_addcarryx_u64(&x201, &x202, x200, x192, x189); + fiat_p384_addcarryx_u64(&x203, &x204, x202, x190, x187); + fiat_p384_addcarryx_u64(&x205, &x206, x204, x188, x185); + x207 = (x206 + x186); + fiat_p384_addcarryx_u64(&x208, &x209, 0x0, x169, x195); + fiat_p384_addcarryx_u64(&x210, &x211, x209, x171, x197); + fiat_p384_addcarryx_u64(&x212, &x213, x211, x173, x199); + fiat_p384_addcarryx_u64(&x214, &x215, x213, x175, x201); + fiat_p384_addcarryx_u64(&x216, &x217, x215, x177, x203); + fiat_p384_addcarryx_u64(&x218, &x219, x217, x179, x205); + fiat_p384_addcarryx_u64(&x220, &x221, x219, x181, x207); + x222 = ((uint64_t)x221 + x182); + fiat_p384_mulx_u64(&x223, &x224, x3, (arg2[5])); + fiat_p384_mulx_u64(&x225, &x226, x3, (arg2[4])); + fiat_p384_mulx_u64(&x227, &x228, x3, (arg2[3])); + fiat_p384_mulx_u64(&x229, &x230, x3, (arg2[2])); + fiat_p384_mulx_u64(&x231, &x232, x3, (arg2[1])); + fiat_p384_mulx_u64(&x233, &x234, x3, (arg2[0])); + fiat_p384_addcarryx_u64(&x235, &x236, 0x0, x234, x231); + fiat_p384_addcarryx_u64(&x237, &x238, x236, x232, x229); + fiat_p384_addcarryx_u64(&x239, &x240, x238, x230, x227); + fiat_p384_addcarryx_u64(&x241, &x242, x240, x228, x225); + fiat_p384_addcarryx_u64(&x243, &x244, x242, x226, x223); + x245 = (x244 + x224); + fiat_p384_addcarryx_u64(&x246, &x247, 0x0, x210, x233); + fiat_p384_addcarryx_u64(&x248, &x249, x247, x212, x235); + fiat_p384_addcarryx_u64(&x250, &x251, x249, x214, x237); + fiat_p384_addcarryx_u64(&x252, &x253, x251, x216, x239); + fiat_p384_addcarryx_u64(&x254, &x255, x253, x218, x241); + fiat_p384_addcarryx_u64(&x256, &x257, x255, x220, x243); + fiat_p384_addcarryx_u64(&x258, &x259, x257, x222, x245); + fiat_p384_mulx_u64(&x260, &x261, x246, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x262, &x263, x260, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x264, &x265, x260, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x266, &x267, x260, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x268, &x269, x260, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x270, &x271, x260, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x272, &x273, x260, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x274, &x275, 0x0, x273, x270); + fiat_p384_addcarryx_u64(&x276, &x277, x275, x271, x268); + fiat_p384_addcarryx_u64(&x278, &x279, x277, x269, x266); + fiat_p384_addcarryx_u64(&x280, &x281, x279, x267, x264); + fiat_p384_addcarryx_u64(&x282, &x283, x281, x265, x262); + x284 = (x283 + x263); + fiat_p384_addcarryx_u64(&x285, &x286, 0x0, x246, x272); + fiat_p384_addcarryx_u64(&x287, &x288, x286, x248, x274); + fiat_p384_addcarryx_u64(&x289, &x290, x288, x250, x276); + fiat_p384_addcarryx_u64(&x291, &x292, x290, x252, x278); + fiat_p384_addcarryx_u64(&x293, &x294, x292, x254, x280); + fiat_p384_addcarryx_u64(&x295, &x296, x294, x256, x282); + fiat_p384_addcarryx_u64(&x297, &x298, x296, x258, x284); + x299 = ((uint64_t)x298 + x259); + fiat_p384_mulx_u64(&x300, &x301, x4, (arg2[5])); + fiat_p384_mulx_u64(&x302, &x303, x4, (arg2[4])); + fiat_p384_mulx_u64(&x304, &x305, x4, (arg2[3])); + fiat_p384_mulx_u64(&x306, &x307, x4, (arg2[2])); + fiat_p384_mulx_u64(&x308, &x309, x4, (arg2[1])); + fiat_p384_mulx_u64(&x310, &x311, x4, (arg2[0])); + fiat_p384_addcarryx_u64(&x312, &x313, 0x0, x311, x308); + fiat_p384_addcarryx_u64(&x314, &x315, x313, x309, x306); + fiat_p384_addcarryx_u64(&x316, &x317, x315, x307, x304); + fiat_p384_addcarryx_u64(&x318, &x319, x317, x305, x302); + fiat_p384_addcarryx_u64(&x320, &x321, x319, x303, x300); + x322 = (x321 + x301); + fiat_p384_addcarryx_u64(&x323, &x324, 0x0, x287, x310); + fiat_p384_addcarryx_u64(&x325, &x326, x324, x289, x312); + fiat_p384_addcarryx_u64(&x327, &x328, x326, x291, x314); + fiat_p384_addcarryx_u64(&x329, &x330, x328, x293, x316); + fiat_p384_addcarryx_u64(&x331, &x332, x330, x295, x318); + fiat_p384_addcarryx_u64(&x333, &x334, x332, x297, x320); + fiat_p384_addcarryx_u64(&x335, &x336, x334, x299, x322); + fiat_p384_mulx_u64(&x337, &x338, x323, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x339, &x340, x337, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x341, &x342, x337, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x343, &x344, x337, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x345, &x346, x337, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x347, &x348, x337, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x349, &x350, x337, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x351, &x352, 0x0, x350, x347); + fiat_p384_addcarryx_u64(&x353, &x354, x352, x348, x345); + fiat_p384_addcarryx_u64(&x355, &x356, x354, x346, x343); + fiat_p384_addcarryx_u64(&x357, &x358, x356, x344, x341); + fiat_p384_addcarryx_u64(&x359, &x360, x358, x342, x339); + x361 = (x360 + x340); + fiat_p384_addcarryx_u64(&x362, &x363, 0x0, x323, x349); + fiat_p384_addcarryx_u64(&x364, &x365, x363, x325, x351); + fiat_p384_addcarryx_u64(&x366, &x367, x365, x327, x353); + fiat_p384_addcarryx_u64(&x368, &x369, x367, x329, x355); + fiat_p384_addcarryx_u64(&x370, &x371, x369, x331, x357); + fiat_p384_addcarryx_u64(&x372, &x373, x371, x333, x359); + fiat_p384_addcarryx_u64(&x374, &x375, x373, x335, x361); + x376 = ((uint64_t)x375 + x336); + fiat_p384_mulx_u64(&x377, &x378, x5, (arg2[5])); + fiat_p384_mulx_u64(&x379, &x380, x5, (arg2[4])); + fiat_p384_mulx_u64(&x381, &x382, x5, (arg2[3])); + fiat_p384_mulx_u64(&x383, &x384, x5, (arg2[2])); + fiat_p384_mulx_u64(&x385, &x386, x5, (arg2[1])); + fiat_p384_mulx_u64(&x387, &x388, x5, (arg2[0])); + fiat_p384_addcarryx_u64(&x389, &x390, 0x0, x388, x385); + fiat_p384_addcarryx_u64(&x391, &x392, x390, x386, x383); + fiat_p384_addcarryx_u64(&x393, &x394, x392, x384, x381); + fiat_p384_addcarryx_u64(&x395, &x396, x394, x382, x379); + fiat_p384_addcarryx_u64(&x397, &x398, x396, x380, x377); + x399 = (x398 + x378); + fiat_p384_addcarryx_u64(&x400, &x401, 0x0, x364, x387); + fiat_p384_addcarryx_u64(&x402, &x403, x401, x366, x389); + fiat_p384_addcarryx_u64(&x404, &x405, x403, x368, x391); + fiat_p384_addcarryx_u64(&x406, &x407, x405, x370, x393); + fiat_p384_addcarryx_u64(&x408, &x409, x407, x372, x395); + fiat_p384_addcarryx_u64(&x410, &x411, x409, x374, x397); + fiat_p384_addcarryx_u64(&x412, &x413, x411, x376, x399); + fiat_p384_mulx_u64(&x414, &x415, x400, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x416, &x417, x414, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x418, &x419, x414, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x420, &x421, x414, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x422, &x423, x414, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x424, &x425, x414, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x426, &x427, x414, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x428, &x429, 0x0, x427, x424); + fiat_p384_addcarryx_u64(&x430, &x431, x429, x425, x422); + fiat_p384_addcarryx_u64(&x432, &x433, x431, x423, x420); + fiat_p384_addcarryx_u64(&x434, &x435, x433, x421, x418); + fiat_p384_addcarryx_u64(&x436, &x437, x435, x419, x416); + x438 = (x437 + x417); + fiat_p384_addcarryx_u64(&x439, &x440, 0x0, x400, x426); + fiat_p384_addcarryx_u64(&x441, &x442, x440, x402, x428); + fiat_p384_addcarryx_u64(&x443, &x444, x442, x404, x430); + fiat_p384_addcarryx_u64(&x445, &x446, x444, x406, x432); + fiat_p384_addcarryx_u64(&x447, &x448, x446, x408, x434); + fiat_p384_addcarryx_u64(&x449, &x450, x448, x410, x436); + fiat_p384_addcarryx_u64(&x451, &x452, x450, x412, x438); + x453 = ((uint64_t)x452 + x413); + fiat_p384_subborrowx_u64(&x454, &x455, 0x0, x441, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u64(&x456, &x457, x455, x443, UINT64_C(0xffffffff00000000)); + fiat_p384_subborrowx_u64(&x458, &x459, x457, x445, UINT64_C(0xfffffffffffffffe)); + fiat_p384_subborrowx_u64(&x460, &x461, x459, x447, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x462, &x463, x461, x449, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x464, &x465, x463, x451, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x466, &x467, x465, x453, 0x0); + fiat_p384_cmovznz_u64(&x468, x467, x454, x441); + fiat_p384_cmovznz_u64(&x469, x467, x456, x443); + fiat_p384_cmovznz_u64(&x470, x467, x458, x445); + fiat_p384_cmovznz_u64(&x471, x467, x460, x447); + fiat_p384_cmovznz_u64(&x472, x467, x462, x449); + fiat_p384_cmovznz_u64(&x473, x467, x464, x451); + out1[0] = x468; + out1[1] = x469; + out1[2] = x470; + out1[3] = x471; + out1[4] = x472; + out1[5] = x473; +} + +/* + * The function fiat_p384_square squares a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p384_square(uint64_t out1[6], const uint64_t arg1[6]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + fiat_p384_uint1 x20; + uint64_t x21; + fiat_p384_uint1 x22; + uint64_t x23; + fiat_p384_uint1 x24; + uint64_t x25; + fiat_p384_uint1 x26; + uint64_t x27; + fiat_p384_uint1 x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint64_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + fiat_p384_uint1 x45; + uint64_t x46; + fiat_p384_uint1 x47; + uint64_t x48; + fiat_p384_uint1 x49; + uint64_t x50; + fiat_p384_uint1 x51; + uint64_t x52; + fiat_p384_uint1 x53; + uint64_t x54; + uint64_t x55; + fiat_p384_uint1 x56; + uint64_t x57; + fiat_p384_uint1 x58; + uint64_t x59; + fiat_p384_uint1 x60; + uint64_t x61; + fiat_p384_uint1 x62; + uint64_t x63; + fiat_p384_uint1 x64; + uint64_t x65; + fiat_p384_uint1 x66; + uint64_t x67; + fiat_p384_uint1 x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + uint64_t x81; + fiat_p384_uint1 x82; + uint64_t x83; + fiat_p384_uint1 x84; + uint64_t x85; + fiat_p384_uint1 x86; + uint64_t x87; + fiat_p384_uint1 x88; + uint64_t x89; + fiat_p384_uint1 x90; + uint64_t x91; + uint64_t x92; + fiat_p384_uint1 x93; + uint64_t x94; + fiat_p384_uint1 x95; + uint64_t x96; + fiat_p384_uint1 x97; + uint64_t x98; + fiat_p384_uint1 x99; + uint64_t x100; + fiat_p384_uint1 x101; + uint64_t x102; + fiat_p384_uint1 x103; + uint64_t x104; + fiat_p384_uint1 x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + uint64_t x109; + uint64_t x110; + uint64_t x111; + uint64_t x112; + uint64_t x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + fiat_p384_uint1 x121; + uint64_t x122; + fiat_p384_uint1 x123; + uint64_t x124; + fiat_p384_uint1 x125; + uint64_t x126; + fiat_p384_uint1 x127; + uint64_t x128; + fiat_p384_uint1 x129; + uint64_t x130; + uint64_t x131; + fiat_p384_uint1 x132; + uint64_t x133; + fiat_p384_uint1 x134; + uint64_t x135; + fiat_p384_uint1 x136; + uint64_t x137; + fiat_p384_uint1 x138; + uint64_t x139; + fiat_p384_uint1 x140; + uint64_t x141; + fiat_p384_uint1 x142; + uint64_t x143; + fiat_p384_uint1 x144; + uint64_t x145; + uint64_t x146; + uint64_t x147; + uint64_t x148; + uint64_t x149; + uint64_t x150; + uint64_t x151; + uint64_t x152; + uint64_t x153; + uint64_t x154; + uint64_t x155; + uint64_t x156; + uint64_t x157; + uint64_t x158; + fiat_p384_uint1 x159; + uint64_t x160; + fiat_p384_uint1 x161; + uint64_t x162; + fiat_p384_uint1 x163; + uint64_t x164; + fiat_p384_uint1 x165; + uint64_t x166; + fiat_p384_uint1 x167; + uint64_t x168; + uint64_t x169; + fiat_p384_uint1 x170; + uint64_t x171; + fiat_p384_uint1 x172; + uint64_t x173; + fiat_p384_uint1 x174; + uint64_t x175; + fiat_p384_uint1 x176; + uint64_t x177; + fiat_p384_uint1 x178; + uint64_t x179; + fiat_p384_uint1 x180; + uint64_t x181; + fiat_p384_uint1 x182; + uint64_t x183; + uint64_t x184; + uint64_t x185; + uint64_t x186; + uint64_t x187; + uint64_t x188; + uint64_t x189; + uint64_t x190; + uint64_t x191; + uint64_t x192; + uint64_t x193; + uint64_t x194; + uint64_t x195; + uint64_t x196; + uint64_t x197; + fiat_p384_uint1 x198; + uint64_t x199; + fiat_p384_uint1 x200; + uint64_t x201; + fiat_p384_uint1 x202; + uint64_t x203; + fiat_p384_uint1 x204; + uint64_t x205; + fiat_p384_uint1 x206; + uint64_t x207; + uint64_t x208; + fiat_p384_uint1 x209; + uint64_t x210; + fiat_p384_uint1 x211; + uint64_t x212; + fiat_p384_uint1 x213; + uint64_t x214; + fiat_p384_uint1 x215; + uint64_t x216; + fiat_p384_uint1 x217; + uint64_t x218; + fiat_p384_uint1 x219; + uint64_t x220; + fiat_p384_uint1 x221; + uint64_t x222; + uint64_t x223; + uint64_t x224; + uint64_t x225; + uint64_t x226; + uint64_t x227; + uint64_t x228; + uint64_t x229; + uint64_t x230; + uint64_t x231; + uint64_t x232; + uint64_t x233; + uint64_t x234; + uint64_t x235; + fiat_p384_uint1 x236; + uint64_t x237; + fiat_p384_uint1 x238; + uint64_t x239; + fiat_p384_uint1 x240; + uint64_t x241; + fiat_p384_uint1 x242; + uint64_t x243; + fiat_p384_uint1 x244; + uint64_t x245; + uint64_t x246; + fiat_p384_uint1 x247; + uint64_t x248; + fiat_p384_uint1 x249; + uint64_t x250; + fiat_p384_uint1 x251; + uint64_t x252; + fiat_p384_uint1 x253; + uint64_t x254; + fiat_p384_uint1 x255; + uint64_t x256; + fiat_p384_uint1 x257; + uint64_t x258; + fiat_p384_uint1 x259; + uint64_t x260; + uint64_t x261; + uint64_t x262; + uint64_t x263; + uint64_t x264; + uint64_t x265; + uint64_t x266; + uint64_t x267; + uint64_t x268; + uint64_t x269; + uint64_t x270; + uint64_t x271; + uint64_t x272; + uint64_t x273; + uint64_t x274; + fiat_p384_uint1 x275; + uint64_t x276; + fiat_p384_uint1 x277; + uint64_t x278; + fiat_p384_uint1 x279; + uint64_t x280; + fiat_p384_uint1 x281; + uint64_t x282; + fiat_p384_uint1 x283; + uint64_t x284; + uint64_t x285; + fiat_p384_uint1 x286; + uint64_t x287; + fiat_p384_uint1 x288; + uint64_t x289; + fiat_p384_uint1 x290; + uint64_t x291; + fiat_p384_uint1 x292; + uint64_t x293; + fiat_p384_uint1 x294; + uint64_t x295; + fiat_p384_uint1 x296; + uint64_t x297; + fiat_p384_uint1 x298; + uint64_t x299; + uint64_t x300; + uint64_t x301; + uint64_t x302; + uint64_t x303; + uint64_t x304; + uint64_t x305; + uint64_t x306; + uint64_t x307; + uint64_t x308; + uint64_t x309; + uint64_t x310; + uint64_t x311; + uint64_t x312; + fiat_p384_uint1 x313; + uint64_t x314; + fiat_p384_uint1 x315; + uint64_t x316; + fiat_p384_uint1 x317; + uint64_t x318; + fiat_p384_uint1 x319; + uint64_t x320; + fiat_p384_uint1 x321; + uint64_t x322; + uint64_t x323; + fiat_p384_uint1 x324; + uint64_t x325; + fiat_p384_uint1 x326; + uint64_t x327; + fiat_p384_uint1 x328; + uint64_t x329; + fiat_p384_uint1 x330; + uint64_t x331; + fiat_p384_uint1 x332; + uint64_t x333; + fiat_p384_uint1 x334; + uint64_t x335; + fiat_p384_uint1 x336; + uint64_t x337; + uint64_t x338; + uint64_t x339; + uint64_t x340; + uint64_t x341; + uint64_t x342; + uint64_t x343; + uint64_t x344; + uint64_t x345; + uint64_t x346; + uint64_t x347; + uint64_t x348; + uint64_t x349; + uint64_t x350; + uint64_t x351; + fiat_p384_uint1 x352; + uint64_t x353; + fiat_p384_uint1 x354; + uint64_t x355; + fiat_p384_uint1 x356; + uint64_t x357; + fiat_p384_uint1 x358; + uint64_t x359; + fiat_p384_uint1 x360; + uint64_t x361; + uint64_t x362; + fiat_p384_uint1 x363; + uint64_t x364; + fiat_p384_uint1 x365; + uint64_t x366; + fiat_p384_uint1 x367; + uint64_t x368; + fiat_p384_uint1 x369; + uint64_t x370; + fiat_p384_uint1 x371; + uint64_t x372; + fiat_p384_uint1 x373; + uint64_t x374; + fiat_p384_uint1 x375; + uint64_t x376; + uint64_t x377; + uint64_t x378; + uint64_t x379; + uint64_t x380; + uint64_t x381; + uint64_t x382; + uint64_t x383; + uint64_t x384; + uint64_t x385; + uint64_t x386; + uint64_t x387; + uint64_t x388; + uint64_t x389; + fiat_p384_uint1 x390; + uint64_t x391; + fiat_p384_uint1 x392; + uint64_t x393; + fiat_p384_uint1 x394; + uint64_t x395; + fiat_p384_uint1 x396; + uint64_t x397; + fiat_p384_uint1 x398; + uint64_t x399; + uint64_t x400; + fiat_p384_uint1 x401; + uint64_t x402; + fiat_p384_uint1 x403; + uint64_t x404; + fiat_p384_uint1 x405; + uint64_t x406; + fiat_p384_uint1 x407; + uint64_t x408; + fiat_p384_uint1 x409; + uint64_t x410; + fiat_p384_uint1 x411; + uint64_t x412; + fiat_p384_uint1 x413; + uint64_t x414; + uint64_t x415; + uint64_t x416; + uint64_t x417; + uint64_t x418; + uint64_t x419; + uint64_t x420; + uint64_t x421; + uint64_t x422; + uint64_t x423; + uint64_t x424; + uint64_t x425; + uint64_t x426; + uint64_t x427; + uint64_t x428; + fiat_p384_uint1 x429; + uint64_t x430; + fiat_p384_uint1 x431; + uint64_t x432; + fiat_p384_uint1 x433; + uint64_t x434; + fiat_p384_uint1 x435; + uint64_t x436; + fiat_p384_uint1 x437; + uint64_t x438; + uint64_t x439; + fiat_p384_uint1 x440; + uint64_t x441; + fiat_p384_uint1 x442; + uint64_t x443; + fiat_p384_uint1 x444; + uint64_t x445; + fiat_p384_uint1 x446; + uint64_t x447; + fiat_p384_uint1 x448; + uint64_t x449; + fiat_p384_uint1 x450; + uint64_t x451; + fiat_p384_uint1 x452; + uint64_t x453; + uint64_t x454; + fiat_p384_uint1 x455; + uint64_t x456; + fiat_p384_uint1 x457; + uint64_t x458; + fiat_p384_uint1 x459; + uint64_t x460; + fiat_p384_uint1 x461; + uint64_t x462; + fiat_p384_uint1 x463; + uint64_t x464; + fiat_p384_uint1 x465; + uint64_t x466; + fiat_p384_uint1 x467; + uint64_t x468; + uint64_t x469; + uint64_t x470; + uint64_t x471; + uint64_t x472; + uint64_t x473; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[0]); + fiat_p384_mulx_u64(&x7, &x8, x6, (arg1[5])); + fiat_p384_mulx_u64(&x9, &x10, x6, (arg1[4])); + fiat_p384_mulx_u64(&x11, &x12, x6, (arg1[3])); + fiat_p384_mulx_u64(&x13, &x14, x6, (arg1[2])); + fiat_p384_mulx_u64(&x15, &x16, x6, (arg1[1])); + fiat_p384_mulx_u64(&x17, &x18, x6, (arg1[0])); + fiat_p384_addcarryx_u64(&x19, &x20, 0x0, x18, x15); + fiat_p384_addcarryx_u64(&x21, &x22, x20, x16, x13); + fiat_p384_addcarryx_u64(&x23, &x24, x22, x14, x11); + fiat_p384_addcarryx_u64(&x25, &x26, x24, x12, x9); + fiat_p384_addcarryx_u64(&x27, &x28, x26, x10, x7); + x29 = (x28 + x8); + fiat_p384_mulx_u64(&x30, &x31, x17, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x32, &x33, x30, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x34, &x35, x30, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x36, &x37, x30, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x38, &x39, x30, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x40, &x41, x30, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x42, &x43, x30, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x44, &x45, 0x0, x43, x40); + fiat_p384_addcarryx_u64(&x46, &x47, x45, x41, x38); + fiat_p384_addcarryx_u64(&x48, &x49, x47, x39, x36); + fiat_p384_addcarryx_u64(&x50, &x51, x49, x37, x34); + fiat_p384_addcarryx_u64(&x52, &x53, x51, x35, x32); + x54 = (x53 + x33); + fiat_p384_addcarryx_u64(&x55, &x56, 0x0, x17, x42); + fiat_p384_addcarryx_u64(&x57, &x58, x56, x19, x44); + fiat_p384_addcarryx_u64(&x59, &x60, x58, x21, x46); + fiat_p384_addcarryx_u64(&x61, &x62, x60, x23, x48); + fiat_p384_addcarryx_u64(&x63, &x64, x62, x25, x50); + fiat_p384_addcarryx_u64(&x65, &x66, x64, x27, x52); + fiat_p384_addcarryx_u64(&x67, &x68, x66, x29, x54); + fiat_p384_mulx_u64(&x69, &x70, x1, (arg1[5])); + fiat_p384_mulx_u64(&x71, &x72, x1, (arg1[4])); + fiat_p384_mulx_u64(&x73, &x74, x1, (arg1[3])); + fiat_p384_mulx_u64(&x75, &x76, x1, (arg1[2])); + fiat_p384_mulx_u64(&x77, &x78, x1, (arg1[1])); + fiat_p384_mulx_u64(&x79, &x80, x1, (arg1[0])); + fiat_p384_addcarryx_u64(&x81, &x82, 0x0, x80, x77); + fiat_p384_addcarryx_u64(&x83, &x84, x82, x78, x75); + fiat_p384_addcarryx_u64(&x85, &x86, x84, x76, x73); + fiat_p384_addcarryx_u64(&x87, &x88, x86, x74, x71); + fiat_p384_addcarryx_u64(&x89, &x90, x88, x72, x69); + x91 = (x90 + x70); + fiat_p384_addcarryx_u64(&x92, &x93, 0x0, x57, x79); + fiat_p384_addcarryx_u64(&x94, &x95, x93, x59, x81); + fiat_p384_addcarryx_u64(&x96, &x97, x95, x61, x83); + fiat_p384_addcarryx_u64(&x98, &x99, x97, x63, x85); + fiat_p384_addcarryx_u64(&x100, &x101, x99, x65, x87); + fiat_p384_addcarryx_u64(&x102, &x103, x101, x67, x89); + fiat_p384_addcarryx_u64(&x104, &x105, x103, x68, x91); + fiat_p384_mulx_u64(&x106, &x107, x92, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x108, &x109, x106, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x110, &x111, x106, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x112, &x113, x106, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x114, &x115, x106, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x116, &x117, x106, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x118, &x119, x106, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x120, &x121, 0x0, x119, x116); + fiat_p384_addcarryx_u64(&x122, &x123, x121, x117, x114); + fiat_p384_addcarryx_u64(&x124, &x125, x123, x115, x112); + fiat_p384_addcarryx_u64(&x126, &x127, x125, x113, x110); + fiat_p384_addcarryx_u64(&x128, &x129, x127, x111, x108); + x130 = (x129 + x109); + fiat_p384_addcarryx_u64(&x131, &x132, 0x0, x92, x118); + fiat_p384_addcarryx_u64(&x133, &x134, x132, x94, x120); + fiat_p384_addcarryx_u64(&x135, &x136, x134, x96, x122); + fiat_p384_addcarryx_u64(&x137, &x138, x136, x98, x124); + fiat_p384_addcarryx_u64(&x139, &x140, x138, x100, x126); + fiat_p384_addcarryx_u64(&x141, &x142, x140, x102, x128); + fiat_p384_addcarryx_u64(&x143, &x144, x142, x104, x130); + x145 = ((uint64_t)x144 + x105); + fiat_p384_mulx_u64(&x146, &x147, x2, (arg1[5])); + fiat_p384_mulx_u64(&x148, &x149, x2, (arg1[4])); + fiat_p384_mulx_u64(&x150, &x151, x2, (arg1[3])); + fiat_p384_mulx_u64(&x152, &x153, x2, (arg1[2])); + fiat_p384_mulx_u64(&x154, &x155, x2, (arg1[1])); + fiat_p384_mulx_u64(&x156, &x157, x2, (arg1[0])); + fiat_p384_addcarryx_u64(&x158, &x159, 0x0, x157, x154); + fiat_p384_addcarryx_u64(&x160, &x161, x159, x155, x152); + fiat_p384_addcarryx_u64(&x162, &x163, x161, x153, x150); + fiat_p384_addcarryx_u64(&x164, &x165, x163, x151, x148); + fiat_p384_addcarryx_u64(&x166, &x167, x165, x149, x146); + x168 = (x167 + x147); + fiat_p384_addcarryx_u64(&x169, &x170, 0x0, x133, x156); + fiat_p384_addcarryx_u64(&x171, &x172, x170, x135, x158); + fiat_p384_addcarryx_u64(&x173, &x174, x172, x137, x160); + fiat_p384_addcarryx_u64(&x175, &x176, x174, x139, x162); + fiat_p384_addcarryx_u64(&x177, &x178, x176, x141, x164); + fiat_p384_addcarryx_u64(&x179, &x180, x178, x143, x166); + fiat_p384_addcarryx_u64(&x181, &x182, x180, x145, x168); + fiat_p384_mulx_u64(&x183, &x184, x169, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x185, &x186, x183, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x187, &x188, x183, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x189, &x190, x183, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x191, &x192, x183, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x193, &x194, x183, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x195, &x196, x183, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x197, &x198, 0x0, x196, x193); + fiat_p384_addcarryx_u64(&x199, &x200, x198, x194, x191); + fiat_p384_addcarryx_u64(&x201, &x202, x200, x192, x189); + fiat_p384_addcarryx_u64(&x203, &x204, x202, x190, x187); + fiat_p384_addcarryx_u64(&x205, &x206, x204, x188, x185); + x207 = (x206 + x186); + fiat_p384_addcarryx_u64(&x208, &x209, 0x0, x169, x195); + fiat_p384_addcarryx_u64(&x210, &x211, x209, x171, x197); + fiat_p384_addcarryx_u64(&x212, &x213, x211, x173, x199); + fiat_p384_addcarryx_u64(&x214, &x215, x213, x175, x201); + fiat_p384_addcarryx_u64(&x216, &x217, x215, x177, x203); + fiat_p384_addcarryx_u64(&x218, &x219, x217, x179, x205); + fiat_p384_addcarryx_u64(&x220, &x221, x219, x181, x207); + x222 = ((uint64_t)x221 + x182); + fiat_p384_mulx_u64(&x223, &x224, x3, (arg1[5])); + fiat_p384_mulx_u64(&x225, &x226, x3, (arg1[4])); + fiat_p384_mulx_u64(&x227, &x228, x3, (arg1[3])); + fiat_p384_mulx_u64(&x229, &x230, x3, (arg1[2])); + fiat_p384_mulx_u64(&x231, &x232, x3, (arg1[1])); + fiat_p384_mulx_u64(&x233, &x234, x3, (arg1[0])); + fiat_p384_addcarryx_u64(&x235, &x236, 0x0, x234, x231); + fiat_p384_addcarryx_u64(&x237, &x238, x236, x232, x229); + fiat_p384_addcarryx_u64(&x239, &x240, x238, x230, x227); + fiat_p384_addcarryx_u64(&x241, &x242, x240, x228, x225); + fiat_p384_addcarryx_u64(&x243, &x244, x242, x226, x223); + x245 = (x244 + x224); + fiat_p384_addcarryx_u64(&x246, &x247, 0x0, x210, x233); + fiat_p384_addcarryx_u64(&x248, &x249, x247, x212, x235); + fiat_p384_addcarryx_u64(&x250, &x251, x249, x214, x237); + fiat_p384_addcarryx_u64(&x252, &x253, x251, x216, x239); + fiat_p384_addcarryx_u64(&x254, &x255, x253, x218, x241); + fiat_p384_addcarryx_u64(&x256, &x257, x255, x220, x243); + fiat_p384_addcarryx_u64(&x258, &x259, x257, x222, x245); + fiat_p384_mulx_u64(&x260, &x261, x246, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x262, &x263, x260, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x264, &x265, x260, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x266, &x267, x260, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x268, &x269, x260, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x270, &x271, x260, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x272, &x273, x260, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x274, &x275, 0x0, x273, x270); + fiat_p384_addcarryx_u64(&x276, &x277, x275, x271, x268); + fiat_p384_addcarryx_u64(&x278, &x279, x277, x269, x266); + fiat_p384_addcarryx_u64(&x280, &x281, x279, x267, x264); + fiat_p384_addcarryx_u64(&x282, &x283, x281, x265, x262); + x284 = (x283 + x263); + fiat_p384_addcarryx_u64(&x285, &x286, 0x0, x246, x272); + fiat_p384_addcarryx_u64(&x287, &x288, x286, x248, x274); + fiat_p384_addcarryx_u64(&x289, &x290, x288, x250, x276); + fiat_p384_addcarryx_u64(&x291, &x292, x290, x252, x278); + fiat_p384_addcarryx_u64(&x293, &x294, x292, x254, x280); + fiat_p384_addcarryx_u64(&x295, &x296, x294, x256, x282); + fiat_p384_addcarryx_u64(&x297, &x298, x296, x258, x284); + x299 = ((uint64_t)x298 + x259); + fiat_p384_mulx_u64(&x300, &x301, x4, (arg1[5])); + fiat_p384_mulx_u64(&x302, &x303, x4, (arg1[4])); + fiat_p384_mulx_u64(&x304, &x305, x4, (arg1[3])); + fiat_p384_mulx_u64(&x306, &x307, x4, (arg1[2])); + fiat_p384_mulx_u64(&x308, &x309, x4, (arg1[1])); + fiat_p384_mulx_u64(&x310, &x311, x4, (arg1[0])); + fiat_p384_addcarryx_u64(&x312, &x313, 0x0, x311, x308); + fiat_p384_addcarryx_u64(&x314, &x315, x313, x309, x306); + fiat_p384_addcarryx_u64(&x316, &x317, x315, x307, x304); + fiat_p384_addcarryx_u64(&x318, &x319, x317, x305, x302); + fiat_p384_addcarryx_u64(&x320, &x321, x319, x303, x300); + x322 = (x321 + x301); + fiat_p384_addcarryx_u64(&x323, &x324, 0x0, x287, x310); + fiat_p384_addcarryx_u64(&x325, &x326, x324, x289, x312); + fiat_p384_addcarryx_u64(&x327, &x328, x326, x291, x314); + fiat_p384_addcarryx_u64(&x329, &x330, x328, x293, x316); + fiat_p384_addcarryx_u64(&x331, &x332, x330, x295, x318); + fiat_p384_addcarryx_u64(&x333, &x334, x332, x297, x320); + fiat_p384_addcarryx_u64(&x335, &x336, x334, x299, x322); + fiat_p384_mulx_u64(&x337, &x338, x323, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x339, &x340, x337, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x341, &x342, x337, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x343, &x344, x337, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x345, &x346, x337, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x347, &x348, x337, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x349, &x350, x337, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x351, &x352, 0x0, x350, x347); + fiat_p384_addcarryx_u64(&x353, &x354, x352, x348, x345); + fiat_p384_addcarryx_u64(&x355, &x356, x354, x346, x343); + fiat_p384_addcarryx_u64(&x357, &x358, x356, x344, x341); + fiat_p384_addcarryx_u64(&x359, &x360, x358, x342, x339); + x361 = (x360 + x340); + fiat_p384_addcarryx_u64(&x362, &x363, 0x0, x323, x349); + fiat_p384_addcarryx_u64(&x364, &x365, x363, x325, x351); + fiat_p384_addcarryx_u64(&x366, &x367, x365, x327, x353); + fiat_p384_addcarryx_u64(&x368, &x369, x367, x329, x355); + fiat_p384_addcarryx_u64(&x370, &x371, x369, x331, x357); + fiat_p384_addcarryx_u64(&x372, &x373, x371, x333, x359); + fiat_p384_addcarryx_u64(&x374, &x375, x373, x335, x361); + x376 = ((uint64_t)x375 + x336); + fiat_p384_mulx_u64(&x377, &x378, x5, (arg1[5])); + fiat_p384_mulx_u64(&x379, &x380, x5, (arg1[4])); + fiat_p384_mulx_u64(&x381, &x382, x5, (arg1[3])); + fiat_p384_mulx_u64(&x383, &x384, x5, (arg1[2])); + fiat_p384_mulx_u64(&x385, &x386, x5, (arg1[1])); + fiat_p384_mulx_u64(&x387, &x388, x5, (arg1[0])); + fiat_p384_addcarryx_u64(&x389, &x390, 0x0, x388, x385); + fiat_p384_addcarryx_u64(&x391, &x392, x390, x386, x383); + fiat_p384_addcarryx_u64(&x393, &x394, x392, x384, x381); + fiat_p384_addcarryx_u64(&x395, &x396, x394, x382, x379); + fiat_p384_addcarryx_u64(&x397, &x398, x396, x380, x377); + x399 = (x398 + x378); + fiat_p384_addcarryx_u64(&x400, &x401, 0x0, x364, x387); + fiat_p384_addcarryx_u64(&x402, &x403, x401, x366, x389); + fiat_p384_addcarryx_u64(&x404, &x405, x403, x368, x391); + fiat_p384_addcarryx_u64(&x406, &x407, x405, x370, x393); + fiat_p384_addcarryx_u64(&x408, &x409, x407, x372, x395); + fiat_p384_addcarryx_u64(&x410, &x411, x409, x374, x397); + fiat_p384_addcarryx_u64(&x412, &x413, x411, x376, x399); + fiat_p384_mulx_u64(&x414, &x415, x400, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x416, &x417, x414, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x418, &x419, x414, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x420, &x421, x414, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x422, &x423, x414, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x424, &x425, x414, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x426, &x427, x414, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x428, &x429, 0x0, x427, x424); + fiat_p384_addcarryx_u64(&x430, &x431, x429, x425, x422); + fiat_p384_addcarryx_u64(&x432, &x433, x431, x423, x420); + fiat_p384_addcarryx_u64(&x434, &x435, x433, x421, x418); + fiat_p384_addcarryx_u64(&x436, &x437, x435, x419, x416); + x438 = (x437 + x417); + fiat_p384_addcarryx_u64(&x439, &x440, 0x0, x400, x426); + fiat_p384_addcarryx_u64(&x441, &x442, x440, x402, x428); + fiat_p384_addcarryx_u64(&x443, &x444, x442, x404, x430); + fiat_p384_addcarryx_u64(&x445, &x446, x444, x406, x432); + fiat_p384_addcarryx_u64(&x447, &x448, x446, x408, x434); + fiat_p384_addcarryx_u64(&x449, &x450, x448, x410, x436); + fiat_p384_addcarryx_u64(&x451, &x452, x450, x412, x438); + x453 = ((uint64_t)x452 + x413); + fiat_p384_subborrowx_u64(&x454, &x455, 0x0, x441, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u64(&x456, &x457, x455, x443, UINT64_C(0xffffffff00000000)); + fiat_p384_subborrowx_u64(&x458, &x459, x457, x445, UINT64_C(0xfffffffffffffffe)); + fiat_p384_subborrowx_u64(&x460, &x461, x459, x447, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x462, &x463, x461, x449, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x464, &x465, x463, x451, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x466, &x467, x465, x453, 0x0); + fiat_p384_cmovznz_u64(&x468, x467, x454, x441); + fiat_p384_cmovznz_u64(&x469, x467, x456, x443); + fiat_p384_cmovznz_u64(&x470, x467, x458, x445); + fiat_p384_cmovznz_u64(&x471, x467, x460, x447); + fiat_p384_cmovznz_u64(&x472, x467, x462, x449); + fiat_p384_cmovznz_u64(&x473, x467, x464, x451); + out1[0] = x468; + out1[1] = x469; + out1[2] = x470; + out1[3] = x471; + out1[4] = x472; + out1[5] = x473; +} + +/* + * The function fiat_p384_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p384_add(uint64_t out1[6], const uint64_t arg1[6], const uint64_t arg2[6]) { + uint64_t x1; + fiat_p384_uint1 x2; + uint64_t x3; + fiat_p384_uint1 x4; + uint64_t x5; + fiat_p384_uint1 x6; + uint64_t x7; + fiat_p384_uint1 x8; + uint64_t x9; + fiat_p384_uint1 x10; + uint64_t x11; + fiat_p384_uint1 x12; + uint64_t x13; + fiat_p384_uint1 x14; + uint64_t x15; + fiat_p384_uint1 x16; + uint64_t x17; + fiat_p384_uint1 x18; + uint64_t x19; + fiat_p384_uint1 x20; + uint64_t x21; + fiat_p384_uint1 x22; + uint64_t x23; + fiat_p384_uint1 x24; + uint64_t x25; + fiat_p384_uint1 x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint64_t x32; + fiat_p384_addcarryx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_p384_addcarryx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_p384_addcarryx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_p384_addcarryx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_p384_addcarryx_u64(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_p384_addcarryx_u64(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_p384_subborrowx_u64(&x13, &x14, 0x0, x1, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u64(&x15, &x16, x14, x3, UINT64_C(0xffffffff00000000)); + fiat_p384_subborrowx_u64(&x17, &x18, x16, x5, UINT64_C(0xfffffffffffffffe)); + fiat_p384_subborrowx_u64(&x19, &x20, x18, x7, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x21, &x22, x20, x9, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x23, &x24, x22, x11, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x25, &x26, x24, x12, 0x0); + fiat_p384_cmovznz_u64(&x27, x26, x13, x1); + fiat_p384_cmovznz_u64(&x28, x26, x15, x3); + fiat_p384_cmovznz_u64(&x29, x26, x17, x5); + fiat_p384_cmovznz_u64(&x30, x26, x19, x7); + fiat_p384_cmovznz_u64(&x31, x26, x21, x9); + fiat_p384_cmovznz_u64(&x32, x26, x23, x11); + out1[0] = x27; + out1[1] = x28; + out1[2] = x29; + out1[3] = x30; + out1[4] = x31; + out1[5] = x32; +} + +/* + * The function fiat_p384_sub subtracts two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p384_sub(uint64_t out1[6], const uint64_t arg1[6], const uint64_t arg2[6]) { + uint64_t x1; + fiat_p384_uint1 x2; + uint64_t x3; + fiat_p384_uint1 x4; + uint64_t x5; + fiat_p384_uint1 x6; + uint64_t x7; + fiat_p384_uint1 x8; + uint64_t x9; + fiat_p384_uint1 x10; + uint64_t x11; + fiat_p384_uint1 x12; + uint64_t x13; + uint64_t x14; + fiat_p384_uint1 x15; + uint64_t x16; + fiat_p384_uint1 x17; + uint64_t x18; + fiat_p384_uint1 x19; + uint64_t x20; + fiat_p384_uint1 x21; + uint64_t x22; + fiat_p384_uint1 x23; + uint64_t x24; + fiat_p384_uint1 x25; + fiat_p384_subborrowx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_p384_subborrowx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_p384_subborrowx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_p384_subborrowx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_p384_subborrowx_u64(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_p384_subborrowx_u64(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_p384_cmovznz_u64(&x13, x12, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_p384_addcarryx_u64(&x14, &x15, 0x0, x1, (x13 & UINT32_C(0xffffffff))); + fiat_p384_addcarryx_u64(&x16, &x17, x15, x3, (x13 & UINT64_C(0xffffffff00000000))); + fiat_p384_addcarryx_u64(&x18, &x19, x17, x5, (x13 & UINT64_C(0xfffffffffffffffe))); + fiat_p384_addcarryx_u64(&x20, &x21, x19, x7, x13); + fiat_p384_addcarryx_u64(&x22, &x23, x21, x9, x13); + fiat_p384_addcarryx_u64(&x24, &x25, x23, x11, x13); + out1[0] = x14; + out1[1] = x16; + out1[2] = x18; + out1[3] = x20; + out1[4] = x22; + out1[5] = x24; +} + +/* + * The function fiat_p384_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p384_opp(uint64_t out1[6], const uint64_t arg1[6]) { + uint64_t x1; + fiat_p384_uint1 x2; + uint64_t x3; + fiat_p384_uint1 x4; + uint64_t x5; + fiat_p384_uint1 x6; + uint64_t x7; + fiat_p384_uint1 x8; + uint64_t x9; + fiat_p384_uint1 x10; + uint64_t x11; + fiat_p384_uint1 x12; + uint64_t x13; + uint64_t x14; + fiat_p384_uint1 x15; + uint64_t x16; + fiat_p384_uint1 x17; + uint64_t x18; + fiat_p384_uint1 x19; + uint64_t x20; + fiat_p384_uint1 x21; + uint64_t x22; + fiat_p384_uint1 x23; + uint64_t x24; + fiat_p384_uint1 x25; + fiat_p384_subborrowx_u64(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_p384_subborrowx_u64(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_p384_subborrowx_u64(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_p384_subborrowx_u64(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_p384_subborrowx_u64(&x9, &x10, x8, 0x0, (arg1[4])); + fiat_p384_subborrowx_u64(&x11, &x12, x10, 0x0, (arg1[5])); + fiat_p384_cmovznz_u64(&x13, x12, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_p384_addcarryx_u64(&x14, &x15, 0x0, x1, (x13 & UINT32_C(0xffffffff))); + fiat_p384_addcarryx_u64(&x16, &x17, x15, x3, (x13 & UINT64_C(0xffffffff00000000))); + fiat_p384_addcarryx_u64(&x18, &x19, x17, x5, (x13 & UINT64_C(0xfffffffffffffffe))); + fiat_p384_addcarryx_u64(&x20, &x21, x19, x7, x13); + fiat_p384_addcarryx_u64(&x22, &x23, x21, x9, x13); + fiat_p384_addcarryx_u64(&x24, &x25, x23, x11, x13); + out1[0] = x14; + out1[1] = x16; + out1[2] = x18; + out1[3] = x20; + out1[4] = x22; + out1[5] = x24; +} + +/* + * The function fiat_p384_from_montgomery translates a field element out of the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^64)⁻¹ mod m)^6) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p384_from_montgomery(uint64_t out1[6], const uint64_t arg1[6]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + fiat_p384_uint1 x17; + uint64_t x18; + fiat_p384_uint1 x19; + uint64_t x20; + fiat_p384_uint1 x21; + uint64_t x22; + fiat_p384_uint1 x23; + uint64_t x24; + fiat_p384_uint1 x25; + uint64_t x26; + fiat_p384_uint1 x27; + uint64_t x28; + fiat_p384_uint1 x29; + uint64_t x30; + fiat_p384_uint1 x31; + uint64_t x32; + fiat_p384_uint1 x33; + uint64_t x34; + fiat_p384_uint1 x35; + uint64_t x36; + fiat_p384_uint1 x37; + uint64_t x38; + fiat_p384_uint1 x39; + uint64_t x40; + fiat_p384_uint1 x41; + uint64_t x42; + fiat_p384_uint1 x43; + uint64_t x44; + fiat_p384_uint1 x45; + uint64_t x46; + fiat_p384_uint1 x47; + uint64_t x48; + fiat_p384_uint1 x49; + uint64_t x50; + fiat_p384_uint1 x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint64_t x57; + uint64_t x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + uint64_t x65; + uint64_t x66; + fiat_p384_uint1 x67; + uint64_t x68; + fiat_p384_uint1 x69; + uint64_t x70; + fiat_p384_uint1 x71; + uint64_t x72; + fiat_p384_uint1 x73; + uint64_t x74; + fiat_p384_uint1 x75; + uint64_t x76; + fiat_p384_uint1 x77; + uint64_t x78; + fiat_p384_uint1 x79; + uint64_t x80; + fiat_p384_uint1 x81; + uint64_t x82; + fiat_p384_uint1 x83; + uint64_t x84; + fiat_p384_uint1 x85; + uint64_t x86; + fiat_p384_uint1 x87; + uint64_t x88; + fiat_p384_uint1 x89; + uint64_t x90; + fiat_p384_uint1 x91; + uint64_t x92; + fiat_p384_uint1 x93; + uint64_t x94; + fiat_p384_uint1 x95; + uint64_t x96; + fiat_p384_uint1 x97; + uint64_t x98; + fiat_p384_uint1 x99; + uint64_t x100; + fiat_p384_uint1 x101; + uint64_t x102; + uint64_t x103; + uint64_t x104; + uint64_t x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + uint64_t x109; + uint64_t x110; + uint64_t x111; + uint64_t x112; + uint64_t x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + fiat_p384_uint1 x117; + uint64_t x118; + fiat_p384_uint1 x119; + uint64_t x120; + fiat_p384_uint1 x121; + uint64_t x122; + fiat_p384_uint1 x123; + uint64_t x124; + fiat_p384_uint1 x125; + uint64_t x126; + fiat_p384_uint1 x127; + uint64_t x128; + fiat_p384_uint1 x129; + uint64_t x130; + fiat_p384_uint1 x131; + uint64_t x132; + fiat_p384_uint1 x133; + uint64_t x134; + fiat_p384_uint1 x135; + uint64_t x136; + fiat_p384_uint1 x137; + uint64_t x138; + fiat_p384_uint1 x139; + uint64_t x140; + fiat_p384_uint1 x141; + uint64_t x142; + fiat_p384_uint1 x143; + uint64_t x144; + fiat_p384_uint1 x145; + uint64_t x146; + fiat_p384_uint1 x147; + uint64_t x148; + fiat_p384_uint1 x149; + uint64_t x150; + fiat_p384_uint1 x151; + uint64_t x152; + uint64_t x153; + uint64_t x154; + uint64_t x155; + uint64_t x156; + uint64_t x157; + uint64_t x158; + uint64_t x159; + uint64_t x160; + uint64_t x161; + uint64_t x162; + uint64_t x163; + uint64_t x164; + uint64_t x165; + uint64_t x166; + fiat_p384_uint1 x167; + uint64_t x168; + fiat_p384_uint1 x169; + uint64_t x170; + fiat_p384_uint1 x171; + uint64_t x172; + fiat_p384_uint1 x173; + uint64_t x174; + fiat_p384_uint1 x175; + uint64_t x176; + fiat_p384_uint1 x177; + uint64_t x178; + fiat_p384_uint1 x179; + uint64_t x180; + fiat_p384_uint1 x181; + uint64_t x182; + fiat_p384_uint1 x183; + uint64_t x184; + fiat_p384_uint1 x185; + uint64_t x186; + fiat_p384_uint1 x187; + uint64_t x188; + fiat_p384_uint1 x189; + uint64_t x190; + fiat_p384_uint1 x191; + uint64_t x192; + fiat_p384_uint1 x193; + uint64_t x194; + fiat_p384_uint1 x195; + uint64_t x196; + fiat_p384_uint1 x197; + uint64_t x198; + fiat_p384_uint1 x199; + uint64_t x200; + fiat_p384_uint1 x201; + uint64_t x202; + uint64_t x203; + uint64_t x204; + uint64_t x205; + uint64_t x206; + uint64_t x207; + uint64_t x208; + uint64_t x209; + uint64_t x210; + uint64_t x211; + uint64_t x212; + uint64_t x213; + uint64_t x214; + uint64_t x215; + uint64_t x216; + fiat_p384_uint1 x217; + uint64_t x218; + fiat_p384_uint1 x219; + uint64_t x220; + fiat_p384_uint1 x221; + uint64_t x222; + fiat_p384_uint1 x223; + uint64_t x224; + fiat_p384_uint1 x225; + uint64_t x226; + fiat_p384_uint1 x227; + uint64_t x228; + fiat_p384_uint1 x229; + uint64_t x230; + fiat_p384_uint1 x231; + uint64_t x232; + fiat_p384_uint1 x233; + uint64_t x234; + fiat_p384_uint1 x235; + uint64_t x236; + fiat_p384_uint1 x237; + uint64_t x238; + fiat_p384_uint1 x239; + uint64_t x240; + fiat_p384_uint1 x241; + uint64_t x242; + fiat_p384_uint1 x243; + uint64_t x244; + fiat_p384_uint1 x245; + uint64_t x246; + fiat_p384_uint1 x247; + uint64_t x248; + fiat_p384_uint1 x249; + uint64_t x250; + fiat_p384_uint1 x251; + uint64_t x252; + uint64_t x253; + uint64_t x254; + uint64_t x255; + uint64_t x256; + uint64_t x257; + uint64_t x258; + uint64_t x259; + uint64_t x260; + uint64_t x261; + uint64_t x262; + uint64_t x263; + uint64_t x264; + uint64_t x265; + uint64_t x266; + fiat_p384_uint1 x267; + uint64_t x268; + fiat_p384_uint1 x269; + uint64_t x270; + fiat_p384_uint1 x271; + uint64_t x272; + fiat_p384_uint1 x273; + uint64_t x274; + fiat_p384_uint1 x275; + uint64_t x276; + fiat_p384_uint1 x277; + uint64_t x278; + fiat_p384_uint1 x279; + uint64_t x280; + fiat_p384_uint1 x281; + uint64_t x282; + fiat_p384_uint1 x283; + uint64_t x284; + fiat_p384_uint1 x285; + uint64_t x286; + fiat_p384_uint1 x287; + uint64_t x288; + fiat_p384_uint1 x289; + uint64_t x290; + fiat_p384_uint1 x291; + uint64_t x292; + fiat_p384_uint1 x293; + uint64_t x294; + fiat_p384_uint1 x295; + uint64_t x296; + fiat_p384_uint1 x297; + uint64_t x298; + fiat_p384_uint1 x299; + uint64_t x300; + fiat_p384_uint1 x301; + uint64_t x302; + fiat_p384_uint1 x303; + uint64_t x304; + uint64_t x305; + uint64_t x306; + uint64_t x307; + uint64_t x308; + uint64_t x309; + x1 = (arg1[0]); + fiat_p384_mulx_u64(&x2, &x3, x1, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x4, &x5, x2, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x6, &x7, x2, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x8, &x9, x2, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x10, &x11, x2, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x12, &x13, x2, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x14, &x15, x2, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x16, &x17, 0x0, x15, x12); + fiat_p384_addcarryx_u64(&x18, &x19, x17, x13, x10); + fiat_p384_addcarryx_u64(&x20, &x21, x19, x11, x8); + fiat_p384_addcarryx_u64(&x22, &x23, x21, x9, x6); + fiat_p384_addcarryx_u64(&x24, &x25, x23, x7, x4); + fiat_p384_addcarryx_u64(&x26, &x27, 0x0, x1, x14); + fiat_p384_addcarryx_u64(&x28, &x29, x27, 0x0, x16); + fiat_p384_addcarryx_u64(&x30, &x31, x29, 0x0, x18); + fiat_p384_addcarryx_u64(&x32, &x33, x31, 0x0, x20); + fiat_p384_addcarryx_u64(&x34, &x35, x33, 0x0, x22); + fiat_p384_addcarryx_u64(&x36, &x37, x35, 0x0, x24); + fiat_p384_addcarryx_u64(&x38, &x39, x37, 0x0, (x25 + x5)); + fiat_p384_addcarryx_u64(&x40, &x41, 0x0, x28, (arg1[1])); + fiat_p384_addcarryx_u64(&x42, &x43, x41, x30, 0x0); + fiat_p384_addcarryx_u64(&x44, &x45, x43, x32, 0x0); + fiat_p384_addcarryx_u64(&x46, &x47, x45, x34, 0x0); + fiat_p384_addcarryx_u64(&x48, &x49, x47, x36, 0x0); + fiat_p384_addcarryx_u64(&x50, &x51, x49, x38, 0x0); + fiat_p384_mulx_u64(&x52, &x53, x40, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x54, &x55, x52, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x56, &x57, x52, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x58, &x59, x52, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x60, &x61, x52, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x62, &x63, x52, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x64, &x65, x52, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x66, &x67, 0x0, x65, x62); + fiat_p384_addcarryx_u64(&x68, &x69, x67, x63, x60); + fiat_p384_addcarryx_u64(&x70, &x71, x69, x61, x58); + fiat_p384_addcarryx_u64(&x72, &x73, x71, x59, x56); + fiat_p384_addcarryx_u64(&x74, &x75, x73, x57, x54); + fiat_p384_addcarryx_u64(&x76, &x77, 0x0, x40, x64); + fiat_p384_addcarryx_u64(&x78, &x79, x77, x42, x66); + fiat_p384_addcarryx_u64(&x80, &x81, x79, x44, x68); + fiat_p384_addcarryx_u64(&x82, &x83, x81, x46, x70); + fiat_p384_addcarryx_u64(&x84, &x85, x83, x48, x72); + fiat_p384_addcarryx_u64(&x86, &x87, x85, x50, x74); + fiat_p384_addcarryx_u64(&x88, &x89, x87, ((uint64_t)x51 + x39), (x75 + x55)); + fiat_p384_addcarryx_u64(&x90, &x91, 0x0, x78, (arg1[2])); + fiat_p384_addcarryx_u64(&x92, &x93, x91, x80, 0x0); + fiat_p384_addcarryx_u64(&x94, &x95, x93, x82, 0x0); + fiat_p384_addcarryx_u64(&x96, &x97, x95, x84, 0x0); + fiat_p384_addcarryx_u64(&x98, &x99, x97, x86, 0x0); + fiat_p384_addcarryx_u64(&x100, &x101, x99, x88, 0x0); + fiat_p384_mulx_u64(&x102, &x103, x90, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x104, &x105, x102, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x106, &x107, x102, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x108, &x109, x102, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x110, &x111, x102, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x112, &x113, x102, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x114, &x115, x102, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x116, &x117, 0x0, x115, x112); + fiat_p384_addcarryx_u64(&x118, &x119, x117, x113, x110); + fiat_p384_addcarryx_u64(&x120, &x121, x119, x111, x108); + fiat_p384_addcarryx_u64(&x122, &x123, x121, x109, x106); + fiat_p384_addcarryx_u64(&x124, &x125, x123, x107, x104); + fiat_p384_addcarryx_u64(&x126, &x127, 0x0, x90, x114); + fiat_p384_addcarryx_u64(&x128, &x129, x127, x92, x116); + fiat_p384_addcarryx_u64(&x130, &x131, x129, x94, x118); + fiat_p384_addcarryx_u64(&x132, &x133, x131, x96, x120); + fiat_p384_addcarryx_u64(&x134, &x135, x133, x98, x122); + fiat_p384_addcarryx_u64(&x136, &x137, x135, x100, x124); + fiat_p384_addcarryx_u64(&x138, &x139, x137, ((uint64_t)x101 + x89), (x125 + x105)); + fiat_p384_addcarryx_u64(&x140, &x141, 0x0, x128, (arg1[3])); + fiat_p384_addcarryx_u64(&x142, &x143, x141, x130, 0x0); + fiat_p384_addcarryx_u64(&x144, &x145, x143, x132, 0x0); + fiat_p384_addcarryx_u64(&x146, &x147, x145, x134, 0x0); + fiat_p384_addcarryx_u64(&x148, &x149, x147, x136, 0x0); + fiat_p384_addcarryx_u64(&x150, &x151, x149, x138, 0x0); + fiat_p384_mulx_u64(&x152, &x153, x140, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x154, &x155, x152, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x156, &x157, x152, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x158, &x159, x152, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x160, &x161, x152, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x162, &x163, x152, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x164, &x165, x152, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x166, &x167, 0x0, x165, x162); + fiat_p384_addcarryx_u64(&x168, &x169, x167, x163, x160); + fiat_p384_addcarryx_u64(&x170, &x171, x169, x161, x158); + fiat_p384_addcarryx_u64(&x172, &x173, x171, x159, x156); + fiat_p384_addcarryx_u64(&x174, &x175, x173, x157, x154); + fiat_p384_addcarryx_u64(&x176, &x177, 0x0, x140, x164); + fiat_p384_addcarryx_u64(&x178, &x179, x177, x142, x166); + fiat_p384_addcarryx_u64(&x180, &x181, x179, x144, x168); + fiat_p384_addcarryx_u64(&x182, &x183, x181, x146, x170); + fiat_p384_addcarryx_u64(&x184, &x185, x183, x148, x172); + fiat_p384_addcarryx_u64(&x186, &x187, x185, x150, x174); + fiat_p384_addcarryx_u64(&x188, &x189, x187, ((uint64_t)x151 + x139), (x175 + x155)); + fiat_p384_addcarryx_u64(&x190, &x191, 0x0, x178, (arg1[4])); + fiat_p384_addcarryx_u64(&x192, &x193, x191, x180, 0x0); + fiat_p384_addcarryx_u64(&x194, &x195, x193, x182, 0x0); + fiat_p384_addcarryx_u64(&x196, &x197, x195, x184, 0x0); + fiat_p384_addcarryx_u64(&x198, &x199, x197, x186, 0x0); + fiat_p384_addcarryx_u64(&x200, &x201, x199, x188, 0x0); + fiat_p384_mulx_u64(&x202, &x203, x190, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x204, &x205, x202, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x206, &x207, x202, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x208, &x209, x202, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x210, &x211, x202, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x212, &x213, x202, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x214, &x215, x202, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x216, &x217, 0x0, x215, x212); + fiat_p384_addcarryx_u64(&x218, &x219, x217, x213, x210); + fiat_p384_addcarryx_u64(&x220, &x221, x219, x211, x208); + fiat_p384_addcarryx_u64(&x222, &x223, x221, x209, x206); + fiat_p384_addcarryx_u64(&x224, &x225, x223, x207, x204); + fiat_p384_addcarryx_u64(&x226, &x227, 0x0, x190, x214); + fiat_p384_addcarryx_u64(&x228, &x229, x227, x192, x216); + fiat_p384_addcarryx_u64(&x230, &x231, x229, x194, x218); + fiat_p384_addcarryx_u64(&x232, &x233, x231, x196, x220); + fiat_p384_addcarryx_u64(&x234, &x235, x233, x198, x222); + fiat_p384_addcarryx_u64(&x236, &x237, x235, x200, x224); + fiat_p384_addcarryx_u64(&x238, &x239, x237, ((uint64_t)x201 + x189), (x225 + x205)); + fiat_p384_addcarryx_u64(&x240, &x241, 0x0, x228, (arg1[5])); + fiat_p384_addcarryx_u64(&x242, &x243, x241, x230, 0x0); + fiat_p384_addcarryx_u64(&x244, &x245, x243, x232, 0x0); + fiat_p384_addcarryx_u64(&x246, &x247, x245, x234, 0x0); + fiat_p384_addcarryx_u64(&x248, &x249, x247, x236, 0x0); + fiat_p384_addcarryx_u64(&x250, &x251, x249, x238, 0x0); + fiat_p384_mulx_u64(&x252, &x253, x240, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x254, &x255, x252, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x256, &x257, x252, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x258, &x259, x252, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x260, &x261, x252, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x262, &x263, x252, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x264, &x265, x252, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x266, &x267, 0x0, x265, x262); + fiat_p384_addcarryx_u64(&x268, &x269, x267, x263, x260); + fiat_p384_addcarryx_u64(&x270, &x271, x269, x261, x258); + fiat_p384_addcarryx_u64(&x272, &x273, x271, x259, x256); + fiat_p384_addcarryx_u64(&x274, &x275, x273, x257, x254); + fiat_p384_addcarryx_u64(&x276, &x277, 0x0, x240, x264); + fiat_p384_addcarryx_u64(&x278, &x279, x277, x242, x266); + fiat_p384_addcarryx_u64(&x280, &x281, x279, x244, x268); + fiat_p384_addcarryx_u64(&x282, &x283, x281, x246, x270); + fiat_p384_addcarryx_u64(&x284, &x285, x283, x248, x272); + fiat_p384_addcarryx_u64(&x286, &x287, x285, x250, x274); + fiat_p384_addcarryx_u64(&x288, &x289, x287, ((uint64_t)x251 + x239), (x275 + x255)); + fiat_p384_subborrowx_u64(&x290, &x291, 0x0, x278, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u64(&x292, &x293, x291, x280, UINT64_C(0xffffffff00000000)); + fiat_p384_subborrowx_u64(&x294, &x295, x293, x282, UINT64_C(0xfffffffffffffffe)); + fiat_p384_subborrowx_u64(&x296, &x297, x295, x284, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x298, &x299, x297, x286, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x300, &x301, x299, x288, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x302, &x303, x301, x289, 0x0); + fiat_p384_cmovznz_u64(&x304, x303, x290, x278); + fiat_p384_cmovznz_u64(&x305, x303, x292, x280); + fiat_p384_cmovznz_u64(&x306, x303, x294, x282); + fiat_p384_cmovznz_u64(&x307, x303, x296, x284); + fiat_p384_cmovznz_u64(&x308, x303, x298, x286); + fiat_p384_cmovznz_u64(&x309, x303, x300, x288); + out1[0] = x304; + out1[1] = x305; + out1[2] = x306; + out1[3] = x307; + out1[4] = x308; + out1[5] = x309; +} + +/* + * The function fiat_p384_to_montgomery translates a field element into the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p384_to_montgomery(uint64_t out1[6], const uint64_t arg1[6]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + fiat_p384_uint1 x16; + uint64_t x17; + fiat_p384_uint1 x18; + uint64_t x19; + fiat_p384_uint1 x20; + uint64_t x21; + fiat_p384_uint1 x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint64_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + fiat_p384_uint1 x38; + uint64_t x39; + fiat_p384_uint1 x40; + uint64_t x41; + fiat_p384_uint1 x42; + uint64_t x43; + fiat_p384_uint1 x44; + uint64_t x45; + fiat_p384_uint1 x46; + uint64_t x47; + fiat_p384_uint1 x48; + uint64_t x49; + fiat_p384_uint1 x50; + uint64_t x51; + fiat_p384_uint1 x52; + uint64_t x53; + fiat_p384_uint1 x54; + uint64_t x55; + fiat_p384_uint1 x56; + uint64_t x57; + fiat_p384_uint1 x58; + uint64_t x59; + fiat_p384_uint1 x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + uint64_t x65; + uint64_t x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + fiat_p384_uint1 x70; + uint64_t x71; + fiat_p384_uint1 x72; + uint64_t x73; + fiat_p384_uint1 x74; + uint64_t x75; + fiat_p384_uint1 x76; + uint64_t x77; + fiat_p384_uint1 x78; + uint64_t x79; + fiat_p384_uint1 x80; + uint64_t x81; + fiat_p384_uint1 x82; + uint64_t x83; + fiat_p384_uint1 x84; + uint64_t x85; + fiat_p384_uint1 x86; + uint64_t x87; + fiat_p384_uint1 x88; + uint64_t x89; + uint64_t x90; + uint64_t x91; + uint64_t x92; + uint64_t x93; + uint64_t x94; + uint64_t x95; + uint64_t x96; + uint64_t x97; + uint64_t x98; + uint64_t x99; + uint64_t x100; + uint64_t x101; + uint64_t x102; + uint64_t x103; + fiat_p384_uint1 x104; + uint64_t x105; + fiat_p384_uint1 x106; + uint64_t x107; + fiat_p384_uint1 x108; + uint64_t x109; + fiat_p384_uint1 x110; + uint64_t x111; + fiat_p384_uint1 x112; + uint64_t x113; + fiat_p384_uint1 x114; + uint64_t x115; + fiat_p384_uint1 x116; + uint64_t x117; + fiat_p384_uint1 x118; + uint64_t x119; + fiat_p384_uint1 x120; + uint64_t x121; + fiat_p384_uint1 x122; + uint64_t x123; + fiat_p384_uint1 x124; + uint64_t x125; + fiat_p384_uint1 x126; + uint64_t x127; + uint64_t x128; + uint64_t x129; + uint64_t x130; + uint64_t x131; + uint64_t x132; + uint64_t x133; + uint64_t x134; + uint64_t x135; + fiat_p384_uint1 x136; + uint64_t x137; + fiat_p384_uint1 x138; + uint64_t x139; + fiat_p384_uint1 x140; + uint64_t x141; + fiat_p384_uint1 x142; + uint64_t x143; + fiat_p384_uint1 x144; + uint64_t x145; + fiat_p384_uint1 x146; + uint64_t x147; + fiat_p384_uint1 x148; + uint64_t x149; + fiat_p384_uint1 x150; + uint64_t x151; + fiat_p384_uint1 x152; + uint64_t x153; + fiat_p384_uint1 x154; + uint64_t x155; + uint64_t x156; + uint64_t x157; + uint64_t x158; + uint64_t x159; + uint64_t x160; + uint64_t x161; + uint64_t x162; + uint64_t x163; + uint64_t x164; + uint64_t x165; + uint64_t x166; + uint64_t x167; + uint64_t x168; + uint64_t x169; + fiat_p384_uint1 x170; + uint64_t x171; + fiat_p384_uint1 x172; + uint64_t x173; + fiat_p384_uint1 x174; + uint64_t x175; + fiat_p384_uint1 x176; + uint64_t x177; + fiat_p384_uint1 x178; + uint64_t x179; + fiat_p384_uint1 x180; + uint64_t x181; + fiat_p384_uint1 x182; + uint64_t x183; + fiat_p384_uint1 x184; + uint64_t x185; + fiat_p384_uint1 x186; + uint64_t x187; + fiat_p384_uint1 x188; + uint64_t x189; + fiat_p384_uint1 x190; + uint64_t x191; + fiat_p384_uint1 x192; + uint64_t x193; + uint64_t x194; + uint64_t x195; + uint64_t x196; + uint64_t x197; + uint64_t x198; + uint64_t x199; + uint64_t x200; + uint64_t x201; + fiat_p384_uint1 x202; + uint64_t x203; + fiat_p384_uint1 x204; + uint64_t x205; + fiat_p384_uint1 x206; + uint64_t x207; + fiat_p384_uint1 x208; + uint64_t x209; + fiat_p384_uint1 x210; + uint64_t x211; + fiat_p384_uint1 x212; + uint64_t x213; + fiat_p384_uint1 x214; + uint64_t x215; + fiat_p384_uint1 x216; + uint64_t x217; + fiat_p384_uint1 x218; + uint64_t x219; + fiat_p384_uint1 x220; + uint64_t x221; + uint64_t x222; + uint64_t x223; + uint64_t x224; + uint64_t x225; + uint64_t x226; + uint64_t x227; + uint64_t x228; + uint64_t x229; + uint64_t x230; + uint64_t x231; + uint64_t x232; + uint64_t x233; + uint64_t x234; + uint64_t x235; + fiat_p384_uint1 x236; + uint64_t x237; + fiat_p384_uint1 x238; + uint64_t x239; + fiat_p384_uint1 x240; + uint64_t x241; + fiat_p384_uint1 x242; + uint64_t x243; + fiat_p384_uint1 x244; + uint64_t x245; + fiat_p384_uint1 x246; + uint64_t x247; + fiat_p384_uint1 x248; + uint64_t x249; + fiat_p384_uint1 x250; + uint64_t x251; + fiat_p384_uint1 x252; + uint64_t x253; + fiat_p384_uint1 x254; + uint64_t x255; + fiat_p384_uint1 x256; + uint64_t x257; + fiat_p384_uint1 x258; + uint64_t x259; + uint64_t x260; + uint64_t x261; + uint64_t x262; + uint64_t x263; + uint64_t x264; + uint64_t x265; + uint64_t x266; + uint64_t x267; + fiat_p384_uint1 x268; + uint64_t x269; + fiat_p384_uint1 x270; + uint64_t x271; + fiat_p384_uint1 x272; + uint64_t x273; + fiat_p384_uint1 x274; + uint64_t x275; + fiat_p384_uint1 x276; + uint64_t x277; + fiat_p384_uint1 x278; + uint64_t x279; + fiat_p384_uint1 x280; + uint64_t x281; + fiat_p384_uint1 x282; + uint64_t x283; + fiat_p384_uint1 x284; + uint64_t x285; + fiat_p384_uint1 x286; + uint64_t x287; + uint64_t x288; + uint64_t x289; + uint64_t x290; + uint64_t x291; + uint64_t x292; + uint64_t x293; + uint64_t x294; + uint64_t x295; + uint64_t x296; + uint64_t x297; + uint64_t x298; + uint64_t x299; + uint64_t x300; + uint64_t x301; + fiat_p384_uint1 x302; + uint64_t x303; + fiat_p384_uint1 x304; + uint64_t x305; + fiat_p384_uint1 x306; + uint64_t x307; + fiat_p384_uint1 x308; + uint64_t x309; + fiat_p384_uint1 x310; + uint64_t x311; + fiat_p384_uint1 x312; + uint64_t x313; + fiat_p384_uint1 x314; + uint64_t x315; + fiat_p384_uint1 x316; + uint64_t x317; + fiat_p384_uint1 x318; + uint64_t x319; + fiat_p384_uint1 x320; + uint64_t x321; + fiat_p384_uint1 x322; + uint64_t x323; + fiat_p384_uint1 x324; + uint64_t x325; + uint64_t x326; + uint64_t x327; + uint64_t x328; + uint64_t x329; + uint64_t x330; + uint64_t x331; + uint64_t x332; + uint64_t x333; + fiat_p384_uint1 x334; + uint64_t x335; + fiat_p384_uint1 x336; + uint64_t x337; + fiat_p384_uint1 x338; + uint64_t x339; + fiat_p384_uint1 x340; + uint64_t x341; + fiat_p384_uint1 x342; + uint64_t x343; + fiat_p384_uint1 x344; + uint64_t x345; + fiat_p384_uint1 x346; + uint64_t x347; + fiat_p384_uint1 x348; + uint64_t x349; + fiat_p384_uint1 x350; + uint64_t x351; + fiat_p384_uint1 x352; + uint64_t x353; + uint64_t x354; + uint64_t x355; + uint64_t x356; + uint64_t x357; + uint64_t x358; + uint64_t x359; + uint64_t x360; + uint64_t x361; + uint64_t x362; + uint64_t x363; + uint64_t x364; + uint64_t x365; + uint64_t x366; + uint64_t x367; + fiat_p384_uint1 x368; + uint64_t x369; + fiat_p384_uint1 x370; + uint64_t x371; + fiat_p384_uint1 x372; + uint64_t x373; + fiat_p384_uint1 x374; + uint64_t x375; + fiat_p384_uint1 x376; + uint64_t x377; + fiat_p384_uint1 x378; + uint64_t x379; + fiat_p384_uint1 x380; + uint64_t x381; + fiat_p384_uint1 x382; + uint64_t x383; + fiat_p384_uint1 x384; + uint64_t x385; + fiat_p384_uint1 x386; + uint64_t x387; + fiat_p384_uint1 x388; + uint64_t x389; + fiat_p384_uint1 x390; + uint64_t x391; + fiat_p384_uint1 x392; + uint64_t x393; + fiat_p384_uint1 x394; + uint64_t x395; + fiat_p384_uint1 x396; + uint64_t x397; + fiat_p384_uint1 x398; + uint64_t x399; + fiat_p384_uint1 x400; + uint64_t x401; + fiat_p384_uint1 x402; + uint64_t x403; + fiat_p384_uint1 x404; + uint64_t x405; + uint64_t x406; + uint64_t x407; + uint64_t x408; + uint64_t x409; + uint64_t x410; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[0]); + fiat_p384_mulx_u64(&x7, &x8, x6, UINT64_C(0x200000000)); + fiat_p384_mulx_u64(&x9, &x10, x6, UINT64_C(0xfffffffe00000000)); + fiat_p384_mulx_u64(&x11, &x12, x6, UINT64_C(0x200000000)); + fiat_p384_mulx_u64(&x13, &x14, x6, UINT64_C(0xfffffffe00000001)); + fiat_p384_addcarryx_u64(&x15, &x16, 0x0, x14, x11); + fiat_p384_addcarryx_u64(&x17, &x18, x16, x12, x9); + fiat_p384_addcarryx_u64(&x19, &x20, x18, x10, x7); + fiat_p384_addcarryx_u64(&x21, &x22, x20, x8, x6); + fiat_p384_mulx_u64(&x23, &x24, x13, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x25, &x26, x23, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x27, &x28, x23, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x29, &x30, x23, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x31, &x32, x23, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x33, &x34, x23, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x35, &x36, x23, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x37, &x38, 0x0, x36, x33); + fiat_p384_addcarryx_u64(&x39, &x40, x38, x34, x31); + fiat_p384_addcarryx_u64(&x41, &x42, x40, x32, x29); + fiat_p384_addcarryx_u64(&x43, &x44, x42, x30, x27); + fiat_p384_addcarryx_u64(&x45, &x46, x44, x28, x25); + fiat_p384_addcarryx_u64(&x47, &x48, 0x0, x13, x35); + fiat_p384_addcarryx_u64(&x49, &x50, x48, x15, x37); + fiat_p384_addcarryx_u64(&x51, &x52, x50, x17, x39); + fiat_p384_addcarryx_u64(&x53, &x54, x52, x19, x41); + fiat_p384_addcarryx_u64(&x55, &x56, x54, x21, x43); + fiat_p384_addcarryx_u64(&x57, &x58, x56, x22, x45); + fiat_p384_addcarryx_u64(&x59, &x60, x58, 0x0, (x46 + x26)); + fiat_p384_mulx_u64(&x61, &x62, x1, UINT64_C(0x200000000)); + fiat_p384_mulx_u64(&x63, &x64, x1, UINT64_C(0xfffffffe00000000)); + fiat_p384_mulx_u64(&x65, &x66, x1, UINT64_C(0x200000000)); + fiat_p384_mulx_u64(&x67, &x68, x1, UINT64_C(0xfffffffe00000001)); + fiat_p384_addcarryx_u64(&x69, &x70, 0x0, x68, x65); + fiat_p384_addcarryx_u64(&x71, &x72, x70, x66, x63); + fiat_p384_addcarryx_u64(&x73, &x74, x72, x64, x61); + fiat_p384_addcarryx_u64(&x75, &x76, x74, x62, x1); + fiat_p384_addcarryx_u64(&x77, &x78, 0x0, x49, x67); + fiat_p384_addcarryx_u64(&x79, &x80, x78, x51, x69); + fiat_p384_addcarryx_u64(&x81, &x82, x80, x53, x71); + fiat_p384_addcarryx_u64(&x83, &x84, x82, x55, x73); + fiat_p384_addcarryx_u64(&x85, &x86, x84, x57, x75); + fiat_p384_addcarryx_u64(&x87, &x88, x86, x59, x76); + fiat_p384_mulx_u64(&x89, &x90, x77, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x91, &x92, x89, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x93, &x94, x89, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x95, &x96, x89, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x97, &x98, x89, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x99, &x100, x89, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x101, &x102, x89, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x103, &x104, 0x0, x102, x99); + fiat_p384_addcarryx_u64(&x105, &x106, x104, x100, x97); + fiat_p384_addcarryx_u64(&x107, &x108, x106, x98, x95); + fiat_p384_addcarryx_u64(&x109, &x110, x108, x96, x93); + fiat_p384_addcarryx_u64(&x111, &x112, x110, x94, x91); + fiat_p384_addcarryx_u64(&x113, &x114, 0x0, x77, x101); + fiat_p384_addcarryx_u64(&x115, &x116, x114, x79, x103); + fiat_p384_addcarryx_u64(&x117, &x118, x116, x81, x105); + fiat_p384_addcarryx_u64(&x119, &x120, x118, x83, x107); + fiat_p384_addcarryx_u64(&x121, &x122, x120, x85, x109); + fiat_p384_addcarryx_u64(&x123, &x124, x122, x87, x111); + fiat_p384_addcarryx_u64(&x125, &x126, x124, ((uint64_t)x88 + x60), (x112 + x92)); + fiat_p384_mulx_u64(&x127, &x128, x2, UINT64_C(0x200000000)); + fiat_p384_mulx_u64(&x129, &x130, x2, UINT64_C(0xfffffffe00000000)); + fiat_p384_mulx_u64(&x131, &x132, x2, UINT64_C(0x200000000)); + fiat_p384_mulx_u64(&x133, &x134, x2, UINT64_C(0xfffffffe00000001)); + fiat_p384_addcarryx_u64(&x135, &x136, 0x0, x134, x131); + fiat_p384_addcarryx_u64(&x137, &x138, x136, x132, x129); + fiat_p384_addcarryx_u64(&x139, &x140, x138, x130, x127); + fiat_p384_addcarryx_u64(&x141, &x142, x140, x128, x2); + fiat_p384_addcarryx_u64(&x143, &x144, 0x0, x115, x133); + fiat_p384_addcarryx_u64(&x145, &x146, x144, x117, x135); + fiat_p384_addcarryx_u64(&x147, &x148, x146, x119, x137); + fiat_p384_addcarryx_u64(&x149, &x150, x148, x121, x139); + fiat_p384_addcarryx_u64(&x151, &x152, x150, x123, x141); + fiat_p384_addcarryx_u64(&x153, &x154, x152, x125, x142); + fiat_p384_mulx_u64(&x155, &x156, x143, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x157, &x158, x155, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x159, &x160, x155, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x161, &x162, x155, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x163, &x164, x155, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x165, &x166, x155, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x167, &x168, x155, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x169, &x170, 0x0, x168, x165); + fiat_p384_addcarryx_u64(&x171, &x172, x170, x166, x163); + fiat_p384_addcarryx_u64(&x173, &x174, x172, x164, x161); + fiat_p384_addcarryx_u64(&x175, &x176, x174, x162, x159); + fiat_p384_addcarryx_u64(&x177, &x178, x176, x160, x157); + fiat_p384_addcarryx_u64(&x179, &x180, 0x0, x143, x167); + fiat_p384_addcarryx_u64(&x181, &x182, x180, x145, x169); + fiat_p384_addcarryx_u64(&x183, &x184, x182, x147, x171); + fiat_p384_addcarryx_u64(&x185, &x186, x184, x149, x173); + fiat_p384_addcarryx_u64(&x187, &x188, x186, x151, x175); + fiat_p384_addcarryx_u64(&x189, &x190, x188, x153, x177); + fiat_p384_addcarryx_u64(&x191, &x192, x190, ((uint64_t)x154 + x126), (x178 + x158)); + fiat_p384_mulx_u64(&x193, &x194, x3, UINT64_C(0x200000000)); + fiat_p384_mulx_u64(&x195, &x196, x3, UINT64_C(0xfffffffe00000000)); + fiat_p384_mulx_u64(&x197, &x198, x3, UINT64_C(0x200000000)); + fiat_p384_mulx_u64(&x199, &x200, x3, UINT64_C(0xfffffffe00000001)); + fiat_p384_addcarryx_u64(&x201, &x202, 0x0, x200, x197); + fiat_p384_addcarryx_u64(&x203, &x204, x202, x198, x195); + fiat_p384_addcarryx_u64(&x205, &x206, x204, x196, x193); + fiat_p384_addcarryx_u64(&x207, &x208, x206, x194, x3); + fiat_p384_addcarryx_u64(&x209, &x210, 0x0, x181, x199); + fiat_p384_addcarryx_u64(&x211, &x212, x210, x183, x201); + fiat_p384_addcarryx_u64(&x213, &x214, x212, x185, x203); + fiat_p384_addcarryx_u64(&x215, &x216, x214, x187, x205); + fiat_p384_addcarryx_u64(&x217, &x218, x216, x189, x207); + fiat_p384_addcarryx_u64(&x219, &x220, x218, x191, x208); + fiat_p384_mulx_u64(&x221, &x222, x209, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x223, &x224, x221, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x225, &x226, x221, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x227, &x228, x221, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x229, &x230, x221, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x231, &x232, x221, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x233, &x234, x221, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x235, &x236, 0x0, x234, x231); + fiat_p384_addcarryx_u64(&x237, &x238, x236, x232, x229); + fiat_p384_addcarryx_u64(&x239, &x240, x238, x230, x227); + fiat_p384_addcarryx_u64(&x241, &x242, x240, x228, x225); + fiat_p384_addcarryx_u64(&x243, &x244, x242, x226, x223); + fiat_p384_addcarryx_u64(&x245, &x246, 0x0, x209, x233); + fiat_p384_addcarryx_u64(&x247, &x248, x246, x211, x235); + fiat_p384_addcarryx_u64(&x249, &x250, x248, x213, x237); + fiat_p384_addcarryx_u64(&x251, &x252, x250, x215, x239); + fiat_p384_addcarryx_u64(&x253, &x254, x252, x217, x241); + fiat_p384_addcarryx_u64(&x255, &x256, x254, x219, x243); + fiat_p384_addcarryx_u64(&x257, &x258, x256, ((uint64_t)x220 + x192), (x244 + x224)); + fiat_p384_mulx_u64(&x259, &x260, x4, UINT64_C(0x200000000)); + fiat_p384_mulx_u64(&x261, &x262, x4, UINT64_C(0xfffffffe00000000)); + fiat_p384_mulx_u64(&x263, &x264, x4, UINT64_C(0x200000000)); + fiat_p384_mulx_u64(&x265, &x266, x4, UINT64_C(0xfffffffe00000001)); + fiat_p384_addcarryx_u64(&x267, &x268, 0x0, x266, x263); + fiat_p384_addcarryx_u64(&x269, &x270, x268, x264, x261); + fiat_p384_addcarryx_u64(&x271, &x272, x270, x262, x259); + fiat_p384_addcarryx_u64(&x273, &x274, x272, x260, x4); + fiat_p384_addcarryx_u64(&x275, &x276, 0x0, x247, x265); + fiat_p384_addcarryx_u64(&x277, &x278, x276, x249, x267); + fiat_p384_addcarryx_u64(&x279, &x280, x278, x251, x269); + fiat_p384_addcarryx_u64(&x281, &x282, x280, x253, x271); + fiat_p384_addcarryx_u64(&x283, &x284, x282, x255, x273); + fiat_p384_addcarryx_u64(&x285, &x286, x284, x257, x274); + fiat_p384_mulx_u64(&x287, &x288, x275, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x289, &x290, x287, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x291, &x292, x287, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x293, &x294, x287, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x295, &x296, x287, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x297, &x298, x287, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x299, &x300, x287, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x301, &x302, 0x0, x300, x297); + fiat_p384_addcarryx_u64(&x303, &x304, x302, x298, x295); + fiat_p384_addcarryx_u64(&x305, &x306, x304, x296, x293); + fiat_p384_addcarryx_u64(&x307, &x308, x306, x294, x291); + fiat_p384_addcarryx_u64(&x309, &x310, x308, x292, x289); + fiat_p384_addcarryx_u64(&x311, &x312, 0x0, x275, x299); + fiat_p384_addcarryx_u64(&x313, &x314, x312, x277, x301); + fiat_p384_addcarryx_u64(&x315, &x316, x314, x279, x303); + fiat_p384_addcarryx_u64(&x317, &x318, x316, x281, x305); + fiat_p384_addcarryx_u64(&x319, &x320, x318, x283, x307); + fiat_p384_addcarryx_u64(&x321, &x322, x320, x285, x309); + fiat_p384_addcarryx_u64(&x323, &x324, x322, ((uint64_t)x286 + x258), (x310 + x290)); + fiat_p384_mulx_u64(&x325, &x326, x5, UINT64_C(0x200000000)); + fiat_p384_mulx_u64(&x327, &x328, x5, UINT64_C(0xfffffffe00000000)); + fiat_p384_mulx_u64(&x329, &x330, x5, UINT64_C(0x200000000)); + fiat_p384_mulx_u64(&x331, &x332, x5, UINT64_C(0xfffffffe00000001)); + fiat_p384_addcarryx_u64(&x333, &x334, 0x0, x332, x329); + fiat_p384_addcarryx_u64(&x335, &x336, x334, x330, x327); + fiat_p384_addcarryx_u64(&x337, &x338, x336, x328, x325); + fiat_p384_addcarryx_u64(&x339, &x340, x338, x326, x5); + fiat_p384_addcarryx_u64(&x341, &x342, 0x0, x313, x331); + fiat_p384_addcarryx_u64(&x343, &x344, x342, x315, x333); + fiat_p384_addcarryx_u64(&x345, &x346, x344, x317, x335); + fiat_p384_addcarryx_u64(&x347, &x348, x346, x319, x337); + fiat_p384_addcarryx_u64(&x349, &x350, x348, x321, x339); + fiat_p384_addcarryx_u64(&x351, &x352, x350, x323, x340); + fiat_p384_mulx_u64(&x353, &x354, x341, UINT64_C(0x100000001)); + fiat_p384_mulx_u64(&x355, &x356, x353, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x357, &x358, x353, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x359, &x360, x353, UINT64_C(0xffffffffffffffff)); + fiat_p384_mulx_u64(&x361, &x362, x353, UINT64_C(0xfffffffffffffffe)); + fiat_p384_mulx_u64(&x363, &x364, x353, UINT64_C(0xffffffff00000000)); + fiat_p384_mulx_u64(&x365, &x366, x353, UINT32_C(0xffffffff)); + fiat_p384_addcarryx_u64(&x367, &x368, 0x0, x366, x363); + fiat_p384_addcarryx_u64(&x369, &x370, x368, x364, x361); + fiat_p384_addcarryx_u64(&x371, &x372, x370, x362, x359); + fiat_p384_addcarryx_u64(&x373, &x374, x372, x360, x357); + fiat_p384_addcarryx_u64(&x375, &x376, x374, x358, x355); + fiat_p384_addcarryx_u64(&x377, &x378, 0x0, x341, x365); + fiat_p384_addcarryx_u64(&x379, &x380, x378, x343, x367); + fiat_p384_addcarryx_u64(&x381, &x382, x380, x345, x369); + fiat_p384_addcarryx_u64(&x383, &x384, x382, x347, x371); + fiat_p384_addcarryx_u64(&x385, &x386, x384, x349, x373); + fiat_p384_addcarryx_u64(&x387, &x388, x386, x351, x375); + fiat_p384_addcarryx_u64(&x389, &x390, x388, ((uint64_t)x352 + x324), (x376 + x356)); + fiat_p384_subborrowx_u64(&x391, &x392, 0x0, x379, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u64(&x393, &x394, x392, x381, UINT64_C(0xffffffff00000000)); + fiat_p384_subborrowx_u64(&x395, &x396, x394, x383, UINT64_C(0xfffffffffffffffe)); + fiat_p384_subborrowx_u64(&x397, &x398, x396, x385, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x399, &x400, x398, x387, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x401, &x402, x400, x389, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x403, &x404, x402, x390, 0x0); + fiat_p384_cmovznz_u64(&x405, x404, x391, x379); + fiat_p384_cmovznz_u64(&x406, x404, x393, x381); + fiat_p384_cmovznz_u64(&x407, x404, x395, x383); + fiat_p384_cmovznz_u64(&x408, x404, x397, x385); + fiat_p384_cmovznz_u64(&x409, x404, x399, x387); + fiat_p384_cmovznz_u64(&x410, x404, x401, x389); + out1[0] = x405; + out1[1] = x406; + out1[2] = x407; + out1[3] = x408; + out1[4] = x409; + out1[5] = x410; +} + +/* + * The function fiat_p384_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_p384_nonzero(uint64_t* out1, const uint64_t arg1[6]) { + uint64_t x1; + x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | ((arg1[4]) | (arg1[5])))))); + *out1 = x1; +} + +/* + * The function fiat_p384_selectznz is a multi-limb conditional select. + * Postconditions: + * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p384_selectznz(uint64_t out1[6], fiat_p384_uint1 arg1, const uint64_t arg2[6], const uint64_t arg3[6]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + fiat_p384_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0])); + fiat_p384_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1])); + fiat_p384_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2])); + fiat_p384_cmovznz_u64(&x4, arg1, (arg2[3]), (arg3[3])); + fiat_p384_cmovznz_u64(&x5, arg1, (arg2[4]), (arg3[4])); + fiat_p384_cmovznz_u64(&x6, arg1, (arg2[5]), (arg3[5])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; +} + +/* + * The function fiat_p384_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..47] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + */ +static void fiat_p384_to_bytes(uint8_t out1[48], const uint64_t arg1[6]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint8_t x7; + uint64_t x8; + uint8_t x9; + uint64_t x10; + uint8_t x11; + uint64_t x12; + uint8_t x13; + uint64_t x14; + uint8_t x15; + uint64_t x16; + uint8_t x17; + uint64_t x18; + uint8_t x19; + uint8_t x20; + uint8_t x21; + uint64_t x22; + uint8_t x23; + uint64_t x24; + uint8_t x25; + uint64_t x26; + uint8_t x27; + uint64_t x28; + uint8_t x29; + uint64_t x30; + uint8_t x31; + uint64_t x32; + uint8_t x33; + uint8_t x34; + uint8_t x35; + uint64_t x36; + uint8_t x37; + uint64_t x38; + uint8_t x39; + uint64_t x40; + uint8_t x41; + uint64_t x42; + uint8_t x43; + uint64_t x44; + uint8_t x45; + uint64_t x46; + uint8_t x47; + uint8_t x48; + uint8_t x49; + uint64_t x50; + uint8_t x51; + uint64_t x52; + uint8_t x53; + uint64_t x54; + uint8_t x55; + uint64_t x56; + uint8_t x57; + uint64_t x58; + uint8_t x59; + uint64_t x60; + uint8_t x61; + uint8_t x62; + uint8_t x63; + uint64_t x64; + uint8_t x65; + uint64_t x66; + uint8_t x67; + uint64_t x68; + uint8_t x69; + uint64_t x70; + uint8_t x71; + uint64_t x72; + uint8_t x73; + uint64_t x74; + uint8_t x75; + uint8_t x76; + uint8_t x77; + uint64_t x78; + uint8_t x79; + uint64_t x80; + uint8_t x81; + uint64_t x82; + uint8_t x83; + uint64_t x84; + uint8_t x85; + uint64_t x86; + uint8_t x87; + uint64_t x88; + uint8_t x89; + uint8_t x90; + x1 = (arg1[5]); + x2 = (arg1[4]); + x3 = (arg1[3]); + x4 = (arg1[2]); + x5 = (arg1[1]); + x6 = (arg1[0]); + x7 = (uint8_t)(x6 & UINT8_C(0xff)); + x8 = (x6 >> 8); + x9 = (uint8_t)(x8 & UINT8_C(0xff)); + x10 = (x8 >> 8); + x11 = (uint8_t)(x10 & UINT8_C(0xff)); + x12 = (x10 >> 8); + x13 = (uint8_t)(x12 & UINT8_C(0xff)); + x14 = (x12 >> 8); + x15 = (uint8_t)(x14 & UINT8_C(0xff)); + x16 = (x14 >> 8); + x17 = (uint8_t)(x16 & UINT8_C(0xff)); + x18 = (x16 >> 8); + x19 = (uint8_t)(x18 & UINT8_C(0xff)); + x20 = (uint8_t)(x18 >> 8); + x21 = (uint8_t)(x5 & UINT8_C(0xff)); + x22 = (x5 >> 8); + x23 = (uint8_t)(x22 & UINT8_C(0xff)); + x24 = (x22 >> 8); + x25 = (uint8_t)(x24 & UINT8_C(0xff)); + x26 = (x24 >> 8); + x27 = (uint8_t)(x26 & UINT8_C(0xff)); + x28 = (x26 >> 8); + x29 = (uint8_t)(x28 & UINT8_C(0xff)); + x30 = (x28 >> 8); + x31 = (uint8_t)(x30 & UINT8_C(0xff)); + x32 = (x30 >> 8); + x33 = (uint8_t)(x32 & UINT8_C(0xff)); + x34 = (uint8_t)(x32 >> 8); + x35 = (uint8_t)(x4 & UINT8_C(0xff)); + x36 = (x4 >> 8); + x37 = (uint8_t)(x36 & UINT8_C(0xff)); + x38 = (x36 >> 8); + x39 = (uint8_t)(x38 & UINT8_C(0xff)); + x40 = (x38 >> 8); + x41 = (uint8_t)(x40 & UINT8_C(0xff)); + x42 = (x40 >> 8); + x43 = (uint8_t)(x42 & UINT8_C(0xff)); + x44 = (x42 >> 8); + x45 = (uint8_t)(x44 & UINT8_C(0xff)); + x46 = (x44 >> 8); + x47 = (uint8_t)(x46 & UINT8_C(0xff)); + x48 = (uint8_t)(x46 >> 8); + x49 = (uint8_t)(x3 & UINT8_C(0xff)); + x50 = (x3 >> 8); + x51 = (uint8_t)(x50 & UINT8_C(0xff)); + x52 = (x50 >> 8); + x53 = (uint8_t)(x52 & UINT8_C(0xff)); + x54 = (x52 >> 8); + x55 = (uint8_t)(x54 & UINT8_C(0xff)); + x56 = (x54 >> 8); + x57 = (uint8_t)(x56 & UINT8_C(0xff)); + x58 = (x56 >> 8); + x59 = (uint8_t)(x58 & UINT8_C(0xff)); + x60 = (x58 >> 8); + x61 = (uint8_t)(x60 & UINT8_C(0xff)); + x62 = (uint8_t)(x60 >> 8); + x63 = (uint8_t)(x2 & UINT8_C(0xff)); + x64 = (x2 >> 8); + x65 = (uint8_t)(x64 & UINT8_C(0xff)); + x66 = (x64 >> 8); + x67 = (uint8_t)(x66 & UINT8_C(0xff)); + x68 = (x66 >> 8); + x69 = (uint8_t)(x68 & UINT8_C(0xff)); + x70 = (x68 >> 8); + x71 = (uint8_t)(x70 & UINT8_C(0xff)); + x72 = (x70 >> 8); + x73 = (uint8_t)(x72 & UINT8_C(0xff)); + x74 = (x72 >> 8); + x75 = (uint8_t)(x74 & UINT8_C(0xff)); + x76 = (uint8_t)(x74 >> 8); + x77 = (uint8_t)(x1 & UINT8_C(0xff)); + x78 = (x1 >> 8); + x79 = (uint8_t)(x78 & UINT8_C(0xff)); + x80 = (x78 >> 8); + x81 = (uint8_t)(x80 & UINT8_C(0xff)); + x82 = (x80 >> 8); + x83 = (uint8_t)(x82 & UINT8_C(0xff)); + x84 = (x82 >> 8); + x85 = (uint8_t)(x84 & UINT8_C(0xff)); + x86 = (x84 >> 8); + x87 = (uint8_t)(x86 & UINT8_C(0xff)); + x88 = (x86 >> 8); + x89 = (uint8_t)(x88 & UINT8_C(0xff)); + x90 = (uint8_t)(x88 >> 8); + out1[0] = x7; + out1[1] = x9; + out1[2] = x11; + out1[3] = x13; + out1[4] = x15; + out1[5] = x17; + out1[6] = x19; + out1[7] = x20; + out1[8] = x21; + out1[9] = x23; + out1[10] = x25; + out1[11] = x27; + out1[12] = x29; + out1[13] = x31; + out1[14] = x33; + out1[15] = x34; + out1[16] = x35; + out1[17] = x37; + out1[18] = x39; + out1[19] = x41; + out1[20] = x43; + out1[21] = x45; + out1[22] = x47; + out1[23] = x48; + out1[24] = x49; + out1[25] = x51; + out1[26] = x53; + out1[27] = x55; + out1[28] = x57; + out1[29] = x59; + out1[30] = x61; + out1[31] = x62; + out1[32] = x63; + out1[33] = x65; + out1[34] = x67; + out1[35] = x69; + out1[36] = x71; + out1[37] = x73; + out1[38] = x75; + out1[39] = x76; + out1[40] = x77; + out1[41] = x79; + out1[42] = x81; + out1[43] = x83; + out1[44] = x85; + out1[45] = x87; + out1[46] = x89; + out1[47] = x90; +} + +/* + * The function fiat_p384_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p384_from_bytes(uint64_t out1[6], const uint8_t arg1[48]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint8_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint8_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint8_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint8_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint8_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint8_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint64_t x57; + uint64_t x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + uint64_t x65; + uint64_t x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + uint64_t x81; + uint64_t x82; + uint64_t x83; + uint64_t x84; + uint64_t x85; + uint64_t x86; + uint64_t x87; + uint64_t x88; + uint64_t x89; + uint64_t x90; + x1 = ((uint64_t)(arg1[47]) << 56); + x2 = ((uint64_t)(arg1[46]) << 48); + x3 = ((uint64_t)(arg1[45]) << 40); + x4 = ((uint64_t)(arg1[44]) << 32); + x5 = ((uint64_t)(arg1[43]) << 24); + x6 = ((uint64_t)(arg1[42]) << 16); + x7 = ((uint64_t)(arg1[41]) << 8); + x8 = (arg1[40]); + x9 = ((uint64_t)(arg1[39]) << 56); + x10 = ((uint64_t)(arg1[38]) << 48); + x11 = ((uint64_t)(arg1[37]) << 40); + x12 = ((uint64_t)(arg1[36]) << 32); + x13 = ((uint64_t)(arg1[35]) << 24); + x14 = ((uint64_t)(arg1[34]) << 16); + x15 = ((uint64_t)(arg1[33]) << 8); + x16 = (arg1[32]); + x17 = ((uint64_t)(arg1[31]) << 56); + x18 = ((uint64_t)(arg1[30]) << 48); + x19 = ((uint64_t)(arg1[29]) << 40); + x20 = ((uint64_t)(arg1[28]) << 32); + x21 = ((uint64_t)(arg1[27]) << 24); + x22 = ((uint64_t)(arg1[26]) << 16); + x23 = ((uint64_t)(arg1[25]) << 8); + x24 = (arg1[24]); + x25 = ((uint64_t)(arg1[23]) << 56); + x26 = ((uint64_t)(arg1[22]) << 48); + x27 = ((uint64_t)(arg1[21]) << 40); + x28 = ((uint64_t)(arg1[20]) << 32); + x29 = ((uint64_t)(arg1[19]) << 24); + x30 = ((uint64_t)(arg1[18]) << 16); + x31 = ((uint64_t)(arg1[17]) << 8); + x32 = (arg1[16]); + x33 = ((uint64_t)(arg1[15]) << 56); + x34 = ((uint64_t)(arg1[14]) << 48); + x35 = ((uint64_t)(arg1[13]) << 40); + x36 = ((uint64_t)(arg1[12]) << 32); + x37 = ((uint64_t)(arg1[11]) << 24); + x38 = ((uint64_t)(arg1[10]) << 16); + x39 = ((uint64_t)(arg1[9]) << 8); + x40 = (arg1[8]); + x41 = ((uint64_t)(arg1[7]) << 56); + x42 = ((uint64_t)(arg1[6]) << 48); + x43 = ((uint64_t)(arg1[5]) << 40); + x44 = ((uint64_t)(arg1[4]) << 32); + x45 = ((uint64_t)(arg1[3]) << 24); + x46 = ((uint64_t)(arg1[2]) << 16); + x47 = ((uint64_t)(arg1[1]) << 8); + x48 = (arg1[0]); + x49 = (x47 + (uint64_t)x48); + x50 = (x46 + x49); + x51 = (x45 + x50); + x52 = (x44 + x51); + x53 = (x43 + x52); + x54 = (x42 + x53); + x55 = (x41 + x54); + x56 = (x39 + (uint64_t)x40); + x57 = (x38 + x56); + x58 = (x37 + x57); + x59 = (x36 + x58); + x60 = (x35 + x59); + x61 = (x34 + x60); + x62 = (x33 + x61); + x63 = (x31 + (uint64_t)x32); + x64 = (x30 + x63); + x65 = (x29 + x64); + x66 = (x28 + x65); + x67 = (x27 + x66); + x68 = (x26 + x67); + x69 = (x25 + x68); + x70 = (x23 + (uint64_t)x24); + x71 = (x22 + x70); + x72 = (x21 + x71); + x73 = (x20 + x72); + x74 = (x19 + x73); + x75 = (x18 + x74); + x76 = (x17 + x75); + x77 = (x15 + (uint64_t)x16); + x78 = (x14 + x77); + x79 = (x13 + x78); + x80 = (x12 + x79); + x81 = (x11 + x80); + x82 = (x10 + x81); + x83 = (x9 + x82); + x84 = (x7 + (uint64_t)x8); + x85 = (x6 + x84); + x86 = (x5 + x85); + x87 = (x4 + x86); + x88 = (x3 + x87); + x89 = (x2 + x88); + x90 = (x1 + x89); + out1[0] = x55; + out1[1] = x62; + out1[2] = x69; + out1[3] = x76; + out1[4] = x83; + out1[5] = x90; +} + +/* + * The function fiat_p384_set_one returns the field element one in the Montgomery domain. + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p384_set_one(uint64_t out1[6]) { + out1[0] = UINT64_C(0xffffffff00000001); + out1[1] = UINT32_C(0xffffffff); + out1[2] = 0x1; + out1[3] = 0x0; + out1[4] = 0x0; + out1[5] = 0x0; +} + +/* + * The function fiat_p384_msat returns the saturated represtation of the prime modulus. + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p384_msat(uint64_t out1[7]) { + out1[0] = UINT32_C(0xffffffff); + out1[1] = UINT64_C(0xffffffff00000000); + out1[2] = UINT64_C(0xfffffffffffffffe); + out1[3] = UINT64_C(0xffffffffffffffff); + out1[4] = UINT64_C(0xffffffffffffffff); + out1[5] = UINT64_C(0xffffffffffffffff); + out1[6] = 0x0; +} + +/* + * The function fiat_p384_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if (log2 m) + 1 < 46 then ⌊(49 * ((log2 m) + 1) + 80) / 17⌋ else ⌊(49 * ((log2 m) + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p384_divstep_precomp(uint64_t out1[6]) { + out1[0] = UINT64_C(0xfff69400fff18fff); + out1[1] = UINT64_C(0x2b7feffffd3ff); + out1[2] = UINT64_C(0xfffedbfffffe97ff); + out1[3] = UINT64_C(0x2840000002fff); + out1[4] = UINT64_C(0x6040000050400); + out1[5] = UINT64_C(0xfffc480000038000); +} + +/* + * The function fiat_p384_divstep computes a divstep. + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p384_divstep(uint64_t* out1, uint64_t out2[7], uint64_t out3[7], uint64_t out4[6], uint64_t out5[6], uint64_t arg1, const uint64_t arg2[7], const uint64_t arg3[7], const uint64_t arg4[6], const uint64_t arg5[6]) { + uint64_t x1; + fiat_p384_uint1 x2; + fiat_p384_uint1 x3; + uint64_t x4; + fiat_p384_uint1 x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + fiat_p384_uint1 x15; + uint64_t x16; + fiat_p384_uint1 x17; + uint64_t x18; + fiat_p384_uint1 x19; + uint64_t x20; + fiat_p384_uint1 x21; + uint64_t x22; + fiat_p384_uint1 x23; + uint64_t x24; + fiat_p384_uint1 x25; + uint64_t x26; + fiat_p384_uint1 x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint64_t x32; + uint64_t x33; + uint64_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + fiat_p384_uint1 x42; + uint64_t x43; + fiat_p384_uint1 x44; + uint64_t x45; + fiat_p384_uint1 x46; + uint64_t x47; + fiat_p384_uint1 x48; + uint64_t x49; + fiat_p384_uint1 x50; + uint64_t x51; + fiat_p384_uint1 x52; + uint64_t x53; + fiat_p384_uint1 x54; + uint64_t x55; + fiat_p384_uint1 x56; + uint64_t x57; + fiat_p384_uint1 x58; + uint64_t x59; + fiat_p384_uint1 x60; + uint64_t x61; + fiat_p384_uint1 x62; + uint64_t x63; + fiat_p384_uint1 x64; + uint64_t x65; + fiat_p384_uint1 x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + fiat_p384_uint1 x74; + uint64_t x75; + fiat_p384_uint1 x76; + uint64_t x77; + fiat_p384_uint1 x78; + uint64_t x79; + fiat_p384_uint1 x80; + uint64_t x81; + fiat_p384_uint1 x82; + uint64_t x83; + fiat_p384_uint1 x84; + uint64_t x85; + uint64_t x86; + fiat_p384_uint1 x87; + uint64_t x88; + fiat_p384_uint1 x89; + uint64_t x90; + fiat_p384_uint1 x91; + uint64_t x92; + fiat_p384_uint1 x93; + uint64_t x94; + fiat_p384_uint1 x95; + uint64_t x96; + fiat_p384_uint1 x97; + uint64_t x98; + uint64_t x99; + uint64_t x100; + uint64_t x101; + uint64_t x102; + uint64_t x103; + fiat_p384_uint1 x104; + uint64_t x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + uint64_t x109; + uint64_t x110; + uint64_t x111; + uint64_t x112; + fiat_p384_uint1 x113; + uint64_t x114; + fiat_p384_uint1 x115; + uint64_t x116; + fiat_p384_uint1 x117; + uint64_t x118; + fiat_p384_uint1 x119; + uint64_t x120; + fiat_p384_uint1 x121; + uint64_t x122; + fiat_p384_uint1 x123; + uint64_t x124; + fiat_p384_uint1 x125; + uint64_t x126; + uint64_t x127; + uint64_t x128; + uint64_t x129; + uint64_t x130; + uint64_t x131; + uint64_t x132; + fiat_p384_uint1 x133; + uint64_t x134; + fiat_p384_uint1 x135; + uint64_t x136; + fiat_p384_uint1 x137; + uint64_t x138; + fiat_p384_uint1 x139; + uint64_t x140; + fiat_p384_uint1 x141; + uint64_t x142; + fiat_p384_uint1 x143; + uint64_t x144; + fiat_p384_uint1 x145; + uint64_t x146; + fiat_p384_uint1 x147; + uint64_t x148; + fiat_p384_uint1 x149; + uint64_t x150; + fiat_p384_uint1 x151; + uint64_t x152; + fiat_p384_uint1 x153; + uint64_t x154; + fiat_p384_uint1 x155; + uint64_t x156; + fiat_p384_uint1 x157; + uint64_t x158; + fiat_p384_uint1 x159; + uint64_t x160; + uint64_t x161; + uint64_t x162; + uint64_t x163; + uint64_t x164; + uint64_t x165; + uint64_t x166; + uint64_t x167; + uint64_t x168; + uint64_t x169; + uint64_t x170; + uint64_t x171; + uint64_t x172; + uint64_t x173; + uint64_t x174; + uint64_t x175; + uint64_t x176; + uint64_t x177; + uint64_t x178; + fiat_p384_addcarryx_u64(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_p384_uint1)((fiat_p384_uint1)(x1 >> 63) & (fiat_p384_uint1)((arg3[0]) & 0x1)); + fiat_p384_addcarryx_u64(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_p384_cmovznz_u64(&x6, x3, arg1, x4); + fiat_p384_cmovznz_u64(&x7, x3, (arg2[0]), (arg3[0])); + fiat_p384_cmovznz_u64(&x8, x3, (arg2[1]), (arg3[1])); + fiat_p384_cmovznz_u64(&x9, x3, (arg2[2]), (arg3[2])); + fiat_p384_cmovznz_u64(&x10, x3, (arg2[3]), (arg3[3])); + fiat_p384_cmovznz_u64(&x11, x3, (arg2[4]), (arg3[4])); + fiat_p384_cmovznz_u64(&x12, x3, (arg2[5]), (arg3[5])); + fiat_p384_cmovznz_u64(&x13, x3, (arg2[6]), (arg3[6])); + fiat_p384_addcarryx_u64(&x14, &x15, 0x0, 0x1, (~(arg2[0]))); + fiat_p384_addcarryx_u64(&x16, &x17, x15, 0x0, (~(arg2[1]))); + fiat_p384_addcarryx_u64(&x18, &x19, x17, 0x0, (~(arg2[2]))); + fiat_p384_addcarryx_u64(&x20, &x21, x19, 0x0, (~(arg2[3]))); + fiat_p384_addcarryx_u64(&x22, &x23, x21, 0x0, (~(arg2[4]))); + fiat_p384_addcarryx_u64(&x24, &x25, x23, 0x0, (~(arg2[5]))); + fiat_p384_addcarryx_u64(&x26, &x27, x25, 0x0, (~(arg2[6]))); + fiat_p384_cmovznz_u64(&x28, x3, (arg3[0]), x14); + fiat_p384_cmovznz_u64(&x29, x3, (arg3[1]), x16); + fiat_p384_cmovznz_u64(&x30, x3, (arg3[2]), x18); + fiat_p384_cmovznz_u64(&x31, x3, (arg3[3]), x20); + fiat_p384_cmovznz_u64(&x32, x3, (arg3[4]), x22); + fiat_p384_cmovznz_u64(&x33, x3, (arg3[5]), x24); + fiat_p384_cmovznz_u64(&x34, x3, (arg3[6]), x26); + fiat_p384_cmovznz_u64(&x35, x3, (arg4[0]), (arg5[0])); + fiat_p384_cmovznz_u64(&x36, x3, (arg4[1]), (arg5[1])); + fiat_p384_cmovznz_u64(&x37, x3, (arg4[2]), (arg5[2])); + fiat_p384_cmovznz_u64(&x38, x3, (arg4[3]), (arg5[3])); + fiat_p384_cmovznz_u64(&x39, x3, (arg4[4]), (arg5[4])); + fiat_p384_cmovznz_u64(&x40, x3, (arg4[5]), (arg5[5])); + fiat_p384_addcarryx_u64(&x41, &x42, 0x0, x35, x35); + fiat_p384_addcarryx_u64(&x43, &x44, x42, x36, x36); + fiat_p384_addcarryx_u64(&x45, &x46, x44, x37, x37); + fiat_p384_addcarryx_u64(&x47, &x48, x46, x38, x38); + fiat_p384_addcarryx_u64(&x49, &x50, x48, x39, x39); + fiat_p384_addcarryx_u64(&x51, &x52, x50, x40, x40); + fiat_p384_subborrowx_u64(&x53, &x54, 0x0, x41, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u64(&x55, &x56, x54, x43, UINT64_C(0xffffffff00000000)); + fiat_p384_subborrowx_u64(&x57, &x58, x56, x45, UINT64_C(0xfffffffffffffffe)); + fiat_p384_subborrowx_u64(&x59, &x60, x58, x47, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x61, &x62, x60, x49, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x63, &x64, x62, x51, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x65, &x66, x64, x52, 0x0); + x67 = (arg4[5]); + x68 = (arg4[4]); + x69 = (arg4[3]); + x70 = (arg4[2]); + x71 = (arg4[1]); + x72 = (arg4[0]); + fiat_p384_subborrowx_u64(&x73, &x74, 0x0, 0x0, x72); + fiat_p384_subborrowx_u64(&x75, &x76, x74, 0x0, x71); + fiat_p384_subborrowx_u64(&x77, &x78, x76, 0x0, x70); + fiat_p384_subborrowx_u64(&x79, &x80, x78, 0x0, x69); + fiat_p384_subborrowx_u64(&x81, &x82, x80, 0x0, x68); + fiat_p384_subborrowx_u64(&x83, &x84, x82, 0x0, x67); + fiat_p384_cmovznz_u64(&x85, x84, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_p384_addcarryx_u64(&x86, &x87, 0x0, x73, (x85 & UINT32_C(0xffffffff))); + fiat_p384_addcarryx_u64(&x88, &x89, x87, x75, (x85 & UINT64_C(0xffffffff00000000))); + fiat_p384_addcarryx_u64(&x90, &x91, x89, x77, (x85 & UINT64_C(0xfffffffffffffffe))); + fiat_p384_addcarryx_u64(&x92, &x93, x91, x79, x85); + fiat_p384_addcarryx_u64(&x94, &x95, x93, x81, x85); + fiat_p384_addcarryx_u64(&x96, &x97, x95, x83, x85); + fiat_p384_cmovznz_u64(&x98, x3, (arg5[0]), x86); + fiat_p384_cmovznz_u64(&x99, x3, (arg5[1]), x88); + fiat_p384_cmovznz_u64(&x100, x3, (arg5[2]), x90); + fiat_p384_cmovznz_u64(&x101, x3, (arg5[3]), x92); + fiat_p384_cmovznz_u64(&x102, x3, (arg5[4]), x94); + fiat_p384_cmovznz_u64(&x103, x3, (arg5[5]), x96); + x104 = (fiat_p384_uint1)(x28 & 0x1); + fiat_p384_cmovznz_u64(&x105, x104, 0x0, x7); + fiat_p384_cmovznz_u64(&x106, x104, 0x0, x8); + fiat_p384_cmovznz_u64(&x107, x104, 0x0, x9); + fiat_p384_cmovznz_u64(&x108, x104, 0x0, x10); + fiat_p384_cmovznz_u64(&x109, x104, 0x0, x11); + fiat_p384_cmovznz_u64(&x110, x104, 0x0, x12); + fiat_p384_cmovznz_u64(&x111, x104, 0x0, x13); + fiat_p384_addcarryx_u64(&x112, &x113, 0x0, x28, x105); + fiat_p384_addcarryx_u64(&x114, &x115, x113, x29, x106); + fiat_p384_addcarryx_u64(&x116, &x117, x115, x30, x107); + fiat_p384_addcarryx_u64(&x118, &x119, x117, x31, x108); + fiat_p384_addcarryx_u64(&x120, &x121, x119, x32, x109); + fiat_p384_addcarryx_u64(&x122, &x123, x121, x33, x110); + fiat_p384_addcarryx_u64(&x124, &x125, x123, x34, x111); + fiat_p384_cmovznz_u64(&x126, x104, 0x0, x35); + fiat_p384_cmovznz_u64(&x127, x104, 0x0, x36); + fiat_p384_cmovznz_u64(&x128, x104, 0x0, x37); + fiat_p384_cmovznz_u64(&x129, x104, 0x0, x38); + fiat_p384_cmovznz_u64(&x130, x104, 0x0, x39); + fiat_p384_cmovznz_u64(&x131, x104, 0x0, x40); + fiat_p384_addcarryx_u64(&x132, &x133, 0x0, x98, x126); + fiat_p384_addcarryx_u64(&x134, &x135, x133, x99, x127); + fiat_p384_addcarryx_u64(&x136, &x137, x135, x100, x128); + fiat_p384_addcarryx_u64(&x138, &x139, x137, x101, x129); + fiat_p384_addcarryx_u64(&x140, &x141, x139, x102, x130); + fiat_p384_addcarryx_u64(&x142, &x143, x141, x103, x131); + fiat_p384_subborrowx_u64(&x144, &x145, 0x0, x132, UINT32_C(0xffffffff)); + fiat_p384_subborrowx_u64(&x146, &x147, x145, x134, UINT64_C(0xffffffff00000000)); + fiat_p384_subborrowx_u64(&x148, &x149, x147, x136, UINT64_C(0xfffffffffffffffe)); + fiat_p384_subborrowx_u64(&x150, &x151, x149, x138, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x152, &x153, x151, x140, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x154, &x155, x153, x142, UINT64_C(0xffffffffffffffff)); + fiat_p384_subborrowx_u64(&x156, &x157, x155, x143, 0x0); + fiat_p384_addcarryx_u64(&x158, &x159, 0x0, x6, 0x1); + x160 = ((x112 >> 1) | ((x114 << 63) & UINT64_C(0xffffffffffffffff))); + x161 = ((x114 >> 1) | ((x116 << 63) & UINT64_C(0xffffffffffffffff))); + x162 = ((x116 >> 1) | ((x118 << 63) & UINT64_C(0xffffffffffffffff))); + x163 = ((x118 >> 1) | ((x120 << 63) & UINT64_C(0xffffffffffffffff))); + x164 = ((x120 >> 1) | ((x122 << 63) & UINT64_C(0xffffffffffffffff))); + x165 = ((x122 >> 1) | ((x124 << 63) & UINT64_C(0xffffffffffffffff))); + x166 = ((x124 & UINT64_C(0x8000000000000000)) | (x124 >> 1)); + fiat_p384_cmovznz_u64(&x167, x66, x53, x41); + fiat_p384_cmovznz_u64(&x168, x66, x55, x43); + fiat_p384_cmovznz_u64(&x169, x66, x57, x45); + fiat_p384_cmovznz_u64(&x170, x66, x59, x47); + fiat_p384_cmovznz_u64(&x171, x66, x61, x49); + fiat_p384_cmovznz_u64(&x172, x66, x63, x51); + fiat_p384_cmovznz_u64(&x173, x157, x144, x132); + fiat_p384_cmovznz_u64(&x174, x157, x146, x134); + fiat_p384_cmovznz_u64(&x175, x157, x148, x136); + fiat_p384_cmovznz_u64(&x176, x157, x150, x138); + fiat_p384_cmovznz_u64(&x177, x157, x152, x140); + fiat_p384_cmovznz_u64(&x178, x157, x154, x142); + *out1 = x158; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out2[5] = x12; + out2[6] = x13; + out3[0] = x160; + out3[1] = x161; + out3[2] = x162; + out3[3] = x163; + out3[4] = x164; + out3[5] = x165; + out3[6] = x166; + out4[0] = x167; + out4[1] = x168; + out4[2] = x169; + out4[3] = x170; + out4[4] = x171; + out4[5] = x172; + out5[0] = x173; + out5[1] = x174; + out5[2] = x175; + out5[3] = x176; + out5[4] = x177; + out5[5] = x178; +} + diff --git a/ec/native/p384_stubs.c b/ec/native/p384_stubs.c new file mode 100644 index 00000000..2b2efd2a --- /dev/null +++ b/ec/native/p384_stubs.c @@ -0,0 +1,143 @@ +#include "mirage_crypto.h" + +#ifdef ARCH_64BIT +#include "p384_64.h" +#define LIMBS 6 +#define WORD uint64_t +#define WORDSIZE 64 +#else +#include "p384_32.h" +#define LIMBS 12 +#define WORD uint32_t +#define WORDSIZE 32 +#endif + +#define LEN_PRIME 384 +#define CURVE_DESCRIPTION fiat_p384 + +#include "inversion_template.h" +#include "point_operations.h" + +#include + +CAMLprim value mc_p384_sub(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_p384_sub(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p384_add(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_p384_add(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p384_mul(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_p384_mul(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p384_from_bytes(value out, value in) +{ + CAMLparam2(out, in); + fiat_p384_from_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p384_to_bytes(value out, value in) +{ + CAMLparam2(out, in); + fiat_p384_to_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p384_sqr(value out, value in) +{ + CAMLparam2(out, in); + fiat_p384_square(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p384_from_montgomery(value x) +{ + CAMLparam1(x); + WORD *l = Caml_ba_data_val(x); + fiat_p384_from_montgomery(l, l); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p384_to_montgomery(value x) +{ + CAMLparam1(x); + WORD *l = Caml_ba_data_val(x); + fiat_p384_to_montgomery(l, l); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p384_nz(value x) +{ + CAMLparam1(x); + CAMLreturn(Val_bool(fe_nz(Caml_ba_data_val(x)))); +} + +CAMLprim value mc_p384_set_one(value x) +{ + CAMLparam1(x); + fiat_p384_set_one(Caml_ba_data_val(x)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p384_inv(value out, value in) +{ + CAMLparam2(out, in); + inversion(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p384_point_double(value out, value in) +{ + CAMLparam2(out, in); + point_double( + Caml_ba_data_val(Field(out, 0)), + Caml_ba_data_val(Field(out, 1)), + Caml_ba_data_val(Field(out, 2)), + Caml_ba_data_val(Field(in, 0)), + Caml_ba_data_val(Field(in, 1)), + Caml_ba_data_val(Field(in, 2)) + ); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p384_point_add(value out, value p, value q) +{ + CAMLparam3(out, p, q); + point_add( + Caml_ba_data_val(Field(out, 0)), + Caml_ba_data_val(Field(out, 1)), + Caml_ba_data_val(Field(out, 2)), + Caml_ba_data_val(Field(p, 0)), + Caml_ba_data_val(Field(p, 1)), + Caml_ba_data_val(Field(p, 2)), + 0, + Caml_ba_data_val(Field(q, 0)), + Caml_ba_data_val(Field(q, 1)), + Caml_ba_data_val(Field(q, 2)) + ); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p384_select(value out, value bit, value t, value f) +{ + CAMLparam4(out, bit, t, f); + fe_cmovznz( + Caml_ba_data_val(out), + Bool_val(bit), + Caml_ba_data_val(f), + Caml_ba_data_val(t) + ); + CAMLreturn(Val_unit); +} diff --git a/ec/native/p521_32.h b/ec/native/p521_32.h new file mode 100644 index 00000000..4f13a6c8 --- /dev/null +++ b/ec/native/p521_32.h @@ -0,0 +1,19721 @@ +/* Autogenerated: '../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery' --static --use-value-barrier p521 32 '2^521 - 1' */ +/* curve description: p521 */ +/* machine_wordsize = 32 (from "32") */ +/* requested operations: (all) */ +/* m = 0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff (from "2^521 - 1") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 32) + (z[2] << 64) + (z[3] << 96) + (z[4] << 128) + (z[5] << 160) + (z[6] << 192) + (z[7] << 224) + (z[8] << 256) + (z[9] << 0x120) + (z[10] << 0x140) + (z[11] << 0x160) + (z[12] << 0x180) + (z[13] << 0x1a0) + (z[14] << 0x1c0) + (z[15] << 0x1e0) + (z[16] << 2^9) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) + (z[32] << 256) + (z[33] << 0x108) + (z[34] << 0x110) + (z[35] << 0x118) + (z[36] << 0x120) + (z[37] << 0x128) + (z[38] << 0x130) + (z[39] << 0x138) + (z[40] << 0x140) + (z[41] << 0x148) + (z[42] << 0x150) + (z[43] << 0x158) + (z[44] << 0x160) + (z[45] << 0x168) + (z[46] << 0x170) + (z[47] << 0x178) + (z[48] << 0x180) + (z[49] << 0x188) + (z[50] << 0x190) + (z[51] << 0x198) + (z[52] << 0x1a0) + (z[53] << 0x1a8) + (z[54] << 0x1b0) + (z[55] << 0x1b8) + (z[56] << 0x1c0) + (z[57] << 0x1c8) + (z[58] << 0x1d0) + (z[59] << 0x1d8) + (z[60] << 0x1e0) + (z[61] << 0x1e8) + (z[62] << 0x1f0) + (z[63] << 0x1f8) + (z[64] << 2^9) + (z[65] << 0x208) */ + +#include +typedef unsigned char fiat_p521_uint1; +typedef signed char fiat_p521_int1; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_P521_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint32_t fiat_p521_value_barrier_u32(uint32_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_p521_value_barrier_u32(x) (x) +#endif + + +/* + * The function fiat_p521_addcarryx_u32 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^32 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p521_addcarryx_u32(uint32_t* out1, fiat_p521_uint1* out2, fiat_p521_uint1 arg1, uint32_t arg2, uint32_t arg3) { + uint64_t x1; + uint32_t x2; + fiat_p521_uint1 x3; + x1 = ((arg1 + (uint64_t)arg2) + arg3); + x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + x3 = (fiat_p521_uint1)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p521_subborrowx_u32 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^32 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p521_subborrowx_u32(uint32_t* out1, fiat_p521_uint1* out2, fiat_p521_uint1 arg1, uint32_t arg2, uint32_t arg3) { + int64_t x1; + fiat_p521_int1 x2; + uint32_t x3; + x1 = ((arg2 - (int64_t)arg1) - arg3); + x2 = (fiat_p521_int1)(x1 >> 32); + x3 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + *out1 = x3; + *out2 = (fiat_p521_uint1)(0x0 - x2); +} + +/* + * The function fiat_p521_mulx_u32 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^32 + * out2 = ⌊arg1 * arg2 / 2^32⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [0x0 ~> 0xffffffff] + */ +static void fiat_p521_mulx_u32(uint32_t* out1, uint32_t* out2, uint32_t arg1, uint32_t arg2) { + uint64_t x1; + uint32_t x2; + uint32_t x3; + x1 = ((uint64_t)arg1 * arg2); + x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); + x3 = (uint32_t)(x1 >> 32); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p521_cmovznz_u32 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffff] + * arg3: [0x0 ~> 0xffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static void fiat_p521_cmovznz_u32(uint32_t* out1, fiat_p521_uint1 arg1, uint32_t arg2, uint32_t arg3) { + fiat_p521_uint1 x1; + uint32_t x2; + uint32_t x3; + x1 = (!(!arg1)); + x2 = ((fiat_p521_int1)(0x0 - x1) & UINT32_C(0xffffffff)); + x3 = ((fiat_p521_value_barrier_u32(x2) & arg3) | (fiat_p521_value_barrier_u32((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_p521_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p521_mul(uint32_t out1[17], const uint32_t arg1[17], const uint32_t arg2[17]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint32_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + uint32_t x52; + fiat_p521_uint1 x53; + uint32_t x54; + fiat_p521_uint1 x55; + uint32_t x56; + fiat_p521_uint1 x57; + uint32_t x58; + fiat_p521_uint1 x59; + uint32_t x60; + fiat_p521_uint1 x61; + uint32_t x62; + fiat_p521_uint1 x63; + uint32_t x64; + fiat_p521_uint1 x65; + uint32_t x66; + fiat_p521_uint1 x67; + uint32_t x68; + fiat_p521_uint1 x69; + uint32_t x70; + fiat_p521_uint1 x71; + uint32_t x72; + fiat_p521_uint1 x73; + uint32_t x74; + fiat_p521_uint1 x75; + uint32_t x76; + fiat_p521_uint1 x77; + uint32_t x78; + fiat_p521_uint1 x79; + uint32_t x80; + fiat_p521_uint1 x81; + uint32_t x82; + fiat_p521_uint1 x83; + uint32_t x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + uint32_t x88; + uint32_t x89; + uint32_t x90; + uint32_t x91; + uint32_t x92; + uint32_t x93; + uint32_t x94; + uint32_t x95; + uint32_t x96; + uint32_t x97; + uint32_t x98; + uint32_t x99; + uint32_t x100; + uint32_t x101; + uint32_t x102; + uint32_t x103; + uint32_t x104; + uint32_t x105; + uint32_t x106; + uint32_t x107; + uint32_t x108; + uint32_t x109; + uint32_t x110; + uint32_t x111; + uint32_t x112; + uint32_t x113; + uint32_t x114; + uint32_t x115; + uint32_t x116; + uint32_t x117; + uint32_t x118; + uint32_t x119; + fiat_p521_uint1 x120; + uint32_t x121; + fiat_p521_uint1 x122; + uint32_t x123; + fiat_p521_uint1 x124; + uint32_t x125; + fiat_p521_uint1 x126; + uint32_t x127; + fiat_p521_uint1 x128; + uint32_t x129; + fiat_p521_uint1 x130; + uint32_t x131; + fiat_p521_uint1 x132; + uint32_t x133; + fiat_p521_uint1 x134; + uint32_t x135; + fiat_p521_uint1 x136; + uint32_t x137; + fiat_p521_uint1 x138; + uint32_t x139; + fiat_p521_uint1 x140; + uint32_t x141; + fiat_p521_uint1 x142; + uint32_t x143; + fiat_p521_uint1 x144; + uint32_t x145; + fiat_p521_uint1 x146; + uint32_t x147; + fiat_p521_uint1 x148; + uint32_t x149; + fiat_p521_uint1 x150; + uint32_t x151; + uint32_t x152; + fiat_p521_uint1 x153; + uint32_t x154; + fiat_p521_uint1 x155; + uint32_t x156; + fiat_p521_uint1 x157; + uint32_t x158; + fiat_p521_uint1 x159; + uint32_t x160; + fiat_p521_uint1 x161; + uint32_t x162; + fiat_p521_uint1 x163; + uint32_t x164; + fiat_p521_uint1 x165; + uint32_t x166; + fiat_p521_uint1 x167; + uint32_t x168; + fiat_p521_uint1 x169; + uint32_t x170; + fiat_p521_uint1 x171; + uint32_t x172; + fiat_p521_uint1 x173; + uint32_t x174; + fiat_p521_uint1 x175; + uint32_t x176; + fiat_p521_uint1 x177; + uint32_t x178; + fiat_p521_uint1 x179; + uint32_t x180; + fiat_p521_uint1 x181; + uint32_t x182; + fiat_p521_uint1 x183; + uint32_t x184; + fiat_p521_uint1 x185; + uint32_t x186; + fiat_p521_uint1 x187; + uint32_t x188; + uint32_t x189; + uint32_t x190; + uint32_t x191; + uint32_t x192; + uint32_t x193; + uint32_t x194; + uint32_t x195; + uint32_t x196; + uint32_t x197; + uint32_t x198; + uint32_t x199; + uint32_t x200; + uint32_t x201; + uint32_t x202; + uint32_t x203; + uint32_t x204; + uint32_t x205; + uint32_t x206; + uint32_t x207; + uint32_t x208; + uint32_t x209; + uint32_t x210; + uint32_t x211; + uint32_t x212; + uint32_t x213; + uint32_t x214; + uint32_t x215; + uint32_t x216; + uint32_t x217; + uint32_t x218; + uint32_t x219; + uint32_t x220; + uint32_t x221; + uint32_t x222; + fiat_p521_uint1 x223; + uint32_t x224; + fiat_p521_uint1 x225; + uint32_t x226; + fiat_p521_uint1 x227; + uint32_t x228; + fiat_p521_uint1 x229; + uint32_t x230; + fiat_p521_uint1 x231; + uint32_t x232; + fiat_p521_uint1 x233; + uint32_t x234; + fiat_p521_uint1 x235; + uint32_t x236; + fiat_p521_uint1 x237; + uint32_t x238; + fiat_p521_uint1 x239; + uint32_t x240; + fiat_p521_uint1 x241; + uint32_t x242; + fiat_p521_uint1 x243; + uint32_t x244; + fiat_p521_uint1 x245; + uint32_t x246; + fiat_p521_uint1 x247; + uint32_t x248; + fiat_p521_uint1 x249; + uint32_t x250; + fiat_p521_uint1 x251; + uint32_t x252; + fiat_p521_uint1 x253; + uint32_t x254; + uint32_t x255; + fiat_p521_uint1 x256; + uint32_t x257; + fiat_p521_uint1 x258; + uint32_t x259; + fiat_p521_uint1 x260; + uint32_t x261; + fiat_p521_uint1 x262; + uint32_t x263; + fiat_p521_uint1 x264; + uint32_t x265; + fiat_p521_uint1 x266; + uint32_t x267; + fiat_p521_uint1 x268; + uint32_t x269; + fiat_p521_uint1 x270; + uint32_t x271; + fiat_p521_uint1 x272; + uint32_t x273; + fiat_p521_uint1 x274; + uint32_t x275; + fiat_p521_uint1 x276; + uint32_t x277; + fiat_p521_uint1 x278; + uint32_t x279; + fiat_p521_uint1 x280; + uint32_t x281; + fiat_p521_uint1 x282; + uint32_t x283; + fiat_p521_uint1 x284; + uint32_t x285; + fiat_p521_uint1 x286; + uint32_t x287; + fiat_p521_uint1 x288; + uint32_t x289; + fiat_p521_uint1 x290; + uint32_t x291; + uint32_t x292; + uint32_t x293; + uint32_t x294; + uint32_t x295; + uint32_t x296; + uint32_t x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + uint32_t x303; + uint32_t x304; + uint32_t x305; + uint32_t x306; + uint32_t x307; + uint32_t x308; + uint32_t x309; + uint32_t x310; + uint32_t x311; + uint32_t x312; + uint32_t x313; + uint32_t x314; + uint32_t x315; + uint32_t x316; + uint32_t x317; + uint32_t x318; + uint32_t x319; + uint32_t x320; + uint32_t x321; + uint32_t x322; + uint32_t x323; + uint32_t x324; + uint32_t x325; + fiat_p521_uint1 x326; + uint32_t x327; + fiat_p521_uint1 x328; + uint32_t x329; + fiat_p521_uint1 x330; + uint32_t x331; + fiat_p521_uint1 x332; + uint32_t x333; + fiat_p521_uint1 x334; + uint32_t x335; + fiat_p521_uint1 x336; + uint32_t x337; + fiat_p521_uint1 x338; + uint32_t x339; + fiat_p521_uint1 x340; + uint32_t x341; + fiat_p521_uint1 x342; + uint32_t x343; + fiat_p521_uint1 x344; + uint32_t x345; + fiat_p521_uint1 x346; + uint32_t x347; + fiat_p521_uint1 x348; + uint32_t x349; + fiat_p521_uint1 x350; + uint32_t x351; + fiat_p521_uint1 x352; + uint32_t x353; + fiat_p521_uint1 x354; + uint32_t x355; + fiat_p521_uint1 x356; + uint32_t x357; + uint32_t x358; + fiat_p521_uint1 x359; + uint32_t x360; + fiat_p521_uint1 x361; + uint32_t x362; + fiat_p521_uint1 x363; + uint32_t x364; + fiat_p521_uint1 x365; + uint32_t x366; + fiat_p521_uint1 x367; + uint32_t x368; + fiat_p521_uint1 x369; + uint32_t x370; + fiat_p521_uint1 x371; + uint32_t x372; + fiat_p521_uint1 x373; + uint32_t x374; + fiat_p521_uint1 x375; + uint32_t x376; + fiat_p521_uint1 x377; + uint32_t x378; + fiat_p521_uint1 x379; + uint32_t x380; + fiat_p521_uint1 x381; + uint32_t x382; + fiat_p521_uint1 x383; + uint32_t x384; + fiat_p521_uint1 x385; + uint32_t x386; + fiat_p521_uint1 x387; + uint32_t x388; + fiat_p521_uint1 x389; + uint32_t x390; + fiat_p521_uint1 x391; + uint32_t x392; + fiat_p521_uint1 x393; + uint32_t x394; + uint32_t x395; + uint32_t x396; + uint32_t x397; + uint32_t x398; + uint32_t x399; + uint32_t x400; + uint32_t x401; + uint32_t x402; + uint32_t x403; + uint32_t x404; + uint32_t x405; + uint32_t x406; + uint32_t x407; + uint32_t x408; + uint32_t x409; + uint32_t x410; + uint32_t x411; + uint32_t x412; + uint32_t x413; + uint32_t x414; + uint32_t x415; + uint32_t x416; + uint32_t x417; + uint32_t x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + uint32_t x422; + uint32_t x423; + uint32_t x424; + uint32_t x425; + uint32_t x426; + uint32_t x427; + uint32_t x428; + uint32_t x429; + fiat_p521_uint1 x430; + uint32_t x431; + fiat_p521_uint1 x432; + uint32_t x433; + fiat_p521_uint1 x434; + uint32_t x435; + fiat_p521_uint1 x436; + uint32_t x437; + fiat_p521_uint1 x438; + uint32_t x439; + fiat_p521_uint1 x440; + uint32_t x441; + fiat_p521_uint1 x442; + uint32_t x443; + fiat_p521_uint1 x444; + uint32_t x445; + fiat_p521_uint1 x446; + uint32_t x447; + fiat_p521_uint1 x448; + uint32_t x449; + fiat_p521_uint1 x450; + uint32_t x451; + fiat_p521_uint1 x452; + uint32_t x453; + fiat_p521_uint1 x454; + uint32_t x455; + fiat_p521_uint1 x456; + uint32_t x457; + fiat_p521_uint1 x458; + uint32_t x459; + fiat_p521_uint1 x460; + uint32_t x461; + uint32_t x462; + fiat_p521_uint1 x463; + uint32_t x464; + fiat_p521_uint1 x465; + uint32_t x466; + fiat_p521_uint1 x467; + uint32_t x468; + fiat_p521_uint1 x469; + uint32_t x470; + fiat_p521_uint1 x471; + uint32_t x472; + fiat_p521_uint1 x473; + uint32_t x474; + fiat_p521_uint1 x475; + uint32_t x476; + fiat_p521_uint1 x477; + uint32_t x478; + fiat_p521_uint1 x479; + uint32_t x480; + fiat_p521_uint1 x481; + uint32_t x482; + fiat_p521_uint1 x483; + uint32_t x484; + fiat_p521_uint1 x485; + uint32_t x486; + fiat_p521_uint1 x487; + uint32_t x488; + fiat_p521_uint1 x489; + uint32_t x490; + fiat_p521_uint1 x491; + uint32_t x492; + fiat_p521_uint1 x493; + uint32_t x494; + fiat_p521_uint1 x495; + uint32_t x496; + fiat_p521_uint1 x497; + uint32_t x498; + uint32_t x499; + uint32_t x500; + uint32_t x501; + uint32_t x502; + uint32_t x503; + uint32_t x504; + uint32_t x505; + uint32_t x506; + uint32_t x507; + uint32_t x508; + uint32_t x509; + uint32_t x510; + uint32_t x511; + uint32_t x512; + uint32_t x513; + uint32_t x514; + uint32_t x515; + uint32_t x516; + uint32_t x517; + uint32_t x518; + uint32_t x519; + uint32_t x520; + uint32_t x521; + uint32_t x522; + uint32_t x523; + uint32_t x524; + uint32_t x525; + uint32_t x526; + uint32_t x527; + uint32_t x528; + uint32_t x529; + uint32_t x530; + uint32_t x531; + uint32_t x532; + fiat_p521_uint1 x533; + uint32_t x534; + fiat_p521_uint1 x535; + uint32_t x536; + fiat_p521_uint1 x537; + uint32_t x538; + fiat_p521_uint1 x539; + uint32_t x540; + fiat_p521_uint1 x541; + uint32_t x542; + fiat_p521_uint1 x543; + uint32_t x544; + fiat_p521_uint1 x545; + uint32_t x546; + fiat_p521_uint1 x547; + uint32_t x548; + fiat_p521_uint1 x549; + uint32_t x550; + fiat_p521_uint1 x551; + uint32_t x552; + fiat_p521_uint1 x553; + uint32_t x554; + fiat_p521_uint1 x555; + uint32_t x556; + fiat_p521_uint1 x557; + uint32_t x558; + fiat_p521_uint1 x559; + uint32_t x560; + fiat_p521_uint1 x561; + uint32_t x562; + fiat_p521_uint1 x563; + uint32_t x564; + uint32_t x565; + fiat_p521_uint1 x566; + uint32_t x567; + fiat_p521_uint1 x568; + uint32_t x569; + fiat_p521_uint1 x570; + uint32_t x571; + fiat_p521_uint1 x572; + uint32_t x573; + fiat_p521_uint1 x574; + uint32_t x575; + fiat_p521_uint1 x576; + uint32_t x577; + fiat_p521_uint1 x578; + uint32_t x579; + fiat_p521_uint1 x580; + uint32_t x581; + fiat_p521_uint1 x582; + uint32_t x583; + fiat_p521_uint1 x584; + uint32_t x585; + fiat_p521_uint1 x586; + uint32_t x587; + fiat_p521_uint1 x588; + uint32_t x589; + fiat_p521_uint1 x590; + uint32_t x591; + fiat_p521_uint1 x592; + uint32_t x593; + fiat_p521_uint1 x594; + uint32_t x595; + fiat_p521_uint1 x596; + uint32_t x597; + fiat_p521_uint1 x598; + uint32_t x599; + fiat_p521_uint1 x600; + uint32_t x601; + uint32_t x602; + uint32_t x603; + uint32_t x604; + uint32_t x605; + uint32_t x606; + uint32_t x607; + uint32_t x608; + uint32_t x609; + uint32_t x610; + uint32_t x611; + uint32_t x612; + uint32_t x613; + uint32_t x614; + uint32_t x615; + uint32_t x616; + uint32_t x617; + uint32_t x618; + uint32_t x619; + uint32_t x620; + uint32_t x621; + uint32_t x622; + uint32_t x623; + uint32_t x624; + uint32_t x625; + uint32_t x626; + uint32_t x627; + uint32_t x628; + uint32_t x629; + uint32_t x630; + uint32_t x631; + uint32_t x632; + uint32_t x633; + uint32_t x634; + uint32_t x635; + uint32_t x636; + fiat_p521_uint1 x637; + uint32_t x638; + fiat_p521_uint1 x639; + uint32_t x640; + fiat_p521_uint1 x641; + uint32_t x642; + fiat_p521_uint1 x643; + uint32_t x644; + fiat_p521_uint1 x645; + uint32_t x646; + fiat_p521_uint1 x647; + uint32_t x648; + fiat_p521_uint1 x649; + uint32_t x650; + fiat_p521_uint1 x651; + uint32_t x652; + fiat_p521_uint1 x653; + uint32_t x654; + fiat_p521_uint1 x655; + uint32_t x656; + fiat_p521_uint1 x657; + uint32_t x658; + fiat_p521_uint1 x659; + uint32_t x660; + fiat_p521_uint1 x661; + uint32_t x662; + fiat_p521_uint1 x663; + uint32_t x664; + fiat_p521_uint1 x665; + uint32_t x666; + fiat_p521_uint1 x667; + uint32_t x668; + uint32_t x669; + fiat_p521_uint1 x670; + uint32_t x671; + fiat_p521_uint1 x672; + uint32_t x673; + fiat_p521_uint1 x674; + uint32_t x675; + fiat_p521_uint1 x676; + uint32_t x677; + fiat_p521_uint1 x678; + uint32_t x679; + fiat_p521_uint1 x680; + uint32_t x681; + fiat_p521_uint1 x682; + uint32_t x683; + fiat_p521_uint1 x684; + uint32_t x685; + fiat_p521_uint1 x686; + uint32_t x687; + fiat_p521_uint1 x688; + uint32_t x689; + fiat_p521_uint1 x690; + uint32_t x691; + fiat_p521_uint1 x692; + uint32_t x693; + fiat_p521_uint1 x694; + uint32_t x695; + fiat_p521_uint1 x696; + uint32_t x697; + fiat_p521_uint1 x698; + uint32_t x699; + fiat_p521_uint1 x700; + uint32_t x701; + fiat_p521_uint1 x702; + uint32_t x703; + fiat_p521_uint1 x704; + uint32_t x705; + uint32_t x706; + uint32_t x707; + uint32_t x708; + uint32_t x709; + uint32_t x710; + uint32_t x711; + uint32_t x712; + uint32_t x713; + uint32_t x714; + uint32_t x715; + uint32_t x716; + uint32_t x717; + uint32_t x718; + uint32_t x719; + uint32_t x720; + uint32_t x721; + uint32_t x722; + uint32_t x723; + uint32_t x724; + uint32_t x725; + uint32_t x726; + uint32_t x727; + uint32_t x728; + uint32_t x729; + uint32_t x730; + uint32_t x731; + uint32_t x732; + uint32_t x733; + uint32_t x734; + uint32_t x735; + uint32_t x736; + uint32_t x737; + uint32_t x738; + uint32_t x739; + fiat_p521_uint1 x740; + uint32_t x741; + fiat_p521_uint1 x742; + uint32_t x743; + fiat_p521_uint1 x744; + uint32_t x745; + fiat_p521_uint1 x746; + uint32_t x747; + fiat_p521_uint1 x748; + uint32_t x749; + fiat_p521_uint1 x750; + uint32_t x751; + fiat_p521_uint1 x752; + uint32_t x753; + fiat_p521_uint1 x754; + uint32_t x755; + fiat_p521_uint1 x756; + uint32_t x757; + fiat_p521_uint1 x758; + uint32_t x759; + fiat_p521_uint1 x760; + uint32_t x761; + fiat_p521_uint1 x762; + uint32_t x763; + fiat_p521_uint1 x764; + uint32_t x765; + fiat_p521_uint1 x766; + uint32_t x767; + fiat_p521_uint1 x768; + uint32_t x769; + fiat_p521_uint1 x770; + uint32_t x771; + uint32_t x772; + fiat_p521_uint1 x773; + uint32_t x774; + fiat_p521_uint1 x775; + uint32_t x776; + fiat_p521_uint1 x777; + uint32_t x778; + fiat_p521_uint1 x779; + uint32_t x780; + fiat_p521_uint1 x781; + uint32_t x782; + fiat_p521_uint1 x783; + uint32_t x784; + fiat_p521_uint1 x785; + uint32_t x786; + fiat_p521_uint1 x787; + uint32_t x788; + fiat_p521_uint1 x789; + uint32_t x790; + fiat_p521_uint1 x791; + uint32_t x792; + fiat_p521_uint1 x793; + uint32_t x794; + fiat_p521_uint1 x795; + uint32_t x796; + fiat_p521_uint1 x797; + uint32_t x798; + fiat_p521_uint1 x799; + uint32_t x800; + fiat_p521_uint1 x801; + uint32_t x802; + fiat_p521_uint1 x803; + uint32_t x804; + fiat_p521_uint1 x805; + uint32_t x806; + fiat_p521_uint1 x807; + uint32_t x808; + uint32_t x809; + uint32_t x810; + uint32_t x811; + uint32_t x812; + uint32_t x813; + uint32_t x814; + uint32_t x815; + uint32_t x816; + uint32_t x817; + uint32_t x818; + uint32_t x819; + uint32_t x820; + uint32_t x821; + uint32_t x822; + uint32_t x823; + uint32_t x824; + uint32_t x825; + uint32_t x826; + uint32_t x827; + uint32_t x828; + uint32_t x829; + uint32_t x830; + uint32_t x831; + uint32_t x832; + uint32_t x833; + uint32_t x834; + uint32_t x835; + uint32_t x836; + uint32_t x837; + uint32_t x838; + uint32_t x839; + uint32_t x840; + uint32_t x841; + uint32_t x842; + uint32_t x843; + fiat_p521_uint1 x844; + uint32_t x845; + fiat_p521_uint1 x846; + uint32_t x847; + fiat_p521_uint1 x848; + uint32_t x849; + fiat_p521_uint1 x850; + uint32_t x851; + fiat_p521_uint1 x852; + uint32_t x853; + fiat_p521_uint1 x854; + uint32_t x855; + fiat_p521_uint1 x856; + uint32_t x857; + fiat_p521_uint1 x858; + uint32_t x859; + fiat_p521_uint1 x860; + uint32_t x861; + fiat_p521_uint1 x862; + uint32_t x863; + fiat_p521_uint1 x864; + uint32_t x865; + fiat_p521_uint1 x866; + uint32_t x867; + fiat_p521_uint1 x868; + uint32_t x869; + fiat_p521_uint1 x870; + uint32_t x871; + fiat_p521_uint1 x872; + uint32_t x873; + fiat_p521_uint1 x874; + uint32_t x875; + uint32_t x876; + fiat_p521_uint1 x877; + uint32_t x878; + fiat_p521_uint1 x879; + uint32_t x880; + fiat_p521_uint1 x881; + uint32_t x882; + fiat_p521_uint1 x883; + uint32_t x884; + fiat_p521_uint1 x885; + uint32_t x886; + fiat_p521_uint1 x887; + uint32_t x888; + fiat_p521_uint1 x889; + uint32_t x890; + fiat_p521_uint1 x891; + uint32_t x892; + fiat_p521_uint1 x893; + uint32_t x894; + fiat_p521_uint1 x895; + uint32_t x896; + fiat_p521_uint1 x897; + uint32_t x898; + fiat_p521_uint1 x899; + uint32_t x900; + fiat_p521_uint1 x901; + uint32_t x902; + fiat_p521_uint1 x903; + uint32_t x904; + fiat_p521_uint1 x905; + uint32_t x906; + fiat_p521_uint1 x907; + uint32_t x908; + fiat_p521_uint1 x909; + uint32_t x910; + fiat_p521_uint1 x911; + uint32_t x912; + uint32_t x913; + uint32_t x914; + uint32_t x915; + uint32_t x916; + uint32_t x917; + uint32_t x918; + uint32_t x919; + uint32_t x920; + uint32_t x921; + uint32_t x922; + uint32_t x923; + uint32_t x924; + uint32_t x925; + uint32_t x926; + uint32_t x927; + uint32_t x928; + uint32_t x929; + uint32_t x930; + uint32_t x931; + uint32_t x932; + uint32_t x933; + uint32_t x934; + uint32_t x935; + uint32_t x936; + uint32_t x937; + uint32_t x938; + uint32_t x939; + uint32_t x940; + uint32_t x941; + uint32_t x942; + uint32_t x943; + uint32_t x944; + uint32_t x945; + uint32_t x946; + fiat_p521_uint1 x947; + uint32_t x948; + fiat_p521_uint1 x949; + uint32_t x950; + fiat_p521_uint1 x951; + uint32_t x952; + fiat_p521_uint1 x953; + uint32_t x954; + fiat_p521_uint1 x955; + uint32_t x956; + fiat_p521_uint1 x957; + uint32_t x958; + fiat_p521_uint1 x959; + uint32_t x960; + fiat_p521_uint1 x961; + uint32_t x962; + fiat_p521_uint1 x963; + uint32_t x964; + fiat_p521_uint1 x965; + uint32_t x966; + fiat_p521_uint1 x967; + uint32_t x968; + fiat_p521_uint1 x969; + uint32_t x970; + fiat_p521_uint1 x971; + uint32_t x972; + fiat_p521_uint1 x973; + uint32_t x974; + fiat_p521_uint1 x975; + uint32_t x976; + fiat_p521_uint1 x977; + uint32_t x978; + uint32_t x979; + fiat_p521_uint1 x980; + uint32_t x981; + fiat_p521_uint1 x982; + uint32_t x983; + fiat_p521_uint1 x984; + uint32_t x985; + fiat_p521_uint1 x986; + uint32_t x987; + fiat_p521_uint1 x988; + uint32_t x989; + fiat_p521_uint1 x990; + uint32_t x991; + fiat_p521_uint1 x992; + uint32_t x993; + fiat_p521_uint1 x994; + uint32_t x995; + fiat_p521_uint1 x996; + uint32_t x997; + fiat_p521_uint1 x998; + uint32_t x999; + fiat_p521_uint1 x1000; + uint32_t x1001; + fiat_p521_uint1 x1002; + uint32_t x1003; + fiat_p521_uint1 x1004; + uint32_t x1005; + fiat_p521_uint1 x1006; + uint32_t x1007; + fiat_p521_uint1 x1008; + uint32_t x1009; + fiat_p521_uint1 x1010; + uint32_t x1011; + fiat_p521_uint1 x1012; + uint32_t x1013; + fiat_p521_uint1 x1014; + uint32_t x1015; + uint32_t x1016; + uint32_t x1017; + uint32_t x1018; + uint32_t x1019; + uint32_t x1020; + uint32_t x1021; + uint32_t x1022; + uint32_t x1023; + uint32_t x1024; + uint32_t x1025; + uint32_t x1026; + uint32_t x1027; + uint32_t x1028; + uint32_t x1029; + uint32_t x1030; + uint32_t x1031; + uint32_t x1032; + uint32_t x1033; + uint32_t x1034; + uint32_t x1035; + uint32_t x1036; + uint32_t x1037; + uint32_t x1038; + uint32_t x1039; + uint32_t x1040; + uint32_t x1041; + uint32_t x1042; + uint32_t x1043; + uint32_t x1044; + uint32_t x1045; + uint32_t x1046; + uint32_t x1047; + uint32_t x1048; + uint32_t x1049; + uint32_t x1050; + fiat_p521_uint1 x1051; + uint32_t x1052; + fiat_p521_uint1 x1053; + uint32_t x1054; + fiat_p521_uint1 x1055; + uint32_t x1056; + fiat_p521_uint1 x1057; + uint32_t x1058; + fiat_p521_uint1 x1059; + uint32_t x1060; + fiat_p521_uint1 x1061; + uint32_t x1062; + fiat_p521_uint1 x1063; + uint32_t x1064; + fiat_p521_uint1 x1065; + uint32_t x1066; + fiat_p521_uint1 x1067; + uint32_t x1068; + fiat_p521_uint1 x1069; + uint32_t x1070; + fiat_p521_uint1 x1071; + uint32_t x1072; + fiat_p521_uint1 x1073; + uint32_t x1074; + fiat_p521_uint1 x1075; + uint32_t x1076; + fiat_p521_uint1 x1077; + uint32_t x1078; + fiat_p521_uint1 x1079; + uint32_t x1080; + fiat_p521_uint1 x1081; + uint32_t x1082; + uint32_t x1083; + fiat_p521_uint1 x1084; + uint32_t x1085; + fiat_p521_uint1 x1086; + uint32_t x1087; + fiat_p521_uint1 x1088; + uint32_t x1089; + fiat_p521_uint1 x1090; + uint32_t x1091; + fiat_p521_uint1 x1092; + uint32_t x1093; + fiat_p521_uint1 x1094; + uint32_t x1095; + fiat_p521_uint1 x1096; + uint32_t x1097; + fiat_p521_uint1 x1098; + uint32_t x1099; + fiat_p521_uint1 x1100; + uint32_t x1101; + fiat_p521_uint1 x1102; + uint32_t x1103; + fiat_p521_uint1 x1104; + uint32_t x1105; + fiat_p521_uint1 x1106; + uint32_t x1107; + fiat_p521_uint1 x1108; + uint32_t x1109; + fiat_p521_uint1 x1110; + uint32_t x1111; + fiat_p521_uint1 x1112; + uint32_t x1113; + fiat_p521_uint1 x1114; + uint32_t x1115; + fiat_p521_uint1 x1116; + uint32_t x1117; + fiat_p521_uint1 x1118; + uint32_t x1119; + uint32_t x1120; + uint32_t x1121; + uint32_t x1122; + uint32_t x1123; + uint32_t x1124; + uint32_t x1125; + uint32_t x1126; + uint32_t x1127; + uint32_t x1128; + uint32_t x1129; + uint32_t x1130; + uint32_t x1131; + uint32_t x1132; + uint32_t x1133; + uint32_t x1134; + uint32_t x1135; + uint32_t x1136; + uint32_t x1137; + uint32_t x1138; + uint32_t x1139; + uint32_t x1140; + uint32_t x1141; + uint32_t x1142; + uint32_t x1143; + uint32_t x1144; + uint32_t x1145; + uint32_t x1146; + uint32_t x1147; + uint32_t x1148; + uint32_t x1149; + uint32_t x1150; + uint32_t x1151; + uint32_t x1152; + uint32_t x1153; + fiat_p521_uint1 x1154; + uint32_t x1155; + fiat_p521_uint1 x1156; + uint32_t x1157; + fiat_p521_uint1 x1158; + uint32_t x1159; + fiat_p521_uint1 x1160; + uint32_t x1161; + fiat_p521_uint1 x1162; + uint32_t x1163; + fiat_p521_uint1 x1164; + uint32_t x1165; + fiat_p521_uint1 x1166; + uint32_t x1167; + fiat_p521_uint1 x1168; + uint32_t x1169; + fiat_p521_uint1 x1170; + uint32_t x1171; + fiat_p521_uint1 x1172; + uint32_t x1173; + fiat_p521_uint1 x1174; + uint32_t x1175; + fiat_p521_uint1 x1176; + uint32_t x1177; + fiat_p521_uint1 x1178; + uint32_t x1179; + fiat_p521_uint1 x1180; + uint32_t x1181; + fiat_p521_uint1 x1182; + uint32_t x1183; + fiat_p521_uint1 x1184; + uint32_t x1185; + uint32_t x1186; + fiat_p521_uint1 x1187; + uint32_t x1188; + fiat_p521_uint1 x1189; + uint32_t x1190; + fiat_p521_uint1 x1191; + uint32_t x1192; + fiat_p521_uint1 x1193; + uint32_t x1194; + fiat_p521_uint1 x1195; + uint32_t x1196; + fiat_p521_uint1 x1197; + uint32_t x1198; + fiat_p521_uint1 x1199; + uint32_t x1200; + fiat_p521_uint1 x1201; + uint32_t x1202; + fiat_p521_uint1 x1203; + uint32_t x1204; + fiat_p521_uint1 x1205; + uint32_t x1206; + fiat_p521_uint1 x1207; + uint32_t x1208; + fiat_p521_uint1 x1209; + uint32_t x1210; + fiat_p521_uint1 x1211; + uint32_t x1212; + fiat_p521_uint1 x1213; + uint32_t x1214; + fiat_p521_uint1 x1215; + uint32_t x1216; + fiat_p521_uint1 x1217; + uint32_t x1218; + fiat_p521_uint1 x1219; + uint32_t x1220; + fiat_p521_uint1 x1221; + uint32_t x1222; + uint32_t x1223; + uint32_t x1224; + uint32_t x1225; + uint32_t x1226; + uint32_t x1227; + uint32_t x1228; + uint32_t x1229; + uint32_t x1230; + uint32_t x1231; + uint32_t x1232; + uint32_t x1233; + uint32_t x1234; + uint32_t x1235; + uint32_t x1236; + uint32_t x1237; + uint32_t x1238; + uint32_t x1239; + uint32_t x1240; + uint32_t x1241; + uint32_t x1242; + uint32_t x1243; + uint32_t x1244; + uint32_t x1245; + uint32_t x1246; + uint32_t x1247; + uint32_t x1248; + uint32_t x1249; + uint32_t x1250; + uint32_t x1251; + uint32_t x1252; + uint32_t x1253; + uint32_t x1254; + uint32_t x1255; + uint32_t x1256; + uint32_t x1257; + fiat_p521_uint1 x1258; + uint32_t x1259; + fiat_p521_uint1 x1260; + uint32_t x1261; + fiat_p521_uint1 x1262; + uint32_t x1263; + fiat_p521_uint1 x1264; + uint32_t x1265; + fiat_p521_uint1 x1266; + uint32_t x1267; + fiat_p521_uint1 x1268; + uint32_t x1269; + fiat_p521_uint1 x1270; + uint32_t x1271; + fiat_p521_uint1 x1272; + uint32_t x1273; + fiat_p521_uint1 x1274; + uint32_t x1275; + fiat_p521_uint1 x1276; + uint32_t x1277; + fiat_p521_uint1 x1278; + uint32_t x1279; + fiat_p521_uint1 x1280; + uint32_t x1281; + fiat_p521_uint1 x1282; + uint32_t x1283; + fiat_p521_uint1 x1284; + uint32_t x1285; + fiat_p521_uint1 x1286; + uint32_t x1287; + fiat_p521_uint1 x1288; + uint32_t x1289; + uint32_t x1290; + fiat_p521_uint1 x1291; + uint32_t x1292; + fiat_p521_uint1 x1293; + uint32_t x1294; + fiat_p521_uint1 x1295; + uint32_t x1296; + fiat_p521_uint1 x1297; + uint32_t x1298; + fiat_p521_uint1 x1299; + uint32_t x1300; + fiat_p521_uint1 x1301; + uint32_t x1302; + fiat_p521_uint1 x1303; + uint32_t x1304; + fiat_p521_uint1 x1305; + uint32_t x1306; + fiat_p521_uint1 x1307; + uint32_t x1308; + fiat_p521_uint1 x1309; + uint32_t x1310; + fiat_p521_uint1 x1311; + uint32_t x1312; + fiat_p521_uint1 x1313; + uint32_t x1314; + fiat_p521_uint1 x1315; + uint32_t x1316; + fiat_p521_uint1 x1317; + uint32_t x1318; + fiat_p521_uint1 x1319; + uint32_t x1320; + fiat_p521_uint1 x1321; + uint32_t x1322; + fiat_p521_uint1 x1323; + uint32_t x1324; + fiat_p521_uint1 x1325; + uint32_t x1326; + uint32_t x1327; + uint32_t x1328; + uint32_t x1329; + uint32_t x1330; + uint32_t x1331; + uint32_t x1332; + uint32_t x1333; + uint32_t x1334; + uint32_t x1335; + uint32_t x1336; + uint32_t x1337; + uint32_t x1338; + uint32_t x1339; + uint32_t x1340; + uint32_t x1341; + uint32_t x1342; + uint32_t x1343; + uint32_t x1344; + uint32_t x1345; + uint32_t x1346; + uint32_t x1347; + uint32_t x1348; + uint32_t x1349; + uint32_t x1350; + uint32_t x1351; + uint32_t x1352; + uint32_t x1353; + uint32_t x1354; + uint32_t x1355; + uint32_t x1356; + uint32_t x1357; + uint32_t x1358; + uint32_t x1359; + uint32_t x1360; + fiat_p521_uint1 x1361; + uint32_t x1362; + fiat_p521_uint1 x1363; + uint32_t x1364; + fiat_p521_uint1 x1365; + uint32_t x1366; + fiat_p521_uint1 x1367; + uint32_t x1368; + fiat_p521_uint1 x1369; + uint32_t x1370; + fiat_p521_uint1 x1371; + uint32_t x1372; + fiat_p521_uint1 x1373; + uint32_t x1374; + fiat_p521_uint1 x1375; + uint32_t x1376; + fiat_p521_uint1 x1377; + uint32_t x1378; + fiat_p521_uint1 x1379; + uint32_t x1380; + fiat_p521_uint1 x1381; + uint32_t x1382; + fiat_p521_uint1 x1383; + uint32_t x1384; + fiat_p521_uint1 x1385; + uint32_t x1386; + fiat_p521_uint1 x1387; + uint32_t x1388; + fiat_p521_uint1 x1389; + uint32_t x1390; + fiat_p521_uint1 x1391; + uint32_t x1392; + uint32_t x1393; + fiat_p521_uint1 x1394; + uint32_t x1395; + fiat_p521_uint1 x1396; + uint32_t x1397; + fiat_p521_uint1 x1398; + uint32_t x1399; + fiat_p521_uint1 x1400; + uint32_t x1401; + fiat_p521_uint1 x1402; + uint32_t x1403; + fiat_p521_uint1 x1404; + uint32_t x1405; + fiat_p521_uint1 x1406; + uint32_t x1407; + fiat_p521_uint1 x1408; + uint32_t x1409; + fiat_p521_uint1 x1410; + uint32_t x1411; + fiat_p521_uint1 x1412; + uint32_t x1413; + fiat_p521_uint1 x1414; + uint32_t x1415; + fiat_p521_uint1 x1416; + uint32_t x1417; + fiat_p521_uint1 x1418; + uint32_t x1419; + fiat_p521_uint1 x1420; + uint32_t x1421; + fiat_p521_uint1 x1422; + uint32_t x1423; + fiat_p521_uint1 x1424; + uint32_t x1425; + fiat_p521_uint1 x1426; + uint32_t x1427; + fiat_p521_uint1 x1428; + uint32_t x1429; + uint32_t x1430; + uint32_t x1431; + uint32_t x1432; + uint32_t x1433; + uint32_t x1434; + uint32_t x1435; + uint32_t x1436; + uint32_t x1437; + uint32_t x1438; + uint32_t x1439; + uint32_t x1440; + uint32_t x1441; + uint32_t x1442; + uint32_t x1443; + uint32_t x1444; + uint32_t x1445; + uint32_t x1446; + uint32_t x1447; + uint32_t x1448; + uint32_t x1449; + uint32_t x1450; + uint32_t x1451; + uint32_t x1452; + uint32_t x1453; + uint32_t x1454; + uint32_t x1455; + uint32_t x1456; + uint32_t x1457; + uint32_t x1458; + uint32_t x1459; + uint32_t x1460; + uint32_t x1461; + uint32_t x1462; + uint32_t x1463; + uint32_t x1464; + fiat_p521_uint1 x1465; + uint32_t x1466; + fiat_p521_uint1 x1467; + uint32_t x1468; + fiat_p521_uint1 x1469; + uint32_t x1470; + fiat_p521_uint1 x1471; + uint32_t x1472; + fiat_p521_uint1 x1473; + uint32_t x1474; + fiat_p521_uint1 x1475; + uint32_t x1476; + fiat_p521_uint1 x1477; + uint32_t x1478; + fiat_p521_uint1 x1479; + uint32_t x1480; + fiat_p521_uint1 x1481; + uint32_t x1482; + fiat_p521_uint1 x1483; + uint32_t x1484; + fiat_p521_uint1 x1485; + uint32_t x1486; + fiat_p521_uint1 x1487; + uint32_t x1488; + fiat_p521_uint1 x1489; + uint32_t x1490; + fiat_p521_uint1 x1491; + uint32_t x1492; + fiat_p521_uint1 x1493; + uint32_t x1494; + fiat_p521_uint1 x1495; + uint32_t x1496; + uint32_t x1497; + fiat_p521_uint1 x1498; + uint32_t x1499; + fiat_p521_uint1 x1500; + uint32_t x1501; + fiat_p521_uint1 x1502; + uint32_t x1503; + fiat_p521_uint1 x1504; + uint32_t x1505; + fiat_p521_uint1 x1506; + uint32_t x1507; + fiat_p521_uint1 x1508; + uint32_t x1509; + fiat_p521_uint1 x1510; + uint32_t x1511; + fiat_p521_uint1 x1512; + uint32_t x1513; + fiat_p521_uint1 x1514; + uint32_t x1515; + fiat_p521_uint1 x1516; + uint32_t x1517; + fiat_p521_uint1 x1518; + uint32_t x1519; + fiat_p521_uint1 x1520; + uint32_t x1521; + fiat_p521_uint1 x1522; + uint32_t x1523; + fiat_p521_uint1 x1524; + uint32_t x1525; + fiat_p521_uint1 x1526; + uint32_t x1527; + fiat_p521_uint1 x1528; + uint32_t x1529; + fiat_p521_uint1 x1530; + uint32_t x1531; + fiat_p521_uint1 x1532; + uint32_t x1533; + uint32_t x1534; + uint32_t x1535; + uint32_t x1536; + uint32_t x1537; + uint32_t x1538; + uint32_t x1539; + uint32_t x1540; + uint32_t x1541; + uint32_t x1542; + uint32_t x1543; + uint32_t x1544; + uint32_t x1545; + uint32_t x1546; + uint32_t x1547; + uint32_t x1548; + uint32_t x1549; + uint32_t x1550; + uint32_t x1551; + uint32_t x1552; + uint32_t x1553; + uint32_t x1554; + uint32_t x1555; + uint32_t x1556; + uint32_t x1557; + uint32_t x1558; + uint32_t x1559; + uint32_t x1560; + uint32_t x1561; + uint32_t x1562; + uint32_t x1563; + uint32_t x1564; + uint32_t x1565; + uint32_t x1566; + uint32_t x1567; + fiat_p521_uint1 x1568; + uint32_t x1569; + fiat_p521_uint1 x1570; + uint32_t x1571; + fiat_p521_uint1 x1572; + uint32_t x1573; + fiat_p521_uint1 x1574; + uint32_t x1575; + fiat_p521_uint1 x1576; + uint32_t x1577; + fiat_p521_uint1 x1578; + uint32_t x1579; + fiat_p521_uint1 x1580; + uint32_t x1581; + fiat_p521_uint1 x1582; + uint32_t x1583; + fiat_p521_uint1 x1584; + uint32_t x1585; + fiat_p521_uint1 x1586; + uint32_t x1587; + fiat_p521_uint1 x1588; + uint32_t x1589; + fiat_p521_uint1 x1590; + uint32_t x1591; + fiat_p521_uint1 x1592; + uint32_t x1593; + fiat_p521_uint1 x1594; + uint32_t x1595; + fiat_p521_uint1 x1596; + uint32_t x1597; + fiat_p521_uint1 x1598; + uint32_t x1599; + uint32_t x1600; + fiat_p521_uint1 x1601; + uint32_t x1602; + fiat_p521_uint1 x1603; + uint32_t x1604; + fiat_p521_uint1 x1605; + uint32_t x1606; + fiat_p521_uint1 x1607; + uint32_t x1608; + fiat_p521_uint1 x1609; + uint32_t x1610; + fiat_p521_uint1 x1611; + uint32_t x1612; + fiat_p521_uint1 x1613; + uint32_t x1614; + fiat_p521_uint1 x1615; + uint32_t x1616; + fiat_p521_uint1 x1617; + uint32_t x1618; + fiat_p521_uint1 x1619; + uint32_t x1620; + fiat_p521_uint1 x1621; + uint32_t x1622; + fiat_p521_uint1 x1623; + uint32_t x1624; + fiat_p521_uint1 x1625; + uint32_t x1626; + fiat_p521_uint1 x1627; + uint32_t x1628; + fiat_p521_uint1 x1629; + uint32_t x1630; + fiat_p521_uint1 x1631; + uint32_t x1632; + fiat_p521_uint1 x1633; + uint32_t x1634; + fiat_p521_uint1 x1635; + uint32_t x1636; + uint32_t x1637; + uint32_t x1638; + uint32_t x1639; + uint32_t x1640; + uint32_t x1641; + uint32_t x1642; + uint32_t x1643; + uint32_t x1644; + uint32_t x1645; + uint32_t x1646; + uint32_t x1647; + uint32_t x1648; + uint32_t x1649; + uint32_t x1650; + uint32_t x1651; + uint32_t x1652; + uint32_t x1653; + uint32_t x1654; + uint32_t x1655; + uint32_t x1656; + uint32_t x1657; + uint32_t x1658; + uint32_t x1659; + uint32_t x1660; + uint32_t x1661; + uint32_t x1662; + uint32_t x1663; + uint32_t x1664; + uint32_t x1665; + uint32_t x1666; + uint32_t x1667; + uint32_t x1668; + uint32_t x1669; + uint32_t x1670; + uint32_t x1671; + fiat_p521_uint1 x1672; + uint32_t x1673; + fiat_p521_uint1 x1674; + uint32_t x1675; + fiat_p521_uint1 x1676; + uint32_t x1677; + fiat_p521_uint1 x1678; + uint32_t x1679; + fiat_p521_uint1 x1680; + uint32_t x1681; + fiat_p521_uint1 x1682; + uint32_t x1683; + fiat_p521_uint1 x1684; + uint32_t x1685; + fiat_p521_uint1 x1686; + uint32_t x1687; + fiat_p521_uint1 x1688; + uint32_t x1689; + fiat_p521_uint1 x1690; + uint32_t x1691; + fiat_p521_uint1 x1692; + uint32_t x1693; + fiat_p521_uint1 x1694; + uint32_t x1695; + fiat_p521_uint1 x1696; + uint32_t x1697; + fiat_p521_uint1 x1698; + uint32_t x1699; + fiat_p521_uint1 x1700; + uint32_t x1701; + fiat_p521_uint1 x1702; + uint32_t x1703; + uint32_t x1704; + fiat_p521_uint1 x1705; + uint32_t x1706; + fiat_p521_uint1 x1707; + uint32_t x1708; + fiat_p521_uint1 x1709; + uint32_t x1710; + fiat_p521_uint1 x1711; + uint32_t x1712; + fiat_p521_uint1 x1713; + uint32_t x1714; + fiat_p521_uint1 x1715; + uint32_t x1716; + fiat_p521_uint1 x1717; + uint32_t x1718; + fiat_p521_uint1 x1719; + uint32_t x1720; + fiat_p521_uint1 x1721; + uint32_t x1722; + fiat_p521_uint1 x1723; + uint32_t x1724; + fiat_p521_uint1 x1725; + uint32_t x1726; + fiat_p521_uint1 x1727; + uint32_t x1728; + fiat_p521_uint1 x1729; + uint32_t x1730; + fiat_p521_uint1 x1731; + uint32_t x1732; + fiat_p521_uint1 x1733; + uint32_t x1734; + fiat_p521_uint1 x1735; + uint32_t x1736; + fiat_p521_uint1 x1737; + uint32_t x1738; + fiat_p521_uint1 x1739; + uint32_t x1740; + uint32_t x1741; + uint32_t x1742; + uint32_t x1743; + uint32_t x1744; + uint32_t x1745; + uint32_t x1746; + uint32_t x1747; + uint32_t x1748; + uint32_t x1749; + uint32_t x1750; + uint32_t x1751; + uint32_t x1752; + uint32_t x1753; + uint32_t x1754; + uint32_t x1755; + uint32_t x1756; + uint32_t x1757; + uint32_t x1758; + uint32_t x1759; + uint32_t x1760; + uint32_t x1761; + uint32_t x1762; + uint32_t x1763; + uint32_t x1764; + uint32_t x1765; + uint32_t x1766; + uint32_t x1767; + uint32_t x1768; + uint32_t x1769; + uint32_t x1770; + uint32_t x1771; + uint32_t x1772; + uint32_t x1773; + uint32_t x1774; + fiat_p521_uint1 x1775; + uint32_t x1776; + fiat_p521_uint1 x1777; + uint32_t x1778; + fiat_p521_uint1 x1779; + uint32_t x1780; + fiat_p521_uint1 x1781; + uint32_t x1782; + fiat_p521_uint1 x1783; + uint32_t x1784; + fiat_p521_uint1 x1785; + uint32_t x1786; + fiat_p521_uint1 x1787; + uint32_t x1788; + fiat_p521_uint1 x1789; + uint32_t x1790; + fiat_p521_uint1 x1791; + uint32_t x1792; + fiat_p521_uint1 x1793; + uint32_t x1794; + fiat_p521_uint1 x1795; + uint32_t x1796; + fiat_p521_uint1 x1797; + uint32_t x1798; + fiat_p521_uint1 x1799; + uint32_t x1800; + fiat_p521_uint1 x1801; + uint32_t x1802; + fiat_p521_uint1 x1803; + uint32_t x1804; + fiat_p521_uint1 x1805; + uint32_t x1806; + uint32_t x1807; + fiat_p521_uint1 x1808; + uint32_t x1809; + fiat_p521_uint1 x1810; + uint32_t x1811; + fiat_p521_uint1 x1812; + uint32_t x1813; + fiat_p521_uint1 x1814; + uint32_t x1815; + fiat_p521_uint1 x1816; + uint32_t x1817; + fiat_p521_uint1 x1818; + uint32_t x1819; + fiat_p521_uint1 x1820; + uint32_t x1821; + fiat_p521_uint1 x1822; + uint32_t x1823; + fiat_p521_uint1 x1824; + uint32_t x1825; + fiat_p521_uint1 x1826; + uint32_t x1827; + fiat_p521_uint1 x1828; + uint32_t x1829; + fiat_p521_uint1 x1830; + uint32_t x1831; + fiat_p521_uint1 x1832; + uint32_t x1833; + fiat_p521_uint1 x1834; + uint32_t x1835; + fiat_p521_uint1 x1836; + uint32_t x1837; + fiat_p521_uint1 x1838; + uint32_t x1839; + fiat_p521_uint1 x1840; + uint32_t x1841; + fiat_p521_uint1 x1842; + uint32_t x1843; + uint32_t x1844; + uint32_t x1845; + uint32_t x1846; + uint32_t x1847; + uint32_t x1848; + uint32_t x1849; + uint32_t x1850; + uint32_t x1851; + uint32_t x1852; + uint32_t x1853; + uint32_t x1854; + uint32_t x1855; + uint32_t x1856; + uint32_t x1857; + uint32_t x1858; + uint32_t x1859; + uint32_t x1860; + uint32_t x1861; + uint32_t x1862; + uint32_t x1863; + uint32_t x1864; + uint32_t x1865; + uint32_t x1866; + uint32_t x1867; + uint32_t x1868; + uint32_t x1869; + uint32_t x1870; + uint32_t x1871; + uint32_t x1872; + uint32_t x1873; + uint32_t x1874; + uint32_t x1875; + uint32_t x1876; + uint32_t x1877; + uint32_t x1878; + fiat_p521_uint1 x1879; + uint32_t x1880; + fiat_p521_uint1 x1881; + uint32_t x1882; + fiat_p521_uint1 x1883; + uint32_t x1884; + fiat_p521_uint1 x1885; + uint32_t x1886; + fiat_p521_uint1 x1887; + uint32_t x1888; + fiat_p521_uint1 x1889; + uint32_t x1890; + fiat_p521_uint1 x1891; + uint32_t x1892; + fiat_p521_uint1 x1893; + uint32_t x1894; + fiat_p521_uint1 x1895; + uint32_t x1896; + fiat_p521_uint1 x1897; + uint32_t x1898; + fiat_p521_uint1 x1899; + uint32_t x1900; + fiat_p521_uint1 x1901; + uint32_t x1902; + fiat_p521_uint1 x1903; + uint32_t x1904; + fiat_p521_uint1 x1905; + uint32_t x1906; + fiat_p521_uint1 x1907; + uint32_t x1908; + fiat_p521_uint1 x1909; + uint32_t x1910; + uint32_t x1911; + fiat_p521_uint1 x1912; + uint32_t x1913; + fiat_p521_uint1 x1914; + uint32_t x1915; + fiat_p521_uint1 x1916; + uint32_t x1917; + fiat_p521_uint1 x1918; + uint32_t x1919; + fiat_p521_uint1 x1920; + uint32_t x1921; + fiat_p521_uint1 x1922; + uint32_t x1923; + fiat_p521_uint1 x1924; + uint32_t x1925; + fiat_p521_uint1 x1926; + uint32_t x1927; + fiat_p521_uint1 x1928; + uint32_t x1929; + fiat_p521_uint1 x1930; + uint32_t x1931; + fiat_p521_uint1 x1932; + uint32_t x1933; + fiat_p521_uint1 x1934; + uint32_t x1935; + fiat_p521_uint1 x1936; + uint32_t x1937; + fiat_p521_uint1 x1938; + uint32_t x1939; + fiat_p521_uint1 x1940; + uint32_t x1941; + fiat_p521_uint1 x1942; + uint32_t x1943; + fiat_p521_uint1 x1944; + uint32_t x1945; + fiat_p521_uint1 x1946; + uint32_t x1947; + uint32_t x1948; + uint32_t x1949; + uint32_t x1950; + uint32_t x1951; + uint32_t x1952; + uint32_t x1953; + uint32_t x1954; + uint32_t x1955; + uint32_t x1956; + uint32_t x1957; + uint32_t x1958; + uint32_t x1959; + uint32_t x1960; + uint32_t x1961; + uint32_t x1962; + uint32_t x1963; + uint32_t x1964; + uint32_t x1965; + uint32_t x1966; + uint32_t x1967; + uint32_t x1968; + uint32_t x1969; + uint32_t x1970; + uint32_t x1971; + uint32_t x1972; + uint32_t x1973; + uint32_t x1974; + uint32_t x1975; + uint32_t x1976; + uint32_t x1977; + uint32_t x1978; + uint32_t x1979; + uint32_t x1980; + uint32_t x1981; + fiat_p521_uint1 x1982; + uint32_t x1983; + fiat_p521_uint1 x1984; + uint32_t x1985; + fiat_p521_uint1 x1986; + uint32_t x1987; + fiat_p521_uint1 x1988; + uint32_t x1989; + fiat_p521_uint1 x1990; + uint32_t x1991; + fiat_p521_uint1 x1992; + uint32_t x1993; + fiat_p521_uint1 x1994; + uint32_t x1995; + fiat_p521_uint1 x1996; + uint32_t x1997; + fiat_p521_uint1 x1998; + uint32_t x1999; + fiat_p521_uint1 x2000; + uint32_t x2001; + fiat_p521_uint1 x2002; + uint32_t x2003; + fiat_p521_uint1 x2004; + uint32_t x2005; + fiat_p521_uint1 x2006; + uint32_t x2007; + fiat_p521_uint1 x2008; + uint32_t x2009; + fiat_p521_uint1 x2010; + uint32_t x2011; + fiat_p521_uint1 x2012; + uint32_t x2013; + uint32_t x2014; + fiat_p521_uint1 x2015; + uint32_t x2016; + fiat_p521_uint1 x2017; + uint32_t x2018; + fiat_p521_uint1 x2019; + uint32_t x2020; + fiat_p521_uint1 x2021; + uint32_t x2022; + fiat_p521_uint1 x2023; + uint32_t x2024; + fiat_p521_uint1 x2025; + uint32_t x2026; + fiat_p521_uint1 x2027; + uint32_t x2028; + fiat_p521_uint1 x2029; + uint32_t x2030; + fiat_p521_uint1 x2031; + uint32_t x2032; + fiat_p521_uint1 x2033; + uint32_t x2034; + fiat_p521_uint1 x2035; + uint32_t x2036; + fiat_p521_uint1 x2037; + uint32_t x2038; + fiat_p521_uint1 x2039; + uint32_t x2040; + fiat_p521_uint1 x2041; + uint32_t x2042; + fiat_p521_uint1 x2043; + uint32_t x2044; + fiat_p521_uint1 x2045; + uint32_t x2046; + fiat_p521_uint1 x2047; + uint32_t x2048; + fiat_p521_uint1 x2049; + uint32_t x2050; + uint32_t x2051; + uint32_t x2052; + uint32_t x2053; + uint32_t x2054; + uint32_t x2055; + uint32_t x2056; + uint32_t x2057; + uint32_t x2058; + uint32_t x2059; + uint32_t x2060; + uint32_t x2061; + uint32_t x2062; + uint32_t x2063; + uint32_t x2064; + uint32_t x2065; + uint32_t x2066; + uint32_t x2067; + uint32_t x2068; + uint32_t x2069; + uint32_t x2070; + uint32_t x2071; + uint32_t x2072; + uint32_t x2073; + uint32_t x2074; + uint32_t x2075; + uint32_t x2076; + uint32_t x2077; + uint32_t x2078; + uint32_t x2079; + uint32_t x2080; + uint32_t x2081; + uint32_t x2082; + uint32_t x2083; + uint32_t x2084; + uint32_t x2085; + fiat_p521_uint1 x2086; + uint32_t x2087; + fiat_p521_uint1 x2088; + uint32_t x2089; + fiat_p521_uint1 x2090; + uint32_t x2091; + fiat_p521_uint1 x2092; + uint32_t x2093; + fiat_p521_uint1 x2094; + uint32_t x2095; + fiat_p521_uint1 x2096; + uint32_t x2097; + fiat_p521_uint1 x2098; + uint32_t x2099; + fiat_p521_uint1 x2100; + uint32_t x2101; + fiat_p521_uint1 x2102; + uint32_t x2103; + fiat_p521_uint1 x2104; + uint32_t x2105; + fiat_p521_uint1 x2106; + uint32_t x2107; + fiat_p521_uint1 x2108; + uint32_t x2109; + fiat_p521_uint1 x2110; + uint32_t x2111; + fiat_p521_uint1 x2112; + uint32_t x2113; + fiat_p521_uint1 x2114; + uint32_t x2115; + fiat_p521_uint1 x2116; + uint32_t x2117; + uint32_t x2118; + fiat_p521_uint1 x2119; + uint32_t x2120; + fiat_p521_uint1 x2121; + uint32_t x2122; + fiat_p521_uint1 x2123; + uint32_t x2124; + fiat_p521_uint1 x2125; + uint32_t x2126; + fiat_p521_uint1 x2127; + uint32_t x2128; + fiat_p521_uint1 x2129; + uint32_t x2130; + fiat_p521_uint1 x2131; + uint32_t x2132; + fiat_p521_uint1 x2133; + uint32_t x2134; + fiat_p521_uint1 x2135; + uint32_t x2136; + fiat_p521_uint1 x2137; + uint32_t x2138; + fiat_p521_uint1 x2139; + uint32_t x2140; + fiat_p521_uint1 x2141; + uint32_t x2142; + fiat_p521_uint1 x2143; + uint32_t x2144; + fiat_p521_uint1 x2145; + uint32_t x2146; + fiat_p521_uint1 x2147; + uint32_t x2148; + fiat_p521_uint1 x2149; + uint32_t x2150; + fiat_p521_uint1 x2151; + uint32_t x2152; + fiat_p521_uint1 x2153; + uint32_t x2154; + uint32_t x2155; + uint32_t x2156; + uint32_t x2157; + uint32_t x2158; + uint32_t x2159; + uint32_t x2160; + uint32_t x2161; + uint32_t x2162; + uint32_t x2163; + uint32_t x2164; + uint32_t x2165; + uint32_t x2166; + uint32_t x2167; + uint32_t x2168; + uint32_t x2169; + uint32_t x2170; + uint32_t x2171; + uint32_t x2172; + uint32_t x2173; + uint32_t x2174; + uint32_t x2175; + uint32_t x2176; + uint32_t x2177; + uint32_t x2178; + uint32_t x2179; + uint32_t x2180; + uint32_t x2181; + uint32_t x2182; + uint32_t x2183; + uint32_t x2184; + uint32_t x2185; + uint32_t x2186; + uint32_t x2187; + uint32_t x2188; + fiat_p521_uint1 x2189; + uint32_t x2190; + fiat_p521_uint1 x2191; + uint32_t x2192; + fiat_p521_uint1 x2193; + uint32_t x2194; + fiat_p521_uint1 x2195; + uint32_t x2196; + fiat_p521_uint1 x2197; + uint32_t x2198; + fiat_p521_uint1 x2199; + uint32_t x2200; + fiat_p521_uint1 x2201; + uint32_t x2202; + fiat_p521_uint1 x2203; + uint32_t x2204; + fiat_p521_uint1 x2205; + uint32_t x2206; + fiat_p521_uint1 x2207; + uint32_t x2208; + fiat_p521_uint1 x2209; + uint32_t x2210; + fiat_p521_uint1 x2211; + uint32_t x2212; + fiat_p521_uint1 x2213; + uint32_t x2214; + fiat_p521_uint1 x2215; + uint32_t x2216; + fiat_p521_uint1 x2217; + uint32_t x2218; + fiat_p521_uint1 x2219; + uint32_t x2220; + uint32_t x2221; + fiat_p521_uint1 x2222; + uint32_t x2223; + fiat_p521_uint1 x2224; + uint32_t x2225; + fiat_p521_uint1 x2226; + uint32_t x2227; + fiat_p521_uint1 x2228; + uint32_t x2229; + fiat_p521_uint1 x2230; + uint32_t x2231; + fiat_p521_uint1 x2232; + uint32_t x2233; + fiat_p521_uint1 x2234; + uint32_t x2235; + fiat_p521_uint1 x2236; + uint32_t x2237; + fiat_p521_uint1 x2238; + uint32_t x2239; + fiat_p521_uint1 x2240; + uint32_t x2241; + fiat_p521_uint1 x2242; + uint32_t x2243; + fiat_p521_uint1 x2244; + uint32_t x2245; + fiat_p521_uint1 x2246; + uint32_t x2247; + fiat_p521_uint1 x2248; + uint32_t x2249; + fiat_p521_uint1 x2250; + uint32_t x2251; + fiat_p521_uint1 x2252; + uint32_t x2253; + fiat_p521_uint1 x2254; + uint32_t x2255; + fiat_p521_uint1 x2256; + uint32_t x2257; + uint32_t x2258; + uint32_t x2259; + uint32_t x2260; + uint32_t x2261; + uint32_t x2262; + uint32_t x2263; + uint32_t x2264; + uint32_t x2265; + uint32_t x2266; + uint32_t x2267; + uint32_t x2268; + uint32_t x2269; + uint32_t x2270; + uint32_t x2271; + uint32_t x2272; + uint32_t x2273; + uint32_t x2274; + uint32_t x2275; + uint32_t x2276; + uint32_t x2277; + uint32_t x2278; + uint32_t x2279; + uint32_t x2280; + uint32_t x2281; + uint32_t x2282; + uint32_t x2283; + uint32_t x2284; + uint32_t x2285; + uint32_t x2286; + uint32_t x2287; + uint32_t x2288; + uint32_t x2289; + uint32_t x2290; + uint32_t x2291; + uint32_t x2292; + fiat_p521_uint1 x2293; + uint32_t x2294; + fiat_p521_uint1 x2295; + uint32_t x2296; + fiat_p521_uint1 x2297; + uint32_t x2298; + fiat_p521_uint1 x2299; + uint32_t x2300; + fiat_p521_uint1 x2301; + uint32_t x2302; + fiat_p521_uint1 x2303; + uint32_t x2304; + fiat_p521_uint1 x2305; + uint32_t x2306; + fiat_p521_uint1 x2307; + uint32_t x2308; + fiat_p521_uint1 x2309; + uint32_t x2310; + fiat_p521_uint1 x2311; + uint32_t x2312; + fiat_p521_uint1 x2313; + uint32_t x2314; + fiat_p521_uint1 x2315; + uint32_t x2316; + fiat_p521_uint1 x2317; + uint32_t x2318; + fiat_p521_uint1 x2319; + uint32_t x2320; + fiat_p521_uint1 x2321; + uint32_t x2322; + fiat_p521_uint1 x2323; + uint32_t x2324; + uint32_t x2325; + fiat_p521_uint1 x2326; + uint32_t x2327; + fiat_p521_uint1 x2328; + uint32_t x2329; + fiat_p521_uint1 x2330; + uint32_t x2331; + fiat_p521_uint1 x2332; + uint32_t x2333; + fiat_p521_uint1 x2334; + uint32_t x2335; + fiat_p521_uint1 x2336; + uint32_t x2337; + fiat_p521_uint1 x2338; + uint32_t x2339; + fiat_p521_uint1 x2340; + uint32_t x2341; + fiat_p521_uint1 x2342; + uint32_t x2343; + fiat_p521_uint1 x2344; + uint32_t x2345; + fiat_p521_uint1 x2346; + uint32_t x2347; + fiat_p521_uint1 x2348; + uint32_t x2349; + fiat_p521_uint1 x2350; + uint32_t x2351; + fiat_p521_uint1 x2352; + uint32_t x2353; + fiat_p521_uint1 x2354; + uint32_t x2355; + fiat_p521_uint1 x2356; + uint32_t x2357; + fiat_p521_uint1 x2358; + uint32_t x2359; + fiat_p521_uint1 x2360; + uint32_t x2361; + uint32_t x2362; + uint32_t x2363; + uint32_t x2364; + uint32_t x2365; + uint32_t x2366; + uint32_t x2367; + uint32_t x2368; + uint32_t x2369; + uint32_t x2370; + uint32_t x2371; + uint32_t x2372; + uint32_t x2373; + uint32_t x2374; + uint32_t x2375; + uint32_t x2376; + uint32_t x2377; + uint32_t x2378; + uint32_t x2379; + uint32_t x2380; + uint32_t x2381; + uint32_t x2382; + uint32_t x2383; + uint32_t x2384; + uint32_t x2385; + uint32_t x2386; + uint32_t x2387; + uint32_t x2388; + uint32_t x2389; + uint32_t x2390; + uint32_t x2391; + uint32_t x2392; + uint32_t x2393; + uint32_t x2394; + uint32_t x2395; + fiat_p521_uint1 x2396; + uint32_t x2397; + fiat_p521_uint1 x2398; + uint32_t x2399; + fiat_p521_uint1 x2400; + uint32_t x2401; + fiat_p521_uint1 x2402; + uint32_t x2403; + fiat_p521_uint1 x2404; + uint32_t x2405; + fiat_p521_uint1 x2406; + uint32_t x2407; + fiat_p521_uint1 x2408; + uint32_t x2409; + fiat_p521_uint1 x2410; + uint32_t x2411; + fiat_p521_uint1 x2412; + uint32_t x2413; + fiat_p521_uint1 x2414; + uint32_t x2415; + fiat_p521_uint1 x2416; + uint32_t x2417; + fiat_p521_uint1 x2418; + uint32_t x2419; + fiat_p521_uint1 x2420; + uint32_t x2421; + fiat_p521_uint1 x2422; + uint32_t x2423; + fiat_p521_uint1 x2424; + uint32_t x2425; + fiat_p521_uint1 x2426; + uint32_t x2427; + uint32_t x2428; + fiat_p521_uint1 x2429; + uint32_t x2430; + fiat_p521_uint1 x2431; + uint32_t x2432; + fiat_p521_uint1 x2433; + uint32_t x2434; + fiat_p521_uint1 x2435; + uint32_t x2436; + fiat_p521_uint1 x2437; + uint32_t x2438; + fiat_p521_uint1 x2439; + uint32_t x2440; + fiat_p521_uint1 x2441; + uint32_t x2442; + fiat_p521_uint1 x2443; + uint32_t x2444; + fiat_p521_uint1 x2445; + uint32_t x2446; + fiat_p521_uint1 x2447; + uint32_t x2448; + fiat_p521_uint1 x2449; + uint32_t x2450; + fiat_p521_uint1 x2451; + uint32_t x2452; + fiat_p521_uint1 x2453; + uint32_t x2454; + fiat_p521_uint1 x2455; + uint32_t x2456; + fiat_p521_uint1 x2457; + uint32_t x2458; + fiat_p521_uint1 x2459; + uint32_t x2460; + fiat_p521_uint1 x2461; + uint32_t x2462; + fiat_p521_uint1 x2463; + uint32_t x2464; + uint32_t x2465; + uint32_t x2466; + uint32_t x2467; + uint32_t x2468; + uint32_t x2469; + uint32_t x2470; + uint32_t x2471; + uint32_t x2472; + uint32_t x2473; + uint32_t x2474; + uint32_t x2475; + uint32_t x2476; + uint32_t x2477; + uint32_t x2478; + uint32_t x2479; + uint32_t x2480; + uint32_t x2481; + uint32_t x2482; + uint32_t x2483; + uint32_t x2484; + uint32_t x2485; + uint32_t x2486; + uint32_t x2487; + uint32_t x2488; + uint32_t x2489; + uint32_t x2490; + uint32_t x2491; + uint32_t x2492; + uint32_t x2493; + uint32_t x2494; + uint32_t x2495; + uint32_t x2496; + uint32_t x2497; + uint32_t x2498; + uint32_t x2499; + fiat_p521_uint1 x2500; + uint32_t x2501; + fiat_p521_uint1 x2502; + uint32_t x2503; + fiat_p521_uint1 x2504; + uint32_t x2505; + fiat_p521_uint1 x2506; + uint32_t x2507; + fiat_p521_uint1 x2508; + uint32_t x2509; + fiat_p521_uint1 x2510; + uint32_t x2511; + fiat_p521_uint1 x2512; + uint32_t x2513; + fiat_p521_uint1 x2514; + uint32_t x2515; + fiat_p521_uint1 x2516; + uint32_t x2517; + fiat_p521_uint1 x2518; + uint32_t x2519; + fiat_p521_uint1 x2520; + uint32_t x2521; + fiat_p521_uint1 x2522; + uint32_t x2523; + fiat_p521_uint1 x2524; + uint32_t x2525; + fiat_p521_uint1 x2526; + uint32_t x2527; + fiat_p521_uint1 x2528; + uint32_t x2529; + fiat_p521_uint1 x2530; + uint32_t x2531; + uint32_t x2532; + fiat_p521_uint1 x2533; + uint32_t x2534; + fiat_p521_uint1 x2535; + uint32_t x2536; + fiat_p521_uint1 x2537; + uint32_t x2538; + fiat_p521_uint1 x2539; + uint32_t x2540; + fiat_p521_uint1 x2541; + uint32_t x2542; + fiat_p521_uint1 x2543; + uint32_t x2544; + fiat_p521_uint1 x2545; + uint32_t x2546; + fiat_p521_uint1 x2547; + uint32_t x2548; + fiat_p521_uint1 x2549; + uint32_t x2550; + fiat_p521_uint1 x2551; + uint32_t x2552; + fiat_p521_uint1 x2553; + uint32_t x2554; + fiat_p521_uint1 x2555; + uint32_t x2556; + fiat_p521_uint1 x2557; + uint32_t x2558; + fiat_p521_uint1 x2559; + uint32_t x2560; + fiat_p521_uint1 x2561; + uint32_t x2562; + fiat_p521_uint1 x2563; + uint32_t x2564; + fiat_p521_uint1 x2565; + uint32_t x2566; + fiat_p521_uint1 x2567; + uint32_t x2568; + uint32_t x2569; + uint32_t x2570; + uint32_t x2571; + uint32_t x2572; + uint32_t x2573; + uint32_t x2574; + uint32_t x2575; + uint32_t x2576; + uint32_t x2577; + uint32_t x2578; + uint32_t x2579; + uint32_t x2580; + uint32_t x2581; + uint32_t x2582; + uint32_t x2583; + uint32_t x2584; + uint32_t x2585; + uint32_t x2586; + uint32_t x2587; + uint32_t x2588; + uint32_t x2589; + uint32_t x2590; + uint32_t x2591; + uint32_t x2592; + uint32_t x2593; + uint32_t x2594; + uint32_t x2595; + uint32_t x2596; + uint32_t x2597; + uint32_t x2598; + uint32_t x2599; + uint32_t x2600; + uint32_t x2601; + uint32_t x2602; + fiat_p521_uint1 x2603; + uint32_t x2604; + fiat_p521_uint1 x2605; + uint32_t x2606; + fiat_p521_uint1 x2607; + uint32_t x2608; + fiat_p521_uint1 x2609; + uint32_t x2610; + fiat_p521_uint1 x2611; + uint32_t x2612; + fiat_p521_uint1 x2613; + uint32_t x2614; + fiat_p521_uint1 x2615; + uint32_t x2616; + fiat_p521_uint1 x2617; + uint32_t x2618; + fiat_p521_uint1 x2619; + uint32_t x2620; + fiat_p521_uint1 x2621; + uint32_t x2622; + fiat_p521_uint1 x2623; + uint32_t x2624; + fiat_p521_uint1 x2625; + uint32_t x2626; + fiat_p521_uint1 x2627; + uint32_t x2628; + fiat_p521_uint1 x2629; + uint32_t x2630; + fiat_p521_uint1 x2631; + uint32_t x2632; + fiat_p521_uint1 x2633; + uint32_t x2634; + uint32_t x2635; + fiat_p521_uint1 x2636; + uint32_t x2637; + fiat_p521_uint1 x2638; + uint32_t x2639; + fiat_p521_uint1 x2640; + uint32_t x2641; + fiat_p521_uint1 x2642; + uint32_t x2643; + fiat_p521_uint1 x2644; + uint32_t x2645; + fiat_p521_uint1 x2646; + uint32_t x2647; + fiat_p521_uint1 x2648; + uint32_t x2649; + fiat_p521_uint1 x2650; + uint32_t x2651; + fiat_p521_uint1 x2652; + uint32_t x2653; + fiat_p521_uint1 x2654; + uint32_t x2655; + fiat_p521_uint1 x2656; + uint32_t x2657; + fiat_p521_uint1 x2658; + uint32_t x2659; + fiat_p521_uint1 x2660; + uint32_t x2661; + fiat_p521_uint1 x2662; + uint32_t x2663; + fiat_p521_uint1 x2664; + uint32_t x2665; + fiat_p521_uint1 x2666; + uint32_t x2667; + fiat_p521_uint1 x2668; + uint32_t x2669; + fiat_p521_uint1 x2670; + uint32_t x2671; + uint32_t x2672; + uint32_t x2673; + uint32_t x2674; + uint32_t x2675; + uint32_t x2676; + uint32_t x2677; + uint32_t x2678; + uint32_t x2679; + uint32_t x2680; + uint32_t x2681; + uint32_t x2682; + uint32_t x2683; + uint32_t x2684; + uint32_t x2685; + uint32_t x2686; + uint32_t x2687; + uint32_t x2688; + uint32_t x2689; + uint32_t x2690; + uint32_t x2691; + uint32_t x2692; + uint32_t x2693; + uint32_t x2694; + uint32_t x2695; + uint32_t x2696; + uint32_t x2697; + uint32_t x2698; + uint32_t x2699; + uint32_t x2700; + uint32_t x2701; + uint32_t x2702; + uint32_t x2703; + uint32_t x2704; + uint32_t x2705; + uint32_t x2706; + fiat_p521_uint1 x2707; + uint32_t x2708; + fiat_p521_uint1 x2709; + uint32_t x2710; + fiat_p521_uint1 x2711; + uint32_t x2712; + fiat_p521_uint1 x2713; + uint32_t x2714; + fiat_p521_uint1 x2715; + uint32_t x2716; + fiat_p521_uint1 x2717; + uint32_t x2718; + fiat_p521_uint1 x2719; + uint32_t x2720; + fiat_p521_uint1 x2721; + uint32_t x2722; + fiat_p521_uint1 x2723; + uint32_t x2724; + fiat_p521_uint1 x2725; + uint32_t x2726; + fiat_p521_uint1 x2727; + uint32_t x2728; + fiat_p521_uint1 x2729; + uint32_t x2730; + fiat_p521_uint1 x2731; + uint32_t x2732; + fiat_p521_uint1 x2733; + uint32_t x2734; + fiat_p521_uint1 x2735; + uint32_t x2736; + fiat_p521_uint1 x2737; + uint32_t x2738; + uint32_t x2739; + fiat_p521_uint1 x2740; + uint32_t x2741; + fiat_p521_uint1 x2742; + uint32_t x2743; + fiat_p521_uint1 x2744; + uint32_t x2745; + fiat_p521_uint1 x2746; + uint32_t x2747; + fiat_p521_uint1 x2748; + uint32_t x2749; + fiat_p521_uint1 x2750; + uint32_t x2751; + fiat_p521_uint1 x2752; + uint32_t x2753; + fiat_p521_uint1 x2754; + uint32_t x2755; + fiat_p521_uint1 x2756; + uint32_t x2757; + fiat_p521_uint1 x2758; + uint32_t x2759; + fiat_p521_uint1 x2760; + uint32_t x2761; + fiat_p521_uint1 x2762; + uint32_t x2763; + fiat_p521_uint1 x2764; + uint32_t x2765; + fiat_p521_uint1 x2766; + uint32_t x2767; + fiat_p521_uint1 x2768; + uint32_t x2769; + fiat_p521_uint1 x2770; + uint32_t x2771; + fiat_p521_uint1 x2772; + uint32_t x2773; + fiat_p521_uint1 x2774; + uint32_t x2775; + uint32_t x2776; + uint32_t x2777; + uint32_t x2778; + uint32_t x2779; + uint32_t x2780; + uint32_t x2781; + uint32_t x2782; + uint32_t x2783; + uint32_t x2784; + uint32_t x2785; + uint32_t x2786; + uint32_t x2787; + uint32_t x2788; + uint32_t x2789; + uint32_t x2790; + uint32_t x2791; + uint32_t x2792; + uint32_t x2793; + uint32_t x2794; + uint32_t x2795; + uint32_t x2796; + uint32_t x2797; + uint32_t x2798; + uint32_t x2799; + uint32_t x2800; + uint32_t x2801; + uint32_t x2802; + uint32_t x2803; + uint32_t x2804; + uint32_t x2805; + uint32_t x2806; + uint32_t x2807; + uint32_t x2808; + uint32_t x2809; + fiat_p521_uint1 x2810; + uint32_t x2811; + fiat_p521_uint1 x2812; + uint32_t x2813; + fiat_p521_uint1 x2814; + uint32_t x2815; + fiat_p521_uint1 x2816; + uint32_t x2817; + fiat_p521_uint1 x2818; + uint32_t x2819; + fiat_p521_uint1 x2820; + uint32_t x2821; + fiat_p521_uint1 x2822; + uint32_t x2823; + fiat_p521_uint1 x2824; + uint32_t x2825; + fiat_p521_uint1 x2826; + uint32_t x2827; + fiat_p521_uint1 x2828; + uint32_t x2829; + fiat_p521_uint1 x2830; + uint32_t x2831; + fiat_p521_uint1 x2832; + uint32_t x2833; + fiat_p521_uint1 x2834; + uint32_t x2835; + fiat_p521_uint1 x2836; + uint32_t x2837; + fiat_p521_uint1 x2838; + uint32_t x2839; + fiat_p521_uint1 x2840; + uint32_t x2841; + uint32_t x2842; + fiat_p521_uint1 x2843; + uint32_t x2844; + fiat_p521_uint1 x2845; + uint32_t x2846; + fiat_p521_uint1 x2847; + uint32_t x2848; + fiat_p521_uint1 x2849; + uint32_t x2850; + fiat_p521_uint1 x2851; + uint32_t x2852; + fiat_p521_uint1 x2853; + uint32_t x2854; + fiat_p521_uint1 x2855; + uint32_t x2856; + fiat_p521_uint1 x2857; + uint32_t x2858; + fiat_p521_uint1 x2859; + uint32_t x2860; + fiat_p521_uint1 x2861; + uint32_t x2862; + fiat_p521_uint1 x2863; + uint32_t x2864; + fiat_p521_uint1 x2865; + uint32_t x2866; + fiat_p521_uint1 x2867; + uint32_t x2868; + fiat_p521_uint1 x2869; + uint32_t x2870; + fiat_p521_uint1 x2871; + uint32_t x2872; + fiat_p521_uint1 x2873; + uint32_t x2874; + fiat_p521_uint1 x2875; + uint32_t x2876; + fiat_p521_uint1 x2877; + uint32_t x2878; + uint32_t x2879; + uint32_t x2880; + uint32_t x2881; + uint32_t x2882; + uint32_t x2883; + uint32_t x2884; + uint32_t x2885; + uint32_t x2886; + uint32_t x2887; + uint32_t x2888; + uint32_t x2889; + uint32_t x2890; + uint32_t x2891; + uint32_t x2892; + uint32_t x2893; + uint32_t x2894; + uint32_t x2895; + uint32_t x2896; + uint32_t x2897; + uint32_t x2898; + uint32_t x2899; + uint32_t x2900; + uint32_t x2901; + uint32_t x2902; + uint32_t x2903; + uint32_t x2904; + uint32_t x2905; + uint32_t x2906; + uint32_t x2907; + uint32_t x2908; + uint32_t x2909; + uint32_t x2910; + uint32_t x2911; + uint32_t x2912; + uint32_t x2913; + fiat_p521_uint1 x2914; + uint32_t x2915; + fiat_p521_uint1 x2916; + uint32_t x2917; + fiat_p521_uint1 x2918; + uint32_t x2919; + fiat_p521_uint1 x2920; + uint32_t x2921; + fiat_p521_uint1 x2922; + uint32_t x2923; + fiat_p521_uint1 x2924; + uint32_t x2925; + fiat_p521_uint1 x2926; + uint32_t x2927; + fiat_p521_uint1 x2928; + uint32_t x2929; + fiat_p521_uint1 x2930; + uint32_t x2931; + fiat_p521_uint1 x2932; + uint32_t x2933; + fiat_p521_uint1 x2934; + uint32_t x2935; + fiat_p521_uint1 x2936; + uint32_t x2937; + fiat_p521_uint1 x2938; + uint32_t x2939; + fiat_p521_uint1 x2940; + uint32_t x2941; + fiat_p521_uint1 x2942; + uint32_t x2943; + fiat_p521_uint1 x2944; + uint32_t x2945; + uint32_t x2946; + fiat_p521_uint1 x2947; + uint32_t x2948; + fiat_p521_uint1 x2949; + uint32_t x2950; + fiat_p521_uint1 x2951; + uint32_t x2952; + fiat_p521_uint1 x2953; + uint32_t x2954; + fiat_p521_uint1 x2955; + uint32_t x2956; + fiat_p521_uint1 x2957; + uint32_t x2958; + fiat_p521_uint1 x2959; + uint32_t x2960; + fiat_p521_uint1 x2961; + uint32_t x2962; + fiat_p521_uint1 x2963; + uint32_t x2964; + fiat_p521_uint1 x2965; + uint32_t x2966; + fiat_p521_uint1 x2967; + uint32_t x2968; + fiat_p521_uint1 x2969; + uint32_t x2970; + fiat_p521_uint1 x2971; + uint32_t x2972; + fiat_p521_uint1 x2973; + uint32_t x2974; + fiat_p521_uint1 x2975; + uint32_t x2976; + fiat_p521_uint1 x2977; + uint32_t x2978; + fiat_p521_uint1 x2979; + uint32_t x2980; + fiat_p521_uint1 x2981; + uint32_t x2982; + uint32_t x2983; + uint32_t x2984; + uint32_t x2985; + uint32_t x2986; + uint32_t x2987; + uint32_t x2988; + uint32_t x2989; + uint32_t x2990; + uint32_t x2991; + uint32_t x2992; + uint32_t x2993; + uint32_t x2994; + uint32_t x2995; + uint32_t x2996; + uint32_t x2997; + uint32_t x2998; + uint32_t x2999; + uint32_t x3000; + uint32_t x3001; + uint32_t x3002; + uint32_t x3003; + uint32_t x3004; + uint32_t x3005; + uint32_t x3006; + uint32_t x3007; + uint32_t x3008; + uint32_t x3009; + uint32_t x3010; + uint32_t x3011; + uint32_t x3012; + uint32_t x3013; + uint32_t x3014; + uint32_t x3015; + uint32_t x3016; + fiat_p521_uint1 x3017; + uint32_t x3018; + fiat_p521_uint1 x3019; + uint32_t x3020; + fiat_p521_uint1 x3021; + uint32_t x3022; + fiat_p521_uint1 x3023; + uint32_t x3024; + fiat_p521_uint1 x3025; + uint32_t x3026; + fiat_p521_uint1 x3027; + uint32_t x3028; + fiat_p521_uint1 x3029; + uint32_t x3030; + fiat_p521_uint1 x3031; + uint32_t x3032; + fiat_p521_uint1 x3033; + uint32_t x3034; + fiat_p521_uint1 x3035; + uint32_t x3036; + fiat_p521_uint1 x3037; + uint32_t x3038; + fiat_p521_uint1 x3039; + uint32_t x3040; + fiat_p521_uint1 x3041; + uint32_t x3042; + fiat_p521_uint1 x3043; + uint32_t x3044; + fiat_p521_uint1 x3045; + uint32_t x3046; + fiat_p521_uint1 x3047; + uint32_t x3048; + uint32_t x3049; + fiat_p521_uint1 x3050; + uint32_t x3051; + fiat_p521_uint1 x3052; + uint32_t x3053; + fiat_p521_uint1 x3054; + uint32_t x3055; + fiat_p521_uint1 x3056; + uint32_t x3057; + fiat_p521_uint1 x3058; + uint32_t x3059; + fiat_p521_uint1 x3060; + uint32_t x3061; + fiat_p521_uint1 x3062; + uint32_t x3063; + fiat_p521_uint1 x3064; + uint32_t x3065; + fiat_p521_uint1 x3066; + uint32_t x3067; + fiat_p521_uint1 x3068; + uint32_t x3069; + fiat_p521_uint1 x3070; + uint32_t x3071; + fiat_p521_uint1 x3072; + uint32_t x3073; + fiat_p521_uint1 x3074; + uint32_t x3075; + fiat_p521_uint1 x3076; + uint32_t x3077; + fiat_p521_uint1 x3078; + uint32_t x3079; + fiat_p521_uint1 x3080; + uint32_t x3081; + fiat_p521_uint1 x3082; + uint32_t x3083; + fiat_p521_uint1 x3084; + uint32_t x3085; + uint32_t x3086; + uint32_t x3087; + uint32_t x3088; + uint32_t x3089; + uint32_t x3090; + uint32_t x3091; + uint32_t x3092; + uint32_t x3093; + uint32_t x3094; + uint32_t x3095; + uint32_t x3096; + uint32_t x3097; + uint32_t x3098; + uint32_t x3099; + uint32_t x3100; + uint32_t x3101; + uint32_t x3102; + uint32_t x3103; + uint32_t x3104; + uint32_t x3105; + uint32_t x3106; + uint32_t x3107; + uint32_t x3108; + uint32_t x3109; + uint32_t x3110; + uint32_t x3111; + uint32_t x3112; + uint32_t x3113; + uint32_t x3114; + uint32_t x3115; + uint32_t x3116; + uint32_t x3117; + uint32_t x3118; + uint32_t x3119; + uint32_t x3120; + fiat_p521_uint1 x3121; + uint32_t x3122; + fiat_p521_uint1 x3123; + uint32_t x3124; + fiat_p521_uint1 x3125; + uint32_t x3126; + fiat_p521_uint1 x3127; + uint32_t x3128; + fiat_p521_uint1 x3129; + uint32_t x3130; + fiat_p521_uint1 x3131; + uint32_t x3132; + fiat_p521_uint1 x3133; + uint32_t x3134; + fiat_p521_uint1 x3135; + uint32_t x3136; + fiat_p521_uint1 x3137; + uint32_t x3138; + fiat_p521_uint1 x3139; + uint32_t x3140; + fiat_p521_uint1 x3141; + uint32_t x3142; + fiat_p521_uint1 x3143; + uint32_t x3144; + fiat_p521_uint1 x3145; + uint32_t x3146; + fiat_p521_uint1 x3147; + uint32_t x3148; + fiat_p521_uint1 x3149; + uint32_t x3150; + fiat_p521_uint1 x3151; + uint32_t x3152; + uint32_t x3153; + fiat_p521_uint1 x3154; + uint32_t x3155; + fiat_p521_uint1 x3156; + uint32_t x3157; + fiat_p521_uint1 x3158; + uint32_t x3159; + fiat_p521_uint1 x3160; + uint32_t x3161; + fiat_p521_uint1 x3162; + uint32_t x3163; + fiat_p521_uint1 x3164; + uint32_t x3165; + fiat_p521_uint1 x3166; + uint32_t x3167; + fiat_p521_uint1 x3168; + uint32_t x3169; + fiat_p521_uint1 x3170; + uint32_t x3171; + fiat_p521_uint1 x3172; + uint32_t x3173; + fiat_p521_uint1 x3174; + uint32_t x3175; + fiat_p521_uint1 x3176; + uint32_t x3177; + fiat_p521_uint1 x3178; + uint32_t x3179; + fiat_p521_uint1 x3180; + uint32_t x3181; + fiat_p521_uint1 x3182; + uint32_t x3183; + fiat_p521_uint1 x3184; + uint32_t x3185; + fiat_p521_uint1 x3186; + uint32_t x3187; + fiat_p521_uint1 x3188; + uint32_t x3189; + uint32_t x3190; + uint32_t x3191; + uint32_t x3192; + uint32_t x3193; + uint32_t x3194; + uint32_t x3195; + uint32_t x3196; + uint32_t x3197; + uint32_t x3198; + uint32_t x3199; + uint32_t x3200; + uint32_t x3201; + uint32_t x3202; + uint32_t x3203; + uint32_t x3204; + uint32_t x3205; + uint32_t x3206; + uint32_t x3207; + uint32_t x3208; + uint32_t x3209; + uint32_t x3210; + uint32_t x3211; + uint32_t x3212; + uint32_t x3213; + uint32_t x3214; + uint32_t x3215; + uint32_t x3216; + uint32_t x3217; + uint32_t x3218; + uint32_t x3219; + uint32_t x3220; + uint32_t x3221; + uint32_t x3222; + uint32_t x3223; + fiat_p521_uint1 x3224; + uint32_t x3225; + fiat_p521_uint1 x3226; + uint32_t x3227; + fiat_p521_uint1 x3228; + uint32_t x3229; + fiat_p521_uint1 x3230; + uint32_t x3231; + fiat_p521_uint1 x3232; + uint32_t x3233; + fiat_p521_uint1 x3234; + uint32_t x3235; + fiat_p521_uint1 x3236; + uint32_t x3237; + fiat_p521_uint1 x3238; + uint32_t x3239; + fiat_p521_uint1 x3240; + uint32_t x3241; + fiat_p521_uint1 x3242; + uint32_t x3243; + fiat_p521_uint1 x3244; + uint32_t x3245; + fiat_p521_uint1 x3246; + uint32_t x3247; + fiat_p521_uint1 x3248; + uint32_t x3249; + fiat_p521_uint1 x3250; + uint32_t x3251; + fiat_p521_uint1 x3252; + uint32_t x3253; + fiat_p521_uint1 x3254; + uint32_t x3255; + uint32_t x3256; + fiat_p521_uint1 x3257; + uint32_t x3258; + fiat_p521_uint1 x3259; + uint32_t x3260; + fiat_p521_uint1 x3261; + uint32_t x3262; + fiat_p521_uint1 x3263; + uint32_t x3264; + fiat_p521_uint1 x3265; + uint32_t x3266; + fiat_p521_uint1 x3267; + uint32_t x3268; + fiat_p521_uint1 x3269; + uint32_t x3270; + fiat_p521_uint1 x3271; + uint32_t x3272; + fiat_p521_uint1 x3273; + uint32_t x3274; + fiat_p521_uint1 x3275; + uint32_t x3276; + fiat_p521_uint1 x3277; + uint32_t x3278; + fiat_p521_uint1 x3279; + uint32_t x3280; + fiat_p521_uint1 x3281; + uint32_t x3282; + fiat_p521_uint1 x3283; + uint32_t x3284; + fiat_p521_uint1 x3285; + uint32_t x3286; + fiat_p521_uint1 x3287; + uint32_t x3288; + fiat_p521_uint1 x3289; + uint32_t x3290; + fiat_p521_uint1 x3291; + uint32_t x3292; + uint32_t x3293; + uint32_t x3294; + uint32_t x3295; + uint32_t x3296; + uint32_t x3297; + uint32_t x3298; + uint32_t x3299; + uint32_t x3300; + uint32_t x3301; + uint32_t x3302; + uint32_t x3303; + uint32_t x3304; + uint32_t x3305; + uint32_t x3306; + uint32_t x3307; + uint32_t x3308; + uint32_t x3309; + uint32_t x3310; + uint32_t x3311; + uint32_t x3312; + uint32_t x3313; + uint32_t x3314; + uint32_t x3315; + uint32_t x3316; + uint32_t x3317; + uint32_t x3318; + uint32_t x3319; + uint32_t x3320; + uint32_t x3321; + uint32_t x3322; + uint32_t x3323; + uint32_t x3324; + uint32_t x3325; + uint32_t x3326; + uint32_t x3327; + fiat_p521_uint1 x3328; + uint32_t x3329; + fiat_p521_uint1 x3330; + uint32_t x3331; + fiat_p521_uint1 x3332; + uint32_t x3333; + fiat_p521_uint1 x3334; + uint32_t x3335; + fiat_p521_uint1 x3336; + uint32_t x3337; + fiat_p521_uint1 x3338; + uint32_t x3339; + fiat_p521_uint1 x3340; + uint32_t x3341; + fiat_p521_uint1 x3342; + uint32_t x3343; + fiat_p521_uint1 x3344; + uint32_t x3345; + fiat_p521_uint1 x3346; + uint32_t x3347; + fiat_p521_uint1 x3348; + uint32_t x3349; + fiat_p521_uint1 x3350; + uint32_t x3351; + fiat_p521_uint1 x3352; + uint32_t x3353; + fiat_p521_uint1 x3354; + uint32_t x3355; + fiat_p521_uint1 x3356; + uint32_t x3357; + fiat_p521_uint1 x3358; + uint32_t x3359; + uint32_t x3360; + fiat_p521_uint1 x3361; + uint32_t x3362; + fiat_p521_uint1 x3363; + uint32_t x3364; + fiat_p521_uint1 x3365; + uint32_t x3366; + fiat_p521_uint1 x3367; + uint32_t x3368; + fiat_p521_uint1 x3369; + uint32_t x3370; + fiat_p521_uint1 x3371; + uint32_t x3372; + fiat_p521_uint1 x3373; + uint32_t x3374; + fiat_p521_uint1 x3375; + uint32_t x3376; + fiat_p521_uint1 x3377; + uint32_t x3378; + fiat_p521_uint1 x3379; + uint32_t x3380; + fiat_p521_uint1 x3381; + uint32_t x3382; + fiat_p521_uint1 x3383; + uint32_t x3384; + fiat_p521_uint1 x3385; + uint32_t x3386; + fiat_p521_uint1 x3387; + uint32_t x3388; + fiat_p521_uint1 x3389; + uint32_t x3390; + fiat_p521_uint1 x3391; + uint32_t x3392; + fiat_p521_uint1 x3393; + uint32_t x3394; + fiat_p521_uint1 x3395; + uint32_t x3396; + uint32_t x3397; + uint32_t x3398; + uint32_t x3399; + uint32_t x3400; + uint32_t x3401; + uint32_t x3402; + uint32_t x3403; + uint32_t x3404; + uint32_t x3405; + uint32_t x3406; + uint32_t x3407; + uint32_t x3408; + uint32_t x3409; + uint32_t x3410; + uint32_t x3411; + uint32_t x3412; + uint32_t x3413; + uint32_t x3414; + uint32_t x3415; + uint32_t x3416; + uint32_t x3417; + uint32_t x3418; + uint32_t x3419; + uint32_t x3420; + uint32_t x3421; + uint32_t x3422; + uint32_t x3423; + uint32_t x3424; + uint32_t x3425; + uint32_t x3426; + uint32_t x3427; + uint32_t x3428; + uint32_t x3429; + uint32_t x3430; + fiat_p521_uint1 x3431; + uint32_t x3432; + fiat_p521_uint1 x3433; + uint32_t x3434; + fiat_p521_uint1 x3435; + uint32_t x3436; + fiat_p521_uint1 x3437; + uint32_t x3438; + fiat_p521_uint1 x3439; + uint32_t x3440; + fiat_p521_uint1 x3441; + uint32_t x3442; + fiat_p521_uint1 x3443; + uint32_t x3444; + fiat_p521_uint1 x3445; + uint32_t x3446; + fiat_p521_uint1 x3447; + uint32_t x3448; + fiat_p521_uint1 x3449; + uint32_t x3450; + fiat_p521_uint1 x3451; + uint32_t x3452; + fiat_p521_uint1 x3453; + uint32_t x3454; + fiat_p521_uint1 x3455; + uint32_t x3456; + fiat_p521_uint1 x3457; + uint32_t x3458; + fiat_p521_uint1 x3459; + uint32_t x3460; + fiat_p521_uint1 x3461; + uint32_t x3462; + uint32_t x3463; + fiat_p521_uint1 x3464; + uint32_t x3465; + fiat_p521_uint1 x3466; + uint32_t x3467; + fiat_p521_uint1 x3468; + uint32_t x3469; + fiat_p521_uint1 x3470; + uint32_t x3471; + fiat_p521_uint1 x3472; + uint32_t x3473; + fiat_p521_uint1 x3474; + uint32_t x3475; + fiat_p521_uint1 x3476; + uint32_t x3477; + fiat_p521_uint1 x3478; + uint32_t x3479; + fiat_p521_uint1 x3480; + uint32_t x3481; + fiat_p521_uint1 x3482; + uint32_t x3483; + fiat_p521_uint1 x3484; + uint32_t x3485; + fiat_p521_uint1 x3486; + uint32_t x3487; + fiat_p521_uint1 x3488; + uint32_t x3489; + fiat_p521_uint1 x3490; + uint32_t x3491; + fiat_p521_uint1 x3492; + uint32_t x3493; + fiat_p521_uint1 x3494; + uint32_t x3495; + fiat_p521_uint1 x3496; + uint32_t x3497; + fiat_p521_uint1 x3498; + uint32_t x3499; + uint32_t x3500; + fiat_p521_uint1 x3501; + uint32_t x3502; + fiat_p521_uint1 x3503; + uint32_t x3504; + fiat_p521_uint1 x3505; + uint32_t x3506; + fiat_p521_uint1 x3507; + uint32_t x3508; + fiat_p521_uint1 x3509; + uint32_t x3510; + fiat_p521_uint1 x3511; + uint32_t x3512; + fiat_p521_uint1 x3513; + uint32_t x3514; + fiat_p521_uint1 x3515; + uint32_t x3516; + fiat_p521_uint1 x3517; + uint32_t x3518; + fiat_p521_uint1 x3519; + uint32_t x3520; + fiat_p521_uint1 x3521; + uint32_t x3522; + fiat_p521_uint1 x3523; + uint32_t x3524; + fiat_p521_uint1 x3525; + uint32_t x3526; + fiat_p521_uint1 x3527; + uint32_t x3528; + fiat_p521_uint1 x3529; + uint32_t x3530; + fiat_p521_uint1 x3531; + uint32_t x3532; + fiat_p521_uint1 x3533; + uint32_t x3534; + fiat_p521_uint1 x3535; + uint32_t x3536; + uint32_t x3537; + uint32_t x3538; + uint32_t x3539; + uint32_t x3540; + uint32_t x3541; + uint32_t x3542; + uint32_t x3543; + uint32_t x3544; + uint32_t x3545; + uint32_t x3546; + uint32_t x3547; + uint32_t x3548; + uint32_t x3549; + uint32_t x3550; + uint32_t x3551; + uint32_t x3552; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[8]); + x9 = (arg1[9]); + x10 = (arg1[10]); + x11 = (arg1[11]); + x12 = (arg1[12]); + x13 = (arg1[13]); + x14 = (arg1[14]); + x15 = (arg1[15]); + x16 = (arg1[16]); + x17 = (arg1[0]); + fiat_p521_mulx_u32(&x18, &x19, x17, (arg2[16])); + fiat_p521_mulx_u32(&x20, &x21, x17, (arg2[15])); + fiat_p521_mulx_u32(&x22, &x23, x17, (arg2[14])); + fiat_p521_mulx_u32(&x24, &x25, x17, (arg2[13])); + fiat_p521_mulx_u32(&x26, &x27, x17, (arg2[12])); + fiat_p521_mulx_u32(&x28, &x29, x17, (arg2[11])); + fiat_p521_mulx_u32(&x30, &x31, x17, (arg2[10])); + fiat_p521_mulx_u32(&x32, &x33, x17, (arg2[9])); + fiat_p521_mulx_u32(&x34, &x35, x17, (arg2[8])); + fiat_p521_mulx_u32(&x36, &x37, x17, (arg2[7])); + fiat_p521_mulx_u32(&x38, &x39, x17, (arg2[6])); + fiat_p521_mulx_u32(&x40, &x41, x17, (arg2[5])); + fiat_p521_mulx_u32(&x42, &x43, x17, (arg2[4])); + fiat_p521_mulx_u32(&x44, &x45, x17, (arg2[3])); + fiat_p521_mulx_u32(&x46, &x47, x17, (arg2[2])); + fiat_p521_mulx_u32(&x48, &x49, x17, (arg2[1])); + fiat_p521_mulx_u32(&x50, &x51, x17, (arg2[0])); + fiat_p521_addcarryx_u32(&x52, &x53, 0x0, x51, x48); + fiat_p521_addcarryx_u32(&x54, &x55, x53, x49, x46); + fiat_p521_addcarryx_u32(&x56, &x57, x55, x47, x44); + fiat_p521_addcarryx_u32(&x58, &x59, x57, x45, x42); + fiat_p521_addcarryx_u32(&x60, &x61, x59, x43, x40); + fiat_p521_addcarryx_u32(&x62, &x63, x61, x41, x38); + fiat_p521_addcarryx_u32(&x64, &x65, x63, x39, x36); + fiat_p521_addcarryx_u32(&x66, &x67, x65, x37, x34); + fiat_p521_addcarryx_u32(&x68, &x69, x67, x35, x32); + fiat_p521_addcarryx_u32(&x70, &x71, x69, x33, x30); + fiat_p521_addcarryx_u32(&x72, &x73, x71, x31, x28); + fiat_p521_addcarryx_u32(&x74, &x75, x73, x29, x26); + fiat_p521_addcarryx_u32(&x76, &x77, x75, x27, x24); + fiat_p521_addcarryx_u32(&x78, &x79, x77, x25, x22); + fiat_p521_addcarryx_u32(&x80, &x81, x79, x23, x20); + fiat_p521_addcarryx_u32(&x82, &x83, x81, x21, x18); + x84 = (x83 + x19); + fiat_p521_mulx_u32(&x85, &x86, x50, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x87, &x88, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x89, &x90, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x91, &x92, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x93, &x94, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x95, &x96, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x97, &x98, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x99, &x100, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x101, &x102, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x103, &x104, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x105, &x106, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x107, &x108, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x109, &x110, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x111, &x112, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x113, &x114, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x115, &x116, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x117, &x118, x50, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x119, &x120, 0x0, x118, x115); + fiat_p521_addcarryx_u32(&x121, &x122, x120, x116, x113); + fiat_p521_addcarryx_u32(&x123, &x124, x122, x114, x111); + fiat_p521_addcarryx_u32(&x125, &x126, x124, x112, x109); + fiat_p521_addcarryx_u32(&x127, &x128, x126, x110, x107); + fiat_p521_addcarryx_u32(&x129, &x130, x128, x108, x105); + fiat_p521_addcarryx_u32(&x131, &x132, x130, x106, x103); + fiat_p521_addcarryx_u32(&x133, &x134, x132, x104, x101); + fiat_p521_addcarryx_u32(&x135, &x136, x134, x102, x99); + fiat_p521_addcarryx_u32(&x137, &x138, x136, x100, x97); + fiat_p521_addcarryx_u32(&x139, &x140, x138, x98, x95); + fiat_p521_addcarryx_u32(&x141, &x142, x140, x96, x93); + fiat_p521_addcarryx_u32(&x143, &x144, x142, x94, x91); + fiat_p521_addcarryx_u32(&x145, &x146, x144, x92, x89); + fiat_p521_addcarryx_u32(&x147, &x148, x146, x90, x87); + fiat_p521_addcarryx_u32(&x149, &x150, x148, x88, x85); + x151 = (x150 + x86); + fiat_p521_addcarryx_u32(&x152, &x153, 0x0, x50, x117); + fiat_p521_addcarryx_u32(&x154, &x155, x153, x52, x119); + fiat_p521_addcarryx_u32(&x156, &x157, x155, x54, x121); + fiat_p521_addcarryx_u32(&x158, &x159, x157, x56, x123); + fiat_p521_addcarryx_u32(&x160, &x161, x159, x58, x125); + fiat_p521_addcarryx_u32(&x162, &x163, x161, x60, x127); + fiat_p521_addcarryx_u32(&x164, &x165, x163, x62, x129); + fiat_p521_addcarryx_u32(&x166, &x167, x165, x64, x131); + fiat_p521_addcarryx_u32(&x168, &x169, x167, x66, x133); + fiat_p521_addcarryx_u32(&x170, &x171, x169, x68, x135); + fiat_p521_addcarryx_u32(&x172, &x173, x171, x70, x137); + fiat_p521_addcarryx_u32(&x174, &x175, x173, x72, x139); + fiat_p521_addcarryx_u32(&x176, &x177, x175, x74, x141); + fiat_p521_addcarryx_u32(&x178, &x179, x177, x76, x143); + fiat_p521_addcarryx_u32(&x180, &x181, x179, x78, x145); + fiat_p521_addcarryx_u32(&x182, &x183, x181, x80, x147); + fiat_p521_addcarryx_u32(&x184, &x185, x183, x82, x149); + fiat_p521_addcarryx_u32(&x186, &x187, x185, x84, x151); + fiat_p521_mulx_u32(&x188, &x189, x1, (arg2[16])); + fiat_p521_mulx_u32(&x190, &x191, x1, (arg2[15])); + fiat_p521_mulx_u32(&x192, &x193, x1, (arg2[14])); + fiat_p521_mulx_u32(&x194, &x195, x1, (arg2[13])); + fiat_p521_mulx_u32(&x196, &x197, x1, (arg2[12])); + fiat_p521_mulx_u32(&x198, &x199, x1, (arg2[11])); + fiat_p521_mulx_u32(&x200, &x201, x1, (arg2[10])); + fiat_p521_mulx_u32(&x202, &x203, x1, (arg2[9])); + fiat_p521_mulx_u32(&x204, &x205, x1, (arg2[8])); + fiat_p521_mulx_u32(&x206, &x207, x1, (arg2[7])); + fiat_p521_mulx_u32(&x208, &x209, x1, (arg2[6])); + fiat_p521_mulx_u32(&x210, &x211, x1, (arg2[5])); + fiat_p521_mulx_u32(&x212, &x213, x1, (arg2[4])); + fiat_p521_mulx_u32(&x214, &x215, x1, (arg2[3])); + fiat_p521_mulx_u32(&x216, &x217, x1, (arg2[2])); + fiat_p521_mulx_u32(&x218, &x219, x1, (arg2[1])); + fiat_p521_mulx_u32(&x220, &x221, x1, (arg2[0])); + fiat_p521_addcarryx_u32(&x222, &x223, 0x0, x221, x218); + fiat_p521_addcarryx_u32(&x224, &x225, x223, x219, x216); + fiat_p521_addcarryx_u32(&x226, &x227, x225, x217, x214); + fiat_p521_addcarryx_u32(&x228, &x229, x227, x215, x212); + fiat_p521_addcarryx_u32(&x230, &x231, x229, x213, x210); + fiat_p521_addcarryx_u32(&x232, &x233, x231, x211, x208); + fiat_p521_addcarryx_u32(&x234, &x235, x233, x209, x206); + fiat_p521_addcarryx_u32(&x236, &x237, x235, x207, x204); + fiat_p521_addcarryx_u32(&x238, &x239, x237, x205, x202); + fiat_p521_addcarryx_u32(&x240, &x241, x239, x203, x200); + fiat_p521_addcarryx_u32(&x242, &x243, x241, x201, x198); + fiat_p521_addcarryx_u32(&x244, &x245, x243, x199, x196); + fiat_p521_addcarryx_u32(&x246, &x247, x245, x197, x194); + fiat_p521_addcarryx_u32(&x248, &x249, x247, x195, x192); + fiat_p521_addcarryx_u32(&x250, &x251, x249, x193, x190); + fiat_p521_addcarryx_u32(&x252, &x253, x251, x191, x188); + x254 = (x253 + x189); + fiat_p521_addcarryx_u32(&x255, &x256, 0x0, x154, x220); + fiat_p521_addcarryx_u32(&x257, &x258, x256, x156, x222); + fiat_p521_addcarryx_u32(&x259, &x260, x258, x158, x224); + fiat_p521_addcarryx_u32(&x261, &x262, x260, x160, x226); + fiat_p521_addcarryx_u32(&x263, &x264, x262, x162, x228); + fiat_p521_addcarryx_u32(&x265, &x266, x264, x164, x230); + fiat_p521_addcarryx_u32(&x267, &x268, x266, x166, x232); + fiat_p521_addcarryx_u32(&x269, &x270, x268, x168, x234); + fiat_p521_addcarryx_u32(&x271, &x272, x270, x170, x236); + fiat_p521_addcarryx_u32(&x273, &x274, x272, x172, x238); + fiat_p521_addcarryx_u32(&x275, &x276, x274, x174, x240); + fiat_p521_addcarryx_u32(&x277, &x278, x276, x176, x242); + fiat_p521_addcarryx_u32(&x279, &x280, x278, x178, x244); + fiat_p521_addcarryx_u32(&x281, &x282, x280, x180, x246); + fiat_p521_addcarryx_u32(&x283, &x284, x282, x182, x248); + fiat_p521_addcarryx_u32(&x285, &x286, x284, x184, x250); + fiat_p521_addcarryx_u32(&x287, &x288, x286, x186, x252); + fiat_p521_addcarryx_u32(&x289, &x290, x288, x187, x254); + fiat_p521_mulx_u32(&x291, &x292, x255, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x293, &x294, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x295, &x296, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x297, &x298, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x299, &x300, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x301, &x302, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x303, &x304, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x305, &x306, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x307, &x308, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x309, &x310, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x311, &x312, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x313, &x314, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x315, &x316, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x317, &x318, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x319, &x320, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x321, &x322, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x323, &x324, x255, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x325, &x326, 0x0, x324, x321); + fiat_p521_addcarryx_u32(&x327, &x328, x326, x322, x319); + fiat_p521_addcarryx_u32(&x329, &x330, x328, x320, x317); + fiat_p521_addcarryx_u32(&x331, &x332, x330, x318, x315); + fiat_p521_addcarryx_u32(&x333, &x334, x332, x316, x313); + fiat_p521_addcarryx_u32(&x335, &x336, x334, x314, x311); + fiat_p521_addcarryx_u32(&x337, &x338, x336, x312, x309); + fiat_p521_addcarryx_u32(&x339, &x340, x338, x310, x307); + fiat_p521_addcarryx_u32(&x341, &x342, x340, x308, x305); + fiat_p521_addcarryx_u32(&x343, &x344, x342, x306, x303); + fiat_p521_addcarryx_u32(&x345, &x346, x344, x304, x301); + fiat_p521_addcarryx_u32(&x347, &x348, x346, x302, x299); + fiat_p521_addcarryx_u32(&x349, &x350, x348, x300, x297); + fiat_p521_addcarryx_u32(&x351, &x352, x350, x298, x295); + fiat_p521_addcarryx_u32(&x353, &x354, x352, x296, x293); + fiat_p521_addcarryx_u32(&x355, &x356, x354, x294, x291); + x357 = (x356 + x292); + fiat_p521_addcarryx_u32(&x358, &x359, 0x0, x255, x323); + fiat_p521_addcarryx_u32(&x360, &x361, x359, x257, x325); + fiat_p521_addcarryx_u32(&x362, &x363, x361, x259, x327); + fiat_p521_addcarryx_u32(&x364, &x365, x363, x261, x329); + fiat_p521_addcarryx_u32(&x366, &x367, x365, x263, x331); + fiat_p521_addcarryx_u32(&x368, &x369, x367, x265, x333); + fiat_p521_addcarryx_u32(&x370, &x371, x369, x267, x335); + fiat_p521_addcarryx_u32(&x372, &x373, x371, x269, x337); + fiat_p521_addcarryx_u32(&x374, &x375, x373, x271, x339); + fiat_p521_addcarryx_u32(&x376, &x377, x375, x273, x341); + fiat_p521_addcarryx_u32(&x378, &x379, x377, x275, x343); + fiat_p521_addcarryx_u32(&x380, &x381, x379, x277, x345); + fiat_p521_addcarryx_u32(&x382, &x383, x381, x279, x347); + fiat_p521_addcarryx_u32(&x384, &x385, x383, x281, x349); + fiat_p521_addcarryx_u32(&x386, &x387, x385, x283, x351); + fiat_p521_addcarryx_u32(&x388, &x389, x387, x285, x353); + fiat_p521_addcarryx_u32(&x390, &x391, x389, x287, x355); + fiat_p521_addcarryx_u32(&x392, &x393, x391, x289, x357); + x394 = ((uint32_t)x393 + x290); + fiat_p521_mulx_u32(&x395, &x396, x2, (arg2[16])); + fiat_p521_mulx_u32(&x397, &x398, x2, (arg2[15])); + fiat_p521_mulx_u32(&x399, &x400, x2, (arg2[14])); + fiat_p521_mulx_u32(&x401, &x402, x2, (arg2[13])); + fiat_p521_mulx_u32(&x403, &x404, x2, (arg2[12])); + fiat_p521_mulx_u32(&x405, &x406, x2, (arg2[11])); + fiat_p521_mulx_u32(&x407, &x408, x2, (arg2[10])); + fiat_p521_mulx_u32(&x409, &x410, x2, (arg2[9])); + fiat_p521_mulx_u32(&x411, &x412, x2, (arg2[8])); + fiat_p521_mulx_u32(&x413, &x414, x2, (arg2[7])); + fiat_p521_mulx_u32(&x415, &x416, x2, (arg2[6])); + fiat_p521_mulx_u32(&x417, &x418, x2, (arg2[5])); + fiat_p521_mulx_u32(&x419, &x420, x2, (arg2[4])); + fiat_p521_mulx_u32(&x421, &x422, x2, (arg2[3])); + fiat_p521_mulx_u32(&x423, &x424, x2, (arg2[2])); + fiat_p521_mulx_u32(&x425, &x426, x2, (arg2[1])); + fiat_p521_mulx_u32(&x427, &x428, x2, (arg2[0])); + fiat_p521_addcarryx_u32(&x429, &x430, 0x0, x428, x425); + fiat_p521_addcarryx_u32(&x431, &x432, x430, x426, x423); + fiat_p521_addcarryx_u32(&x433, &x434, x432, x424, x421); + fiat_p521_addcarryx_u32(&x435, &x436, x434, x422, x419); + fiat_p521_addcarryx_u32(&x437, &x438, x436, x420, x417); + fiat_p521_addcarryx_u32(&x439, &x440, x438, x418, x415); + fiat_p521_addcarryx_u32(&x441, &x442, x440, x416, x413); + fiat_p521_addcarryx_u32(&x443, &x444, x442, x414, x411); + fiat_p521_addcarryx_u32(&x445, &x446, x444, x412, x409); + fiat_p521_addcarryx_u32(&x447, &x448, x446, x410, x407); + fiat_p521_addcarryx_u32(&x449, &x450, x448, x408, x405); + fiat_p521_addcarryx_u32(&x451, &x452, x450, x406, x403); + fiat_p521_addcarryx_u32(&x453, &x454, x452, x404, x401); + fiat_p521_addcarryx_u32(&x455, &x456, x454, x402, x399); + fiat_p521_addcarryx_u32(&x457, &x458, x456, x400, x397); + fiat_p521_addcarryx_u32(&x459, &x460, x458, x398, x395); + x461 = (x460 + x396); + fiat_p521_addcarryx_u32(&x462, &x463, 0x0, x360, x427); + fiat_p521_addcarryx_u32(&x464, &x465, x463, x362, x429); + fiat_p521_addcarryx_u32(&x466, &x467, x465, x364, x431); + fiat_p521_addcarryx_u32(&x468, &x469, x467, x366, x433); + fiat_p521_addcarryx_u32(&x470, &x471, x469, x368, x435); + fiat_p521_addcarryx_u32(&x472, &x473, x471, x370, x437); + fiat_p521_addcarryx_u32(&x474, &x475, x473, x372, x439); + fiat_p521_addcarryx_u32(&x476, &x477, x475, x374, x441); + fiat_p521_addcarryx_u32(&x478, &x479, x477, x376, x443); + fiat_p521_addcarryx_u32(&x480, &x481, x479, x378, x445); + fiat_p521_addcarryx_u32(&x482, &x483, x481, x380, x447); + fiat_p521_addcarryx_u32(&x484, &x485, x483, x382, x449); + fiat_p521_addcarryx_u32(&x486, &x487, x485, x384, x451); + fiat_p521_addcarryx_u32(&x488, &x489, x487, x386, x453); + fiat_p521_addcarryx_u32(&x490, &x491, x489, x388, x455); + fiat_p521_addcarryx_u32(&x492, &x493, x491, x390, x457); + fiat_p521_addcarryx_u32(&x494, &x495, x493, x392, x459); + fiat_p521_addcarryx_u32(&x496, &x497, x495, x394, x461); + fiat_p521_mulx_u32(&x498, &x499, x462, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x500, &x501, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x502, &x503, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x504, &x505, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x506, &x507, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x508, &x509, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x510, &x511, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x512, &x513, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x514, &x515, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x516, &x517, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x518, &x519, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x520, &x521, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x522, &x523, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x524, &x525, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x526, &x527, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x528, &x529, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x530, &x531, x462, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x532, &x533, 0x0, x531, x528); + fiat_p521_addcarryx_u32(&x534, &x535, x533, x529, x526); + fiat_p521_addcarryx_u32(&x536, &x537, x535, x527, x524); + fiat_p521_addcarryx_u32(&x538, &x539, x537, x525, x522); + fiat_p521_addcarryx_u32(&x540, &x541, x539, x523, x520); + fiat_p521_addcarryx_u32(&x542, &x543, x541, x521, x518); + fiat_p521_addcarryx_u32(&x544, &x545, x543, x519, x516); + fiat_p521_addcarryx_u32(&x546, &x547, x545, x517, x514); + fiat_p521_addcarryx_u32(&x548, &x549, x547, x515, x512); + fiat_p521_addcarryx_u32(&x550, &x551, x549, x513, x510); + fiat_p521_addcarryx_u32(&x552, &x553, x551, x511, x508); + fiat_p521_addcarryx_u32(&x554, &x555, x553, x509, x506); + fiat_p521_addcarryx_u32(&x556, &x557, x555, x507, x504); + fiat_p521_addcarryx_u32(&x558, &x559, x557, x505, x502); + fiat_p521_addcarryx_u32(&x560, &x561, x559, x503, x500); + fiat_p521_addcarryx_u32(&x562, &x563, x561, x501, x498); + x564 = (x563 + x499); + fiat_p521_addcarryx_u32(&x565, &x566, 0x0, x462, x530); + fiat_p521_addcarryx_u32(&x567, &x568, x566, x464, x532); + fiat_p521_addcarryx_u32(&x569, &x570, x568, x466, x534); + fiat_p521_addcarryx_u32(&x571, &x572, x570, x468, x536); + fiat_p521_addcarryx_u32(&x573, &x574, x572, x470, x538); + fiat_p521_addcarryx_u32(&x575, &x576, x574, x472, x540); + fiat_p521_addcarryx_u32(&x577, &x578, x576, x474, x542); + fiat_p521_addcarryx_u32(&x579, &x580, x578, x476, x544); + fiat_p521_addcarryx_u32(&x581, &x582, x580, x478, x546); + fiat_p521_addcarryx_u32(&x583, &x584, x582, x480, x548); + fiat_p521_addcarryx_u32(&x585, &x586, x584, x482, x550); + fiat_p521_addcarryx_u32(&x587, &x588, x586, x484, x552); + fiat_p521_addcarryx_u32(&x589, &x590, x588, x486, x554); + fiat_p521_addcarryx_u32(&x591, &x592, x590, x488, x556); + fiat_p521_addcarryx_u32(&x593, &x594, x592, x490, x558); + fiat_p521_addcarryx_u32(&x595, &x596, x594, x492, x560); + fiat_p521_addcarryx_u32(&x597, &x598, x596, x494, x562); + fiat_p521_addcarryx_u32(&x599, &x600, x598, x496, x564); + x601 = ((uint32_t)x600 + x497); + fiat_p521_mulx_u32(&x602, &x603, x3, (arg2[16])); + fiat_p521_mulx_u32(&x604, &x605, x3, (arg2[15])); + fiat_p521_mulx_u32(&x606, &x607, x3, (arg2[14])); + fiat_p521_mulx_u32(&x608, &x609, x3, (arg2[13])); + fiat_p521_mulx_u32(&x610, &x611, x3, (arg2[12])); + fiat_p521_mulx_u32(&x612, &x613, x3, (arg2[11])); + fiat_p521_mulx_u32(&x614, &x615, x3, (arg2[10])); + fiat_p521_mulx_u32(&x616, &x617, x3, (arg2[9])); + fiat_p521_mulx_u32(&x618, &x619, x3, (arg2[8])); + fiat_p521_mulx_u32(&x620, &x621, x3, (arg2[7])); + fiat_p521_mulx_u32(&x622, &x623, x3, (arg2[6])); + fiat_p521_mulx_u32(&x624, &x625, x3, (arg2[5])); + fiat_p521_mulx_u32(&x626, &x627, x3, (arg2[4])); + fiat_p521_mulx_u32(&x628, &x629, x3, (arg2[3])); + fiat_p521_mulx_u32(&x630, &x631, x3, (arg2[2])); + fiat_p521_mulx_u32(&x632, &x633, x3, (arg2[1])); + fiat_p521_mulx_u32(&x634, &x635, x3, (arg2[0])); + fiat_p521_addcarryx_u32(&x636, &x637, 0x0, x635, x632); + fiat_p521_addcarryx_u32(&x638, &x639, x637, x633, x630); + fiat_p521_addcarryx_u32(&x640, &x641, x639, x631, x628); + fiat_p521_addcarryx_u32(&x642, &x643, x641, x629, x626); + fiat_p521_addcarryx_u32(&x644, &x645, x643, x627, x624); + fiat_p521_addcarryx_u32(&x646, &x647, x645, x625, x622); + fiat_p521_addcarryx_u32(&x648, &x649, x647, x623, x620); + fiat_p521_addcarryx_u32(&x650, &x651, x649, x621, x618); + fiat_p521_addcarryx_u32(&x652, &x653, x651, x619, x616); + fiat_p521_addcarryx_u32(&x654, &x655, x653, x617, x614); + fiat_p521_addcarryx_u32(&x656, &x657, x655, x615, x612); + fiat_p521_addcarryx_u32(&x658, &x659, x657, x613, x610); + fiat_p521_addcarryx_u32(&x660, &x661, x659, x611, x608); + fiat_p521_addcarryx_u32(&x662, &x663, x661, x609, x606); + fiat_p521_addcarryx_u32(&x664, &x665, x663, x607, x604); + fiat_p521_addcarryx_u32(&x666, &x667, x665, x605, x602); + x668 = (x667 + x603); + fiat_p521_addcarryx_u32(&x669, &x670, 0x0, x567, x634); + fiat_p521_addcarryx_u32(&x671, &x672, x670, x569, x636); + fiat_p521_addcarryx_u32(&x673, &x674, x672, x571, x638); + fiat_p521_addcarryx_u32(&x675, &x676, x674, x573, x640); + fiat_p521_addcarryx_u32(&x677, &x678, x676, x575, x642); + fiat_p521_addcarryx_u32(&x679, &x680, x678, x577, x644); + fiat_p521_addcarryx_u32(&x681, &x682, x680, x579, x646); + fiat_p521_addcarryx_u32(&x683, &x684, x682, x581, x648); + fiat_p521_addcarryx_u32(&x685, &x686, x684, x583, x650); + fiat_p521_addcarryx_u32(&x687, &x688, x686, x585, x652); + fiat_p521_addcarryx_u32(&x689, &x690, x688, x587, x654); + fiat_p521_addcarryx_u32(&x691, &x692, x690, x589, x656); + fiat_p521_addcarryx_u32(&x693, &x694, x692, x591, x658); + fiat_p521_addcarryx_u32(&x695, &x696, x694, x593, x660); + fiat_p521_addcarryx_u32(&x697, &x698, x696, x595, x662); + fiat_p521_addcarryx_u32(&x699, &x700, x698, x597, x664); + fiat_p521_addcarryx_u32(&x701, &x702, x700, x599, x666); + fiat_p521_addcarryx_u32(&x703, &x704, x702, x601, x668); + fiat_p521_mulx_u32(&x705, &x706, x669, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x707, &x708, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x709, &x710, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x711, &x712, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x713, &x714, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x715, &x716, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x717, &x718, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x719, &x720, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x721, &x722, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x723, &x724, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x725, &x726, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x727, &x728, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x729, &x730, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x731, &x732, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x733, &x734, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x735, &x736, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x737, &x738, x669, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x739, &x740, 0x0, x738, x735); + fiat_p521_addcarryx_u32(&x741, &x742, x740, x736, x733); + fiat_p521_addcarryx_u32(&x743, &x744, x742, x734, x731); + fiat_p521_addcarryx_u32(&x745, &x746, x744, x732, x729); + fiat_p521_addcarryx_u32(&x747, &x748, x746, x730, x727); + fiat_p521_addcarryx_u32(&x749, &x750, x748, x728, x725); + fiat_p521_addcarryx_u32(&x751, &x752, x750, x726, x723); + fiat_p521_addcarryx_u32(&x753, &x754, x752, x724, x721); + fiat_p521_addcarryx_u32(&x755, &x756, x754, x722, x719); + fiat_p521_addcarryx_u32(&x757, &x758, x756, x720, x717); + fiat_p521_addcarryx_u32(&x759, &x760, x758, x718, x715); + fiat_p521_addcarryx_u32(&x761, &x762, x760, x716, x713); + fiat_p521_addcarryx_u32(&x763, &x764, x762, x714, x711); + fiat_p521_addcarryx_u32(&x765, &x766, x764, x712, x709); + fiat_p521_addcarryx_u32(&x767, &x768, x766, x710, x707); + fiat_p521_addcarryx_u32(&x769, &x770, x768, x708, x705); + x771 = (x770 + x706); + fiat_p521_addcarryx_u32(&x772, &x773, 0x0, x669, x737); + fiat_p521_addcarryx_u32(&x774, &x775, x773, x671, x739); + fiat_p521_addcarryx_u32(&x776, &x777, x775, x673, x741); + fiat_p521_addcarryx_u32(&x778, &x779, x777, x675, x743); + fiat_p521_addcarryx_u32(&x780, &x781, x779, x677, x745); + fiat_p521_addcarryx_u32(&x782, &x783, x781, x679, x747); + fiat_p521_addcarryx_u32(&x784, &x785, x783, x681, x749); + fiat_p521_addcarryx_u32(&x786, &x787, x785, x683, x751); + fiat_p521_addcarryx_u32(&x788, &x789, x787, x685, x753); + fiat_p521_addcarryx_u32(&x790, &x791, x789, x687, x755); + fiat_p521_addcarryx_u32(&x792, &x793, x791, x689, x757); + fiat_p521_addcarryx_u32(&x794, &x795, x793, x691, x759); + fiat_p521_addcarryx_u32(&x796, &x797, x795, x693, x761); + fiat_p521_addcarryx_u32(&x798, &x799, x797, x695, x763); + fiat_p521_addcarryx_u32(&x800, &x801, x799, x697, x765); + fiat_p521_addcarryx_u32(&x802, &x803, x801, x699, x767); + fiat_p521_addcarryx_u32(&x804, &x805, x803, x701, x769); + fiat_p521_addcarryx_u32(&x806, &x807, x805, x703, x771); + x808 = ((uint32_t)x807 + x704); + fiat_p521_mulx_u32(&x809, &x810, x4, (arg2[16])); + fiat_p521_mulx_u32(&x811, &x812, x4, (arg2[15])); + fiat_p521_mulx_u32(&x813, &x814, x4, (arg2[14])); + fiat_p521_mulx_u32(&x815, &x816, x4, (arg2[13])); + fiat_p521_mulx_u32(&x817, &x818, x4, (arg2[12])); + fiat_p521_mulx_u32(&x819, &x820, x4, (arg2[11])); + fiat_p521_mulx_u32(&x821, &x822, x4, (arg2[10])); + fiat_p521_mulx_u32(&x823, &x824, x4, (arg2[9])); + fiat_p521_mulx_u32(&x825, &x826, x4, (arg2[8])); + fiat_p521_mulx_u32(&x827, &x828, x4, (arg2[7])); + fiat_p521_mulx_u32(&x829, &x830, x4, (arg2[6])); + fiat_p521_mulx_u32(&x831, &x832, x4, (arg2[5])); + fiat_p521_mulx_u32(&x833, &x834, x4, (arg2[4])); + fiat_p521_mulx_u32(&x835, &x836, x4, (arg2[3])); + fiat_p521_mulx_u32(&x837, &x838, x4, (arg2[2])); + fiat_p521_mulx_u32(&x839, &x840, x4, (arg2[1])); + fiat_p521_mulx_u32(&x841, &x842, x4, (arg2[0])); + fiat_p521_addcarryx_u32(&x843, &x844, 0x0, x842, x839); + fiat_p521_addcarryx_u32(&x845, &x846, x844, x840, x837); + fiat_p521_addcarryx_u32(&x847, &x848, x846, x838, x835); + fiat_p521_addcarryx_u32(&x849, &x850, x848, x836, x833); + fiat_p521_addcarryx_u32(&x851, &x852, x850, x834, x831); + fiat_p521_addcarryx_u32(&x853, &x854, x852, x832, x829); + fiat_p521_addcarryx_u32(&x855, &x856, x854, x830, x827); + fiat_p521_addcarryx_u32(&x857, &x858, x856, x828, x825); + fiat_p521_addcarryx_u32(&x859, &x860, x858, x826, x823); + fiat_p521_addcarryx_u32(&x861, &x862, x860, x824, x821); + fiat_p521_addcarryx_u32(&x863, &x864, x862, x822, x819); + fiat_p521_addcarryx_u32(&x865, &x866, x864, x820, x817); + fiat_p521_addcarryx_u32(&x867, &x868, x866, x818, x815); + fiat_p521_addcarryx_u32(&x869, &x870, x868, x816, x813); + fiat_p521_addcarryx_u32(&x871, &x872, x870, x814, x811); + fiat_p521_addcarryx_u32(&x873, &x874, x872, x812, x809); + x875 = (x874 + x810); + fiat_p521_addcarryx_u32(&x876, &x877, 0x0, x774, x841); + fiat_p521_addcarryx_u32(&x878, &x879, x877, x776, x843); + fiat_p521_addcarryx_u32(&x880, &x881, x879, x778, x845); + fiat_p521_addcarryx_u32(&x882, &x883, x881, x780, x847); + fiat_p521_addcarryx_u32(&x884, &x885, x883, x782, x849); + fiat_p521_addcarryx_u32(&x886, &x887, x885, x784, x851); + fiat_p521_addcarryx_u32(&x888, &x889, x887, x786, x853); + fiat_p521_addcarryx_u32(&x890, &x891, x889, x788, x855); + fiat_p521_addcarryx_u32(&x892, &x893, x891, x790, x857); + fiat_p521_addcarryx_u32(&x894, &x895, x893, x792, x859); + fiat_p521_addcarryx_u32(&x896, &x897, x895, x794, x861); + fiat_p521_addcarryx_u32(&x898, &x899, x897, x796, x863); + fiat_p521_addcarryx_u32(&x900, &x901, x899, x798, x865); + fiat_p521_addcarryx_u32(&x902, &x903, x901, x800, x867); + fiat_p521_addcarryx_u32(&x904, &x905, x903, x802, x869); + fiat_p521_addcarryx_u32(&x906, &x907, x905, x804, x871); + fiat_p521_addcarryx_u32(&x908, &x909, x907, x806, x873); + fiat_p521_addcarryx_u32(&x910, &x911, x909, x808, x875); + fiat_p521_mulx_u32(&x912, &x913, x876, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x914, &x915, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x916, &x917, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x918, &x919, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x920, &x921, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x922, &x923, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x924, &x925, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x926, &x927, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x928, &x929, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x930, &x931, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x932, &x933, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x934, &x935, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x936, &x937, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x938, &x939, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x940, &x941, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x942, &x943, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x944, &x945, x876, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x946, &x947, 0x0, x945, x942); + fiat_p521_addcarryx_u32(&x948, &x949, x947, x943, x940); + fiat_p521_addcarryx_u32(&x950, &x951, x949, x941, x938); + fiat_p521_addcarryx_u32(&x952, &x953, x951, x939, x936); + fiat_p521_addcarryx_u32(&x954, &x955, x953, x937, x934); + fiat_p521_addcarryx_u32(&x956, &x957, x955, x935, x932); + fiat_p521_addcarryx_u32(&x958, &x959, x957, x933, x930); + fiat_p521_addcarryx_u32(&x960, &x961, x959, x931, x928); + fiat_p521_addcarryx_u32(&x962, &x963, x961, x929, x926); + fiat_p521_addcarryx_u32(&x964, &x965, x963, x927, x924); + fiat_p521_addcarryx_u32(&x966, &x967, x965, x925, x922); + fiat_p521_addcarryx_u32(&x968, &x969, x967, x923, x920); + fiat_p521_addcarryx_u32(&x970, &x971, x969, x921, x918); + fiat_p521_addcarryx_u32(&x972, &x973, x971, x919, x916); + fiat_p521_addcarryx_u32(&x974, &x975, x973, x917, x914); + fiat_p521_addcarryx_u32(&x976, &x977, x975, x915, x912); + x978 = (x977 + x913); + fiat_p521_addcarryx_u32(&x979, &x980, 0x0, x876, x944); + fiat_p521_addcarryx_u32(&x981, &x982, x980, x878, x946); + fiat_p521_addcarryx_u32(&x983, &x984, x982, x880, x948); + fiat_p521_addcarryx_u32(&x985, &x986, x984, x882, x950); + fiat_p521_addcarryx_u32(&x987, &x988, x986, x884, x952); + fiat_p521_addcarryx_u32(&x989, &x990, x988, x886, x954); + fiat_p521_addcarryx_u32(&x991, &x992, x990, x888, x956); + fiat_p521_addcarryx_u32(&x993, &x994, x992, x890, x958); + fiat_p521_addcarryx_u32(&x995, &x996, x994, x892, x960); + fiat_p521_addcarryx_u32(&x997, &x998, x996, x894, x962); + fiat_p521_addcarryx_u32(&x999, &x1000, x998, x896, x964); + fiat_p521_addcarryx_u32(&x1001, &x1002, x1000, x898, x966); + fiat_p521_addcarryx_u32(&x1003, &x1004, x1002, x900, x968); + fiat_p521_addcarryx_u32(&x1005, &x1006, x1004, x902, x970); + fiat_p521_addcarryx_u32(&x1007, &x1008, x1006, x904, x972); + fiat_p521_addcarryx_u32(&x1009, &x1010, x1008, x906, x974); + fiat_p521_addcarryx_u32(&x1011, &x1012, x1010, x908, x976); + fiat_p521_addcarryx_u32(&x1013, &x1014, x1012, x910, x978); + x1015 = ((uint32_t)x1014 + x911); + fiat_p521_mulx_u32(&x1016, &x1017, x5, (arg2[16])); + fiat_p521_mulx_u32(&x1018, &x1019, x5, (arg2[15])); + fiat_p521_mulx_u32(&x1020, &x1021, x5, (arg2[14])); + fiat_p521_mulx_u32(&x1022, &x1023, x5, (arg2[13])); + fiat_p521_mulx_u32(&x1024, &x1025, x5, (arg2[12])); + fiat_p521_mulx_u32(&x1026, &x1027, x5, (arg2[11])); + fiat_p521_mulx_u32(&x1028, &x1029, x5, (arg2[10])); + fiat_p521_mulx_u32(&x1030, &x1031, x5, (arg2[9])); + fiat_p521_mulx_u32(&x1032, &x1033, x5, (arg2[8])); + fiat_p521_mulx_u32(&x1034, &x1035, x5, (arg2[7])); + fiat_p521_mulx_u32(&x1036, &x1037, x5, (arg2[6])); + fiat_p521_mulx_u32(&x1038, &x1039, x5, (arg2[5])); + fiat_p521_mulx_u32(&x1040, &x1041, x5, (arg2[4])); + fiat_p521_mulx_u32(&x1042, &x1043, x5, (arg2[3])); + fiat_p521_mulx_u32(&x1044, &x1045, x5, (arg2[2])); + fiat_p521_mulx_u32(&x1046, &x1047, x5, (arg2[1])); + fiat_p521_mulx_u32(&x1048, &x1049, x5, (arg2[0])); + fiat_p521_addcarryx_u32(&x1050, &x1051, 0x0, x1049, x1046); + fiat_p521_addcarryx_u32(&x1052, &x1053, x1051, x1047, x1044); + fiat_p521_addcarryx_u32(&x1054, &x1055, x1053, x1045, x1042); + fiat_p521_addcarryx_u32(&x1056, &x1057, x1055, x1043, x1040); + fiat_p521_addcarryx_u32(&x1058, &x1059, x1057, x1041, x1038); + fiat_p521_addcarryx_u32(&x1060, &x1061, x1059, x1039, x1036); + fiat_p521_addcarryx_u32(&x1062, &x1063, x1061, x1037, x1034); + fiat_p521_addcarryx_u32(&x1064, &x1065, x1063, x1035, x1032); + fiat_p521_addcarryx_u32(&x1066, &x1067, x1065, x1033, x1030); + fiat_p521_addcarryx_u32(&x1068, &x1069, x1067, x1031, x1028); + fiat_p521_addcarryx_u32(&x1070, &x1071, x1069, x1029, x1026); + fiat_p521_addcarryx_u32(&x1072, &x1073, x1071, x1027, x1024); + fiat_p521_addcarryx_u32(&x1074, &x1075, x1073, x1025, x1022); + fiat_p521_addcarryx_u32(&x1076, &x1077, x1075, x1023, x1020); + fiat_p521_addcarryx_u32(&x1078, &x1079, x1077, x1021, x1018); + fiat_p521_addcarryx_u32(&x1080, &x1081, x1079, x1019, x1016); + x1082 = (x1081 + x1017); + fiat_p521_addcarryx_u32(&x1083, &x1084, 0x0, x981, x1048); + fiat_p521_addcarryx_u32(&x1085, &x1086, x1084, x983, x1050); + fiat_p521_addcarryx_u32(&x1087, &x1088, x1086, x985, x1052); + fiat_p521_addcarryx_u32(&x1089, &x1090, x1088, x987, x1054); + fiat_p521_addcarryx_u32(&x1091, &x1092, x1090, x989, x1056); + fiat_p521_addcarryx_u32(&x1093, &x1094, x1092, x991, x1058); + fiat_p521_addcarryx_u32(&x1095, &x1096, x1094, x993, x1060); + fiat_p521_addcarryx_u32(&x1097, &x1098, x1096, x995, x1062); + fiat_p521_addcarryx_u32(&x1099, &x1100, x1098, x997, x1064); + fiat_p521_addcarryx_u32(&x1101, &x1102, x1100, x999, x1066); + fiat_p521_addcarryx_u32(&x1103, &x1104, x1102, x1001, x1068); + fiat_p521_addcarryx_u32(&x1105, &x1106, x1104, x1003, x1070); + fiat_p521_addcarryx_u32(&x1107, &x1108, x1106, x1005, x1072); + fiat_p521_addcarryx_u32(&x1109, &x1110, x1108, x1007, x1074); + fiat_p521_addcarryx_u32(&x1111, &x1112, x1110, x1009, x1076); + fiat_p521_addcarryx_u32(&x1113, &x1114, x1112, x1011, x1078); + fiat_p521_addcarryx_u32(&x1115, &x1116, x1114, x1013, x1080); + fiat_p521_addcarryx_u32(&x1117, &x1118, x1116, x1015, x1082); + fiat_p521_mulx_u32(&x1119, &x1120, x1083, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1121, &x1122, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1123, &x1124, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1125, &x1126, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1127, &x1128, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1129, &x1130, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1131, &x1132, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1133, &x1134, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1135, &x1136, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1137, &x1138, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1139, &x1140, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1141, &x1142, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1143, &x1144, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1145, &x1146, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1147, &x1148, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1149, &x1150, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1151, &x1152, x1083, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1153, &x1154, 0x0, x1152, x1149); + fiat_p521_addcarryx_u32(&x1155, &x1156, x1154, x1150, x1147); + fiat_p521_addcarryx_u32(&x1157, &x1158, x1156, x1148, x1145); + fiat_p521_addcarryx_u32(&x1159, &x1160, x1158, x1146, x1143); + fiat_p521_addcarryx_u32(&x1161, &x1162, x1160, x1144, x1141); + fiat_p521_addcarryx_u32(&x1163, &x1164, x1162, x1142, x1139); + fiat_p521_addcarryx_u32(&x1165, &x1166, x1164, x1140, x1137); + fiat_p521_addcarryx_u32(&x1167, &x1168, x1166, x1138, x1135); + fiat_p521_addcarryx_u32(&x1169, &x1170, x1168, x1136, x1133); + fiat_p521_addcarryx_u32(&x1171, &x1172, x1170, x1134, x1131); + fiat_p521_addcarryx_u32(&x1173, &x1174, x1172, x1132, x1129); + fiat_p521_addcarryx_u32(&x1175, &x1176, x1174, x1130, x1127); + fiat_p521_addcarryx_u32(&x1177, &x1178, x1176, x1128, x1125); + fiat_p521_addcarryx_u32(&x1179, &x1180, x1178, x1126, x1123); + fiat_p521_addcarryx_u32(&x1181, &x1182, x1180, x1124, x1121); + fiat_p521_addcarryx_u32(&x1183, &x1184, x1182, x1122, x1119); + x1185 = (x1184 + x1120); + fiat_p521_addcarryx_u32(&x1186, &x1187, 0x0, x1083, x1151); + fiat_p521_addcarryx_u32(&x1188, &x1189, x1187, x1085, x1153); + fiat_p521_addcarryx_u32(&x1190, &x1191, x1189, x1087, x1155); + fiat_p521_addcarryx_u32(&x1192, &x1193, x1191, x1089, x1157); + fiat_p521_addcarryx_u32(&x1194, &x1195, x1193, x1091, x1159); + fiat_p521_addcarryx_u32(&x1196, &x1197, x1195, x1093, x1161); + fiat_p521_addcarryx_u32(&x1198, &x1199, x1197, x1095, x1163); + fiat_p521_addcarryx_u32(&x1200, &x1201, x1199, x1097, x1165); + fiat_p521_addcarryx_u32(&x1202, &x1203, x1201, x1099, x1167); + fiat_p521_addcarryx_u32(&x1204, &x1205, x1203, x1101, x1169); + fiat_p521_addcarryx_u32(&x1206, &x1207, x1205, x1103, x1171); + fiat_p521_addcarryx_u32(&x1208, &x1209, x1207, x1105, x1173); + fiat_p521_addcarryx_u32(&x1210, &x1211, x1209, x1107, x1175); + fiat_p521_addcarryx_u32(&x1212, &x1213, x1211, x1109, x1177); + fiat_p521_addcarryx_u32(&x1214, &x1215, x1213, x1111, x1179); + fiat_p521_addcarryx_u32(&x1216, &x1217, x1215, x1113, x1181); + fiat_p521_addcarryx_u32(&x1218, &x1219, x1217, x1115, x1183); + fiat_p521_addcarryx_u32(&x1220, &x1221, x1219, x1117, x1185); + x1222 = ((uint32_t)x1221 + x1118); + fiat_p521_mulx_u32(&x1223, &x1224, x6, (arg2[16])); + fiat_p521_mulx_u32(&x1225, &x1226, x6, (arg2[15])); + fiat_p521_mulx_u32(&x1227, &x1228, x6, (arg2[14])); + fiat_p521_mulx_u32(&x1229, &x1230, x6, (arg2[13])); + fiat_p521_mulx_u32(&x1231, &x1232, x6, (arg2[12])); + fiat_p521_mulx_u32(&x1233, &x1234, x6, (arg2[11])); + fiat_p521_mulx_u32(&x1235, &x1236, x6, (arg2[10])); + fiat_p521_mulx_u32(&x1237, &x1238, x6, (arg2[9])); + fiat_p521_mulx_u32(&x1239, &x1240, x6, (arg2[8])); + fiat_p521_mulx_u32(&x1241, &x1242, x6, (arg2[7])); + fiat_p521_mulx_u32(&x1243, &x1244, x6, (arg2[6])); + fiat_p521_mulx_u32(&x1245, &x1246, x6, (arg2[5])); + fiat_p521_mulx_u32(&x1247, &x1248, x6, (arg2[4])); + fiat_p521_mulx_u32(&x1249, &x1250, x6, (arg2[3])); + fiat_p521_mulx_u32(&x1251, &x1252, x6, (arg2[2])); + fiat_p521_mulx_u32(&x1253, &x1254, x6, (arg2[1])); + fiat_p521_mulx_u32(&x1255, &x1256, x6, (arg2[0])); + fiat_p521_addcarryx_u32(&x1257, &x1258, 0x0, x1256, x1253); + fiat_p521_addcarryx_u32(&x1259, &x1260, x1258, x1254, x1251); + fiat_p521_addcarryx_u32(&x1261, &x1262, x1260, x1252, x1249); + fiat_p521_addcarryx_u32(&x1263, &x1264, x1262, x1250, x1247); + fiat_p521_addcarryx_u32(&x1265, &x1266, x1264, x1248, x1245); + fiat_p521_addcarryx_u32(&x1267, &x1268, x1266, x1246, x1243); + fiat_p521_addcarryx_u32(&x1269, &x1270, x1268, x1244, x1241); + fiat_p521_addcarryx_u32(&x1271, &x1272, x1270, x1242, x1239); + fiat_p521_addcarryx_u32(&x1273, &x1274, x1272, x1240, x1237); + fiat_p521_addcarryx_u32(&x1275, &x1276, x1274, x1238, x1235); + fiat_p521_addcarryx_u32(&x1277, &x1278, x1276, x1236, x1233); + fiat_p521_addcarryx_u32(&x1279, &x1280, x1278, x1234, x1231); + fiat_p521_addcarryx_u32(&x1281, &x1282, x1280, x1232, x1229); + fiat_p521_addcarryx_u32(&x1283, &x1284, x1282, x1230, x1227); + fiat_p521_addcarryx_u32(&x1285, &x1286, x1284, x1228, x1225); + fiat_p521_addcarryx_u32(&x1287, &x1288, x1286, x1226, x1223); + x1289 = (x1288 + x1224); + fiat_p521_addcarryx_u32(&x1290, &x1291, 0x0, x1188, x1255); + fiat_p521_addcarryx_u32(&x1292, &x1293, x1291, x1190, x1257); + fiat_p521_addcarryx_u32(&x1294, &x1295, x1293, x1192, x1259); + fiat_p521_addcarryx_u32(&x1296, &x1297, x1295, x1194, x1261); + fiat_p521_addcarryx_u32(&x1298, &x1299, x1297, x1196, x1263); + fiat_p521_addcarryx_u32(&x1300, &x1301, x1299, x1198, x1265); + fiat_p521_addcarryx_u32(&x1302, &x1303, x1301, x1200, x1267); + fiat_p521_addcarryx_u32(&x1304, &x1305, x1303, x1202, x1269); + fiat_p521_addcarryx_u32(&x1306, &x1307, x1305, x1204, x1271); + fiat_p521_addcarryx_u32(&x1308, &x1309, x1307, x1206, x1273); + fiat_p521_addcarryx_u32(&x1310, &x1311, x1309, x1208, x1275); + fiat_p521_addcarryx_u32(&x1312, &x1313, x1311, x1210, x1277); + fiat_p521_addcarryx_u32(&x1314, &x1315, x1313, x1212, x1279); + fiat_p521_addcarryx_u32(&x1316, &x1317, x1315, x1214, x1281); + fiat_p521_addcarryx_u32(&x1318, &x1319, x1317, x1216, x1283); + fiat_p521_addcarryx_u32(&x1320, &x1321, x1319, x1218, x1285); + fiat_p521_addcarryx_u32(&x1322, &x1323, x1321, x1220, x1287); + fiat_p521_addcarryx_u32(&x1324, &x1325, x1323, x1222, x1289); + fiat_p521_mulx_u32(&x1326, &x1327, x1290, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1328, &x1329, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1330, &x1331, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1332, &x1333, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1334, &x1335, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1336, &x1337, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1338, &x1339, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1340, &x1341, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1342, &x1343, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1344, &x1345, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1346, &x1347, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1348, &x1349, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1350, &x1351, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1352, &x1353, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1354, &x1355, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1356, &x1357, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1358, &x1359, x1290, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1360, &x1361, 0x0, x1359, x1356); + fiat_p521_addcarryx_u32(&x1362, &x1363, x1361, x1357, x1354); + fiat_p521_addcarryx_u32(&x1364, &x1365, x1363, x1355, x1352); + fiat_p521_addcarryx_u32(&x1366, &x1367, x1365, x1353, x1350); + fiat_p521_addcarryx_u32(&x1368, &x1369, x1367, x1351, x1348); + fiat_p521_addcarryx_u32(&x1370, &x1371, x1369, x1349, x1346); + fiat_p521_addcarryx_u32(&x1372, &x1373, x1371, x1347, x1344); + fiat_p521_addcarryx_u32(&x1374, &x1375, x1373, x1345, x1342); + fiat_p521_addcarryx_u32(&x1376, &x1377, x1375, x1343, x1340); + fiat_p521_addcarryx_u32(&x1378, &x1379, x1377, x1341, x1338); + fiat_p521_addcarryx_u32(&x1380, &x1381, x1379, x1339, x1336); + fiat_p521_addcarryx_u32(&x1382, &x1383, x1381, x1337, x1334); + fiat_p521_addcarryx_u32(&x1384, &x1385, x1383, x1335, x1332); + fiat_p521_addcarryx_u32(&x1386, &x1387, x1385, x1333, x1330); + fiat_p521_addcarryx_u32(&x1388, &x1389, x1387, x1331, x1328); + fiat_p521_addcarryx_u32(&x1390, &x1391, x1389, x1329, x1326); + x1392 = (x1391 + x1327); + fiat_p521_addcarryx_u32(&x1393, &x1394, 0x0, x1290, x1358); + fiat_p521_addcarryx_u32(&x1395, &x1396, x1394, x1292, x1360); + fiat_p521_addcarryx_u32(&x1397, &x1398, x1396, x1294, x1362); + fiat_p521_addcarryx_u32(&x1399, &x1400, x1398, x1296, x1364); + fiat_p521_addcarryx_u32(&x1401, &x1402, x1400, x1298, x1366); + fiat_p521_addcarryx_u32(&x1403, &x1404, x1402, x1300, x1368); + fiat_p521_addcarryx_u32(&x1405, &x1406, x1404, x1302, x1370); + fiat_p521_addcarryx_u32(&x1407, &x1408, x1406, x1304, x1372); + fiat_p521_addcarryx_u32(&x1409, &x1410, x1408, x1306, x1374); + fiat_p521_addcarryx_u32(&x1411, &x1412, x1410, x1308, x1376); + fiat_p521_addcarryx_u32(&x1413, &x1414, x1412, x1310, x1378); + fiat_p521_addcarryx_u32(&x1415, &x1416, x1414, x1312, x1380); + fiat_p521_addcarryx_u32(&x1417, &x1418, x1416, x1314, x1382); + fiat_p521_addcarryx_u32(&x1419, &x1420, x1418, x1316, x1384); + fiat_p521_addcarryx_u32(&x1421, &x1422, x1420, x1318, x1386); + fiat_p521_addcarryx_u32(&x1423, &x1424, x1422, x1320, x1388); + fiat_p521_addcarryx_u32(&x1425, &x1426, x1424, x1322, x1390); + fiat_p521_addcarryx_u32(&x1427, &x1428, x1426, x1324, x1392); + x1429 = ((uint32_t)x1428 + x1325); + fiat_p521_mulx_u32(&x1430, &x1431, x7, (arg2[16])); + fiat_p521_mulx_u32(&x1432, &x1433, x7, (arg2[15])); + fiat_p521_mulx_u32(&x1434, &x1435, x7, (arg2[14])); + fiat_p521_mulx_u32(&x1436, &x1437, x7, (arg2[13])); + fiat_p521_mulx_u32(&x1438, &x1439, x7, (arg2[12])); + fiat_p521_mulx_u32(&x1440, &x1441, x7, (arg2[11])); + fiat_p521_mulx_u32(&x1442, &x1443, x7, (arg2[10])); + fiat_p521_mulx_u32(&x1444, &x1445, x7, (arg2[9])); + fiat_p521_mulx_u32(&x1446, &x1447, x7, (arg2[8])); + fiat_p521_mulx_u32(&x1448, &x1449, x7, (arg2[7])); + fiat_p521_mulx_u32(&x1450, &x1451, x7, (arg2[6])); + fiat_p521_mulx_u32(&x1452, &x1453, x7, (arg2[5])); + fiat_p521_mulx_u32(&x1454, &x1455, x7, (arg2[4])); + fiat_p521_mulx_u32(&x1456, &x1457, x7, (arg2[3])); + fiat_p521_mulx_u32(&x1458, &x1459, x7, (arg2[2])); + fiat_p521_mulx_u32(&x1460, &x1461, x7, (arg2[1])); + fiat_p521_mulx_u32(&x1462, &x1463, x7, (arg2[0])); + fiat_p521_addcarryx_u32(&x1464, &x1465, 0x0, x1463, x1460); + fiat_p521_addcarryx_u32(&x1466, &x1467, x1465, x1461, x1458); + fiat_p521_addcarryx_u32(&x1468, &x1469, x1467, x1459, x1456); + fiat_p521_addcarryx_u32(&x1470, &x1471, x1469, x1457, x1454); + fiat_p521_addcarryx_u32(&x1472, &x1473, x1471, x1455, x1452); + fiat_p521_addcarryx_u32(&x1474, &x1475, x1473, x1453, x1450); + fiat_p521_addcarryx_u32(&x1476, &x1477, x1475, x1451, x1448); + fiat_p521_addcarryx_u32(&x1478, &x1479, x1477, x1449, x1446); + fiat_p521_addcarryx_u32(&x1480, &x1481, x1479, x1447, x1444); + fiat_p521_addcarryx_u32(&x1482, &x1483, x1481, x1445, x1442); + fiat_p521_addcarryx_u32(&x1484, &x1485, x1483, x1443, x1440); + fiat_p521_addcarryx_u32(&x1486, &x1487, x1485, x1441, x1438); + fiat_p521_addcarryx_u32(&x1488, &x1489, x1487, x1439, x1436); + fiat_p521_addcarryx_u32(&x1490, &x1491, x1489, x1437, x1434); + fiat_p521_addcarryx_u32(&x1492, &x1493, x1491, x1435, x1432); + fiat_p521_addcarryx_u32(&x1494, &x1495, x1493, x1433, x1430); + x1496 = (x1495 + x1431); + fiat_p521_addcarryx_u32(&x1497, &x1498, 0x0, x1395, x1462); + fiat_p521_addcarryx_u32(&x1499, &x1500, x1498, x1397, x1464); + fiat_p521_addcarryx_u32(&x1501, &x1502, x1500, x1399, x1466); + fiat_p521_addcarryx_u32(&x1503, &x1504, x1502, x1401, x1468); + fiat_p521_addcarryx_u32(&x1505, &x1506, x1504, x1403, x1470); + fiat_p521_addcarryx_u32(&x1507, &x1508, x1506, x1405, x1472); + fiat_p521_addcarryx_u32(&x1509, &x1510, x1508, x1407, x1474); + fiat_p521_addcarryx_u32(&x1511, &x1512, x1510, x1409, x1476); + fiat_p521_addcarryx_u32(&x1513, &x1514, x1512, x1411, x1478); + fiat_p521_addcarryx_u32(&x1515, &x1516, x1514, x1413, x1480); + fiat_p521_addcarryx_u32(&x1517, &x1518, x1516, x1415, x1482); + fiat_p521_addcarryx_u32(&x1519, &x1520, x1518, x1417, x1484); + fiat_p521_addcarryx_u32(&x1521, &x1522, x1520, x1419, x1486); + fiat_p521_addcarryx_u32(&x1523, &x1524, x1522, x1421, x1488); + fiat_p521_addcarryx_u32(&x1525, &x1526, x1524, x1423, x1490); + fiat_p521_addcarryx_u32(&x1527, &x1528, x1526, x1425, x1492); + fiat_p521_addcarryx_u32(&x1529, &x1530, x1528, x1427, x1494); + fiat_p521_addcarryx_u32(&x1531, &x1532, x1530, x1429, x1496); + fiat_p521_mulx_u32(&x1533, &x1534, x1497, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1535, &x1536, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1537, &x1538, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1539, &x1540, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1541, &x1542, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1543, &x1544, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1545, &x1546, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1547, &x1548, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1549, &x1550, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1551, &x1552, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1553, &x1554, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1555, &x1556, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1557, &x1558, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1559, &x1560, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1561, &x1562, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1563, &x1564, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1565, &x1566, x1497, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1567, &x1568, 0x0, x1566, x1563); + fiat_p521_addcarryx_u32(&x1569, &x1570, x1568, x1564, x1561); + fiat_p521_addcarryx_u32(&x1571, &x1572, x1570, x1562, x1559); + fiat_p521_addcarryx_u32(&x1573, &x1574, x1572, x1560, x1557); + fiat_p521_addcarryx_u32(&x1575, &x1576, x1574, x1558, x1555); + fiat_p521_addcarryx_u32(&x1577, &x1578, x1576, x1556, x1553); + fiat_p521_addcarryx_u32(&x1579, &x1580, x1578, x1554, x1551); + fiat_p521_addcarryx_u32(&x1581, &x1582, x1580, x1552, x1549); + fiat_p521_addcarryx_u32(&x1583, &x1584, x1582, x1550, x1547); + fiat_p521_addcarryx_u32(&x1585, &x1586, x1584, x1548, x1545); + fiat_p521_addcarryx_u32(&x1587, &x1588, x1586, x1546, x1543); + fiat_p521_addcarryx_u32(&x1589, &x1590, x1588, x1544, x1541); + fiat_p521_addcarryx_u32(&x1591, &x1592, x1590, x1542, x1539); + fiat_p521_addcarryx_u32(&x1593, &x1594, x1592, x1540, x1537); + fiat_p521_addcarryx_u32(&x1595, &x1596, x1594, x1538, x1535); + fiat_p521_addcarryx_u32(&x1597, &x1598, x1596, x1536, x1533); + x1599 = (x1598 + x1534); + fiat_p521_addcarryx_u32(&x1600, &x1601, 0x0, x1497, x1565); + fiat_p521_addcarryx_u32(&x1602, &x1603, x1601, x1499, x1567); + fiat_p521_addcarryx_u32(&x1604, &x1605, x1603, x1501, x1569); + fiat_p521_addcarryx_u32(&x1606, &x1607, x1605, x1503, x1571); + fiat_p521_addcarryx_u32(&x1608, &x1609, x1607, x1505, x1573); + fiat_p521_addcarryx_u32(&x1610, &x1611, x1609, x1507, x1575); + fiat_p521_addcarryx_u32(&x1612, &x1613, x1611, x1509, x1577); + fiat_p521_addcarryx_u32(&x1614, &x1615, x1613, x1511, x1579); + fiat_p521_addcarryx_u32(&x1616, &x1617, x1615, x1513, x1581); + fiat_p521_addcarryx_u32(&x1618, &x1619, x1617, x1515, x1583); + fiat_p521_addcarryx_u32(&x1620, &x1621, x1619, x1517, x1585); + fiat_p521_addcarryx_u32(&x1622, &x1623, x1621, x1519, x1587); + fiat_p521_addcarryx_u32(&x1624, &x1625, x1623, x1521, x1589); + fiat_p521_addcarryx_u32(&x1626, &x1627, x1625, x1523, x1591); + fiat_p521_addcarryx_u32(&x1628, &x1629, x1627, x1525, x1593); + fiat_p521_addcarryx_u32(&x1630, &x1631, x1629, x1527, x1595); + fiat_p521_addcarryx_u32(&x1632, &x1633, x1631, x1529, x1597); + fiat_p521_addcarryx_u32(&x1634, &x1635, x1633, x1531, x1599); + x1636 = ((uint32_t)x1635 + x1532); + fiat_p521_mulx_u32(&x1637, &x1638, x8, (arg2[16])); + fiat_p521_mulx_u32(&x1639, &x1640, x8, (arg2[15])); + fiat_p521_mulx_u32(&x1641, &x1642, x8, (arg2[14])); + fiat_p521_mulx_u32(&x1643, &x1644, x8, (arg2[13])); + fiat_p521_mulx_u32(&x1645, &x1646, x8, (arg2[12])); + fiat_p521_mulx_u32(&x1647, &x1648, x8, (arg2[11])); + fiat_p521_mulx_u32(&x1649, &x1650, x8, (arg2[10])); + fiat_p521_mulx_u32(&x1651, &x1652, x8, (arg2[9])); + fiat_p521_mulx_u32(&x1653, &x1654, x8, (arg2[8])); + fiat_p521_mulx_u32(&x1655, &x1656, x8, (arg2[7])); + fiat_p521_mulx_u32(&x1657, &x1658, x8, (arg2[6])); + fiat_p521_mulx_u32(&x1659, &x1660, x8, (arg2[5])); + fiat_p521_mulx_u32(&x1661, &x1662, x8, (arg2[4])); + fiat_p521_mulx_u32(&x1663, &x1664, x8, (arg2[3])); + fiat_p521_mulx_u32(&x1665, &x1666, x8, (arg2[2])); + fiat_p521_mulx_u32(&x1667, &x1668, x8, (arg2[1])); + fiat_p521_mulx_u32(&x1669, &x1670, x8, (arg2[0])); + fiat_p521_addcarryx_u32(&x1671, &x1672, 0x0, x1670, x1667); + fiat_p521_addcarryx_u32(&x1673, &x1674, x1672, x1668, x1665); + fiat_p521_addcarryx_u32(&x1675, &x1676, x1674, x1666, x1663); + fiat_p521_addcarryx_u32(&x1677, &x1678, x1676, x1664, x1661); + fiat_p521_addcarryx_u32(&x1679, &x1680, x1678, x1662, x1659); + fiat_p521_addcarryx_u32(&x1681, &x1682, x1680, x1660, x1657); + fiat_p521_addcarryx_u32(&x1683, &x1684, x1682, x1658, x1655); + fiat_p521_addcarryx_u32(&x1685, &x1686, x1684, x1656, x1653); + fiat_p521_addcarryx_u32(&x1687, &x1688, x1686, x1654, x1651); + fiat_p521_addcarryx_u32(&x1689, &x1690, x1688, x1652, x1649); + fiat_p521_addcarryx_u32(&x1691, &x1692, x1690, x1650, x1647); + fiat_p521_addcarryx_u32(&x1693, &x1694, x1692, x1648, x1645); + fiat_p521_addcarryx_u32(&x1695, &x1696, x1694, x1646, x1643); + fiat_p521_addcarryx_u32(&x1697, &x1698, x1696, x1644, x1641); + fiat_p521_addcarryx_u32(&x1699, &x1700, x1698, x1642, x1639); + fiat_p521_addcarryx_u32(&x1701, &x1702, x1700, x1640, x1637); + x1703 = (x1702 + x1638); + fiat_p521_addcarryx_u32(&x1704, &x1705, 0x0, x1602, x1669); + fiat_p521_addcarryx_u32(&x1706, &x1707, x1705, x1604, x1671); + fiat_p521_addcarryx_u32(&x1708, &x1709, x1707, x1606, x1673); + fiat_p521_addcarryx_u32(&x1710, &x1711, x1709, x1608, x1675); + fiat_p521_addcarryx_u32(&x1712, &x1713, x1711, x1610, x1677); + fiat_p521_addcarryx_u32(&x1714, &x1715, x1713, x1612, x1679); + fiat_p521_addcarryx_u32(&x1716, &x1717, x1715, x1614, x1681); + fiat_p521_addcarryx_u32(&x1718, &x1719, x1717, x1616, x1683); + fiat_p521_addcarryx_u32(&x1720, &x1721, x1719, x1618, x1685); + fiat_p521_addcarryx_u32(&x1722, &x1723, x1721, x1620, x1687); + fiat_p521_addcarryx_u32(&x1724, &x1725, x1723, x1622, x1689); + fiat_p521_addcarryx_u32(&x1726, &x1727, x1725, x1624, x1691); + fiat_p521_addcarryx_u32(&x1728, &x1729, x1727, x1626, x1693); + fiat_p521_addcarryx_u32(&x1730, &x1731, x1729, x1628, x1695); + fiat_p521_addcarryx_u32(&x1732, &x1733, x1731, x1630, x1697); + fiat_p521_addcarryx_u32(&x1734, &x1735, x1733, x1632, x1699); + fiat_p521_addcarryx_u32(&x1736, &x1737, x1735, x1634, x1701); + fiat_p521_addcarryx_u32(&x1738, &x1739, x1737, x1636, x1703); + fiat_p521_mulx_u32(&x1740, &x1741, x1704, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1742, &x1743, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1744, &x1745, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1746, &x1747, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1748, &x1749, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1750, &x1751, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1752, &x1753, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1754, &x1755, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1756, &x1757, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1758, &x1759, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1760, &x1761, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1762, &x1763, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1764, &x1765, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1766, &x1767, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1768, &x1769, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1770, &x1771, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1772, &x1773, x1704, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1774, &x1775, 0x0, x1773, x1770); + fiat_p521_addcarryx_u32(&x1776, &x1777, x1775, x1771, x1768); + fiat_p521_addcarryx_u32(&x1778, &x1779, x1777, x1769, x1766); + fiat_p521_addcarryx_u32(&x1780, &x1781, x1779, x1767, x1764); + fiat_p521_addcarryx_u32(&x1782, &x1783, x1781, x1765, x1762); + fiat_p521_addcarryx_u32(&x1784, &x1785, x1783, x1763, x1760); + fiat_p521_addcarryx_u32(&x1786, &x1787, x1785, x1761, x1758); + fiat_p521_addcarryx_u32(&x1788, &x1789, x1787, x1759, x1756); + fiat_p521_addcarryx_u32(&x1790, &x1791, x1789, x1757, x1754); + fiat_p521_addcarryx_u32(&x1792, &x1793, x1791, x1755, x1752); + fiat_p521_addcarryx_u32(&x1794, &x1795, x1793, x1753, x1750); + fiat_p521_addcarryx_u32(&x1796, &x1797, x1795, x1751, x1748); + fiat_p521_addcarryx_u32(&x1798, &x1799, x1797, x1749, x1746); + fiat_p521_addcarryx_u32(&x1800, &x1801, x1799, x1747, x1744); + fiat_p521_addcarryx_u32(&x1802, &x1803, x1801, x1745, x1742); + fiat_p521_addcarryx_u32(&x1804, &x1805, x1803, x1743, x1740); + x1806 = (x1805 + x1741); + fiat_p521_addcarryx_u32(&x1807, &x1808, 0x0, x1704, x1772); + fiat_p521_addcarryx_u32(&x1809, &x1810, x1808, x1706, x1774); + fiat_p521_addcarryx_u32(&x1811, &x1812, x1810, x1708, x1776); + fiat_p521_addcarryx_u32(&x1813, &x1814, x1812, x1710, x1778); + fiat_p521_addcarryx_u32(&x1815, &x1816, x1814, x1712, x1780); + fiat_p521_addcarryx_u32(&x1817, &x1818, x1816, x1714, x1782); + fiat_p521_addcarryx_u32(&x1819, &x1820, x1818, x1716, x1784); + fiat_p521_addcarryx_u32(&x1821, &x1822, x1820, x1718, x1786); + fiat_p521_addcarryx_u32(&x1823, &x1824, x1822, x1720, x1788); + fiat_p521_addcarryx_u32(&x1825, &x1826, x1824, x1722, x1790); + fiat_p521_addcarryx_u32(&x1827, &x1828, x1826, x1724, x1792); + fiat_p521_addcarryx_u32(&x1829, &x1830, x1828, x1726, x1794); + fiat_p521_addcarryx_u32(&x1831, &x1832, x1830, x1728, x1796); + fiat_p521_addcarryx_u32(&x1833, &x1834, x1832, x1730, x1798); + fiat_p521_addcarryx_u32(&x1835, &x1836, x1834, x1732, x1800); + fiat_p521_addcarryx_u32(&x1837, &x1838, x1836, x1734, x1802); + fiat_p521_addcarryx_u32(&x1839, &x1840, x1838, x1736, x1804); + fiat_p521_addcarryx_u32(&x1841, &x1842, x1840, x1738, x1806); + x1843 = ((uint32_t)x1842 + x1739); + fiat_p521_mulx_u32(&x1844, &x1845, x9, (arg2[16])); + fiat_p521_mulx_u32(&x1846, &x1847, x9, (arg2[15])); + fiat_p521_mulx_u32(&x1848, &x1849, x9, (arg2[14])); + fiat_p521_mulx_u32(&x1850, &x1851, x9, (arg2[13])); + fiat_p521_mulx_u32(&x1852, &x1853, x9, (arg2[12])); + fiat_p521_mulx_u32(&x1854, &x1855, x9, (arg2[11])); + fiat_p521_mulx_u32(&x1856, &x1857, x9, (arg2[10])); + fiat_p521_mulx_u32(&x1858, &x1859, x9, (arg2[9])); + fiat_p521_mulx_u32(&x1860, &x1861, x9, (arg2[8])); + fiat_p521_mulx_u32(&x1862, &x1863, x9, (arg2[7])); + fiat_p521_mulx_u32(&x1864, &x1865, x9, (arg2[6])); + fiat_p521_mulx_u32(&x1866, &x1867, x9, (arg2[5])); + fiat_p521_mulx_u32(&x1868, &x1869, x9, (arg2[4])); + fiat_p521_mulx_u32(&x1870, &x1871, x9, (arg2[3])); + fiat_p521_mulx_u32(&x1872, &x1873, x9, (arg2[2])); + fiat_p521_mulx_u32(&x1874, &x1875, x9, (arg2[1])); + fiat_p521_mulx_u32(&x1876, &x1877, x9, (arg2[0])); + fiat_p521_addcarryx_u32(&x1878, &x1879, 0x0, x1877, x1874); + fiat_p521_addcarryx_u32(&x1880, &x1881, x1879, x1875, x1872); + fiat_p521_addcarryx_u32(&x1882, &x1883, x1881, x1873, x1870); + fiat_p521_addcarryx_u32(&x1884, &x1885, x1883, x1871, x1868); + fiat_p521_addcarryx_u32(&x1886, &x1887, x1885, x1869, x1866); + fiat_p521_addcarryx_u32(&x1888, &x1889, x1887, x1867, x1864); + fiat_p521_addcarryx_u32(&x1890, &x1891, x1889, x1865, x1862); + fiat_p521_addcarryx_u32(&x1892, &x1893, x1891, x1863, x1860); + fiat_p521_addcarryx_u32(&x1894, &x1895, x1893, x1861, x1858); + fiat_p521_addcarryx_u32(&x1896, &x1897, x1895, x1859, x1856); + fiat_p521_addcarryx_u32(&x1898, &x1899, x1897, x1857, x1854); + fiat_p521_addcarryx_u32(&x1900, &x1901, x1899, x1855, x1852); + fiat_p521_addcarryx_u32(&x1902, &x1903, x1901, x1853, x1850); + fiat_p521_addcarryx_u32(&x1904, &x1905, x1903, x1851, x1848); + fiat_p521_addcarryx_u32(&x1906, &x1907, x1905, x1849, x1846); + fiat_p521_addcarryx_u32(&x1908, &x1909, x1907, x1847, x1844); + x1910 = (x1909 + x1845); + fiat_p521_addcarryx_u32(&x1911, &x1912, 0x0, x1809, x1876); + fiat_p521_addcarryx_u32(&x1913, &x1914, x1912, x1811, x1878); + fiat_p521_addcarryx_u32(&x1915, &x1916, x1914, x1813, x1880); + fiat_p521_addcarryx_u32(&x1917, &x1918, x1916, x1815, x1882); + fiat_p521_addcarryx_u32(&x1919, &x1920, x1918, x1817, x1884); + fiat_p521_addcarryx_u32(&x1921, &x1922, x1920, x1819, x1886); + fiat_p521_addcarryx_u32(&x1923, &x1924, x1922, x1821, x1888); + fiat_p521_addcarryx_u32(&x1925, &x1926, x1924, x1823, x1890); + fiat_p521_addcarryx_u32(&x1927, &x1928, x1926, x1825, x1892); + fiat_p521_addcarryx_u32(&x1929, &x1930, x1928, x1827, x1894); + fiat_p521_addcarryx_u32(&x1931, &x1932, x1930, x1829, x1896); + fiat_p521_addcarryx_u32(&x1933, &x1934, x1932, x1831, x1898); + fiat_p521_addcarryx_u32(&x1935, &x1936, x1934, x1833, x1900); + fiat_p521_addcarryx_u32(&x1937, &x1938, x1936, x1835, x1902); + fiat_p521_addcarryx_u32(&x1939, &x1940, x1938, x1837, x1904); + fiat_p521_addcarryx_u32(&x1941, &x1942, x1940, x1839, x1906); + fiat_p521_addcarryx_u32(&x1943, &x1944, x1942, x1841, x1908); + fiat_p521_addcarryx_u32(&x1945, &x1946, x1944, x1843, x1910); + fiat_p521_mulx_u32(&x1947, &x1948, x1911, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1949, &x1950, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1951, &x1952, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1953, &x1954, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1955, &x1956, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1957, &x1958, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1959, &x1960, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1961, &x1962, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1963, &x1964, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1965, &x1966, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1967, &x1968, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1969, &x1970, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1971, &x1972, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1973, &x1974, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1975, &x1976, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1977, &x1978, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1979, &x1980, x1911, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1981, &x1982, 0x0, x1980, x1977); + fiat_p521_addcarryx_u32(&x1983, &x1984, x1982, x1978, x1975); + fiat_p521_addcarryx_u32(&x1985, &x1986, x1984, x1976, x1973); + fiat_p521_addcarryx_u32(&x1987, &x1988, x1986, x1974, x1971); + fiat_p521_addcarryx_u32(&x1989, &x1990, x1988, x1972, x1969); + fiat_p521_addcarryx_u32(&x1991, &x1992, x1990, x1970, x1967); + fiat_p521_addcarryx_u32(&x1993, &x1994, x1992, x1968, x1965); + fiat_p521_addcarryx_u32(&x1995, &x1996, x1994, x1966, x1963); + fiat_p521_addcarryx_u32(&x1997, &x1998, x1996, x1964, x1961); + fiat_p521_addcarryx_u32(&x1999, &x2000, x1998, x1962, x1959); + fiat_p521_addcarryx_u32(&x2001, &x2002, x2000, x1960, x1957); + fiat_p521_addcarryx_u32(&x2003, &x2004, x2002, x1958, x1955); + fiat_p521_addcarryx_u32(&x2005, &x2006, x2004, x1956, x1953); + fiat_p521_addcarryx_u32(&x2007, &x2008, x2006, x1954, x1951); + fiat_p521_addcarryx_u32(&x2009, &x2010, x2008, x1952, x1949); + fiat_p521_addcarryx_u32(&x2011, &x2012, x2010, x1950, x1947); + x2013 = (x2012 + x1948); + fiat_p521_addcarryx_u32(&x2014, &x2015, 0x0, x1911, x1979); + fiat_p521_addcarryx_u32(&x2016, &x2017, x2015, x1913, x1981); + fiat_p521_addcarryx_u32(&x2018, &x2019, x2017, x1915, x1983); + fiat_p521_addcarryx_u32(&x2020, &x2021, x2019, x1917, x1985); + fiat_p521_addcarryx_u32(&x2022, &x2023, x2021, x1919, x1987); + fiat_p521_addcarryx_u32(&x2024, &x2025, x2023, x1921, x1989); + fiat_p521_addcarryx_u32(&x2026, &x2027, x2025, x1923, x1991); + fiat_p521_addcarryx_u32(&x2028, &x2029, x2027, x1925, x1993); + fiat_p521_addcarryx_u32(&x2030, &x2031, x2029, x1927, x1995); + fiat_p521_addcarryx_u32(&x2032, &x2033, x2031, x1929, x1997); + fiat_p521_addcarryx_u32(&x2034, &x2035, x2033, x1931, x1999); + fiat_p521_addcarryx_u32(&x2036, &x2037, x2035, x1933, x2001); + fiat_p521_addcarryx_u32(&x2038, &x2039, x2037, x1935, x2003); + fiat_p521_addcarryx_u32(&x2040, &x2041, x2039, x1937, x2005); + fiat_p521_addcarryx_u32(&x2042, &x2043, x2041, x1939, x2007); + fiat_p521_addcarryx_u32(&x2044, &x2045, x2043, x1941, x2009); + fiat_p521_addcarryx_u32(&x2046, &x2047, x2045, x1943, x2011); + fiat_p521_addcarryx_u32(&x2048, &x2049, x2047, x1945, x2013); + x2050 = ((uint32_t)x2049 + x1946); + fiat_p521_mulx_u32(&x2051, &x2052, x10, (arg2[16])); + fiat_p521_mulx_u32(&x2053, &x2054, x10, (arg2[15])); + fiat_p521_mulx_u32(&x2055, &x2056, x10, (arg2[14])); + fiat_p521_mulx_u32(&x2057, &x2058, x10, (arg2[13])); + fiat_p521_mulx_u32(&x2059, &x2060, x10, (arg2[12])); + fiat_p521_mulx_u32(&x2061, &x2062, x10, (arg2[11])); + fiat_p521_mulx_u32(&x2063, &x2064, x10, (arg2[10])); + fiat_p521_mulx_u32(&x2065, &x2066, x10, (arg2[9])); + fiat_p521_mulx_u32(&x2067, &x2068, x10, (arg2[8])); + fiat_p521_mulx_u32(&x2069, &x2070, x10, (arg2[7])); + fiat_p521_mulx_u32(&x2071, &x2072, x10, (arg2[6])); + fiat_p521_mulx_u32(&x2073, &x2074, x10, (arg2[5])); + fiat_p521_mulx_u32(&x2075, &x2076, x10, (arg2[4])); + fiat_p521_mulx_u32(&x2077, &x2078, x10, (arg2[3])); + fiat_p521_mulx_u32(&x2079, &x2080, x10, (arg2[2])); + fiat_p521_mulx_u32(&x2081, &x2082, x10, (arg2[1])); + fiat_p521_mulx_u32(&x2083, &x2084, x10, (arg2[0])); + fiat_p521_addcarryx_u32(&x2085, &x2086, 0x0, x2084, x2081); + fiat_p521_addcarryx_u32(&x2087, &x2088, x2086, x2082, x2079); + fiat_p521_addcarryx_u32(&x2089, &x2090, x2088, x2080, x2077); + fiat_p521_addcarryx_u32(&x2091, &x2092, x2090, x2078, x2075); + fiat_p521_addcarryx_u32(&x2093, &x2094, x2092, x2076, x2073); + fiat_p521_addcarryx_u32(&x2095, &x2096, x2094, x2074, x2071); + fiat_p521_addcarryx_u32(&x2097, &x2098, x2096, x2072, x2069); + fiat_p521_addcarryx_u32(&x2099, &x2100, x2098, x2070, x2067); + fiat_p521_addcarryx_u32(&x2101, &x2102, x2100, x2068, x2065); + fiat_p521_addcarryx_u32(&x2103, &x2104, x2102, x2066, x2063); + fiat_p521_addcarryx_u32(&x2105, &x2106, x2104, x2064, x2061); + fiat_p521_addcarryx_u32(&x2107, &x2108, x2106, x2062, x2059); + fiat_p521_addcarryx_u32(&x2109, &x2110, x2108, x2060, x2057); + fiat_p521_addcarryx_u32(&x2111, &x2112, x2110, x2058, x2055); + fiat_p521_addcarryx_u32(&x2113, &x2114, x2112, x2056, x2053); + fiat_p521_addcarryx_u32(&x2115, &x2116, x2114, x2054, x2051); + x2117 = (x2116 + x2052); + fiat_p521_addcarryx_u32(&x2118, &x2119, 0x0, x2016, x2083); + fiat_p521_addcarryx_u32(&x2120, &x2121, x2119, x2018, x2085); + fiat_p521_addcarryx_u32(&x2122, &x2123, x2121, x2020, x2087); + fiat_p521_addcarryx_u32(&x2124, &x2125, x2123, x2022, x2089); + fiat_p521_addcarryx_u32(&x2126, &x2127, x2125, x2024, x2091); + fiat_p521_addcarryx_u32(&x2128, &x2129, x2127, x2026, x2093); + fiat_p521_addcarryx_u32(&x2130, &x2131, x2129, x2028, x2095); + fiat_p521_addcarryx_u32(&x2132, &x2133, x2131, x2030, x2097); + fiat_p521_addcarryx_u32(&x2134, &x2135, x2133, x2032, x2099); + fiat_p521_addcarryx_u32(&x2136, &x2137, x2135, x2034, x2101); + fiat_p521_addcarryx_u32(&x2138, &x2139, x2137, x2036, x2103); + fiat_p521_addcarryx_u32(&x2140, &x2141, x2139, x2038, x2105); + fiat_p521_addcarryx_u32(&x2142, &x2143, x2141, x2040, x2107); + fiat_p521_addcarryx_u32(&x2144, &x2145, x2143, x2042, x2109); + fiat_p521_addcarryx_u32(&x2146, &x2147, x2145, x2044, x2111); + fiat_p521_addcarryx_u32(&x2148, &x2149, x2147, x2046, x2113); + fiat_p521_addcarryx_u32(&x2150, &x2151, x2149, x2048, x2115); + fiat_p521_addcarryx_u32(&x2152, &x2153, x2151, x2050, x2117); + fiat_p521_mulx_u32(&x2154, &x2155, x2118, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x2156, &x2157, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2158, &x2159, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2160, &x2161, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2162, &x2163, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2164, &x2165, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2166, &x2167, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2168, &x2169, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2170, &x2171, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2172, &x2173, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2174, &x2175, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2176, &x2177, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2178, &x2179, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2180, &x2181, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2182, &x2183, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2184, &x2185, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2186, &x2187, x2118, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x2188, &x2189, 0x0, x2187, x2184); + fiat_p521_addcarryx_u32(&x2190, &x2191, x2189, x2185, x2182); + fiat_p521_addcarryx_u32(&x2192, &x2193, x2191, x2183, x2180); + fiat_p521_addcarryx_u32(&x2194, &x2195, x2193, x2181, x2178); + fiat_p521_addcarryx_u32(&x2196, &x2197, x2195, x2179, x2176); + fiat_p521_addcarryx_u32(&x2198, &x2199, x2197, x2177, x2174); + fiat_p521_addcarryx_u32(&x2200, &x2201, x2199, x2175, x2172); + fiat_p521_addcarryx_u32(&x2202, &x2203, x2201, x2173, x2170); + fiat_p521_addcarryx_u32(&x2204, &x2205, x2203, x2171, x2168); + fiat_p521_addcarryx_u32(&x2206, &x2207, x2205, x2169, x2166); + fiat_p521_addcarryx_u32(&x2208, &x2209, x2207, x2167, x2164); + fiat_p521_addcarryx_u32(&x2210, &x2211, x2209, x2165, x2162); + fiat_p521_addcarryx_u32(&x2212, &x2213, x2211, x2163, x2160); + fiat_p521_addcarryx_u32(&x2214, &x2215, x2213, x2161, x2158); + fiat_p521_addcarryx_u32(&x2216, &x2217, x2215, x2159, x2156); + fiat_p521_addcarryx_u32(&x2218, &x2219, x2217, x2157, x2154); + x2220 = (x2219 + x2155); + fiat_p521_addcarryx_u32(&x2221, &x2222, 0x0, x2118, x2186); + fiat_p521_addcarryx_u32(&x2223, &x2224, x2222, x2120, x2188); + fiat_p521_addcarryx_u32(&x2225, &x2226, x2224, x2122, x2190); + fiat_p521_addcarryx_u32(&x2227, &x2228, x2226, x2124, x2192); + fiat_p521_addcarryx_u32(&x2229, &x2230, x2228, x2126, x2194); + fiat_p521_addcarryx_u32(&x2231, &x2232, x2230, x2128, x2196); + fiat_p521_addcarryx_u32(&x2233, &x2234, x2232, x2130, x2198); + fiat_p521_addcarryx_u32(&x2235, &x2236, x2234, x2132, x2200); + fiat_p521_addcarryx_u32(&x2237, &x2238, x2236, x2134, x2202); + fiat_p521_addcarryx_u32(&x2239, &x2240, x2238, x2136, x2204); + fiat_p521_addcarryx_u32(&x2241, &x2242, x2240, x2138, x2206); + fiat_p521_addcarryx_u32(&x2243, &x2244, x2242, x2140, x2208); + fiat_p521_addcarryx_u32(&x2245, &x2246, x2244, x2142, x2210); + fiat_p521_addcarryx_u32(&x2247, &x2248, x2246, x2144, x2212); + fiat_p521_addcarryx_u32(&x2249, &x2250, x2248, x2146, x2214); + fiat_p521_addcarryx_u32(&x2251, &x2252, x2250, x2148, x2216); + fiat_p521_addcarryx_u32(&x2253, &x2254, x2252, x2150, x2218); + fiat_p521_addcarryx_u32(&x2255, &x2256, x2254, x2152, x2220); + x2257 = ((uint32_t)x2256 + x2153); + fiat_p521_mulx_u32(&x2258, &x2259, x11, (arg2[16])); + fiat_p521_mulx_u32(&x2260, &x2261, x11, (arg2[15])); + fiat_p521_mulx_u32(&x2262, &x2263, x11, (arg2[14])); + fiat_p521_mulx_u32(&x2264, &x2265, x11, (arg2[13])); + fiat_p521_mulx_u32(&x2266, &x2267, x11, (arg2[12])); + fiat_p521_mulx_u32(&x2268, &x2269, x11, (arg2[11])); + fiat_p521_mulx_u32(&x2270, &x2271, x11, (arg2[10])); + fiat_p521_mulx_u32(&x2272, &x2273, x11, (arg2[9])); + fiat_p521_mulx_u32(&x2274, &x2275, x11, (arg2[8])); + fiat_p521_mulx_u32(&x2276, &x2277, x11, (arg2[7])); + fiat_p521_mulx_u32(&x2278, &x2279, x11, (arg2[6])); + fiat_p521_mulx_u32(&x2280, &x2281, x11, (arg2[5])); + fiat_p521_mulx_u32(&x2282, &x2283, x11, (arg2[4])); + fiat_p521_mulx_u32(&x2284, &x2285, x11, (arg2[3])); + fiat_p521_mulx_u32(&x2286, &x2287, x11, (arg2[2])); + fiat_p521_mulx_u32(&x2288, &x2289, x11, (arg2[1])); + fiat_p521_mulx_u32(&x2290, &x2291, x11, (arg2[0])); + fiat_p521_addcarryx_u32(&x2292, &x2293, 0x0, x2291, x2288); + fiat_p521_addcarryx_u32(&x2294, &x2295, x2293, x2289, x2286); + fiat_p521_addcarryx_u32(&x2296, &x2297, x2295, x2287, x2284); + fiat_p521_addcarryx_u32(&x2298, &x2299, x2297, x2285, x2282); + fiat_p521_addcarryx_u32(&x2300, &x2301, x2299, x2283, x2280); + fiat_p521_addcarryx_u32(&x2302, &x2303, x2301, x2281, x2278); + fiat_p521_addcarryx_u32(&x2304, &x2305, x2303, x2279, x2276); + fiat_p521_addcarryx_u32(&x2306, &x2307, x2305, x2277, x2274); + fiat_p521_addcarryx_u32(&x2308, &x2309, x2307, x2275, x2272); + fiat_p521_addcarryx_u32(&x2310, &x2311, x2309, x2273, x2270); + fiat_p521_addcarryx_u32(&x2312, &x2313, x2311, x2271, x2268); + fiat_p521_addcarryx_u32(&x2314, &x2315, x2313, x2269, x2266); + fiat_p521_addcarryx_u32(&x2316, &x2317, x2315, x2267, x2264); + fiat_p521_addcarryx_u32(&x2318, &x2319, x2317, x2265, x2262); + fiat_p521_addcarryx_u32(&x2320, &x2321, x2319, x2263, x2260); + fiat_p521_addcarryx_u32(&x2322, &x2323, x2321, x2261, x2258); + x2324 = (x2323 + x2259); + fiat_p521_addcarryx_u32(&x2325, &x2326, 0x0, x2223, x2290); + fiat_p521_addcarryx_u32(&x2327, &x2328, x2326, x2225, x2292); + fiat_p521_addcarryx_u32(&x2329, &x2330, x2328, x2227, x2294); + fiat_p521_addcarryx_u32(&x2331, &x2332, x2330, x2229, x2296); + fiat_p521_addcarryx_u32(&x2333, &x2334, x2332, x2231, x2298); + fiat_p521_addcarryx_u32(&x2335, &x2336, x2334, x2233, x2300); + fiat_p521_addcarryx_u32(&x2337, &x2338, x2336, x2235, x2302); + fiat_p521_addcarryx_u32(&x2339, &x2340, x2338, x2237, x2304); + fiat_p521_addcarryx_u32(&x2341, &x2342, x2340, x2239, x2306); + fiat_p521_addcarryx_u32(&x2343, &x2344, x2342, x2241, x2308); + fiat_p521_addcarryx_u32(&x2345, &x2346, x2344, x2243, x2310); + fiat_p521_addcarryx_u32(&x2347, &x2348, x2346, x2245, x2312); + fiat_p521_addcarryx_u32(&x2349, &x2350, x2348, x2247, x2314); + fiat_p521_addcarryx_u32(&x2351, &x2352, x2350, x2249, x2316); + fiat_p521_addcarryx_u32(&x2353, &x2354, x2352, x2251, x2318); + fiat_p521_addcarryx_u32(&x2355, &x2356, x2354, x2253, x2320); + fiat_p521_addcarryx_u32(&x2357, &x2358, x2356, x2255, x2322); + fiat_p521_addcarryx_u32(&x2359, &x2360, x2358, x2257, x2324); + fiat_p521_mulx_u32(&x2361, &x2362, x2325, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x2363, &x2364, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2365, &x2366, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2367, &x2368, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2369, &x2370, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2371, &x2372, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2373, &x2374, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2375, &x2376, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2377, &x2378, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2379, &x2380, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2381, &x2382, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2383, &x2384, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2385, &x2386, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2387, &x2388, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2389, &x2390, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2391, &x2392, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2393, &x2394, x2325, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x2395, &x2396, 0x0, x2394, x2391); + fiat_p521_addcarryx_u32(&x2397, &x2398, x2396, x2392, x2389); + fiat_p521_addcarryx_u32(&x2399, &x2400, x2398, x2390, x2387); + fiat_p521_addcarryx_u32(&x2401, &x2402, x2400, x2388, x2385); + fiat_p521_addcarryx_u32(&x2403, &x2404, x2402, x2386, x2383); + fiat_p521_addcarryx_u32(&x2405, &x2406, x2404, x2384, x2381); + fiat_p521_addcarryx_u32(&x2407, &x2408, x2406, x2382, x2379); + fiat_p521_addcarryx_u32(&x2409, &x2410, x2408, x2380, x2377); + fiat_p521_addcarryx_u32(&x2411, &x2412, x2410, x2378, x2375); + fiat_p521_addcarryx_u32(&x2413, &x2414, x2412, x2376, x2373); + fiat_p521_addcarryx_u32(&x2415, &x2416, x2414, x2374, x2371); + fiat_p521_addcarryx_u32(&x2417, &x2418, x2416, x2372, x2369); + fiat_p521_addcarryx_u32(&x2419, &x2420, x2418, x2370, x2367); + fiat_p521_addcarryx_u32(&x2421, &x2422, x2420, x2368, x2365); + fiat_p521_addcarryx_u32(&x2423, &x2424, x2422, x2366, x2363); + fiat_p521_addcarryx_u32(&x2425, &x2426, x2424, x2364, x2361); + x2427 = (x2426 + x2362); + fiat_p521_addcarryx_u32(&x2428, &x2429, 0x0, x2325, x2393); + fiat_p521_addcarryx_u32(&x2430, &x2431, x2429, x2327, x2395); + fiat_p521_addcarryx_u32(&x2432, &x2433, x2431, x2329, x2397); + fiat_p521_addcarryx_u32(&x2434, &x2435, x2433, x2331, x2399); + fiat_p521_addcarryx_u32(&x2436, &x2437, x2435, x2333, x2401); + fiat_p521_addcarryx_u32(&x2438, &x2439, x2437, x2335, x2403); + fiat_p521_addcarryx_u32(&x2440, &x2441, x2439, x2337, x2405); + fiat_p521_addcarryx_u32(&x2442, &x2443, x2441, x2339, x2407); + fiat_p521_addcarryx_u32(&x2444, &x2445, x2443, x2341, x2409); + fiat_p521_addcarryx_u32(&x2446, &x2447, x2445, x2343, x2411); + fiat_p521_addcarryx_u32(&x2448, &x2449, x2447, x2345, x2413); + fiat_p521_addcarryx_u32(&x2450, &x2451, x2449, x2347, x2415); + fiat_p521_addcarryx_u32(&x2452, &x2453, x2451, x2349, x2417); + fiat_p521_addcarryx_u32(&x2454, &x2455, x2453, x2351, x2419); + fiat_p521_addcarryx_u32(&x2456, &x2457, x2455, x2353, x2421); + fiat_p521_addcarryx_u32(&x2458, &x2459, x2457, x2355, x2423); + fiat_p521_addcarryx_u32(&x2460, &x2461, x2459, x2357, x2425); + fiat_p521_addcarryx_u32(&x2462, &x2463, x2461, x2359, x2427); + x2464 = ((uint32_t)x2463 + x2360); + fiat_p521_mulx_u32(&x2465, &x2466, x12, (arg2[16])); + fiat_p521_mulx_u32(&x2467, &x2468, x12, (arg2[15])); + fiat_p521_mulx_u32(&x2469, &x2470, x12, (arg2[14])); + fiat_p521_mulx_u32(&x2471, &x2472, x12, (arg2[13])); + fiat_p521_mulx_u32(&x2473, &x2474, x12, (arg2[12])); + fiat_p521_mulx_u32(&x2475, &x2476, x12, (arg2[11])); + fiat_p521_mulx_u32(&x2477, &x2478, x12, (arg2[10])); + fiat_p521_mulx_u32(&x2479, &x2480, x12, (arg2[9])); + fiat_p521_mulx_u32(&x2481, &x2482, x12, (arg2[8])); + fiat_p521_mulx_u32(&x2483, &x2484, x12, (arg2[7])); + fiat_p521_mulx_u32(&x2485, &x2486, x12, (arg2[6])); + fiat_p521_mulx_u32(&x2487, &x2488, x12, (arg2[5])); + fiat_p521_mulx_u32(&x2489, &x2490, x12, (arg2[4])); + fiat_p521_mulx_u32(&x2491, &x2492, x12, (arg2[3])); + fiat_p521_mulx_u32(&x2493, &x2494, x12, (arg2[2])); + fiat_p521_mulx_u32(&x2495, &x2496, x12, (arg2[1])); + fiat_p521_mulx_u32(&x2497, &x2498, x12, (arg2[0])); + fiat_p521_addcarryx_u32(&x2499, &x2500, 0x0, x2498, x2495); + fiat_p521_addcarryx_u32(&x2501, &x2502, x2500, x2496, x2493); + fiat_p521_addcarryx_u32(&x2503, &x2504, x2502, x2494, x2491); + fiat_p521_addcarryx_u32(&x2505, &x2506, x2504, x2492, x2489); + fiat_p521_addcarryx_u32(&x2507, &x2508, x2506, x2490, x2487); + fiat_p521_addcarryx_u32(&x2509, &x2510, x2508, x2488, x2485); + fiat_p521_addcarryx_u32(&x2511, &x2512, x2510, x2486, x2483); + fiat_p521_addcarryx_u32(&x2513, &x2514, x2512, x2484, x2481); + fiat_p521_addcarryx_u32(&x2515, &x2516, x2514, x2482, x2479); + fiat_p521_addcarryx_u32(&x2517, &x2518, x2516, x2480, x2477); + fiat_p521_addcarryx_u32(&x2519, &x2520, x2518, x2478, x2475); + fiat_p521_addcarryx_u32(&x2521, &x2522, x2520, x2476, x2473); + fiat_p521_addcarryx_u32(&x2523, &x2524, x2522, x2474, x2471); + fiat_p521_addcarryx_u32(&x2525, &x2526, x2524, x2472, x2469); + fiat_p521_addcarryx_u32(&x2527, &x2528, x2526, x2470, x2467); + fiat_p521_addcarryx_u32(&x2529, &x2530, x2528, x2468, x2465); + x2531 = (x2530 + x2466); + fiat_p521_addcarryx_u32(&x2532, &x2533, 0x0, x2430, x2497); + fiat_p521_addcarryx_u32(&x2534, &x2535, x2533, x2432, x2499); + fiat_p521_addcarryx_u32(&x2536, &x2537, x2535, x2434, x2501); + fiat_p521_addcarryx_u32(&x2538, &x2539, x2537, x2436, x2503); + fiat_p521_addcarryx_u32(&x2540, &x2541, x2539, x2438, x2505); + fiat_p521_addcarryx_u32(&x2542, &x2543, x2541, x2440, x2507); + fiat_p521_addcarryx_u32(&x2544, &x2545, x2543, x2442, x2509); + fiat_p521_addcarryx_u32(&x2546, &x2547, x2545, x2444, x2511); + fiat_p521_addcarryx_u32(&x2548, &x2549, x2547, x2446, x2513); + fiat_p521_addcarryx_u32(&x2550, &x2551, x2549, x2448, x2515); + fiat_p521_addcarryx_u32(&x2552, &x2553, x2551, x2450, x2517); + fiat_p521_addcarryx_u32(&x2554, &x2555, x2553, x2452, x2519); + fiat_p521_addcarryx_u32(&x2556, &x2557, x2555, x2454, x2521); + fiat_p521_addcarryx_u32(&x2558, &x2559, x2557, x2456, x2523); + fiat_p521_addcarryx_u32(&x2560, &x2561, x2559, x2458, x2525); + fiat_p521_addcarryx_u32(&x2562, &x2563, x2561, x2460, x2527); + fiat_p521_addcarryx_u32(&x2564, &x2565, x2563, x2462, x2529); + fiat_p521_addcarryx_u32(&x2566, &x2567, x2565, x2464, x2531); + fiat_p521_mulx_u32(&x2568, &x2569, x2532, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x2570, &x2571, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2572, &x2573, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2574, &x2575, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2576, &x2577, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2578, &x2579, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2580, &x2581, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2582, &x2583, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2584, &x2585, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2586, &x2587, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2588, &x2589, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2590, &x2591, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2592, &x2593, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2594, &x2595, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2596, &x2597, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2598, &x2599, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2600, &x2601, x2532, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x2602, &x2603, 0x0, x2601, x2598); + fiat_p521_addcarryx_u32(&x2604, &x2605, x2603, x2599, x2596); + fiat_p521_addcarryx_u32(&x2606, &x2607, x2605, x2597, x2594); + fiat_p521_addcarryx_u32(&x2608, &x2609, x2607, x2595, x2592); + fiat_p521_addcarryx_u32(&x2610, &x2611, x2609, x2593, x2590); + fiat_p521_addcarryx_u32(&x2612, &x2613, x2611, x2591, x2588); + fiat_p521_addcarryx_u32(&x2614, &x2615, x2613, x2589, x2586); + fiat_p521_addcarryx_u32(&x2616, &x2617, x2615, x2587, x2584); + fiat_p521_addcarryx_u32(&x2618, &x2619, x2617, x2585, x2582); + fiat_p521_addcarryx_u32(&x2620, &x2621, x2619, x2583, x2580); + fiat_p521_addcarryx_u32(&x2622, &x2623, x2621, x2581, x2578); + fiat_p521_addcarryx_u32(&x2624, &x2625, x2623, x2579, x2576); + fiat_p521_addcarryx_u32(&x2626, &x2627, x2625, x2577, x2574); + fiat_p521_addcarryx_u32(&x2628, &x2629, x2627, x2575, x2572); + fiat_p521_addcarryx_u32(&x2630, &x2631, x2629, x2573, x2570); + fiat_p521_addcarryx_u32(&x2632, &x2633, x2631, x2571, x2568); + x2634 = (x2633 + x2569); + fiat_p521_addcarryx_u32(&x2635, &x2636, 0x0, x2532, x2600); + fiat_p521_addcarryx_u32(&x2637, &x2638, x2636, x2534, x2602); + fiat_p521_addcarryx_u32(&x2639, &x2640, x2638, x2536, x2604); + fiat_p521_addcarryx_u32(&x2641, &x2642, x2640, x2538, x2606); + fiat_p521_addcarryx_u32(&x2643, &x2644, x2642, x2540, x2608); + fiat_p521_addcarryx_u32(&x2645, &x2646, x2644, x2542, x2610); + fiat_p521_addcarryx_u32(&x2647, &x2648, x2646, x2544, x2612); + fiat_p521_addcarryx_u32(&x2649, &x2650, x2648, x2546, x2614); + fiat_p521_addcarryx_u32(&x2651, &x2652, x2650, x2548, x2616); + fiat_p521_addcarryx_u32(&x2653, &x2654, x2652, x2550, x2618); + fiat_p521_addcarryx_u32(&x2655, &x2656, x2654, x2552, x2620); + fiat_p521_addcarryx_u32(&x2657, &x2658, x2656, x2554, x2622); + fiat_p521_addcarryx_u32(&x2659, &x2660, x2658, x2556, x2624); + fiat_p521_addcarryx_u32(&x2661, &x2662, x2660, x2558, x2626); + fiat_p521_addcarryx_u32(&x2663, &x2664, x2662, x2560, x2628); + fiat_p521_addcarryx_u32(&x2665, &x2666, x2664, x2562, x2630); + fiat_p521_addcarryx_u32(&x2667, &x2668, x2666, x2564, x2632); + fiat_p521_addcarryx_u32(&x2669, &x2670, x2668, x2566, x2634); + x2671 = ((uint32_t)x2670 + x2567); + fiat_p521_mulx_u32(&x2672, &x2673, x13, (arg2[16])); + fiat_p521_mulx_u32(&x2674, &x2675, x13, (arg2[15])); + fiat_p521_mulx_u32(&x2676, &x2677, x13, (arg2[14])); + fiat_p521_mulx_u32(&x2678, &x2679, x13, (arg2[13])); + fiat_p521_mulx_u32(&x2680, &x2681, x13, (arg2[12])); + fiat_p521_mulx_u32(&x2682, &x2683, x13, (arg2[11])); + fiat_p521_mulx_u32(&x2684, &x2685, x13, (arg2[10])); + fiat_p521_mulx_u32(&x2686, &x2687, x13, (arg2[9])); + fiat_p521_mulx_u32(&x2688, &x2689, x13, (arg2[8])); + fiat_p521_mulx_u32(&x2690, &x2691, x13, (arg2[7])); + fiat_p521_mulx_u32(&x2692, &x2693, x13, (arg2[6])); + fiat_p521_mulx_u32(&x2694, &x2695, x13, (arg2[5])); + fiat_p521_mulx_u32(&x2696, &x2697, x13, (arg2[4])); + fiat_p521_mulx_u32(&x2698, &x2699, x13, (arg2[3])); + fiat_p521_mulx_u32(&x2700, &x2701, x13, (arg2[2])); + fiat_p521_mulx_u32(&x2702, &x2703, x13, (arg2[1])); + fiat_p521_mulx_u32(&x2704, &x2705, x13, (arg2[0])); + fiat_p521_addcarryx_u32(&x2706, &x2707, 0x0, x2705, x2702); + fiat_p521_addcarryx_u32(&x2708, &x2709, x2707, x2703, x2700); + fiat_p521_addcarryx_u32(&x2710, &x2711, x2709, x2701, x2698); + fiat_p521_addcarryx_u32(&x2712, &x2713, x2711, x2699, x2696); + fiat_p521_addcarryx_u32(&x2714, &x2715, x2713, x2697, x2694); + fiat_p521_addcarryx_u32(&x2716, &x2717, x2715, x2695, x2692); + fiat_p521_addcarryx_u32(&x2718, &x2719, x2717, x2693, x2690); + fiat_p521_addcarryx_u32(&x2720, &x2721, x2719, x2691, x2688); + fiat_p521_addcarryx_u32(&x2722, &x2723, x2721, x2689, x2686); + fiat_p521_addcarryx_u32(&x2724, &x2725, x2723, x2687, x2684); + fiat_p521_addcarryx_u32(&x2726, &x2727, x2725, x2685, x2682); + fiat_p521_addcarryx_u32(&x2728, &x2729, x2727, x2683, x2680); + fiat_p521_addcarryx_u32(&x2730, &x2731, x2729, x2681, x2678); + fiat_p521_addcarryx_u32(&x2732, &x2733, x2731, x2679, x2676); + fiat_p521_addcarryx_u32(&x2734, &x2735, x2733, x2677, x2674); + fiat_p521_addcarryx_u32(&x2736, &x2737, x2735, x2675, x2672); + x2738 = (x2737 + x2673); + fiat_p521_addcarryx_u32(&x2739, &x2740, 0x0, x2637, x2704); + fiat_p521_addcarryx_u32(&x2741, &x2742, x2740, x2639, x2706); + fiat_p521_addcarryx_u32(&x2743, &x2744, x2742, x2641, x2708); + fiat_p521_addcarryx_u32(&x2745, &x2746, x2744, x2643, x2710); + fiat_p521_addcarryx_u32(&x2747, &x2748, x2746, x2645, x2712); + fiat_p521_addcarryx_u32(&x2749, &x2750, x2748, x2647, x2714); + fiat_p521_addcarryx_u32(&x2751, &x2752, x2750, x2649, x2716); + fiat_p521_addcarryx_u32(&x2753, &x2754, x2752, x2651, x2718); + fiat_p521_addcarryx_u32(&x2755, &x2756, x2754, x2653, x2720); + fiat_p521_addcarryx_u32(&x2757, &x2758, x2756, x2655, x2722); + fiat_p521_addcarryx_u32(&x2759, &x2760, x2758, x2657, x2724); + fiat_p521_addcarryx_u32(&x2761, &x2762, x2760, x2659, x2726); + fiat_p521_addcarryx_u32(&x2763, &x2764, x2762, x2661, x2728); + fiat_p521_addcarryx_u32(&x2765, &x2766, x2764, x2663, x2730); + fiat_p521_addcarryx_u32(&x2767, &x2768, x2766, x2665, x2732); + fiat_p521_addcarryx_u32(&x2769, &x2770, x2768, x2667, x2734); + fiat_p521_addcarryx_u32(&x2771, &x2772, x2770, x2669, x2736); + fiat_p521_addcarryx_u32(&x2773, &x2774, x2772, x2671, x2738); + fiat_p521_mulx_u32(&x2775, &x2776, x2739, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x2777, &x2778, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2779, &x2780, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2781, &x2782, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2783, &x2784, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2785, &x2786, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2787, &x2788, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2789, &x2790, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2791, &x2792, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2793, &x2794, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2795, &x2796, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2797, &x2798, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2799, &x2800, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2801, &x2802, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2803, &x2804, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2805, &x2806, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2807, &x2808, x2739, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x2809, &x2810, 0x0, x2808, x2805); + fiat_p521_addcarryx_u32(&x2811, &x2812, x2810, x2806, x2803); + fiat_p521_addcarryx_u32(&x2813, &x2814, x2812, x2804, x2801); + fiat_p521_addcarryx_u32(&x2815, &x2816, x2814, x2802, x2799); + fiat_p521_addcarryx_u32(&x2817, &x2818, x2816, x2800, x2797); + fiat_p521_addcarryx_u32(&x2819, &x2820, x2818, x2798, x2795); + fiat_p521_addcarryx_u32(&x2821, &x2822, x2820, x2796, x2793); + fiat_p521_addcarryx_u32(&x2823, &x2824, x2822, x2794, x2791); + fiat_p521_addcarryx_u32(&x2825, &x2826, x2824, x2792, x2789); + fiat_p521_addcarryx_u32(&x2827, &x2828, x2826, x2790, x2787); + fiat_p521_addcarryx_u32(&x2829, &x2830, x2828, x2788, x2785); + fiat_p521_addcarryx_u32(&x2831, &x2832, x2830, x2786, x2783); + fiat_p521_addcarryx_u32(&x2833, &x2834, x2832, x2784, x2781); + fiat_p521_addcarryx_u32(&x2835, &x2836, x2834, x2782, x2779); + fiat_p521_addcarryx_u32(&x2837, &x2838, x2836, x2780, x2777); + fiat_p521_addcarryx_u32(&x2839, &x2840, x2838, x2778, x2775); + x2841 = (x2840 + x2776); + fiat_p521_addcarryx_u32(&x2842, &x2843, 0x0, x2739, x2807); + fiat_p521_addcarryx_u32(&x2844, &x2845, x2843, x2741, x2809); + fiat_p521_addcarryx_u32(&x2846, &x2847, x2845, x2743, x2811); + fiat_p521_addcarryx_u32(&x2848, &x2849, x2847, x2745, x2813); + fiat_p521_addcarryx_u32(&x2850, &x2851, x2849, x2747, x2815); + fiat_p521_addcarryx_u32(&x2852, &x2853, x2851, x2749, x2817); + fiat_p521_addcarryx_u32(&x2854, &x2855, x2853, x2751, x2819); + fiat_p521_addcarryx_u32(&x2856, &x2857, x2855, x2753, x2821); + fiat_p521_addcarryx_u32(&x2858, &x2859, x2857, x2755, x2823); + fiat_p521_addcarryx_u32(&x2860, &x2861, x2859, x2757, x2825); + fiat_p521_addcarryx_u32(&x2862, &x2863, x2861, x2759, x2827); + fiat_p521_addcarryx_u32(&x2864, &x2865, x2863, x2761, x2829); + fiat_p521_addcarryx_u32(&x2866, &x2867, x2865, x2763, x2831); + fiat_p521_addcarryx_u32(&x2868, &x2869, x2867, x2765, x2833); + fiat_p521_addcarryx_u32(&x2870, &x2871, x2869, x2767, x2835); + fiat_p521_addcarryx_u32(&x2872, &x2873, x2871, x2769, x2837); + fiat_p521_addcarryx_u32(&x2874, &x2875, x2873, x2771, x2839); + fiat_p521_addcarryx_u32(&x2876, &x2877, x2875, x2773, x2841); + x2878 = ((uint32_t)x2877 + x2774); + fiat_p521_mulx_u32(&x2879, &x2880, x14, (arg2[16])); + fiat_p521_mulx_u32(&x2881, &x2882, x14, (arg2[15])); + fiat_p521_mulx_u32(&x2883, &x2884, x14, (arg2[14])); + fiat_p521_mulx_u32(&x2885, &x2886, x14, (arg2[13])); + fiat_p521_mulx_u32(&x2887, &x2888, x14, (arg2[12])); + fiat_p521_mulx_u32(&x2889, &x2890, x14, (arg2[11])); + fiat_p521_mulx_u32(&x2891, &x2892, x14, (arg2[10])); + fiat_p521_mulx_u32(&x2893, &x2894, x14, (arg2[9])); + fiat_p521_mulx_u32(&x2895, &x2896, x14, (arg2[8])); + fiat_p521_mulx_u32(&x2897, &x2898, x14, (arg2[7])); + fiat_p521_mulx_u32(&x2899, &x2900, x14, (arg2[6])); + fiat_p521_mulx_u32(&x2901, &x2902, x14, (arg2[5])); + fiat_p521_mulx_u32(&x2903, &x2904, x14, (arg2[4])); + fiat_p521_mulx_u32(&x2905, &x2906, x14, (arg2[3])); + fiat_p521_mulx_u32(&x2907, &x2908, x14, (arg2[2])); + fiat_p521_mulx_u32(&x2909, &x2910, x14, (arg2[1])); + fiat_p521_mulx_u32(&x2911, &x2912, x14, (arg2[0])); + fiat_p521_addcarryx_u32(&x2913, &x2914, 0x0, x2912, x2909); + fiat_p521_addcarryx_u32(&x2915, &x2916, x2914, x2910, x2907); + fiat_p521_addcarryx_u32(&x2917, &x2918, x2916, x2908, x2905); + fiat_p521_addcarryx_u32(&x2919, &x2920, x2918, x2906, x2903); + fiat_p521_addcarryx_u32(&x2921, &x2922, x2920, x2904, x2901); + fiat_p521_addcarryx_u32(&x2923, &x2924, x2922, x2902, x2899); + fiat_p521_addcarryx_u32(&x2925, &x2926, x2924, x2900, x2897); + fiat_p521_addcarryx_u32(&x2927, &x2928, x2926, x2898, x2895); + fiat_p521_addcarryx_u32(&x2929, &x2930, x2928, x2896, x2893); + fiat_p521_addcarryx_u32(&x2931, &x2932, x2930, x2894, x2891); + fiat_p521_addcarryx_u32(&x2933, &x2934, x2932, x2892, x2889); + fiat_p521_addcarryx_u32(&x2935, &x2936, x2934, x2890, x2887); + fiat_p521_addcarryx_u32(&x2937, &x2938, x2936, x2888, x2885); + fiat_p521_addcarryx_u32(&x2939, &x2940, x2938, x2886, x2883); + fiat_p521_addcarryx_u32(&x2941, &x2942, x2940, x2884, x2881); + fiat_p521_addcarryx_u32(&x2943, &x2944, x2942, x2882, x2879); + x2945 = (x2944 + x2880); + fiat_p521_addcarryx_u32(&x2946, &x2947, 0x0, x2844, x2911); + fiat_p521_addcarryx_u32(&x2948, &x2949, x2947, x2846, x2913); + fiat_p521_addcarryx_u32(&x2950, &x2951, x2949, x2848, x2915); + fiat_p521_addcarryx_u32(&x2952, &x2953, x2951, x2850, x2917); + fiat_p521_addcarryx_u32(&x2954, &x2955, x2953, x2852, x2919); + fiat_p521_addcarryx_u32(&x2956, &x2957, x2955, x2854, x2921); + fiat_p521_addcarryx_u32(&x2958, &x2959, x2957, x2856, x2923); + fiat_p521_addcarryx_u32(&x2960, &x2961, x2959, x2858, x2925); + fiat_p521_addcarryx_u32(&x2962, &x2963, x2961, x2860, x2927); + fiat_p521_addcarryx_u32(&x2964, &x2965, x2963, x2862, x2929); + fiat_p521_addcarryx_u32(&x2966, &x2967, x2965, x2864, x2931); + fiat_p521_addcarryx_u32(&x2968, &x2969, x2967, x2866, x2933); + fiat_p521_addcarryx_u32(&x2970, &x2971, x2969, x2868, x2935); + fiat_p521_addcarryx_u32(&x2972, &x2973, x2971, x2870, x2937); + fiat_p521_addcarryx_u32(&x2974, &x2975, x2973, x2872, x2939); + fiat_p521_addcarryx_u32(&x2976, &x2977, x2975, x2874, x2941); + fiat_p521_addcarryx_u32(&x2978, &x2979, x2977, x2876, x2943); + fiat_p521_addcarryx_u32(&x2980, &x2981, x2979, x2878, x2945); + fiat_p521_mulx_u32(&x2982, &x2983, x2946, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x2984, &x2985, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2986, &x2987, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2988, &x2989, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2990, &x2991, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2992, &x2993, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2994, &x2995, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2996, &x2997, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2998, &x2999, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3000, &x3001, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3002, &x3003, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3004, &x3005, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3006, &x3007, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3008, &x3009, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3010, &x3011, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3012, &x3013, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3014, &x3015, x2946, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x3016, &x3017, 0x0, x3015, x3012); + fiat_p521_addcarryx_u32(&x3018, &x3019, x3017, x3013, x3010); + fiat_p521_addcarryx_u32(&x3020, &x3021, x3019, x3011, x3008); + fiat_p521_addcarryx_u32(&x3022, &x3023, x3021, x3009, x3006); + fiat_p521_addcarryx_u32(&x3024, &x3025, x3023, x3007, x3004); + fiat_p521_addcarryx_u32(&x3026, &x3027, x3025, x3005, x3002); + fiat_p521_addcarryx_u32(&x3028, &x3029, x3027, x3003, x3000); + fiat_p521_addcarryx_u32(&x3030, &x3031, x3029, x3001, x2998); + fiat_p521_addcarryx_u32(&x3032, &x3033, x3031, x2999, x2996); + fiat_p521_addcarryx_u32(&x3034, &x3035, x3033, x2997, x2994); + fiat_p521_addcarryx_u32(&x3036, &x3037, x3035, x2995, x2992); + fiat_p521_addcarryx_u32(&x3038, &x3039, x3037, x2993, x2990); + fiat_p521_addcarryx_u32(&x3040, &x3041, x3039, x2991, x2988); + fiat_p521_addcarryx_u32(&x3042, &x3043, x3041, x2989, x2986); + fiat_p521_addcarryx_u32(&x3044, &x3045, x3043, x2987, x2984); + fiat_p521_addcarryx_u32(&x3046, &x3047, x3045, x2985, x2982); + x3048 = (x3047 + x2983); + fiat_p521_addcarryx_u32(&x3049, &x3050, 0x0, x2946, x3014); + fiat_p521_addcarryx_u32(&x3051, &x3052, x3050, x2948, x3016); + fiat_p521_addcarryx_u32(&x3053, &x3054, x3052, x2950, x3018); + fiat_p521_addcarryx_u32(&x3055, &x3056, x3054, x2952, x3020); + fiat_p521_addcarryx_u32(&x3057, &x3058, x3056, x2954, x3022); + fiat_p521_addcarryx_u32(&x3059, &x3060, x3058, x2956, x3024); + fiat_p521_addcarryx_u32(&x3061, &x3062, x3060, x2958, x3026); + fiat_p521_addcarryx_u32(&x3063, &x3064, x3062, x2960, x3028); + fiat_p521_addcarryx_u32(&x3065, &x3066, x3064, x2962, x3030); + fiat_p521_addcarryx_u32(&x3067, &x3068, x3066, x2964, x3032); + fiat_p521_addcarryx_u32(&x3069, &x3070, x3068, x2966, x3034); + fiat_p521_addcarryx_u32(&x3071, &x3072, x3070, x2968, x3036); + fiat_p521_addcarryx_u32(&x3073, &x3074, x3072, x2970, x3038); + fiat_p521_addcarryx_u32(&x3075, &x3076, x3074, x2972, x3040); + fiat_p521_addcarryx_u32(&x3077, &x3078, x3076, x2974, x3042); + fiat_p521_addcarryx_u32(&x3079, &x3080, x3078, x2976, x3044); + fiat_p521_addcarryx_u32(&x3081, &x3082, x3080, x2978, x3046); + fiat_p521_addcarryx_u32(&x3083, &x3084, x3082, x2980, x3048); + x3085 = ((uint32_t)x3084 + x2981); + fiat_p521_mulx_u32(&x3086, &x3087, x15, (arg2[16])); + fiat_p521_mulx_u32(&x3088, &x3089, x15, (arg2[15])); + fiat_p521_mulx_u32(&x3090, &x3091, x15, (arg2[14])); + fiat_p521_mulx_u32(&x3092, &x3093, x15, (arg2[13])); + fiat_p521_mulx_u32(&x3094, &x3095, x15, (arg2[12])); + fiat_p521_mulx_u32(&x3096, &x3097, x15, (arg2[11])); + fiat_p521_mulx_u32(&x3098, &x3099, x15, (arg2[10])); + fiat_p521_mulx_u32(&x3100, &x3101, x15, (arg2[9])); + fiat_p521_mulx_u32(&x3102, &x3103, x15, (arg2[8])); + fiat_p521_mulx_u32(&x3104, &x3105, x15, (arg2[7])); + fiat_p521_mulx_u32(&x3106, &x3107, x15, (arg2[6])); + fiat_p521_mulx_u32(&x3108, &x3109, x15, (arg2[5])); + fiat_p521_mulx_u32(&x3110, &x3111, x15, (arg2[4])); + fiat_p521_mulx_u32(&x3112, &x3113, x15, (arg2[3])); + fiat_p521_mulx_u32(&x3114, &x3115, x15, (arg2[2])); + fiat_p521_mulx_u32(&x3116, &x3117, x15, (arg2[1])); + fiat_p521_mulx_u32(&x3118, &x3119, x15, (arg2[0])); + fiat_p521_addcarryx_u32(&x3120, &x3121, 0x0, x3119, x3116); + fiat_p521_addcarryx_u32(&x3122, &x3123, x3121, x3117, x3114); + fiat_p521_addcarryx_u32(&x3124, &x3125, x3123, x3115, x3112); + fiat_p521_addcarryx_u32(&x3126, &x3127, x3125, x3113, x3110); + fiat_p521_addcarryx_u32(&x3128, &x3129, x3127, x3111, x3108); + fiat_p521_addcarryx_u32(&x3130, &x3131, x3129, x3109, x3106); + fiat_p521_addcarryx_u32(&x3132, &x3133, x3131, x3107, x3104); + fiat_p521_addcarryx_u32(&x3134, &x3135, x3133, x3105, x3102); + fiat_p521_addcarryx_u32(&x3136, &x3137, x3135, x3103, x3100); + fiat_p521_addcarryx_u32(&x3138, &x3139, x3137, x3101, x3098); + fiat_p521_addcarryx_u32(&x3140, &x3141, x3139, x3099, x3096); + fiat_p521_addcarryx_u32(&x3142, &x3143, x3141, x3097, x3094); + fiat_p521_addcarryx_u32(&x3144, &x3145, x3143, x3095, x3092); + fiat_p521_addcarryx_u32(&x3146, &x3147, x3145, x3093, x3090); + fiat_p521_addcarryx_u32(&x3148, &x3149, x3147, x3091, x3088); + fiat_p521_addcarryx_u32(&x3150, &x3151, x3149, x3089, x3086); + x3152 = (x3151 + x3087); + fiat_p521_addcarryx_u32(&x3153, &x3154, 0x0, x3051, x3118); + fiat_p521_addcarryx_u32(&x3155, &x3156, x3154, x3053, x3120); + fiat_p521_addcarryx_u32(&x3157, &x3158, x3156, x3055, x3122); + fiat_p521_addcarryx_u32(&x3159, &x3160, x3158, x3057, x3124); + fiat_p521_addcarryx_u32(&x3161, &x3162, x3160, x3059, x3126); + fiat_p521_addcarryx_u32(&x3163, &x3164, x3162, x3061, x3128); + fiat_p521_addcarryx_u32(&x3165, &x3166, x3164, x3063, x3130); + fiat_p521_addcarryx_u32(&x3167, &x3168, x3166, x3065, x3132); + fiat_p521_addcarryx_u32(&x3169, &x3170, x3168, x3067, x3134); + fiat_p521_addcarryx_u32(&x3171, &x3172, x3170, x3069, x3136); + fiat_p521_addcarryx_u32(&x3173, &x3174, x3172, x3071, x3138); + fiat_p521_addcarryx_u32(&x3175, &x3176, x3174, x3073, x3140); + fiat_p521_addcarryx_u32(&x3177, &x3178, x3176, x3075, x3142); + fiat_p521_addcarryx_u32(&x3179, &x3180, x3178, x3077, x3144); + fiat_p521_addcarryx_u32(&x3181, &x3182, x3180, x3079, x3146); + fiat_p521_addcarryx_u32(&x3183, &x3184, x3182, x3081, x3148); + fiat_p521_addcarryx_u32(&x3185, &x3186, x3184, x3083, x3150); + fiat_p521_addcarryx_u32(&x3187, &x3188, x3186, x3085, x3152); + fiat_p521_mulx_u32(&x3189, &x3190, x3153, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x3191, &x3192, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3193, &x3194, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3195, &x3196, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3197, &x3198, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3199, &x3200, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3201, &x3202, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3203, &x3204, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3205, &x3206, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3207, &x3208, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3209, &x3210, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3211, &x3212, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3213, &x3214, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3215, &x3216, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3217, &x3218, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3219, &x3220, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3221, &x3222, x3153, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x3223, &x3224, 0x0, x3222, x3219); + fiat_p521_addcarryx_u32(&x3225, &x3226, x3224, x3220, x3217); + fiat_p521_addcarryx_u32(&x3227, &x3228, x3226, x3218, x3215); + fiat_p521_addcarryx_u32(&x3229, &x3230, x3228, x3216, x3213); + fiat_p521_addcarryx_u32(&x3231, &x3232, x3230, x3214, x3211); + fiat_p521_addcarryx_u32(&x3233, &x3234, x3232, x3212, x3209); + fiat_p521_addcarryx_u32(&x3235, &x3236, x3234, x3210, x3207); + fiat_p521_addcarryx_u32(&x3237, &x3238, x3236, x3208, x3205); + fiat_p521_addcarryx_u32(&x3239, &x3240, x3238, x3206, x3203); + fiat_p521_addcarryx_u32(&x3241, &x3242, x3240, x3204, x3201); + fiat_p521_addcarryx_u32(&x3243, &x3244, x3242, x3202, x3199); + fiat_p521_addcarryx_u32(&x3245, &x3246, x3244, x3200, x3197); + fiat_p521_addcarryx_u32(&x3247, &x3248, x3246, x3198, x3195); + fiat_p521_addcarryx_u32(&x3249, &x3250, x3248, x3196, x3193); + fiat_p521_addcarryx_u32(&x3251, &x3252, x3250, x3194, x3191); + fiat_p521_addcarryx_u32(&x3253, &x3254, x3252, x3192, x3189); + x3255 = (x3254 + x3190); + fiat_p521_addcarryx_u32(&x3256, &x3257, 0x0, x3153, x3221); + fiat_p521_addcarryx_u32(&x3258, &x3259, x3257, x3155, x3223); + fiat_p521_addcarryx_u32(&x3260, &x3261, x3259, x3157, x3225); + fiat_p521_addcarryx_u32(&x3262, &x3263, x3261, x3159, x3227); + fiat_p521_addcarryx_u32(&x3264, &x3265, x3263, x3161, x3229); + fiat_p521_addcarryx_u32(&x3266, &x3267, x3265, x3163, x3231); + fiat_p521_addcarryx_u32(&x3268, &x3269, x3267, x3165, x3233); + fiat_p521_addcarryx_u32(&x3270, &x3271, x3269, x3167, x3235); + fiat_p521_addcarryx_u32(&x3272, &x3273, x3271, x3169, x3237); + fiat_p521_addcarryx_u32(&x3274, &x3275, x3273, x3171, x3239); + fiat_p521_addcarryx_u32(&x3276, &x3277, x3275, x3173, x3241); + fiat_p521_addcarryx_u32(&x3278, &x3279, x3277, x3175, x3243); + fiat_p521_addcarryx_u32(&x3280, &x3281, x3279, x3177, x3245); + fiat_p521_addcarryx_u32(&x3282, &x3283, x3281, x3179, x3247); + fiat_p521_addcarryx_u32(&x3284, &x3285, x3283, x3181, x3249); + fiat_p521_addcarryx_u32(&x3286, &x3287, x3285, x3183, x3251); + fiat_p521_addcarryx_u32(&x3288, &x3289, x3287, x3185, x3253); + fiat_p521_addcarryx_u32(&x3290, &x3291, x3289, x3187, x3255); + x3292 = ((uint32_t)x3291 + x3188); + fiat_p521_mulx_u32(&x3293, &x3294, x16, (arg2[16])); + fiat_p521_mulx_u32(&x3295, &x3296, x16, (arg2[15])); + fiat_p521_mulx_u32(&x3297, &x3298, x16, (arg2[14])); + fiat_p521_mulx_u32(&x3299, &x3300, x16, (arg2[13])); + fiat_p521_mulx_u32(&x3301, &x3302, x16, (arg2[12])); + fiat_p521_mulx_u32(&x3303, &x3304, x16, (arg2[11])); + fiat_p521_mulx_u32(&x3305, &x3306, x16, (arg2[10])); + fiat_p521_mulx_u32(&x3307, &x3308, x16, (arg2[9])); + fiat_p521_mulx_u32(&x3309, &x3310, x16, (arg2[8])); + fiat_p521_mulx_u32(&x3311, &x3312, x16, (arg2[7])); + fiat_p521_mulx_u32(&x3313, &x3314, x16, (arg2[6])); + fiat_p521_mulx_u32(&x3315, &x3316, x16, (arg2[5])); + fiat_p521_mulx_u32(&x3317, &x3318, x16, (arg2[4])); + fiat_p521_mulx_u32(&x3319, &x3320, x16, (arg2[3])); + fiat_p521_mulx_u32(&x3321, &x3322, x16, (arg2[2])); + fiat_p521_mulx_u32(&x3323, &x3324, x16, (arg2[1])); + fiat_p521_mulx_u32(&x3325, &x3326, x16, (arg2[0])); + fiat_p521_addcarryx_u32(&x3327, &x3328, 0x0, x3326, x3323); + fiat_p521_addcarryx_u32(&x3329, &x3330, x3328, x3324, x3321); + fiat_p521_addcarryx_u32(&x3331, &x3332, x3330, x3322, x3319); + fiat_p521_addcarryx_u32(&x3333, &x3334, x3332, x3320, x3317); + fiat_p521_addcarryx_u32(&x3335, &x3336, x3334, x3318, x3315); + fiat_p521_addcarryx_u32(&x3337, &x3338, x3336, x3316, x3313); + fiat_p521_addcarryx_u32(&x3339, &x3340, x3338, x3314, x3311); + fiat_p521_addcarryx_u32(&x3341, &x3342, x3340, x3312, x3309); + fiat_p521_addcarryx_u32(&x3343, &x3344, x3342, x3310, x3307); + fiat_p521_addcarryx_u32(&x3345, &x3346, x3344, x3308, x3305); + fiat_p521_addcarryx_u32(&x3347, &x3348, x3346, x3306, x3303); + fiat_p521_addcarryx_u32(&x3349, &x3350, x3348, x3304, x3301); + fiat_p521_addcarryx_u32(&x3351, &x3352, x3350, x3302, x3299); + fiat_p521_addcarryx_u32(&x3353, &x3354, x3352, x3300, x3297); + fiat_p521_addcarryx_u32(&x3355, &x3356, x3354, x3298, x3295); + fiat_p521_addcarryx_u32(&x3357, &x3358, x3356, x3296, x3293); + x3359 = (x3358 + x3294); + fiat_p521_addcarryx_u32(&x3360, &x3361, 0x0, x3258, x3325); + fiat_p521_addcarryx_u32(&x3362, &x3363, x3361, x3260, x3327); + fiat_p521_addcarryx_u32(&x3364, &x3365, x3363, x3262, x3329); + fiat_p521_addcarryx_u32(&x3366, &x3367, x3365, x3264, x3331); + fiat_p521_addcarryx_u32(&x3368, &x3369, x3367, x3266, x3333); + fiat_p521_addcarryx_u32(&x3370, &x3371, x3369, x3268, x3335); + fiat_p521_addcarryx_u32(&x3372, &x3373, x3371, x3270, x3337); + fiat_p521_addcarryx_u32(&x3374, &x3375, x3373, x3272, x3339); + fiat_p521_addcarryx_u32(&x3376, &x3377, x3375, x3274, x3341); + fiat_p521_addcarryx_u32(&x3378, &x3379, x3377, x3276, x3343); + fiat_p521_addcarryx_u32(&x3380, &x3381, x3379, x3278, x3345); + fiat_p521_addcarryx_u32(&x3382, &x3383, x3381, x3280, x3347); + fiat_p521_addcarryx_u32(&x3384, &x3385, x3383, x3282, x3349); + fiat_p521_addcarryx_u32(&x3386, &x3387, x3385, x3284, x3351); + fiat_p521_addcarryx_u32(&x3388, &x3389, x3387, x3286, x3353); + fiat_p521_addcarryx_u32(&x3390, &x3391, x3389, x3288, x3355); + fiat_p521_addcarryx_u32(&x3392, &x3393, x3391, x3290, x3357); + fiat_p521_addcarryx_u32(&x3394, &x3395, x3393, x3292, x3359); + fiat_p521_mulx_u32(&x3396, &x3397, x3360, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x3398, &x3399, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3400, &x3401, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3402, &x3403, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3404, &x3405, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3406, &x3407, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3408, &x3409, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3410, &x3411, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3412, &x3413, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3414, &x3415, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3416, &x3417, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3418, &x3419, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3420, &x3421, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3422, &x3423, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3424, &x3425, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3426, &x3427, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3428, &x3429, x3360, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x3430, &x3431, 0x0, x3429, x3426); + fiat_p521_addcarryx_u32(&x3432, &x3433, x3431, x3427, x3424); + fiat_p521_addcarryx_u32(&x3434, &x3435, x3433, x3425, x3422); + fiat_p521_addcarryx_u32(&x3436, &x3437, x3435, x3423, x3420); + fiat_p521_addcarryx_u32(&x3438, &x3439, x3437, x3421, x3418); + fiat_p521_addcarryx_u32(&x3440, &x3441, x3439, x3419, x3416); + fiat_p521_addcarryx_u32(&x3442, &x3443, x3441, x3417, x3414); + fiat_p521_addcarryx_u32(&x3444, &x3445, x3443, x3415, x3412); + fiat_p521_addcarryx_u32(&x3446, &x3447, x3445, x3413, x3410); + fiat_p521_addcarryx_u32(&x3448, &x3449, x3447, x3411, x3408); + fiat_p521_addcarryx_u32(&x3450, &x3451, x3449, x3409, x3406); + fiat_p521_addcarryx_u32(&x3452, &x3453, x3451, x3407, x3404); + fiat_p521_addcarryx_u32(&x3454, &x3455, x3453, x3405, x3402); + fiat_p521_addcarryx_u32(&x3456, &x3457, x3455, x3403, x3400); + fiat_p521_addcarryx_u32(&x3458, &x3459, x3457, x3401, x3398); + fiat_p521_addcarryx_u32(&x3460, &x3461, x3459, x3399, x3396); + x3462 = (x3461 + x3397); + fiat_p521_addcarryx_u32(&x3463, &x3464, 0x0, x3360, x3428); + fiat_p521_addcarryx_u32(&x3465, &x3466, x3464, x3362, x3430); + fiat_p521_addcarryx_u32(&x3467, &x3468, x3466, x3364, x3432); + fiat_p521_addcarryx_u32(&x3469, &x3470, x3468, x3366, x3434); + fiat_p521_addcarryx_u32(&x3471, &x3472, x3470, x3368, x3436); + fiat_p521_addcarryx_u32(&x3473, &x3474, x3472, x3370, x3438); + fiat_p521_addcarryx_u32(&x3475, &x3476, x3474, x3372, x3440); + fiat_p521_addcarryx_u32(&x3477, &x3478, x3476, x3374, x3442); + fiat_p521_addcarryx_u32(&x3479, &x3480, x3478, x3376, x3444); + fiat_p521_addcarryx_u32(&x3481, &x3482, x3480, x3378, x3446); + fiat_p521_addcarryx_u32(&x3483, &x3484, x3482, x3380, x3448); + fiat_p521_addcarryx_u32(&x3485, &x3486, x3484, x3382, x3450); + fiat_p521_addcarryx_u32(&x3487, &x3488, x3486, x3384, x3452); + fiat_p521_addcarryx_u32(&x3489, &x3490, x3488, x3386, x3454); + fiat_p521_addcarryx_u32(&x3491, &x3492, x3490, x3388, x3456); + fiat_p521_addcarryx_u32(&x3493, &x3494, x3492, x3390, x3458); + fiat_p521_addcarryx_u32(&x3495, &x3496, x3494, x3392, x3460); + fiat_p521_addcarryx_u32(&x3497, &x3498, x3496, x3394, x3462); + x3499 = ((uint32_t)x3498 + x3395); + fiat_p521_subborrowx_u32(&x3500, &x3501, 0x0, x3465, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3502, &x3503, x3501, x3467, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3504, &x3505, x3503, x3469, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3506, &x3507, x3505, x3471, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3508, &x3509, x3507, x3473, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3510, &x3511, x3509, x3475, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3512, &x3513, x3511, x3477, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3514, &x3515, x3513, x3479, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3516, &x3517, x3515, x3481, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3518, &x3519, x3517, x3483, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3520, &x3521, x3519, x3485, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3522, &x3523, x3521, x3487, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3524, &x3525, x3523, x3489, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3526, &x3527, x3525, x3491, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3528, &x3529, x3527, x3493, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3530, &x3531, x3529, x3495, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3532, &x3533, x3531, x3497, UINT16_C(0x1ff)); + fiat_p521_subborrowx_u32(&x3534, &x3535, x3533, x3499, 0x0); + fiat_p521_cmovznz_u32(&x3536, x3535, x3500, x3465); + fiat_p521_cmovznz_u32(&x3537, x3535, x3502, x3467); + fiat_p521_cmovznz_u32(&x3538, x3535, x3504, x3469); + fiat_p521_cmovznz_u32(&x3539, x3535, x3506, x3471); + fiat_p521_cmovznz_u32(&x3540, x3535, x3508, x3473); + fiat_p521_cmovznz_u32(&x3541, x3535, x3510, x3475); + fiat_p521_cmovznz_u32(&x3542, x3535, x3512, x3477); + fiat_p521_cmovznz_u32(&x3543, x3535, x3514, x3479); + fiat_p521_cmovznz_u32(&x3544, x3535, x3516, x3481); + fiat_p521_cmovznz_u32(&x3545, x3535, x3518, x3483); + fiat_p521_cmovznz_u32(&x3546, x3535, x3520, x3485); + fiat_p521_cmovznz_u32(&x3547, x3535, x3522, x3487); + fiat_p521_cmovznz_u32(&x3548, x3535, x3524, x3489); + fiat_p521_cmovznz_u32(&x3549, x3535, x3526, x3491); + fiat_p521_cmovznz_u32(&x3550, x3535, x3528, x3493); + fiat_p521_cmovznz_u32(&x3551, x3535, x3530, x3495); + fiat_p521_cmovznz_u32(&x3552, x3535, x3532, x3497); + out1[0] = x3536; + out1[1] = x3537; + out1[2] = x3538; + out1[3] = x3539; + out1[4] = x3540; + out1[5] = x3541; + out1[6] = x3542; + out1[7] = x3543; + out1[8] = x3544; + out1[9] = x3545; + out1[10] = x3546; + out1[11] = x3547; + out1[12] = x3548; + out1[13] = x3549; + out1[14] = x3550; + out1[15] = x3551; + out1[16] = x3552; +} + +/* + * The function fiat_p521_square squares a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p521_square(uint32_t out1[17], const uint32_t arg1[17]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint32_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint32_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint32_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint32_t x50; + uint32_t x51; + uint32_t x52; + fiat_p521_uint1 x53; + uint32_t x54; + fiat_p521_uint1 x55; + uint32_t x56; + fiat_p521_uint1 x57; + uint32_t x58; + fiat_p521_uint1 x59; + uint32_t x60; + fiat_p521_uint1 x61; + uint32_t x62; + fiat_p521_uint1 x63; + uint32_t x64; + fiat_p521_uint1 x65; + uint32_t x66; + fiat_p521_uint1 x67; + uint32_t x68; + fiat_p521_uint1 x69; + uint32_t x70; + fiat_p521_uint1 x71; + uint32_t x72; + fiat_p521_uint1 x73; + uint32_t x74; + fiat_p521_uint1 x75; + uint32_t x76; + fiat_p521_uint1 x77; + uint32_t x78; + fiat_p521_uint1 x79; + uint32_t x80; + fiat_p521_uint1 x81; + uint32_t x82; + fiat_p521_uint1 x83; + uint32_t x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + uint32_t x88; + uint32_t x89; + uint32_t x90; + uint32_t x91; + uint32_t x92; + uint32_t x93; + uint32_t x94; + uint32_t x95; + uint32_t x96; + uint32_t x97; + uint32_t x98; + uint32_t x99; + uint32_t x100; + uint32_t x101; + uint32_t x102; + uint32_t x103; + uint32_t x104; + uint32_t x105; + uint32_t x106; + uint32_t x107; + uint32_t x108; + uint32_t x109; + uint32_t x110; + uint32_t x111; + uint32_t x112; + uint32_t x113; + uint32_t x114; + uint32_t x115; + uint32_t x116; + uint32_t x117; + uint32_t x118; + uint32_t x119; + fiat_p521_uint1 x120; + uint32_t x121; + fiat_p521_uint1 x122; + uint32_t x123; + fiat_p521_uint1 x124; + uint32_t x125; + fiat_p521_uint1 x126; + uint32_t x127; + fiat_p521_uint1 x128; + uint32_t x129; + fiat_p521_uint1 x130; + uint32_t x131; + fiat_p521_uint1 x132; + uint32_t x133; + fiat_p521_uint1 x134; + uint32_t x135; + fiat_p521_uint1 x136; + uint32_t x137; + fiat_p521_uint1 x138; + uint32_t x139; + fiat_p521_uint1 x140; + uint32_t x141; + fiat_p521_uint1 x142; + uint32_t x143; + fiat_p521_uint1 x144; + uint32_t x145; + fiat_p521_uint1 x146; + uint32_t x147; + fiat_p521_uint1 x148; + uint32_t x149; + fiat_p521_uint1 x150; + uint32_t x151; + uint32_t x152; + fiat_p521_uint1 x153; + uint32_t x154; + fiat_p521_uint1 x155; + uint32_t x156; + fiat_p521_uint1 x157; + uint32_t x158; + fiat_p521_uint1 x159; + uint32_t x160; + fiat_p521_uint1 x161; + uint32_t x162; + fiat_p521_uint1 x163; + uint32_t x164; + fiat_p521_uint1 x165; + uint32_t x166; + fiat_p521_uint1 x167; + uint32_t x168; + fiat_p521_uint1 x169; + uint32_t x170; + fiat_p521_uint1 x171; + uint32_t x172; + fiat_p521_uint1 x173; + uint32_t x174; + fiat_p521_uint1 x175; + uint32_t x176; + fiat_p521_uint1 x177; + uint32_t x178; + fiat_p521_uint1 x179; + uint32_t x180; + fiat_p521_uint1 x181; + uint32_t x182; + fiat_p521_uint1 x183; + uint32_t x184; + fiat_p521_uint1 x185; + uint32_t x186; + fiat_p521_uint1 x187; + uint32_t x188; + uint32_t x189; + uint32_t x190; + uint32_t x191; + uint32_t x192; + uint32_t x193; + uint32_t x194; + uint32_t x195; + uint32_t x196; + uint32_t x197; + uint32_t x198; + uint32_t x199; + uint32_t x200; + uint32_t x201; + uint32_t x202; + uint32_t x203; + uint32_t x204; + uint32_t x205; + uint32_t x206; + uint32_t x207; + uint32_t x208; + uint32_t x209; + uint32_t x210; + uint32_t x211; + uint32_t x212; + uint32_t x213; + uint32_t x214; + uint32_t x215; + uint32_t x216; + uint32_t x217; + uint32_t x218; + uint32_t x219; + uint32_t x220; + uint32_t x221; + uint32_t x222; + fiat_p521_uint1 x223; + uint32_t x224; + fiat_p521_uint1 x225; + uint32_t x226; + fiat_p521_uint1 x227; + uint32_t x228; + fiat_p521_uint1 x229; + uint32_t x230; + fiat_p521_uint1 x231; + uint32_t x232; + fiat_p521_uint1 x233; + uint32_t x234; + fiat_p521_uint1 x235; + uint32_t x236; + fiat_p521_uint1 x237; + uint32_t x238; + fiat_p521_uint1 x239; + uint32_t x240; + fiat_p521_uint1 x241; + uint32_t x242; + fiat_p521_uint1 x243; + uint32_t x244; + fiat_p521_uint1 x245; + uint32_t x246; + fiat_p521_uint1 x247; + uint32_t x248; + fiat_p521_uint1 x249; + uint32_t x250; + fiat_p521_uint1 x251; + uint32_t x252; + fiat_p521_uint1 x253; + uint32_t x254; + uint32_t x255; + fiat_p521_uint1 x256; + uint32_t x257; + fiat_p521_uint1 x258; + uint32_t x259; + fiat_p521_uint1 x260; + uint32_t x261; + fiat_p521_uint1 x262; + uint32_t x263; + fiat_p521_uint1 x264; + uint32_t x265; + fiat_p521_uint1 x266; + uint32_t x267; + fiat_p521_uint1 x268; + uint32_t x269; + fiat_p521_uint1 x270; + uint32_t x271; + fiat_p521_uint1 x272; + uint32_t x273; + fiat_p521_uint1 x274; + uint32_t x275; + fiat_p521_uint1 x276; + uint32_t x277; + fiat_p521_uint1 x278; + uint32_t x279; + fiat_p521_uint1 x280; + uint32_t x281; + fiat_p521_uint1 x282; + uint32_t x283; + fiat_p521_uint1 x284; + uint32_t x285; + fiat_p521_uint1 x286; + uint32_t x287; + fiat_p521_uint1 x288; + uint32_t x289; + fiat_p521_uint1 x290; + uint32_t x291; + uint32_t x292; + uint32_t x293; + uint32_t x294; + uint32_t x295; + uint32_t x296; + uint32_t x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + uint32_t x303; + uint32_t x304; + uint32_t x305; + uint32_t x306; + uint32_t x307; + uint32_t x308; + uint32_t x309; + uint32_t x310; + uint32_t x311; + uint32_t x312; + uint32_t x313; + uint32_t x314; + uint32_t x315; + uint32_t x316; + uint32_t x317; + uint32_t x318; + uint32_t x319; + uint32_t x320; + uint32_t x321; + uint32_t x322; + uint32_t x323; + uint32_t x324; + uint32_t x325; + fiat_p521_uint1 x326; + uint32_t x327; + fiat_p521_uint1 x328; + uint32_t x329; + fiat_p521_uint1 x330; + uint32_t x331; + fiat_p521_uint1 x332; + uint32_t x333; + fiat_p521_uint1 x334; + uint32_t x335; + fiat_p521_uint1 x336; + uint32_t x337; + fiat_p521_uint1 x338; + uint32_t x339; + fiat_p521_uint1 x340; + uint32_t x341; + fiat_p521_uint1 x342; + uint32_t x343; + fiat_p521_uint1 x344; + uint32_t x345; + fiat_p521_uint1 x346; + uint32_t x347; + fiat_p521_uint1 x348; + uint32_t x349; + fiat_p521_uint1 x350; + uint32_t x351; + fiat_p521_uint1 x352; + uint32_t x353; + fiat_p521_uint1 x354; + uint32_t x355; + fiat_p521_uint1 x356; + uint32_t x357; + uint32_t x358; + fiat_p521_uint1 x359; + uint32_t x360; + fiat_p521_uint1 x361; + uint32_t x362; + fiat_p521_uint1 x363; + uint32_t x364; + fiat_p521_uint1 x365; + uint32_t x366; + fiat_p521_uint1 x367; + uint32_t x368; + fiat_p521_uint1 x369; + uint32_t x370; + fiat_p521_uint1 x371; + uint32_t x372; + fiat_p521_uint1 x373; + uint32_t x374; + fiat_p521_uint1 x375; + uint32_t x376; + fiat_p521_uint1 x377; + uint32_t x378; + fiat_p521_uint1 x379; + uint32_t x380; + fiat_p521_uint1 x381; + uint32_t x382; + fiat_p521_uint1 x383; + uint32_t x384; + fiat_p521_uint1 x385; + uint32_t x386; + fiat_p521_uint1 x387; + uint32_t x388; + fiat_p521_uint1 x389; + uint32_t x390; + fiat_p521_uint1 x391; + uint32_t x392; + fiat_p521_uint1 x393; + uint32_t x394; + uint32_t x395; + uint32_t x396; + uint32_t x397; + uint32_t x398; + uint32_t x399; + uint32_t x400; + uint32_t x401; + uint32_t x402; + uint32_t x403; + uint32_t x404; + uint32_t x405; + uint32_t x406; + uint32_t x407; + uint32_t x408; + uint32_t x409; + uint32_t x410; + uint32_t x411; + uint32_t x412; + uint32_t x413; + uint32_t x414; + uint32_t x415; + uint32_t x416; + uint32_t x417; + uint32_t x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + uint32_t x422; + uint32_t x423; + uint32_t x424; + uint32_t x425; + uint32_t x426; + uint32_t x427; + uint32_t x428; + uint32_t x429; + fiat_p521_uint1 x430; + uint32_t x431; + fiat_p521_uint1 x432; + uint32_t x433; + fiat_p521_uint1 x434; + uint32_t x435; + fiat_p521_uint1 x436; + uint32_t x437; + fiat_p521_uint1 x438; + uint32_t x439; + fiat_p521_uint1 x440; + uint32_t x441; + fiat_p521_uint1 x442; + uint32_t x443; + fiat_p521_uint1 x444; + uint32_t x445; + fiat_p521_uint1 x446; + uint32_t x447; + fiat_p521_uint1 x448; + uint32_t x449; + fiat_p521_uint1 x450; + uint32_t x451; + fiat_p521_uint1 x452; + uint32_t x453; + fiat_p521_uint1 x454; + uint32_t x455; + fiat_p521_uint1 x456; + uint32_t x457; + fiat_p521_uint1 x458; + uint32_t x459; + fiat_p521_uint1 x460; + uint32_t x461; + uint32_t x462; + fiat_p521_uint1 x463; + uint32_t x464; + fiat_p521_uint1 x465; + uint32_t x466; + fiat_p521_uint1 x467; + uint32_t x468; + fiat_p521_uint1 x469; + uint32_t x470; + fiat_p521_uint1 x471; + uint32_t x472; + fiat_p521_uint1 x473; + uint32_t x474; + fiat_p521_uint1 x475; + uint32_t x476; + fiat_p521_uint1 x477; + uint32_t x478; + fiat_p521_uint1 x479; + uint32_t x480; + fiat_p521_uint1 x481; + uint32_t x482; + fiat_p521_uint1 x483; + uint32_t x484; + fiat_p521_uint1 x485; + uint32_t x486; + fiat_p521_uint1 x487; + uint32_t x488; + fiat_p521_uint1 x489; + uint32_t x490; + fiat_p521_uint1 x491; + uint32_t x492; + fiat_p521_uint1 x493; + uint32_t x494; + fiat_p521_uint1 x495; + uint32_t x496; + fiat_p521_uint1 x497; + uint32_t x498; + uint32_t x499; + uint32_t x500; + uint32_t x501; + uint32_t x502; + uint32_t x503; + uint32_t x504; + uint32_t x505; + uint32_t x506; + uint32_t x507; + uint32_t x508; + uint32_t x509; + uint32_t x510; + uint32_t x511; + uint32_t x512; + uint32_t x513; + uint32_t x514; + uint32_t x515; + uint32_t x516; + uint32_t x517; + uint32_t x518; + uint32_t x519; + uint32_t x520; + uint32_t x521; + uint32_t x522; + uint32_t x523; + uint32_t x524; + uint32_t x525; + uint32_t x526; + uint32_t x527; + uint32_t x528; + uint32_t x529; + uint32_t x530; + uint32_t x531; + uint32_t x532; + fiat_p521_uint1 x533; + uint32_t x534; + fiat_p521_uint1 x535; + uint32_t x536; + fiat_p521_uint1 x537; + uint32_t x538; + fiat_p521_uint1 x539; + uint32_t x540; + fiat_p521_uint1 x541; + uint32_t x542; + fiat_p521_uint1 x543; + uint32_t x544; + fiat_p521_uint1 x545; + uint32_t x546; + fiat_p521_uint1 x547; + uint32_t x548; + fiat_p521_uint1 x549; + uint32_t x550; + fiat_p521_uint1 x551; + uint32_t x552; + fiat_p521_uint1 x553; + uint32_t x554; + fiat_p521_uint1 x555; + uint32_t x556; + fiat_p521_uint1 x557; + uint32_t x558; + fiat_p521_uint1 x559; + uint32_t x560; + fiat_p521_uint1 x561; + uint32_t x562; + fiat_p521_uint1 x563; + uint32_t x564; + uint32_t x565; + fiat_p521_uint1 x566; + uint32_t x567; + fiat_p521_uint1 x568; + uint32_t x569; + fiat_p521_uint1 x570; + uint32_t x571; + fiat_p521_uint1 x572; + uint32_t x573; + fiat_p521_uint1 x574; + uint32_t x575; + fiat_p521_uint1 x576; + uint32_t x577; + fiat_p521_uint1 x578; + uint32_t x579; + fiat_p521_uint1 x580; + uint32_t x581; + fiat_p521_uint1 x582; + uint32_t x583; + fiat_p521_uint1 x584; + uint32_t x585; + fiat_p521_uint1 x586; + uint32_t x587; + fiat_p521_uint1 x588; + uint32_t x589; + fiat_p521_uint1 x590; + uint32_t x591; + fiat_p521_uint1 x592; + uint32_t x593; + fiat_p521_uint1 x594; + uint32_t x595; + fiat_p521_uint1 x596; + uint32_t x597; + fiat_p521_uint1 x598; + uint32_t x599; + fiat_p521_uint1 x600; + uint32_t x601; + uint32_t x602; + uint32_t x603; + uint32_t x604; + uint32_t x605; + uint32_t x606; + uint32_t x607; + uint32_t x608; + uint32_t x609; + uint32_t x610; + uint32_t x611; + uint32_t x612; + uint32_t x613; + uint32_t x614; + uint32_t x615; + uint32_t x616; + uint32_t x617; + uint32_t x618; + uint32_t x619; + uint32_t x620; + uint32_t x621; + uint32_t x622; + uint32_t x623; + uint32_t x624; + uint32_t x625; + uint32_t x626; + uint32_t x627; + uint32_t x628; + uint32_t x629; + uint32_t x630; + uint32_t x631; + uint32_t x632; + uint32_t x633; + uint32_t x634; + uint32_t x635; + uint32_t x636; + fiat_p521_uint1 x637; + uint32_t x638; + fiat_p521_uint1 x639; + uint32_t x640; + fiat_p521_uint1 x641; + uint32_t x642; + fiat_p521_uint1 x643; + uint32_t x644; + fiat_p521_uint1 x645; + uint32_t x646; + fiat_p521_uint1 x647; + uint32_t x648; + fiat_p521_uint1 x649; + uint32_t x650; + fiat_p521_uint1 x651; + uint32_t x652; + fiat_p521_uint1 x653; + uint32_t x654; + fiat_p521_uint1 x655; + uint32_t x656; + fiat_p521_uint1 x657; + uint32_t x658; + fiat_p521_uint1 x659; + uint32_t x660; + fiat_p521_uint1 x661; + uint32_t x662; + fiat_p521_uint1 x663; + uint32_t x664; + fiat_p521_uint1 x665; + uint32_t x666; + fiat_p521_uint1 x667; + uint32_t x668; + uint32_t x669; + fiat_p521_uint1 x670; + uint32_t x671; + fiat_p521_uint1 x672; + uint32_t x673; + fiat_p521_uint1 x674; + uint32_t x675; + fiat_p521_uint1 x676; + uint32_t x677; + fiat_p521_uint1 x678; + uint32_t x679; + fiat_p521_uint1 x680; + uint32_t x681; + fiat_p521_uint1 x682; + uint32_t x683; + fiat_p521_uint1 x684; + uint32_t x685; + fiat_p521_uint1 x686; + uint32_t x687; + fiat_p521_uint1 x688; + uint32_t x689; + fiat_p521_uint1 x690; + uint32_t x691; + fiat_p521_uint1 x692; + uint32_t x693; + fiat_p521_uint1 x694; + uint32_t x695; + fiat_p521_uint1 x696; + uint32_t x697; + fiat_p521_uint1 x698; + uint32_t x699; + fiat_p521_uint1 x700; + uint32_t x701; + fiat_p521_uint1 x702; + uint32_t x703; + fiat_p521_uint1 x704; + uint32_t x705; + uint32_t x706; + uint32_t x707; + uint32_t x708; + uint32_t x709; + uint32_t x710; + uint32_t x711; + uint32_t x712; + uint32_t x713; + uint32_t x714; + uint32_t x715; + uint32_t x716; + uint32_t x717; + uint32_t x718; + uint32_t x719; + uint32_t x720; + uint32_t x721; + uint32_t x722; + uint32_t x723; + uint32_t x724; + uint32_t x725; + uint32_t x726; + uint32_t x727; + uint32_t x728; + uint32_t x729; + uint32_t x730; + uint32_t x731; + uint32_t x732; + uint32_t x733; + uint32_t x734; + uint32_t x735; + uint32_t x736; + uint32_t x737; + uint32_t x738; + uint32_t x739; + fiat_p521_uint1 x740; + uint32_t x741; + fiat_p521_uint1 x742; + uint32_t x743; + fiat_p521_uint1 x744; + uint32_t x745; + fiat_p521_uint1 x746; + uint32_t x747; + fiat_p521_uint1 x748; + uint32_t x749; + fiat_p521_uint1 x750; + uint32_t x751; + fiat_p521_uint1 x752; + uint32_t x753; + fiat_p521_uint1 x754; + uint32_t x755; + fiat_p521_uint1 x756; + uint32_t x757; + fiat_p521_uint1 x758; + uint32_t x759; + fiat_p521_uint1 x760; + uint32_t x761; + fiat_p521_uint1 x762; + uint32_t x763; + fiat_p521_uint1 x764; + uint32_t x765; + fiat_p521_uint1 x766; + uint32_t x767; + fiat_p521_uint1 x768; + uint32_t x769; + fiat_p521_uint1 x770; + uint32_t x771; + uint32_t x772; + fiat_p521_uint1 x773; + uint32_t x774; + fiat_p521_uint1 x775; + uint32_t x776; + fiat_p521_uint1 x777; + uint32_t x778; + fiat_p521_uint1 x779; + uint32_t x780; + fiat_p521_uint1 x781; + uint32_t x782; + fiat_p521_uint1 x783; + uint32_t x784; + fiat_p521_uint1 x785; + uint32_t x786; + fiat_p521_uint1 x787; + uint32_t x788; + fiat_p521_uint1 x789; + uint32_t x790; + fiat_p521_uint1 x791; + uint32_t x792; + fiat_p521_uint1 x793; + uint32_t x794; + fiat_p521_uint1 x795; + uint32_t x796; + fiat_p521_uint1 x797; + uint32_t x798; + fiat_p521_uint1 x799; + uint32_t x800; + fiat_p521_uint1 x801; + uint32_t x802; + fiat_p521_uint1 x803; + uint32_t x804; + fiat_p521_uint1 x805; + uint32_t x806; + fiat_p521_uint1 x807; + uint32_t x808; + uint32_t x809; + uint32_t x810; + uint32_t x811; + uint32_t x812; + uint32_t x813; + uint32_t x814; + uint32_t x815; + uint32_t x816; + uint32_t x817; + uint32_t x818; + uint32_t x819; + uint32_t x820; + uint32_t x821; + uint32_t x822; + uint32_t x823; + uint32_t x824; + uint32_t x825; + uint32_t x826; + uint32_t x827; + uint32_t x828; + uint32_t x829; + uint32_t x830; + uint32_t x831; + uint32_t x832; + uint32_t x833; + uint32_t x834; + uint32_t x835; + uint32_t x836; + uint32_t x837; + uint32_t x838; + uint32_t x839; + uint32_t x840; + uint32_t x841; + uint32_t x842; + uint32_t x843; + fiat_p521_uint1 x844; + uint32_t x845; + fiat_p521_uint1 x846; + uint32_t x847; + fiat_p521_uint1 x848; + uint32_t x849; + fiat_p521_uint1 x850; + uint32_t x851; + fiat_p521_uint1 x852; + uint32_t x853; + fiat_p521_uint1 x854; + uint32_t x855; + fiat_p521_uint1 x856; + uint32_t x857; + fiat_p521_uint1 x858; + uint32_t x859; + fiat_p521_uint1 x860; + uint32_t x861; + fiat_p521_uint1 x862; + uint32_t x863; + fiat_p521_uint1 x864; + uint32_t x865; + fiat_p521_uint1 x866; + uint32_t x867; + fiat_p521_uint1 x868; + uint32_t x869; + fiat_p521_uint1 x870; + uint32_t x871; + fiat_p521_uint1 x872; + uint32_t x873; + fiat_p521_uint1 x874; + uint32_t x875; + uint32_t x876; + fiat_p521_uint1 x877; + uint32_t x878; + fiat_p521_uint1 x879; + uint32_t x880; + fiat_p521_uint1 x881; + uint32_t x882; + fiat_p521_uint1 x883; + uint32_t x884; + fiat_p521_uint1 x885; + uint32_t x886; + fiat_p521_uint1 x887; + uint32_t x888; + fiat_p521_uint1 x889; + uint32_t x890; + fiat_p521_uint1 x891; + uint32_t x892; + fiat_p521_uint1 x893; + uint32_t x894; + fiat_p521_uint1 x895; + uint32_t x896; + fiat_p521_uint1 x897; + uint32_t x898; + fiat_p521_uint1 x899; + uint32_t x900; + fiat_p521_uint1 x901; + uint32_t x902; + fiat_p521_uint1 x903; + uint32_t x904; + fiat_p521_uint1 x905; + uint32_t x906; + fiat_p521_uint1 x907; + uint32_t x908; + fiat_p521_uint1 x909; + uint32_t x910; + fiat_p521_uint1 x911; + uint32_t x912; + uint32_t x913; + uint32_t x914; + uint32_t x915; + uint32_t x916; + uint32_t x917; + uint32_t x918; + uint32_t x919; + uint32_t x920; + uint32_t x921; + uint32_t x922; + uint32_t x923; + uint32_t x924; + uint32_t x925; + uint32_t x926; + uint32_t x927; + uint32_t x928; + uint32_t x929; + uint32_t x930; + uint32_t x931; + uint32_t x932; + uint32_t x933; + uint32_t x934; + uint32_t x935; + uint32_t x936; + uint32_t x937; + uint32_t x938; + uint32_t x939; + uint32_t x940; + uint32_t x941; + uint32_t x942; + uint32_t x943; + uint32_t x944; + uint32_t x945; + uint32_t x946; + fiat_p521_uint1 x947; + uint32_t x948; + fiat_p521_uint1 x949; + uint32_t x950; + fiat_p521_uint1 x951; + uint32_t x952; + fiat_p521_uint1 x953; + uint32_t x954; + fiat_p521_uint1 x955; + uint32_t x956; + fiat_p521_uint1 x957; + uint32_t x958; + fiat_p521_uint1 x959; + uint32_t x960; + fiat_p521_uint1 x961; + uint32_t x962; + fiat_p521_uint1 x963; + uint32_t x964; + fiat_p521_uint1 x965; + uint32_t x966; + fiat_p521_uint1 x967; + uint32_t x968; + fiat_p521_uint1 x969; + uint32_t x970; + fiat_p521_uint1 x971; + uint32_t x972; + fiat_p521_uint1 x973; + uint32_t x974; + fiat_p521_uint1 x975; + uint32_t x976; + fiat_p521_uint1 x977; + uint32_t x978; + uint32_t x979; + fiat_p521_uint1 x980; + uint32_t x981; + fiat_p521_uint1 x982; + uint32_t x983; + fiat_p521_uint1 x984; + uint32_t x985; + fiat_p521_uint1 x986; + uint32_t x987; + fiat_p521_uint1 x988; + uint32_t x989; + fiat_p521_uint1 x990; + uint32_t x991; + fiat_p521_uint1 x992; + uint32_t x993; + fiat_p521_uint1 x994; + uint32_t x995; + fiat_p521_uint1 x996; + uint32_t x997; + fiat_p521_uint1 x998; + uint32_t x999; + fiat_p521_uint1 x1000; + uint32_t x1001; + fiat_p521_uint1 x1002; + uint32_t x1003; + fiat_p521_uint1 x1004; + uint32_t x1005; + fiat_p521_uint1 x1006; + uint32_t x1007; + fiat_p521_uint1 x1008; + uint32_t x1009; + fiat_p521_uint1 x1010; + uint32_t x1011; + fiat_p521_uint1 x1012; + uint32_t x1013; + fiat_p521_uint1 x1014; + uint32_t x1015; + uint32_t x1016; + uint32_t x1017; + uint32_t x1018; + uint32_t x1019; + uint32_t x1020; + uint32_t x1021; + uint32_t x1022; + uint32_t x1023; + uint32_t x1024; + uint32_t x1025; + uint32_t x1026; + uint32_t x1027; + uint32_t x1028; + uint32_t x1029; + uint32_t x1030; + uint32_t x1031; + uint32_t x1032; + uint32_t x1033; + uint32_t x1034; + uint32_t x1035; + uint32_t x1036; + uint32_t x1037; + uint32_t x1038; + uint32_t x1039; + uint32_t x1040; + uint32_t x1041; + uint32_t x1042; + uint32_t x1043; + uint32_t x1044; + uint32_t x1045; + uint32_t x1046; + uint32_t x1047; + uint32_t x1048; + uint32_t x1049; + uint32_t x1050; + fiat_p521_uint1 x1051; + uint32_t x1052; + fiat_p521_uint1 x1053; + uint32_t x1054; + fiat_p521_uint1 x1055; + uint32_t x1056; + fiat_p521_uint1 x1057; + uint32_t x1058; + fiat_p521_uint1 x1059; + uint32_t x1060; + fiat_p521_uint1 x1061; + uint32_t x1062; + fiat_p521_uint1 x1063; + uint32_t x1064; + fiat_p521_uint1 x1065; + uint32_t x1066; + fiat_p521_uint1 x1067; + uint32_t x1068; + fiat_p521_uint1 x1069; + uint32_t x1070; + fiat_p521_uint1 x1071; + uint32_t x1072; + fiat_p521_uint1 x1073; + uint32_t x1074; + fiat_p521_uint1 x1075; + uint32_t x1076; + fiat_p521_uint1 x1077; + uint32_t x1078; + fiat_p521_uint1 x1079; + uint32_t x1080; + fiat_p521_uint1 x1081; + uint32_t x1082; + uint32_t x1083; + fiat_p521_uint1 x1084; + uint32_t x1085; + fiat_p521_uint1 x1086; + uint32_t x1087; + fiat_p521_uint1 x1088; + uint32_t x1089; + fiat_p521_uint1 x1090; + uint32_t x1091; + fiat_p521_uint1 x1092; + uint32_t x1093; + fiat_p521_uint1 x1094; + uint32_t x1095; + fiat_p521_uint1 x1096; + uint32_t x1097; + fiat_p521_uint1 x1098; + uint32_t x1099; + fiat_p521_uint1 x1100; + uint32_t x1101; + fiat_p521_uint1 x1102; + uint32_t x1103; + fiat_p521_uint1 x1104; + uint32_t x1105; + fiat_p521_uint1 x1106; + uint32_t x1107; + fiat_p521_uint1 x1108; + uint32_t x1109; + fiat_p521_uint1 x1110; + uint32_t x1111; + fiat_p521_uint1 x1112; + uint32_t x1113; + fiat_p521_uint1 x1114; + uint32_t x1115; + fiat_p521_uint1 x1116; + uint32_t x1117; + fiat_p521_uint1 x1118; + uint32_t x1119; + uint32_t x1120; + uint32_t x1121; + uint32_t x1122; + uint32_t x1123; + uint32_t x1124; + uint32_t x1125; + uint32_t x1126; + uint32_t x1127; + uint32_t x1128; + uint32_t x1129; + uint32_t x1130; + uint32_t x1131; + uint32_t x1132; + uint32_t x1133; + uint32_t x1134; + uint32_t x1135; + uint32_t x1136; + uint32_t x1137; + uint32_t x1138; + uint32_t x1139; + uint32_t x1140; + uint32_t x1141; + uint32_t x1142; + uint32_t x1143; + uint32_t x1144; + uint32_t x1145; + uint32_t x1146; + uint32_t x1147; + uint32_t x1148; + uint32_t x1149; + uint32_t x1150; + uint32_t x1151; + uint32_t x1152; + uint32_t x1153; + fiat_p521_uint1 x1154; + uint32_t x1155; + fiat_p521_uint1 x1156; + uint32_t x1157; + fiat_p521_uint1 x1158; + uint32_t x1159; + fiat_p521_uint1 x1160; + uint32_t x1161; + fiat_p521_uint1 x1162; + uint32_t x1163; + fiat_p521_uint1 x1164; + uint32_t x1165; + fiat_p521_uint1 x1166; + uint32_t x1167; + fiat_p521_uint1 x1168; + uint32_t x1169; + fiat_p521_uint1 x1170; + uint32_t x1171; + fiat_p521_uint1 x1172; + uint32_t x1173; + fiat_p521_uint1 x1174; + uint32_t x1175; + fiat_p521_uint1 x1176; + uint32_t x1177; + fiat_p521_uint1 x1178; + uint32_t x1179; + fiat_p521_uint1 x1180; + uint32_t x1181; + fiat_p521_uint1 x1182; + uint32_t x1183; + fiat_p521_uint1 x1184; + uint32_t x1185; + uint32_t x1186; + fiat_p521_uint1 x1187; + uint32_t x1188; + fiat_p521_uint1 x1189; + uint32_t x1190; + fiat_p521_uint1 x1191; + uint32_t x1192; + fiat_p521_uint1 x1193; + uint32_t x1194; + fiat_p521_uint1 x1195; + uint32_t x1196; + fiat_p521_uint1 x1197; + uint32_t x1198; + fiat_p521_uint1 x1199; + uint32_t x1200; + fiat_p521_uint1 x1201; + uint32_t x1202; + fiat_p521_uint1 x1203; + uint32_t x1204; + fiat_p521_uint1 x1205; + uint32_t x1206; + fiat_p521_uint1 x1207; + uint32_t x1208; + fiat_p521_uint1 x1209; + uint32_t x1210; + fiat_p521_uint1 x1211; + uint32_t x1212; + fiat_p521_uint1 x1213; + uint32_t x1214; + fiat_p521_uint1 x1215; + uint32_t x1216; + fiat_p521_uint1 x1217; + uint32_t x1218; + fiat_p521_uint1 x1219; + uint32_t x1220; + fiat_p521_uint1 x1221; + uint32_t x1222; + uint32_t x1223; + uint32_t x1224; + uint32_t x1225; + uint32_t x1226; + uint32_t x1227; + uint32_t x1228; + uint32_t x1229; + uint32_t x1230; + uint32_t x1231; + uint32_t x1232; + uint32_t x1233; + uint32_t x1234; + uint32_t x1235; + uint32_t x1236; + uint32_t x1237; + uint32_t x1238; + uint32_t x1239; + uint32_t x1240; + uint32_t x1241; + uint32_t x1242; + uint32_t x1243; + uint32_t x1244; + uint32_t x1245; + uint32_t x1246; + uint32_t x1247; + uint32_t x1248; + uint32_t x1249; + uint32_t x1250; + uint32_t x1251; + uint32_t x1252; + uint32_t x1253; + uint32_t x1254; + uint32_t x1255; + uint32_t x1256; + uint32_t x1257; + fiat_p521_uint1 x1258; + uint32_t x1259; + fiat_p521_uint1 x1260; + uint32_t x1261; + fiat_p521_uint1 x1262; + uint32_t x1263; + fiat_p521_uint1 x1264; + uint32_t x1265; + fiat_p521_uint1 x1266; + uint32_t x1267; + fiat_p521_uint1 x1268; + uint32_t x1269; + fiat_p521_uint1 x1270; + uint32_t x1271; + fiat_p521_uint1 x1272; + uint32_t x1273; + fiat_p521_uint1 x1274; + uint32_t x1275; + fiat_p521_uint1 x1276; + uint32_t x1277; + fiat_p521_uint1 x1278; + uint32_t x1279; + fiat_p521_uint1 x1280; + uint32_t x1281; + fiat_p521_uint1 x1282; + uint32_t x1283; + fiat_p521_uint1 x1284; + uint32_t x1285; + fiat_p521_uint1 x1286; + uint32_t x1287; + fiat_p521_uint1 x1288; + uint32_t x1289; + uint32_t x1290; + fiat_p521_uint1 x1291; + uint32_t x1292; + fiat_p521_uint1 x1293; + uint32_t x1294; + fiat_p521_uint1 x1295; + uint32_t x1296; + fiat_p521_uint1 x1297; + uint32_t x1298; + fiat_p521_uint1 x1299; + uint32_t x1300; + fiat_p521_uint1 x1301; + uint32_t x1302; + fiat_p521_uint1 x1303; + uint32_t x1304; + fiat_p521_uint1 x1305; + uint32_t x1306; + fiat_p521_uint1 x1307; + uint32_t x1308; + fiat_p521_uint1 x1309; + uint32_t x1310; + fiat_p521_uint1 x1311; + uint32_t x1312; + fiat_p521_uint1 x1313; + uint32_t x1314; + fiat_p521_uint1 x1315; + uint32_t x1316; + fiat_p521_uint1 x1317; + uint32_t x1318; + fiat_p521_uint1 x1319; + uint32_t x1320; + fiat_p521_uint1 x1321; + uint32_t x1322; + fiat_p521_uint1 x1323; + uint32_t x1324; + fiat_p521_uint1 x1325; + uint32_t x1326; + uint32_t x1327; + uint32_t x1328; + uint32_t x1329; + uint32_t x1330; + uint32_t x1331; + uint32_t x1332; + uint32_t x1333; + uint32_t x1334; + uint32_t x1335; + uint32_t x1336; + uint32_t x1337; + uint32_t x1338; + uint32_t x1339; + uint32_t x1340; + uint32_t x1341; + uint32_t x1342; + uint32_t x1343; + uint32_t x1344; + uint32_t x1345; + uint32_t x1346; + uint32_t x1347; + uint32_t x1348; + uint32_t x1349; + uint32_t x1350; + uint32_t x1351; + uint32_t x1352; + uint32_t x1353; + uint32_t x1354; + uint32_t x1355; + uint32_t x1356; + uint32_t x1357; + uint32_t x1358; + uint32_t x1359; + uint32_t x1360; + fiat_p521_uint1 x1361; + uint32_t x1362; + fiat_p521_uint1 x1363; + uint32_t x1364; + fiat_p521_uint1 x1365; + uint32_t x1366; + fiat_p521_uint1 x1367; + uint32_t x1368; + fiat_p521_uint1 x1369; + uint32_t x1370; + fiat_p521_uint1 x1371; + uint32_t x1372; + fiat_p521_uint1 x1373; + uint32_t x1374; + fiat_p521_uint1 x1375; + uint32_t x1376; + fiat_p521_uint1 x1377; + uint32_t x1378; + fiat_p521_uint1 x1379; + uint32_t x1380; + fiat_p521_uint1 x1381; + uint32_t x1382; + fiat_p521_uint1 x1383; + uint32_t x1384; + fiat_p521_uint1 x1385; + uint32_t x1386; + fiat_p521_uint1 x1387; + uint32_t x1388; + fiat_p521_uint1 x1389; + uint32_t x1390; + fiat_p521_uint1 x1391; + uint32_t x1392; + uint32_t x1393; + fiat_p521_uint1 x1394; + uint32_t x1395; + fiat_p521_uint1 x1396; + uint32_t x1397; + fiat_p521_uint1 x1398; + uint32_t x1399; + fiat_p521_uint1 x1400; + uint32_t x1401; + fiat_p521_uint1 x1402; + uint32_t x1403; + fiat_p521_uint1 x1404; + uint32_t x1405; + fiat_p521_uint1 x1406; + uint32_t x1407; + fiat_p521_uint1 x1408; + uint32_t x1409; + fiat_p521_uint1 x1410; + uint32_t x1411; + fiat_p521_uint1 x1412; + uint32_t x1413; + fiat_p521_uint1 x1414; + uint32_t x1415; + fiat_p521_uint1 x1416; + uint32_t x1417; + fiat_p521_uint1 x1418; + uint32_t x1419; + fiat_p521_uint1 x1420; + uint32_t x1421; + fiat_p521_uint1 x1422; + uint32_t x1423; + fiat_p521_uint1 x1424; + uint32_t x1425; + fiat_p521_uint1 x1426; + uint32_t x1427; + fiat_p521_uint1 x1428; + uint32_t x1429; + uint32_t x1430; + uint32_t x1431; + uint32_t x1432; + uint32_t x1433; + uint32_t x1434; + uint32_t x1435; + uint32_t x1436; + uint32_t x1437; + uint32_t x1438; + uint32_t x1439; + uint32_t x1440; + uint32_t x1441; + uint32_t x1442; + uint32_t x1443; + uint32_t x1444; + uint32_t x1445; + uint32_t x1446; + uint32_t x1447; + uint32_t x1448; + uint32_t x1449; + uint32_t x1450; + uint32_t x1451; + uint32_t x1452; + uint32_t x1453; + uint32_t x1454; + uint32_t x1455; + uint32_t x1456; + uint32_t x1457; + uint32_t x1458; + uint32_t x1459; + uint32_t x1460; + uint32_t x1461; + uint32_t x1462; + uint32_t x1463; + uint32_t x1464; + fiat_p521_uint1 x1465; + uint32_t x1466; + fiat_p521_uint1 x1467; + uint32_t x1468; + fiat_p521_uint1 x1469; + uint32_t x1470; + fiat_p521_uint1 x1471; + uint32_t x1472; + fiat_p521_uint1 x1473; + uint32_t x1474; + fiat_p521_uint1 x1475; + uint32_t x1476; + fiat_p521_uint1 x1477; + uint32_t x1478; + fiat_p521_uint1 x1479; + uint32_t x1480; + fiat_p521_uint1 x1481; + uint32_t x1482; + fiat_p521_uint1 x1483; + uint32_t x1484; + fiat_p521_uint1 x1485; + uint32_t x1486; + fiat_p521_uint1 x1487; + uint32_t x1488; + fiat_p521_uint1 x1489; + uint32_t x1490; + fiat_p521_uint1 x1491; + uint32_t x1492; + fiat_p521_uint1 x1493; + uint32_t x1494; + fiat_p521_uint1 x1495; + uint32_t x1496; + uint32_t x1497; + fiat_p521_uint1 x1498; + uint32_t x1499; + fiat_p521_uint1 x1500; + uint32_t x1501; + fiat_p521_uint1 x1502; + uint32_t x1503; + fiat_p521_uint1 x1504; + uint32_t x1505; + fiat_p521_uint1 x1506; + uint32_t x1507; + fiat_p521_uint1 x1508; + uint32_t x1509; + fiat_p521_uint1 x1510; + uint32_t x1511; + fiat_p521_uint1 x1512; + uint32_t x1513; + fiat_p521_uint1 x1514; + uint32_t x1515; + fiat_p521_uint1 x1516; + uint32_t x1517; + fiat_p521_uint1 x1518; + uint32_t x1519; + fiat_p521_uint1 x1520; + uint32_t x1521; + fiat_p521_uint1 x1522; + uint32_t x1523; + fiat_p521_uint1 x1524; + uint32_t x1525; + fiat_p521_uint1 x1526; + uint32_t x1527; + fiat_p521_uint1 x1528; + uint32_t x1529; + fiat_p521_uint1 x1530; + uint32_t x1531; + fiat_p521_uint1 x1532; + uint32_t x1533; + uint32_t x1534; + uint32_t x1535; + uint32_t x1536; + uint32_t x1537; + uint32_t x1538; + uint32_t x1539; + uint32_t x1540; + uint32_t x1541; + uint32_t x1542; + uint32_t x1543; + uint32_t x1544; + uint32_t x1545; + uint32_t x1546; + uint32_t x1547; + uint32_t x1548; + uint32_t x1549; + uint32_t x1550; + uint32_t x1551; + uint32_t x1552; + uint32_t x1553; + uint32_t x1554; + uint32_t x1555; + uint32_t x1556; + uint32_t x1557; + uint32_t x1558; + uint32_t x1559; + uint32_t x1560; + uint32_t x1561; + uint32_t x1562; + uint32_t x1563; + uint32_t x1564; + uint32_t x1565; + uint32_t x1566; + uint32_t x1567; + fiat_p521_uint1 x1568; + uint32_t x1569; + fiat_p521_uint1 x1570; + uint32_t x1571; + fiat_p521_uint1 x1572; + uint32_t x1573; + fiat_p521_uint1 x1574; + uint32_t x1575; + fiat_p521_uint1 x1576; + uint32_t x1577; + fiat_p521_uint1 x1578; + uint32_t x1579; + fiat_p521_uint1 x1580; + uint32_t x1581; + fiat_p521_uint1 x1582; + uint32_t x1583; + fiat_p521_uint1 x1584; + uint32_t x1585; + fiat_p521_uint1 x1586; + uint32_t x1587; + fiat_p521_uint1 x1588; + uint32_t x1589; + fiat_p521_uint1 x1590; + uint32_t x1591; + fiat_p521_uint1 x1592; + uint32_t x1593; + fiat_p521_uint1 x1594; + uint32_t x1595; + fiat_p521_uint1 x1596; + uint32_t x1597; + fiat_p521_uint1 x1598; + uint32_t x1599; + uint32_t x1600; + fiat_p521_uint1 x1601; + uint32_t x1602; + fiat_p521_uint1 x1603; + uint32_t x1604; + fiat_p521_uint1 x1605; + uint32_t x1606; + fiat_p521_uint1 x1607; + uint32_t x1608; + fiat_p521_uint1 x1609; + uint32_t x1610; + fiat_p521_uint1 x1611; + uint32_t x1612; + fiat_p521_uint1 x1613; + uint32_t x1614; + fiat_p521_uint1 x1615; + uint32_t x1616; + fiat_p521_uint1 x1617; + uint32_t x1618; + fiat_p521_uint1 x1619; + uint32_t x1620; + fiat_p521_uint1 x1621; + uint32_t x1622; + fiat_p521_uint1 x1623; + uint32_t x1624; + fiat_p521_uint1 x1625; + uint32_t x1626; + fiat_p521_uint1 x1627; + uint32_t x1628; + fiat_p521_uint1 x1629; + uint32_t x1630; + fiat_p521_uint1 x1631; + uint32_t x1632; + fiat_p521_uint1 x1633; + uint32_t x1634; + fiat_p521_uint1 x1635; + uint32_t x1636; + uint32_t x1637; + uint32_t x1638; + uint32_t x1639; + uint32_t x1640; + uint32_t x1641; + uint32_t x1642; + uint32_t x1643; + uint32_t x1644; + uint32_t x1645; + uint32_t x1646; + uint32_t x1647; + uint32_t x1648; + uint32_t x1649; + uint32_t x1650; + uint32_t x1651; + uint32_t x1652; + uint32_t x1653; + uint32_t x1654; + uint32_t x1655; + uint32_t x1656; + uint32_t x1657; + uint32_t x1658; + uint32_t x1659; + uint32_t x1660; + uint32_t x1661; + uint32_t x1662; + uint32_t x1663; + uint32_t x1664; + uint32_t x1665; + uint32_t x1666; + uint32_t x1667; + uint32_t x1668; + uint32_t x1669; + uint32_t x1670; + uint32_t x1671; + fiat_p521_uint1 x1672; + uint32_t x1673; + fiat_p521_uint1 x1674; + uint32_t x1675; + fiat_p521_uint1 x1676; + uint32_t x1677; + fiat_p521_uint1 x1678; + uint32_t x1679; + fiat_p521_uint1 x1680; + uint32_t x1681; + fiat_p521_uint1 x1682; + uint32_t x1683; + fiat_p521_uint1 x1684; + uint32_t x1685; + fiat_p521_uint1 x1686; + uint32_t x1687; + fiat_p521_uint1 x1688; + uint32_t x1689; + fiat_p521_uint1 x1690; + uint32_t x1691; + fiat_p521_uint1 x1692; + uint32_t x1693; + fiat_p521_uint1 x1694; + uint32_t x1695; + fiat_p521_uint1 x1696; + uint32_t x1697; + fiat_p521_uint1 x1698; + uint32_t x1699; + fiat_p521_uint1 x1700; + uint32_t x1701; + fiat_p521_uint1 x1702; + uint32_t x1703; + uint32_t x1704; + fiat_p521_uint1 x1705; + uint32_t x1706; + fiat_p521_uint1 x1707; + uint32_t x1708; + fiat_p521_uint1 x1709; + uint32_t x1710; + fiat_p521_uint1 x1711; + uint32_t x1712; + fiat_p521_uint1 x1713; + uint32_t x1714; + fiat_p521_uint1 x1715; + uint32_t x1716; + fiat_p521_uint1 x1717; + uint32_t x1718; + fiat_p521_uint1 x1719; + uint32_t x1720; + fiat_p521_uint1 x1721; + uint32_t x1722; + fiat_p521_uint1 x1723; + uint32_t x1724; + fiat_p521_uint1 x1725; + uint32_t x1726; + fiat_p521_uint1 x1727; + uint32_t x1728; + fiat_p521_uint1 x1729; + uint32_t x1730; + fiat_p521_uint1 x1731; + uint32_t x1732; + fiat_p521_uint1 x1733; + uint32_t x1734; + fiat_p521_uint1 x1735; + uint32_t x1736; + fiat_p521_uint1 x1737; + uint32_t x1738; + fiat_p521_uint1 x1739; + uint32_t x1740; + uint32_t x1741; + uint32_t x1742; + uint32_t x1743; + uint32_t x1744; + uint32_t x1745; + uint32_t x1746; + uint32_t x1747; + uint32_t x1748; + uint32_t x1749; + uint32_t x1750; + uint32_t x1751; + uint32_t x1752; + uint32_t x1753; + uint32_t x1754; + uint32_t x1755; + uint32_t x1756; + uint32_t x1757; + uint32_t x1758; + uint32_t x1759; + uint32_t x1760; + uint32_t x1761; + uint32_t x1762; + uint32_t x1763; + uint32_t x1764; + uint32_t x1765; + uint32_t x1766; + uint32_t x1767; + uint32_t x1768; + uint32_t x1769; + uint32_t x1770; + uint32_t x1771; + uint32_t x1772; + uint32_t x1773; + uint32_t x1774; + fiat_p521_uint1 x1775; + uint32_t x1776; + fiat_p521_uint1 x1777; + uint32_t x1778; + fiat_p521_uint1 x1779; + uint32_t x1780; + fiat_p521_uint1 x1781; + uint32_t x1782; + fiat_p521_uint1 x1783; + uint32_t x1784; + fiat_p521_uint1 x1785; + uint32_t x1786; + fiat_p521_uint1 x1787; + uint32_t x1788; + fiat_p521_uint1 x1789; + uint32_t x1790; + fiat_p521_uint1 x1791; + uint32_t x1792; + fiat_p521_uint1 x1793; + uint32_t x1794; + fiat_p521_uint1 x1795; + uint32_t x1796; + fiat_p521_uint1 x1797; + uint32_t x1798; + fiat_p521_uint1 x1799; + uint32_t x1800; + fiat_p521_uint1 x1801; + uint32_t x1802; + fiat_p521_uint1 x1803; + uint32_t x1804; + fiat_p521_uint1 x1805; + uint32_t x1806; + uint32_t x1807; + fiat_p521_uint1 x1808; + uint32_t x1809; + fiat_p521_uint1 x1810; + uint32_t x1811; + fiat_p521_uint1 x1812; + uint32_t x1813; + fiat_p521_uint1 x1814; + uint32_t x1815; + fiat_p521_uint1 x1816; + uint32_t x1817; + fiat_p521_uint1 x1818; + uint32_t x1819; + fiat_p521_uint1 x1820; + uint32_t x1821; + fiat_p521_uint1 x1822; + uint32_t x1823; + fiat_p521_uint1 x1824; + uint32_t x1825; + fiat_p521_uint1 x1826; + uint32_t x1827; + fiat_p521_uint1 x1828; + uint32_t x1829; + fiat_p521_uint1 x1830; + uint32_t x1831; + fiat_p521_uint1 x1832; + uint32_t x1833; + fiat_p521_uint1 x1834; + uint32_t x1835; + fiat_p521_uint1 x1836; + uint32_t x1837; + fiat_p521_uint1 x1838; + uint32_t x1839; + fiat_p521_uint1 x1840; + uint32_t x1841; + fiat_p521_uint1 x1842; + uint32_t x1843; + uint32_t x1844; + uint32_t x1845; + uint32_t x1846; + uint32_t x1847; + uint32_t x1848; + uint32_t x1849; + uint32_t x1850; + uint32_t x1851; + uint32_t x1852; + uint32_t x1853; + uint32_t x1854; + uint32_t x1855; + uint32_t x1856; + uint32_t x1857; + uint32_t x1858; + uint32_t x1859; + uint32_t x1860; + uint32_t x1861; + uint32_t x1862; + uint32_t x1863; + uint32_t x1864; + uint32_t x1865; + uint32_t x1866; + uint32_t x1867; + uint32_t x1868; + uint32_t x1869; + uint32_t x1870; + uint32_t x1871; + uint32_t x1872; + uint32_t x1873; + uint32_t x1874; + uint32_t x1875; + uint32_t x1876; + uint32_t x1877; + uint32_t x1878; + fiat_p521_uint1 x1879; + uint32_t x1880; + fiat_p521_uint1 x1881; + uint32_t x1882; + fiat_p521_uint1 x1883; + uint32_t x1884; + fiat_p521_uint1 x1885; + uint32_t x1886; + fiat_p521_uint1 x1887; + uint32_t x1888; + fiat_p521_uint1 x1889; + uint32_t x1890; + fiat_p521_uint1 x1891; + uint32_t x1892; + fiat_p521_uint1 x1893; + uint32_t x1894; + fiat_p521_uint1 x1895; + uint32_t x1896; + fiat_p521_uint1 x1897; + uint32_t x1898; + fiat_p521_uint1 x1899; + uint32_t x1900; + fiat_p521_uint1 x1901; + uint32_t x1902; + fiat_p521_uint1 x1903; + uint32_t x1904; + fiat_p521_uint1 x1905; + uint32_t x1906; + fiat_p521_uint1 x1907; + uint32_t x1908; + fiat_p521_uint1 x1909; + uint32_t x1910; + uint32_t x1911; + fiat_p521_uint1 x1912; + uint32_t x1913; + fiat_p521_uint1 x1914; + uint32_t x1915; + fiat_p521_uint1 x1916; + uint32_t x1917; + fiat_p521_uint1 x1918; + uint32_t x1919; + fiat_p521_uint1 x1920; + uint32_t x1921; + fiat_p521_uint1 x1922; + uint32_t x1923; + fiat_p521_uint1 x1924; + uint32_t x1925; + fiat_p521_uint1 x1926; + uint32_t x1927; + fiat_p521_uint1 x1928; + uint32_t x1929; + fiat_p521_uint1 x1930; + uint32_t x1931; + fiat_p521_uint1 x1932; + uint32_t x1933; + fiat_p521_uint1 x1934; + uint32_t x1935; + fiat_p521_uint1 x1936; + uint32_t x1937; + fiat_p521_uint1 x1938; + uint32_t x1939; + fiat_p521_uint1 x1940; + uint32_t x1941; + fiat_p521_uint1 x1942; + uint32_t x1943; + fiat_p521_uint1 x1944; + uint32_t x1945; + fiat_p521_uint1 x1946; + uint32_t x1947; + uint32_t x1948; + uint32_t x1949; + uint32_t x1950; + uint32_t x1951; + uint32_t x1952; + uint32_t x1953; + uint32_t x1954; + uint32_t x1955; + uint32_t x1956; + uint32_t x1957; + uint32_t x1958; + uint32_t x1959; + uint32_t x1960; + uint32_t x1961; + uint32_t x1962; + uint32_t x1963; + uint32_t x1964; + uint32_t x1965; + uint32_t x1966; + uint32_t x1967; + uint32_t x1968; + uint32_t x1969; + uint32_t x1970; + uint32_t x1971; + uint32_t x1972; + uint32_t x1973; + uint32_t x1974; + uint32_t x1975; + uint32_t x1976; + uint32_t x1977; + uint32_t x1978; + uint32_t x1979; + uint32_t x1980; + uint32_t x1981; + fiat_p521_uint1 x1982; + uint32_t x1983; + fiat_p521_uint1 x1984; + uint32_t x1985; + fiat_p521_uint1 x1986; + uint32_t x1987; + fiat_p521_uint1 x1988; + uint32_t x1989; + fiat_p521_uint1 x1990; + uint32_t x1991; + fiat_p521_uint1 x1992; + uint32_t x1993; + fiat_p521_uint1 x1994; + uint32_t x1995; + fiat_p521_uint1 x1996; + uint32_t x1997; + fiat_p521_uint1 x1998; + uint32_t x1999; + fiat_p521_uint1 x2000; + uint32_t x2001; + fiat_p521_uint1 x2002; + uint32_t x2003; + fiat_p521_uint1 x2004; + uint32_t x2005; + fiat_p521_uint1 x2006; + uint32_t x2007; + fiat_p521_uint1 x2008; + uint32_t x2009; + fiat_p521_uint1 x2010; + uint32_t x2011; + fiat_p521_uint1 x2012; + uint32_t x2013; + uint32_t x2014; + fiat_p521_uint1 x2015; + uint32_t x2016; + fiat_p521_uint1 x2017; + uint32_t x2018; + fiat_p521_uint1 x2019; + uint32_t x2020; + fiat_p521_uint1 x2021; + uint32_t x2022; + fiat_p521_uint1 x2023; + uint32_t x2024; + fiat_p521_uint1 x2025; + uint32_t x2026; + fiat_p521_uint1 x2027; + uint32_t x2028; + fiat_p521_uint1 x2029; + uint32_t x2030; + fiat_p521_uint1 x2031; + uint32_t x2032; + fiat_p521_uint1 x2033; + uint32_t x2034; + fiat_p521_uint1 x2035; + uint32_t x2036; + fiat_p521_uint1 x2037; + uint32_t x2038; + fiat_p521_uint1 x2039; + uint32_t x2040; + fiat_p521_uint1 x2041; + uint32_t x2042; + fiat_p521_uint1 x2043; + uint32_t x2044; + fiat_p521_uint1 x2045; + uint32_t x2046; + fiat_p521_uint1 x2047; + uint32_t x2048; + fiat_p521_uint1 x2049; + uint32_t x2050; + uint32_t x2051; + uint32_t x2052; + uint32_t x2053; + uint32_t x2054; + uint32_t x2055; + uint32_t x2056; + uint32_t x2057; + uint32_t x2058; + uint32_t x2059; + uint32_t x2060; + uint32_t x2061; + uint32_t x2062; + uint32_t x2063; + uint32_t x2064; + uint32_t x2065; + uint32_t x2066; + uint32_t x2067; + uint32_t x2068; + uint32_t x2069; + uint32_t x2070; + uint32_t x2071; + uint32_t x2072; + uint32_t x2073; + uint32_t x2074; + uint32_t x2075; + uint32_t x2076; + uint32_t x2077; + uint32_t x2078; + uint32_t x2079; + uint32_t x2080; + uint32_t x2081; + uint32_t x2082; + uint32_t x2083; + uint32_t x2084; + uint32_t x2085; + fiat_p521_uint1 x2086; + uint32_t x2087; + fiat_p521_uint1 x2088; + uint32_t x2089; + fiat_p521_uint1 x2090; + uint32_t x2091; + fiat_p521_uint1 x2092; + uint32_t x2093; + fiat_p521_uint1 x2094; + uint32_t x2095; + fiat_p521_uint1 x2096; + uint32_t x2097; + fiat_p521_uint1 x2098; + uint32_t x2099; + fiat_p521_uint1 x2100; + uint32_t x2101; + fiat_p521_uint1 x2102; + uint32_t x2103; + fiat_p521_uint1 x2104; + uint32_t x2105; + fiat_p521_uint1 x2106; + uint32_t x2107; + fiat_p521_uint1 x2108; + uint32_t x2109; + fiat_p521_uint1 x2110; + uint32_t x2111; + fiat_p521_uint1 x2112; + uint32_t x2113; + fiat_p521_uint1 x2114; + uint32_t x2115; + fiat_p521_uint1 x2116; + uint32_t x2117; + uint32_t x2118; + fiat_p521_uint1 x2119; + uint32_t x2120; + fiat_p521_uint1 x2121; + uint32_t x2122; + fiat_p521_uint1 x2123; + uint32_t x2124; + fiat_p521_uint1 x2125; + uint32_t x2126; + fiat_p521_uint1 x2127; + uint32_t x2128; + fiat_p521_uint1 x2129; + uint32_t x2130; + fiat_p521_uint1 x2131; + uint32_t x2132; + fiat_p521_uint1 x2133; + uint32_t x2134; + fiat_p521_uint1 x2135; + uint32_t x2136; + fiat_p521_uint1 x2137; + uint32_t x2138; + fiat_p521_uint1 x2139; + uint32_t x2140; + fiat_p521_uint1 x2141; + uint32_t x2142; + fiat_p521_uint1 x2143; + uint32_t x2144; + fiat_p521_uint1 x2145; + uint32_t x2146; + fiat_p521_uint1 x2147; + uint32_t x2148; + fiat_p521_uint1 x2149; + uint32_t x2150; + fiat_p521_uint1 x2151; + uint32_t x2152; + fiat_p521_uint1 x2153; + uint32_t x2154; + uint32_t x2155; + uint32_t x2156; + uint32_t x2157; + uint32_t x2158; + uint32_t x2159; + uint32_t x2160; + uint32_t x2161; + uint32_t x2162; + uint32_t x2163; + uint32_t x2164; + uint32_t x2165; + uint32_t x2166; + uint32_t x2167; + uint32_t x2168; + uint32_t x2169; + uint32_t x2170; + uint32_t x2171; + uint32_t x2172; + uint32_t x2173; + uint32_t x2174; + uint32_t x2175; + uint32_t x2176; + uint32_t x2177; + uint32_t x2178; + uint32_t x2179; + uint32_t x2180; + uint32_t x2181; + uint32_t x2182; + uint32_t x2183; + uint32_t x2184; + uint32_t x2185; + uint32_t x2186; + uint32_t x2187; + uint32_t x2188; + fiat_p521_uint1 x2189; + uint32_t x2190; + fiat_p521_uint1 x2191; + uint32_t x2192; + fiat_p521_uint1 x2193; + uint32_t x2194; + fiat_p521_uint1 x2195; + uint32_t x2196; + fiat_p521_uint1 x2197; + uint32_t x2198; + fiat_p521_uint1 x2199; + uint32_t x2200; + fiat_p521_uint1 x2201; + uint32_t x2202; + fiat_p521_uint1 x2203; + uint32_t x2204; + fiat_p521_uint1 x2205; + uint32_t x2206; + fiat_p521_uint1 x2207; + uint32_t x2208; + fiat_p521_uint1 x2209; + uint32_t x2210; + fiat_p521_uint1 x2211; + uint32_t x2212; + fiat_p521_uint1 x2213; + uint32_t x2214; + fiat_p521_uint1 x2215; + uint32_t x2216; + fiat_p521_uint1 x2217; + uint32_t x2218; + fiat_p521_uint1 x2219; + uint32_t x2220; + uint32_t x2221; + fiat_p521_uint1 x2222; + uint32_t x2223; + fiat_p521_uint1 x2224; + uint32_t x2225; + fiat_p521_uint1 x2226; + uint32_t x2227; + fiat_p521_uint1 x2228; + uint32_t x2229; + fiat_p521_uint1 x2230; + uint32_t x2231; + fiat_p521_uint1 x2232; + uint32_t x2233; + fiat_p521_uint1 x2234; + uint32_t x2235; + fiat_p521_uint1 x2236; + uint32_t x2237; + fiat_p521_uint1 x2238; + uint32_t x2239; + fiat_p521_uint1 x2240; + uint32_t x2241; + fiat_p521_uint1 x2242; + uint32_t x2243; + fiat_p521_uint1 x2244; + uint32_t x2245; + fiat_p521_uint1 x2246; + uint32_t x2247; + fiat_p521_uint1 x2248; + uint32_t x2249; + fiat_p521_uint1 x2250; + uint32_t x2251; + fiat_p521_uint1 x2252; + uint32_t x2253; + fiat_p521_uint1 x2254; + uint32_t x2255; + fiat_p521_uint1 x2256; + uint32_t x2257; + uint32_t x2258; + uint32_t x2259; + uint32_t x2260; + uint32_t x2261; + uint32_t x2262; + uint32_t x2263; + uint32_t x2264; + uint32_t x2265; + uint32_t x2266; + uint32_t x2267; + uint32_t x2268; + uint32_t x2269; + uint32_t x2270; + uint32_t x2271; + uint32_t x2272; + uint32_t x2273; + uint32_t x2274; + uint32_t x2275; + uint32_t x2276; + uint32_t x2277; + uint32_t x2278; + uint32_t x2279; + uint32_t x2280; + uint32_t x2281; + uint32_t x2282; + uint32_t x2283; + uint32_t x2284; + uint32_t x2285; + uint32_t x2286; + uint32_t x2287; + uint32_t x2288; + uint32_t x2289; + uint32_t x2290; + uint32_t x2291; + uint32_t x2292; + fiat_p521_uint1 x2293; + uint32_t x2294; + fiat_p521_uint1 x2295; + uint32_t x2296; + fiat_p521_uint1 x2297; + uint32_t x2298; + fiat_p521_uint1 x2299; + uint32_t x2300; + fiat_p521_uint1 x2301; + uint32_t x2302; + fiat_p521_uint1 x2303; + uint32_t x2304; + fiat_p521_uint1 x2305; + uint32_t x2306; + fiat_p521_uint1 x2307; + uint32_t x2308; + fiat_p521_uint1 x2309; + uint32_t x2310; + fiat_p521_uint1 x2311; + uint32_t x2312; + fiat_p521_uint1 x2313; + uint32_t x2314; + fiat_p521_uint1 x2315; + uint32_t x2316; + fiat_p521_uint1 x2317; + uint32_t x2318; + fiat_p521_uint1 x2319; + uint32_t x2320; + fiat_p521_uint1 x2321; + uint32_t x2322; + fiat_p521_uint1 x2323; + uint32_t x2324; + uint32_t x2325; + fiat_p521_uint1 x2326; + uint32_t x2327; + fiat_p521_uint1 x2328; + uint32_t x2329; + fiat_p521_uint1 x2330; + uint32_t x2331; + fiat_p521_uint1 x2332; + uint32_t x2333; + fiat_p521_uint1 x2334; + uint32_t x2335; + fiat_p521_uint1 x2336; + uint32_t x2337; + fiat_p521_uint1 x2338; + uint32_t x2339; + fiat_p521_uint1 x2340; + uint32_t x2341; + fiat_p521_uint1 x2342; + uint32_t x2343; + fiat_p521_uint1 x2344; + uint32_t x2345; + fiat_p521_uint1 x2346; + uint32_t x2347; + fiat_p521_uint1 x2348; + uint32_t x2349; + fiat_p521_uint1 x2350; + uint32_t x2351; + fiat_p521_uint1 x2352; + uint32_t x2353; + fiat_p521_uint1 x2354; + uint32_t x2355; + fiat_p521_uint1 x2356; + uint32_t x2357; + fiat_p521_uint1 x2358; + uint32_t x2359; + fiat_p521_uint1 x2360; + uint32_t x2361; + uint32_t x2362; + uint32_t x2363; + uint32_t x2364; + uint32_t x2365; + uint32_t x2366; + uint32_t x2367; + uint32_t x2368; + uint32_t x2369; + uint32_t x2370; + uint32_t x2371; + uint32_t x2372; + uint32_t x2373; + uint32_t x2374; + uint32_t x2375; + uint32_t x2376; + uint32_t x2377; + uint32_t x2378; + uint32_t x2379; + uint32_t x2380; + uint32_t x2381; + uint32_t x2382; + uint32_t x2383; + uint32_t x2384; + uint32_t x2385; + uint32_t x2386; + uint32_t x2387; + uint32_t x2388; + uint32_t x2389; + uint32_t x2390; + uint32_t x2391; + uint32_t x2392; + uint32_t x2393; + uint32_t x2394; + uint32_t x2395; + fiat_p521_uint1 x2396; + uint32_t x2397; + fiat_p521_uint1 x2398; + uint32_t x2399; + fiat_p521_uint1 x2400; + uint32_t x2401; + fiat_p521_uint1 x2402; + uint32_t x2403; + fiat_p521_uint1 x2404; + uint32_t x2405; + fiat_p521_uint1 x2406; + uint32_t x2407; + fiat_p521_uint1 x2408; + uint32_t x2409; + fiat_p521_uint1 x2410; + uint32_t x2411; + fiat_p521_uint1 x2412; + uint32_t x2413; + fiat_p521_uint1 x2414; + uint32_t x2415; + fiat_p521_uint1 x2416; + uint32_t x2417; + fiat_p521_uint1 x2418; + uint32_t x2419; + fiat_p521_uint1 x2420; + uint32_t x2421; + fiat_p521_uint1 x2422; + uint32_t x2423; + fiat_p521_uint1 x2424; + uint32_t x2425; + fiat_p521_uint1 x2426; + uint32_t x2427; + uint32_t x2428; + fiat_p521_uint1 x2429; + uint32_t x2430; + fiat_p521_uint1 x2431; + uint32_t x2432; + fiat_p521_uint1 x2433; + uint32_t x2434; + fiat_p521_uint1 x2435; + uint32_t x2436; + fiat_p521_uint1 x2437; + uint32_t x2438; + fiat_p521_uint1 x2439; + uint32_t x2440; + fiat_p521_uint1 x2441; + uint32_t x2442; + fiat_p521_uint1 x2443; + uint32_t x2444; + fiat_p521_uint1 x2445; + uint32_t x2446; + fiat_p521_uint1 x2447; + uint32_t x2448; + fiat_p521_uint1 x2449; + uint32_t x2450; + fiat_p521_uint1 x2451; + uint32_t x2452; + fiat_p521_uint1 x2453; + uint32_t x2454; + fiat_p521_uint1 x2455; + uint32_t x2456; + fiat_p521_uint1 x2457; + uint32_t x2458; + fiat_p521_uint1 x2459; + uint32_t x2460; + fiat_p521_uint1 x2461; + uint32_t x2462; + fiat_p521_uint1 x2463; + uint32_t x2464; + uint32_t x2465; + uint32_t x2466; + uint32_t x2467; + uint32_t x2468; + uint32_t x2469; + uint32_t x2470; + uint32_t x2471; + uint32_t x2472; + uint32_t x2473; + uint32_t x2474; + uint32_t x2475; + uint32_t x2476; + uint32_t x2477; + uint32_t x2478; + uint32_t x2479; + uint32_t x2480; + uint32_t x2481; + uint32_t x2482; + uint32_t x2483; + uint32_t x2484; + uint32_t x2485; + uint32_t x2486; + uint32_t x2487; + uint32_t x2488; + uint32_t x2489; + uint32_t x2490; + uint32_t x2491; + uint32_t x2492; + uint32_t x2493; + uint32_t x2494; + uint32_t x2495; + uint32_t x2496; + uint32_t x2497; + uint32_t x2498; + uint32_t x2499; + fiat_p521_uint1 x2500; + uint32_t x2501; + fiat_p521_uint1 x2502; + uint32_t x2503; + fiat_p521_uint1 x2504; + uint32_t x2505; + fiat_p521_uint1 x2506; + uint32_t x2507; + fiat_p521_uint1 x2508; + uint32_t x2509; + fiat_p521_uint1 x2510; + uint32_t x2511; + fiat_p521_uint1 x2512; + uint32_t x2513; + fiat_p521_uint1 x2514; + uint32_t x2515; + fiat_p521_uint1 x2516; + uint32_t x2517; + fiat_p521_uint1 x2518; + uint32_t x2519; + fiat_p521_uint1 x2520; + uint32_t x2521; + fiat_p521_uint1 x2522; + uint32_t x2523; + fiat_p521_uint1 x2524; + uint32_t x2525; + fiat_p521_uint1 x2526; + uint32_t x2527; + fiat_p521_uint1 x2528; + uint32_t x2529; + fiat_p521_uint1 x2530; + uint32_t x2531; + uint32_t x2532; + fiat_p521_uint1 x2533; + uint32_t x2534; + fiat_p521_uint1 x2535; + uint32_t x2536; + fiat_p521_uint1 x2537; + uint32_t x2538; + fiat_p521_uint1 x2539; + uint32_t x2540; + fiat_p521_uint1 x2541; + uint32_t x2542; + fiat_p521_uint1 x2543; + uint32_t x2544; + fiat_p521_uint1 x2545; + uint32_t x2546; + fiat_p521_uint1 x2547; + uint32_t x2548; + fiat_p521_uint1 x2549; + uint32_t x2550; + fiat_p521_uint1 x2551; + uint32_t x2552; + fiat_p521_uint1 x2553; + uint32_t x2554; + fiat_p521_uint1 x2555; + uint32_t x2556; + fiat_p521_uint1 x2557; + uint32_t x2558; + fiat_p521_uint1 x2559; + uint32_t x2560; + fiat_p521_uint1 x2561; + uint32_t x2562; + fiat_p521_uint1 x2563; + uint32_t x2564; + fiat_p521_uint1 x2565; + uint32_t x2566; + fiat_p521_uint1 x2567; + uint32_t x2568; + uint32_t x2569; + uint32_t x2570; + uint32_t x2571; + uint32_t x2572; + uint32_t x2573; + uint32_t x2574; + uint32_t x2575; + uint32_t x2576; + uint32_t x2577; + uint32_t x2578; + uint32_t x2579; + uint32_t x2580; + uint32_t x2581; + uint32_t x2582; + uint32_t x2583; + uint32_t x2584; + uint32_t x2585; + uint32_t x2586; + uint32_t x2587; + uint32_t x2588; + uint32_t x2589; + uint32_t x2590; + uint32_t x2591; + uint32_t x2592; + uint32_t x2593; + uint32_t x2594; + uint32_t x2595; + uint32_t x2596; + uint32_t x2597; + uint32_t x2598; + uint32_t x2599; + uint32_t x2600; + uint32_t x2601; + uint32_t x2602; + fiat_p521_uint1 x2603; + uint32_t x2604; + fiat_p521_uint1 x2605; + uint32_t x2606; + fiat_p521_uint1 x2607; + uint32_t x2608; + fiat_p521_uint1 x2609; + uint32_t x2610; + fiat_p521_uint1 x2611; + uint32_t x2612; + fiat_p521_uint1 x2613; + uint32_t x2614; + fiat_p521_uint1 x2615; + uint32_t x2616; + fiat_p521_uint1 x2617; + uint32_t x2618; + fiat_p521_uint1 x2619; + uint32_t x2620; + fiat_p521_uint1 x2621; + uint32_t x2622; + fiat_p521_uint1 x2623; + uint32_t x2624; + fiat_p521_uint1 x2625; + uint32_t x2626; + fiat_p521_uint1 x2627; + uint32_t x2628; + fiat_p521_uint1 x2629; + uint32_t x2630; + fiat_p521_uint1 x2631; + uint32_t x2632; + fiat_p521_uint1 x2633; + uint32_t x2634; + uint32_t x2635; + fiat_p521_uint1 x2636; + uint32_t x2637; + fiat_p521_uint1 x2638; + uint32_t x2639; + fiat_p521_uint1 x2640; + uint32_t x2641; + fiat_p521_uint1 x2642; + uint32_t x2643; + fiat_p521_uint1 x2644; + uint32_t x2645; + fiat_p521_uint1 x2646; + uint32_t x2647; + fiat_p521_uint1 x2648; + uint32_t x2649; + fiat_p521_uint1 x2650; + uint32_t x2651; + fiat_p521_uint1 x2652; + uint32_t x2653; + fiat_p521_uint1 x2654; + uint32_t x2655; + fiat_p521_uint1 x2656; + uint32_t x2657; + fiat_p521_uint1 x2658; + uint32_t x2659; + fiat_p521_uint1 x2660; + uint32_t x2661; + fiat_p521_uint1 x2662; + uint32_t x2663; + fiat_p521_uint1 x2664; + uint32_t x2665; + fiat_p521_uint1 x2666; + uint32_t x2667; + fiat_p521_uint1 x2668; + uint32_t x2669; + fiat_p521_uint1 x2670; + uint32_t x2671; + uint32_t x2672; + uint32_t x2673; + uint32_t x2674; + uint32_t x2675; + uint32_t x2676; + uint32_t x2677; + uint32_t x2678; + uint32_t x2679; + uint32_t x2680; + uint32_t x2681; + uint32_t x2682; + uint32_t x2683; + uint32_t x2684; + uint32_t x2685; + uint32_t x2686; + uint32_t x2687; + uint32_t x2688; + uint32_t x2689; + uint32_t x2690; + uint32_t x2691; + uint32_t x2692; + uint32_t x2693; + uint32_t x2694; + uint32_t x2695; + uint32_t x2696; + uint32_t x2697; + uint32_t x2698; + uint32_t x2699; + uint32_t x2700; + uint32_t x2701; + uint32_t x2702; + uint32_t x2703; + uint32_t x2704; + uint32_t x2705; + uint32_t x2706; + fiat_p521_uint1 x2707; + uint32_t x2708; + fiat_p521_uint1 x2709; + uint32_t x2710; + fiat_p521_uint1 x2711; + uint32_t x2712; + fiat_p521_uint1 x2713; + uint32_t x2714; + fiat_p521_uint1 x2715; + uint32_t x2716; + fiat_p521_uint1 x2717; + uint32_t x2718; + fiat_p521_uint1 x2719; + uint32_t x2720; + fiat_p521_uint1 x2721; + uint32_t x2722; + fiat_p521_uint1 x2723; + uint32_t x2724; + fiat_p521_uint1 x2725; + uint32_t x2726; + fiat_p521_uint1 x2727; + uint32_t x2728; + fiat_p521_uint1 x2729; + uint32_t x2730; + fiat_p521_uint1 x2731; + uint32_t x2732; + fiat_p521_uint1 x2733; + uint32_t x2734; + fiat_p521_uint1 x2735; + uint32_t x2736; + fiat_p521_uint1 x2737; + uint32_t x2738; + uint32_t x2739; + fiat_p521_uint1 x2740; + uint32_t x2741; + fiat_p521_uint1 x2742; + uint32_t x2743; + fiat_p521_uint1 x2744; + uint32_t x2745; + fiat_p521_uint1 x2746; + uint32_t x2747; + fiat_p521_uint1 x2748; + uint32_t x2749; + fiat_p521_uint1 x2750; + uint32_t x2751; + fiat_p521_uint1 x2752; + uint32_t x2753; + fiat_p521_uint1 x2754; + uint32_t x2755; + fiat_p521_uint1 x2756; + uint32_t x2757; + fiat_p521_uint1 x2758; + uint32_t x2759; + fiat_p521_uint1 x2760; + uint32_t x2761; + fiat_p521_uint1 x2762; + uint32_t x2763; + fiat_p521_uint1 x2764; + uint32_t x2765; + fiat_p521_uint1 x2766; + uint32_t x2767; + fiat_p521_uint1 x2768; + uint32_t x2769; + fiat_p521_uint1 x2770; + uint32_t x2771; + fiat_p521_uint1 x2772; + uint32_t x2773; + fiat_p521_uint1 x2774; + uint32_t x2775; + uint32_t x2776; + uint32_t x2777; + uint32_t x2778; + uint32_t x2779; + uint32_t x2780; + uint32_t x2781; + uint32_t x2782; + uint32_t x2783; + uint32_t x2784; + uint32_t x2785; + uint32_t x2786; + uint32_t x2787; + uint32_t x2788; + uint32_t x2789; + uint32_t x2790; + uint32_t x2791; + uint32_t x2792; + uint32_t x2793; + uint32_t x2794; + uint32_t x2795; + uint32_t x2796; + uint32_t x2797; + uint32_t x2798; + uint32_t x2799; + uint32_t x2800; + uint32_t x2801; + uint32_t x2802; + uint32_t x2803; + uint32_t x2804; + uint32_t x2805; + uint32_t x2806; + uint32_t x2807; + uint32_t x2808; + uint32_t x2809; + fiat_p521_uint1 x2810; + uint32_t x2811; + fiat_p521_uint1 x2812; + uint32_t x2813; + fiat_p521_uint1 x2814; + uint32_t x2815; + fiat_p521_uint1 x2816; + uint32_t x2817; + fiat_p521_uint1 x2818; + uint32_t x2819; + fiat_p521_uint1 x2820; + uint32_t x2821; + fiat_p521_uint1 x2822; + uint32_t x2823; + fiat_p521_uint1 x2824; + uint32_t x2825; + fiat_p521_uint1 x2826; + uint32_t x2827; + fiat_p521_uint1 x2828; + uint32_t x2829; + fiat_p521_uint1 x2830; + uint32_t x2831; + fiat_p521_uint1 x2832; + uint32_t x2833; + fiat_p521_uint1 x2834; + uint32_t x2835; + fiat_p521_uint1 x2836; + uint32_t x2837; + fiat_p521_uint1 x2838; + uint32_t x2839; + fiat_p521_uint1 x2840; + uint32_t x2841; + uint32_t x2842; + fiat_p521_uint1 x2843; + uint32_t x2844; + fiat_p521_uint1 x2845; + uint32_t x2846; + fiat_p521_uint1 x2847; + uint32_t x2848; + fiat_p521_uint1 x2849; + uint32_t x2850; + fiat_p521_uint1 x2851; + uint32_t x2852; + fiat_p521_uint1 x2853; + uint32_t x2854; + fiat_p521_uint1 x2855; + uint32_t x2856; + fiat_p521_uint1 x2857; + uint32_t x2858; + fiat_p521_uint1 x2859; + uint32_t x2860; + fiat_p521_uint1 x2861; + uint32_t x2862; + fiat_p521_uint1 x2863; + uint32_t x2864; + fiat_p521_uint1 x2865; + uint32_t x2866; + fiat_p521_uint1 x2867; + uint32_t x2868; + fiat_p521_uint1 x2869; + uint32_t x2870; + fiat_p521_uint1 x2871; + uint32_t x2872; + fiat_p521_uint1 x2873; + uint32_t x2874; + fiat_p521_uint1 x2875; + uint32_t x2876; + fiat_p521_uint1 x2877; + uint32_t x2878; + uint32_t x2879; + uint32_t x2880; + uint32_t x2881; + uint32_t x2882; + uint32_t x2883; + uint32_t x2884; + uint32_t x2885; + uint32_t x2886; + uint32_t x2887; + uint32_t x2888; + uint32_t x2889; + uint32_t x2890; + uint32_t x2891; + uint32_t x2892; + uint32_t x2893; + uint32_t x2894; + uint32_t x2895; + uint32_t x2896; + uint32_t x2897; + uint32_t x2898; + uint32_t x2899; + uint32_t x2900; + uint32_t x2901; + uint32_t x2902; + uint32_t x2903; + uint32_t x2904; + uint32_t x2905; + uint32_t x2906; + uint32_t x2907; + uint32_t x2908; + uint32_t x2909; + uint32_t x2910; + uint32_t x2911; + uint32_t x2912; + uint32_t x2913; + fiat_p521_uint1 x2914; + uint32_t x2915; + fiat_p521_uint1 x2916; + uint32_t x2917; + fiat_p521_uint1 x2918; + uint32_t x2919; + fiat_p521_uint1 x2920; + uint32_t x2921; + fiat_p521_uint1 x2922; + uint32_t x2923; + fiat_p521_uint1 x2924; + uint32_t x2925; + fiat_p521_uint1 x2926; + uint32_t x2927; + fiat_p521_uint1 x2928; + uint32_t x2929; + fiat_p521_uint1 x2930; + uint32_t x2931; + fiat_p521_uint1 x2932; + uint32_t x2933; + fiat_p521_uint1 x2934; + uint32_t x2935; + fiat_p521_uint1 x2936; + uint32_t x2937; + fiat_p521_uint1 x2938; + uint32_t x2939; + fiat_p521_uint1 x2940; + uint32_t x2941; + fiat_p521_uint1 x2942; + uint32_t x2943; + fiat_p521_uint1 x2944; + uint32_t x2945; + uint32_t x2946; + fiat_p521_uint1 x2947; + uint32_t x2948; + fiat_p521_uint1 x2949; + uint32_t x2950; + fiat_p521_uint1 x2951; + uint32_t x2952; + fiat_p521_uint1 x2953; + uint32_t x2954; + fiat_p521_uint1 x2955; + uint32_t x2956; + fiat_p521_uint1 x2957; + uint32_t x2958; + fiat_p521_uint1 x2959; + uint32_t x2960; + fiat_p521_uint1 x2961; + uint32_t x2962; + fiat_p521_uint1 x2963; + uint32_t x2964; + fiat_p521_uint1 x2965; + uint32_t x2966; + fiat_p521_uint1 x2967; + uint32_t x2968; + fiat_p521_uint1 x2969; + uint32_t x2970; + fiat_p521_uint1 x2971; + uint32_t x2972; + fiat_p521_uint1 x2973; + uint32_t x2974; + fiat_p521_uint1 x2975; + uint32_t x2976; + fiat_p521_uint1 x2977; + uint32_t x2978; + fiat_p521_uint1 x2979; + uint32_t x2980; + fiat_p521_uint1 x2981; + uint32_t x2982; + uint32_t x2983; + uint32_t x2984; + uint32_t x2985; + uint32_t x2986; + uint32_t x2987; + uint32_t x2988; + uint32_t x2989; + uint32_t x2990; + uint32_t x2991; + uint32_t x2992; + uint32_t x2993; + uint32_t x2994; + uint32_t x2995; + uint32_t x2996; + uint32_t x2997; + uint32_t x2998; + uint32_t x2999; + uint32_t x3000; + uint32_t x3001; + uint32_t x3002; + uint32_t x3003; + uint32_t x3004; + uint32_t x3005; + uint32_t x3006; + uint32_t x3007; + uint32_t x3008; + uint32_t x3009; + uint32_t x3010; + uint32_t x3011; + uint32_t x3012; + uint32_t x3013; + uint32_t x3014; + uint32_t x3015; + uint32_t x3016; + fiat_p521_uint1 x3017; + uint32_t x3018; + fiat_p521_uint1 x3019; + uint32_t x3020; + fiat_p521_uint1 x3021; + uint32_t x3022; + fiat_p521_uint1 x3023; + uint32_t x3024; + fiat_p521_uint1 x3025; + uint32_t x3026; + fiat_p521_uint1 x3027; + uint32_t x3028; + fiat_p521_uint1 x3029; + uint32_t x3030; + fiat_p521_uint1 x3031; + uint32_t x3032; + fiat_p521_uint1 x3033; + uint32_t x3034; + fiat_p521_uint1 x3035; + uint32_t x3036; + fiat_p521_uint1 x3037; + uint32_t x3038; + fiat_p521_uint1 x3039; + uint32_t x3040; + fiat_p521_uint1 x3041; + uint32_t x3042; + fiat_p521_uint1 x3043; + uint32_t x3044; + fiat_p521_uint1 x3045; + uint32_t x3046; + fiat_p521_uint1 x3047; + uint32_t x3048; + uint32_t x3049; + fiat_p521_uint1 x3050; + uint32_t x3051; + fiat_p521_uint1 x3052; + uint32_t x3053; + fiat_p521_uint1 x3054; + uint32_t x3055; + fiat_p521_uint1 x3056; + uint32_t x3057; + fiat_p521_uint1 x3058; + uint32_t x3059; + fiat_p521_uint1 x3060; + uint32_t x3061; + fiat_p521_uint1 x3062; + uint32_t x3063; + fiat_p521_uint1 x3064; + uint32_t x3065; + fiat_p521_uint1 x3066; + uint32_t x3067; + fiat_p521_uint1 x3068; + uint32_t x3069; + fiat_p521_uint1 x3070; + uint32_t x3071; + fiat_p521_uint1 x3072; + uint32_t x3073; + fiat_p521_uint1 x3074; + uint32_t x3075; + fiat_p521_uint1 x3076; + uint32_t x3077; + fiat_p521_uint1 x3078; + uint32_t x3079; + fiat_p521_uint1 x3080; + uint32_t x3081; + fiat_p521_uint1 x3082; + uint32_t x3083; + fiat_p521_uint1 x3084; + uint32_t x3085; + uint32_t x3086; + uint32_t x3087; + uint32_t x3088; + uint32_t x3089; + uint32_t x3090; + uint32_t x3091; + uint32_t x3092; + uint32_t x3093; + uint32_t x3094; + uint32_t x3095; + uint32_t x3096; + uint32_t x3097; + uint32_t x3098; + uint32_t x3099; + uint32_t x3100; + uint32_t x3101; + uint32_t x3102; + uint32_t x3103; + uint32_t x3104; + uint32_t x3105; + uint32_t x3106; + uint32_t x3107; + uint32_t x3108; + uint32_t x3109; + uint32_t x3110; + uint32_t x3111; + uint32_t x3112; + uint32_t x3113; + uint32_t x3114; + uint32_t x3115; + uint32_t x3116; + uint32_t x3117; + uint32_t x3118; + uint32_t x3119; + uint32_t x3120; + fiat_p521_uint1 x3121; + uint32_t x3122; + fiat_p521_uint1 x3123; + uint32_t x3124; + fiat_p521_uint1 x3125; + uint32_t x3126; + fiat_p521_uint1 x3127; + uint32_t x3128; + fiat_p521_uint1 x3129; + uint32_t x3130; + fiat_p521_uint1 x3131; + uint32_t x3132; + fiat_p521_uint1 x3133; + uint32_t x3134; + fiat_p521_uint1 x3135; + uint32_t x3136; + fiat_p521_uint1 x3137; + uint32_t x3138; + fiat_p521_uint1 x3139; + uint32_t x3140; + fiat_p521_uint1 x3141; + uint32_t x3142; + fiat_p521_uint1 x3143; + uint32_t x3144; + fiat_p521_uint1 x3145; + uint32_t x3146; + fiat_p521_uint1 x3147; + uint32_t x3148; + fiat_p521_uint1 x3149; + uint32_t x3150; + fiat_p521_uint1 x3151; + uint32_t x3152; + uint32_t x3153; + fiat_p521_uint1 x3154; + uint32_t x3155; + fiat_p521_uint1 x3156; + uint32_t x3157; + fiat_p521_uint1 x3158; + uint32_t x3159; + fiat_p521_uint1 x3160; + uint32_t x3161; + fiat_p521_uint1 x3162; + uint32_t x3163; + fiat_p521_uint1 x3164; + uint32_t x3165; + fiat_p521_uint1 x3166; + uint32_t x3167; + fiat_p521_uint1 x3168; + uint32_t x3169; + fiat_p521_uint1 x3170; + uint32_t x3171; + fiat_p521_uint1 x3172; + uint32_t x3173; + fiat_p521_uint1 x3174; + uint32_t x3175; + fiat_p521_uint1 x3176; + uint32_t x3177; + fiat_p521_uint1 x3178; + uint32_t x3179; + fiat_p521_uint1 x3180; + uint32_t x3181; + fiat_p521_uint1 x3182; + uint32_t x3183; + fiat_p521_uint1 x3184; + uint32_t x3185; + fiat_p521_uint1 x3186; + uint32_t x3187; + fiat_p521_uint1 x3188; + uint32_t x3189; + uint32_t x3190; + uint32_t x3191; + uint32_t x3192; + uint32_t x3193; + uint32_t x3194; + uint32_t x3195; + uint32_t x3196; + uint32_t x3197; + uint32_t x3198; + uint32_t x3199; + uint32_t x3200; + uint32_t x3201; + uint32_t x3202; + uint32_t x3203; + uint32_t x3204; + uint32_t x3205; + uint32_t x3206; + uint32_t x3207; + uint32_t x3208; + uint32_t x3209; + uint32_t x3210; + uint32_t x3211; + uint32_t x3212; + uint32_t x3213; + uint32_t x3214; + uint32_t x3215; + uint32_t x3216; + uint32_t x3217; + uint32_t x3218; + uint32_t x3219; + uint32_t x3220; + uint32_t x3221; + uint32_t x3222; + uint32_t x3223; + fiat_p521_uint1 x3224; + uint32_t x3225; + fiat_p521_uint1 x3226; + uint32_t x3227; + fiat_p521_uint1 x3228; + uint32_t x3229; + fiat_p521_uint1 x3230; + uint32_t x3231; + fiat_p521_uint1 x3232; + uint32_t x3233; + fiat_p521_uint1 x3234; + uint32_t x3235; + fiat_p521_uint1 x3236; + uint32_t x3237; + fiat_p521_uint1 x3238; + uint32_t x3239; + fiat_p521_uint1 x3240; + uint32_t x3241; + fiat_p521_uint1 x3242; + uint32_t x3243; + fiat_p521_uint1 x3244; + uint32_t x3245; + fiat_p521_uint1 x3246; + uint32_t x3247; + fiat_p521_uint1 x3248; + uint32_t x3249; + fiat_p521_uint1 x3250; + uint32_t x3251; + fiat_p521_uint1 x3252; + uint32_t x3253; + fiat_p521_uint1 x3254; + uint32_t x3255; + uint32_t x3256; + fiat_p521_uint1 x3257; + uint32_t x3258; + fiat_p521_uint1 x3259; + uint32_t x3260; + fiat_p521_uint1 x3261; + uint32_t x3262; + fiat_p521_uint1 x3263; + uint32_t x3264; + fiat_p521_uint1 x3265; + uint32_t x3266; + fiat_p521_uint1 x3267; + uint32_t x3268; + fiat_p521_uint1 x3269; + uint32_t x3270; + fiat_p521_uint1 x3271; + uint32_t x3272; + fiat_p521_uint1 x3273; + uint32_t x3274; + fiat_p521_uint1 x3275; + uint32_t x3276; + fiat_p521_uint1 x3277; + uint32_t x3278; + fiat_p521_uint1 x3279; + uint32_t x3280; + fiat_p521_uint1 x3281; + uint32_t x3282; + fiat_p521_uint1 x3283; + uint32_t x3284; + fiat_p521_uint1 x3285; + uint32_t x3286; + fiat_p521_uint1 x3287; + uint32_t x3288; + fiat_p521_uint1 x3289; + uint32_t x3290; + fiat_p521_uint1 x3291; + uint32_t x3292; + uint32_t x3293; + uint32_t x3294; + uint32_t x3295; + uint32_t x3296; + uint32_t x3297; + uint32_t x3298; + uint32_t x3299; + uint32_t x3300; + uint32_t x3301; + uint32_t x3302; + uint32_t x3303; + uint32_t x3304; + uint32_t x3305; + uint32_t x3306; + uint32_t x3307; + uint32_t x3308; + uint32_t x3309; + uint32_t x3310; + uint32_t x3311; + uint32_t x3312; + uint32_t x3313; + uint32_t x3314; + uint32_t x3315; + uint32_t x3316; + uint32_t x3317; + uint32_t x3318; + uint32_t x3319; + uint32_t x3320; + uint32_t x3321; + uint32_t x3322; + uint32_t x3323; + uint32_t x3324; + uint32_t x3325; + uint32_t x3326; + uint32_t x3327; + fiat_p521_uint1 x3328; + uint32_t x3329; + fiat_p521_uint1 x3330; + uint32_t x3331; + fiat_p521_uint1 x3332; + uint32_t x3333; + fiat_p521_uint1 x3334; + uint32_t x3335; + fiat_p521_uint1 x3336; + uint32_t x3337; + fiat_p521_uint1 x3338; + uint32_t x3339; + fiat_p521_uint1 x3340; + uint32_t x3341; + fiat_p521_uint1 x3342; + uint32_t x3343; + fiat_p521_uint1 x3344; + uint32_t x3345; + fiat_p521_uint1 x3346; + uint32_t x3347; + fiat_p521_uint1 x3348; + uint32_t x3349; + fiat_p521_uint1 x3350; + uint32_t x3351; + fiat_p521_uint1 x3352; + uint32_t x3353; + fiat_p521_uint1 x3354; + uint32_t x3355; + fiat_p521_uint1 x3356; + uint32_t x3357; + fiat_p521_uint1 x3358; + uint32_t x3359; + uint32_t x3360; + fiat_p521_uint1 x3361; + uint32_t x3362; + fiat_p521_uint1 x3363; + uint32_t x3364; + fiat_p521_uint1 x3365; + uint32_t x3366; + fiat_p521_uint1 x3367; + uint32_t x3368; + fiat_p521_uint1 x3369; + uint32_t x3370; + fiat_p521_uint1 x3371; + uint32_t x3372; + fiat_p521_uint1 x3373; + uint32_t x3374; + fiat_p521_uint1 x3375; + uint32_t x3376; + fiat_p521_uint1 x3377; + uint32_t x3378; + fiat_p521_uint1 x3379; + uint32_t x3380; + fiat_p521_uint1 x3381; + uint32_t x3382; + fiat_p521_uint1 x3383; + uint32_t x3384; + fiat_p521_uint1 x3385; + uint32_t x3386; + fiat_p521_uint1 x3387; + uint32_t x3388; + fiat_p521_uint1 x3389; + uint32_t x3390; + fiat_p521_uint1 x3391; + uint32_t x3392; + fiat_p521_uint1 x3393; + uint32_t x3394; + fiat_p521_uint1 x3395; + uint32_t x3396; + uint32_t x3397; + uint32_t x3398; + uint32_t x3399; + uint32_t x3400; + uint32_t x3401; + uint32_t x3402; + uint32_t x3403; + uint32_t x3404; + uint32_t x3405; + uint32_t x3406; + uint32_t x3407; + uint32_t x3408; + uint32_t x3409; + uint32_t x3410; + uint32_t x3411; + uint32_t x3412; + uint32_t x3413; + uint32_t x3414; + uint32_t x3415; + uint32_t x3416; + uint32_t x3417; + uint32_t x3418; + uint32_t x3419; + uint32_t x3420; + uint32_t x3421; + uint32_t x3422; + uint32_t x3423; + uint32_t x3424; + uint32_t x3425; + uint32_t x3426; + uint32_t x3427; + uint32_t x3428; + uint32_t x3429; + uint32_t x3430; + fiat_p521_uint1 x3431; + uint32_t x3432; + fiat_p521_uint1 x3433; + uint32_t x3434; + fiat_p521_uint1 x3435; + uint32_t x3436; + fiat_p521_uint1 x3437; + uint32_t x3438; + fiat_p521_uint1 x3439; + uint32_t x3440; + fiat_p521_uint1 x3441; + uint32_t x3442; + fiat_p521_uint1 x3443; + uint32_t x3444; + fiat_p521_uint1 x3445; + uint32_t x3446; + fiat_p521_uint1 x3447; + uint32_t x3448; + fiat_p521_uint1 x3449; + uint32_t x3450; + fiat_p521_uint1 x3451; + uint32_t x3452; + fiat_p521_uint1 x3453; + uint32_t x3454; + fiat_p521_uint1 x3455; + uint32_t x3456; + fiat_p521_uint1 x3457; + uint32_t x3458; + fiat_p521_uint1 x3459; + uint32_t x3460; + fiat_p521_uint1 x3461; + uint32_t x3462; + uint32_t x3463; + fiat_p521_uint1 x3464; + uint32_t x3465; + fiat_p521_uint1 x3466; + uint32_t x3467; + fiat_p521_uint1 x3468; + uint32_t x3469; + fiat_p521_uint1 x3470; + uint32_t x3471; + fiat_p521_uint1 x3472; + uint32_t x3473; + fiat_p521_uint1 x3474; + uint32_t x3475; + fiat_p521_uint1 x3476; + uint32_t x3477; + fiat_p521_uint1 x3478; + uint32_t x3479; + fiat_p521_uint1 x3480; + uint32_t x3481; + fiat_p521_uint1 x3482; + uint32_t x3483; + fiat_p521_uint1 x3484; + uint32_t x3485; + fiat_p521_uint1 x3486; + uint32_t x3487; + fiat_p521_uint1 x3488; + uint32_t x3489; + fiat_p521_uint1 x3490; + uint32_t x3491; + fiat_p521_uint1 x3492; + uint32_t x3493; + fiat_p521_uint1 x3494; + uint32_t x3495; + fiat_p521_uint1 x3496; + uint32_t x3497; + fiat_p521_uint1 x3498; + uint32_t x3499; + uint32_t x3500; + fiat_p521_uint1 x3501; + uint32_t x3502; + fiat_p521_uint1 x3503; + uint32_t x3504; + fiat_p521_uint1 x3505; + uint32_t x3506; + fiat_p521_uint1 x3507; + uint32_t x3508; + fiat_p521_uint1 x3509; + uint32_t x3510; + fiat_p521_uint1 x3511; + uint32_t x3512; + fiat_p521_uint1 x3513; + uint32_t x3514; + fiat_p521_uint1 x3515; + uint32_t x3516; + fiat_p521_uint1 x3517; + uint32_t x3518; + fiat_p521_uint1 x3519; + uint32_t x3520; + fiat_p521_uint1 x3521; + uint32_t x3522; + fiat_p521_uint1 x3523; + uint32_t x3524; + fiat_p521_uint1 x3525; + uint32_t x3526; + fiat_p521_uint1 x3527; + uint32_t x3528; + fiat_p521_uint1 x3529; + uint32_t x3530; + fiat_p521_uint1 x3531; + uint32_t x3532; + fiat_p521_uint1 x3533; + uint32_t x3534; + fiat_p521_uint1 x3535; + uint32_t x3536; + uint32_t x3537; + uint32_t x3538; + uint32_t x3539; + uint32_t x3540; + uint32_t x3541; + uint32_t x3542; + uint32_t x3543; + uint32_t x3544; + uint32_t x3545; + uint32_t x3546; + uint32_t x3547; + uint32_t x3548; + uint32_t x3549; + uint32_t x3550; + uint32_t x3551; + uint32_t x3552; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[8]); + x9 = (arg1[9]); + x10 = (arg1[10]); + x11 = (arg1[11]); + x12 = (arg1[12]); + x13 = (arg1[13]); + x14 = (arg1[14]); + x15 = (arg1[15]); + x16 = (arg1[16]); + x17 = (arg1[0]); + fiat_p521_mulx_u32(&x18, &x19, x17, (arg1[16])); + fiat_p521_mulx_u32(&x20, &x21, x17, (arg1[15])); + fiat_p521_mulx_u32(&x22, &x23, x17, (arg1[14])); + fiat_p521_mulx_u32(&x24, &x25, x17, (arg1[13])); + fiat_p521_mulx_u32(&x26, &x27, x17, (arg1[12])); + fiat_p521_mulx_u32(&x28, &x29, x17, (arg1[11])); + fiat_p521_mulx_u32(&x30, &x31, x17, (arg1[10])); + fiat_p521_mulx_u32(&x32, &x33, x17, (arg1[9])); + fiat_p521_mulx_u32(&x34, &x35, x17, (arg1[8])); + fiat_p521_mulx_u32(&x36, &x37, x17, (arg1[7])); + fiat_p521_mulx_u32(&x38, &x39, x17, (arg1[6])); + fiat_p521_mulx_u32(&x40, &x41, x17, (arg1[5])); + fiat_p521_mulx_u32(&x42, &x43, x17, (arg1[4])); + fiat_p521_mulx_u32(&x44, &x45, x17, (arg1[3])); + fiat_p521_mulx_u32(&x46, &x47, x17, (arg1[2])); + fiat_p521_mulx_u32(&x48, &x49, x17, (arg1[1])); + fiat_p521_mulx_u32(&x50, &x51, x17, (arg1[0])); + fiat_p521_addcarryx_u32(&x52, &x53, 0x0, x51, x48); + fiat_p521_addcarryx_u32(&x54, &x55, x53, x49, x46); + fiat_p521_addcarryx_u32(&x56, &x57, x55, x47, x44); + fiat_p521_addcarryx_u32(&x58, &x59, x57, x45, x42); + fiat_p521_addcarryx_u32(&x60, &x61, x59, x43, x40); + fiat_p521_addcarryx_u32(&x62, &x63, x61, x41, x38); + fiat_p521_addcarryx_u32(&x64, &x65, x63, x39, x36); + fiat_p521_addcarryx_u32(&x66, &x67, x65, x37, x34); + fiat_p521_addcarryx_u32(&x68, &x69, x67, x35, x32); + fiat_p521_addcarryx_u32(&x70, &x71, x69, x33, x30); + fiat_p521_addcarryx_u32(&x72, &x73, x71, x31, x28); + fiat_p521_addcarryx_u32(&x74, &x75, x73, x29, x26); + fiat_p521_addcarryx_u32(&x76, &x77, x75, x27, x24); + fiat_p521_addcarryx_u32(&x78, &x79, x77, x25, x22); + fiat_p521_addcarryx_u32(&x80, &x81, x79, x23, x20); + fiat_p521_addcarryx_u32(&x82, &x83, x81, x21, x18); + x84 = (x83 + x19); + fiat_p521_mulx_u32(&x85, &x86, x50, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x87, &x88, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x89, &x90, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x91, &x92, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x93, &x94, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x95, &x96, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x97, &x98, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x99, &x100, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x101, &x102, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x103, &x104, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x105, &x106, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x107, &x108, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x109, &x110, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x111, &x112, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x113, &x114, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x115, &x116, x50, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x117, &x118, x50, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x119, &x120, 0x0, x118, x115); + fiat_p521_addcarryx_u32(&x121, &x122, x120, x116, x113); + fiat_p521_addcarryx_u32(&x123, &x124, x122, x114, x111); + fiat_p521_addcarryx_u32(&x125, &x126, x124, x112, x109); + fiat_p521_addcarryx_u32(&x127, &x128, x126, x110, x107); + fiat_p521_addcarryx_u32(&x129, &x130, x128, x108, x105); + fiat_p521_addcarryx_u32(&x131, &x132, x130, x106, x103); + fiat_p521_addcarryx_u32(&x133, &x134, x132, x104, x101); + fiat_p521_addcarryx_u32(&x135, &x136, x134, x102, x99); + fiat_p521_addcarryx_u32(&x137, &x138, x136, x100, x97); + fiat_p521_addcarryx_u32(&x139, &x140, x138, x98, x95); + fiat_p521_addcarryx_u32(&x141, &x142, x140, x96, x93); + fiat_p521_addcarryx_u32(&x143, &x144, x142, x94, x91); + fiat_p521_addcarryx_u32(&x145, &x146, x144, x92, x89); + fiat_p521_addcarryx_u32(&x147, &x148, x146, x90, x87); + fiat_p521_addcarryx_u32(&x149, &x150, x148, x88, x85); + x151 = (x150 + x86); + fiat_p521_addcarryx_u32(&x152, &x153, 0x0, x50, x117); + fiat_p521_addcarryx_u32(&x154, &x155, x153, x52, x119); + fiat_p521_addcarryx_u32(&x156, &x157, x155, x54, x121); + fiat_p521_addcarryx_u32(&x158, &x159, x157, x56, x123); + fiat_p521_addcarryx_u32(&x160, &x161, x159, x58, x125); + fiat_p521_addcarryx_u32(&x162, &x163, x161, x60, x127); + fiat_p521_addcarryx_u32(&x164, &x165, x163, x62, x129); + fiat_p521_addcarryx_u32(&x166, &x167, x165, x64, x131); + fiat_p521_addcarryx_u32(&x168, &x169, x167, x66, x133); + fiat_p521_addcarryx_u32(&x170, &x171, x169, x68, x135); + fiat_p521_addcarryx_u32(&x172, &x173, x171, x70, x137); + fiat_p521_addcarryx_u32(&x174, &x175, x173, x72, x139); + fiat_p521_addcarryx_u32(&x176, &x177, x175, x74, x141); + fiat_p521_addcarryx_u32(&x178, &x179, x177, x76, x143); + fiat_p521_addcarryx_u32(&x180, &x181, x179, x78, x145); + fiat_p521_addcarryx_u32(&x182, &x183, x181, x80, x147); + fiat_p521_addcarryx_u32(&x184, &x185, x183, x82, x149); + fiat_p521_addcarryx_u32(&x186, &x187, x185, x84, x151); + fiat_p521_mulx_u32(&x188, &x189, x1, (arg1[16])); + fiat_p521_mulx_u32(&x190, &x191, x1, (arg1[15])); + fiat_p521_mulx_u32(&x192, &x193, x1, (arg1[14])); + fiat_p521_mulx_u32(&x194, &x195, x1, (arg1[13])); + fiat_p521_mulx_u32(&x196, &x197, x1, (arg1[12])); + fiat_p521_mulx_u32(&x198, &x199, x1, (arg1[11])); + fiat_p521_mulx_u32(&x200, &x201, x1, (arg1[10])); + fiat_p521_mulx_u32(&x202, &x203, x1, (arg1[9])); + fiat_p521_mulx_u32(&x204, &x205, x1, (arg1[8])); + fiat_p521_mulx_u32(&x206, &x207, x1, (arg1[7])); + fiat_p521_mulx_u32(&x208, &x209, x1, (arg1[6])); + fiat_p521_mulx_u32(&x210, &x211, x1, (arg1[5])); + fiat_p521_mulx_u32(&x212, &x213, x1, (arg1[4])); + fiat_p521_mulx_u32(&x214, &x215, x1, (arg1[3])); + fiat_p521_mulx_u32(&x216, &x217, x1, (arg1[2])); + fiat_p521_mulx_u32(&x218, &x219, x1, (arg1[1])); + fiat_p521_mulx_u32(&x220, &x221, x1, (arg1[0])); + fiat_p521_addcarryx_u32(&x222, &x223, 0x0, x221, x218); + fiat_p521_addcarryx_u32(&x224, &x225, x223, x219, x216); + fiat_p521_addcarryx_u32(&x226, &x227, x225, x217, x214); + fiat_p521_addcarryx_u32(&x228, &x229, x227, x215, x212); + fiat_p521_addcarryx_u32(&x230, &x231, x229, x213, x210); + fiat_p521_addcarryx_u32(&x232, &x233, x231, x211, x208); + fiat_p521_addcarryx_u32(&x234, &x235, x233, x209, x206); + fiat_p521_addcarryx_u32(&x236, &x237, x235, x207, x204); + fiat_p521_addcarryx_u32(&x238, &x239, x237, x205, x202); + fiat_p521_addcarryx_u32(&x240, &x241, x239, x203, x200); + fiat_p521_addcarryx_u32(&x242, &x243, x241, x201, x198); + fiat_p521_addcarryx_u32(&x244, &x245, x243, x199, x196); + fiat_p521_addcarryx_u32(&x246, &x247, x245, x197, x194); + fiat_p521_addcarryx_u32(&x248, &x249, x247, x195, x192); + fiat_p521_addcarryx_u32(&x250, &x251, x249, x193, x190); + fiat_p521_addcarryx_u32(&x252, &x253, x251, x191, x188); + x254 = (x253 + x189); + fiat_p521_addcarryx_u32(&x255, &x256, 0x0, x154, x220); + fiat_p521_addcarryx_u32(&x257, &x258, x256, x156, x222); + fiat_p521_addcarryx_u32(&x259, &x260, x258, x158, x224); + fiat_p521_addcarryx_u32(&x261, &x262, x260, x160, x226); + fiat_p521_addcarryx_u32(&x263, &x264, x262, x162, x228); + fiat_p521_addcarryx_u32(&x265, &x266, x264, x164, x230); + fiat_p521_addcarryx_u32(&x267, &x268, x266, x166, x232); + fiat_p521_addcarryx_u32(&x269, &x270, x268, x168, x234); + fiat_p521_addcarryx_u32(&x271, &x272, x270, x170, x236); + fiat_p521_addcarryx_u32(&x273, &x274, x272, x172, x238); + fiat_p521_addcarryx_u32(&x275, &x276, x274, x174, x240); + fiat_p521_addcarryx_u32(&x277, &x278, x276, x176, x242); + fiat_p521_addcarryx_u32(&x279, &x280, x278, x178, x244); + fiat_p521_addcarryx_u32(&x281, &x282, x280, x180, x246); + fiat_p521_addcarryx_u32(&x283, &x284, x282, x182, x248); + fiat_p521_addcarryx_u32(&x285, &x286, x284, x184, x250); + fiat_p521_addcarryx_u32(&x287, &x288, x286, x186, x252); + fiat_p521_addcarryx_u32(&x289, &x290, x288, x187, x254); + fiat_p521_mulx_u32(&x291, &x292, x255, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x293, &x294, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x295, &x296, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x297, &x298, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x299, &x300, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x301, &x302, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x303, &x304, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x305, &x306, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x307, &x308, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x309, &x310, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x311, &x312, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x313, &x314, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x315, &x316, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x317, &x318, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x319, &x320, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x321, &x322, x255, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x323, &x324, x255, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x325, &x326, 0x0, x324, x321); + fiat_p521_addcarryx_u32(&x327, &x328, x326, x322, x319); + fiat_p521_addcarryx_u32(&x329, &x330, x328, x320, x317); + fiat_p521_addcarryx_u32(&x331, &x332, x330, x318, x315); + fiat_p521_addcarryx_u32(&x333, &x334, x332, x316, x313); + fiat_p521_addcarryx_u32(&x335, &x336, x334, x314, x311); + fiat_p521_addcarryx_u32(&x337, &x338, x336, x312, x309); + fiat_p521_addcarryx_u32(&x339, &x340, x338, x310, x307); + fiat_p521_addcarryx_u32(&x341, &x342, x340, x308, x305); + fiat_p521_addcarryx_u32(&x343, &x344, x342, x306, x303); + fiat_p521_addcarryx_u32(&x345, &x346, x344, x304, x301); + fiat_p521_addcarryx_u32(&x347, &x348, x346, x302, x299); + fiat_p521_addcarryx_u32(&x349, &x350, x348, x300, x297); + fiat_p521_addcarryx_u32(&x351, &x352, x350, x298, x295); + fiat_p521_addcarryx_u32(&x353, &x354, x352, x296, x293); + fiat_p521_addcarryx_u32(&x355, &x356, x354, x294, x291); + x357 = (x356 + x292); + fiat_p521_addcarryx_u32(&x358, &x359, 0x0, x255, x323); + fiat_p521_addcarryx_u32(&x360, &x361, x359, x257, x325); + fiat_p521_addcarryx_u32(&x362, &x363, x361, x259, x327); + fiat_p521_addcarryx_u32(&x364, &x365, x363, x261, x329); + fiat_p521_addcarryx_u32(&x366, &x367, x365, x263, x331); + fiat_p521_addcarryx_u32(&x368, &x369, x367, x265, x333); + fiat_p521_addcarryx_u32(&x370, &x371, x369, x267, x335); + fiat_p521_addcarryx_u32(&x372, &x373, x371, x269, x337); + fiat_p521_addcarryx_u32(&x374, &x375, x373, x271, x339); + fiat_p521_addcarryx_u32(&x376, &x377, x375, x273, x341); + fiat_p521_addcarryx_u32(&x378, &x379, x377, x275, x343); + fiat_p521_addcarryx_u32(&x380, &x381, x379, x277, x345); + fiat_p521_addcarryx_u32(&x382, &x383, x381, x279, x347); + fiat_p521_addcarryx_u32(&x384, &x385, x383, x281, x349); + fiat_p521_addcarryx_u32(&x386, &x387, x385, x283, x351); + fiat_p521_addcarryx_u32(&x388, &x389, x387, x285, x353); + fiat_p521_addcarryx_u32(&x390, &x391, x389, x287, x355); + fiat_p521_addcarryx_u32(&x392, &x393, x391, x289, x357); + x394 = ((uint32_t)x393 + x290); + fiat_p521_mulx_u32(&x395, &x396, x2, (arg1[16])); + fiat_p521_mulx_u32(&x397, &x398, x2, (arg1[15])); + fiat_p521_mulx_u32(&x399, &x400, x2, (arg1[14])); + fiat_p521_mulx_u32(&x401, &x402, x2, (arg1[13])); + fiat_p521_mulx_u32(&x403, &x404, x2, (arg1[12])); + fiat_p521_mulx_u32(&x405, &x406, x2, (arg1[11])); + fiat_p521_mulx_u32(&x407, &x408, x2, (arg1[10])); + fiat_p521_mulx_u32(&x409, &x410, x2, (arg1[9])); + fiat_p521_mulx_u32(&x411, &x412, x2, (arg1[8])); + fiat_p521_mulx_u32(&x413, &x414, x2, (arg1[7])); + fiat_p521_mulx_u32(&x415, &x416, x2, (arg1[6])); + fiat_p521_mulx_u32(&x417, &x418, x2, (arg1[5])); + fiat_p521_mulx_u32(&x419, &x420, x2, (arg1[4])); + fiat_p521_mulx_u32(&x421, &x422, x2, (arg1[3])); + fiat_p521_mulx_u32(&x423, &x424, x2, (arg1[2])); + fiat_p521_mulx_u32(&x425, &x426, x2, (arg1[1])); + fiat_p521_mulx_u32(&x427, &x428, x2, (arg1[0])); + fiat_p521_addcarryx_u32(&x429, &x430, 0x0, x428, x425); + fiat_p521_addcarryx_u32(&x431, &x432, x430, x426, x423); + fiat_p521_addcarryx_u32(&x433, &x434, x432, x424, x421); + fiat_p521_addcarryx_u32(&x435, &x436, x434, x422, x419); + fiat_p521_addcarryx_u32(&x437, &x438, x436, x420, x417); + fiat_p521_addcarryx_u32(&x439, &x440, x438, x418, x415); + fiat_p521_addcarryx_u32(&x441, &x442, x440, x416, x413); + fiat_p521_addcarryx_u32(&x443, &x444, x442, x414, x411); + fiat_p521_addcarryx_u32(&x445, &x446, x444, x412, x409); + fiat_p521_addcarryx_u32(&x447, &x448, x446, x410, x407); + fiat_p521_addcarryx_u32(&x449, &x450, x448, x408, x405); + fiat_p521_addcarryx_u32(&x451, &x452, x450, x406, x403); + fiat_p521_addcarryx_u32(&x453, &x454, x452, x404, x401); + fiat_p521_addcarryx_u32(&x455, &x456, x454, x402, x399); + fiat_p521_addcarryx_u32(&x457, &x458, x456, x400, x397); + fiat_p521_addcarryx_u32(&x459, &x460, x458, x398, x395); + x461 = (x460 + x396); + fiat_p521_addcarryx_u32(&x462, &x463, 0x0, x360, x427); + fiat_p521_addcarryx_u32(&x464, &x465, x463, x362, x429); + fiat_p521_addcarryx_u32(&x466, &x467, x465, x364, x431); + fiat_p521_addcarryx_u32(&x468, &x469, x467, x366, x433); + fiat_p521_addcarryx_u32(&x470, &x471, x469, x368, x435); + fiat_p521_addcarryx_u32(&x472, &x473, x471, x370, x437); + fiat_p521_addcarryx_u32(&x474, &x475, x473, x372, x439); + fiat_p521_addcarryx_u32(&x476, &x477, x475, x374, x441); + fiat_p521_addcarryx_u32(&x478, &x479, x477, x376, x443); + fiat_p521_addcarryx_u32(&x480, &x481, x479, x378, x445); + fiat_p521_addcarryx_u32(&x482, &x483, x481, x380, x447); + fiat_p521_addcarryx_u32(&x484, &x485, x483, x382, x449); + fiat_p521_addcarryx_u32(&x486, &x487, x485, x384, x451); + fiat_p521_addcarryx_u32(&x488, &x489, x487, x386, x453); + fiat_p521_addcarryx_u32(&x490, &x491, x489, x388, x455); + fiat_p521_addcarryx_u32(&x492, &x493, x491, x390, x457); + fiat_p521_addcarryx_u32(&x494, &x495, x493, x392, x459); + fiat_p521_addcarryx_u32(&x496, &x497, x495, x394, x461); + fiat_p521_mulx_u32(&x498, &x499, x462, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x500, &x501, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x502, &x503, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x504, &x505, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x506, &x507, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x508, &x509, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x510, &x511, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x512, &x513, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x514, &x515, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x516, &x517, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x518, &x519, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x520, &x521, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x522, &x523, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x524, &x525, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x526, &x527, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x528, &x529, x462, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x530, &x531, x462, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x532, &x533, 0x0, x531, x528); + fiat_p521_addcarryx_u32(&x534, &x535, x533, x529, x526); + fiat_p521_addcarryx_u32(&x536, &x537, x535, x527, x524); + fiat_p521_addcarryx_u32(&x538, &x539, x537, x525, x522); + fiat_p521_addcarryx_u32(&x540, &x541, x539, x523, x520); + fiat_p521_addcarryx_u32(&x542, &x543, x541, x521, x518); + fiat_p521_addcarryx_u32(&x544, &x545, x543, x519, x516); + fiat_p521_addcarryx_u32(&x546, &x547, x545, x517, x514); + fiat_p521_addcarryx_u32(&x548, &x549, x547, x515, x512); + fiat_p521_addcarryx_u32(&x550, &x551, x549, x513, x510); + fiat_p521_addcarryx_u32(&x552, &x553, x551, x511, x508); + fiat_p521_addcarryx_u32(&x554, &x555, x553, x509, x506); + fiat_p521_addcarryx_u32(&x556, &x557, x555, x507, x504); + fiat_p521_addcarryx_u32(&x558, &x559, x557, x505, x502); + fiat_p521_addcarryx_u32(&x560, &x561, x559, x503, x500); + fiat_p521_addcarryx_u32(&x562, &x563, x561, x501, x498); + x564 = (x563 + x499); + fiat_p521_addcarryx_u32(&x565, &x566, 0x0, x462, x530); + fiat_p521_addcarryx_u32(&x567, &x568, x566, x464, x532); + fiat_p521_addcarryx_u32(&x569, &x570, x568, x466, x534); + fiat_p521_addcarryx_u32(&x571, &x572, x570, x468, x536); + fiat_p521_addcarryx_u32(&x573, &x574, x572, x470, x538); + fiat_p521_addcarryx_u32(&x575, &x576, x574, x472, x540); + fiat_p521_addcarryx_u32(&x577, &x578, x576, x474, x542); + fiat_p521_addcarryx_u32(&x579, &x580, x578, x476, x544); + fiat_p521_addcarryx_u32(&x581, &x582, x580, x478, x546); + fiat_p521_addcarryx_u32(&x583, &x584, x582, x480, x548); + fiat_p521_addcarryx_u32(&x585, &x586, x584, x482, x550); + fiat_p521_addcarryx_u32(&x587, &x588, x586, x484, x552); + fiat_p521_addcarryx_u32(&x589, &x590, x588, x486, x554); + fiat_p521_addcarryx_u32(&x591, &x592, x590, x488, x556); + fiat_p521_addcarryx_u32(&x593, &x594, x592, x490, x558); + fiat_p521_addcarryx_u32(&x595, &x596, x594, x492, x560); + fiat_p521_addcarryx_u32(&x597, &x598, x596, x494, x562); + fiat_p521_addcarryx_u32(&x599, &x600, x598, x496, x564); + x601 = ((uint32_t)x600 + x497); + fiat_p521_mulx_u32(&x602, &x603, x3, (arg1[16])); + fiat_p521_mulx_u32(&x604, &x605, x3, (arg1[15])); + fiat_p521_mulx_u32(&x606, &x607, x3, (arg1[14])); + fiat_p521_mulx_u32(&x608, &x609, x3, (arg1[13])); + fiat_p521_mulx_u32(&x610, &x611, x3, (arg1[12])); + fiat_p521_mulx_u32(&x612, &x613, x3, (arg1[11])); + fiat_p521_mulx_u32(&x614, &x615, x3, (arg1[10])); + fiat_p521_mulx_u32(&x616, &x617, x3, (arg1[9])); + fiat_p521_mulx_u32(&x618, &x619, x3, (arg1[8])); + fiat_p521_mulx_u32(&x620, &x621, x3, (arg1[7])); + fiat_p521_mulx_u32(&x622, &x623, x3, (arg1[6])); + fiat_p521_mulx_u32(&x624, &x625, x3, (arg1[5])); + fiat_p521_mulx_u32(&x626, &x627, x3, (arg1[4])); + fiat_p521_mulx_u32(&x628, &x629, x3, (arg1[3])); + fiat_p521_mulx_u32(&x630, &x631, x3, (arg1[2])); + fiat_p521_mulx_u32(&x632, &x633, x3, (arg1[1])); + fiat_p521_mulx_u32(&x634, &x635, x3, (arg1[0])); + fiat_p521_addcarryx_u32(&x636, &x637, 0x0, x635, x632); + fiat_p521_addcarryx_u32(&x638, &x639, x637, x633, x630); + fiat_p521_addcarryx_u32(&x640, &x641, x639, x631, x628); + fiat_p521_addcarryx_u32(&x642, &x643, x641, x629, x626); + fiat_p521_addcarryx_u32(&x644, &x645, x643, x627, x624); + fiat_p521_addcarryx_u32(&x646, &x647, x645, x625, x622); + fiat_p521_addcarryx_u32(&x648, &x649, x647, x623, x620); + fiat_p521_addcarryx_u32(&x650, &x651, x649, x621, x618); + fiat_p521_addcarryx_u32(&x652, &x653, x651, x619, x616); + fiat_p521_addcarryx_u32(&x654, &x655, x653, x617, x614); + fiat_p521_addcarryx_u32(&x656, &x657, x655, x615, x612); + fiat_p521_addcarryx_u32(&x658, &x659, x657, x613, x610); + fiat_p521_addcarryx_u32(&x660, &x661, x659, x611, x608); + fiat_p521_addcarryx_u32(&x662, &x663, x661, x609, x606); + fiat_p521_addcarryx_u32(&x664, &x665, x663, x607, x604); + fiat_p521_addcarryx_u32(&x666, &x667, x665, x605, x602); + x668 = (x667 + x603); + fiat_p521_addcarryx_u32(&x669, &x670, 0x0, x567, x634); + fiat_p521_addcarryx_u32(&x671, &x672, x670, x569, x636); + fiat_p521_addcarryx_u32(&x673, &x674, x672, x571, x638); + fiat_p521_addcarryx_u32(&x675, &x676, x674, x573, x640); + fiat_p521_addcarryx_u32(&x677, &x678, x676, x575, x642); + fiat_p521_addcarryx_u32(&x679, &x680, x678, x577, x644); + fiat_p521_addcarryx_u32(&x681, &x682, x680, x579, x646); + fiat_p521_addcarryx_u32(&x683, &x684, x682, x581, x648); + fiat_p521_addcarryx_u32(&x685, &x686, x684, x583, x650); + fiat_p521_addcarryx_u32(&x687, &x688, x686, x585, x652); + fiat_p521_addcarryx_u32(&x689, &x690, x688, x587, x654); + fiat_p521_addcarryx_u32(&x691, &x692, x690, x589, x656); + fiat_p521_addcarryx_u32(&x693, &x694, x692, x591, x658); + fiat_p521_addcarryx_u32(&x695, &x696, x694, x593, x660); + fiat_p521_addcarryx_u32(&x697, &x698, x696, x595, x662); + fiat_p521_addcarryx_u32(&x699, &x700, x698, x597, x664); + fiat_p521_addcarryx_u32(&x701, &x702, x700, x599, x666); + fiat_p521_addcarryx_u32(&x703, &x704, x702, x601, x668); + fiat_p521_mulx_u32(&x705, &x706, x669, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x707, &x708, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x709, &x710, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x711, &x712, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x713, &x714, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x715, &x716, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x717, &x718, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x719, &x720, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x721, &x722, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x723, &x724, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x725, &x726, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x727, &x728, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x729, &x730, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x731, &x732, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x733, &x734, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x735, &x736, x669, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x737, &x738, x669, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x739, &x740, 0x0, x738, x735); + fiat_p521_addcarryx_u32(&x741, &x742, x740, x736, x733); + fiat_p521_addcarryx_u32(&x743, &x744, x742, x734, x731); + fiat_p521_addcarryx_u32(&x745, &x746, x744, x732, x729); + fiat_p521_addcarryx_u32(&x747, &x748, x746, x730, x727); + fiat_p521_addcarryx_u32(&x749, &x750, x748, x728, x725); + fiat_p521_addcarryx_u32(&x751, &x752, x750, x726, x723); + fiat_p521_addcarryx_u32(&x753, &x754, x752, x724, x721); + fiat_p521_addcarryx_u32(&x755, &x756, x754, x722, x719); + fiat_p521_addcarryx_u32(&x757, &x758, x756, x720, x717); + fiat_p521_addcarryx_u32(&x759, &x760, x758, x718, x715); + fiat_p521_addcarryx_u32(&x761, &x762, x760, x716, x713); + fiat_p521_addcarryx_u32(&x763, &x764, x762, x714, x711); + fiat_p521_addcarryx_u32(&x765, &x766, x764, x712, x709); + fiat_p521_addcarryx_u32(&x767, &x768, x766, x710, x707); + fiat_p521_addcarryx_u32(&x769, &x770, x768, x708, x705); + x771 = (x770 + x706); + fiat_p521_addcarryx_u32(&x772, &x773, 0x0, x669, x737); + fiat_p521_addcarryx_u32(&x774, &x775, x773, x671, x739); + fiat_p521_addcarryx_u32(&x776, &x777, x775, x673, x741); + fiat_p521_addcarryx_u32(&x778, &x779, x777, x675, x743); + fiat_p521_addcarryx_u32(&x780, &x781, x779, x677, x745); + fiat_p521_addcarryx_u32(&x782, &x783, x781, x679, x747); + fiat_p521_addcarryx_u32(&x784, &x785, x783, x681, x749); + fiat_p521_addcarryx_u32(&x786, &x787, x785, x683, x751); + fiat_p521_addcarryx_u32(&x788, &x789, x787, x685, x753); + fiat_p521_addcarryx_u32(&x790, &x791, x789, x687, x755); + fiat_p521_addcarryx_u32(&x792, &x793, x791, x689, x757); + fiat_p521_addcarryx_u32(&x794, &x795, x793, x691, x759); + fiat_p521_addcarryx_u32(&x796, &x797, x795, x693, x761); + fiat_p521_addcarryx_u32(&x798, &x799, x797, x695, x763); + fiat_p521_addcarryx_u32(&x800, &x801, x799, x697, x765); + fiat_p521_addcarryx_u32(&x802, &x803, x801, x699, x767); + fiat_p521_addcarryx_u32(&x804, &x805, x803, x701, x769); + fiat_p521_addcarryx_u32(&x806, &x807, x805, x703, x771); + x808 = ((uint32_t)x807 + x704); + fiat_p521_mulx_u32(&x809, &x810, x4, (arg1[16])); + fiat_p521_mulx_u32(&x811, &x812, x4, (arg1[15])); + fiat_p521_mulx_u32(&x813, &x814, x4, (arg1[14])); + fiat_p521_mulx_u32(&x815, &x816, x4, (arg1[13])); + fiat_p521_mulx_u32(&x817, &x818, x4, (arg1[12])); + fiat_p521_mulx_u32(&x819, &x820, x4, (arg1[11])); + fiat_p521_mulx_u32(&x821, &x822, x4, (arg1[10])); + fiat_p521_mulx_u32(&x823, &x824, x4, (arg1[9])); + fiat_p521_mulx_u32(&x825, &x826, x4, (arg1[8])); + fiat_p521_mulx_u32(&x827, &x828, x4, (arg1[7])); + fiat_p521_mulx_u32(&x829, &x830, x4, (arg1[6])); + fiat_p521_mulx_u32(&x831, &x832, x4, (arg1[5])); + fiat_p521_mulx_u32(&x833, &x834, x4, (arg1[4])); + fiat_p521_mulx_u32(&x835, &x836, x4, (arg1[3])); + fiat_p521_mulx_u32(&x837, &x838, x4, (arg1[2])); + fiat_p521_mulx_u32(&x839, &x840, x4, (arg1[1])); + fiat_p521_mulx_u32(&x841, &x842, x4, (arg1[0])); + fiat_p521_addcarryx_u32(&x843, &x844, 0x0, x842, x839); + fiat_p521_addcarryx_u32(&x845, &x846, x844, x840, x837); + fiat_p521_addcarryx_u32(&x847, &x848, x846, x838, x835); + fiat_p521_addcarryx_u32(&x849, &x850, x848, x836, x833); + fiat_p521_addcarryx_u32(&x851, &x852, x850, x834, x831); + fiat_p521_addcarryx_u32(&x853, &x854, x852, x832, x829); + fiat_p521_addcarryx_u32(&x855, &x856, x854, x830, x827); + fiat_p521_addcarryx_u32(&x857, &x858, x856, x828, x825); + fiat_p521_addcarryx_u32(&x859, &x860, x858, x826, x823); + fiat_p521_addcarryx_u32(&x861, &x862, x860, x824, x821); + fiat_p521_addcarryx_u32(&x863, &x864, x862, x822, x819); + fiat_p521_addcarryx_u32(&x865, &x866, x864, x820, x817); + fiat_p521_addcarryx_u32(&x867, &x868, x866, x818, x815); + fiat_p521_addcarryx_u32(&x869, &x870, x868, x816, x813); + fiat_p521_addcarryx_u32(&x871, &x872, x870, x814, x811); + fiat_p521_addcarryx_u32(&x873, &x874, x872, x812, x809); + x875 = (x874 + x810); + fiat_p521_addcarryx_u32(&x876, &x877, 0x0, x774, x841); + fiat_p521_addcarryx_u32(&x878, &x879, x877, x776, x843); + fiat_p521_addcarryx_u32(&x880, &x881, x879, x778, x845); + fiat_p521_addcarryx_u32(&x882, &x883, x881, x780, x847); + fiat_p521_addcarryx_u32(&x884, &x885, x883, x782, x849); + fiat_p521_addcarryx_u32(&x886, &x887, x885, x784, x851); + fiat_p521_addcarryx_u32(&x888, &x889, x887, x786, x853); + fiat_p521_addcarryx_u32(&x890, &x891, x889, x788, x855); + fiat_p521_addcarryx_u32(&x892, &x893, x891, x790, x857); + fiat_p521_addcarryx_u32(&x894, &x895, x893, x792, x859); + fiat_p521_addcarryx_u32(&x896, &x897, x895, x794, x861); + fiat_p521_addcarryx_u32(&x898, &x899, x897, x796, x863); + fiat_p521_addcarryx_u32(&x900, &x901, x899, x798, x865); + fiat_p521_addcarryx_u32(&x902, &x903, x901, x800, x867); + fiat_p521_addcarryx_u32(&x904, &x905, x903, x802, x869); + fiat_p521_addcarryx_u32(&x906, &x907, x905, x804, x871); + fiat_p521_addcarryx_u32(&x908, &x909, x907, x806, x873); + fiat_p521_addcarryx_u32(&x910, &x911, x909, x808, x875); + fiat_p521_mulx_u32(&x912, &x913, x876, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x914, &x915, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x916, &x917, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x918, &x919, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x920, &x921, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x922, &x923, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x924, &x925, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x926, &x927, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x928, &x929, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x930, &x931, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x932, &x933, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x934, &x935, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x936, &x937, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x938, &x939, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x940, &x941, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x942, &x943, x876, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x944, &x945, x876, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x946, &x947, 0x0, x945, x942); + fiat_p521_addcarryx_u32(&x948, &x949, x947, x943, x940); + fiat_p521_addcarryx_u32(&x950, &x951, x949, x941, x938); + fiat_p521_addcarryx_u32(&x952, &x953, x951, x939, x936); + fiat_p521_addcarryx_u32(&x954, &x955, x953, x937, x934); + fiat_p521_addcarryx_u32(&x956, &x957, x955, x935, x932); + fiat_p521_addcarryx_u32(&x958, &x959, x957, x933, x930); + fiat_p521_addcarryx_u32(&x960, &x961, x959, x931, x928); + fiat_p521_addcarryx_u32(&x962, &x963, x961, x929, x926); + fiat_p521_addcarryx_u32(&x964, &x965, x963, x927, x924); + fiat_p521_addcarryx_u32(&x966, &x967, x965, x925, x922); + fiat_p521_addcarryx_u32(&x968, &x969, x967, x923, x920); + fiat_p521_addcarryx_u32(&x970, &x971, x969, x921, x918); + fiat_p521_addcarryx_u32(&x972, &x973, x971, x919, x916); + fiat_p521_addcarryx_u32(&x974, &x975, x973, x917, x914); + fiat_p521_addcarryx_u32(&x976, &x977, x975, x915, x912); + x978 = (x977 + x913); + fiat_p521_addcarryx_u32(&x979, &x980, 0x0, x876, x944); + fiat_p521_addcarryx_u32(&x981, &x982, x980, x878, x946); + fiat_p521_addcarryx_u32(&x983, &x984, x982, x880, x948); + fiat_p521_addcarryx_u32(&x985, &x986, x984, x882, x950); + fiat_p521_addcarryx_u32(&x987, &x988, x986, x884, x952); + fiat_p521_addcarryx_u32(&x989, &x990, x988, x886, x954); + fiat_p521_addcarryx_u32(&x991, &x992, x990, x888, x956); + fiat_p521_addcarryx_u32(&x993, &x994, x992, x890, x958); + fiat_p521_addcarryx_u32(&x995, &x996, x994, x892, x960); + fiat_p521_addcarryx_u32(&x997, &x998, x996, x894, x962); + fiat_p521_addcarryx_u32(&x999, &x1000, x998, x896, x964); + fiat_p521_addcarryx_u32(&x1001, &x1002, x1000, x898, x966); + fiat_p521_addcarryx_u32(&x1003, &x1004, x1002, x900, x968); + fiat_p521_addcarryx_u32(&x1005, &x1006, x1004, x902, x970); + fiat_p521_addcarryx_u32(&x1007, &x1008, x1006, x904, x972); + fiat_p521_addcarryx_u32(&x1009, &x1010, x1008, x906, x974); + fiat_p521_addcarryx_u32(&x1011, &x1012, x1010, x908, x976); + fiat_p521_addcarryx_u32(&x1013, &x1014, x1012, x910, x978); + x1015 = ((uint32_t)x1014 + x911); + fiat_p521_mulx_u32(&x1016, &x1017, x5, (arg1[16])); + fiat_p521_mulx_u32(&x1018, &x1019, x5, (arg1[15])); + fiat_p521_mulx_u32(&x1020, &x1021, x5, (arg1[14])); + fiat_p521_mulx_u32(&x1022, &x1023, x5, (arg1[13])); + fiat_p521_mulx_u32(&x1024, &x1025, x5, (arg1[12])); + fiat_p521_mulx_u32(&x1026, &x1027, x5, (arg1[11])); + fiat_p521_mulx_u32(&x1028, &x1029, x5, (arg1[10])); + fiat_p521_mulx_u32(&x1030, &x1031, x5, (arg1[9])); + fiat_p521_mulx_u32(&x1032, &x1033, x5, (arg1[8])); + fiat_p521_mulx_u32(&x1034, &x1035, x5, (arg1[7])); + fiat_p521_mulx_u32(&x1036, &x1037, x5, (arg1[6])); + fiat_p521_mulx_u32(&x1038, &x1039, x5, (arg1[5])); + fiat_p521_mulx_u32(&x1040, &x1041, x5, (arg1[4])); + fiat_p521_mulx_u32(&x1042, &x1043, x5, (arg1[3])); + fiat_p521_mulx_u32(&x1044, &x1045, x5, (arg1[2])); + fiat_p521_mulx_u32(&x1046, &x1047, x5, (arg1[1])); + fiat_p521_mulx_u32(&x1048, &x1049, x5, (arg1[0])); + fiat_p521_addcarryx_u32(&x1050, &x1051, 0x0, x1049, x1046); + fiat_p521_addcarryx_u32(&x1052, &x1053, x1051, x1047, x1044); + fiat_p521_addcarryx_u32(&x1054, &x1055, x1053, x1045, x1042); + fiat_p521_addcarryx_u32(&x1056, &x1057, x1055, x1043, x1040); + fiat_p521_addcarryx_u32(&x1058, &x1059, x1057, x1041, x1038); + fiat_p521_addcarryx_u32(&x1060, &x1061, x1059, x1039, x1036); + fiat_p521_addcarryx_u32(&x1062, &x1063, x1061, x1037, x1034); + fiat_p521_addcarryx_u32(&x1064, &x1065, x1063, x1035, x1032); + fiat_p521_addcarryx_u32(&x1066, &x1067, x1065, x1033, x1030); + fiat_p521_addcarryx_u32(&x1068, &x1069, x1067, x1031, x1028); + fiat_p521_addcarryx_u32(&x1070, &x1071, x1069, x1029, x1026); + fiat_p521_addcarryx_u32(&x1072, &x1073, x1071, x1027, x1024); + fiat_p521_addcarryx_u32(&x1074, &x1075, x1073, x1025, x1022); + fiat_p521_addcarryx_u32(&x1076, &x1077, x1075, x1023, x1020); + fiat_p521_addcarryx_u32(&x1078, &x1079, x1077, x1021, x1018); + fiat_p521_addcarryx_u32(&x1080, &x1081, x1079, x1019, x1016); + x1082 = (x1081 + x1017); + fiat_p521_addcarryx_u32(&x1083, &x1084, 0x0, x981, x1048); + fiat_p521_addcarryx_u32(&x1085, &x1086, x1084, x983, x1050); + fiat_p521_addcarryx_u32(&x1087, &x1088, x1086, x985, x1052); + fiat_p521_addcarryx_u32(&x1089, &x1090, x1088, x987, x1054); + fiat_p521_addcarryx_u32(&x1091, &x1092, x1090, x989, x1056); + fiat_p521_addcarryx_u32(&x1093, &x1094, x1092, x991, x1058); + fiat_p521_addcarryx_u32(&x1095, &x1096, x1094, x993, x1060); + fiat_p521_addcarryx_u32(&x1097, &x1098, x1096, x995, x1062); + fiat_p521_addcarryx_u32(&x1099, &x1100, x1098, x997, x1064); + fiat_p521_addcarryx_u32(&x1101, &x1102, x1100, x999, x1066); + fiat_p521_addcarryx_u32(&x1103, &x1104, x1102, x1001, x1068); + fiat_p521_addcarryx_u32(&x1105, &x1106, x1104, x1003, x1070); + fiat_p521_addcarryx_u32(&x1107, &x1108, x1106, x1005, x1072); + fiat_p521_addcarryx_u32(&x1109, &x1110, x1108, x1007, x1074); + fiat_p521_addcarryx_u32(&x1111, &x1112, x1110, x1009, x1076); + fiat_p521_addcarryx_u32(&x1113, &x1114, x1112, x1011, x1078); + fiat_p521_addcarryx_u32(&x1115, &x1116, x1114, x1013, x1080); + fiat_p521_addcarryx_u32(&x1117, &x1118, x1116, x1015, x1082); + fiat_p521_mulx_u32(&x1119, &x1120, x1083, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1121, &x1122, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1123, &x1124, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1125, &x1126, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1127, &x1128, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1129, &x1130, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1131, &x1132, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1133, &x1134, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1135, &x1136, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1137, &x1138, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1139, &x1140, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1141, &x1142, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1143, &x1144, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1145, &x1146, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1147, &x1148, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1149, &x1150, x1083, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1151, &x1152, x1083, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1153, &x1154, 0x0, x1152, x1149); + fiat_p521_addcarryx_u32(&x1155, &x1156, x1154, x1150, x1147); + fiat_p521_addcarryx_u32(&x1157, &x1158, x1156, x1148, x1145); + fiat_p521_addcarryx_u32(&x1159, &x1160, x1158, x1146, x1143); + fiat_p521_addcarryx_u32(&x1161, &x1162, x1160, x1144, x1141); + fiat_p521_addcarryx_u32(&x1163, &x1164, x1162, x1142, x1139); + fiat_p521_addcarryx_u32(&x1165, &x1166, x1164, x1140, x1137); + fiat_p521_addcarryx_u32(&x1167, &x1168, x1166, x1138, x1135); + fiat_p521_addcarryx_u32(&x1169, &x1170, x1168, x1136, x1133); + fiat_p521_addcarryx_u32(&x1171, &x1172, x1170, x1134, x1131); + fiat_p521_addcarryx_u32(&x1173, &x1174, x1172, x1132, x1129); + fiat_p521_addcarryx_u32(&x1175, &x1176, x1174, x1130, x1127); + fiat_p521_addcarryx_u32(&x1177, &x1178, x1176, x1128, x1125); + fiat_p521_addcarryx_u32(&x1179, &x1180, x1178, x1126, x1123); + fiat_p521_addcarryx_u32(&x1181, &x1182, x1180, x1124, x1121); + fiat_p521_addcarryx_u32(&x1183, &x1184, x1182, x1122, x1119); + x1185 = (x1184 + x1120); + fiat_p521_addcarryx_u32(&x1186, &x1187, 0x0, x1083, x1151); + fiat_p521_addcarryx_u32(&x1188, &x1189, x1187, x1085, x1153); + fiat_p521_addcarryx_u32(&x1190, &x1191, x1189, x1087, x1155); + fiat_p521_addcarryx_u32(&x1192, &x1193, x1191, x1089, x1157); + fiat_p521_addcarryx_u32(&x1194, &x1195, x1193, x1091, x1159); + fiat_p521_addcarryx_u32(&x1196, &x1197, x1195, x1093, x1161); + fiat_p521_addcarryx_u32(&x1198, &x1199, x1197, x1095, x1163); + fiat_p521_addcarryx_u32(&x1200, &x1201, x1199, x1097, x1165); + fiat_p521_addcarryx_u32(&x1202, &x1203, x1201, x1099, x1167); + fiat_p521_addcarryx_u32(&x1204, &x1205, x1203, x1101, x1169); + fiat_p521_addcarryx_u32(&x1206, &x1207, x1205, x1103, x1171); + fiat_p521_addcarryx_u32(&x1208, &x1209, x1207, x1105, x1173); + fiat_p521_addcarryx_u32(&x1210, &x1211, x1209, x1107, x1175); + fiat_p521_addcarryx_u32(&x1212, &x1213, x1211, x1109, x1177); + fiat_p521_addcarryx_u32(&x1214, &x1215, x1213, x1111, x1179); + fiat_p521_addcarryx_u32(&x1216, &x1217, x1215, x1113, x1181); + fiat_p521_addcarryx_u32(&x1218, &x1219, x1217, x1115, x1183); + fiat_p521_addcarryx_u32(&x1220, &x1221, x1219, x1117, x1185); + x1222 = ((uint32_t)x1221 + x1118); + fiat_p521_mulx_u32(&x1223, &x1224, x6, (arg1[16])); + fiat_p521_mulx_u32(&x1225, &x1226, x6, (arg1[15])); + fiat_p521_mulx_u32(&x1227, &x1228, x6, (arg1[14])); + fiat_p521_mulx_u32(&x1229, &x1230, x6, (arg1[13])); + fiat_p521_mulx_u32(&x1231, &x1232, x6, (arg1[12])); + fiat_p521_mulx_u32(&x1233, &x1234, x6, (arg1[11])); + fiat_p521_mulx_u32(&x1235, &x1236, x6, (arg1[10])); + fiat_p521_mulx_u32(&x1237, &x1238, x6, (arg1[9])); + fiat_p521_mulx_u32(&x1239, &x1240, x6, (arg1[8])); + fiat_p521_mulx_u32(&x1241, &x1242, x6, (arg1[7])); + fiat_p521_mulx_u32(&x1243, &x1244, x6, (arg1[6])); + fiat_p521_mulx_u32(&x1245, &x1246, x6, (arg1[5])); + fiat_p521_mulx_u32(&x1247, &x1248, x6, (arg1[4])); + fiat_p521_mulx_u32(&x1249, &x1250, x6, (arg1[3])); + fiat_p521_mulx_u32(&x1251, &x1252, x6, (arg1[2])); + fiat_p521_mulx_u32(&x1253, &x1254, x6, (arg1[1])); + fiat_p521_mulx_u32(&x1255, &x1256, x6, (arg1[0])); + fiat_p521_addcarryx_u32(&x1257, &x1258, 0x0, x1256, x1253); + fiat_p521_addcarryx_u32(&x1259, &x1260, x1258, x1254, x1251); + fiat_p521_addcarryx_u32(&x1261, &x1262, x1260, x1252, x1249); + fiat_p521_addcarryx_u32(&x1263, &x1264, x1262, x1250, x1247); + fiat_p521_addcarryx_u32(&x1265, &x1266, x1264, x1248, x1245); + fiat_p521_addcarryx_u32(&x1267, &x1268, x1266, x1246, x1243); + fiat_p521_addcarryx_u32(&x1269, &x1270, x1268, x1244, x1241); + fiat_p521_addcarryx_u32(&x1271, &x1272, x1270, x1242, x1239); + fiat_p521_addcarryx_u32(&x1273, &x1274, x1272, x1240, x1237); + fiat_p521_addcarryx_u32(&x1275, &x1276, x1274, x1238, x1235); + fiat_p521_addcarryx_u32(&x1277, &x1278, x1276, x1236, x1233); + fiat_p521_addcarryx_u32(&x1279, &x1280, x1278, x1234, x1231); + fiat_p521_addcarryx_u32(&x1281, &x1282, x1280, x1232, x1229); + fiat_p521_addcarryx_u32(&x1283, &x1284, x1282, x1230, x1227); + fiat_p521_addcarryx_u32(&x1285, &x1286, x1284, x1228, x1225); + fiat_p521_addcarryx_u32(&x1287, &x1288, x1286, x1226, x1223); + x1289 = (x1288 + x1224); + fiat_p521_addcarryx_u32(&x1290, &x1291, 0x0, x1188, x1255); + fiat_p521_addcarryx_u32(&x1292, &x1293, x1291, x1190, x1257); + fiat_p521_addcarryx_u32(&x1294, &x1295, x1293, x1192, x1259); + fiat_p521_addcarryx_u32(&x1296, &x1297, x1295, x1194, x1261); + fiat_p521_addcarryx_u32(&x1298, &x1299, x1297, x1196, x1263); + fiat_p521_addcarryx_u32(&x1300, &x1301, x1299, x1198, x1265); + fiat_p521_addcarryx_u32(&x1302, &x1303, x1301, x1200, x1267); + fiat_p521_addcarryx_u32(&x1304, &x1305, x1303, x1202, x1269); + fiat_p521_addcarryx_u32(&x1306, &x1307, x1305, x1204, x1271); + fiat_p521_addcarryx_u32(&x1308, &x1309, x1307, x1206, x1273); + fiat_p521_addcarryx_u32(&x1310, &x1311, x1309, x1208, x1275); + fiat_p521_addcarryx_u32(&x1312, &x1313, x1311, x1210, x1277); + fiat_p521_addcarryx_u32(&x1314, &x1315, x1313, x1212, x1279); + fiat_p521_addcarryx_u32(&x1316, &x1317, x1315, x1214, x1281); + fiat_p521_addcarryx_u32(&x1318, &x1319, x1317, x1216, x1283); + fiat_p521_addcarryx_u32(&x1320, &x1321, x1319, x1218, x1285); + fiat_p521_addcarryx_u32(&x1322, &x1323, x1321, x1220, x1287); + fiat_p521_addcarryx_u32(&x1324, &x1325, x1323, x1222, x1289); + fiat_p521_mulx_u32(&x1326, &x1327, x1290, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1328, &x1329, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1330, &x1331, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1332, &x1333, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1334, &x1335, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1336, &x1337, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1338, &x1339, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1340, &x1341, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1342, &x1343, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1344, &x1345, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1346, &x1347, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1348, &x1349, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1350, &x1351, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1352, &x1353, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1354, &x1355, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1356, &x1357, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1358, &x1359, x1290, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1360, &x1361, 0x0, x1359, x1356); + fiat_p521_addcarryx_u32(&x1362, &x1363, x1361, x1357, x1354); + fiat_p521_addcarryx_u32(&x1364, &x1365, x1363, x1355, x1352); + fiat_p521_addcarryx_u32(&x1366, &x1367, x1365, x1353, x1350); + fiat_p521_addcarryx_u32(&x1368, &x1369, x1367, x1351, x1348); + fiat_p521_addcarryx_u32(&x1370, &x1371, x1369, x1349, x1346); + fiat_p521_addcarryx_u32(&x1372, &x1373, x1371, x1347, x1344); + fiat_p521_addcarryx_u32(&x1374, &x1375, x1373, x1345, x1342); + fiat_p521_addcarryx_u32(&x1376, &x1377, x1375, x1343, x1340); + fiat_p521_addcarryx_u32(&x1378, &x1379, x1377, x1341, x1338); + fiat_p521_addcarryx_u32(&x1380, &x1381, x1379, x1339, x1336); + fiat_p521_addcarryx_u32(&x1382, &x1383, x1381, x1337, x1334); + fiat_p521_addcarryx_u32(&x1384, &x1385, x1383, x1335, x1332); + fiat_p521_addcarryx_u32(&x1386, &x1387, x1385, x1333, x1330); + fiat_p521_addcarryx_u32(&x1388, &x1389, x1387, x1331, x1328); + fiat_p521_addcarryx_u32(&x1390, &x1391, x1389, x1329, x1326); + x1392 = (x1391 + x1327); + fiat_p521_addcarryx_u32(&x1393, &x1394, 0x0, x1290, x1358); + fiat_p521_addcarryx_u32(&x1395, &x1396, x1394, x1292, x1360); + fiat_p521_addcarryx_u32(&x1397, &x1398, x1396, x1294, x1362); + fiat_p521_addcarryx_u32(&x1399, &x1400, x1398, x1296, x1364); + fiat_p521_addcarryx_u32(&x1401, &x1402, x1400, x1298, x1366); + fiat_p521_addcarryx_u32(&x1403, &x1404, x1402, x1300, x1368); + fiat_p521_addcarryx_u32(&x1405, &x1406, x1404, x1302, x1370); + fiat_p521_addcarryx_u32(&x1407, &x1408, x1406, x1304, x1372); + fiat_p521_addcarryx_u32(&x1409, &x1410, x1408, x1306, x1374); + fiat_p521_addcarryx_u32(&x1411, &x1412, x1410, x1308, x1376); + fiat_p521_addcarryx_u32(&x1413, &x1414, x1412, x1310, x1378); + fiat_p521_addcarryx_u32(&x1415, &x1416, x1414, x1312, x1380); + fiat_p521_addcarryx_u32(&x1417, &x1418, x1416, x1314, x1382); + fiat_p521_addcarryx_u32(&x1419, &x1420, x1418, x1316, x1384); + fiat_p521_addcarryx_u32(&x1421, &x1422, x1420, x1318, x1386); + fiat_p521_addcarryx_u32(&x1423, &x1424, x1422, x1320, x1388); + fiat_p521_addcarryx_u32(&x1425, &x1426, x1424, x1322, x1390); + fiat_p521_addcarryx_u32(&x1427, &x1428, x1426, x1324, x1392); + x1429 = ((uint32_t)x1428 + x1325); + fiat_p521_mulx_u32(&x1430, &x1431, x7, (arg1[16])); + fiat_p521_mulx_u32(&x1432, &x1433, x7, (arg1[15])); + fiat_p521_mulx_u32(&x1434, &x1435, x7, (arg1[14])); + fiat_p521_mulx_u32(&x1436, &x1437, x7, (arg1[13])); + fiat_p521_mulx_u32(&x1438, &x1439, x7, (arg1[12])); + fiat_p521_mulx_u32(&x1440, &x1441, x7, (arg1[11])); + fiat_p521_mulx_u32(&x1442, &x1443, x7, (arg1[10])); + fiat_p521_mulx_u32(&x1444, &x1445, x7, (arg1[9])); + fiat_p521_mulx_u32(&x1446, &x1447, x7, (arg1[8])); + fiat_p521_mulx_u32(&x1448, &x1449, x7, (arg1[7])); + fiat_p521_mulx_u32(&x1450, &x1451, x7, (arg1[6])); + fiat_p521_mulx_u32(&x1452, &x1453, x7, (arg1[5])); + fiat_p521_mulx_u32(&x1454, &x1455, x7, (arg1[4])); + fiat_p521_mulx_u32(&x1456, &x1457, x7, (arg1[3])); + fiat_p521_mulx_u32(&x1458, &x1459, x7, (arg1[2])); + fiat_p521_mulx_u32(&x1460, &x1461, x7, (arg1[1])); + fiat_p521_mulx_u32(&x1462, &x1463, x7, (arg1[0])); + fiat_p521_addcarryx_u32(&x1464, &x1465, 0x0, x1463, x1460); + fiat_p521_addcarryx_u32(&x1466, &x1467, x1465, x1461, x1458); + fiat_p521_addcarryx_u32(&x1468, &x1469, x1467, x1459, x1456); + fiat_p521_addcarryx_u32(&x1470, &x1471, x1469, x1457, x1454); + fiat_p521_addcarryx_u32(&x1472, &x1473, x1471, x1455, x1452); + fiat_p521_addcarryx_u32(&x1474, &x1475, x1473, x1453, x1450); + fiat_p521_addcarryx_u32(&x1476, &x1477, x1475, x1451, x1448); + fiat_p521_addcarryx_u32(&x1478, &x1479, x1477, x1449, x1446); + fiat_p521_addcarryx_u32(&x1480, &x1481, x1479, x1447, x1444); + fiat_p521_addcarryx_u32(&x1482, &x1483, x1481, x1445, x1442); + fiat_p521_addcarryx_u32(&x1484, &x1485, x1483, x1443, x1440); + fiat_p521_addcarryx_u32(&x1486, &x1487, x1485, x1441, x1438); + fiat_p521_addcarryx_u32(&x1488, &x1489, x1487, x1439, x1436); + fiat_p521_addcarryx_u32(&x1490, &x1491, x1489, x1437, x1434); + fiat_p521_addcarryx_u32(&x1492, &x1493, x1491, x1435, x1432); + fiat_p521_addcarryx_u32(&x1494, &x1495, x1493, x1433, x1430); + x1496 = (x1495 + x1431); + fiat_p521_addcarryx_u32(&x1497, &x1498, 0x0, x1395, x1462); + fiat_p521_addcarryx_u32(&x1499, &x1500, x1498, x1397, x1464); + fiat_p521_addcarryx_u32(&x1501, &x1502, x1500, x1399, x1466); + fiat_p521_addcarryx_u32(&x1503, &x1504, x1502, x1401, x1468); + fiat_p521_addcarryx_u32(&x1505, &x1506, x1504, x1403, x1470); + fiat_p521_addcarryx_u32(&x1507, &x1508, x1506, x1405, x1472); + fiat_p521_addcarryx_u32(&x1509, &x1510, x1508, x1407, x1474); + fiat_p521_addcarryx_u32(&x1511, &x1512, x1510, x1409, x1476); + fiat_p521_addcarryx_u32(&x1513, &x1514, x1512, x1411, x1478); + fiat_p521_addcarryx_u32(&x1515, &x1516, x1514, x1413, x1480); + fiat_p521_addcarryx_u32(&x1517, &x1518, x1516, x1415, x1482); + fiat_p521_addcarryx_u32(&x1519, &x1520, x1518, x1417, x1484); + fiat_p521_addcarryx_u32(&x1521, &x1522, x1520, x1419, x1486); + fiat_p521_addcarryx_u32(&x1523, &x1524, x1522, x1421, x1488); + fiat_p521_addcarryx_u32(&x1525, &x1526, x1524, x1423, x1490); + fiat_p521_addcarryx_u32(&x1527, &x1528, x1526, x1425, x1492); + fiat_p521_addcarryx_u32(&x1529, &x1530, x1528, x1427, x1494); + fiat_p521_addcarryx_u32(&x1531, &x1532, x1530, x1429, x1496); + fiat_p521_mulx_u32(&x1533, &x1534, x1497, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1535, &x1536, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1537, &x1538, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1539, &x1540, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1541, &x1542, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1543, &x1544, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1545, &x1546, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1547, &x1548, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1549, &x1550, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1551, &x1552, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1553, &x1554, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1555, &x1556, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1557, &x1558, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1559, &x1560, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1561, &x1562, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1563, &x1564, x1497, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1565, &x1566, x1497, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1567, &x1568, 0x0, x1566, x1563); + fiat_p521_addcarryx_u32(&x1569, &x1570, x1568, x1564, x1561); + fiat_p521_addcarryx_u32(&x1571, &x1572, x1570, x1562, x1559); + fiat_p521_addcarryx_u32(&x1573, &x1574, x1572, x1560, x1557); + fiat_p521_addcarryx_u32(&x1575, &x1576, x1574, x1558, x1555); + fiat_p521_addcarryx_u32(&x1577, &x1578, x1576, x1556, x1553); + fiat_p521_addcarryx_u32(&x1579, &x1580, x1578, x1554, x1551); + fiat_p521_addcarryx_u32(&x1581, &x1582, x1580, x1552, x1549); + fiat_p521_addcarryx_u32(&x1583, &x1584, x1582, x1550, x1547); + fiat_p521_addcarryx_u32(&x1585, &x1586, x1584, x1548, x1545); + fiat_p521_addcarryx_u32(&x1587, &x1588, x1586, x1546, x1543); + fiat_p521_addcarryx_u32(&x1589, &x1590, x1588, x1544, x1541); + fiat_p521_addcarryx_u32(&x1591, &x1592, x1590, x1542, x1539); + fiat_p521_addcarryx_u32(&x1593, &x1594, x1592, x1540, x1537); + fiat_p521_addcarryx_u32(&x1595, &x1596, x1594, x1538, x1535); + fiat_p521_addcarryx_u32(&x1597, &x1598, x1596, x1536, x1533); + x1599 = (x1598 + x1534); + fiat_p521_addcarryx_u32(&x1600, &x1601, 0x0, x1497, x1565); + fiat_p521_addcarryx_u32(&x1602, &x1603, x1601, x1499, x1567); + fiat_p521_addcarryx_u32(&x1604, &x1605, x1603, x1501, x1569); + fiat_p521_addcarryx_u32(&x1606, &x1607, x1605, x1503, x1571); + fiat_p521_addcarryx_u32(&x1608, &x1609, x1607, x1505, x1573); + fiat_p521_addcarryx_u32(&x1610, &x1611, x1609, x1507, x1575); + fiat_p521_addcarryx_u32(&x1612, &x1613, x1611, x1509, x1577); + fiat_p521_addcarryx_u32(&x1614, &x1615, x1613, x1511, x1579); + fiat_p521_addcarryx_u32(&x1616, &x1617, x1615, x1513, x1581); + fiat_p521_addcarryx_u32(&x1618, &x1619, x1617, x1515, x1583); + fiat_p521_addcarryx_u32(&x1620, &x1621, x1619, x1517, x1585); + fiat_p521_addcarryx_u32(&x1622, &x1623, x1621, x1519, x1587); + fiat_p521_addcarryx_u32(&x1624, &x1625, x1623, x1521, x1589); + fiat_p521_addcarryx_u32(&x1626, &x1627, x1625, x1523, x1591); + fiat_p521_addcarryx_u32(&x1628, &x1629, x1627, x1525, x1593); + fiat_p521_addcarryx_u32(&x1630, &x1631, x1629, x1527, x1595); + fiat_p521_addcarryx_u32(&x1632, &x1633, x1631, x1529, x1597); + fiat_p521_addcarryx_u32(&x1634, &x1635, x1633, x1531, x1599); + x1636 = ((uint32_t)x1635 + x1532); + fiat_p521_mulx_u32(&x1637, &x1638, x8, (arg1[16])); + fiat_p521_mulx_u32(&x1639, &x1640, x8, (arg1[15])); + fiat_p521_mulx_u32(&x1641, &x1642, x8, (arg1[14])); + fiat_p521_mulx_u32(&x1643, &x1644, x8, (arg1[13])); + fiat_p521_mulx_u32(&x1645, &x1646, x8, (arg1[12])); + fiat_p521_mulx_u32(&x1647, &x1648, x8, (arg1[11])); + fiat_p521_mulx_u32(&x1649, &x1650, x8, (arg1[10])); + fiat_p521_mulx_u32(&x1651, &x1652, x8, (arg1[9])); + fiat_p521_mulx_u32(&x1653, &x1654, x8, (arg1[8])); + fiat_p521_mulx_u32(&x1655, &x1656, x8, (arg1[7])); + fiat_p521_mulx_u32(&x1657, &x1658, x8, (arg1[6])); + fiat_p521_mulx_u32(&x1659, &x1660, x8, (arg1[5])); + fiat_p521_mulx_u32(&x1661, &x1662, x8, (arg1[4])); + fiat_p521_mulx_u32(&x1663, &x1664, x8, (arg1[3])); + fiat_p521_mulx_u32(&x1665, &x1666, x8, (arg1[2])); + fiat_p521_mulx_u32(&x1667, &x1668, x8, (arg1[1])); + fiat_p521_mulx_u32(&x1669, &x1670, x8, (arg1[0])); + fiat_p521_addcarryx_u32(&x1671, &x1672, 0x0, x1670, x1667); + fiat_p521_addcarryx_u32(&x1673, &x1674, x1672, x1668, x1665); + fiat_p521_addcarryx_u32(&x1675, &x1676, x1674, x1666, x1663); + fiat_p521_addcarryx_u32(&x1677, &x1678, x1676, x1664, x1661); + fiat_p521_addcarryx_u32(&x1679, &x1680, x1678, x1662, x1659); + fiat_p521_addcarryx_u32(&x1681, &x1682, x1680, x1660, x1657); + fiat_p521_addcarryx_u32(&x1683, &x1684, x1682, x1658, x1655); + fiat_p521_addcarryx_u32(&x1685, &x1686, x1684, x1656, x1653); + fiat_p521_addcarryx_u32(&x1687, &x1688, x1686, x1654, x1651); + fiat_p521_addcarryx_u32(&x1689, &x1690, x1688, x1652, x1649); + fiat_p521_addcarryx_u32(&x1691, &x1692, x1690, x1650, x1647); + fiat_p521_addcarryx_u32(&x1693, &x1694, x1692, x1648, x1645); + fiat_p521_addcarryx_u32(&x1695, &x1696, x1694, x1646, x1643); + fiat_p521_addcarryx_u32(&x1697, &x1698, x1696, x1644, x1641); + fiat_p521_addcarryx_u32(&x1699, &x1700, x1698, x1642, x1639); + fiat_p521_addcarryx_u32(&x1701, &x1702, x1700, x1640, x1637); + x1703 = (x1702 + x1638); + fiat_p521_addcarryx_u32(&x1704, &x1705, 0x0, x1602, x1669); + fiat_p521_addcarryx_u32(&x1706, &x1707, x1705, x1604, x1671); + fiat_p521_addcarryx_u32(&x1708, &x1709, x1707, x1606, x1673); + fiat_p521_addcarryx_u32(&x1710, &x1711, x1709, x1608, x1675); + fiat_p521_addcarryx_u32(&x1712, &x1713, x1711, x1610, x1677); + fiat_p521_addcarryx_u32(&x1714, &x1715, x1713, x1612, x1679); + fiat_p521_addcarryx_u32(&x1716, &x1717, x1715, x1614, x1681); + fiat_p521_addcarryx_u32(&x1718, &x1719, x1717, x1616, x1683); + fiat_p521_addcarryx_u32(&x1720, &x1721, x1719, x1618, x1685); + fiat_p521_addcarryx_u32(&x1722, &x1723, x1721, x1620, x1687); + fiat_p521_addcarryx_u32(&x1724, &x1725, x1723, x1622, x1689); + fiat_p521_addcarryx_u32(&x1726, &x1727, x1725, x1624, x1691); + fiat_p521_addcarryx_u32(&x1728, &x1729, x1727, x1626, x1693); + fiat_p521_addcarryx_u32(&x1730, &x1731, x1729, x1628, x1695); + fiat_p521_addcarryx_u32(&x1732, &x1733, x1731, x1630, x1697); + fiat_p521_addcarryx_u32(&x1734, &x1735, x1733, x1632, x1699); + fiat_p521_addcarryx_u32(&x1736, &x1737, x1735, x1634, x1701); + fiat_p521_addcarryx_u32(&x1738, &x1739, x1737, x1636, x1703); + fiat_p521_mulx_u32(&x1740, &x1741, x1704, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1742, &x1743, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1744, &x1745, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1746, &x1747, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1748, &x1749, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1750, &x1751, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1752, &x1753, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1754, &x1755, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1756, &x1757, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1758, &x1759, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1760, &x1761, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1762, &x1763, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1764, &x1765, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1766, &x1767, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1768, &x1769, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1770, &x1771, x1704, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1772, &x1773, x1704, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1774, &x1775, 0x0, x1773, x1770); + fiat_p521_addcarryx_u32(&x1776, &x1777, x1775, x1771, x1768); + fiat_p521_addcarryx_u32(&x1778, &x1779, x1777, x1769, x1766); + fiat_p521_addcarryx_u32(&x1780, &x1781, x1779, x1767, x1764); + fiat_p521_addcarryx_u32(&x1782, &x1783, x1781, x1765, x1762); + fiat_p521_addcarryx_u32(&x1784, &x1785, x1783, x1763, x1760); + fiat_p521_addcarryx_u32(&x1786, &x1787, x1785, x1761, x1758); + fiat_p521_addcarryx_u32(&x1788, &x1789, x1787, x1759, x1756); + fiat_p521_addcarryx_u32(&x1790, &x1791, x1789, x1757, x1754); + fiat_p521_addcarryx_u32(&x1792, &x1793, x1791, x1755, x1752); + fiat_p521_addcarryx_u32(&x1794, &x1795, x1793, x1753, x1750); + fiat_p521_addcarryx_u32(&x1796, &x1797, x1795, x1751, x1748); + fiat_p521_addcarryx_u32(&x1798, &x1799, x1797, x1749, x1746); + fiat_p521_addcarryx_u32(&x1800, &x1801, x1799, x1747, x1744); + fiat_p521_addcarryx_u32(&x1802, &x1803, x1801, x1745, x1742); + fiat_p521_addcarryx_u32(&x1804, &x1805, x1803, x1743, x1740); + x1806 = (x1805 + x1741); + fiat_p521_addcarryx_u32(&x1807, &x1808, 0x0, x1704, x1772); + fiat_p521_addcarryx_u32(&x1809, &x1810, x1808, x1706, x1774); + fiat_p521_addcarryx_u32(&x1811, &x1812, x1810, x1708, x1776); + fiat_p521_addcarryx_u32(&x1813, &x1814, x1812, x1710, x1778); + fiat_p521_addcarryx_u32(&x1815, &x1816, x1814, x1712, x1780); + fiat_p521_addcarryx_u32(&x1817, &x1818, x1816, x1714, x1782); + fiat_p521_addcarryx_u32(&x1819, &x1820, x1818, x1716, x1784); + fiat_p521_addcarryx_u32(&x1821, &x1822, x1820, x1718, x1786); + fiat_p521_addcarryx_u32(&x1823, &x1824, x1822, x1720, x1788); + fiat_p521_addcarryx_u32(&x1825, &x1826, x1824, x1722, x1790); + fiat_p521_addcarryx_u32(&x1827, &x1828, x1826, x1724, x1792); + fiat_p521_addcarryx_u32(&x1829, &x1830, x1828, x1726, x1794); + fiat_p521_addcarryx_u32(&x1831, &x1832, x1830, x1728, x1796); + fiat_p521_addcarryx_u32(&x1833, &x1834, x1832, x1730, x1798); + fiat_p521_addcarryx_u32(&x1835, &x1836, x1834, x1732, x1800); + fiat_p521_addcarryx_u32(&x1837, &x1838, x1836, x1734, x1802); + fiat_p521_addcarryx_u32(&x1839, &x1840, x1838, x1736, x1804); + fiat_p521_addcarryx_u32(&x1841, &x1842, x1840, x1738, x1806); + x1843 = ((uint32_t)x1842 + x1739); + fiat_p521_mulx_u32(&x1844, &x1845, x9, (arg1[16])); + fiat_p521_mulx_u32(&x1846, &x1847, x9, (arg1[15])); + fiat_p521_mulx_u32(&x1848, &x1849, x9, (arg1[14])); + fiat_p521_mulx_u32(&x1850, &x1851, x9, (arg1[13])); + fiat_p521_mulx_u32(&x1852, &x1853, x9, (arg1[12])); + fiat_p521_mulx_u32(&x1854, &x1855, x9, (arg1[11])); + fiat_p521_mulx_u32(&x1856, &x1857, x9, (arg1[10])); + fiat_p521_mulx_u32(&x1858, &x1859, x9, (arg1[9])); + fiat_p521_mulx_u32(&x1860, &x1861, x9, (arg1[8])); + fiat_p521_mulx_u32(&x1862, &x1863, x9, (arg1[7])); + fiat_p521_mulx_u32(&x1864, &x1865, x9, (arg1[6])); + fiat_p521_mulx_u32(&x1866, &x1867, x9, (arg1[5])); + fiat_p521_mulx_u32(&x1868, &x1869, x9, (arg1[4])); + fiat_p521_mulx_u32(&x1870, &x1871, x9, (arg1[3])); + fiat_p521_mulx_u32(&x1872, &x1873, x9, (arg1[2])); + fiat_p521_mulx_u32(&x1874, &x1875, x9, (arg1[1])); + fiat_p521_mulx_u32(&x1876, &x1877, x9, (arg1[0])); + fiat_p521_addcarryx_u32(&x1878, &x1879, 0x0, x1877, x1874); + fiat_p521_addcarryx_u32(&x1880, &x1881, x1879, x1875, x1872); + fiat_p521_addcarryx_u32(&x1882, &x1883, x1881, x1873, x1870); + fiat_p521_addcarryx_u32(&x1884, &x1885, x1883, x1871, x1868); + fiat_p521_addcarryx_u32(&x1886, &x1887, x1885, x1869, x1866); + fiat_p521_addcarryx_u32(&x1888, &x1889, x1887, x1867, x1864); + fiat_p521_addcarryx_u32(&x1890, &x1891, x1889, x1865, x1862); + fiat_p521_addcarryx_u32(&x1892, &x1893, x1891, x1863, x1860); + fiat_p521_addcarryx_u32(&x1894, &x1895, x1893, x1861, x1858); + fiat_p521_addcarryx_u32(&x1896, &x1897, x1895, x1859, x1856); + fiat_p521_addcarryx_u32(&x1898, &x1899, x1897, x1857, x1854); + fiat_p521_addcarryx_u32(&x1900, &x1901, x1899, x1855, x1852); + fiat_p521_addcarryx_u32(&x1902, &x1903, x1901, x1853, x1850); + fiat_p521_addcarryx_u32(&x1904, &x1905, x1903, x1851, x1848); + fiat_p521_addcarryx_u32(&x1906, &x1907, x1905, x1849, x1846); + fiat_p521_addcarryx_u32(&x1908, &x1909, x1907, x1847, x1844); + x1910 = (x1909 + x1845); + fiat_p521_addcarryx_u32(&x1911, &x1912, 0x0, x1809, x1876); + fiat_p521_addcarryx_u32(&x1913, &x1914, x1912, x1811, x1878); + fiat_p521_addcarryx_u32(&x1915, &x1916, x1914, x1813, x1880); + fiat_p521_addcarryx_u32(&x1917, &x1918, x1916, x1815, x1882); + fiat_p521_addcarryx_u32(&x1919, &x1920, x1918, x1817, x1884); + fiat_p521_addcarryx_u32(&x1921, &x1922, x1920, x1819, x1886); + fiat_p521_addcarryx_u32(&x1923, &x1924, x1922, x1821, x1888); + fiat_p521_addcarryx_u32(&x1925, &x1926, x1924, x1823, x1890); + fiat_p521_addcarryx_u32(&x1927, &x1928, x1926, x1825, x1892); + fiat_p521_addcarryx_u32(&x1929, &x1930, x1928, x1827, x1894); + fiat_p521_addcarryx_u32(&x1931, &x1932, x1930, x1829, x1896); + fiat_p521_addcarryx_u32(&x1933, &x1934, x1932, x1831, x1898); + fiat_p521_addcarryx_u32(&x1935, &x1936, x1934, x1833, x1900); + fiat_p521_addcarryx_u32(&x1937, &x1938, x1936, x1835, x1902); + fiat_p521_addcarryx_u32(&x1939, &x1940, x1938, x1837, x1904); + fiat_p521_addcarryx_u32(&x1941, &x1942, x1940, x1839, x1906); + fiat_p521_addcarryx_u32(&x1943, &x1944, x1942, x1841, x1908); + fiat_p521_addcarryx_u32(&x1945, &x1946, x1944, x1843, x1910); + fiat_p521_mulx_u32(&x1947, &x1948, x1911, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1949, &x1950, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1951, &x1952, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1953, &x1954, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1955, &x1956, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1957, &x1958, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1959, &x1960, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1961, &x1962, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1963, &x1964, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1965, &x1966, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1967, &x1968, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1969, &x1970, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1971, &x1972, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1973, &x1974, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1975, &x1976, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1977, &x1978, x1911, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1979, &x1980, x1911, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1981, &x1982, 0x0, x1980, x1977); + fiat_p521_addcarryx_u32(&x1983, &x1984, x1982, x1978, x1975); + fiat_p521_addcarryx_u32(&x1985, &x1986, x1984, x1976, x1973); + fiat_p521_addcarryx_u32(&x1987, &x1988, x1986, x1974, x1971); + fiat_p521_addcarryx_u32(&x1989, &x1990, x1988, x1972, x1969); + fiat_p521_addcarryx_u32(&x1991, &x1992, x1990, x1970, x1967); + fiat_p521_addcarryx_u32(&x1993, &x1994, x1992, x1968, x1965); + fiat_p521_addcarryx_u32(&x1995, &x1996, x1994, x1966, x1963); + fiat_p521_addcarryx_u32(&x1997, &x1998, x1996, x1964, x1961); + fiat_p521_addcarryx_u32(&x1999, &x2000, x1998, x1962, x1959); + fiat_p521_addcarryx_u32(&x2001, &x2002, x2000, x1960, x1957); + fiat_p521_addcarryx_u32(&x2003, &x2004, x2002, x1958, x1955); + fiat_p521_addcarryx_u32(&x2005, &x2006, x2004, x1956, x1953); + fiat_p521_addcarryx_u32(&x2007, &x2008, x2006, x1954, x1951); + fiat_p521_addcarryx_u32(&x2009, &x2010, x2008, x1952, x1949); + fiat_p521_addcarryx_u32(&x2011, &x2012, x2010, x1950, x1947); + x2013 = (x2012 + x1948); + fiat_p521_addcarryx_u32(&x2014, &x2015, 0x0, x1911, x1979); + fiat_p521_addcarryx_u32(&x2016, &x2017, x2015, x1913, x1981); + fiat_p521_addcarryx_u32(&x2018, &x2019, x2017, x1915, x1983); + fiat_p521_addcarryx_u32(&x2020, &x2021, x2019, x1917, x1985); + fiat_p521_addcarryx_u32(&x2022, &x2023, x2021, x1919, x1987); + fiat_p521_addcarryx_u32(&x2024, &x2025, x2023, x1921, x1989); + fiat_p521_addcarryx_u32(&x2026, &x2027, x2025, x1923, x1991); + fiat_p521_addcarryx_u32(&x2028, &x2029, x2027, x1925, x1993); + fiat_p521_addcarryx_u32(&x2030, &x2031, x2029, x1927, x1995); + fiat_p521_addcarryx_u32(&x2032, &x2033, x2031, x1929, x1997); + fiat_p521_addcarryx_u32(&x2034, &x2035, x2033, x1931, x1999); + fiat_p521_addcarryx_u32(&x2036, &x2037, x2035, x1933, x2001); + fiat_p521_addcarryx_u32(&x2038, &x2039, x2037, x1935, x2003); + fiat_p521_addcarryx_u32(&x2040, &x2041, x2039, x1937, x2005); + fiat_p521_addcarryx_u32(&x2042, &x2043, x2041, x1939, x2007); + fiat_p521_addcarryx_u32(&x2044, &x2045, x2043, x1941, x2009); + fiat_p521_addcarryx_u32(&x2046, &x2047, x2045, x1943, x2011); + fiat_p521_addcarryx_u32(&x2048, &x2049, x2047, x1945, x2013); + x2050 = ((uint32_t)x2049 + x1946); + fiat_p521_mulx_u32(&x2051, &x2052, x10, (arg1[16])); + fiat_p521_mulx_u32(&x2053, &x2054, x10, (arg1[15])); + fiat_p521_mulx_u32(&x2055, &x2056, x10, (arg1[14])); + fiat_p521_mulx_u32(&x2057, &x2058, x10, (arg1[13])); + fiat_p521_mulx_u32(&x2059, &x2060, x10, (arg1[12])); + fiat_p521_mulx_u32(&x2061, &x2062, x10, (arg1[11])); + fiat_p521_mulx_u32(&x2063, &x2064, x10, (arg1[10])); + fiat_p521_mulx_u32(&x2065, &x2066, x10, (arg1[9])); + fiat_p521_mulx_u32(&x2067, &x2068, x10, (arg1[8])); + fiat_p521_mulx_u32(&x2069, &x2070, x10, (arg1[7])); + fiat_p521_mulx_u32(&x2071, &x2072, x10, (arg1[6])); + fiat_p521_mulx_u32(&x2073, &x2074, x10, (arg1[5])); + fiat_p521_mulx_u32(&x2075, &x2076, x10, (arg1[4])); + fiat_p521_mulx_u32(&x2077, &x2078, x10, (arg1[3])); + fiat_p521_mulx_u32(&x2079, &x2080, x10, (arg1[2])); + fiat_p521_mulx_u32(&x2081, &x2082, x10, (arg1[1])); + fiat_p521_mulx_u32(&x2083, &x2084, x10, (arg1[0])); + fiat_p521_addcarryx_u32(&x2085, &x2086, 0x0, x2084, x2081); + fiat_p521_addcarryx_u32(&x2087, &x2088, x2086, x2082, x2079); + fiat_p521_addcarryx_u32(&x2089, &x2090, x2088, x2080, x2077); + fiat_p521_addcarryx_u32(&x2091, &x2092, x2090, x2078, x2075); + fiat_p521_addcarryx_u32(&x2093, &x2094, x2092, x2076, x2073); + fiat_p521_addcarryx_u32(&x2095, &x2096, x2094, x2074, x2071); + fiat_p521_addcarryx_u32(&x2097, &x2098, x2096, x2072, x2069); + fiat_p521_addcarryx_u32(&x2099, &x2100, x2098, x2070, x2067); + fiat_p521_addcarryx_u32(&x2101, &x2102, x2100, x2068, x2065); + fiat_p521_addcarryx_u32(&x2103, &x2104, x2102, x2066, x2063); + fiat_p521_addcarryx_u32(&x2105, &x2106, x2104, x2064, x2061); + fiat_p521_addcarryx_u32(&x2107, &x2108, x2106, x2062, x2059); + fiat_p521_addcarryx_u32(&x2109, &x2110, x2108, x2060, x2057); + fiat_p521_addcarryx_u32(&x2111, &x2112, x2110, x2058, x2055); + fiat_p521_addcarryx_u32(&x2113, &x2114, x2112, x2056, x2053); + fiat_p521_addcarryx_u32(&x2115, &x2116, x2114, x2054, x2051); + x2117 = (x2116 + x2052); + fiat_p521_addcarryx_u32(&x2118, &x2119, 0x0, x2016, x2083); + fiat_p521_addcarryx_u32(&x2120, &x2121, x2119, x2018, x2085); + fiat_p521_addcarryx_u32(&x2122, &x2123, x2121, x2020, x2087); + fiat_p521_addcarryx_u32(&x2124, &x2125, x2123, x2022, x2089); + fiat_p521_addcarryx_u32(&x2126, &x2127, x2125, x2024, x2091); + fiat_p521_addcarryx_u32(&x2128, &x2129, x2127, x2026, x2093); + fiat_p521_addcarryx_u32(&x2130, &x2131, x2129, x2028, x2095); + fiat_p521_addcarryx_u32(&x2132, &x2133, x2131, x2030, x2097); + fiat_p521_addcarryx_u32(&x2134, &x2135, x2133, x2032, x2099); + fiat_p521_addcarryx_u32(&x2136, &x2137, x2135, x2034, x2101); + fiat_p521_addcarryx_u32(&x2138, &x2139, x2137, x2036, x2103); + fiat_p521_addcarryx_u32(&x2140, &x2141, x2139, x2038, x2105); + fiat_p521_addcarryx_u32(&x2142, &x2143, x2141, x2040, x2107); + fiat_p521_addcarryx_u32(&x2144, &x2145, x2143, x2042, x2109); + fiat_p521_addcarryx_u32(&x2146, &x2147, x2145, x2044, x2111); + fiat_p521_addcarryx_u32(&x2148, &x2149, x2147, x2046, x2113); + fiat_p521_addcarryx_u32(&x2150, &x2151, x2149, x2048, x2115); + fiat_p521_addcarryx_u32(&x2152, &x2153, x2151, x2050, x2117); + fiat_p521_mulx_u32(&x2154, &x2155, x2118, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x2156, &x2157, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2158, &x2159, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2160, &x2161, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2162, &x2163, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2164, &x2165, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2166, &x2167, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2168, &x2169, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2170, &x2171, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2172, &x2173, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2174, &x2175, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2176, &x2177, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2178, &x2179, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2180, &x2181, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2182, &x2183, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2184, &x2185, x2118, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2186, &x2187, x2118, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x2188, &x2189, 0x0, x2187, x2184); + fiat_p521_addcarryx_u32(&x2190, &x2191, x2189, x2185, x2182); + fiat_p521_addcarryx_u32(&x2192, &x2193, x2191, x2183, x2180); + fiat_p521_addcarryx_u32(&x2194, &x2195, x2193, x2181, x2178); + fiat_p521_addcarryx_u32(&x2196, &x2197, x2195, x2179, x2176); + fiat_p521_addcarryx_u32(&x2198, &x2199, x2197, x2177, x2174); + fiat_p521_addcarryx_u32(&x2200, &x2201, x2199, x2175, x2172); + fiat_p521_addcarryx_u32(&x2202, &x2203, x2201, x2173, x2170); + fiat_p521_addcarryx_u32(&x2204, &x2205, x2203, x2171, x2168); + fiat_p521_addcarryx_u32(&x2206, &x2207, x2205, x2169, x2166); + fiat_p521_addcarryx_u32(&x2208, &x2209, x2207, x2167, x2164); + fiat_p521_addcarryx_u32(&x2210, &x2211, x2209, x2165, x2162); + fiat_p521_addcarryx_u32(&x2212, &x2213, x2211, x2163, x2160); + fiat_p521_addcarryx_u32(&x2214, &x2215, x2213, x2161, x2158); + fiat_p521_addcarryx_u32(&x2216, &x2217, x2215, x2159, x2156); + fiat_p521_addcarryx_u32(&x2218, &x2219, x2217, x2157, x2154); + x2220 = (x2219 + x2155); + fiat_p521_addcarryx_u32(&x2221, &x2222, 0x0, x2118, x2186); + fiat_p521_addcarryx_u32(&x2223, &x2224, x2222, x2120, x2188); + fiat_p521_addcarryx_u32(&x2225, &x2226, x2224, x2122, x2190); + fiat_p521_addcarryx_u32(&x2227, &x2228, x2226, x2124, x2192); + fiat_p521_addcarryx_u32(&x2229, &x2230, x2228, x2126, x2194); + fiat_p521_addcarryx_u32(&x2231, &x2232, x2230, x2128, x2196); + fiat_p521_addcarryx_u32(&x2233, &x2234, x2232, x2130, x2198); + fiat_p521_addcarryx_u32(&x2235, &x2236, x2234, x2132, x2200); + fiat_p521_addcarryx_u32(&x2237, &x2238, x2236, x2134, x2202); + fiat_p521_addcarryx_u32(&x2239, &x2240, x2238, x2136, x2204); + fiat_p521_addcarryx_u32(&x2241, &x2242, x2240, x2138, x2206); + fiat_p521_addcarryx_u32(&x2243, &x2244, x2242, x2140, x2208); + fiat_p521_addcarryx_u32(&x2245, &x2246, x2244, x2142, x2210); + fiat_p521_addcarryx_u32(&x2247, &x2248, x2246, x2144, x2212); + fiat_p521_addcarryx_u32(&x2249, &x2250, x2248, x2146, x2214); + fiat_p521_addcarryx_u32(&x2251, &x2252, x2250, x2148, x2216); + fiat_p521_addcarryx_u32(&x2253, &x2254, x2252, x2150, x2218); + fiat_p521_addcarryx_u32(&x2255, &x2256, x2254, x2152, x2220); + x2257 = ((uint32_t)x2256 + x2153); + fiat_p521_mulx_u32(&x2258, &x2259, x11, (arg1[16])); + fiat_p521_mulx_u32(&x2260, &x2261, x11, (arg1[15])); + fiat_p521_mulx_u32(&x2262, &x2263, x11, (arg1[14])); + fiat_p521_mulx_u32(&x2264, &x2265, x11, (arg1[13])); + fiat_p521_mulx_u32(&x2266, &x2267, x11, (arg1[12])); + fiat_p521_mulx_u32(&x2268, &x2269, x11, (arg1[11])); + fiat_p521_mulx_u32(&x2270, &x2271, x11, (arg1[10])); + fiat_p521_mulx_u32(&x2272, &x2273, x11, (arg1[9])); + fiat_p521_mulx_u32(&x2274, &x2275, x11, (arg1[8])); + fiat_p521_mulx_u32(&x2276, &x2277, x11, (arg1[7])); + fiat_p521_mulx_u32(&x2278, &x2279, x11, (arg1[6])); + fiat_p521_mulx_u32(&x2280, &x2281, x11, (arg1[5])); + fiat_p521_mulx_u32(&x2282, &x2283, x11, (arg1[4])); + fiat_p521_mulx_u32(&x2284, &x2285, x11, (arg1[3])); + fiat_p521_mulx_u32(&x2286, &x2287, x11, (arg1[2])); + fiat_p521_mulx_u32(&x2288, &x2289, x11, (arg1[1])); + fiat_p521_mulx_u32(&x2290, &x2291, x11, (arg1[0])); + fiat_p521_addcarryx_u32(&x2292, &x2293, 0x0, x2291, x2288); + fiat_p521_addcarryx_u32(&x2294, &x2295, x2293, x2289, x2286); + fiat_p521_addcarryx_u32(&x2296, &x2297, x2295, x2287, x2284); + fiat_p521_addcarryx_u32(&x2298, &x2299, x2297, x2285, x2282); + fiat_p521_addcarryx_u32(&x2300, &x2301, x2299, x2283, x2280); + fiat_p521_addcarryx_u32(&x2302, &x2303, x2301, x2281, x2278); + fiat_p521_addcarryx_u32(&x2304, &x2305, x2303, x2279, x2276); + fiat_p521_addcarryx_u32(&x2306, &x2307, x2305, x2277, x2274); + fiat_p521_addcarryx_u32(&x2308, &x2309, x2307, x2275, x2272); + fiat_p521_addcarryx_u32(&x2310, &x2311, x2309, x2273, x2270); + fiat_p521_addcarryx_u32(&x2312, &x2313, x2311, x2271, x2268); + fiat_p521_addcarryx_u32(&x2314, &x2315, x2313, x2269, x2266); + fiat_p521_addcarryx_u32(&x2316, &x2317, x2315, x2267, x2264); + fiat_p521_addcarryx_u32(&x2318, &x2319, x2317, x2265, x2262); + fiat_p521_addcarryx_u32(&x2320, &x2321, x2319, x2263, x2260); + fiat_p521_addcarryx_u32(&x2322, &x2323, x2321, x2261, x2258); + x2324 = (x2323 + x2259); + fiat_p521_addcarryx_u32(&x2325, &x2326, 0x0, x2223, x2290); + fiat_p521_addcarryx_u32(&x2327, &x2328, x2326, x2225, x2292); + fiat_p521_addcarryx_u32(&x2329, &x2330, x2328, x2227, x2294); + fiat_p521_addcarryx_u32(&x2331, &x2332, x2330, x2229, x2296); + fiat_p521_addcarryx_u32(&x2333, &x2334, x2332, x2231, x2298); + fiat_p521_addcarryx_u32(&x2335, &x2336, x2334, x2233, x2300); + fiat_p521_addcarryx_u32(&x2337, &x2338, x2336, x2235, x2302); + fiat_p521_addcarryx_u32(&x2339, &x2340, x2338, x2237, x2304); + fiat_p521_addcarryx_u32(&x2341, &x2342, x2340, x2239, x2306); + fiat_p521_addcarryx_u32(&x2343, &x2344, x2342, x2241, x2308); + fiat_p521_addcarryx_u32(&x2345, &x2346, x2344, x2243, x2310); + fiat_p521_addcarryx_u32(&x2347, &x2348, x2346, x2245, x2312); + fiat_p521_addcarryx_u32(&x2349, &x2350, x2348, x2247, x2314); + fiat_p521_addcarryx_u32(&x2351, &x2352, x2350, x2249, x2316); + fiat_p521_addcarryx_u32(&x2353, &x2354, x2352, x2251, x2318); + fiat_p521_addcarryx_u32(&x2355, &x2356, x2354, x2253, x2320); + fiat_p521_addcarryx_u32(&x2357, &x2358, x2356, x2255, x2322); + fiat_p521_addcarryx_u32(&x2359, &x2360, x2358, x2257, x2324); + fiat_p521_mulx_u32(&x2361, &x2362, x2325, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x2363, &x2364, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2365, &x2366, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2367, &x2368, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2369, &x2370, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2371, &x2372, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2373, &x2374, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2375, &x2376, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2377, &x2378, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2379, &x2380, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2381, &x2382, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2383, &x2384, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2385, &x2386, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2387, &x2388, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2389, &x2390, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2391, &x2392, x2325, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2393, &x2394, x2325, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x2395, &x2396, 0x0, x2394, x2391); + fiat_p521_addcarryx_u32(&x2397, &x2398, x2396, x2392, x2389); + fiat_p521_addcarryx_u32(&x2399, &x2400, x2398, x2390, x2387); + fiat_p521_addcarryx_u32(&x2401, &x2402, x2400, x2388, x2385); + fiat_p521_addcarryx_u32(&x2403, &x2404, x2402, x2386, x2383); + fiat_p521_addcarryx_u32(&x2405, &x2406, x2404, x2384, x2381); + fiat_p521_addcarryx_u32(&x2407, &x2408, x2406, x2382, x2379); + fiat_p521_addcarryx_u32(&x2409, &x2410, x2408, x2380, x2377); + fiat_p521_addcarryx_u32(&x2411, &x2412, x2410, x2378, x2375); + fiat_p521_addcarryx_u32(&x2413, &x2414, x2412, x2376, x2373); + fiat_p521_addcarryx_u32(&x2415, &x2416, x2414, x2374, x2371); + fiat_p521_addcarryx_u32(&x2417, &x2418, x2416, x2372, x2369); + fiat_p521_addcarryx_u32(&x2419, &x2420, x2418, x2370, x2367); + fiat_p521_addcarryx_u32(&x2421, &x2422, x2420, x2368, x2365); + fiat_p521_addcarryx_u32(&x2423, &x2424, x2422, x2366, x2363); + fiat_p521_addcarryx_u32(&x2425, &x2426, x2424, x2364, x2361); + x2427 = (x2426 + x2362); + fiat_p521_addcarryx_u32(&x2428, &x2429, 0x0, x2325, x2393); + fiat_p521_addcarryx_u32(&x2430, &x2431, x2429, x2327, x2395); + fiat_p521_addcarryx_u32(&x2432, &x2433, x2431, x2329, x2397); + fiat_p521_addcarryx_u32(&x2434, &x2435, x2433, x2331, x2399); + fiat_p521_addcarryx_u32(&x2436, &x2437, x2435, x2333, x2401); + fiat_p521_addcarryx_u32(&x2438, &x2439, x2437, x2335, x2403); + fiat_p521_addcarryx_u32(&x2440, &x2441, x2439, x2337, x2405); + fiat_p521_addcarryx_u32(&x2442, &x2443, x2441, x2339, x2407); + fiat_p521_addcarryx_u32(&x2444, &x2445, x2443, x2341, x2409); + fiat_p521_addcarryx_u32(&x2446, &x2447, x2445, x2343, x2411); + fiat_p521_addcarryx_u32(&x2448, &x2449, x2447, x2345, x2413); + fiat_p521_addcarryx_u32(&x2450, &x2451, x2449, x2347, x2415); + fiat_p521_addcarryx_u32(&x2452, &x2453, x2451, x2349, x2417); + fiat_p521_addcarryx_u32(&x2454, &x2455, x2453, x2351, x2419); + fiat_p521_addcarryx_u32(&x2456, &x2457, x2455, x2353, x2421); + fiat_p521_addcarryx_u32(&x2458, &x2459, x2457, x2355, x2423); + fiat_p521_addcarryx_u32(&x2460, &x2461, x2459, x2357, x2425); + fiat_p521_addcarryx_u32(&x2462, &x2463, x2461, x2359, x2427); + x2464 = ((uint32_t)x2463 + x2360); + fiat_p521_mulx_u32(&x2465, &x2466, x12, (arg1[16])); + fiat_p521_mulx_u32(&x2467, &x2468, x12, (arg1[15])); + fiat_p521_mulx_u32(&x2469, &x2470, x12, (arg1[14])); + fiat_p521_mulx_u32(&x2471, &x2472, x12, (arg1[13])); + fiat_p521_mulx_u32(&x2473, &x2474, x12, (arg1[12])); + fiat_p521_mulx_u32(&x2475, &x2476, x12, (arg1[11])); + fiat_p521_mulx_u32(&x2477, &x2478, x12, (arg1[10])); + fiat_p521_mulx_u32(&x2479, &x2480, x12, (arg1[9])); + fiat_p521_mulx_u32(&x2481, &x2482, x12, (arg1[8])); + fiat_p521_mulx_u32(&x2483, &x2484, x12, (arg1[7])); + fiat_p521_mulx_u32(&x2485, &x2486, x12, (arg1[6])); + fiat_p521_mulx_u32(&x2487, &x2488, x12, (arg1[5])); + fiat_p521_mulx_u32(&x2489, &x2490, x12, (arg1[4])); + fiat_p521_mulx_u32(&x2491, &x2492, x12, (arg1[3])); + fiat_p521_mulx_u32(&x2493, &x2494, x12, (arg1[2])); + fiat_p521_mulx_u32(&x2495, &x2496, x12, (arg1[1])); + fiat_p521_mulx_u32(&x2497, &x2498, x12, (arg1[0])); + fiat_p521_addcarryx_u32(&x2499, &x2500, 0x0, x2498, x2495); + fiat_p521_addcarryx_u32(&x2501, &x2502, x2500, x2496, x2493); + fiat_p521_addcarryx_u32(&x2503, &x2504, x2502, x2494, x2491); + fiat_p521_addcarryx_u32(&x2505, &x2506, x2504, x2492, x2489); + fiat_p521_addcarryx_u32(&x2507, &x2508, x2506, x2490, x2487); + fiat_p521_addcarryx_u32(&x2509, &x2510, x2508, x2488, x2485); + fiat_p521_addcarryx_u32(&x2511, &x2512, x2510, x2486, x2483); + fiat_p521_addcarryx_u32(&x2513, &x2514, x2512, x2484, x2481); + fiat_p521_addcarryx_u32(&x2515, &x2516, x2514, x2482, x2479); + fiat_p521_addcarryx_u32(&x2517, &x2518, x2516, x2480, x2477); + fiat_p521_addcarryx_u32(&x2519, &x2520, x2518, x2478, x2475); + fiat_p521_addcarryx_u32(&x2521, &x2522, x2520, x2476, x2473); + fiat_p521_addcarryx_u32(&x2523, &x2524, x2522, x2474, x2471); + fiat_p521_addcarryx_u32(&x2525, &x2526, x2524, x2472, x2469); + fiat_p521_addcarryx_u32(&x2527, &x2528, x2526, x2470, x2467); + fiat_p521_addcarryx_u32(&x2529, &x2530, x2528, x2468, x2465); + x2531 = (x2530 + x2466); + fiat_p521_addcarryx_u32(&x2532, &x2533, 0x0, x2430, x2497); + fiat_p521_addcarryx_u32(&x2534, &x2535, x2533, x2432, x2499); + fiat_p521_addcarryx_u32(&x2536, &x2537, x2535, x2434, x2501); + fiat_p521_addcarryx_u32(&x2538, &x2539, x2537, x2436, x2503); + fiat_p521_addcarryx_u32(&x2540, &x2541, x2539, x2438, x2505); + fiat_p521_addcarryx_u32(&x2542, &x2543, x2541, x2440, x2507); + fiat_p521_addcarryx_u32(&x2544, &x2545, x2543, x2442, x2509); + fiat_p521_addcarryx_u32(&x2546, &x2547, x2545, x2444, x2511); + fiat_p521_addcarryx_u32(&x2548, &x2549, x2547, x2446, x2513); + fiat_p521_addcarryx_u32(&x2550, &x2551, x2549, x2448, x2515); + fiat_p521_addcarryx_u32(&x2552, &x2553, x2551, x2450, x2517); + fiat_p521_addcarryx_u32(&x2554, &x2555, x2553, x2452, x2519); + fiat_p521_addcarryx_u32(&x2556, &x2557, x2555, x2454, x2521); + fiat_p521_addcarryx_u32(&x2558, &x2559, x2557, x2456, x2523); + fiat_p521_addcarryx_u32(&x2560, &x2561, x2559, x2458, x2525); + fiat_p521_addcarryx_u32(&x2562, &x2563, x2561, x2460, x2527); + fiat_p521_addcarryx_u32(&x2564, &x2565, x2563, x2462, x2529); + fiat_p521_addcarryx_u32(&x2566, &x2567, x2565, x2464, x2531); + fiat_p521_mulx_u32(&x2568, &x2569, x2532, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x2570, &x2571, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2572, &x2573, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2574, &x2575, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2576, &x2577, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2578, &x2579, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2580, &x2581, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2582, &x2583, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2584, &x2585, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2586, &x2587, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2588, &x2589, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2590, &x2591, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2592, &x2593, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2594, &x2595, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2596, &x2597, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2598, &x2599, x2532, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2600, &x2601, x2532, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x2602, &x2603, 0x0, x2601, x2598); + fiat_p521_addcarryx_u32(&x2604, &x2605, x2603, x2599, x2596); + fiat_p521_addcarryx_u32(&x2606, &x2607, x2605, x2597, x2594); + fiat_p521_addcarryx_u32(&x2608, &x2609, x2607, x2595, x2592); + fiat_p521_addcarryx_u32(&x2610, &x2611, x2609, x2593, x2590); + fiat_p521_addcarryx_u32(&x2612, &x2613, x2611, x2591, x2588); + fiat_p521_addcarryx_u32(&x2614, &x2615, x2613, x2589, x2586); + fiat_p521_addcarryx_u32(&x2616, &x2617, x2615, x2587, x2584); + fiat_p521_addcarryx_u32(&x2618, &x2619, x2617, x2585, x2582); + fiat_p521_addcarryx_u32(&x2620, &x2621, x2619, x2583, x2580); + fiat_p521_addcarryx_u32(&x2622, &x2623, x2621, x2581, x2578); + fiat_p521_addcarryx_u32(&x2624, &x2625, x2623, x2579, x2576); + fiat_p521_addcarryx_u32(&x2626, &x2627, x2625, x2577, x2574); + fiat_p521_addcarryx_u32(&x2628, &x2629, x2627, x2575, x2572); + fiat_p521_addcarryx_u32(&x2630, &x2631, x2629, x2573, x2570); + fiat_p521_addcarryx_u32(&x2632, &x2633, x2631, x2571, x2568); + x2634 = (x2633 + x2569); + fiat_p521_addcarryx_u32(&x2635, &x2636, 0x0, x2532, x2600); + fiat_p521_addcarryx_u32(&x2637, &x2638, x2636, x2534, x2602); + fiat_p521_addcarryx_u32(&x2639, &x2640, x2638, x2536, x2604); + fiat_p521_addcarryx_u32(&x2641, &x2642, x2640, x2538, x2606); + fiat_p521_addcarryx_u32(&x2643, &x2644, x2642, x2540, x2608); + fiat_p521_addcarryx_u32(&x2645, &x2646, x2644, x2542, x2610); + fiat_p521_addcarryx_u32(&x2647, &x2648, x2646, x2544, x2612); + fiat_p521_addcarryx_u32(&x2649, &x2650, x2648, x2546, x2614); + fiat_p521_addcarryx_u32(&x2651, &x2652, x2650, x2548, x2616); + fiat_p521_addcarryx_u32(&x2653, &x2654, x2652, x2550, x2618); + fiat_p521_addcarryx_u32(&x2655, &x2656, x2654, x2552, x2620); + fiat_p521_addcarryx_u32(&x2657, &x2658, x2656, x2554, x2622); + fiat_p521_addcarryx_u32(&x2659, &x2660, x2658, x2556, x2624); + fiat_p521_addcarryx_u32(&x2661, &x2662, x2660, x2558, x2626); + fiat_p521_addcarryx_u32(&x2663, &x2664, x2662, x2560, x2628); + fiat_p521_addcarryx_u32(&x2665, &x2666, x2664, x2562, x2630); + fiat_p521_addcarryx_u32(&x2667, &x2668, x2666, x2564, x2632); + fiat_p521_addcarryx_u32(&x2669, &x2670, x2668, x2566, x2634); + x2671 = ((uint32_t)x2670 + x2567); + fiat_p521_mulx_u32(&x2672, &x2673, x13, (arg1[16])); + fiat_p521_mulx_u32(&x2674, &x2675, x13, (arg1[15])); + fiat_p521_mulx_u32(&x2676, &x2677, x13, (arg1[14])); + fiat_p521_mulx_u32(&x2678, &x2679, x13, (arg1[13])); + fiat_p521_mulx_u32(&x2680, &x2681, x13, (arg1[12])); + fiat_p521_mulx_u32(&x2682, &x2683, x13, (arg1[11])); + fiat_p521_mulx_u32(&x2684, &x2685, x13, (arg1[10])); + fiat_p521_mulx_u32(&x2686, &x2687, x13, (arg1[9])); + fiat_p521_mulx_u32(&x2688, &x2689, x13, (arg1[8])); + fiat_p521_mulx_u32(&x2690, &x2691, x13, (arg1[7])); + fiat_p521_mulx_u32(&x2692, &x2693, x13, (arg1[6])); + fiat_p521_mulx_u32(&x2694, &x2695, x13, (arg1[5])); + fiat_p521_mulx_u32(&x2696, &x2697, x13, (arg1[4])); + fiat_p521_mulx_u32(&x2698, &x2699, x13, (arg1[3])); + fiat_p521_mulx_u32(&x2700, &x2701, x13, (arg1[2])); + fiat_p521_mulx_u32(&x2702, &x2703, x13, (arg1[1])); + fiat_p521_mulx_u32(&x2704, &x2705, x13, (arg1[0])); + fiat_p521_addcarryx_u32(&x2706, &x2707, 0x0, x2705, x2702); + fiat_p521_addcarryx_u32(&x2708, &x2709, x2707, x2703, x2700); + fiat_p521_addcarryx_u32(&x2710, &x2711, x2709, x2701, x2698); + fiat_p521_addcarryx_u32(&x2712, &x2713, x2711, x2699, x2696); + fiat_p521_addcarryx_u32(&x2714, &x2715, x2713, x2697, x2694); + fiat_p521_addcarryx_u32(&x2716, &x2717, x2715, x2695, x2692); + fiat_p521_addcarryx_u32(&x2718, &x2719, x2717, x2693, x2690); + fiat_p521_addcarryx_u32(&x2720, &x2721, x2719, x2691, x2688); + fiat_p521_addcarryx_u32(&x2722, &x2723, x2721, x2689, x2686); + fiat_p521_addcarryx_u32(&x2724, &x2725, x2723, x2687, x2684); + fiat_p521_addcarryx_u32(&x2726, &x2727, x2725, x2685, x2682); + fiat_p521_addcarryx_u32(&x2728, &x2729, x2727, x2683, x2680); + fiat_p521_addcarryx_u32(&x2730, &x2731, x2729, x2681, x2678); + fiat_p521_addcarryx_u32(&x2732, &x2733, x2731, x2679, x2676); + fiat_p521_addcarryx_u32(&x2734, &x2735, x2733, x2677, x2674); + fiat_p521_addcarryx_u32(&x2736, &x2737, x2735, x2675, x2672); + x2738 = (x2737 + x2673); + fiat_p521_addcarryx_u32(&x2739, &x2740, 0x0, x2637, x2704); + fiat_p521_addcarryx_u32(&x2741, &x2742, x2740, x2639, x2706); + fiat_p521_addcarryx_u32(&x2743, &x2744, x2742, x2641, x2708); + fiat_p521_addcarryx_u32(&x2745, &x2746, x2744, x2643, x2710); + fiat_p521_addcarryx_u32(&x2747, &x2748, x2746, x2645, x2712); + fiat_p521_addcarryx_u32(&x2749, &x2750, x2748, x2647, x2714); + fiat_p521_addcarryx_u32(&x2751, &x2752, x2750, x2649, x2716); + fiat_p521_addcarryx_u32(&x2753, &x2754, x2752, x2651, x2718); + fiat_p521_addcarryx_u32(&x2755, &x2756, x2754, x2653, x2720); + fiat_p521_addcarryx_u32(&x2757, &x2758, x2756, x2655, x2722); + fiat_p521_addcarryx_u32(&x2759, &x2760, x2758, x2657, x2724); + fiat_p521_addcarryx_u32(&x2761, &x2762, x2760, x2659, x2726); + fiat_p521_addcarryx_u32(&x2763, &x2764, x2762, x2661, x2728); + fiat_p521_addcarryx_u32(&x2765, &x2766, x2764, x2663, x2730); + fiat_p521_addcarryx_u32(&x2767, &x2768, x2766, x2665, x2732); + fiat_p521_addcarryx_u32(&x2769, &x2770, x2768, x2667, x2734); + fiat_p521_addcarryx_u32(&x2771, &x2772, x2770, x2669, x2736); + fiat_p521_addcarryx_u32(&x2773, &x2774, x2772, x2671, x2738); + fiat_p521_mulx_u32(&x2775, &x2776, x2739, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x2777, &x2778, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2779, &x2780, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2781, &x2782, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2783, &x2784, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2785, &x2786, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2787, &x2788, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2789, &x2790, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2791, &x2792, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2793, &x2794, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2795, &x2796, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2797, &x2798, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2799, &x2800, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2801, &x2802, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2803, &x2804, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2805, &x2806, x2739, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2807, &x2808, x2739, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x2809, &x2810, 0x0, x2808, x2805); + fiat_p521_addcarryx_u32(&x2811, &x2812, x2810, x2806, x2803); + fiat_p521_addcarryx_u32(&x2813, &x2814, x2812, x2804, x2801); + fiat_p521_addcarryx_u32(&x2815, &x2816, x2814, x2802, x2799); + fiat_p521_addcarryx_u32(&x2817, &x2818, x2816, x2800, x2797); + fiat_p521_addcarryx_u32(&x2819, &x2820, x2818, x2798, x2795); + fiat_p521_addcarryx_u32(&x2821, &x2822, x2820, x2796, x2793); + fiat_p521_addcarryx_u32(&x2823, &x2824, x2822, x2794, x2791); + fiat_p521_addcarryx_u32(&x2825, &x2826, x2824, x2792, x2789); + fiat_p521_addcarryx_u32(&x2827, &x2828, x2826, x2790, x2787); + fiat_p521_addcarryx_u32(&x2829, &x2830, x2828, x2788, x2785); + fiat_p521_addcarryx_u32(&x2831, &x2832, x2830, x2786, x2783); + fiat_p521_addcarryx_u32(&x2833, &x2834, x2832, x2784, x2781); + fiat_p521_addcarryx_u32(&x2835, &x2836, x2834, x2782, x2779); + fiat_p521_addcarryx_u32(&x2837, &x2838, x2836, x2780, x2777); + fiat_p521_addcarryx_u32(&x2839, &x2840, x2838, x2778, x2775); + x2841 = (x2840 + x2776); + fiat_p521_addcarryx_u32(&x2842, &x2843, 0x0, x2739, x2807); + fiat_p521_addcarryx_u32(&x2844, &x2845, x2843, x2741, x2809); + fiat_p521_addcarryx_u32(&x2846, &x2847, x2845, x2743, x2811); + fiat_p521_addcarryx_u32(&x2848, &x2849, x2847, x2745, x2813); + fiat_p521_addcarryx_u32(&x2850, &x2851, x2849, x2747, x2815); + fiat_p521_addcarryx_u32(&x2852, &x2853, x2851, x2749, x2817); + fiat_p521_addcarryx_u32(&x2854, &x2855, x2853, x2751, x2819); + fiat_p521_addcarryx_u32(&x2856, &x2857, x2855, x2753, x2821); + fiat_p521_addcarryx_u32(&x2858, &x2859, x2857, x2755, x2823); + fiat_p521_addcarryx_u32(&x2860, &x2861, x2859, x2757, x2825); + fiat_p521_addcarryx_u32(&x2862, &x2863, x2861, x2759, x2827); + fiat_p521_addcarryx_u32(&x2864, &x2865, x2863, x2761, x2829); + fiat_p521_addcarryx_u32(&x2866, &x2867, x2865, x2763, x2831); + fiat_p521_addcarryx_u32(&x2868, &x2869, x2867, x2765, x2833); + fiat_p521_addcarryx_u32(&x2870, &x2871, x2869, x2767, x2835); + fiat_p521_addcarryx_u32(&x2872, &x2873, x2871, x2769, x2837); + fiat_p521_addcarryx_u32(&x2874, &x2875, x2873, x2771, x2839); + fiat_p521_addcarryx_u32(&x2876, &x2877, x2875, x2773, x2841); + x2878 = ((uint32_t)x2877 + x2774); + fiat_p521_mulx_u32(&x2879, &x2880, x14, (arg1[16])); + fiat_p521_mulx_u32(&x2881, &x2882, x14, (arg1[15])); + fiat_p521_mulx_u32(&x2883, &x2884, x14, (arg1[14])); + fiat_p521_mulx_u32(&x2885, &x2886, x14, (arg1[13])); + fiat_p521_mulx_u32(&x2887, &x2888, x14, (arg1[12])); + fiat_p521_mulx_u32(&x2889, &x2890, x14, (arg1[11])); + fiat_p521_mulx_u32(&x2891, &x2892, x14, (arg1[10])); + fiat_p521_mulx_u32(&x2893, &x2894, x14, (arg1[9])); + fiat_p521_mulx_u32(&x2895, &x2896, x14, (arg1[8])); + fiat_p521_mulx_u32(&x2897, &x2898, x14, (arg1[7])); + fiat_p521_mulx_u32(&x2899, &x2900, x14, (arg1[6])); + fiat_p521_mulx_u32(&x2901, &x2902, x14, (arg1[5])); + fiat_p521_mulx_u32(&x2903, &x2904, x14, (arg1[4])); + fiat_p521_mulx_u32(&x2905, &x2906, x14, (arg1[3])); + fiat_p521_mulx_u32(&x2907, &x2908, x14, (arg1[2])); + fiat_p521_mulx_u32(&x2909, &x2910, x14, (arg1[1])); + fiat_p521_mulx_u32(&x2911, &x2912, x14, (arg1[0])); + fiat_p521_addcarryx_u32(&x2913, &x2914, 0x0, x2912, x2909); + fiat_p521_addcarryx_u32(&x2915, &x2916, x2914, x2910, x2907); + fiat_p521_addcarryx_u32(&x2917, &x2918, x2916, x2908, x2905); + fiat_p521_addcarryx_u32(&x2919, &x2920, x2918, x2906, x2903); + fiat_p521_addcarryx_u32(&x2921, &x2922, x2920, x2904, x2901); + fiat_p521_addcarryx_u32(&x2923, &x2924, x2922, x2902, x2899); + fiat_p521_addcarryx_u32(&x2925, &x2926, x2924, x2900, x2897); + fiat_p521_addcarryx_u32(&x2927, &x2928, x2926, x2898, x2895); + fiat_p521_addcarryx_u32(&x2929, &x2930, x2928, x2896, x2893); + fiat_p521_addcarryx_u32(&x2931, &x2932, x2930, x2894, x2891); + fiat_p521_addcarryx_u32(&x2933, &x2934, x2932, x2892, x2889); + fiat_p521_addcarryx_u32(&x2935, &x2936, x2934, x2890, x2887); + fiat_p521_addcarryx_u32(&x2937, &x2938, x2936, x2888, x2885); + fiat_p521_addcarryx_u32(&x2939, &x2940, x2938, x2886, x2883); + fiat_p521_addcarryx_u32(&x2941, &x2942, x2940, x2884, x2881); + fiat_p521_addcarryx_u32(&x2943, &x2944, x2942, x2882, x2879); + x2945 = (x2944 + x2880); + fiat_p521_addcarryx_u32(&x2946, &x2947, 0x0, x2844, x2911); + fiat_p521_addcarryx_u32(&x2948, &x2949, x2947, x2846, x2913); + fiat_p521_addcarryx_u32(&x2950, &x2951, x2949, x2848, x2915); + fiat_p521_addcarryx_u32(&x2952, &x2953, x2951, x2850, x2917); + fiat_p521_addcarryx_u32(&x2954, &x2955, x2953, x2852, x2919); + fiat_p521_addcarryx_u32(&x2956, &x2957, x2955, x2854, x2921); + fiat_p521_addcarryx_u32(&x2958, &x2959, x2957, x2856, x2923); + fiat_p521_addcarryx_u32(&x2960, &x2961, x2959, x2858, x2925); + fiat_p521_addcarryx_u32(&x2962, &x2963, x2961, x2860, x2927); + fiat_p521_addcarryx_u32(&x2964, &x2965, x2963, x2862, x2929); + fiat_p521_addcarryx_u32(&x2966, &x2967, x2965, x2864, x2931); + fiat_p521_addcarryx_u32(&x2968, &x2969, x2967, x2866, x2933); + fiat_p521_addcarryx_u32(&x2970, &x2971, x2969, x2868, x2935); + fiat_p521_addcarryx_u32(&x2972, &x2973, x2971, x2870, x2937); + fiat_p521_addcarryx_u32(&x2974, &x2975, x2973, x2872, x2939); + fiat_p521_addcarryx_u32(&x2976, &x2977, x2975, x2874, x2941); + fiat_p521_addcarryx_u32(&x2978, &x2979, x2977, x2876, x2943); + fiat_p521_addcarryx_u32(&x2980, &x2981, x2979, x2878, x2945); + fiat_p521_mulx_u32(&x2982, &x2983, x2946, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x2984, &x2985, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2986, &x2987, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2988, &x2989, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2990, &x2991, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2992, &x2993, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2994, &x2995, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2996, &x2997, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2998, &x2999, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3000, &x3001, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3002, &x3003, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3004, &x3005, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3006, &x3007, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3008, &x3009, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3010, &x3011, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3012, &x3013, x2946, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3014, &x3015, x2946, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x3016, &x3017, 0x0, x3015, x3012); + fiat_p521_addcarryx_u32(&x3018, &x3019, x3017, x3013, x3010); + fiat_p521_addcarryx_u32(&x3020, &x3021, x3019, x3011, x3008); + fiat_p521_addcarryx_u32(&x3022, &x3023, x3021, x3009, x3006); + fiat_p521_addcarryx_u32(&x3024, &x3025, x3023, x3007, x3004); + fiat_p521_addcarryx_u32(&x3026, &x3027, x3025, x3005, x3002); + fiat_p521_addcarryx_u32(&x3028, &x3029, x3027, x3003, x3000); + fiat_p521_addcarryx_u32(&x3030, &x3031, x3029, x3001, x2998); + fiat_p521_addcarryx_u32(&x3032, &x3033, x3031, x2999, x2996); + fiat_p521_addcarryx_u32(&x3034, &x3035, x3033, x2997, x2994); + fiat_p521_addcarryx_u32(&x3036, &x3037, x3035, x2995, x2992); + fiat_p521_addcarryx_u32(&x3038, &x3039, x3037, x2993, x2990); + fiat_p521_addcarryx_u32(&x3040, &x3041, x3039, x2991, x2988); + fiat_p521_addcarryx_u32(&x3042, &x3043, x3041, x2989, x2986); + fiat_p521_addcarryx_u32(&x3044, &x3045, x3043, x2987, x2984); + fiat_p521_addcarryx_u32(&x3046, &x3047, x3045, x2985, x2982); + x3048 = (x3047 + x2983); + fiat_p521_addcarryx_u32(&x3049, &x3050, 0x0, x2946, x3014); + fiat_p521_addcarryx_u32(&x3051, &x3052, x3050, x2948, x3016); + fiat_p521_addcarryx_u32(&x3053, &x3054, x3052, x2950, x3018); + fiat_p521_addcarryx_u32(&x3055, &x3056, x3054, x2952, x3020); + fiat_p521_addcarryx_u32(&x3057, &x3058, x3056, x2954, x3022); + fiat_p521_addcarryx_u32(&x3059, &x3060, x3058, x2956, x3024); + fiat_p521_addcarryx_u32(&x3061, &x3062, x3060, x2958, x3026); + fiat_p521_addcarryx_u32(&x3063, &x3064, x3062, x2960, x3028); + fiat_p521_addcarryx_u32(&x3065, &x3066, x3064, x2962, x3030); + fiat_p521_addcarryx_u32(&x3067, &x3068, x3066, x2964, x3032); + fiat_p521_addcarryx_u32(&x3069, &x3070, x3068, x2966, x3034); + fiat_p521_addcarryx_u32(&x3071, &x3072, x3070, x2968, x3036); + fiat_p521_addcarryx_u32(&x3073, &x3074, x3072, x2970, x3038); + fiat_p521_addcarryx_u32(&x3075, &x3076, x3074, x2972, x3040); + fiat_p521_addcarryx_u32(&x3077, &x3078, x3076, x2974, x3042); + fiat_p521_addcarryx_u32(&x3079, &x3080, x3078, x2976, x3044); + fiat_p521_addcarryx_u32(&x3081, &x3082, x3080, x2978, x3046); + fiat_p521_addcarryx_u32(&x3083, &x3084, x3082, x2980, x3048); + x3085 = ((uint32_t)x3084 + x2981); + fiat_p521_mulx_u32(&x3086, &x3087, x15, (arg1[16])); + fiat_p521_mulx_u32(&x3088, &x3089, x15, (arg1[15])); + fiat_p521_mulx_u32(&x3090, &x3091, x15, (arg1[14])); + fiat_p521_mulx_u32(&x3092, &x3093, x15, (arg1[13])); + fiat_p521_mulx_u32(&x3094, &x3095, x15, (arg1[12])); + fiat_p521_mulx_u32(&x3096, &x3097, x15, (arg1[11])); + fiat_p521_mulx_u32(&x3098, &x3099, x15, (arg1[10])); + fiat_p521_mulx_u32(&x3100, &x3101, x15, (arg1[9])); + fiat_p521_mulx_u32(&x3102, &x3103, x15, (arg1[8])); + fiat_p521_mulx_u32(&x3104, &x3105, x15, (arg1[7])); + fiat_p521_mulx_u32(&x3106, &x3107, x15, (arg1[6])); + fiat_p521_mulx_u32(&x3108, &x3109, x15, (arg1[5])); + fiat_p521_mulx_u32(&x3110, &x3111, x15, (arg1[4])); + fiat_p521_mulx_u32(&x3112, &x3113, x15, (arg1[3])); + fiat_p521_mulx_u32(&x3114, &x3115, x15, (arg1[2])); + fiat_p521_mulx_u32(&x3116, &x3117, x15, (arg1[1])); + fiat_p521_mulx_u32(&x3118, &x3119, x15, (arg1[0])); + fiat_p521_addcarryx_u32(&x3120, &x3121, 0x0, x3119, x3116); + fiat_p521_addcarryx_u32(&x3122, &x3123, x3121, x3117, x3114); + fiat_p521_addcarryx_u32(&x3124, &x3125, x3123, x3115, x3112); + fiat_p521_addcarryx_u32(&x3126, &x3127, x3125, x3113, x3110); + fiat_p521_addcarryx_u32(&x3128, &x3129, x3127, x3111, x3108); + fiat_p521_addcarryx_u32(&x3130, &x3131, x3129, x3109, x3106); + fiat_p521_addcarryx_u32(&x3132, &x3133, x3131, x3107, x3104); + fiat_p521_addcarryx_u32(&x3134, &x3135, x3133, x3105, x3102); + fiat_p521_addcarryx_u32(&x3136, &x3137, x3135, x3103, x3100); + fiat_p521_addcarryx_u32(&x3138, &x3139, x3137, x3101, x3098); + fiat_p521_addcarryx_u32(&x3140, &x3141, x3139, x3099, x3096); + fiat_p521_addcarryx_u32(&x3142, &x3143, x3141, x3097, x3094); + fiat_p521_addcarryx_u32(&x3144, &x3145, x3143, x3095, x3092); + fiat_p521_addcarryx_u32(&x3146, &x3147, x3145, x3093, x3090); + fiat_p521_addcarryx_u32(&x3148, &x3149, x3147, x3091, x3088); + fiat_p521_addcarryx_u32(&x3150, &x3151, x3149, x3089, x3086); + x3152 = (x3151 + x3087); + fiat_p521_addcarryx_u32(&x3153, &x3154, 0x0, x3051, x3118); + fiat_p521_addcarryx_u32(&x3155, &x3156, x3154, x3053, x3120); + fiat_p521_addcarryx_u32(&x3157, &x3158, x3156, x3055, x3122); + fiat_p521_addcarryx_u32(&x3159, &x3160, x3158, x3057, x3124); + fiat_p521_addcarryx_u32(&x3161, &x3162, x3160, x3059, x3126); + fiat_p521_addcarryx_u32(&x3163, &x3164, x3162, x3061, x3128); + fiat_p521_addcarryx_u32(&x3165, &x3166, x3164, x3063, x3130); + fiat_p521_addcarryx_u32(&x3167, &x3168, x3166, x3065, x3132); + fiat_p521_addcarryx_u32(&x3169, &x3170, x3168, x3067, x3134); + fiat_p521_addcarryx_u32(&x3171, &x3172, x3170, x3069, x3136); + fiat_p521_addcarryx_u32(&x3173, &x3174, x3172, x3071, x3138); + fiat_p521_addcarryx_u32(&x3175, &x3176, x3174, x3073, x3140); + fiat_p521_addcarryx_u32(&x3177, &x3178, x3176, x3075, x3142); + fiat_p521_addcarryx_u32(&x3179, &x3180, x3178, x3077, x3144); + fiat_p521_addcarryx_u32(&x3181, &x3182, x3180, x3079, x3146); + fiat_p521_addcarryx_u32(&x3183, &x3184, x3182, x3081, x3148); + fiat_p521_addcarryx_u32(&x3185, &x3186, x3184, x3083, x3150); + fiat_p521_addcarryx_u32(&x3187, &x3188, x3186, x3085, x3152); + fiat_p521_mulx_u32(&x3189, &x3190, x3153, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x3191, &x3192, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3193, &x3194, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3195, &x3196, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3197, &x3198, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3199, &x3200, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3201, &x3202, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3203, &x3204, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3205, &x3206, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3207, &x3208, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3209, &x3210, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3211, &x3212, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3213, &x3214, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3215, &x3216, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3217, &x3218, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3219, &x3220, x3153, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3221, &x3222, x3153, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x3223, &x3224, 0x0, x3222, x3219); + fiat_p521_addcarryx_u32(&x3225, &x3226, x3224, x3220, x3217); + fiat_p521_addcarryx_u32(&x3227, &x3228, x3226, x3218, x3215); + fiat_p521_addcarryx_u32(&x3229, &x3230, x3228, x3216, x3213); + fiat_p521_addcarryx_u32(&x3231, &x3232, x3230, x3214, x3211); + fiat_p521_addcarryx_u32(&x3233, &x3234, x3232, x3212, x3209); + fiat_p521_addcarryx_u32(&x3235, &x3236, x3234, x3210, x3207); + fiat_p521_addcarryx_u32(&x3237, &x3238, x3236, x3208, x3205); + fiat_p521_addcarryx_u32(&x3239, &x3240, x3238, x3206, x3203); + fiat_p521_addcarryx_u32(&x3241, &x3242, x3240, x3204, x3201); + fiat_p521_addcarryx_u32(&x3243, &x3244, x3242, x3202, x3199); + fiat_p521_addcarryx_u32(&x3245, &x3246, x3244, x3200, x3197); + fiat_p521_addcarryx_u32(&x3247, &x3248, x3246, x3198, x3195); + fiat_p521_addcarryx_u32(&x3249, &x3250, x3248, x3196, x3193); + fiat_p521_addcarryx_u32(&x3251, &x3252, x3250, x3194, x3191); + fiat_p521_addcarryx_u32(&x3253, &x3254, x3252, x3192, x3189); + x3255 = (x3254 + x3190); + fiat_p521_addcarryx_u32(&x3256, &x3257, 0x0, x3153, x3221); + fiat_p521_addcarryx_u32(&x3258, &x3259, x3257, x3155, x3223); + fiat_p521_addcarryx_u32(&x3260, &x3261, x3259, x3157, x3225); + fiat_p521_addcarryx_u32(&x3262, &x3263, x3261, x3159, x3227); + fiat_p521_addcarryx_u32(&x3264, &x3265, x3263, x3161, x3229); + fiat_p521_addcarryx_u32(&x3266, &x3267, x3265, x3163, x3231); + fiat_p521_addcarryx_u32(&x3268, &x3269, x3267, x3165, x3233); + fiat_p521_addcarryx_u32(&x3270, &x3271, x3269, x3167, x3235); + fiat_p521_addcarryx_u32(&x3272, &x3273, x3271, x3169, x3237); + fiat_p521_addcarryx_u32(&x3274, &x3275, x3273, x3171, x3239); + fiat_p521_addcarryx_u32(&x3276, &x3277, x3275, x3173, x3241); + fiat_p521_addcarryx_u32(&x3278, &x3279, x3277, x3175, x3243); + fiat_p521_addcarryx_u32(&x3280, &x3281, x3279, x3177, x3245); + fiat_p521_addcarryx_u32(&x3282, &x3283, x3281, x3179, x3247); + fiat_p521_addcarryx_u32(&x3284, &x3285, x3283, x3181, x3249); + fiat_p521_addcarryx_u32(&x3286, &x3287, x3285, x3183, x3251); + fiat_p521_addcarryx_u32(&x3288, &x3289, x3287, x3185, x3253); + fiat_p521_addcarryx_u32(&x3290, &x3291, x3289, x3187, x3255); + x3292 = ((uint32_t)x3291 + x3188); + fiat_p521_mulx_u32(&x3293, &x3294, x16, (arg1[16])); + fiat_p521_mulx_u32(&x3295, &x3296, x16, (arg1[15])); + fiat_p521_mulx_u32(&x3297, &x3298, x16, (arg1[14])); + fiat_p521_mulx_u32(&x3299, &x3300, x16, (arg1[13])); + fiat_p521_mulx_u32(&x3301, &x3302, x16, (arg1[12])); + fiat_p521_mulx_u32(&x3303, &x3304, x16, (arg1[11])); + fiat_p521_mulx_u32(&x3305, &x3306, x16, (arg1[10])); + fiat_p521_mulx_u32(&x3307, &x3308, x16, (arg1[9])); + fiat_p521_mulx_u32(&x3309, &x3310, x16, (arg1[8])); + fiat_p521_mulx_u32(&x3311, &x3312, x16, (arg1[7])); + fiat_p521_mulx_u32(&x3313, &x3314, x16, (arg1[6])); + fiat_p521_mulx_u32(&x3315, &x3316, x16, (arg1[5])); + fiat_p521_mulx_u32(&x3317, &x3318, x16, (arg1[4])); + fiat_p521_mulx_u32(&x3319, &x3320, x16, (arg1[3])); + fiat_p521_mulx_u32(&x3321, &x3322, x16, (arg1[2])); + fiat_p521_mulx_u32(&x3323, &x3324, x16, (arg1[1])); + fiat_p521_mulx_u32(&x3325, &x3326, x16, (arg1[0])); + fiat_p521_addcarryx_u32(&x3327, &x3328, 0x0, x3326, x3323); + fiat_p521_addcarryx_u32(&x3329, &x3330, x3328, x3324, x3321); + fiat_p521_addcarryx_u32(&x3331, &x3332, x3330, x3322, x3319); + fiat_p521_addcarryx_u32(&x3333, &x3334, x3332, x3320, x3317); + fiat_p521_addcarryx_u32(&x3335, &x3336, x3334, x3318, x3315); + fiat_p521_addcarryx_u32(&x3337, &x3338, x3336, x3316, x3313); + fiat_p521_addcarryx_u32(&x3339, &x3340, x3338, x3314, x3311); + fiat_p521_addcarryx_u32(&x3341, &x3342, x3340, x3312, x3309); + fiat_p521_addcarryx_u32(&x3343, &x3344, x3342, x3310, x3307); + fiat_p521_addcarryx_u32(&x3345, &x3346, x3344, x3308, x3305); + fiat_p521_addcarryx_u32(&x3347, &x3348, x3346, x3306, x3303); + fiat_p521_addcarryx_u32(&x3349, &x3350, x3348, x3304, x3301); + fiat_p521_addcarryx_u32(&x3351, &x3352, x3350, x3302, x3299); + fiat_p521_addcarryx_u32(&x3353, &x3354, x3352, x3300, x3297); + fiat_p521_addcarryx_u32(&x3355, &x3356, x3354, x3298, x3295); + fiat_p521_addcarryx_u32(&x3357, &x3358, x3356, x3296, x3293); + x3359 = (x3358 + x3294); + fiat_p521_addcarryx_u32(&x3360, &x3361, 0x0, x3258, x3325); + fiat_p521_addcarryx_u32(&x3362, &x3363, x3361, x3260, x3327); + fiat_p521_addcarryx_u32(&x3364, &x3365, x3363, x3262, x3329); + fiat_p521_addcarryx_u32(&x3366, &x3367, x3365, x3264, x3331); + fiat_p521_addcarryx_u32(&x3368, &x3369, x3367, x3266, x3333); + fiat_p521_addcarryx_u32(&x3370, &x3371, x3369, x3268, x3335); + fiat_p521_addcarryx_u32(&x3372, &x3373, x3371, x3270, x3337); + fiat_p521_addcarryx_u32(&x3374, &x3375, x3373, x3272, x3339); + fiat_p521_addcarryx_u32(&x3376, &x3377, x3375, x3274, x3341); + fiat_p521_addcarryx_u32(&x3378, &x3379, x3377, x3276, x3343); + fiat_p521_addcarryx_u32(&x3380, &x3381, x3379, x3278, x3345); + fiat_p521_addcarryx_u32(&x3382, &x3383, x3381, x3280, x3347); + fiat_p521_addcarryx_u32(&x3384, &x3385, x3383, x3282, x3349); + fiat_p521_addcarryx_u32(&x3386, &x3387, x3385, x3284, x3351); + fiat_p521_addcarryx_u32(&x3388, &x3389, x3387, x3286, x3353); + fiat_p521_addcarryx_u32(&x3390, &x3391, x3389, x3288, x3355); + fiat_p521_addcarryx_u32(&x3392, &x3393, x3391, x3290, x3357); + fiat_p521_addcarryx_u32(&x3394, &x3395, x3393, x3292, x3359); + fiat_p521_mulx_u32(&x3396, &x3397, x3360, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x3398, &x3399, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3400, &x3401, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3402, &x3403, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3404, &x3405, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3406, &x3407, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3408, &x3409, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3410, &x3411, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3412, &x3413, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3414, &x3415, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3416, &x3417, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3418, &x3419, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3420, &x3421, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3422, &x3423, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3424, &x3425, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3426, &x3427, x3360, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x3428, &x3429, x3360, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x3430, &x3431, 0x0, x3429, x3426); + fiat_p521_addcarryx_u32(&x3432, &x3433, x3431, x3427, x3424); + fiat_p521_addcarryx_u32(&x3434, &x3435, x3433, x3425, x3422); + fiat_p521_addcarryx_u32(&x3436, &x3437, x3435, x3423, x3420); + fiat_p521_addcarryx_u32(&x3438, &x3439, x3437, x3421, x3418); + fiat_p521_addcarryx_u32(&x3440, &x3441, x3439, x3419, x3416); + fiat_p521_addcarryx_u32(&x3442, &x3443, x3441, x3417, x3414); + fiat_p521_addcarryx_u32(&x3444, &x3445, x3443, x3415, x3412); + fiat_p521_addcarryx_u32(&x3446, &x3447, x3445, x3413, x3410); + fiat_p521_addcarryx_u32(&x3448, &x3449, x3447, x3411, x3408); + fiat_p521_addcarryx_u32(&x3450, &x3451, x3449, x3409, x3406); + fiat_p521_addcarryx_u32(&x3452, &x3453, x3451, x3407, x3404); + fiat_p521_addcarryx_u32(&x3454, &x3455, x3453, x3405, x3402); + fiat_p521_addcarryx_u32(&x3456, &x3457, x3455, x3403, x3400); + fiat_p521_addcarryx_u32(&x3458, &x3459, x3457, x3401, x3398); + fiat_p521_addcarryx_u32(&x3460, &x3461, x3459, x3399, x3396); + x3462 = (x3461 + x3397); + fiat_p521_addcarryx_u32(&x3463, &x3464, 0x0, x3360, x3428); + fiat_p521_addcarryx_u32(&x3465, &x3466, x3464, x3362, x3430); + fiat_p521_addcarryx_u32(&x3467, &x3468, x3466, x3364, x3432); + fiat_p521_addcarryx_u32(&x3469, &x3470, x3468, x3366, x3434); + fiat_p521_addcarryx_u32(&x3471, &x3472, x3470, x3368, x3436); + fiat_p521_addcarryx_u32(&x3473, &x3474, x3472, x3370, x3438); + fiat_p521_addcarryx_u32(&x3475, &x3476, x3474, x3372, x3440); + fiat_p521_addcarryx_u32(&x3477, &x3478, x3476, x3374, x3442); + fiat_p521_addcarryx_u32(&x3479, &x3480, x3478, x3376, x3444); + fiat_p521_addcarryx_u32(&x3481, &x3482, x3480, x3378, x3446); + fiat_p521_addcarryx_u32(&x3483, &x3484, x3482, x3380, x3448); + fiat_p521_addcarryx_u32(&x3485, &x3486, x3484, x3382, x3450); + fiat_p521_addcarryx_u32(&x3487, &x3488, x3486, x3384, x3452); + fiat_p521_addcarryx_u32(&x3489, &x3490, x3488, x3386, x3454); + fiat_p521_addcarryx_u32(&x3491, &x3492, x3490, x3388, x3456); + fiat_p521_addcarryx_u32(&x3493, &x3494, x3492, x3390, x3458); + fiat_p521_addcarryx_u32(&x3495, &x3496, x3494, x3392, x3460); + fiat_p521_addcarryx_u32(&x3497, &x3498, x3496, x3394, x3462); + x3499 = ((uint32_t)x3498 + x3395); + fiat_p521_subborrowx_u32(&x3500, &x3501, 0x0, x3465, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3502, &x3503, x3501, x3467, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3504, &x3505, x3503, x3469, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3506, &x3507, x3505, x3471, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3508, &x3509, x3507, x3473, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3510, &x3511, x3509, x3475, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3512, &x3513, x3511, x3477, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3514, &x3515, x3513, x3479, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3516, &x3517, x3515, x3481, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3518, &x3519, x3517, x3483, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3520, &x3521, x3519, x3485, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3522, &x3523, x3521, x3487, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3524, &x3525, x3523, x3489, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3526, &x3527, x3525, x3491, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3528, &x3529, x3527, x3493, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3530, &x3531, x3529, x3495, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x3532, &x3533, x3531, x3497, UINT16_C(0x1ff)); + fiat_p521_subborrowx_u32(&x3534, &x3535, x3533, x3499, 0x0); + fiat_p521_cmovznz_u32(&x3536, x3535, x3500, x3465); + fiat_p521_cmovznz_u32(&x3537, x3535, x3502, x3467); + fiat_p521_cmovznz_u32(&x3538, x3535, x3504, x3469); + fiat_p521_cmovznz_u32(&x3539, x3535, x3506, x3471); + fiat_p521_cmovznz_u32(&x3540, x3535, x3508, x3473); + fiat_p521_cmovznz_u32(&x3541, x3535, x3510, x3475); + fiat_p521_cmovznz_u32(&x3542, x3535, x3512, x3477); + fiat_p521_cmovznz_u32(&x3543, x3535, x3514, x3479); + fiat_p521_cmovznz_u32(&x3544, x3535, x3516, x3481); + fiat_p521_cmovznz_u32(&x3545, x3535, x3518, x3483); + fiat_p521_cmovznz_u32(&x3546, x3535, x3520, x3485); + fiat_p521_cmovznz_u32(&x3547, x3535, x3522, x3487); + fiat_p521_cmovznz_u32(&x3548, x3535, x3524, x3489); + fiat_p521_cmovznz_u32(&x3549, x3535, x3526, x3491); + fiat_p521_cmovznz_u32(&x3550, x3535, x3528, x3493); + fiat_p521_cmovznz_u32(&x3551, x3535, x3530, x3495); + fiat_p521_cmovznz_u32(&x3552, x3535, x3532, x3497); + out1[0] = x3536; + out1[1] = x3537; + out1[2] = x3538; + out1[3] = x3539; + out1[4] = x3540; + out1[5] = x3541; + out1[6] = x3542; + out1[7] = x3543; + out1[8] = x3544; + out1[9] = x3545; + out1[10] = x3546; + out1[11] = x3547; + out1[12] = x3548; + out1[13] = x3549; + out1[14] = x3550; + out1[15] = x3551; + out1[16] = x3552; +} + +/* + * The function fiat_p521_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p521_add(uint32_t out1[17], const uint32_t arg1[17], const uint32_t arg2[17]) { + uint32_t x1; + fiat_p521_uint1 x2; + uint32_t x3; + fiat_p521_uint1 x4; + uint32_t x5; + fiat_p521_uint1 x6; + uint32_t x7; + fiat_p521_uint1 x8; + uint32_t x9; + fiat_p521_uint1 x10; + uint32_t x11; + fiat_p521_uint1 x12; + uint32_t x13; + fiat_p521_uint1 x14; + uint32_t x15; + fiat_p521_uint1 x16; + uint32_t x17; + fiat_p521_uint1 x18; + uint32_t x19; + fiat_p521_uint1 x20; + uint32_t x21; + fiat_p521_uint1 x22; + uint32_t x23; + fiat_p521_uint1 x24; + uint32_t x25; + fiat_p521_uint1 x26; + uint32_t x27; + fiat_p521_uint1 x28; + uint32_t x29; + fiat_p521_uint1 x30; + uint32_t x31; + fiat_p521_uint1 x32; + uint32_t x33; + fiat_p521_uint1 x34; + uint32_t x35; + fiat_p521_uint1 x36; + uint32_t x37; + fiat_p521_uint1 x38; + uint32_t x39; + fiat_p521_uint1 x40; + uint32_t x41; + fiat_p521_uint1 x42; + uint32_t x43; + fiat_p521_uint1 x44; + uint32_t x45; + fiat_p521_uint1 x46; + uint32_t x47; + fiat_p521_uint1 x48; + uint32_t x49; + fiat_p521_uint1 x50; + uint32_t x51; + fiat_p521_uint1 x52; + uint32_t x53; + fiat_p521_uint1 x54; + uint32_t x55; + fiat_p521_uint1 x56; + uint32_t x57; + fiat_p521_uint1 x58; + uint32_t x59; + fiat_p521_uint1 x60; + uint32_t x61; + fiat_p521_uint1 x62; + uint32_t x63; + fiat_p521_uint1 x64; + uint32_t x65; + fiat_p521_uint1 x66; + uint32_t x67; + fiat_p521_uint1 x68; + uint32_t x69; + fiat_p521_uint1 x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + uint32_t x81; + uint32_t x82; + uint32_t x83; + uint32_t x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + fiat_p521_addcarryx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_p521_addcarryx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_p521_addcarryx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_p521_addcarryx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_p521_addcarryx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_p521_addcarryx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_p521_addcarryx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); + fiat_p521_addcarryx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); + fiat_p521_addcarryx_u32(&x17, &x18, x16, (arg1[8]), (arg2[8])); + fiat_p521_addcarryx_u32(&x19, &x20, x18, (arg1[9]), (arg2[9])); + fiat_p521_addcarryx_u32(&x21, &x22, x20, (arg1[10]), (arg2[10])); + fiat_p521_addcarryx_u32(&x23, &x24, x22, (arg1[11]), (arg2[11])); + fiat_p521_addcarryx_u32(&x25, &x26, x24, (arg1[12]), (arg2[12])); + fiat_p521_addcarryx_u32(&x27, &x28, x26, (arg1[13]), (arg2[13])); + fiat_p521_addcarryx_u32(&x29, &x30, x28, (arg1[14]), (arg2[14])); + fiat_p521_addcarryx_u32(&x31, &x32, x30, (arg1[15]), (arg2[15])); + fiat_p521_addcarryx_u32(&x33, &x34, x32, (arg1[16]), (arg2[16])); + fiat_p521_subborrowx_u32(&x35, &x36, 0x0, x1, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x37, &x38, x36, x3, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x39, &x40, x38, x5, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x41, &x42, x40, x7, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x43, &x44, x42, x9, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x45, &x46, x44, x11, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x47, &x48, x46, x13, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x49, &x50, x48, x15, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x51, &x52, x50, x17, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x53, &x54, x52, x19, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x55, &x56, x54, x21, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x57, &x58, x56, x23, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x59, &x60, x58, x25, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x61, &x62, x60, x27, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x63, &x64, x62, x29, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x65, &x66, x64, x31, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x67, &x68, x66, x33, UINT16_C(0x1ff)); + fiat_p521_subborrowx_u32(&x69, &x70, x68, x34, 0x0); + fiat_p521_cmovznz_u32(&x71, x70, x35, x1); + fiat_p521_cmovznz_u32(&x72, x70, x37, x3); + fiat_p521_cmovznz_u32(&x73, x70, x39, x5); + fiat_p521_cmovznz_u32(&x74, x70, x41, x7); + fiat_p521_cmovznz_u32(&x75, x70, x43, x9); + fiat_p521_cmovznz_u32(&x76, x70, x45, x11); + fiat_p521_cmovznz_u32(&x77, x70, x47, x13); + fiat_p521_cmovznz_u32(&x78, x70, x49, x15); + fiat_p521_cmovznz_u32(&x79, x70, x51, x17); + fiat_p521_cmovznz_u32(&x80, x70, x53, x19); + fiat_p521_cmovznz_u32(&x81, x70, x55, x21); + fiat_p521_cmovznz_u32(&x82, x70, x57, x23); + fiat_p521_cmovznz_u32(&x83, x70, x59, x25); + fiat_p521_cmovznz_u32(&x84, x70, x61, x27); + fiat_p521_cmovznz_u32(&x85, x70, x63, x29); + fiat_p521_cmovznz_u32(&x86, x70, x65, x31); + fiat_p521_cmovznz_u32(&x87, x70, x67, x33); + out1[0] = x71; + out1[1] = x72; + out1[2] = x73; + out1[3] = x74; + out1[4] = x75; + out1[5] = x76; + out1[6] = x77; + out1[7] = x78; + out1[8] = x79; + out1[9] = x80; + out1[10] = x81; + out1[11] = x82; + out1[12] = x83; + out1[13] = x84; + out1[14] = x85; + out1[15] = x86; + out1[16] = x87; +} + +/* + * The function fiat_p521_sub subtracts two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p521_sub(uint32_t out1[17], const uint32_t arg1[17], const uint32_t arg2[17]) { + uint32_t x1; + fiat_p521_uint1 x2; + uint32_t x3; + fiat_p521_uint1 x4; + uint32_t x5; + fiat_p521_uint1 x6; + uint32_t x7; + fiat_p521_uint1 x8; + uint32_t x9; + fiat_p521_uint1 x10; + uint32_t x11; + fiat_p521_uint1 x12; + uint32_t x13; + fiat_p521_uint1 x14; + uint32_t x15; + fiat_p521_uint1 x16; + uint32_t x17; + fiat_p521_uint1 x18; + uint32_t x19; + fiat_p521_uint1 x20; + uint32_t x21; + fiat_p521_uint1 x22; + uint32_t x23; + fiat_p521_uint1 x24; + uint32_t x25; + fiat_p521_uint1 x26; + uint32_t x27; + fiat_p521_uint1 x28; + uint32_t x29; + fiat_p521_uint1 x30; + uint32_t x31; + fiat_p521_uint1 x32; + uint32_t x33; + fiat_p521_uint1 x34; + uint32_t x35; + uint32_t x36; + fiat_p521_uint1 x37; + uint32_t x38; + fiat_p521_uint1 x39; + uint32_t x40; + fiat_p521_uint1 x41; + uint32_t x42; + fiat_p521_uint1 x43; + uint32_t x44; + fiat_p521_uint1 x45; + uint32_t x46; + fiat_p521_uint1 x47; + uint32_t x48; + fiat_p521_uint1 x49; + uint32_t x50; + fiat_p521_uint1 x51; + uint32_t x52; + fiat_p521_uint1 x53; + uint32_t x54; + fiat_p521_uint1 x55; + uint32_t x56; + fiat_p521_uint1 x57; + uint32_t x58; + fiat_p521_uint1 x59; + uint32_t x60; + fiat_p521_uint1 x61; + uint32_t x62; + fiat_p521_uint1 x63; + uint32_t x64; + fiat_p521_uint1 x65; + uint32_t x66; + fiat_p521_uint1 x67; + uint32_t x68; + fiat_p521_uint1 x69; + fiat_p521_subborrowx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_p521_subborrowx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_p521_subborrowx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_p521_subborrowx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_p521_subborrowx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_p521_subborrowx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_p521_subborrowx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); + fiat_p521_subborrowx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); + fiat_p521_subborrowx_u32(&x17, &x18, x16, (arg1[8]), (arg2[8])); + fiat_p521_subborrowx_u32(&x19, &x20, x18, (arg1[9]), (arg2[9])); + fiat_p521_subborrowx_u32(&x21, &x22, x20, (arg1[10]), (arg2[10])); + fiat_p521_subborrowx_u32(&x23, &x24, x22, (arg1[11]), (arg2[11])); + fiat_p521_subborrowx_u32(&x25, &x26, x24, (arg1[12]), (arg2[12])); + fiat_p521_subborrowx_u32(&x27, &x28, x26, (arg1[13]), (arg2[13])); + fiat_p521_subborrowx_u32(&x29, &x30, x28, (arg1[14]), (arg2[14])); + fiat_p521_subborrowx_u32(&x31, &x32, x30, (arg1[15]), (arg2[15])); + fiat_p521_subborrowx_u32(&x33, &x34, x32, (arg1[16]), (arg2[16])); + fiat_p521_cmovznz_u32(&x35, x34, 0x0, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x36, &x37, 0x0, x1, x35); + fiat_p521_addcarryx_u32(&x38, &x39, x37, x3, x35); + fiat_p521_addcarryx_u32(&x40, &x41, x39, x5, x35); + fiat_p521_addcarryx_u32(&x42, &x43, x41, x7, x35); + fiat_p521_addcarryx_u32(&x44, &x45, x43, x9, x35); + fiat_p521_addcarryx_u32(&x46, &x47, x45, x11, x35); + fiat_p521_addcarryx_u32(&x48, &x49, x47, x13, x35); + fiat_p521_addcarryx_u32(&x50, &x51, x49, x15, x35); + fiat_p521_addcarryx_u32(&x52, &x53, x51, x17, x35); + fiat_p521_addcarryx_u32(&x54, &x55, x53, x19, x35); + fiat_p521_addcarryx_u32(&x56, &x57, x55, x21, x35); + fiat_p521_addcarryx_u32(&x58, &x59, x57, x23, x35); + fiat_p521_addcarryx_u32(&x60, &x61, x59, x25, x35); + fiat_p521_addcarryx_u32(&x62, &x63, x61, x27, x35); + fiat_p521_addcarryx_u32(&x64, &x65, x63, x29, x35); + fiat_p521_addcarryx_u32(&x66, &x67, x65, x31, x35); + fiat_p521_addcarryx_u32(&x68, &x69, x67, x33, (x35 & UINT16_C(0x1ff))); + out1[0] = x36; + out1[1] = x38; + out1[2] = x40; + out1[3] = x42; + out1[4] = x44; + out1[5] = x46; + out1[6] = x48; + out1[7] = x50; + out1[8] = x52; + out1[9] = x54; + out1[10] = x56; + out1[11] = x58; + out1[12] = x60; + out1[13] = x62; + out1[14] = x64; + out1[15] = x66; + out1[16] = x68; +} + +/* + * The function fiat_p521_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p521_opp(uint32_t out1[17], const uint32_t arg1[17]) { + uint32_t x1; + fiat_p521_uint1 x2; + uint32_t x3; + fiat_p521_uint1 x4; + uint32_t x5; + fiat_p521_uint1 x6; + uint32_t x7; + fiat_p521_uint1 x8; + uint32_t x9; + fiat_p521_uint1 x10; + uint32_t x11; + fiat_p521_uint1 x12; + uint32_t x13; + fiat_p521_uint1 x14; + uint32_t x15; + fiat_p521_uint1 x16; + uint32_t x17; + fiat_p521_uint1 x18; + uint32_t x19; + fiat_p521_uint1 x20; + uint32_t x21; + fiat_p521_uint1 x22; + uint32_t x23; + fiat_p521_uint1 x24; + uint32_t x25; + fiat_p521_uint1 x26; + uint32_t x27; + fiat_p521_uint1 x28; + uint32_t x29; + fiat_p521_uint1 x30; + uint32_t x31; + fiat_p521_uint1 x32; + uint32_t x33; + fiat_p521_uint1 x34; + uint32_t x35; + uint32_t x36; + fiat_p521_uint1 x37; + uint32_t x38; + fiat_p521_uint1 x39; + uint32_t x40; + fiat_p521_uint1 x41; + uint32_t x42; + fiat_p521_uint1 x43; + uint32_t x44; + fiat_p521_uint1 x45; + uint32_t x46; + fiat_p521_uint1 x47; + uint32_t x48; + fiat_p521_uint1 x49; + uint32_t x50; + fiat_p521_uint1 x51; + uint32_t x52; + fiat_p521_uint1 x53; + uint32_t x54; + fiat_p521_uint1 x55; + uint32_t x56; + fiat_p521_uint1 x57; + uint32_t x58; + fiat_p521_uint1 x59; + uint32_t x60; + fiat_p521_uint1 x61; + uint32_t x62; + fiat_p521_uint1 x63; + uint32_t x64; + fiat_p521_uint1 x65; + uint32_t x66; + fiat_p521_uint1 x67; + uint32_t x68; + fiat_p521_uint1 x69; + fiat_p521_subborrowx_u32(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_p521_subborrowx_u32(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_p521_subborrowx_u32(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_p521_subborrowx_u32(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_p521_subborrowx_u32(&x9, &x10, x8, 0x0, (arg1[4])); + fiat_p521_subborrowx_u32(&x11, &x12, x10, 0x0, (arg1[5])); + fiat_p521_subborrowx_u32(&x13, &x14, x12, 0x0, (arg1[6])); + fiat_p521_subborrowx_u32(&x15, &x16, x14, 0x0, (arg1[7])); + fiat_p521_subborrowx_u32(&x17, &x18, x16, 0x0, (arg1[8])); + fiat_p521_subborrowx_u32(&x19, &x20, x18, 0x0, (arg1[9])); + fiat_p521_subborrowx_u32(&x21, &x22, x20, 0x0, (arg1[10])); + fiat_p521_subborrowx_u32(&x23, &x24, x22, 0x0, (arg1[11])); + fiat_p521_subborrowx_u32(&x25, &x26, x24, 0x0, (arg1[12])); + fiat_p521_subborrowx_u32(&x27, &x28, x26, 0x0, (arg1[13])); + fiat_p521_subborrowx_u32(&x29, &x30, x28, 0x0, (arg1[14])); + fiat_p521_subborrowx_u32(&x31, &x32, x30, 0x0, (arg1[15])); + fiat_p521_subborrowx_u32(&x33, &x34, x32, 0x0, (arg1[16])); + fiat_p521_cmovznz_u32(&x35, x34, 0x0, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x36, &x37, 0x0, x1, x35); + fiat_p521_addcarryx_u32(&x38, &x39, x37, x3, x35); + fiat_p521_addcarryx_u32(&x40, &x41, x39, x5, x35); + fiat_p521_addcarryx_u32(&x42, &x43, x41, x7, x35); + fiat_p521_addcarryx_u32(&x44, &x45, x43, x9, x35); + fiat_p521_addcarryx_u32(&x46, &x47, x45, x11, x35); + fiat_p521_addcarryx_u32(&x48, &x49, x47, x13, x35); + fiat_p521_addcarryx_u32(&x50, &x51, x49, x15, x35); + fiat_p521_addcarryx_u32(&x52, &x53, x51, x17, x35); + fiat_p521_addcarryx_u32(&x54, &x55, x53, x19, x35); + fiat_p521_addcarryx_u32(&x56, &x57, x55, x21, x35); + fiat_p521_addcarryx_u32(&x58, &x59, x57, x23, x35); + fiat_p521_addcarryx_u32(&x60, &x61, x59, x25, x35); + fiat_p521_addcarryx_u32(&x62, &x63, x61, x27, x35); + fiat_p521_addcarryx_u32(&x64, &x65, x63, x29, x35); + fiat_p521_addcarryx_u32(&x66, &x67, x65, x31, x35); + fiat_p521_addcarryx_u32(&x68, &x69, x67, x33, (x35 & UINT16_C(0x1ff))); + out1[0] = x36; + out1[1] = x38; + out1[2] = x40; + out1[3] = x42; + out1[4] = x44; + out1[5] = x46; + out1[6] = x48; + out1[7] = x50; + out1[8] = x52; + out1[9] = x54; + out1[10] = x56; + out1[11] = x58; + out1[12] = x60; + out1[13] = x62; + out1[14] = x64; + out1[15] = x66; + out1[16] = x68; +} + +/* + * The function fiat_p521_from_montgomery translates a field element out of the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^32)⁻¹ mod m)^17) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p521_from_montgomery(uint32_t out1[17], const uint32_t arg1[17]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint32_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + fiat_p521_uint1 x37; + uint32_t x38; + fiat_p521_uint1 x39; + uint32_t x40; + fiat_p521_uint1 x41; + uint32_t x42; + fiat_p521_uint1 x43; + uint32_t x44; + fiat_p521_uint1 x45; + uint32_t x46; + fiat_p521_uint1 x47; + uint32_t x48; + fiat_p521_uint1 x49; + uint32_t x50; + fiat_p521_uint1 x51; + uint32_t x52; + fiat_p521_uint1 x53; + uint32_t x54; + fiat_p521_uint1 x55; + uint32_t x56; + fiat_p521_uint1 x57; + uint32_t x58; + fiat_p521_uint1 x59; + uint32_t x60; + fiat_p521_uint1 x61; + uint32_t x62; + fiat_p521_uint1 x63; + uint32_t x64; + fiat_p521_uint1 x65; + uint32_t x66; + fiat_p521_uint1 x67; + uint32_t x68; + fiat_p521_uint1 x69; + uint32_t x70; + fiat_p521_uint1 x71; + uint32_t x72; + fiat_p521_uint1 x73; + uint32_t x74; + fiat_p521_uint1 x75; + uint32_t x76; + fiat_p521_uint1 x77; + uint32_t x78; + fiat_p521_uint1 x79; + uint32_t x80; + fiat_p521_uint1 x81; + uint32_t x82; + fiat_p521_uint1 x83; + uint32_t x84; + fiat_p521_uint1 x85; + uint32_t x86; + fiat_p521_uint1 x87; + uint32_t x88; + fiat_p521_uint1 x89; + uint32_t x90; + fiat_p521_uint1 x91; + uint32_t x92; + fiat_p521_uint1 x93; + uint32_t x94; + fiat_p521_uint1 x95; + uint32_t x96; + fiat_p521_uint1 x97; + uint32_t x98; + fiat_p521_uint1 x99; + uint32_t x100; + fiat_p521_uint1 x101; + uint32_t x102; + fiat_p521_uint1 x103; + uint32_t x104; + fiat_p521_uint1 x105; + uint32_t x106; + fiat_p521_uint1 x107; + uint32_t x108; + fiat_p521_uint1 x109; + uint32_t x110; + fiat_p521_uint1 x111; + uint32_t x112; + fiat_p521_uint1 x113; + uint32_t x114; + fiat_p521_uint1 x115; + uint32_t x116; + fiat_p521_uint1 x117; + uint32_t x118; + fiat_p521_uint1 x119; + uint32_t x120; + fiat_p521_uint1 x121; + uint32_t x122; + fiat_p521_uint1 x123; + uint32_t x124; + fiat_p521_uint1 x125; + uint32_t x126; + fiat_p521_uint1 x127; + uint32_t x128; + fiat_p521_uint1 x129; + uint32_t x130; + fiat_p521_uint1 x131; + uint32_t x132; + fiat_p521_uint1 x133; + uint32_t x134; + uint32_t x135; + uint32_t x136; + uint32_t x137; + uint32_t x138; + uint32_t x139; + uint32_t x140; + uint32_t x141; + uint32_t x142; + uint32_t x143; + uint32_t x144; + uint32_t x145; + uint32_t x146; + uint32_t x147; + uint32_t x148; + uint32_t x149; + uint32_t x150; + uint32_t x151; + uint32_t x152; + uint32_t x153; + uint32_t x154; + uint32_t x155; + uint32_t x156; + uint32_t x157; + uint32_t x158; + uint32_t x159; + uint32_t x160; + uint32_t x161; + uint32_t x162; + uint32_t x163; + uint32_t x164; + uint32_t x165; + uint32_t x166; + uint32_t x167; + uint32_t x168; + fiat_p521_uint1 x169; + uint32_t x170; + fiat_p521_uint1 x171; + uint32_t x172; + fiat_p521_uint1 x173; + uint32_t x174; + fiat_p521_uint1 x175; + uint32_t x176; + fiat_p521_uint1 x177; + uint32_t x178; + fiat_p521_uint1 x179; + uint32_t x180; + fiat_p521_uint1 x181; + uint32_t x182; + fiat_p521_uint1 x183; + uint32_t x184; + fiat_p521_uint1 x185; + uint32_t x186; + fiat_p521_uint1 x187; + uint32_t x188; + fiat_p521_uint1 x189; + uint32_t x190; + fiat_p521_uint1 x191; + uint32_t x192; + fiat_p521_uint1 x193; + uint32_t x194; + fiat_p521_uint1 x195; + uint32_t x196; + fiat_p521_uint1 x197; + uint32_t x198; + fiat_p521_uint1 x199; + uint32_t x200; + fiat_p521_uint1 x201; + uint32_t x202; + fiat_p521_uint1 x203; + uint32_t x204; + fiat_p521_uint1 x205; + uint32_t x206; + fiat_p521_uint1 x207; + uint32_t x208; + fiat_p521_uint1 x209; + uint32_t x210; + fiat_p521_uint1 x211; + uint32_t x212; + fiat_p521_uint1 x213; + uint32_t x214; + fiat_p521_uint1 x215; + uint32_t x216; + fiat_p521_uint1 x217; + uint32_t x218; + fiat_p521_uint1 x219; + uint32_t x220; + fiat_p521_uint1 x221; + uint32_t x222; + fiat_p521_uint1 x223; + uint32_t x224; + fiat_p521_uint1 x225; + uint32_t x226; + fiat_p521_uint1 x227; + uint32_t x228; + fiat_p521_uint1 x229; + uint32_t x230; + fiat_p521_uint1 x231; + uint32_t x232; + fiat_p521_uint1 x233; + uint32_t x234; + fiat_p521_uint1 x235; + uint32_t x236; + fiat_p521_uint1 x237; + uint32_t x238; + fiat_p521_uint1 x239; + uint32_t x240; + fiat_p521_uint1 x241; + uint32_t x242; + fiat_p521_uint1 x243; + uint32_t x244; + fiat_p521_uint1 x245; + uint32_t x246; + fiat_p521_uint1 x247; + uint32_t x248; + fiat_p521_uint1 x249; + uint32_t x250; + fiat_p521_uint1 x251; + uint32_t x252; + fiat_p521_uint1 x253; + uint32_t x254; + fiat_p521_uint1 x255; + uint32_t x256; + fiat_p521_uint1 x257; + uint32_t x258; + fiat_p521_uint1 x259; + uint32_t x260; + fiat_p521_uint1 x261; + uint32_t x262; + fiat_p521_uint1 x263; + uint32_t x264; + fiat_p521_uint1 x265; + uint32_t x266; + uint32_t x267; + uint32_t x268; + uint32_t x269; + uint32_t x270; + uint32_t x271; + uint32_t x272; + uint32_t x273; + uint32_t x274; + uint32_t x275; + uint32_t x276; + uint32_t x277; + uint32_t x278; + uint32_t x279; + uint32_t x280; + uint32_t x281; + uint32_t x282; + uint32_t x283; + uint32_t x284; + uint32_t x285; + uint32_t x286; + uint32_t x287; + uint32_t x288; + uint32_t x289; + uint32_t x290; + uint32_t x291; + uint32_t x292; + uint32_t x293; + uint32_t x294; + uint32_t x295; + uint32_t x296; + uint32_t x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + fiat_p521_uint1 x301; + uint32_t x302; + fiat_p521_uint1 x303; + uint32_t x304; + fiat_p521_uint1 x305; + uint32_t x306; + fiat_p521_uint1 x307; + uint32_t x308; + fiat_p521_uint1 x309; + uint32_t x310; + fiat_p521_uint1 x311; + uint32_t x312; + fiat_p521_uint1 x313; + uint32_t x314; + fiat_p521_uint1 x315; + uint32_t x316; + fiat_p521_uint1 x317; + uint32_t x318; + fiat_p521_uint1 x319; + uint32_t x320; + fiat_p521_uint1 x321; + uint32_t x322; + fiat_p521_uint1 x323; + uint32_t x324; + fiat_p521_uint1 x325; + uint32_t x326; + fiat_p521_uint1 x327; + uint32_t x328; + fiat_p521_uint1 x329; + uint32_t x330; + fiat_p521_uint1 x331; + uint32_t x332; + fiat_p521_uint1 x333; + uint32_t x334; + fiat_p521_uint1 x335; + uint32_t x336; + fiat_p521_uint1 x337; + uint32_t x338; + fiat_p521_uint1 x339; + uint32_t x340; + fiat_p521_uint1 x341; + uint32_t x342; + fiat_p521_uint1 x343; + uint32_t x344; + fiat_p521_uint1 x345; + uint32_t x346; + fiat_p521_uint1 x347; + uint32_t x348; + fiat_p521_uint1 x349; + uint32_t x350; + fiat_p521_uint1 x351; + uint32_t x352; + fiat_p521_uint1 x353; + uint32_t x354; + fiat_p521_uint1 x355; + uint32_t x356; + fiat_p521_uint1 x357; + uint32_t x358; + fiat_p521_uint1 x359; + uint32_t x360; + fiat_p521_uint1 x361; + uint32_t x362; + fiat_p521_uint1 x363; + uint32_t x364; + fiat_p521_uint1 x365; + uint32_t x366; + fiat_p521_uint1 x367; + uint32_t x368; + fiat_p521_uint1 x369; + uint32_t x370; + fiat_p521_uint1 x371; + uint32_t x372; + fiat_p521_uint1 x373; + uint32_t x374; + fiat_p521_uint1 x375; + uint32_t x376; + fiat_p521_uint1 x377; + uint32_t x378; + fiat_p521_uint1 x379; + uint32_t x380; + fiat_p521_uint1 x381; + uint32_t x382; + fiat_p521_uint1 x383; + uint32_t x384; + fiat_p521_uint1 x385; + uint32_t x386; + fiat_p521_uint1 x387; + uint32_t x388; + fiat_p521_uint1 x389; + uint32_t x390; + fiat_p521_uint1 x391; + uint32_t x392; + fiat_p521_uint1 x393; + uint32_t x394; + fiat_p521_uint1 x395; + uint32_t x396; + fiat_p521_uint1 x397; + uint32_t x398; + uint32_t x399; + uint32_t x400; + uint32_t x401; + uint32_t x402; + uint32_t x403; + uint32_t x404; + uint32_t x405; + uint32_t x406; + uint32_t x407; + uint32_t x408; + uint32_t x409; + uint32_t x410; + uint32_t x411; + uint32_t x412; + uint32_t x413; + uint32_t x414; + uint32_t x415; + uint32_t x416; + uint32_t x417; + uint32_t x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + uint32_t x422; + uint32_t x423; + uint32_t x424; + uint32_t x425; + uint32_t x426; + uint32_t x427; + uint32_t x428; + uint32_t x429; + uint32_t x430; + uint32_t x431; + uint32_t x432; + fiat_p521_uint1 x433; + uint32_t x434; + fiat_p521_uint1 x435; + uint32_t x436; + fiat_p521_uint1 x437; + uint32_t x438; + fiat_p521_uint1 x439; + uint32_t x440; + fiat_p521_uint1 x441; + uint32_t x442; + fiat_p521_uint1 x443; + uint32_t x444; + fiat_p521_uint1 x445; + uint32_t x446; + fiat_p521_uint1 x447; + uint32_t x448; + fiat_p521_uint1 x449; + uint32_t x450; + fiat_p521_uint1 x451; + uint32_t x452; + fiat_p521_uint1 x453; + uint32_t x454; + fiat_p521_uint1 x455; + uint32_t x456; + fiat_p521_uint1 x457; + uint32_t x458; + fiat_p521_uint1 x459; + uint32_t x460; + fiat_p521_uint1 x461; + uint32_t x462; + fiat_p521_uint1 x463; + uint32_t x464; + fiat_p521_uint1 x465; + uint32_t x466; + fiat_p521_uint1 x467; + uint32_t x468; + fiat_p521_uint1 x469; + uint32_t x470; + fiat_p521_uint1 x471; + uint32_t x472; + fiat_p521_uint1 x473; + uint32_t x474; + fiat_p521_uint1 x475; + uint32_t x476; + fiat_p521_uint1 x477; + uint32_t x478; + fiat_p521_uint1 x479; + uint32_t x480; + fiat_p521_uint1 x481; + uint32_t x482; + fiat_p521_uint1 x483; + uint32_t x484; + fiat_p521_uint1 x485; + uint32_t x486; + fiat_p521_uint1 x487; + uint32_t x488; + fiat_p521_uint1 x489; + uint32_t x490; + fiat_p521_uint1 x491; + uint32_t x492; + fiat_p521_uint1 x493; + uint32_t x494; + fiat_p521_uint1 x495; + uint32_t x496; + fiat_p521_uint1 x497; + uint32_t x498; + fiat_p521_uint1 x499; + uint32_t x500; + fiat_p521_uint1 x501; + uint32_t x502; + fiat_p521_uint1 x503; + uint32_t x504; + fiat_p521_uint1 x505; + uint32_t x506; + fiat_p521_uint1 x507; + uint32_t x508; + fiat_p521_uint1 x509; + uint32_t x510; + fiat_p521_uint1 x511; + uint32_t x512; + fiat_p521_uint1 x513; + uint32_t x514; + fiat_p521_uint1 x515; + uint32_t x516; + fiat_p521_uint1 x517; + uint32_t x518; + fiat_p521_uint1 x519; + uint32_t x520; + fiat_p521_uint1 x521; + uint32_t x522; + fiat_p521_uint1 x523; + uint32_t x524; + fiat_p521_uint1 x525; + uint32_t x526; + fiat_p521_uint1 x527; + uint32_t x528; + fiat_p521_uint1 x529; + uint32_t x530; + uint32_t x531; + uint32_t x532; + uint32_t x533; + uint32_t x534; + uint32_t x535; + uint32_t x536; + uint32_t x537; + uint32_t x538; + uint32_t x539; + uint32_t x540; + uint32_t x541; + uint32_t x542; + uint32_t x543; + uint32_t x544; + uint32_t x545; + uint32_t x546; + uint32_t x547; + uint32_t x548; + uint32_t x549; + uint32_t x550; + uint32_t x551; + uint32_t x552; + uint32_t x553; + uint32_t x554; + uint32_t x555; + uint32_t x556; + uint32_t x557; + uint32_t x558; + uint32_t x559; + uint32_t x560; + uint32_t x561; + uint32_t x562; + uint32_t x563; + uint32_t x564; + fiat_p521_uint1 x565; + uint32_t x566; + fiat_p521_uint1 x567; + uint32_t x568; + fiat_p521_uint1 x569; + uint32_t x570; + fiat_p521_uint1 x571; + uint32_t x572; + fiat_p521_uint1 x573; + uint32_t x574; + fiat_p521_uint1 x575; + uint32_t x576; + fiat_p521_uint1 x577; + uint32_t x578; + fiat_p521_uint1 x579; + uint32_t x580; + fiat_p521_uint1 x581; + uint32_t x582; + fiat_p521_uint1 x583; + uint32_t x584; + fiat_p521_uint1 x585; + uint32_t x586; + fiat_p521_uint1 x587; + uint32_t x588; + fiat_p521_uint1 x589; + uint32_t x590; + fiat_p521_uint1 x591; + uint32_t x592; + fiat_p521_uint1 x593; + uint32_t x594; + fiat_p521_uint1 x595; + uint32_t x596; + fiat_p521_uint1 x597; + uint32_t x598; + fiat_p521_uint1 x599; + uint32_t x600; + fiat_p521_uint1 x601; + uint32_t x602; + fiat_p521_uint1 x603; + uint32_t x604; + fiat_p521_uint1 x605; + uint32_t x606; + fiat_p521_uint1 x607; + uint32_t x608; + fiat_p521_uint1 x609; + uint32_t x610; + fiat_p521_uint1 x611; + uint32_t x612; + fiat_p521_uint1 x613; + uint32_t x614; + fiat_p521_uint1 x615; + uint32_t x616; + fiat_p521_uint1 x617; + uint32_t x618; + fiat_p521_uint1 x619; + uint32_t x620; + fiat_p521_uint1 x621; + uint32_t x622; + fiat_p521_uint1 x623; + uint32_t x624; + fiat_p521_uint1 x625; + uint32_t x626; + fiat_p521_uint1 x627; + uint32_t x628; + fiat_p521_uint1 x629; + uint32_t x630; + fiat_p521_uint1 x631; + uint32_t x632; + fiat_p521_uint1 x633; + uint32_t x634; + fiat_p521_uint1 x635; + uint32_t x636; + fiat_p521_uint1 x637; + uint32_t x638; + fiat_p521_uint1 x639; + uint32_t x640; + fiat_p521_uint1 x641; + uint32_t x642; + fiat_p521_uint1 x643; + uint32_t x644; + fiat_p521_uint1 x645; + uint32_t x646; + fiat_p521_uint1 x647; + uint32_t x648; + fiat_p521_uint1 x649; + uint32_t x650; + fiat_p521_uint1 x651; + uint32_t x652; + fiat_p521_uint1 x653; + uint32_t x654; + fiat_p521_uint1 x655; + uint32_t x656; + fiat_p521_uint1 x657; + uint32_t x658; + fiat_p521_uint1 x659; + uint32_t x660; + fiat_p521_uint1 x661; + uint32_t x662; + uint32_t x663; + uint32_t x664; + uint32_t x665; + uint32_t x666; + uint32_t x667; + uint32_t x668; + uint32_t x669; + uint32_t x670; + uint32_t x671; + uint32_t x672; + uint32_t x673; + uint32_t x674; + uint32_t x675; + uint32_t x676; + uint32_t x677; + uint32_t x678; + uint32_t x679; + uint32_t x680; + uint32_t x681; + uint32_t x682; + uint32_t x683; + uint32_t x684; + uint32_t x685; + uint32_t x686; + uint32_t x687; + uint32_t x688; + uint32_t x689; + uint32_t x690; + uint32_t x691; + uint32_t x692; + uint32_t x693; + uint32_t x694; + uint32_t x695; + uint32_t x696; + fiat_p521_uint1 x697; + uint32_t x698; + fiat_p521_uint1 x699; + uint32_t x700; + fiat_p521_uint1 x701; + uint32_t x702; + fiat_p521_uint1 x703; + uint32_t x704; + fiat_p521_uint1 x705; + uint32_t x706; + fiat_p521_uint1 x707; + uint32_t x708; + fiat_p521_uint1 x709; + uint32_t x710; + fiat_p521_uint1 x711; + uint32_t x712; + fiat_p521_uint1 x713; + uint32_t x714; + fiat_p521_uint1 x715; + uint32_t x716; + fiat_p521_uint1 x717; + uint32_t x718; + fiat_p521_uint1 x719; + uint32_t x720; + fiat_p521_uint1 x721; + uint32_t x722; + fiat_p521_uint1 x723; + uint32_t x724; + fiat_p521_uint1 x725; + uint32_t x726; + fiat_p521_uint1 x727; + uint32_t x728; + fiat_p521_uint1 x729; + uint32_t x730; + fiat_p521_uint1 x731; + uint32_t x732; + fiat_p521_uint1 x733; + uint32_t x734; + fiat_p521_uint1 x735; + uint32_t x736; + fiat_p521_uint1 x737; + uint32_t x738; + fiat_p521_uint1 x739; + uint32_t x740; + fiat_p521_uint1 x741; + uint32_t x742; + fiat_p521_uint1 x743; + uint32_t x744; + fiat_p521_uint1 x745; + uint32_t x746; + fiat_p521_uint1 x747; + uint32_t x748; + fiat_p521_uint1 x749; + uint32_t x750; + fiat_p521_uint1 x751; + uint32_t x752; + fiat_p521_uint1 x753; + uint32_t x754; + fiat_p521_uint1 x755; + uint32_t x756; + fiat_p521_uint1 x757; + uint32_t x758; + fiat_p521_uint1 x759; + uint32_t x760; + fiat_p521_uint1 x761; + uint32_t x762; + fiat_p521_uint1 x763; + uint32_t x764; + fiat_p521_uint1 x765; + uint32_t x766; + fiat_p521_uint1 x767; + uint32_t x768; + fiat_p521_uint1 x769; + uint32_t x770; + fiat_p521_uint1 x771; + uint32_t x772; + fiat_p521_uint1 x773; + uint32_t x774; + fiat_p521_uint1 x775; + uint32_t x776; + fiat_p521_uint1 x777; + uint32_t x778; + fiat_p521_uint1 x779; + uint32_t x780; + fiat_p521_uint1 x781; + uint32_t x782; + fiat_p521_uint1 x783; + uint32_t x784; + fiat_p521_uint1 x785; + uint32_t x786; + fiat_p521_uint1 x787; + uint32_t x788; + fiat_p521_uint1 x789; + uint32_t x790; + fiat_p521_uint1 x791; + uint32_t x792; + fiat_p521_uint1 x793; + uint32_t x794; + uint32_t x795; + uint32_t x796; + uint32_t x797; + uint32_t x798; + uint32_t x799; + uint32_t x800; + uint32_t x801; + uint32_t x802; + uint32_t x803; + uint32_t x804; + uint32_t x805; + uint32_t x806; + uint32_t x807; + uint32_t x808; + uint32_t x809; + uint32_t x810; + uint32_t x811; + uint32_t x812; + uint32_t x813; + uint32_t x814; + uint32_t x815; + uint32_t x816; + uint32_t x817; + uint32_t x818; + uint32_t x819; + uint32_t x820; + uint32_t x821; + uint32_t x822; + uint32_t x823; + uint32_t x824; + uint32_t x825; + uint32_t x826; + uint32_t x827; + uint32_t x828; + fiat_p521_uint1 x829; + uint32_t x830; + fiat_p521_uint1 x831; + uint32_t x832; + fiat_p521_uint1 x833; + uint32_t x834; + fiat_p521_uint1 x835; + uint32_t x836; + fiat_p521_uint1 x837; + uint32_t x838; + fiat_p521_uint1 x839; + uint32_t x840; + fiat_p521_uint1 x841; + uint32_t x842; + fiat_p521_uint1 x843; + uint32_t x844; + fiat_p521_uint1 x845; + uint32_t x846; + fiat_p521_uint1 x847; + uint32_t x848; + fiat_p521_uint1 x849; + uint32_t x850; + fiat_p521_uint1 x851; + uint32_t x852; + fiat_p521_uint1 x853; + uint32_t x854; + fiat_p521_uint1 x855; + uint32_t x856; + fiat_p521_uint1 x857; + uint32_t x858; + fiat_p521_uint1 x859; + uint32_t x860; + fiat_p521_uint1 x861; + uint32_t x862; + fiat_p521_uint1 x863; + uint32_t x864; + fiat_p521_uint1 x865; + uint32_t x866; + fiat_p521_uint1 x867; + uint32_t x868; + fiat_p521_uint1 x869; + uint32_t x870; + fiat_p521_uint1 x871; + uint32_t x872; + fiat_p521_uint1 x873; + uint32_t x874; + fiat_p521_uint1 x875; + uint32_t x876; + fiat_p521_uint1 x877; + uint32_t x878; + fiat_p521_uint1 x879; + uint32_t x880; + fiat_p521_uint1 x881; + uint32_t x882; + fiat_p521_uint1 x883; + uint32_t x884; + fiat_p521_uint1 x885; + uint32_t x886; + fiat_p521_uint1 x887; + uint32_t x888; + fiat_p521_uint1 x889; + uint32_t x890; + fiat_p521_uint1 x891; + uint32_t x892; + fiat_p521_uint1 x893; + uint32_t x894; + fiat_p521_uint1 x895; + uint32_t x896; + fiat_p521_uint1 x897; + uint32_t x898; + fiat_p521_uint1 x899; + uint32_t x900; + fiat_p521_uint1 x901; + uint32_t x902; + fiat_p521_uint1 x903; + uint32_t x904; + fiat_p521_uint1 x905; + uint32_t x906; + fiat_p521_uint1 x907; + uint32_t x908; + fiat_p521_uint1 x909; + uint32_t x910; + fiat_p521_uint1 x911; + uint32_t x912; + fiat_p521_uint1 x913; + uint32_t x914; + fiat_p521_uint1 x915; + uint32_t x916; + fiat_p521_uint1 x917; + uint32_t x918; + fiat_p521_uint1 x919; + uint32_t x920; + fiat_p521_uint1 x921; + uint32_t x922; + fiat_p521_uint1 x923; + uint32_t x924; + fiat_p521_uint1 x925; + uint32_t x926; + uint32_t x927; + uint32_t x928; + uint32_t x929; + uint32_t x930; + uint32_t x931; + uint32_t x932; + uint32_t x933; + uint32_t x934; + uint32_t x935; + uint32_t x936; + uint32_t x937; + uint32_t x938; + uint32_t x939; + uint32_t x940; + uint32_t x941; + uint32_t x942; + uint32_t x943; + uint32_t x944; + uint32_t x945; + uint32_t x946; + uint32_t x947; + uint32_t x948; + uint32_t x949; + uint32_t x950; + uint32_t x951; + uint32_t x952; + uint32_t x953; + uint32_t x954; + uint32_t x955; + uint32_t x956; + uint32_t x957; + uint32_t x958; + uint32_t x959; + uint32_t x960; + fiat_p521_uint1 x961; + uint32_t x962; + fiat_p521_uint1 x963; + uint32_t x964; + fiat_p521_uint1 x965; + uint32_t x966; + fiat_p521_uint1 x967; + uint32_t x968; + fiat_p521_uint1 x969; + uint32_t x970; + fiat_p521_uint1 x971; + uint32_t x972; + fiat_p521_uint1 x973; + uint32_t x974; + fiat_p521_uint1 x975; + uint32_t x976; + fiat_p521_uint1 x977; + uint32_t x978; + fiat_p521_uint1 x979; + uint32_t x980; + fiat_p521_uint1 x981; + uint32_t x982; + fiat_p521_uint1 x983; + uint32_t x984; + fiat_p521_uint1 x985; + uint32_t x986; + fiat_p521_uint1 x987; + uint32_t x988; + fiat_p521_uint1 x989; + uint32_t x990; + fiat_p521_uint1 x991; + uint32_t x992; + fiat_p521_uint1 x993; + uint32_t x994; + fiat_p521_uint1 x995; + uint32_t x996; + fiat_p521_uint1 x997; + uint32_t x998; + fiat_p521_uint1 x999; + uint32_t x1000; + fiat_p521_uint1 x1001; + uint32_t x1002; + fiat_p521_uint1 x1003; + uint32_t x1004; + fiat_p521_uint1 x1005; + uint32_t x1006; + fiat_p521_uint1 x1007; + uint32_t x1008; + fiat_p521_uint1 x1009; + uint32_t x1010; + fiat_p521_uint1 x1011; + uint32_t x1012; + fiat_p521_uint1 x1013; + uint32_t x1014; + fiat_p521_uint1 x1015; + uint32_t x1016; + fiat_p521_uint1 x1017; + uint32_t x1018; + fiat_p521_uint1 x1019; + uint32_t x1020; + fiat_p521_uint1 x1021; + uint32_t x1022; + fiat_p521_uint1 x1023; + uint32_t x1024; + fiat_p521_uint1 x1025; + uint32_t x1026; + fiat_p521_uint1 x1027; + uint32_t x1028; + fiat_p521_uint1 x1029; + uint32_t x1030; + fiat_p521_uint1 x1031; + uint32_t x1032; + fiat_p521_uint1 x1033; + uint32_t x1034; + fiat_p521_uint1 x1035; + uint32_t x1036; + fiat_p521_uint1 x1037; + uint32_t x1038; + fiat_p521_uint1 x1039; + uint32_t x1040; + fiat_p521_uint1 x1041; + uint32_t x1042; + fiat_p521_uint1 x1043; + uint32_t x1044; + fiat_p521_uint1 x1045; + uint32_t x1046; + fiat_p521_uint1 x1047; + uint32_t x1048; + fiat_p521_uint1 x1049; + uint32_t x1050; + fiat_p521_uint1 x1051; + uint32_t x1052; + fiat_p521_uint1 x1053; + uint32_t x1054; + fiat_p521_uint1 x1055; + uint32_t x1056; + fiat_p521_uint1 x1057; + uint32_t x1058; + uint32_t x1059; + uint32_t x1060; + uint32_t x1061; + uint32_t x1062; + uint32_t x1063; + uint32_t x1064; + uint32_t x1065; + uint32_t x1066; + uint32_t x1067; + uint32_t x1068; + uint32_t x1069; + uint32_t x1070; + uint32_t x1071; + uint32_t x1072; + uint32_t x1073; + uint32_t x1074; + uint32_t x1075; + uint32_t x1076; + uint32_t x1077; + uint32_t x1078; + uint32_t x1079; + uint32_t x1080; + uint32_t x1081; + uint32_t x1082; + uint32_t x1083; + uint32_t x1084; + uint32_t x1085; + uint32_t x1086; + uint32_t x1087; + uint32_t x1088; + uint32_t x1089; + uint32_t x1090; + uint32_t x1091; + uint32_t x1092; + fiat_p521_uint1 x1093; + uint32_t x1094; + fiat_p521_uint1 x1095; + uint32_t x1096; + fiat_p521_uint1 x1097; + uint32_t x1098; + fiat_p521_uint1 x1099; + uint32_t x1100; + fiat_p521_uint1 x1101; + uint32_t x1102; + fiat_p521_uint1 x1103; + uint32_t x1104; + fiat_p521_uint1 x1105; + uint32_t x1106; + fiat_p521_uint1 x1107; + uint32_t x1108; + fiat_p521_uint1 x1109; + uint32_t x1110; + fiat_p521_uint1 x1111; + uint32_t x1112; + fiat_p521_uint1 x1113; + uint32_t x1114; + fiat_p521_uint1 x1115; + uint32_t x1116; + fiat_p521_uint1 x1117; + uint32_t x1118; + fiat_p521_uint1 x1119; + uint32_t x1120; + fiat_p521_uint1 x1121; + uint32_t x1122; + fiat_p521_uint1 x1123; + uint32_t x1124; + fiat_p521_uint1 x1125; + uint32_t x1126; + fiat_p521_uint1 x1127; + uint32_t x1128; + fiat_p521_uint1 x1129; + uint32_t x1130; + fiat_p521_uint1 x1131; + uint32_t x1132; + fiat_p521_uint1 x1133; + uint32_t x1134; + fiat_p521_uint1 x1135; + uint32_t x1136; + fiat_p521_uint1 x1137; + uint32_t x1138; + fiat_p521_uint1 x1139; + uint32_t x1140; + fiat_p521_uint1 x1141; + uint32_t x1142; + fiat_p521_uint1 x1143; + uint32_t x1144; + fiat_p521_uint1 x1145; + uint32_t x1146; + fiat_p521_uint1 x1147; + uint32_t x1148; + fiat_p521_uint1 x1149; + uint32_t x1150; + fiat_p521_uint1 x1151; + uint32_t x1152; + fiat_p521_uint1 x1153; + uint32_t x1154; + fiat_p521_uint1 x1155; + uint32_t x1156; + fiat_p521_uint1 x1157; + uint32_t x1158; + fiat_p521_uint1 x1159; + uint32_t x1160; + fiat_p521_uint1 x1161; + uint32_t x1162; + fiat_p521_uint1 x1163; + uint32_t x1164; + fiat_p521_uint1 x1165; + uint32_t x1166; + fiat_p521_uint1 x1167; + uint32_t x1168; + fiat_p521_uint1 x1169; + uint32_t x1170; + fiat_p521_uint1 x1171; + uint32_t x1172; + fiat_p521_uint1 x1173; + uint32_t x1174; + fiat_p521_uint1 x1175; + uint32_t x1176; + fiat_p521_uint1 x1177; + uint32_t x1178; + fiat_p521_uint1 x1179; + uint32_t x1180; + fiat_p521_uint1 x1181; + uint32_t x1182; + fiat_p521_uint1 x1183; + uint32_t x1184; + fiat_p521_uint1 x1185; + uint32_t x1186; + fiat_p521_uint1 x1187; + uint32_t x1188; + fiat_p521_uint1 x1189; + uint32_t x1190; + uint32_t x1191; + uint32_t x1192; + uint32_t x1193; + uint32_t x1194; + uint32_t x1195; + uint32_t x1196; + uint32_t x1197; + uint32_t x1198; + uint32_t x1199; + uint32_t x1200; + uint32_t x1201; + uint32_t x1202; + uint32_t x1203; + uint32_t x1204; + uint32_t x1205; + uint32_t x1206; + uint32_t x1207; + uint32_t x1208; + uint32_t x1209; + uint32_t x1210; + uint32_t x1211; + uint32_t x1212; + uint32_t x1213; + uint32_t x1214; + uint32_t x1215; + uint32_t x1216; + uint32_t x1217; + uint32_t x1218; + uint32_t x1219; + uint32_t x1220; + uint32_t x1221; + uint32_t x1222; + uint32_t x1223; + uint32_t x1224; + fiat_p521_uint1 x1225; + uint32_t x1226; + fiat_p521_uint1 x1227; + uint32_t x1228; + fiat_p521_uint1 x1229; + uint32_t x1230; + fiat_p521_uint1 x1231; + uint32_t x1232; + fiat_p521_uint1 x1233; + uint32_t x1234; + fiat_p521_uint1 x1235; + uint32_t x1236; + fiat_p521_uint1 x1237; + uint32_t x1238; + fiat_p521_uint1 x1239; + uint32_t x1240; + fiat_p521_uint1 x1241; + uint32_t x1242; + fiat_p521_uint1 x1243; + uint32_t x1244; + fiat_p521_uint1 x1245; + uint32_t x1246; + fiat_p521_uint1 x1247; + uint32_t x1248; + fiat_p521_uint1 x1249; + uint32_t x1250; + fiat_p521_uint1 x1251; + uint32_t x1252; + fiat_p521_uint1 x1253; + uint32_t x1254; + fiat_p521_uint1 x1255; + uint32_t x1256; + fiat_p521_uint1 x1257; + uint32_t x1258; + fiat_p521_uint1 x1259; + uint32_t x1260; + fiat_p521_uint1 x1261; + uint32_t x1262; + fiat_p521_uint1 x1263; + uint32_t x1264; + fiat_p521_uint1 x1265; + uint32_t x1266; + fiat_p521_uint1 x1267; + uint32_t x1268; + fiat_p521_uint1 x1269; + uint32_t x1270; + fiat_p521_uint1 x1271; + uint32_t x1272; + fiat_p521_uint1 x1273; + uint32_t x1274; + fiat_p521_uint1 x1275; + uint32_t x1276; + fiat_p521_uint1 x1277; + uint32_t x1278; + fiat_p521_uint1 x1279; + uint32_t x1280; + fiat_p521_uint1 x1281; + uint32_t x1282; + fiat_p521_uint1 x1283; + uint32_t x1284; + fiat_p521_uint1 x1285; + uint32_t x1286; + fiat_p521_uint1 x1287; + uint32_t x1288; + fiat_p521_uint1 x1289; + uint32_t x1290; + fiat_p521_uint1 x1291; + uint32_t x1292; + fiat_p521_uint1 x1293; + uint32_t x1294; + fiat_p521_uint1 x1295; + uint32_t x1296; + fiat_p521_uint1 x1297; + uint32_t x1298; + fiat_p521_uint1 x1299; + uint32_t x1300; + fiat_p521_uint1 x1301; + uint32_t x1302; + fiat_p521_uint1 x1303; + uint32_t x1304; + fiat_p521_uint1 x1305; + uint32_t x1306; + fiat_p521_uint1 x1307; + uint32_t x1308; + fiat_p521_uint1 x1309; + uint32_t x1310; + fiat_p521_uint1 x1311; + uint32_t x1312; + fiat_p521_uint1 x1313; + uint32_t x1314; + fiat_p521_uint1 x1315; + uint32_t x1316; + fiat_p521_uint1 x1317; + uint32_t x1318; + fiat_p521_uint1 x1319; + uint32_t x1320; + fiat_p521_uint1 x1321; + uint32_t x1322; + uint32_t x1323; + uint32_t x1324; + uint32_t x1325; + uint32_t x1326; + uint32_t x1327; + uint32_t x1328; + uint32_t x1329; + uint32_t x1330; + uint32_t x1331; + uint32_t x1332; + uint32_t x1333; + uint32_t x1334; + uint32_t x1335; + uint32_t x1336; + uint32_t x1337; + uint32_t x1338; + uint32_t x1339; + uint32_t x1340; + uint32_t x1341; + uint32_t x1342; + uint32_t x1343; + uint32_t x1344; + uint32_t x1345; + uint32_t x1346; + uint32_t x1347; + uint32_t x1348; + uint32_t x1349; + uint32_t x1350; + uint32_t x1351; + uint32_t x1352; + uint32_t x1353; + uint32_t x1354; + uint32_t x1355; + uint32_t x1356; + fiat_p521_uint1 x1357; + uint32_t x1358; + fiat_p521_uint1 x1359; + uint32_t x1360; + fiat_p521_uint1 x1361; + uint32_t x1362; + fiat_p521_uint1 x1363; + uint32_t x1364; + fiat_p521_uint1 x1365; + uint32_t x1366; + fiat_p521_uint1 x1367; + uint32_t x1368; + fiat_p521_uint1 x1369; + uint32_t x1370; + fiat_p521_uint1 x1371; + uint32_t x1372; + fiat_p521_uint1 x1373; + uint32_t x1374; + fiat_p521_uint1 x1375; + uint32_t x1376; + fiat_p521_uint1 x1377; + uint32_t x1378; + fiat_p521_uint1 x1379; + uint32_t x1380; + fiat_p521_uint1 x1381; + uint32_t x1382; + fiat_p521_uint1 x1383; + uint32_t x1384; + fiat_p521_uint1 x1385; + uint32_t x1386; + fiat_p521_uint1 x1387; + uint32_t x1388; + fiat_p521_uint1 x1389; + uint32_t x1390; + fiat_p521_uint1 x1391; + uint32_t x1392; + fiat_p521_uint1 x1393; + uint32_t x1394; + fiat_p521_uint1 x1395; + uint32_t x1396; + fiat_p521_uint1 x1397; + uint32_t x1398; + fiat_p521_uint1 x1399; + uint32_t x1400; + fiat_p521_uint1 x1401; + uint32_t x1402; + fiat_p521_uint1 x1403; + uint32_t x1404; + fiat_p521_uint1 x1405; + uint32_t x1406; + fiat_p521_uint1 x1407; + uint32_t x1408; + fiat_p521_uint1 x1409; + uint32_t x1410; + fiat_p521_uint1 x1411; + uint32_t x1412; + fiat_p521_uint1 x1413; + uint32_t x1414; + fiat_p521_uint1 x1415; + uint32_t x1416; + fiat_p521_uint1 x1417; + uint32_t x1418; + fiat_p521_uint1 x1419; + uint32_t x1420; + fiat_p521_uint1 x1421; + uint32_t x1422; + fiat_p521_uint1 x1423; + uint32_t x1424; + fiat_p521_uint1 x1425; + uint32_t x1426; + fiat_p521_uint1 x1427; + uint32_t x1428; + fiat_p521_uint1 x1429; + uint32_t x1430; + fiat_p521_uint1 x1431; + uint32_t x1432; + fiat_p521_uint1 x1433; + uint32_t x1434; + fiat_p521_uint1 x1435; + uint32_t x1436; + fiat_p521_uint1 x1437; + uint32_t x1438; + fiat_p521_uint1 x1439; + uint32_t x1440; + fiat_p521_uint1 x1441; + uint32_t x1442; + fiat_p521_uint1 x1443; + uint32_t x1444; + fiat_p521_uint1 x1445; + uint32_t x1446; + fiat_p521_uint1 x1447; + uint32_t x1448; + fiat_p521_uint1 x1449; + uint32_t x1450; + fiat_p521_uint1 x1451; + uint32_t x1452; + fiat_p521_uint1 x1453; + uint32_t x1454; + uint32_t x1455; + uint32_t x1456; + uint32_t x1457; + uint32_t x1458; + uint32_t x1459; + uint32_t x1460; + uint32_t x1461; + uint32_t x1462; + uint32_t x1463; + uint32_t x1464; + uint32_t x1465; + uint32_t x1466; + uint32_t x1467; + uint32_t x1468; + uint32_t x1469; + uint32_t x1470; + uint32_t x1471; + uint32_t x1472; + uint32_t x1473; + uint32_t x1474; + uint32_t x1475; + uint32_t x1476; + uint32_t x1477; + uint32_t x1478; + uint32_t x1479; + uint32_t x1480; + uint32_t x1481; + uint32_t x1482; + uint32_t x1483; + uint32_t x1484; + uint32_t x1485; + uint32_t x1486; + uint32_t x1487; + uint32_t x1488; + fiat_p521_uint1 x1489; + uint32_t x1490; + fiat_p521_uint1 x1491; + uint32_t x1492; + fiat_p521_uint1 x1493; + uint32_t x1494; + fiat_p521_uint1 x1495; + uint32_t x1496; + fiat_p521_uint1 x1497; + uint32_t x1498; + fiat_p521_uint1 x1499; + uint32_t x1500; + fiat_p521_uint1 x1501; + uint32_t x1502; + fiat_p521_uint1 x1503; + uint32_t x1504; + fiat_p521_uint1 x1505; + uint32_t x1506; + fiat_p521_uint1 x1507; + uint32_t x1508; + fiat_p521_uint1 x1509; + uint32_t x1510; + fiat_p521_uint1 x1511; + uint32_t x1512; + fiat_p521_uint1 x1513; + uint32_t x1514; + fiat_p521_uint1 x1515; + uint32_t x1516; + fiat_p521_uint1 x1517; + uint32_t x1518; + fiat_p521_uint1 x1519; + uint32_t x1520; + fiat_p521_uint1 x1521; + uint32_t x1522; + fiat_p521_uint1 x1523; + uint32_t x1524; + fiat_p521_uint1 x1525; + uint32_t x1526; + fiat_p521_uint1 x1527; + uint32_t x1528; + fiat_p521_uint1 x1529; + uint32_t x1530; + fiat_p521_uint1 x1531; + uint32_t x1532; + fiat_p521_uint1 x1533; + uint32_t x1534; + fiat_p521_uint1 x1535; + uint32_t x1536; + fiat_p521_uint1 x1537; + uint32_t x1538; + fiat_p521_uint1 x1539; + uint32_t x1540; + fiat_p521_uint1 x1541; + uint32_t x1542; + fiat_p521_uint1 x1543; + uint32_t x1544; + fiat_p521_uint1 x1545; + uint32_t x1546; + fiat_p521_uint1 x1547; + uint32_t x1548; + fiat_p521_uint1 x1549; + uint32_t x1550; + fiat_p521_uint1 x1551; + uint32_t x1552; + fiat_p521_uint1 x1553; + uint32_t x1554; + fiat_p521_uint1 x1555; + uint32_t x1556; + fiat_p521_uint1 x1557; + uint32_t x1558; + fiat_p521_uint1 x1559; + uint32_t x1560; + fiat_p521_uint1 x1561; + uint32_t x1562; + fiat_p521_uint1 x1563; + uint32_t x1564; + fiat_p521_uint1 x1565; + uint32_t x1566; + fiat_p521_uint1 x1567; + uint32_t x1568; + fiat_p521_uint1 x1569; + uint32_t x1570; + fiat_p521_uint1 x1571; + uint32_t x1572; + fiat_p521_uint1 x1573; + uint32_t x1574; + fiat_p521_uint1 x1575; + uint32_t x1576; + fiat_p521_uint1 x1577; + uint32_t x1578; + fiat_p521_uint1 x1579; + uint32_t x1580; + fiat_p521_uint1 x1581; + uint32_t x1582; + fiat_p521_uint1 x1583; + uint32_t x1584; + fiat_p521_uint1 x1585; + uint32_t x1586; + uint32_t x1587; + uint32_t x1588; + uint32_t x1589; + uint32_t x1590; + uint32_t x1591; + uint32_t x1592; + uint32_t x1593; + uint32_t x1594; + uint32_t x1595; + uint32_t x1596; + uint32_t x1597; + uint32_t x1598; + uint32_t x1599; + uint32_t x1600; + uint32_t x1601; + uint32_t x1602; + uint32_t x1603; + uint32_t x1604; + uint32_t x1605; + uint32_t x1606; + uint32_t x1607; + uint32_t x1608; + uint32_t x1609; + uint32_t x1610; + uint32_t x1611; + uint32_t x1612; + uint32_t x1613; + uint32_t x1614; + uint32_t x1615; + uint32_t x1616; + uint32_t x1617; + uint32_t x1618; + uint32_t x1619; + uint32_t x1620; + fiat_p521_uint1 x1621; + uint32_t x1622; + fiat_p521_uint1 x1623; + uint32_t x1624; + fiat_p521_uint1 x1625; + uint32_t x1626; + fiat_p521_uint1 x1627; + uint32_t x1628; + fiat_p521_uint1 x1629; + uint32_t x1630; + fiat_p521_uint1 x1631; + uint32_t x1632; + fiat_p521_uint1 x1633; + uint32_t x1634; + fiat_p521_uint1 x1635; + uint32_t x1636; + fiat_p521_uint1 x1637; + uint32_t x1638; + fiat_p521_uint1 x1639; + uint32_t x1640; + fiat_p521_uint1 x1641; + uint32_t x1642; + fiat_p521_uint1 x1643; + uint32_t x1644; + fiat_p521_uint1 x1645; + uint32_t x1646; + fiat_p521_uint1 x1647; + uint32_t x1648; + fiat_p521_uint1 x1649; + uint32_t x1650; + fiat_p521_uint1 x1651; + uint32_t x1652; + fiat_p521_uint1 x1653; + uint32_t x1654; + fiat_p521_uint1 x1655; + uint32_t x1656; + fiat_p521_uint1 x1657; + uint32_t x1658; + fiat_p521_uint1 x1659; + uint32_t x1660; + fiat_p521_uint1 x1661; + uint32_t x1662; + fiat_p521_uint1 x1663; + uint32_t x1664; + fiat_p521_uint1 x1665; + uint32_t x1666; + fiat_p521_uint1 x1667; + uint32_t x1668; + fiat_p521_uint1 x1669; + uint32_t x1670; + fiat_p521_uint1 x1671; + uint32_t x1672; + fiat_p521_uint1 x1673; + uint32_t x1674; + fiat_p521_uint1 x1675; + uint32_t x1676; + fiat_p521_uint1 x1677; + uint32_t x1678; + fiat_p521_uint1 x1679; + uint32_t x1680; + fiat_p521_uint1 x1681; + uint32_t x1682; + fiat_p521_uint1 x1683; + uint32_t x1684; + fiat_p521_uint1 x1685; + uint32_t x1686; + fiat_p521_uint1 x1687; + uint32_t x1688; + fiat_p521_uint1 x1689; + uint32_t x1690; + fiat_p521_uint1 x1691; + uint32_t x1692; + fiat_p521_uint1 x1693; + uint32_t x1694; + fiat_p521_uint1 x1695; + uint32_t x1696; + fiat_p521_uint1 x1697; + uint32_t x1698; + fiat_p521_uint1 x1699; + uint32_t x1700; + fiat_p521_uint1 x1701; + uint32_t x1702; + fiat_p521_uint1 x1703; + uint32_t x1704; + fiat_p521_uint1 x1705; + uint32_t x1706; + fiat_p521_uint1 x1707; + uint32_t x1708; + fiat_p521_uint1 x1709; + uint32_t x1710; + fiat_p521_uint1 x1711; + uint32_t x1712; + fiat_p521_uint1 x1713; + uint32_t x1714; + fiat_p521_uint1 x1715; + uint32_t x1716; + fiat_p521_uint1 x1717; + uint32_t x1718; + uint32_t x1719; + uint32_t x1720; + uint32_t x1721; + uint32_t x1722; + uint32_t x1723; + uint32_t x1724; + uint32_t x1725; + uint32_t x1726; + uint32_t x1727; + uint32_t x1728; + uint32_t x1729; + uint32_t x1730; + uint32_t x1731; + uint32_t x1732; + uint32_t x1733; + uint32_t x1734; + uint32_t x1735; + uint32_t x1736; + uint32_t x1737; + uint32_t x1738; + uint32_t x1739; + uint32_t x1740; + uint32_t x1741; + uint32_t x1742; + uint32_t x1743; + uint32_t x1744; + uint32_t x1745; + uint32_t x1746; + uint32_t x1747; + uint32_t x1748; + uint32_t x1749; + uint32_t x1750; + uint32_t x1751; + uint32_t x1752; + fiat_p521_uint1 x1753; + uint32_t x1754; + fiat_p521_uint1 x1755; + uint32_t x1756; + fiat_p521_uint1 x1757; + uint32_t x1758; + fiat_p521_uint1 x1759; + uint32_t x1760; + fiat_p521_uint1 x1761; + uint32_t x1762; + fiat_p521_uint1 x1763; + uint32_t x1764; + fiat_p521_uint1 x1765; + uint32_t x1766; + fiat_p521_uint1 x1767; + uint32_t x1768; + fiat_p521_uint1 x1769; + uint32_t x1770; + fiat_p521_uint1 x1771; + uint32_t x1772; + fiat_p521_uint1 x1773; + uint32_t x1774; + fiat_p521_uint1 x1775; + uint32_t x1776; + fiat_p521_uint1 x1777; + uint32_t x1778; + fiat_p521_uint1 x1779; + uint32_t x1780; + fiat_p521_uint1 x1781; + uint32_t x1782; + fiat_p521_uint1 x1783; + uint32_t x1784; + fiat_p521_uint1 x1785; + uint32_t x1786; + fiat_p521_uint1 x1787; + uint32_t x1788; + fiat_p521_uint1 x1789; + uint32_t x1790; + fiat_p521_uint1 x1791; + uint32_t x1792; + fiat_p521_uint1 x1793; + uint32_t x1794; + fiat_p521_uint1 x1795; + uint32_t x1796; + fiat_p521_uint1 x1797; + uint32_t x1798; + fiat_p521_uint1 x1799; + uint32_t x1800; + fiat_p521_uint1 x1801; + uint32_t x1802; + fiat_p521_uint1 x1803; + uint32_t x1804; + fiat_p521_uint1 x1805; + uint32_t x1806; + fiat_p521_uint1 x1807; + uint32_t x1808; + fiat_p521_uint1 x1809; + uint32_t x1810; + fiat_p521_uint1 x1811; + uint32_t x1812; + fiat_p521_uint1 x1813; + uint32_t x1814; + fiat_p521_uint1 x1815; + uint32_t x1816; + fiat_p521_uint1 x1817; + uint32_t x1818; + fiat_p521_uint1 x1819; + uint32_t x1820; + fiat_p521_uint1 x1821; + uint32_t x1822; + fiat_p521_uint1 x1823; + uint32_t x1824; + fiat_p521_uint1 x1825; + uint32_t x1826; + fiat_p521_uint1 x1827; + uint32_t x1828; + fiat_p521_uint1 x1829; + uint32_t x1830; + fiat_p521_uint1 x1831; + uint32_t x1832; + fiat_p521_uint1 x1833; + uint32_t x1834; + fiat_p521_uint1 x1835; + uint32_t x1836; + fiat_p521_uint1 x1837; + uint32_t x1838; + fiat_p521_uint1 x1839; + uint32_t x1840; + fiat_p521_uint1 x1841; + uint32_t x1842; + fiat_p521_uint1 x1843; + uint32_t x1844; + fiat_p521_uint1 x1845; + uint32_t x1846; + fiat_p521_uint1 x1847; + uint32_t x1848; + fiat_p521_uint1 x1849; + uint32_t x1850; + uint32_t x1851; + uint32_t x1852; + uint32_t x1853; + uint32_t x1854; + uint32_t x1855; + uint32_t x1856; + uint32_t x1857; + uint32_t x1858; + uint32_t x1859; + uint32_t x1860; + uint32_t x1861; + uint32_t x1862; + uint32_t x1863; + uint32_t x1864; + uint32_t x1865; + uint32_t x1866; + uint32_t x1867; + uint32_t x1868; + uint32_t x1869; + uint32_t x1870; + uint32_t x1871; + uint32_t x1872; + uint32_t x1873; + uint32_t x1874; + uint32_t x1875; + uint32_t x1876; + uint32_t x1877; + uint32_t x1878; + uint32_t x1879; + uint32_t x1880; + uint32_t x1881; + uint32_t x1882; + uint32_t x1883; + uint32_t x1884; + fiat_p521_uint1 x1885; + uint32_t x1886; + fiat_p521_uint1 x1887; + uint32_t x1888; + fiat_p521_uint1 x1889; + uint32_t x1890; + fiat_p521_uint1 x1891; + uint32_t x1892; + fiat_p521_uint1 x1893; + uint32_t x1894; + fiat_p521_uint1 x1895; + uint32_t x1896; + fiat_p521_uint1 x1897; + uint32_t x1898; + fiat_p521_uint1 x1899; + uint32_t x1900; + fiat_p521_uint1 x1901; + uint32_t x1902; + fiat_p521_uint1 x1903; + uint32_t x1904; + fiat_p521_uint1 x1905; + uint32_t x1906; + fiat_p521_uint1 x1907; + uint32_t x1908; + fiat_p521_uint1 x1909; + uint32_t x1910; + fiat_p521_uint1 x1911; + uint32_t x1912; + fiat_p521_uint1 x1913; + uint32_t x1914; + fiat_p521_uint1 x1915; + uint32_t x1916; + fiat_p521_uint1 x1917; + uint32_t x1918; + fiat_p521_uint1 x1919; + uint32_t x1920; + fiat_p521_uint1 x1921; + uint32_t x1922; + fiat_p521_uint1 x1923; + uint32_t x1924; + fiat_p521_uint1 x1925; + uint32_t x1926; + fiat_p521_uint1 x1927; + uint32_t x1928; + fiat_p521_uint1 x1929; + uint32_t x1930; + fiat_p521_uint1 x1931; + uint32_t x1932; + fiat_p521_uint1 x1933; + uint32_t x1934; + fiat_p521_uint1 x1935; + uint32_t x1936; + fiat_p521_uint1 x1937; + uint32_t x1938; + fiat_p521_uint1 x1939; + uint32_t x1940; + fiat_p521_uint1 x1941; + uint32_t x1942; + fiat_p521_uint1 x1943; + uint32_t x1944; + fiat_p521_uint1 x1945; + uint32_t x1946; + fiat_p521_uint1 x1947; + uint32_t x1948; + fiat_p521_uint1 x1949; + uint32_t x1950; + fiat_p521_uint1 x1951; + uint32_t x1952; + fiat_p521_uint1 x1953; + uint32_t x1954; + fiat_p521_uint1 x1955; + uint32_t x1956; + fiat_p521_uint1 x1957; + uint32_t x1958; + fiat_p521_uint1 x1959; + uint32_t x1960; + fiat_p521_uint1 x1961; + uint32_t x1962; + fiat_p521_uint1 x1963; + uint32_t x1964; + fiat_p521_uint1 x1965; + uint32_t x1966; + fiat_p521_uint1 x1967; + uint32_t x1968; + fiat_p521_uint1 x1969; + uint32_t x1970; + fiat_p521_uint1 x1971; + uint32_t x1972; + fiat_p521_uint1 x1973; + uint32_t x1974; + fiat_p521_uint1 x1975; + uint32_t x1976; + fiat_p521_uint1 x1977; + uint32_t x1978; + fiat_p521_uint1 x1979; + uint32_t x1980; + fiat_p521_uint1 x1981; + uint32_t x1982; + uint32_t x1983; + uint32_t x1984; + uint32_t x1985; + uint32_t x1986; + uint32_t x1987; + uint32_t x1988; + uint32_t x1989; + uint32_t x1990; + uint32_t x1991; + uint32_t x1992; + uint32_t x1993; + uint32_t x1994; + uint32_t x1995; + uint32_t x1996; + uint32_t x1997; + uint32_t x1998; + uint32_t x1999; + uint32_t x2000; + uint32_t x2001; + uint32_t x2002; + uint32_t x2003; + uint32_t x2004; + uint32_t x2005; + uint32_t x2006; + uint32_t x2007; + uint32_t x2008; + uint32_t x2009; + uint32_t x2010; + uint32_t x2011; + uint32_t x2012; + uint32_t x2013; + uint32_t x2014; + uint32_t x2015; + uint32_t x2016; + fiat_p521_uint1 x2017; + uint32_t x2018; + fiat_p521_uint1 x2019; + uint32_t x2020; + fiat_p521_uint1 x2021; + uint32_t x2022; + fiat_p521_uint1 x2023; + uint32_t x2024; + fiat_p521_uint1 x2025; + uint32_t x2026; + fiat_p521_uint1 x2027; + uint32_t x2028; + fiat_p521_uint1 x2029; + uint32_t x2030; + fiat_p521_uint1 x2031; + uint32_t x2032; + fiat_p521_uint1 x2033; + uint32_t x2034; + fiat_p521_uint1 x2035; + uint32_t x2036; + fiat_p521_uint1 x2037; + uint32_t x2038; + fiat_p521_uint1 x2039; + uint32_t x2040; + fiat_p521_uint1 x2041; + uint32_t x2042; + fiat_p521_uint1 x2043; + uint32_t x2044; + fiat_p521_uint1 x2045; + uint32_t x2046; + fiat_p521_uint1 x2047; + uint32_t x2048; + fiat_p521_uint1 x2049; + uint32_t x2050; + fiat_p521_uint1 x2051; + uint32_t x2052; + fiat_p521_uint1 x2053; + uint32_t x2054; + fiat_p521_uint1 x2055; + uint32_t x2056; + fiat_p521_uint1 x2057; + uint32_t x2058; + fiat_p521_uint1 x2059; + uint32_t x2060; + fiat_p521_uint1 x2061; + uint32_t x2062; + fiat_p521_uint1 x2063; + uint32_t x2064; + fiat_p521_uint1 x2065; + uint32_t x2066; + fiat_p521_uint1 x2067; + uint32_t x2068; + fiat_p521_uint1 x2069; + uint32_t x2070; + fiat_p521_uint1 x2071; + uint32_t x2072; + fiat_p521_uint1 x2073; + uint32_t x2074; + fiat_p521_uint1 x2075; + uint32_t x2076; + fiat_p521_uint1 x2077; + uint32_t x2078; + fiat_p521_uint1 x2079; + uint32_t x2080; + fiat_p521_uint1 x2081; + uint32_t x2082; + fiat_p521_uint1 x2083; + uint32_t x2084; + fiat_p521_uint1 x2085; + uint32_t x2086; + fiat_p521_uint1 x2087; + uint32_t x2088; + fiat_p521_uint1 x2089; + uint32_t x2090; + fiat_p521_uint1 x2091; + uint32_t x2092; + fiat_p521_uint1 x2093; + uint32_t x2094; + fiat_p521_uint1 x2095; + uint32_t x2096; + fiat_p521_uint1 x2097; + uint32_t x2098; + fiat_p521_uint1 x2099; + uint32_t x2100; + fiat_p521_uint1 x2101; + uint32_t x2102; + fiat_p521_uint1 x2103; + uint32_t x2104; + fiat_p521_uint1 x2105; + uint32_t x2106; + fiat_p521_uint1 x2107; + uint32_t x2108; + fiat_p521_uint1 x2109; + uint32_t x2110; + fiat_p521_uint1 x2111; + uint32_t x2112; + fiat_p521_uint1 x2113; + uint32_t x2114; + uint32_t x2115; + uint32_t x2116; + uint32_t x2117; + uint32_t x2118; + uint32_t x2119; + uint32_t x2120; + uint32_t x2121; + uint32_t x2122; + uint32_t x2123; + uint32_t x2124; + uint32_t x2125; + uint32_t x2126; + uint32_t x2127; + uint32_t x2128; + uint32_t x2129; + uint32_t x2130; + uint32_t x2131; + uint32_t x2132; + uint32_t x2133; + uint32_t x2134; + uint32_t x2135; + uint32_t x2136; + uint32_t x2137; + uint32_t x2138; + uint32_t x2139; + uint32_t x2140; + uint32_t x2141; + uint32_t x2142; + uint32_t x2143; + uint32_t x2144; + uint32_t x2145; + uint32_t x2146; + uint32_t x2147; + uint32_t x2148; + fiat_p521_uint1 x2149; + uint32_t x2150; + fiat_p521_uint1 x2151; + uint32_t x2152; + fiat_p521_uint1 x2153; + uint32_t x2154; + fiat_p521_uint1 x2155; + uint32_t x2156; + fiat_p521_uint1 x2157; + uint32_t x2158; + fiat_p521_uint1 x2159; + uint32_t x2160; + fiat_p521_uint1 x2161; + uint32_t x2162; + fiat_p521_uint1 x2163; + uint32_t x2164; + fiat_p521_uint1 x2165; + uint32_t x2166; + fiat_p521_uint1 x2167; + uint32_t x2168; + fiat_p521_uint1 x2169; + uint32_t x2170; + fiat_p521_uint1 x2171; + uint32_t x2172; + fiat_p521_uint1 x2173; + uint32_t x2174; + fiat_p521_uint1 x2175; + uint32_t x2176; + fiat_p521_uint1 x2177; + uint32_t x2178; + fiat_p521_uint1 x2179; + uint32_t x2180; + fiat_p521_uint1 x2181; + uint32_t x2182; + fiat_p521_uint1 x2183; + uint32_t x2184; + fiat_p521_uint1 x2185; + uint32_t x2186; + fiat_p521_uint1 x2187; + uint32_t x2188; + fiat_p521_uint1 x2189; + uint32_t x2190; + fiat_p521_uint1 x2191; + uint32_t x2192; + fiat_p521_uint1 x2193; + uint32_t x2194; + fiat_p521_uint1 x2195; + uint32_t x2196; + fiat_p521_uint1 x2197; + uint32_t x2198; + fiat_p521_uint1 x2199; + uint32_t x2200; + fiat_p521_uint1 x2201; + uint32_t x2202; + fiat_p521_uint1 x2203; + uint32_t x2204; + fiat_p521_uint1 x2205; + uint32_t x2206; + fiat_p521_uint1 x2207; + uint32_t x2208; + fiat_p521_uint1 x2209; + uint32_t x2210; + fiat_p521_uint1 x2211; + uint32_t x2212; + fiat_p521_uint1 x2213; + uint32_t x2214; + uint32_t x2215; + fiat_p521_uint1 x2216; + uint32_t x2217; + fiat_p521_uint1 x2218; + uint32_t x2219; + fiat_p521_uint1 x2220; + uint32_t x2221; + fiat_p521_uint1 x2222; + uint32_t x2223; + fiat_p521_uint1 x2224; + uint32_t x2225; + fiat_p521_uint1 x2226; + uint32_t x2227; + fiat_p521_uint1 x2228; + uint32_t x2229; + fiat_p521_uint1 x2230; + uint32_t x2231; + fiat_p521_uint1 x2232; + uint32_t x2233; + fiat_p521_uint1 x2234; + uint32_t x2235; + fiat_p521_uint1 x2236; + uint32_t x2237; + fiat_p521_uint1 x2238; + uint32_t x2239; + fiat_p521_uint1 x2240; + uint32_t x2241; + fiat_p521_uint1 x2242; + uint32_t x2243; + fiat_p521_uint1 x2244; + uint32_t x2245; + fiat_p521_uint1 x2246; + uint32_t x2247; + fiat_p521_uint1 x2248; + uint32_t x2249; + fiat_p521_uint1 x2250; + uint32_t x2251; + uint32_t x2252; + uint32_t x2253; + uint32_t x2254; + uint32_t x2255; + uint32_t x2256; + uint32_t x2257; + uint32_t x2258; + uint32_t x2259; + uint32_t x2260; + uint32_t x2261; + uint32_t x2262; + uint32_t x2263; + uint32_t x2264; + uint32_t x2265; + uint32_t x2266; + uint32_t x2267; + x1 = (arg1[0]); + fiat_p521_mulx_u32(&x2, &x3, x1, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x4, &x5, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x6, &x7, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x8, &x9, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x10, &x11, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x12, &x13, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x14, &x15, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x16, &x17, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x18, &x19, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x20, &x21, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x22, &x23, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x24, &x25, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x26, &x27, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x28, &x29, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x30, &x31, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x32, &x33, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x34, &x35, x1, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x36, &x37, 0x0, x35, x32); + fiat_p521_addcarryx_u32(&x38, &x39, x37, x33, x30); + fiat_p521_addcarryx_u32(&x40, &x41, x39, x31, x28); + fiat_p521_addcarryx_u32(&x42, &x43, x41, x29, x26); + fiat_p521_addcarryx_u32(&x44, &x45, x43, x27, x24); + fiat_p521_addcarryx_u32(&x46, &x47, x45, x25, x22); + fiat_p521_addcarryx_u32(&x48, &x49, x47, x23, x20); + fiat_p521_addcarryx_u32(&x50, &x51, x49, x21, x18); + fiat_p521_addcarryx_u32(&x52, &x53, x51, x19, x16); + fiat_p521_addcarryx_u32(&x54, &x55, x53, x17, x14); + fiat_p521_addcarryx_u32(&x56, &x57, x55, x15, x12); + fiat_p521_addcarryx_u32(&x58, &x59, x57, x13, x10); + fiat_p521_addcarryx_u32(&x60, &x61, x59, x11, x8); + fiat_p521_addcarryx_u32(&x62, &x63, x61, x9, x6); + fiat_p521_addcarryx_u32(&x64, &x65, x63, x7, x4); + fiat_p521_addcarryx_u32(&x66, &x67, x65, x5, x2); + fiat_p521_addcarryx_u32(&x68, &x69, 0x0, x1, x34); + fiat_p521_addcarryx_u32(&x70, &x71, x69, 0x0, x36); + fiat_p521_addcarryx_u32(&x72, &x73, x71, 0x0, x38); + fiat_p521_addcarryx_u32(&x74, &x75, x73, 0x0, x40); + fiat_p521_addcarryx_u32(&x76, &x77, x75, 0x0, x42); + fiat_p521_addcarryx_u32(&x78, &x79, x77, 0x0, x44); + fiat_p521_addcarryx_u32(&x80, &x81, x79, 0x0, x46); + fiat_p521_addcarryx_u32(&x82, &x83, x81, 0x0, x48); + fiat_p521_addcarryx_u32(&x84, &x85, x83, 0x0, x50); + fiat_p521_addcarryx_u32(&x86, &x87, x85, 0x0, x52); + fiat_p521_addcarryx_u32(&x88, &x89, x87, 0x0, x54); + fiat_p521_addcarryx_u32(&x90, &x91, x89, 0x0, x56); + fiat_p521_addcarryx_u32(&x92, &x93, x91, 0x0, x58); + fiat_p521_addcarryx_u32(&x94, &x95, x93, 0x0, x60); + fiat_p521_addcarryx_u32(&x96, &x97, x95, 0x0, x62); + fiat_p521_addcarryx_u32(&x98, &x99, x97, 0x0, x64); + fiat_p521_addcarryx_u32(&x100, &x101, x99, 0x0, x66); + fiat_p521_addcarryx_u32(&x102, &x103, 0x0, x70, (arg1[1])); + fiat_p521_addcarryx_u32(&x104, &x105, x103, x72, 0x0); + fiat_p521_addcarryx_u32(&x106, &x107, x105, x74, 0x0); + fiat_p521_addcarryx_u32(&x108, &x109, x107, x76, 0x0); + fiat_p521_addcarryx_u32(&x110, &x111, x109, x78, 0x0); + fiat_p521_addcarryx_u32(&x112, &x113, x111, x80, 0x0); + fiat_p521_addcarryx_u32(&x114, &x115, x113, x82, 0x0); + fiat_p521_addcarryx_u32(&x116, &x117, x115, x84, 0x0); + fiat_p521_addcarryx_u32(&x118, &x119, x117, x86, 0x0); + fiat_p521_addcarryx_u32(&x120, &x121, x119, x88, 0x0); + fiat_p521_addcarryx_u32(&x122, &x123, x121, x90, 0x0); + fiat_p521_addcarryx_u32(&x124, &x125, x123, x92, 0x0); + fiat_p521_addcarryx_u32(&x126, &x127, x125, x94, 0x0); + fiat_p521_addcarryx_u32(&x128, &x129, x127, x96, 0x0); + fiat_p521_addcarryx_u32(&x130, &x131, x129, x98, 0x0); + fiat_p521_addcarryx_u32(&x132, &x133, x131, x100, 0x0); + fiat_p521_mulx_u32(&x134, &x135, x102, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x136, &x137, x102, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x138, &x139, x102, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x140, &x141, x102, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x142, &x143, x102, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x144, &x145, x102, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x146, &x147, x102, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x148, &x149, x102, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x150, &x151, x102, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x152, &x153, x102, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x154, &x155, x102, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x156, &x157, x102, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x158, &x159, x102, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x160, &x161, x102, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x162, &x163, x102, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x164, &x165, x102, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x166, &x167, x102, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x168, &x169, 0x0, x167, x164); + fiat_p521_addcarryx_u32(&x170, &x171, x169, x165, x162); + fiat_p521_addcarryx_u32(&x172, &x173, x171, x163, x160); + fiat_p521_addcarryx_u32(&x174, &x175, x173, x161, x158); + fiat_p521_addcarryx_u32(&x176, &x177, x175, x159, x156); + fiat_p521_addcarryx_u32(&x178, &x179, x177, x157, x154); + fiat_p521_addcarryx_u32(&x180, &x181, x179, x155, x152); + fiat_p521_addcarryx_u32(&x182, &x183, x181, x153, x150); + fiat_p521_addcarryx_u32(&x184, &x185, x183, x151, x148); + fiat_p521_addcarryx_u32(&x186, &x187, x185, x149, x146); + fiat_p521_addcarryx_u32(&x188, &x189, x187, x147, x144); + fiat_p521_addcarryx_u32(&x190, &x191, x189, x145, x142); + fiat_p521_addcarryx_u32(&x192, &x193, x191, x143, x140); + fiat_p521_addcarryx_u32(&x194, &x195, x193, x141, x138); + fiat_p521_addcarryx_u32(&x196, &x197, x195, x139, x136); + fiat_p521_addcarryx_u32(&x198, &x199, x197, x137, x134); + fiat_p521_addcarryx_u32(&x200, &x201, 0x0, x102, x166); + fiat_p521_addcarryx_u32(&x202, &x203, x201, x104, x168); + fiat_p521_addcarryx_u32(&x204, &x205, x203, x106, x170); + fiat_p521_addcarryx_u32(&x206, &x207, x205, x108, x172); + fiat_p521_addcarryx_u32(&x208, &x209, x207, x110, x174); + fiat_p521_addcarryx_u32(&x210, &x211, x209, x112, x176); + fiat_p521_addcarryx_u32(&x212, &x213, x211, x114, x178); + fiat_p521_addcarryx_u32(&x214, &x215, x213, x116, x180); + fiat_p521_addcarryx_u32(&x216, &x217, x215, x118, x182); + fiat_p521_addcarryx_u32(&x218, &x219, x217, x120, x184); + fiat_p521_addcarryx_u32(&x220, &x221, x219, x122, x186); + fiat_p521_addcarryx_u32(&x222, &x223, x221, x124, x188); + fiat_p521_addcarryx_u32(&x224, &x225, x223, x126, x190); + fiat_p521_addcarryx_u32(&x226, &x227, x225, x128, x192); + fiat_p521_addcarryx_u32(&x228, &x229, x227, x130, x194); + fiat_p521_addcarryx_u32(&x230, &x231, x229, x132, x196); + fiat_p521_addcarryx_u32(&x232, &x233, x231, (x133 + (x101 + (x67 + x3))), x198); + fiat_p521_addcarryx_u32(&x234, &x235, 0x0, x202, (arg1[2])); + fiat_p521_addcarryx_u32(&x236, &x237, x235, x204, 0x0); + fiat_p521_addcarryx_u32(&x238, &x239, x237, x206, 0x0); + fiat_p521_addcarryx_u32(&x240, &x241, x239, x208, 0x0); + fiat_p521_addcarryx_u32(&x242, &x243, x241, x210, 0x0); + fiat_p521_addcarryx_u32(&x244, &x245, x243, x212, 0x0); + fiat_p521_addcarryx_u32(&x246, &x247, x245, x214, 0x0); + fiat_p521_addcarryx_u32(&x248, &x249, x247, x216, 0x0); + fiat_p521_addcarryx_u32(&x250, &x251, x249, x218, 0x0); + fiat_p521_addcarryx_u32(&x252, &x253, x251, x220, 0x0); + fiat_p521_addcarryx_u32(&x254, &x255, x253, x222, 0x0); + fiat_p521_addcarryx_u32(&x256, &x257, x255, x224, 0x0); + fiat_p521_addcarryx_u32(&x258, &x259, x257, x226, 0x0); + fiat_p521_addcarryx_u32(&x260, &x261, x259, x228, 0x0); + fiat_p521_addcarryx_u32(&x262, &x263, x261, x230, 0x0); + fiat_p521_addcarryx_u32(&x264, &x265, x263, x232, 0x0); + fiat_p521_mulx_u32(&x266, &x267, x234, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x268, &x269, x234, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x270, &x271, x234, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x272, &x273, x234, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x274, &x275, x234, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x276, &x277, x234, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x278, &x279, x234, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x280, &x281, x234, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x282, &x283, x234, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x284, &x285, x234, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x286, &x287, x234, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x288, &x289, x234, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x290, &x291, x234, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x292, &x293, x234, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x294, &x295, x234, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x296, &x297, x234, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x298, &x299, x234, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x300, &x301, 0x0, x299, x296); + fiat_p521_addcarryx_u32(&x302, &x303, x301, x297, x294); + fiat_p521_addcarryx_u32(&x304, &x305, x303, x295, x292); + fiat_p521_addcarryx_u32(&x306, &x307, x305, x293, x290); + fiat_p521_addcarryx_u32(&x308, &x309, x307, x291, x288); + fiat_p521_addcarryx_u32(&x310, &x311, x309, x289, x286); + fiat_p521_addcarryx_u32(&x312, &x313, x311, x287, x284); + fiat_p521_addcarryx_u32(&x314, &x315, x313, x285, x282); + fiat_p521_addcarryx_u32(&x316, &x317, x315, x283, x280); + fiat_p521_addcarryx_u32(&x318, &x319, x317, x281, x278); + fiat_p521_addcarryx_u32(&x320, &x321, x319, x279, x276); + fiat_p521_addcarryx_u32(&x322, &x323, x321, x277, x274); + fiat_p521_addcarryx_u32(&x324, &x325, x323, x275, x272); + fiat_p521_addcarryx_u32(&x326, &x327, x325, x273, x270); + fiat_p521_addcarryx_u32(&x328, &x329, x327, x271, x268); + fiat_p521_addcarryx_u32(&x330, &x331, x329, x269, x266); + fiat_p521_addcarryx_u32(&x332, &x333, 0x0, x234, x298); + fiat_p521_addcarryx_u32(&x334, &x335, x333, x236, x300); + fiat_p521_addcarryx_u32(&x336, &x337, x335, x238, x302); + fiat_p521_addcarryx_u32(&x338, &x339, x337, x240, x304); + fiat_p521_addcarryx_u32(&x340, &x341, x339, x242, x306); + fiat_p521_addcarryx_u32(&x342, &x343, x341, x244, x308); + fiat_p521_addcarryx_u32(&x344, &x345, x343, x246, x310); + fiat_p521_addcarryx_u32(&x346, &x347, x345, x248, x312); + fiat_p521_addcarryx_u32(&x348, &x349, x347, x250, x314); + fiat_p521_addcarryx_u32(&x350, &x351, x349, x252, x316); + fiat_p521_addcarryx_u32(&x352, &x353, x351, x254, x318); + fiat_p521_addcarryx_u32(&x354, &x355, x353, x256, x320); + fiat_p521_addcarryx_u32(&x356, &x357, x355, x258, x322); + fiat_p521_addcarryx_u32(&x358, &x359, x357, x260, x324); + fiat_p521_addcarryx_u32(&x360, &x361, x359, x262, x326); + fiat_p521_addcarryx_u32(&x362, &x363, x361, x264, x328); + fiat_p521_addcarryx_u32(&x364, &x365, x363, (x265 + (x233 + (x199 + x135))), x330); + fiat_p521_addcarryx_u32(&x366, &x367, 0x0, x334, (arg1[3])); + fiat_p521_addcarryx_u32(&x368, &x369, x367, x336, 0x0); + fiat_p521_addcarryx_u32(&x370, &x371, x369, x338, 0x0); + fiat_p521_addcarryx_u32(&x372, &x373, x371, x340, 0x0); + fiat_p521_addcarryx_u32(&x374, &x375, x373, x342, 0x0); + fiat_p521_addcarryx_u32(&x376, &x377, x375, x344, 0x0); + fiat_p521_addcarryx_u32(&x378, &x379, x377, x346, 0x0); + fiat_p521_addcarryx_u32(&x380, &x381, x379, x348, 0x0); + fiat_p521_addcarryx_u32(&x382, &x383, x381, x350, 0x0); + fiat_p521_addcarryx_u32(&x384, &x385, x383, x352, 0x0); + fiat_p521_addcarryx_u32(&x386, &x387, x385, x354, 0x0); + fiat_p521_addcarryx_u32(&x388, &x389, x387, x356, 0x0); + fiat_p521_addcarryx_u32(&x390, &x391, x389, x358, 0x0); + fiat_p521_addcarryx_u32(&x392, &x393, x391, x360, 0x0); + fiat_p521_addcarryx_u32(&x394, &x395, x393, x362, 0x0); + fiat_p521_addcarryx_u32(&x396, &x397, x395, x364, 0x0); + fiat_p521_mulx_u32(&x398, &x399, x366, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x400, &x401, x366, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x402, &x403, x366, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x404, &x405, x366, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x406, &x407, x366, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x408, &x409, x366, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x410, &x411, x366, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x412, &x413, x366, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x414, &x415, x366, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x416, &x417, x366, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x418, &x419, x366, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x420, &x421, x366, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x422, &x423, x366, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x424, &x425, x366, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x426, &x427, x366, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x428, &x429, x366, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x430, &x431, x366, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x432, &x433, 0x0, x431, x428); + fiat_p521_addcarryx_u32(&x434, &x435, x433, x429, x426); + fiat_p521_addcarryx_u32(&x436, &x437, x435, x427, x424); + fiat_p521_addcarryx_u32(&x438, &x439, x437, x425, x422); + fiat_p521_addcarryx_u32(&x440, &x441, x439, x423, x420); + fiat_p521_addcarryx_u32(&x442, &x443, x441, x421, x418); + fiat_p521_addcarryx_u32(&x444, &x445, x443, x419, x416); + fiat_p521_addcarryx_u32(&x446, &x447, x445, x417, x414); + fiat_p521_addcarryx_u32(&x448, &x449, x447, x415, x412); + fiat_p521_addcarryx_u32(&x450, &x451, x449, x413, x410); + fiat_p521_addcarryx_u32(&x452, &x453, x451, x411, x408); + fiat_p521_addcarryx_u32(&x454, &x455, x453, x409, x406); + fiat_p521_addcarryx_u32(&x456, &x457, x455, x407, x404); + fiat_p521_addcarryx_u32(&x458, &x459, x457, x405, x402); + fiat_p521_addcarryx_u32(&x460, &x461, x459, x403, x400); + fiat_p521_addcarryx_u32(&x462, &x463, x461, x401, x398); + fiat_p521_addcarryx_u32(&x464, &x465, 0x0, x366, x430); + fiat_p521_addcarryx_u32(&x466, &x467, x465, x368, x432); + fiat_p521_addcarryx_u32(&x468, &x469, x467, x370, x434); + fiat_p521_addcarryx_u32(&x470, &x471, x469, x372, x436); + fiat_p521_addcarryx_u32(&x472, &x473, x471, x374, x438); + fiat_p521_addcarryx_u32(&x474, &x475, x473, x376, x440); + fiat_p521_addcarryx_u32(&x476, &x477, x475, x378, x442); + fiat_p521_addcarryx_u32(&x478, &x479, x477, x380, x444); + fiat_p521_addcarryx_u32(&x480, &x481, x479, x382, x446); + fiat_p521_addcarryx_u32(&x482, &x483, x481, x384, x448); + fiat_p521_addcarryx_u32(&x484, &x485, x483, x386, x450); + fiat_p521_addcarryx_u32(&x486, &x487, x485, x388, x452); + fiat_p521_addcarryx_u32(&x488, &x489, x487, x390, x454); + fiat_p521_addcarryx_u32(&x490, &x491, x489, x392, x456); + fiat_p521_addcarryx_u32(&x492, &x493, x491, x394, x458); + fiat_p521_addcarryx_u32(&x494, &x495, x493, x396, x460); + fiat_p521_addcarryx_u32(&x496, &x497, x495, (x397 + (x365 + (x331 + x267))), x462); + fiat_p521_addcarryx_u32(&x498, &x499, 0x0, x466, (arg1[4])); + fiat_p521_addcarryx_u32(&x500, &x501, x499, x468, 0x0); + fiat_p521_addcarryx_u32(&x502, &x503, x501, x470, 0x0); + fiat_p521_addcarryx_u32(&x504, &x505, x503, x472, 0x0); + fiat_p521_addcarryx_u32(&x506, &x507, x505, x474, 0x0); + fiat_p521_addcarryx_u32(&x508, &x509, x507, x476, 0x0); + fiat_p521_addcarryx_u32(&x510, &x511, x509, x478, 0x0); + fiat_p521_addcarryx_u32(&x512, &x513, x511, x480, 0x0); + fiat_p521_addcarryx_u32(&x514, &x515, x513, x482, 0x0); + fiat_p521_addcarryx_u32(&x516, &x517, x515, x484, 0x0); + fiat_p521_addcarryx_u32(&x518, &x519, x517, x486, 0x0); + fiat_p521_addcarryx_u32(&x520, &x521, x519, x488, 0x0); + fiat_p521_addcarryx_u32(&x522, &x523, x521, x490, 0x0); + fiat_p521_addcarryx_u32(&x524, &x525, x523, x492, 0x0); + fiat_p521_addcarryx_u32(&x526, &x527, x525, x494, 0x0); + fiat_p521_addcarryx_u32(&x528, &x529, x527, x496, 0x0); + fiat_p521_mulx_u32(&x530, &x531, x498, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x532, &x533, x498, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x534, &x535, x498, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x536, &x537, x498, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x538, &x539, x498, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x540, &x541, x498, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x542, &x543, x498, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x544, &x545, x498, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x546, &x547, x498, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x548, &x549, x498, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x550, &x551, x498, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x552, &x553, x498, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x554, &x555, x498, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x556, &x557, x498, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x558, &x559, x498, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x560, &x561, x498, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x562, &x563, x498, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x564, &x565, 0x0, x563, x560); + fiat_p521_addcarryx_u32(&x566, &x567, x565, x561, x558); + fiat_p521_addcarryx_u32(&x568, &x569, x567, x559, x556); + fiat_p521_addcarryx_u32(&x570, &x571, x569, x557, x554); + fiat_p521_addcarryx_u32(&x572, &x573, x571, x555, x552); + fiat_p521_addcarryx_u32(&x574, &x575, x573, x553, x550); + fiat_p521_addcarryx_u32(&x576, &x577, x575, x551, x548); + fiat_p521_addcarryx_u32(&x578, &x579, x577, x549, x546); + fiat_p521_addcarryx_u32(&x580, &x581, x579, x547, x544); + fiat_p521_addcarryx_u32(&x582, &x583, x581, x545, x542); + fiat_p521_addcarryx_u32(&x584, &x585, x583, x543, x540); + fiat_p521_addcarryx_u32(&x586, &x587, x585, x541, x538); + fiat_p521_addcarryx_u32(&x588, &x589, x587, x539, x536); + fiat_p521_addcarryx_u32(&x590, &x591, x589, x537, x534); + fiat_p521_addcarryx_u32(&x592, &x593, x591, x535, x532); + fiat_p521_addcarryx_u32(&x594, &x595, x593, x533, x530); + fiat_p521_addcarryx_u32(&x596, &x597, 0x0, x498, x562); + fiat_p521_addcarryx_u32(&x598, &x599, x597, x500, x564); + fiat_p521_addcarryx_u32(&x600, &x601, x599, x502, x566); + fiat_p521_addcarryx_u32(&x602, &x603, x601, x504, x568); + fiat_p521_addcarryx_u32(&x604, &x605, x603, x506, x570); + fiat_p521_addcarryx_u32(&x606, &x607, x605, x508, x572); + fiat_p521_addcarryx_u32(&x608, &x609, x607, x510, x574); + fiat_p521_addcarryx_u32(&x610, &x611, x609, x512, x576); + fiat_p521_addcarryx_u32(&x612, &x613, x611, x514, x578); + fiat_p521_addcarryx_u32(&x614, &x615, x613, x516, x580); + fiat_p521_addcarryx_u32(&x616, &x617, x615, x518, x582); + fiat_p521_addcarryx_u32(&x618, &x619, x617, x520, x584); + fiat_p521_addcarryx_u32(&x620, &x621, x619, x522, x586); + fiat_p521_addcarryx_u32(&x622, &x623, x621, x524, x588); + fiat_p521_addcarryx_u32(&x624, &x625, x623, x526, x590); + fiat_p521_addcarryx_u32(&x626, &x627, x625, x528, x592); + fiat_p521_addcarryx_u32(&x628, &x629, x627, (x529 + (x497 + (x463 + x399))), x594); + fiat_p521_addcarryx_u32(&x630, &x631, 0x0, x598, (arg1[5])); + fiat_p521_addcarryx_u32(&x632, &x633, x631, x600, 0x0); + fiat_p521_addcarryx_u32(&x634, &x635, x633, x602, 0x0); + fiat_p521_addcarryx_u32(&x636, &x637, x635, x604, 0x0); + fiat_p521_addcarryx_u32(&x638, &x639, x637, x606, 0x0); + fiat_p521_addcarryx_u32(&x640, &x641, x639, x608, 0x0); + fiat_p521_addcarryx_u32(&x642, &x643, x641, x610, 0x0); + fiat_p521_addcarryx_u32(&x644, &x645, x643, x612, 0x0); + fiat_p521_addcarryx_u32(&x646, &x647, x645, x614, 0x0); + fiat_p521_addcarryx_u32(&x648, &x649, x647, x616, 0x0); + fiat_p521_addcarryx_u32(&x650, &x651, x649, x618, 0x0); + fiat_p521_addcarryx_u32(&x652, &x653, x651, x620, 0x0); + fiat_p521_addcarryx_u32(&x654, &x655, x653, x622, 0x0); + fiat_p521_addcarryx_u32(&x656, &x657, x655, x624, 0x0); + fiat_p521_addcarryx_u32(&x658, &x659, x657, x626, 0x0); + fiat_p521_addcarryx_u32(&x660, &x661, x659, x628, 0x0); + fiat_p521_mulx_u32(&x662, &x663, x630, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x664, &x665, x630, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x666, &x667, x630, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x668, &x669, x630, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x670, &x671, x630, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x672, &x673, x630, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x674, &x675, x630, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x676, &x677, x630, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x678, &x679, x630, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x680, &x681, x630, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x682, &x683, x630, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x684, &x685, x630, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x686, &x687, x630, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x688, &x689, x630, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x690, &x691, x630, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x692, &x693, x630, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x694, &x695, x630, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x696, &x697, 0x0, x695, x692); + fiat_p521_addcarryx_u32(&x698, &x699, x697, x693, x690); + fiat_p521_addcarryx_u32(&x700, &x701, x699, x691, x688); + fiat_p521_addcarryx_u32(&x702, &x703, x701, x689, x686); + fiat_p521_addcarryx_u32(&x704, &x705, x703, x687, x684); + fiat_p521_addcarryx_u32(&x706, &x707, x705, x685, x682); + fiat_p521_addcarryx_u32(&x708, &x709, x707, x683, x680); + fiat_p521_addcarryx_u32(&x710, &x711, x709, x681, x678); + fiat_p521_addcarryx_u32(&x712, &x713, x711, x679, x676); + fiat_p521_addcarryx_u32(&x714, &x715, x713, x677, x674); + fiat_p521_addcarryx_u32(&x716, &x717, x715, x675, x672); + fiat_p521_addcarryx_u32(&x718, &x719, x717, x673, x670); + fiat_p521_addcarryx_u32(&x720, &x721, x719, x671, x668); + fiat_p521_addcarryx_u32(&x722, &x723, x721, x669, x666); + fiat_p521_addcarryx_u32(&x724, &x725, x723, x667, x664); + fiat_p521_addcarryx_u32(&x726, &x727, x725, x665, x662); + fiat_p521_addcarryx_u32(&x728, &x729, 0x0, x630, x694); + fiat_p521_addcarryx_u32(&x730, &x731, x729, x632, x696); + fiat_p521_addcarryx_u32(&x732, &x733, x731, x634, x698); + fiat_p521_addcarryx_u32(&x734, &x735, x733, x636, x700); + fiat_p521_addcarryx_u32(&x736, &x737, x735, x638, x702); + fiat_p521_addcarryx_u32(&x738, &x739, x737, x640, x704); + fiat_p521_addcarryx_u32(&x740, &x741, x739, x642, x706); + fiat_p521_addcarryx_u32(&x742, &x743, x741, x644, x708); + fiat_p521_addcarryx_u32(&x744, &x745, x743, x646, x710); + fiat_p521_addcarryx_u32(&x746, &x747, x745, x648, x712); + fiat_p521_addcarryx_u32(&x748, &x749, x747, x650, x714); + fiat_p521_addcarryx_u32(&x750, &x751, x749, x652, x716); + fiat_p521_addcarryx_u32(&x752, &x753, x751, x654, x718); + fiat_p521_addcarryx_u32(&x754, &x755, x753, x656, x720); + fiat_p521_addcarryx_u32(&x756, &x757, x755, x658, x722); + fiat_p521_addcarryx_u32(&x758, &x759, x757, x660, x724); + fiat_p521_addcarryx_u32(&x760, &x761, x759, (x661 + (x629 + (x595 + x531))), x726); + fiat_p521_addcarryx_u32(&x762, &x763, 0x0, x730, (arg1[6])); + fiat_p521_addcarryx_u32(&x764, &x765, x763, x732, 0x0); + fiat_p521_addcarryx_u32(&x766, &x767, x765, x734, 0x0); + fiat_p521_addcarryx_u32(&x768, &x769, x767, x736, 0x0); + fiat_p521_addcarryx_u32(&x770, &x771, x769, x738, 0x0); + fiat_p521_addcarryx_u32(&x772, &x773, x771, x740, 0x0); + fiat_p521_addcarryx_u32(&x774, &x775, x773, x742, 0x0); + fiat_p521_addcarryx_u32(&x776, &x777, x775, x744, 0x0); + fiat_p521_addcarryx_u32(&x778, &x779, x777, x746, 0x0); + fiat_p521_addcarryx_u32(&x780, &x781, x779, x748, 0x0); + fiat_p521_addcarryx_u32(&x782, &x783, x781, x750, 0x0); + fiat_p521_addcarryx_u32(&x784, &x785, x783, x752, 0x0); + fiat_p521_addcarryx_u32(&x786, &x787, x785, x754, 0x0); + fiat_p521_addcarryx_u32(&x788, &x789, x787, x756, 0x0); + fiat_p521_addcarryx_u32(&x790, &x791, x789, x758, 0x0); + fiat_p521_addcarryx_u32(&x792, &x793, x791, x760, 0x0); + fiat_p521_mulx_u32(&x794, &x795, x762, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x796, &x797, x762, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x798, &x799, x762, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x800, &x801, x762, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x802, &x803, x762, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x804, &x805, x762, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x806, &x807, x762, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x808, &x809, x762, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x810, &x811, x762, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x812, &x813, x762, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x814, &x815, x762, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x816, &x817, x762, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x818, &x819, x762, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x820, &x821, x762, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x822, &x823, x762, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x824, &x825, x762, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x826, &x827, x762, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x828, &x829, 0x0, x827, x824); + fiat_p521_addcarryx_u32(&x830, &x831, x829, x825, x822); + fiat_p521_addcarryx_u32(&x832, &x833, x831, x823, x820); + fiat_p521_addcarryx_u32(&x834, &x835, x833, x821, x818); + fiat_p521_addcarryx_u32(&x836, &x837, x835, x819, x816); + fiat_p521_addcarryx_u32(&x838, &x839, x837, x817, x814); + fiat_p521_addcarryx_u32(&x840, &x841, x839, x815, x812); + fiat_p521_addcarryx_u32(&x842, &x843, x841, x813, x810); + fiat_p521_addcarryx_u32(&x844, &x845, x843, x811, x808); + fiat_p521_addcarryx_u32(&x846, &x847, x845, x809, x806); + fiat_p521_addcarryx_u32(&x848, &x849, x847, x807, x804); + fiat_p521_addcarryx_u32(&x850, &x851, x849, x805, x802); + fiat_p521_addcarryx_u32(&x852, &x853, x851, x803, x800); + fiat_p521_addcarryx_u32(&x854, &x855, x853, x801, x798); + fiat_p521_addcarryx_u32(&x856, &x857, x855, x799, x796); + fiat_p521_addcarryx_u32(&x858, &x859, x857, x797, x794); + fiat_p521_addcarryx_u32(&x860, &x861, 0x0, x762, x826); + fiat_p521_addcarryx_u32(&x862, &x863, x861, x764, x828); + fiat_p521_addcarryx_u32(&x864, &x865, x863, x766, x830); + fiat_p521_addcarryx_u32(&x866, &x867, x865, x768, x832); + fiat_p521_addcarryx_u32(&x868, &x869, x867, x770, x834); + fiat_p521_addcarryx_u32(&x870, &x871, x869, x772, x836); + fiat_p521_addcarryx_u32(&x872, &x873, x871, x774, x838); + fiat_p521_addcarryx_u32(&x874, &x875, x873, x776, x840); + fiat_p521_addcarryx_u32(&x876, &x877, x875, x778, x842); + fiat_p521_addcarryx_u32(&x878, &x879, x877, x780, x844); + fiat_p521_addcarryx_u32(&x880, &x881, x879, x782, x846); + fiat_p521_addcarryx_u32(&x882, &x883, x881, x784, x848); + fiat_p521_addcarryx_u32(&x884, &x885, x883, x786, x850); + fiat_p521_addcarryx_u32(&x886, &x887, x885, x788, x852); + fiat_p521_addcarryx_u32(&x888, &x889, x887, x790, x854); + fiat_p521_addcarryx_u32(&x890, &x891, x889, x792, x856); + fiat_p521_addcarryx_u32(&x892, &x893, x891, (x793 + (x761 + (x727 + x663))), x858); + fiat_p521_addcarryx_u32(&x894, &x895, 0x0, x862, (arg1[7])); + fiat_p521_addcarryx_u32(&x896, &x897, x895, x864, 0x0); + fiat_p521_addcarryx_u32(&x898, &x899, x897, x866, 0x0); + fiat_p521_addcarryx_u32(&x900, &x901, x899, x868, 0x0); + fiat_p521_addcarryx_u32(&x902, &x903, x901, x870, 0x0); + fiat_p521_addcarryx_u32(&x904, &x905, x903, x872, 0x0); + fiat_p521_addcarryx_u32(&x906, &x907, x905, x874, 0x0); + fiat_p521_addcarryx_u32(&x908, &x909, x907, x876, 0x0); + fiat_p521_addcarryx_u32(&x910, &x911, x909, x878, 0x0); + fiat_p521_addcarryx_u32(&x912, &x913, x911, x880, 0x0); + fiat_p521_addcarryx_u32(&x914, &x915, x913, x882, 0x0); + fiat_p521_addcarryx_u32(&x916, &x917, x915, x884, 0x0); + fiat_p521_addcarryx_u32(&x918, &x919, x917, x886, 0x0); + fiat_p521_addcarryx_u32(&x920, &x921, x919, x888, 0x0); + fiat_p521_addcarryx_u32(&x922, &x923, x921, x890, 0x0); + fiat_p521_addcarryx_u32(&x924, &x925, x923, x892, 0x0); + fiat_p521_mulx_u32(&x926, &x927, x894, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x928, &x929, x894, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x930, &x931, x894, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x932, &x933, x894, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x934, &x935, x894, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x936, &x937, x894, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x938, &x939, x894, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x940, &x941, x894, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x942, &x943, x894, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x944, &x945, x894, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x946, &x947, x894, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x948, &x949, x894, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x950, &x951, x894, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x952, &x953, x894, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x954, &x955, x894, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x956, &x957, x894, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x958, &x959, x894, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x960, &x961, 0x0, x959, x956); + fiat_p521_addcarryx_u32(&x962, &x963, x961, x957, x954); + fiat_p521_addcarryx_u32(&x964, &x965, x963, x955, x952); + fiat_p521_addcarryx_u32(&x966, &x967, x965, x953, x950); + fiat_p521_addcarryx_u32(&x968, &x969, x967, x951, x948); + fiat_p521_addcarryx_u32(&x970, &x971, x969, x949, x946); + fiat_p521_addcarryx_u32(&x972, &x973, x971, x947, x944); + fiat_p521_addcarryx_u32(&x974, &x975, x973, x945, x942); + fiat_p521_addcarryx_u32(&x976, &x977, x975, x943, x940); + fiat_p521_addcarryx_u32(&x978, &x979, x977, x941, x938); + fiat_p521_addcarryx_u32(&x980, &x981, x979, x939, x936); + fiat_p521_addcarryx_u32(&x982, &x983, x981, x937, x934); + fiat_p521_addcarryx_u32(&x984, &x985, x983, x935, x932); + fiat_p521_addcarryx_u32(&x986, &x987, x985, x933, x930); + fiat_p521_addcarryx_u32(&x988, &x989, x987, x931, x928); + fiat_p521_addcarryx_u32(&x990, &x991, x989, x929, x926); + fiat_p521_addcarryx_u32(&x992, &x993, 0x0, x894, x958); + fiat_p521_addcarryx_u32(&x994, &x995, x993, x896, x960); + fiat_p521_addcarryx_u32(&x996, &x997, x995, x898, x962); + fiat_p521_addcarryx_u32(&x998, &x999, x997, x900, x964); + fiat_p521_addcarryx_u32(&x1000, &x1001, x999, x902, x966); + fiat_p521_addcarryx_u32(&x1002, &x1003, x1001, x904, x968); + fiat_p521_addcarryx_u32(&x1004, &x1005, x1003, x906, x970); + fiat_p521_addcarryx_u32(&x1006, &x1007, x1005, x908, x972); + fiat_p521_addcarryx_u32(&x1008, &x1009, x1007, x910, x974); + fiat_p521_addcarryx_u32(&x1010, &x1011, x1009, x912, x976); + fiat_p521_addcarryx_u32(&x1012, &x1013, x1011, x914, x978); + fiat_p521_addcarryx_u32(&x1014, &x1015, x1013, x916, x980); + fiat_p521_addcarryx_u32(&x1016, &x1017, x1015, x918, x982); + fiat_p521_addcarryx_u32(&x1018, &x1019, x1017, x920, x984); + fiat_p521_addcarryx_u32(&x1020, &x1021, x1019, x922, x986); + fiat_p521_addcarryx_u32(&x1022, &x1023, x1021, x924, x988); + fiat_p521_addcarryx_u32(&x1024, &x1025, x1023, (x925 + (x893 + (x859 + x795))), x990); + fiat_p521_addcarryx_u32(&x1026, &x1027, 0x0, x994, (arg1[8])); + fiat_p521_addcarryx_u32(&x1028, &x1029, x1027, x996, 0x0); + fiat_p521_addcarryx_u32(&x1030, &x1031, x1029, x998, 0x0); + fiat_p521_addcarryx_u32(&x1032, &x1033, x1031, x1000, 0x0); + fiat_p521_addcarryx_u32(&x1034, &x1035, x1033, x1002, 0x0); + fiat_p521_addcarryx_u32(&x1036, &x1037, x1035, x1004, 0x0); + fiat_p521_addcarryx_u32(&x1038, &x1039, x1037, x1006, 0x0); + fiat_p521_addcarryx_u32(&x1040, &x1041, x1039, x1008, 0x0); + fiat_p521_addcarryx_u32(&x1042, &x1043, x1041, x1010, 0x0); + fiat_p521_addcarryx_u32(&x1044, &x1045, x1043, x1012, 0x0); + fiat_p521_addcarryx_u32(&x1046, &x1047, x1045, x1014, 0x0); + fiat_p521_addcarryx_u32(&x1048, &x1049, x1047, x1016, 0x0); + fiat_p521_addcarryx_u32(&x1050, &x1051, x1049, x1018, 0x0); + fiat_p521_addcarryx_u32(&x1052, &x1053, x1051, x1020, 0x0); + fiat_p521_addcarryx_u32(&x1054, &x1055, x1053, x1022, 0x0); + fiat_p521_addcarryx_u32(&x1056, &x1057, x1055, x1024, 0x0); + fiat_p521_mulx_u32(&x1058, &x1059, x1026, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1060, &x1061, x1026, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1062, &x1063, x1026, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1064, &x1065, x1026, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1066, &x1067, x1026, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1068, &x1069, x1026, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1070, &x1071, x1026, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1072, &x1073, x1026, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1074, &x1075, x1026, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1076, &x1077, x1026, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1078, &x1079, x1026, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1080, &x1081, x1026, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1082, &x1083, x1026, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1084, &x1085, x1026, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1086, &x1087, x1026, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1088, &x1089, x1026, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1090, &x1091, x1026, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1092, &x1093, 0x0, x1091, x1088); + fiat_p521_addcarryx_u32(&x1094, &x1095, x1093, x1089, x1086); + fiat_p521_addcarryx_u32(&x1096, &x1097, x1095, x1087, x1084); + fiat_p521_addcarryx_u32(&x1098, &x1099, x1097, x1085, x1082); + fiat_p521_addcarryx_u32(&x1100, &x1101, x1099, x1083, x1080); + fiat_p521_addcarryx_u32(&x1102, &x1103, x1101, x1081, x1078); + fiat_p521_addcarryx_u32(&x1104, &x1105, x1103, x1079, x1076); + fiat_p521_addcarryx_u32(&x1106, &x1107, x1105, x1077, x1074); + fiat_p521_addcarryx_u32(&x1108, &x1109, x1107, x1075, x1072); + fiat_p521_addcarryx_u32(&x1110, &x1111, x1109, x1073, x1070); + fiat_p521_addcarryx_u32(&x1112, &x1113, x1111, x1071, x1068); + fiat_p521_addcarryx_u32(&x1114, &x1115, x1113, x1069, x1066); + fiat_p521_addcarryx_u32(&x1116, &x1117, x1115, x1067, x1064); + fiat_p521_addcarryx_u32(&x1118, &x1119, x1117, x1065, x1062); + fiat_p521_addcarryx_u32(&x1120, &x1121, x1119, x1063, x1060); + fiat_p521_addcarryx_u32(&x1122, &x1123, x1121, x1061, x1058); + fiat_p521_addcarryx_u32(&x1124, &x1125, 0x0, x1026, x1090); + fiat_p521_addcarryx_u32(&x1126, &x1127, x1125, x1028, x1092); + fiat_p521_addcarryx_u32(&x1128, &x1129, x1127, x1030, x1094); + fiat_p521_addcarryx_u32(&x1130, &x1131, x1129, x1032, x1096); + fiat_p521_addcarryx_u32(&x1132, &x1133, x1131, x1034, x1098); + fiat_p521_addcarryx_u32(&x1134, &x1135, x1133, x1036, x1100); + fiat_p521_addcarryx_u32(&x1136, &x1137, x1135, x1038, x1102); + fiat_p521_addcarryx_u32(&x1138, &x1139, x1137, x1040, x1104); + fiat_p521_addcarryx_u32(&x1140, &x1141, x1139, x1042, x1106); + fiat_p521_addcarryx_u32(&x1142, &x1143, x1141, x1044, x1108); + fiat_p521_addcarryx_u32(&x1144, &x1145, x1143, x1046, x1110); + fiat_p521_addcarryx_u32(&x1146, &x1147, x1145, x1048, x1112); + fiat_p521_addcarryx_u32(&x1148, &x1149, x1147, x1050, x1114); + fiat_p521_addcarryx_u32(&x1150, &x1151, x1149, x1052, x1116); + fiat_p521_addcarryx_u32(&x1152, &x1153, x1151, x1054, x1118); + fiat_p521_addcarryx_u32(&x1154, &x1155, x1153, x1056, x1120); + fiat_p521_addcarryx_u32(&x1156, &x1157, x1155, (x1057 + (x1025 + (x991 + x927))), x1122); + fiat_p521_addcarryx_u32(&x1158, &x1159, 0x0, x1126, (arg1[9])); + fiat_p521_addcarryx_u32(&x1160, &x1161, x1159, x1128, 0x0); + fiat_p521_addcarryx_u32(&x1162, &x1163, x1161, x1130, 0x0); + fiat_p521_addcarryx_u32(&x1164, &x1165, x1163, x1132, 0x0); + fiat_p521_addcarryx_u32(&x1166, &x1167, x1165, x1134, 0x0); + fiat_p521_addcarryx_u32(&x1168, &x1169, x1167, x1136, 0x0); + fiat_p521_addcarryx_u32(&x1170, &x1171, x1169, x1138, 0x0); + fiat_p521_addcarryx_u32(&x1172, &x1173, x1171, x1140, 0x0); + fiat_p521_addcarryx_u32(&x1174, &x1175, x1173, x1142, 0x0); + fiat_p521_addcarryx_u32(&x1176, &x1177, x1175, x1144, 0x0); + fiat_p521_addcarryx_u32(&x1178, &x1179, x1177, x1146, 0x0); + fiat_p521_addcarryx_u32(&x1180, &x1181, x1179, x1148, 0x0); + fiat_p521_addcarryx_u32(&x1182, &x1183, x1181, x1150, 0x0); + fiat_p521_addcarryx_u32(&x1184, &x1185, x1183, x1152, 0x0); + fiat_p521_addcarryx_u32(&x1186, &x1187, x1185, x1154, 0x0); + fiat_p521_addcarryx_u32(&x1188, &x1189, x1187, x1156, 0x0); + fiat_p521_mulx_u32(&x1190, &x1191, x1158, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1192, &x1193, x1158, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1194, &x1195, x1158, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1196, &x1197, x1158, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1198, &x1199, x1158, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1200, &x1201, x1158, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1202, &x1203, x1158, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1204, &x1205, x1158, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1206, &x1207, x1158, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1208, &x1209, x1158, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1210, &x1211, x1158, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1212, &x1213, x1158, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1214, &x1215, x1158, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1216, &x1217, x1158, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1218, &x1219, x1158, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1220, &x1221, x1158, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1222, &x1223, x1158, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1224, &x1225, 0x0, x1223, x1220); + fiat_p521_addcarryx_u32(&x1226, &x1227, x1225, x1221, x1218); + fiat_p521_addcarryx_u32(&x1228, &x1229, x1227, x1219, x1216); + fiat_p521_addcarryx_u32(&x1230, &x1231, x1229, x1217, x1214); + fiat_p521_addcarryx_u32(&x1232, &x1233, x1231, x1215, x1212); + fiat_p521_addcarryx_u32(&x1234, &x1235, x1233, x1213, x1210); + fiat_p521_addcarryx_u32(&x1236, &x1237, x1235, x1211, x1208); + fiat_p521_addcarryx_u32(&x1238, &x1239, x1237, x1209, x1206); + fiat_p521_addcarryx_u32(&x1240, &x1241, x1239, x1207, x1204); + fiat_p521_addcarryx_u32(&x1242, &x1243, x1241, x1205, x1202); + fiat_p521_addcarryx_u32(&x1244, &x1245, x1243, x1203, x1200); + fiat_p521_addcarryx_u32(&x1246, &x1247, x1245, x1201, x1198); + fiat_p521_addcarryx_u32(&x1248, &x1249, x1247, x1199, x1196); + fiat_p521_addcarryx_u32(&x1250, &x1251, x1249, x1197, x1194); + fiat_p521_addcarryx_u32(&x1252, &x1253, x1251, x1195, x1192); + fiat_p521_addcarryx_u32(&x1254, &x1255, x1253, x1193, x1190); + fiat_p521_addcarryx_u32(&x1256, &x1257, 0x0, x1158, x1222); + fiat_p521_addcarryx_u32(&x1258, &x1259, x1257, x1160, x1224); + fiat_p521_addcarryx_u32(&x1260, &x1261, x1259, x1162, x1226); + fiat_p521_addcarryx_u32(&x1262, &x1263, x1261, x1164, x1228); + fiat_p521_addcarryx_u32(&x1264, &x1265, x1263, x1166, x1230); + fiat_p521_addcarryx_u32(&x1266, &x1267, x1265, x1168, x1232); + fiat_p521_addcarryx_u32(&x1268, &x1269, x1267, x1170, x1234); + fiat_p521_addcarryx_u32(&x1270, &x1271, x1269, x1172, x1236); + fiat_p521_addcarryx_u32(&x1272, &x1273, x1271, x1174, x1238); + fiat_p521_addcarryx_u32(&x1274, &x1275, x1273, x1176, x1240); + fiat_p521_addcarryx_u32(&x1276, &x1277, x1275, x1178, x1242); + fiat_p521_addcarryx_u32(&x1278, &x1279, x1277, x1180, x1244); + fiat_p521_addcarryx_u32(&x1280, &x1281, x1279, x1182, x1246); + fiat_p521_addcarryx_u32(&x1282, &x1283, x1281, x1184, x1248); + fiat_p521_addcarryx_u32(&x1284, &x1285, x1283, x1186, x1250); + fiat_p521_addcarryx_u32(&x1286, &x1287, x1285, x1188, x1252); + fiat_p521_addcarryx_u32(&x1288, &x1289, x1287, (x1189 + (x1157 + (x1123 + x1059))), x1254); + fiat_p521_addcarryx_u32(&x1290, &x1291, 0x0, x1258, (arg1[10])); + fiat_p521_addcarryx_u32(&x1292, &x1293, x1291, x1260, 0x0); + fiat_p521_addcarryx_u32(&x1294, &x1295, x1293, x1262, 0x0); + fiat_p521_addcarryx_u32(&x1296, &x1297, x1295, x1264, 0x0); + fiat_p521_addcarryx_u32(&x1298, &x1299, x1297, x1266, 0x0); + fiat_p521_addcarryx_u32(&x1300, &x1301, x1299, x1268, 0x0); + fiat_p521_addcarryx_u32(&x1302, &x1303, x1301, x1270, 0x0); + fiat_p521_addcarryx_u32(&x1304, &x1305, x1303, x1272, 0x0); + fiat_p521_addcarryx_u32(&x1306, &x1307, x1305, x1274, 0x0); + fiat_p521_addcarryx_u32(&x1308, &x1309, x1307, x1276, 0x0); + fiat_p521_addcarryx_u32(&x1310, &x1311, x1309, x1278, 0x0); + fiat_p521_addcarryx_u32(&x1312, &x1313, x1311, x1280, 0x0); + fiat_p521_addcarryx_u32(&x1314, &x1315, x1313, x1282, 0x0); + fiat_p521_addcarryx_u32(&x1316, &x1317, x1315, x1284, 0x0); + fiat_p521_addcarryx_u32(&x1318, &x1319, x1317, x1286, 0x0); + fiat_p521_addcarryx_u32(&x1320, &x1321, x1319, x1288, 0x0); + fiat_p521_mulx_u32(&x1322, &x1323, x1290, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1324, &x1325, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1326, &x1327, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1328, &x1329, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1330, &x1331, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1332, &x1333, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1334, &x1335, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1336, &x1337, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1338, &x1339, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1340, &x1341, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1342, &x1343, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1344, &x1345, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1346, &x1347, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1348, &x1349, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1350, &x1351, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1352, &x1353, x1290, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1354, &x1355, x1290, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1356, &x1357, 0x0, x1355, x1352); + fiat_p521_addcarryx_u32(&x1358, &x1359, x1357, x1353, x1350); + fiat_p521_addcarryx_u32(&x1360, &x1361, x1359, x1351, x1348); + fiat_p521_addcarryx_u32(&x1362, &x1363, x1361, x1349, x1346); + fiat_p521_addcarryx_u32(&x1364, &x1365, x1363, x1347, x1344); + fiat_p521_addcarryx_u32(&x1366, &x1367, x1365, x1345, x1342); + fiat_p521_addcarryx_u32(&x1368, &x1369, x1367, x1343, x1340); + fiat_p521_addcarryx_u32(&x1370, &x1371, x1369, x1341, x1338); + fiat_p521_addcarryx_u32(&x1372, &x1373, x1371, x1339, x1336); + fiat_p521_addcarryx_u32(&x1374, &x1375, x1373, x1337, x1334); + fiat_p521_addcarryx_u32(&x1376, &x1377, x1375, x1335, x1332); + fiat_p521_addcarryx_u32(&x1378, &x1379, x1377, x1333, x1330); + fiat_p521_addcarryx_u32(&x1380, &x1381, x1379, x1331, x1328); + fiat_p521_addcarryx_u32(&x1382, &x1383, x1381, x1329, x1326); + fiat_p521_addcarryx_u32(&x1384, &x1385, x1383, x1327, x1324); + fiat_p521_addcarryx_u32(&x1386, &x1387, x1385, x1325, x1322); + fiat_p521_addcarryx_u32(&x1388, &x1389, 0x0, x1290, x1354); + fiat_p521_addcarryx_u32(&x1390, &x1391, x1389, x1292, x1356); + fiat_p521_addcarryx_u32(&x1392, &x1393, x1391, x1294, x1358); + fiat_p521_addcarryx_u32(&x1394, &x1395, x1393, x1296, x1360); + fiat_p521_addcarryx_u32(&x1396, &x1397, x1395, x1298, x1362); + fiat_p521_addcarryx_u32(&x1398, &x1399, x1397, x1300, x1364); + fiat_p521_addcarryx_u32(&x1400, &x1401, x1399, x1302, x1366); + fiat_p521_addcarryx_u32(&x1402, &x1403, x1401, x1304, x1368); + fiat_p521_addcarryx_u32(&x1404, &x1405, x1403, x1306, x1370); + fiat_p521_addcarryx_u32(&x1406, &x1407, x1405, x1308, x1372); + fiat_p521_addcarryx_u32(&x1408, &x1409, x1407, x1310, x1374); + fiat_p521_addcarryx_u32(&x1410, &x1411, x1409, x1312, x1376); + fiat_p521_addcarryx_u32(&x1412, &x1413, x1411, x1314, x1378); + fiat_p521_addcarryx_u32(&x1414, &x1415, x1413, x1316, x1380); + fiat_p521_addcarryx_u32(&x1416, &x1417, x1415, x1318, x1382); + fiat_p521_addcarryx_u32(&x1418, &x1419, x1417, x1320, x1384); + fiat_p521_addcarryx_u32(&x1420, &x1421, x1419, (x1321 + (x1289 + (x1255 + x1191))), x1386); + fiat_p521_addcarryx_u32(&x1422, &x1423, 0x0, x1390, (arg1[11])); + fiat_p521_addcarryx_u32(&x1424, &x1425, x1423, x1392, 0x0); + fiat_p521_addcarryx_u32(&x1426, &x1427, x1425, x1394, 0x0); + fiat_p521_addcarryx_u32(&x1428, &x1429, x1427, x1396, 0x0); + fiat_p521_addcarryx_u32(&x1430, &x1431, x1429, x1398, 0x0); + fiat_p521_addcarryx_u32(&x1432, &x1433, x1431, x1400, 0x0); + fiat_p521_addcarryx_u32(&x1434, &x1435, x1433, x1402, 0x0); + fiat_p521_addcarryx_u32(&x1436, &x1437, x1435, x1404, 0x0); + fiat_p521_addcarryx_u32(&x1438, &x1439, x1437, x1406, 0x0); + fiat_p521_addcarryx_u32(&x1440, &x1441, x1439, x1408, 0x0); + fiat_p521_addcarryx_u32(&x1442, &x1443, x1441, x1410, 0x0); + fiat_p521_addcarryx_u32(&x1444, &x1445, x1443, x1412, 0x0); + fiat_p521_addcarryx_u32(&x1446, &x1447, x1445, x1414, 0x0); + fiat_p521_addcarryx_u32(&x1448, &x1449, x1447, x1416, 0x0); + fiat_p521_addcarryx_u32(&x1450, &x1451, x1449, x1418, 0x0); + fiat_p521_addcarryx_u32(&x1452, &x1453, x1451, x1420, 0x0); + fiat_p521_mulx_u32(&x1454, &x1455, x1422, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1456, &x1457, x1422, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1458, &x1459, x1422, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1460, &x1461, x1422, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1462, &x1463, x1422, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1464, &x1465, x1422, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1466, &x1467, x1422, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1468, &x1469, x1422, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1470, &x1471, x1422, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1472, &x1473, x1422, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1474, &x1475, x1422, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1476, &x1477, x1422, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1478, &x1479, x1422, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1480, &x1481, x1422, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1482, &x1483, x1422, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1484, &x1485, x1422, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1486, &x1487, x1422, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1488, &x1489, 0x0, x1487, x1484); + fiat_p521_addcarryx_u32(&x1490, &x1491, x1489, x1485, x1482); + fiat_p521_addcarryx_u32(&x1492, &x1493, x1491, x1483, x1480); + fiat_p521_addcarryx_u32(&x1494, &x1495, x1493, x1481, x1478); + fiat_p521_addcarryx_u32(&x1496, &x1497, x1495, x1479, x1476); + fiat_p521_addcarryx_u32(&x1498, &x1499, x1497, x1477, x1474); + fiat_p521_addcarryx_u32(&x1500, &x1501, x1499, x1475, x1472); + fiat_p521_addcarryx_u32(&x1502, &x1503, x1501, x1473, x1470); + fiat_p521_addcarryx_u32(&x1504, &x1505, x1503, x1471, x1468); + fiat_p521_addcarryx_u32(&x1506, &x1507, x1505, x1469, x1466); + fiat_p521_addcarryx_u32(&x1508, &x1509, x1507, x1467, x1464); + fiat_p521_addcarryx_u32(&x1510, &x1511, x1509, x1465, x1462); + fiat_p521_addcarryx_u32(&x1512, &x1513, x1511, x1463, x1460); + fiat_p521_addcarryx_u32(&x1514, &x1515, x1513, x1461, x1458); + fiat_p521_addcarryx_u32(&x1516, &x1517, x1515, x1459, x1456); + fiat_p521_addcarryx_u32(&x1518, &x1519, x1517, x1457, x1454); + fiat_p521_addcarryx_u32(&x1520, &x1521, 0x0, x1422, x1486); + fiat_p521_addcarryx_u32(&x1522, &x1523, x1521, x1424, x1488); + fiat_p521_addcarryx_u32(&x1524, &x1525, x1523, x1426, x1490); + fiat_p521_addcarryx_u32(&x1526, &x1527, x1525, x1428, x1492); + fiat_p521_addcarryx_u32(&x1528, &x1529, x1527, x1430, x1494); + fiat_p521_addcarryx_u32(&x1530, &x1531, x1529, x1432, x1496); + fiat_p521_addcarryx_u32(&x1532, &x1533, x1531, x1434, x1498); + fiat_p521_addcarryx_u32(&x1534, &x1535, x1533, x1436, x1500); + fiat_p521_addcarryx_u32(&x1536, &x1537, x1535, x1438, x1502); + fiat_p521_addcarryx_u32(&x1538, &x1539, x1537, x1440, x1504); + fiat_p521_addcarryx_u32(&x1540, &x1541, x1539, x1442, x1506); + fiat_p521_addcarryx_u32(&x1542, &x1543, x1541, x1444, x1508); + fiat_p521_addcarryx_u32(&x1544, &x1545, x1543, x1446, x1510); + fiat_p521_addcarryx_u32(&x1546, &x1547, x1545, x1448, x1512); + fiat_p521_addcarryx_u32(&x1548, &x1549, x1547, x1450, x1514); + fiat_p521_addcarryx_u32(&x1550, &x1551, x1549, x1452, x1516); + fiat_p521_addcarryx_u32(&x1552, &x1553, x1551, (x1453 + (x1421 + (x1387 + x1323))), x1518); + fiat_p521_addcarryx_u32(&x1554, &x1555, 0x0, x1522, (arg1[12])); + fiat_p521_addcarryx_u32(&x1556, &x1557, x1555, x1524, 0x0); + fiat_p521_addcarryx_u32(&x1558, &x1559, x1557, x1526, 0x0); + fiat_p521_addcarryx_u32(&x1560, &x1561, x1559, x1528, 0x0); + fiat_p521_addcarryx_u32(&x1562, &x1563, x1561, x1530, 0x0); + fiat_p521_addcarryx_u32(&x1564, &x1565, x1563, x1532, 0x0); + fiat_p521_addcarryx_u32(&x1566, &x1567, x1565, x1534, 0x0); + fiat_p521_addcarryx_u32(&x1568, &x1569, x1567, x1536, 0x0); + fiat_p521_addcarryx_u32(&x1570, &x1571, x1569, x1538, 0x0); + fiat_p521_addcarryx_u32(&x1572, &x1573, x1571, x1540, 0x0); + fiat_p521_addcarryx_u32(&x1574, &x1575, x1573, x1542, 0x0); + fiat_p521_addcarryx_u32(&x1576, &x1577, x1575, x1544, 0x0); + fiat_p521_addcarryx_u32(&x1578, &x1579, x1577, x1546, 0x0); + fiat_p521_addcarryx_u32(&x1580, &x1581, x1579, x1548, 0x0); + fiat_p521_addcarryx_u32(&x1582, &x1583, x1581, x1550, 0x0); + fiat_p521_addcarryx_u32(&x1584, &x1585, x1583, x1552, 0x0); + fiat_p521_mulx_u32(&x1586, &x1587, x1554, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1588, &x1589, x1554, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1590, &x1591, x1554, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1592, &x1593, x1554, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1594, &x1595, x1554, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1596, &x1597, x1554, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1598, &x1599, x1554, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1600, &x1601, x1554, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1602, &x1603, x1554, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1604, &x1605, x1554, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1606, &x1607, x1554, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1608, &x1609, x1554, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1610, &x1611, x1554, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1612, &x1613, x1554, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1614, &x1615, x1554, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1616, &x1617, x1554, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1618, &x1619, x1554, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1620, &x1621, 0x0, x1619, x1616); + fiat_p521_addcarryx_u32(&x1622, &x1623, x1621, x1617, x1614); + fiat_p521_addcarryx_u32(&x1624, &x1625, x1623, x1615, x1612); + fiat_p521_addcarryx_u32(&x1626, &x1627, x1625, x1613, x1610); + fiat_p521_addcarryx_u32(&x1628, &x1629, x1627, x1611, x1608); + fiat_p521_addcarryx_u32(&x1630, &x1631, x1629, x1609, x1606); + fiat_p521_addcarryx_u32(&x1632, &x1633, x1631, x1607, x1604); + fiat_p521_addcarryx_u32(&x1634, &x1635, x1633, x1605, x1602); + fiat_p521_addcarryx_u32(&x1636, &x1637, x1635, x1603, x1600); + fiat_p521_addcarryx_u32(&x1638, &x1639, x1637, x1601, x1598); + fiat_p521_addcarryx_u32(&x1640, &x1641, x1639, x1599, x1596); + fiat_p521_addcarryx_u32(&x1642, &x1643, x1641, x1597, x1594); + fiat_p521_addcarryx_u32(&x1644, &x1645, x1643, x1595, x1592); + fiat_p521_addcarryx_u32(&x1646, &x1647, x1645, x1593, x1590); + fiat_p521_addcarryx_u32(&x1648, &x1649, x1647, x1591, x1588); + fiat_p521_addcarryx_u32(&x1650, &x1651, x1649, x1589, x1586); + fiat_p521_addcarryx_u32(&x1652, &x1653, 0x0, x1554, x1618); + fiat_p521_addcarryx_u32(&x1654, &x1655, x1653, x1556, x1620); + fiat_p521_addcarryx_u32(&x1656, &x1657, x1655, x1558, x1622); + fiat_p521_addcarryx_u32(&x1658, &x1659, x1657, x1560, x1624); + fiat_p521_addcarryx_u32(&x1660, &x1661, x1659, x1562, x1626); + fiat_p521_addcarryx_u32(&x1662, &x1663, x1661, x1564, x1628); + fiat_p521_addcarryx_u32(&x1664, &x1665, x1663, x1566, x1630); + fiat_p521_addcarryx_u32(&x1666, &x1667, x1665, x1568, x1632); + fiat_p521_addcarryx_u32(&x1668, &x1669, x1667, x1570, x1634); + fiat_p521_addcarryx_u32(&x1670, &x1671, x1669, x1572, x1636); + fiat_p521_addcarryx_u32(&x1672, &x1673, x1671, x1574, x1638); + fiat_p521_addcarryx_u32(&x1674, &x1675, x1673, x1576, x1640); + fiat_p521_addcarryx_u32(&x1676, &x1677, x1675, x1578, x1642); + fiat_p521_addcarryx_u32(&x1678, &x1679, x1677, x1580, x1644); + fiat_p521_addcarryx_u32(&x1680, &x1681, x1679, x1582, x1646); + fiat_p521_addcarryx_u32(&x1682, &x1683, x1681, x1584, x1648); + fiat_p521_addcarryx_u32(&x1684, &x1685, x1683, (x1585 + (x1553 + (x1519 + x1455))), x1650); + fiat_p521_addcarryx_u32(&x1686, &x1687, 0x0, x1654, (arg1[13])); + fiat_p521_addcarryx_u32(&x1688, &x1689, x1687, x1656, 0x0); + fiat_p521_addcarryx_u32(&x1690, &x1691, x1689, x1658, 0x0); + fiat_p521_addcarryx_u32(&x1692, &x1693, x1691, x1660, 0x0); + fiat_p521_addcarryx_u32(&x1694, &x1695, x1693, x1662, 0x0); + fiat_p521_addcarryx_u32(&x1696, &x1697, x1695, x1664, 0x0); + fiat_p521_addcarryx_u32(&x1698, &x1699, x1697, x1666, 0x0); + fiat_p521_addcarryx_u32(&x1700, &x1701, x1699, x1668, 0x0); + fiat_p521_addcarryx_u32(&x1702, &x1703, x1701, x1670, 0x0); + fiat_p521_addcarryx_u32(&x1704, &x1705, x1703, x1672, 0x0); + fiat_p521_addcarryx_u32(&x1706, &x1707, x1705, x1674, 0x0); + fiat_p521_addcarryx_u32(&x1708, &x1709, x1707, x1676, 0x0); + fiat_p521_addcarryx_u32(&x1710, &x1711, x1709, x1678, 0x0); + fiat_p521_addcarryx_u32(&x1712, &x1713, x1711, x1680, 0x0); + fiat_p521_addcarryx_u32(&x1714, &x1715, x1713, x1682, 0x0); + fiat_p521_addcarryx_u32(&x1716, &x1717, x1715, x1684, 0x0); + fiat_p521_mulx_u32(&x1718, &x1719, x1686, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1720, &x1721, x1686, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1722, &x1723, x1686, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1724, &x1725, x1686, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1726, &x1727, x1686, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1728, &x1729, x1686, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1730, &x1731, x1686, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1732, &x1733, x1686, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1734, &x1735, x1686, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1736, &x1737, x1686, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1738, &x1739, x1686, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1740, &x1741, x1686, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1742, &x1743, x1686, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1744, &x1745, x1686, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1746, &x1747, x1686, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1748, &x1749, x1686, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1750, &x1751, x1686, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1752, &x1753, 0x0, x1751, x1748); + fiat_p521_addcarryx_u32(&x1754, &x1755, x1753, x1749, x1746); + fiat_p521_addcarryx_u32(&x1756, &x1757, x1755, x1747, x1744); + fiat_p521_addcarryx_u32(&x1758, &x1759, x1757, x1745, x1742); + fiat_p521_addcarryx_u32(&x1760, &x1761, x1759, x1743, x1740); + fiat_p521_addcarryx_u32(&x1762, &x1763, x1761, x1741, x1738); + fiat_p521_addcarryx_u32(&x1764, &x1765, x1763, x1739, x1736); + fiat_p521_addcarryx_u32(&x1766, &x1767, x1765, x1737, x1734); + fiat_p521_addcarryx_u32(&x1768, &x1769, x1767, x1735, x1732); + fiat_p521_addcarryx_u32(&x1770, &x1771, x1769, x1733, x1730); + fiat_p521_addcarryx_u32(&x1772, &x1773, x1771, x1731, x1728); + fiat_p521_addcarryx_u32(&x1774, &x1775, x1773, x1729, x1726); + fiat_p521_addcarryx_u32(&x1776, &x1777, x1775, x1727, x1724); + fiat_p521_addcarryx_u32(&x1778, &x1779, x1777, x1725, x1722); + fiat_p521_addcarryx_u32(&x1780, &x1781, x1779, x1723, x1720); + fiat_p521_addcarryx_u32(&x1782, &x1783, x1781, x1721, x1718); + fiat_p521_addcarryx_u32(&x1784, &x1785, 0x0, x1686, x1750); + fiat_p521_addcarryx_u32(&x1786, &x1787, x1785, x1688, x1752); + fiat_p521_addcarryx_u32(&x1788, &x1789, x1787, x1690, x1754); + fiat_p521_addcarryx_u32(&x1790, &x1791, x1789, x1692, x1756); + fiat_p521_addcarryx_u32(&x1792, &x1793, x1791, x1694, x1758); + fiat_p521_addcarryx_u32(&x1794, &x1795, x1793, x1696, x1760); + fiat_p521_addcarryx_u32(&x1796, &x1797, x1795, x1698, x1762); + fiat_p521_addcarryx_u32(&x1798, &x1799, x1797, x1700, x1764); + fiat_p521_addcarryx_u32(&x1800, &x1801, x1799, x1702, x1766); + fiat_p521_addcarryx_u32(&x1802, &x1803, x1801, x1704, x1768); + fiat_p521_addcarryx_u32(&x1804, &x1805, x1803, x1706, x1770); + fiat_p521_addcarryx_u32(&x1806, &x1807, x1805, x1708, x1772); + fiat_p521_addcarryx_u32(&x1808, &x1809, x1807, x1710, x1774); + fiat_p521_addcarryx_u32(&x1810, &x1811, x1809, x1712, x1776); + fiat_p521_addcarryx_u32(&x1812, &x1813, x1811, x1714, x1778); + fiat_p521_addcarryx_u32(&x1814, &x1815, x1813, x1716, x1780); + fiat_p521_addcarryx_u32(&x1816, &x1817, x1815, (x1717 + (x1685 + (x1651 + x1587))), x1782); + fiat_p521_addcarryx_u32(&x1818, &x1819, 0x0, x1786, (arg1[14])); + fiat_p521_addcarryx_u32(&x1820, &x1821, x1819, x1788, 0x0); + fiat_p521_addcarryx_u32(&x1822, &x1823, x1821, x1790, 0x0); + fiat_p521_addcarryx_u32(&x1824, &x1825, x1823, x1792, 0x0); + fiat_p521_addcarryx_u32(&x1826, &x1827, x1825, x1794, 0x0); + fiat_p521_addcarryx_u32(&x1828, &x1829, x1827, x1796, 0x0); + fiat_p521_addcarryx_u32(&x1830, &x1831, x1829, x1798, 0x0); + fiat_p521_addcarryx_u32(&x1832, &x1833, x1831, x1800, 0x0); + fiat_p521_addcarryx_u32(&x1834, &x1835, x1833, x1802, 0x0); + fiat_p521_addcarryx_u32(&x1836, &x1837, x1835, x1804, 0x0); + fiat_p521_addcarryx_u32(&x1838, &x1839, x1837, x1806, 0x0); + fiat_p521_addcarryx_u32(&x1840, &x1841, x1839, x1808, 0x0); + fiat_p521_addcarryx_u32(&x1842, &x1843, x1841, x1810, 0x0); + fiat_p521_addcarryx_u32(&x1844, &x1845, x1843, x1812, 0x0); + fiat_p521_addcarryx_u32(&x1846, &x1847, x1845, x1814, 0x0); + fiat_p521_addcarryx_u32(&x1848, &x1849, x1847, x1816, 0x0); + fiat_p521_mulx_u32(&x1850, &x1851, x1818, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1852, &x1853, x1818, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1854, &x1855, x1818, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1856, &x1857, x1818, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1858, &x1859, x1818, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1860, &x1861, x1818, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1862, &x1863, x1818, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1864, &x1865, x1818, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1866, &x1867, x1818, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1868, &x1869, x1818, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1870, &x1871, x1818, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1872, &x1873, x1818, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1874, &x1875, x1818, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1876, &x1877, x1818, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1878, &x1879, x1818, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1880, &x1881, x1818, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1882, &x1883, x1818, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1884, &x1885, 0x0, x1883, x1880); + fiat_p521_addcarryx_u32(&x1886, &x1887, x1885, x1881, x1878); + fiat_p521_addcarryx_u32(&x1888, &x1889, x1887, x1879, x1876); + fiat_p521_addcarryx_u32(&x1890, &x1891, x1889, x1877, x1874); + fiat_p521_addcarryx_u32(&x1892, &x1893, x1891, x1875, x1872); + fiat_p521_addcarryx_u32(&x1894, &x1895, x1893, x1873, x1870); + fiat_p521_addcarryx_u32(&x1896, &x1897, x1895, x1871, x1868); + fiat_p521_addcarryx_u32(&x1898, &x1899, x1897, x1869, x1866); + fiat_p521_addcarryx_u32(&x1900, &x1901, x1899, x1867, x1864); + fiat_p521_addcarryx_u32(&x1902, &x1903, x1901, x1865, x1862); + fiat_p521_addcarryx_u32(&x1904, &x1905, x1903, x1863, x1860); + fiat_p521_addcarryx_u32(&x1906, &x1907, x1905, x1861, x1858); + fiat_p521_addcarryx_u32(&x1908, &x1909, x1907, x1859, x1856); + fiat_p521_addcarryx_u32(&x1910, &x1911, x1909, x1857, x1854); + fiat_p521_addcarryx_u32(&x1912, &x1913, x1911, x1855, x1852); + fiat_p521_addcarryx_u32(&x1914, &x1915, x1913, x1853, x1850); + fiat_p521_addcarryx_u32(&x1916, &x1917, 0x0, x1818, x1882); + fiat_p521_addcarryx_u32(&x1918, &x1919, x1917, x1820, x1884); + fiat_p521_addcarryx_u32(&x1920, &x1921, x1919, x1822, x1886); + fiat_p521_addcarryx_u32(&x1922, &x1923, x1921, x1824, x1888); + fiat_p521_addcarryx_u32(&x1924, &x1925, x1923, x1826, x1890); + fiat_p521_addcarryx_u32(&x1926, &x1927, x1925, x1828, x1892); + fiat_p521_addcarryx_u32(&x1928, &x1929, x1927, x1830, x1894); + fiat_p521_addcarryx_u32(&x1930, &x1931, x1929, x1832, x1896); + fiat_p521_addcarryx_u32(&x1932, &x1933, x1931, x1834, x1898); + fiat_p521_addcarryx_u32(&x1934, &x1935, x1933, x1836, x1900); + fiat_p521_addcarryx_u32(&x1936, &x1937, x1935, x1838, x1902); + fiat_p521_addcarryx_u32(&x1938, &x1939, x1937, x1840, x1904); + fiat_p521_addcarryx_u32(&x1940, &x1941, x1939, x1842, x1906); + fiat_p521_addcarryx_u32(&x1942, &x1943, x1941, x1844, x1908); + fiat_p521_addcarryx_u32(&x1944, &x1945, x1943, x1846, x1910); + fiat_p521_addcarryx_u32(&x1946, &x1947, x1945, x1848, x1912); + fiat_p521_addcarryx_u32(&x1948, &x1949, x1947, (x1849 + (x1817 + (x1783 + x1719))), x1914); + fiat_p521_addcarryx_u32(&x1950, &x1951, 0x0, x1918, (arg1[15])); + fiat_p521_addcarryx_u32(&x1952, &x1953, x1951, x1920, 0x0); + fiat_p521_addcarryx_u32(&x1954, &x1955, x1953, x1922, 0x0); + fiat_p521_addcarryx_u32(&x1956, &x1957, x1955, x1924, 0x0); + fiat_p521_addcarryx_u32(&x1958, &x1959, x1957, x1926, 0x0); + fiat_p521_addcarryx_u32(&x1960, &x1961, x1959, x1928, 0x0); + fiat_p521_addcarryx_u32(&x1962, &x1963, x1961, x1930, 0x0); + fiat_p521_addcarryx_u32(&x1964, &x1965, x1963, x1932, 0x0); + fiat_p521_addcarryx_u32(&x1966, &x1967, x1965, x1934, 0x0); + fiat_p521_addcarryx_u32(&x1968, &x1969, x1967, x1936, 0x0); + fiat_p521_addcarryx_u32(&x1970, &x1971, x1969, x1938, 0x0); + fiat_p521_addcarryx_u32(&x1972, &x1973, x1971, x1940, 0x0); + fiat_p521_addcarryx_u32(&x1974, &x1975, x1973, x1942, 0x0); + fiat_p521_addcarryx_u32(&x1976, &x1977, x1975, x1944, 0x0); + fiat_p521_addcarryx_u32(&x1978, &x1979, x1977, x1946, 0x0); + fiat_p521_addcarryx_u32(&x1980, &x1981, x1979, x1948, 0x0); + fiat_p521_mulx_u32(&x1982, &x1983, x1950, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1984, &x1985, x1950, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1986, &x1987, x1950, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1988, &x1989, x1950, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1990, &x1991, x1950, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1992, &x1993, x1950, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1994, &x1995, x1950, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1996, &x1997, x1950, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1998, &x1999, x1950, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2000, &x2001, x1950, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2002, &x2003, x1950, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2004, &x2005, x1950, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2006, &x2007, x1950, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2008, &x2009, x1950, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2010, &x2011, x1950, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2012, &x2013, x1950, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2014, &x2015, x1950, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x2016, &x2017, 0x0, x2015, x2012); + fiat_p521_addcarryx_u32(&x2018, &x2019, x2017, x2013, x2010); + fiat_p521_addcarryx_u32(&x2020, &x2021, x2019, x2011, x2008); + fiat_p521_addcarryx_u32(&x2022, &x2023, x2021, x2009, x2006); + fiat_p521_addcarryx_u32(&x2024, &x2025, x2023, x2007, x2004); + fiat_p521_addcarryx_u32(&x2026, &x2027, x2025, x2005, x2002); + fiat_p521_addcarryx_u32(&x2028, &x2029, x2027, x2003, x2000); + fiat_p521_addcarryx_u32(&x2030, &x2031, x2029, x2001, x1998); + fiat_p521_addcarryx_u32(&x2032, &x2033, x2031, x1999, x1996); + fiat_p521_addcarryx_u32(&x2034, &x2035, x2033, x1997, x1994); + fiat_p521_addcarryx_u32(&x2036, &x2037, x2035, x1995, x1992); + fiat_p521_addcarryx_u32(&x2038, &x2039, x2037, x1993, x1990); + fiat_p521_addcarryx_u32(&x2040, &x2041, x2039, x1991, x1988); + fiat_p521_addcarryx_u32(&x2042, &x2043, x2041, x1989, x1986); + fiat_p521_addcarryx_u32(&x2044, &x2045, x2043, x1987, x1984); + fiat_p521_addcarryx_u32(&x2046, &x2047, x2045, x1985, x1982); + fiat_p521_addcarryx_u32(&x2048, &x2049, 0x0, x1950, x2014); + fiat_p521_addcarryx_u32(&x2050, &x2051, x2049, x1952, x2016); + fiat_p521_addcarryx_u32(&x2052, &x2053, x2051, x1954, x2018); + fiat_p521_addcarryx_u32(&x2054, &x2055, x2053, x1956, x2020); + fiat_p521_addcarryx_u32(&x2056, &x2057, x2055, x1958, x2022); + fiat_p521_addcarryx_u32(&x2058, &x2059, x2057, x1960, x2024); + fiat_p521_addcarryx_u32(&x2060, &x2061, x2059, x1962, x2026); + fiat_p521_addcarryx_u32(&x2062, &x2063, x2061, x1964, x2028); + fiat_p521_addcarryx_u32(&x2064, &x2065, x2063, x1966, x2030); + fiat_p521_addcarryx_u32(&x2066, &x2067, x2065, x1968, x2032); + fiat_p521_addcarryx_u32(&x2068, &x2069, x2067, x1970, x2034); + fiat_p521_addcarryx_u32(&x2070, &x2071, x2069, x1972, x2036); + fiat_p521_addcarryx_u32(&x2072, &x2073, x2071, x1974, x2038); + fiat_p521_addcarryx_u32(&x2074, &x2075, x2073, x1976, x2040); + fiat_p521_addcarryx_u32(&x2076, &x2077, x2075, x1978, x2042); + fiat_p521_addcarryx_u32(&x2078, &x2079, x2077, x1980, x2044); + fiat_p521_addcarryx_u32(&x2080, &x2081, x2079, (x1981 + (x1949 + (x1915 + x1851))), x2046); + fiat_p521_addcarryx_u32(&x2082, &x2083, 0x0, x2050, (arg1[16])); + fiat_p521_addcarryx_u32(&x2084, &x2085, x2083, x2052, 0x0); + fiat_p521_addcarryx_u32(&x2086, &x2087, x2085, x2054, 0x0); + fiat_p521_addcarryx_u32(&x2088, &x2089, x2087, x2056, 0x0); + fiat_p521_addcarryx_u32(&x2090, &x2091, x2089, x2058, 0x0); + fiat_p521_addcarryx_u32(&x2092, &x2093, x2091, x2060, 0x0); + fiat_p521_addcarryx_u32(&x2094, &x2095, x2093, x2062, 0x0); + fiat_p521_addcarryx_u32(&x2096, &x2097, x2095, x2064, 0x0); + fiat_p521_addcarryx_u32(&x2098, &x2099, x2097, x2066, 0x0); + fiat_p521_addcarryx_u32(&x2100, &x2101, x2099, x2068, 0x0); + fiat_p521_addcarryx_u32(&x2102, &x2103, x2101, x2070, 0x0); + fiat_p521_addcarryx_u32(&x2104, &x2105, x2103, x2072, 0x0); + fiat_p521_addcarryx_u32(&x2106, &x2107, x2105, x2074, 0x0); + fiat_p521_addcarryx_u32(&x2108, &x2109, x2107, x2076, 0x0); + fiat_p521_addcarryx_u32(&x2110, &x2111, x2109, x2078, 0x0); + fiat_p521_addcarryx_u32(&x2112, &x2113, x2111, x2080, 0x0); + fiat_p521_mulx_u32(&x2114, &x2115, x2082, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x2116, &x2117, x2082, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2118, &x2119, x2082, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2120, &x2121, x2082, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2122, &x2123, x2082, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2124, &x2125, x2082, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2126, &x2127, x2082, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2128, &x2129, x2082, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2130, &x2131, x2082, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2132, &x2133, x2082, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2134, &x2135, x2082, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2136, &x2137, x2082, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2138, &x2139, x2082, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2140, &x2141, x2082, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2142, &x2143, x2082, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2144, &x2145, x2082, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2146, &x2147, x2082, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x2148, &x2149, 0x0, x2147, x2144); + fiat_p521_addcarryx_u32(&x2150, &x2151, x2149, x2145, x2142); + fiat_p521_addcarryx_u32(&x2152, &x2153, x2151, x2143, x2140); + fiat_p521_addcarryx_u32(&x2154, &x2155, x2153, x2141, x2138); + fiat_p521_addcarryx_u32(&x2156, &x2157, x2155, x2139, x2136); + fiat_p521_addcarryx_u32(&x2158, &x2159, x2157, x2137, x2134); + fiat_p521_addcarryx_u32(&x2160, &x2161, x2159, x2135, x2132); + fiat_p521_addcarryx_u32(&x2162, &x2163, x2161, x2133, x2130); + fiat_p521_addcarryx_u32(&x2164, &x2165, x2163, x2131, x2128); + fiat_p521_addcarryx_u32(&x2166, &x2167, x2165, x2129, x2126); + fiat_p521_addcarryx_u32(&x2168, &x2169, x2167, x2127, x2124); + fiat_p521_addcarryx_u32(&x2170, &x2171, x2169, x2125, x2122); + fiat_p521_addcarryx_u32(&x2172, &x2173, x2171, x2123, x2120); + fiat_p521_addcarryx_u32(&x2174, &x2175, x2173, x2121, x2118); + fiat_p521_addcarryx_u32(&x2176, &x2177, x2175, x2119, x2116); + fiat_p521_addcarryx_u32(&x2178, &x2179, x2177, x2117, x2114); + fiat_p521_addcarryx_u32(&x2180, &x2181, 0x0, x2082, x2146); + fiat_p521_addcarryx_u32(&x2182, &x2183, x2181, x2084, x2148); + fiat_p521_addcarryx_u32(&x2184, &x2185, x2183, x2086, x2150); + fiat_p521_addcarryx_u32(&x2186, &x2187, x2185, x2088, x2152); + fiat_p521_addcarryx_u32(&x2188, &x2189, x2187, x2090, x2154); + fiat_p521_addcarryx_u32(&x2190, &x2191, x2189, x2092, x2156); + fiat_p521_addcarryx_u32(&x2192, &x2193, x2191, x2094, x2158); + fiat_p521_addcarryx_u32(&x2194, &x2195, x2193, x2096, x2160); + fiat_p521_addcarryx_u32(&x2196, &x2197, x2195, x2098, x2162); + fiat_p521_addcarryx_u32(&x2198, &x2199, x2197, x2100, x2164); + fiat_p521_addcarryx_u32(&x2200, &x2201, x2199, x2102, x2166); + fiat_p521_addcarryx_u32(&x2202, &x2203, x2201, x2104, x2168); + fiat_p521_addcarryx_u32(&x2204, &x2205, x2203, x2106, x2170); + fiat_p521_addcarryx_u32(&x2206, &x2207, x2205, x2108, x2172); + fiat_p521_addcarryx_u32(&x2208, &x2209, x2207, x2110, x2174); + fiat_p521_addcarryx_u32(&x2210, &x2211, x2209, x2112, x2176); + fiat_p521_addcarryx_u32(&x2212, &x2213, x2211, (x2113 + (x2081 + (x2047 + x1983))), x2178); + x2214 = (x2213 + (x2179 + x2115)); + fiat_p521_subborrowx_u32(&x2215, &x2216, 0x0, x2182, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2217, &x2218, x2216, x2184, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2219, &x2220, x2218, x2186, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2221, &x2222, x2220, x2188, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2223, &x2224, x2222, x2190, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2225, &x2226, x2224, x2192, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2227, &x2228, x2226, x2194, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2229, &x2230, x2228, x2196, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2231, &x2232, x2230, x2198, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2233, &x2234, x2232, x2200, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2235, &x2236, x2234, x2202, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2237, &x2238, x2236, x2204, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2239, &x2240, x2238, x2206, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2241, &x2242, x2240, x2208, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2243, &x2244, x2242, x2210, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2245, &x2246, x2244, x2212, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2247, &x2248, x2246, x2214, UINT16_C(0x1ff)); + fiat_p521_subborrowx_u32(&x2249, &x2250, x2248, 0x0, 0x0); + fiat_p521_cmovznz_u32(&x2251, x2250, x2215, x2182); + fiat_p521_cmovznz_u32(&x2252, x2250, x2217, x2184); + fiat_p521_cmovznz_u32(&x2253, x2250, x2219, x2186); + fiat_p521_cmovznz_u32(&x2254, x2250, x2221, x2188); + fiat_p521_cmovznz_u32(&x2255, x2250, x2223, x2190); + fiat_p521_cmovznz_u32(&x2256, x2250, x2225, x2192); + fiat_p521_cmovznz_u32(&x2257, x2250, x2227, x2194); + fiat_p521_cmovznz_u32(&x2258, x2250, x2229, x2196); + fiat_p521_cmovznz_u32(&x2259, x2250, x2231, x2198); + fiat_p521_cmovznz_u32(&x2260, x2250, x2233, x2200); + fiat_p521_cmovznz_u32(&x2261, x2250, x2235, x2202); + fiat_p521_cmovznz_u32(&x2262, x2250, x2237, x2204); + fiat_p521_cmovznz_u32(&x2263, x2250, x2239, x2206); + fiat_p521_cmovznz_u32(&x2264, x2250, x2241, x2208); + fiat_p521_cmovznz_u32(&x2265, x2250, x2243, x2210); + fiat_p521_cmovznz_u32(&x2266, x2250, x2245, x2212); + fiat_p521_cmovznz_u32(&x2267, x2250, x2247, x2214); + out1[0] = x2251; + out1[1] = x2252; + out1[2] = x2253; + out1[3] = x2254; + out1[4] = x2255; + out1[5] = x2256; + out1[6] = x2257; + out1[7] = x2258; + out1[8] = x2259; + out1[9] = x2260; + out1[10] = x2261; + out1[11] = x2262; + out1[12] = x2263; + out1[13] = x2264; + out1[14] = x2265; + out1[15] = x2266; + out1[16] = x2267; +} + +/* + * The function fiat_p521_to_montgomery translates a field element into the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p521_to_montgomery(uint32_t out1[17], const uint32_t arg1[17]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + fiat_p521_uint1 x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint32_t x26; + uint32_t x27; + uint32_t x28; + uint32_t x29; + uint32_t x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint32_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint32_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + fiat_p521_uint1 x42; + uint32_t x43; + fiat_p521_uint1 x44; + uint32_t x45; + fiat_p521_uint1 x46; + uint32_t x47; + fiat_p521_uint1 x48; + uint32_t x49; + fiat_p521_uint1 x50; + uint32_t x51; + fiat_p521_uint1 x52; + uint32_t x53; + fiat_p521_uint1 x54; + uint32_t x55; + fiat_p521_uint1 x56; + uint32_t x57; + fiat_p521_uint1 x58; + uint32_t x59; + fiat_p521_uint1 x60; + uint32_t x61; + fiat_p521_uint1 x62; + uint32_t x63; + fiat_p521_uint1 x64; + uint32_t x65; + fiat_p521_uint1 x66; + uint32_t x67; + fiat_p521_uint1 x68; + uint32_t x69; + fiat_p521_uint1 x70; + uint32_t x71; + fiat_p521_uint1 x72; + uint32_t x73; + fiat_p521_uint1 x74; + uint32_t x75; + fiat_p521_uint1 x76; + uint32_t x77; + fiat_p521_uint1 x78; + uint32_t x79; + fiat_p521_uint1 x80; + uint32_t x81; + fiat_p521_uint1 x82; + uint32_t x83; + fiat_p521_uint1 x84; + uint32_t x85; + fiat_p521_uint1 x86; + uint32_t x87; + fiat_p521_uint1 x88; + uint32_t x89; + fiat_p521_uint1 x90; + uint32_t x91; + fiat_p521_uint1 x92; + uint32_t x93; + fiat_p521_uint1 x94; + uint32_t x95; + fiat_p521_uint1 x96; + uint32_t x97; + fiat_p521_uint1 x98; + uint32_t x99; + fiat_p521_uint1 x100; + uint32_t x101; + fiat_p521_uint1 x102; + uint32_t x103; + fiat_p521_uint1 x104; + uint32_t x105; + fiat_p521_uint1 x106; + uint32_t x107; + uint32_t x108; + uint32_t x109; + fiat_p521_uint1 x110; + uint32_t x111; + fiat_p521_uint1 x112; + uint32_t x113; + fiat_p521_uint1 x114; + uint32_t x115; + fiat_p521_uint1 x116; + uint32_t x117; + fiat_p521_uint1 x118; + uint32_t x119; + fiat_p521_uint1 x120; + uint32_t x121; + fiat_p521_uint1 x122; + uint32_t x123; + fiat_p521_uint1 x124; + uint32_t x125; + fiat_p521_uint1 x126; + uint32_t x127; + fiat_p521_uint1 x128; + uint32_t x129; + fiat_p521_uint1 x130; + uint32_t x131; + fiat_p521_uint1 x132; + uint32_t x133; + fiat_p521_uint1 x134; + uint32_t x135; + fiat_p521_uint1 x136; + uint32_t x137; + fiat_p521_uint1 x138; + uint32_t x139; + uint32_t x140; + uint32_t x141; + uint32_t x142; + uint32_t x143; + uint32_t x144; + uint32_t x145; + uint32_t x146; + uint32_t x147; + uint32_t x148; + uint32_t x149; + uint32_t x150; + uint32_t x151; + uint32_t x152; + uint32_t x153; + uint32_t x154; + uint32_t x155; + uint32_t x156; + uint32_t x157; + uint32_t x158; + uint32_t x159; + uint32_t x160; + uint32_t x161; + uint32_t x162; + uint32_t x163; + uint32_t x164; + uint32_t x165; + uint32_t x166; + uint32_t x167; + uint32_t x168; + uint32_t x169; + uint32_t x170; + uint32_t x171; + uint32_t x172; + uint32_t x173; + fiat_p521_uint1 x174; + uint32_t x175; + fiat_p521_uint1 x176; + uint32_t x177; + fiat_p521_uint1 x178; + uint32_t x179; + fiat_p521_uint1 x180; + uint32_t x181; + fiat_p521_uint1 x182; + uint32_t x183; + fiat_p521_uint1 x184; + uint32_t x185; + fiat_p521_uint1 x186; + uint32_t x187; + fiat_p521_uint1 x188; + uint32_t x189; + fiat_p521_uint1 x190; + uint32_t x191; + fiat_p521_uint1 x192; + uint32_t x193; + fiat_p521_uint1 x194; + uint32_t x195; + fiat_p521_uint1 x196; + uint32_t x197; + fiat_p521_uint1 x198; + uint32_t x199; + fiat_p521_uint1 x200; + uint32_t x201; + fiat_p521_uint1 x202; + uint32_t x203; + fiat_p521_uint1 x204; + uint32_t x205; + fiat_p521_uint1 x206; + uint32_t x207; + fiat_p521_uint1 x208; + uint32_t x209; + fiat_p521_uint1 x210; + uint32_t x211; + fiat_p521_uint1 x212; + uint32_t x213; + fiat_p521_uint1 x214; + uint32_t x215; + fiat_p521_uint1 x216; + uint32_t x217; + fiat_p521_uint1 x218; + uint32_t x219; + fiat_p521_uint1 x220; + uint32_t x221; + fiat_p521_uint1 x222; + uint32_t x223; + fiat_p521_uint1 x224; + uint32_t x225; + fiat_p521_uint1 x226; + uint32_t x227; + fiat_p521_uint1 x228; + uint32_t x229; + fiat_p521_uint1 x230; + uint32_t x231; + fiat_p521_uint1 x232; + uint32_t x233; + fiat_p521_uint1 x234; + uint32_t x235; + fiat_p521_uint1 x236; + uint32_t x237; + fiat_p521_uint1 x238; + uint32_t x239; + uint32_t x240; + uint32_t x241; + fiat_p521_uint1 x242; + uint32_t x243; + fiat_p521_uint1 x244; + uint32_t x245; + fiat_p521_uint1 x246; + uint32_t x247; + fiat_p521_uint1 x248; + uint32_t x249; + fiat_p521_uint1 x250; + uint32_t x251; + fiat_p521_uint1 x252; + uint32_t x253; + fiat_p521_uint1 x254; + uint32_t x255; + fiat_p521_uint1 x256; + uint32_t x257; + fiat_p521_uint1 x258; + uint32_t x259; + fiat_p521_uint1 x260; + uint32_t x261; + fiat_p521_uint1 x262; + uint32_t x263; + fiat_p521_uint1 x264; + uint32_t x265; + fiat_p521_uint1 x266; + uint32_t x267; + fiat_p521_uint1 x268; + uint32_t x269; + fiat_p521_uint1 x270; + uint32_t x271; + uint32_t x272; + uint32_t x273; + uint32_t x274; + uint32_t x275; + uint32_t x276; + uint32_t x277; + uint32_t x278; + uint32_t x279; + uint32_t x280; + uint32_t x281; + uint32_t x282; + uint32_t x283; + uint32_t x284; + uint32_t x285; + uint32_t x286; + uint32_t x287; + uint32_t x288; + uint32_t x289; + uint32_t x290; + uint32_t x291; + uint32_t x292; + uint32_t x293; + uint32_t x294; + uint32_t x295; + uint32_t x296; + uint32_t x297; + uint32_t x298; + uint32_t x299; + uint32_t x300; + uint32_t x301; + uint32_t x302; + uint32_t x303; + uint32_t x304; + uint32_t x305; + fiat_p521_uint1 x306; + uint32_t x307; + fiat_p521_uint1 x308; + uint32_t x309; + fiat_p521_uint1 x310; + uint32_t x311; + fiat_p521_uint1 x312; + uint32_t x313; + fiat_p521_uint1 x314; + uint32_t x315; + fiat_p521_uint1 x316; + uint32_t x317; + fiat_p521_uint1 x318; + uint32_t x319; + fiat_p521_uint1 x320; + uint32_t x321; + fiat_p521_uint1 x322; + uint32_t x323; + fiat_p521_uint1 x324; + uint32_t x325; + fiat_p521_uint1 x326; + uint32_t x327; + fiat_p521_uint1 x328; + uint32_t x329; + fiat_p521_uint1 x330; + uint32_t x331; + fiat_p521_uint1 x332; + uint32_t x333; + fiat_p521_uint1 x334; + uint32_t x335; + fiat_p521_uint1 x336; + uint32_t x337; + fiat_p521_uint1 x338; + uint32_t x339; + fiat_p521_uint1 x340; + uint32_t x341; + fiat_p521_uint1 x342; + uint32_t x343; + fiat_p521_uint1 x344; + uint32_t x345; + fiat_p521_uint1 x346; + uint32_t x347; + fiat_p521_uint1 x348; + uint32_t x349; + fiat_p521_uint1 x350; + uint32_t x351; + fiat_p521_uint1 x352; + uint32_t x353; + fiat_p521_uint1 x354; + uint32_t x355; + fiat_p521_uint1 x356; + uint32_t x357; + fiat_p521_uint1 x358; + uint32_t x359; + fiat_p521_uint1 x360; + uint32_t x361; + fiat_p521_uint1 x362; + uint32_t x363; + fiat_p521_uint1 x364; + uint32_t x365; + fiat_p521_uint1 x366; + uint32_t x367; + fiat_p521_uint1 x368; + uint32_t x369; + fiat_p521_uint1 x370; + uint32_t x371; + uint32_t x372; + uint32_t x373; + fiat_p521_uint1 x374; + uint32_t x375; + fiat_p521_uint1 x376; + uint32_t x377; + fiat_p521_uint1 x378; + uint32_t x379; + fiat_p521_uint1 x380; + uint32_t x381; + fiat_p521_uint1 x382; + uint32_t x383; + fiat_p521_uint1 x384; + uint32_t x385; + fiat_p521_uint1 x386; + uint32_t x387; + fiat_p521_uint1 x388; + uint32_t x389; + fiat_p521_uint1 x390; + uint32_t x391; + fiat_p521_uint1 x392; + uint32_t x393; + fiat_p521_uint1 x394; + uint32_t x395; + fiat_p521_uint1 x396; + uint32_t x397; + fiat_p521_uint1 x398; + uint32_t x399; + fiat_p521_uint1 x400; + uint32_t x401; + fiat_p521_uint1 x402; + uint32_t x403; + uint32_t x404; + uint32_t x405; + uint32_t x406; + uint32_t x407; + uint32_t x408; + uint32_t x409; + uint32_t x410; + uint32_t x411; + uint32_t x412; + uint32_t x413; + uint32_t x414; + uint32_t x415; + uint32_t x416; + uint32_t x417; + uint32_t x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + uint32_t x422; + uint32_t x423; + uint32_t x424; + uint32_t x425; + uint32_t x426; + uint32_t x427; + uint32_t x428; + uint32_t x429; + uint32_t x430; + uint32_t x431; + uint32_t x432; + uint32_t x433; + uint32_t x434; + uint32_t x435; + uint32_t x436; + uint32_t x437; + fiat_p521_uint1 x438; + uint32_t x439; + fiat_p521_uint1 x440; + uint32_t x441; + fiat_p521_uint1 x442; + uint32_t x443; + fiat_p521_uint1 x444; + uint32_t x445; + fiat_p521_uint1 x446; + uint32_t x447; + fiat_p521_uint1 x448; + uint32_t x449; + fiat_p521_uint1 x450; + uint32_t x451; + fiat_p521_uint1 x452; + uint32_t x453; + fiat_p521_uint1 x454; + uint32_t x455; + fiat_p521_uint1 x456; + uint32_t x457; + fiat_p521_uint1 x458; + uint32_t x459; + fiat_p521_uint1 x460; + uint32_t x461; + fiat_p521_uint1 x462; + uint32_t x463; + fiat_p521_uint1 x464; + uint32_t x465; + fiat_p521_uint1 x466; + uint32_t x467; + fiat_p521_uint1 x468; + uint32_t x469; + fiat_p521_uint1 x470; + uint32_t x471; + fiat_p521_uint1 x472; + uint32_t x473; + fiat_p521_uint1 x474; + uint32_t x475; + fiat_p521_uint1 x476; + uint32_t x477; + fiat_p521_uint1 x478; + uint32_t x479; + fiat_p521_uint1 x480; + uint32_t x481; + fiat_p521_uint1 x482; + uint32_t x483; + fiat_p521_uint1 x484; + uint32_t x485; + fiat_p521_uint1 x486; + uint32_t x487; + fiat_p521_uint1 x488; + uint32_t x489; + fiat_p521_uint1 x490; + uint32_t x491; + fiat_p521_uint1 x492; + uint32_t x493; + fiat_p521_uint1 x494; + uint32_t x495; + fiat_p521_uint1 x496; + uint32_t x497; + fiat_p521_uint1 x498; + uint32_t x499; + fiat_p521_uint1 x500; + uint32_t x501; + fiat_p521_uint1 x502; + uint32_t x503; + uint32_t x504; + uint32_t x505; + fiat_p521_uint1 x506; + uint32_t x507; + fiat_p521_uint1 x508; + uint32_t x509; + fiat_p521_uint1 x510; + uint32_t x511; + fiat_p521_uint1 x512; + uint32_t x513; + fiat_p521_uint1 x514; + uint32_t x515; + fiat_p521_uint1 x516; + uint32_t x517; + fiat_p521_uint1 x518; + uint32_t x519; + fiat_p521_uint1 x520; + uint32_t x521; + fiat_p521_uint1 x522; + uint32_t x523; + fiat_p521_uint1 x524; + uint32_t x525; + fiat_p521_uint1 x526; + uint32_t x527; + fiat_p521_uint1 x528; + uint32_t x529; + fiat_p521_uint1 x530; + uint32_t x531; + fiat_p521_uint1 x532; + uint32_t x533; + fiat_p521_uint1 x534; + uint32_t x535; + uint32_t x536; + uint32_t x537; + uint32_t x538; + uint32_t x539; + uint32_t x540; + uint32_t x541; + uint32_t x542; + uint32_t x543; + uint32_t x544; + uint32_t x545; + uint32_t x546; + uint32_t x547; + uint32_t x548; + uint32_t x549; + uint32_t x550; + uint32_t x551; + uint32_t x552; + uint32_t x553; + uint32_t x554; + uint32_t x555; + uint32_t x556; + uint32_t x557; + uint32_t x558; + uint32_t x559; + uint32_t x560; + uint32_t x561; + uint32_t x562; + uint32_t x563; + uint32_t x564; + uint32_t x565; + uint32_t x566; + uint32_t x567; + uint32_t x568; + uint32_t x569; + fiat_p521_uint1 x570; + uint32_t x571; + fiat_p521_uint1 x572; + uint32_t x573; + fiat_p521_uint1 x574; + uint32_t x575; + fiat_p521_uint1 x576; + uint32_t x577; + fiat_p521_uint1 x578; + uint32_t x579; + fiat_p521_uint1 x580; + uint32_t x581; + fiat_p521_uint1 x582; + uint32_t x583; + fiat_p521_uint1 x584; + uint32_t x585; + fiat_p521_uint1 x586; + uint32_t x587; + fiat_p521_uint1 x588; + uint32_t x589; + fiat_p521_uint1 x590; + uint32_t x591; + fiat_p521_uint1 x592; + uint32_t x593; + fiat_p521_uint1 x594; + uint32_t x595; + fiat_p521_uint1 x596; + uint32_t x597; + fiat_p521_uint1 x598; + uint32_t x599; + fiat_p521_uint1 x600; + uint32_t x601; + fiat_p521_uint1 x602; + uint32_t x603; + fiat_p521_uint1 x604; + uint32_t x605; + fiat_p521_uint1 x606; + uint32_t x607; + fiat_p521_uint1 x608; + uint32_t x609; + fiat_p521_uint1 x610; + uint32_t x611; + fiat_p521_uint1 x612; + uint32_t x613; + fiat_p521_uint1 x614; + uint32_t x615; + fiat_p521_uint1 x616; + uint32_t x617; + fiat_p521_uint1 x618; + uint32_t x619; + fiat_p521_uint1 x620; + uint32_t x621; + fiat_p521_uint1 x622; + uint32_t x623; + fiat_p521_uint1 x624; + uint32_t x625; + fiat_p521_uint1 x626; + uint32_t x627; + fiat_p521_uint1 x628; + uint32_t x629; + fiat_p521_uint1 x630; + uint32_t x631; + fiat_p521_uint1 x632; + uint32_t x633; + fiat_p521_uint1 x634; + uint32_t x635; + uint32_t x636; + uint32_t x637; + fiat_p521_uint1 x638; + uint32_t x639; + fiat_p521_uint1 x640; + uint32_t x641; + fiat_p521_uint1 x642; + uint32_t x643; + fiat_p521_uint1 x644; + uint32_t x645; + fiat_p521_uint1 x646; + uint32_t x647; + fiat_p521_uint1 x648; + uint32_t x649; + fiat_p521_uint1 x650; + uint32_t x651; + fiat_p521_uint1 x652; + uint32_t x653; + fiat_p521_uint1 x654; + uint32_t x655; + fiat_p521_uint1 x656; + uint32_t x657; + fiat_p521_uint1 x658; + uint32_t x659; + fiat_p521_uint1 x660; + uint32_t x661; + fiat_p521_uint1 x662; + uint32_t x663; + fiat_p521_uint1 x664; + uint32_t x665; + fiat_p521_uint1 x666; + uint32_t x667; + uint32_t x668; + uint32_t x669; + uint32_t x670; + uint32_t x671; + uint32_t x672; + uint32_t x673; + uint32_t x674; + uint32_t x675; + uint32_t x676; + uint32_t x677; + uint32_t x678; + uint32_t x679; + uint32_t x680; + uint32_t x681; + uint32_t x682; + uint32_t x683; + uint32_t x684; + uint32_t x685; + uint32_t x686; + uint32_t x687; + uint32_t x688; + uint32_t x689; + uint32_t x690; + uint32_t x691; + uint32_t x692; + uint32_t x693; + uint32_t x694; + uint32_t x695; + uint32_t x696; + uint32_t x697; + uint32_t x698; + uint32_t x699; + uint32_t x700; + uint32_t x701; + fiat_p521_uint1 x702; + uint32_t x703; + fiat_p521_uint1 x704; + uint32_t x705; + fiat_p521_uint1 x706; + uint32_t x707; + fiat_p521_uint1 x708; + uint32_t x709; + fiat_p521_uint1 x710; + uint32_t x711; + fiat_p521_uint1 x712; + uint32_t x713; + fiat_p521_uint1 x714; + uint32_t x715; + fiat_p521_uint1 x716; + uint32_t x717; + fiat_p521_uint1 x718; + uint32_t x719; + fiat_p521_uint1 x720; + uint32_t x721; + fiat_p521_uint1 x722; + uint32_t x723; + fiat_p521_uint1 x724; + uint32_t x725; + fiat_p521_uint1 x726; + uint32_t x727; + fiat_p521_uint1 x728; + uint32_t x729; + fiat_p521_uint1 x730; + uint32_t x731; + fiat_p521_uint1 x732; + uint32_t x733; + fiat_p521_uint1 x734; + uint32_t x735; + fiat_p521_uint1 x736; + uint32_t x737; + fiat_p521_uint1 x738; + uint32_t x739; + fiat_p521_uint1 x740; + uint32_t x741; + fiat_p521_uint1 x742; + uint32_t x743; + fiat_p521_uint1 x744; + uint32_t x745; + fiat_p521_uint1 x746; + uint32_t x747; + fiat_p521_uint1 x748; + uint32_t x749; + fiat_p521_uint1 x750; + uint32_t x751; + fiat_p521_uint1 x752; + uint32_t x753; + fiat_p521_uint1 x754; + uint32_t x755; + fiat_p521_uint1 x756; + uint32_t x757; + fiat_p521_uint1 x758; + uint32_t x759; + fiat_p521_uint1 x760; + uint32_t x761; + fiat_p521_uint1 x762; + uint32_t x763; + fiat_p521_uint1 x764; + uint32_t x765; + fiat_p521_uint1 x766; + uint32_t x767; + uint32_t x768; + uint32_t x769; + fiat_p521_uint1 x770; + uint32_t x771; + fiat_p521_uint1 x772; + uint32_t x773; + fiat_p521_uint1 x774; + uint32_t x775; + fiat_p521_uint1 x776; + uint32_t x777; + fiat_p521_uint1 x778; + uint32_t x779; + fiat_p521_uint1 x780; + uint32_t x781; + fiat_p521_uint1 x782; + uint32_t x783; + fiat_p521_uint1 x784; + uint32_t x785; + fiat_p521_uint1 x786; + uint32_t x787; + fiat_p521_uint1 x788; + uint32_t x789; + fiat_p521_uint1 x790; + uint32_t x791; + fiat_p521_uint1 x792; + uint32_t x793; + fiat_p521_uint1 x794; + uint32_t x795; + fiat_p521_uint1 x796; + uint32_t x797; + fiat_p521_uint1 x798; + uint32_t x799; + uint32_t x800; + uint32_t x801; + uint32_t x802; + uint32_t x803; + uint32_t x804; + uint32_t x805; + uint32_t x806; + uint32_t x807; + uint32_t x808; + uint32_t x809; + uint32_t x810; + uint32_t x811; + uint32_t x812; + uint32_t x813; + uint32_t x814; + uint32_t x815; + uint32_t x816; + uint32_t x817; + uint32_t x818; + uint32_t x819; + uint32_t x820; + uint32_t x821; + uint32_t x822; + uint32_t x823; + uint32_t x824; + uint32_t x825; + uint32_t x826; + uint32_t x827; + uint32_t x828; + uint32_t x829; + uint32_t x830; + uint32_t x831; + uint32_t x832; + uint32_t x833; + fiat_p521_uint1 x834; + uint32_t x835; + fiat_p521_uint1 x836; + uint32_t x837; + fiat_p521_uint1 x838; + uint32_t x839; + fiat_p521_uint1 x840; + uint32_t x841; + fiat_p521_uint1 x842; + uint32_t x843; + fiat_p521_uint1 x844; + uint32_t x845; + fiat_p521_uint1 x846; + uint32_t x847; + fiat_p521_uint1 x848; + uint32_t x849; + fiat_p521_uint1 x850; + uint32_t x851; + fiat_p521_uint1 x852; + uint32_t x853; + fiat_p521_uint1 x854; + uint32_t x855; + fiat_p521_uint1 x856; + uint32_t x857; + fiat_p521_uint1 x858; + uint32_t x859; + fiat_p521_uint1 x860; + uint32_t x861; + fiat_p521_uint1 x862; + uint32_t x863; + fiat_p521_uint1 x864; + uint32_t x865; + fiat_p521_uint1 x866; + uint32_t x867; + fiat_p521_uint1 x868; + uint32_t x869; + fiat_p521_uint1 x870; + uint32_t x871; + fiat_p521_uint1 x872; + uint32_t x873; + fiat_p521_uint1 x874; + uint32_t x875; + fiat_p521_uint1 x876; + uint32_t x877; + fiat_p521_uint1 x878; + uint32_t x879; + fiat_p521_uint1 x880; + uint32_t x881; + fiat_p521_uint1 x882; + uint32_t x883; + fiat_p521_uint1 x884; + uint32_t x885; + fiat_p521_uint1 x886; + uint32_t x887; + fiat_p521_uint1 x888; + uint32_t x889; + fiat_p521_uint1 x890; + uint32_t x891; + fiat_p521_uint1 x892; + uint32_t x893; + fiat_p521_uint1 x894; + uint32_t x895; + fiat_p521_uint1 x896; + uint32_t x897; + fiat_p521_uint1 x898; + uint32_t x899; + uint32_t x900; + uint32_t x901; + fiat_p521_uint1 x902; + uint32_t x903; + fiat_p521_uint1 x904; + uint32_t x905; + fiat_p521_uint1 x906; + uint32_t x907; + fiat_p521_uint1 x908; + uint32_t x909; + fiat_p521_uint1 x910; + uint32_t x911; + fiat_p521_uint1 x912; + uint32_t x913; + fiat_p521_uint1 x914; + uint32_t x915; + fiat_p521_uint1 x916; + uint32_t x917; + fiat_p521_uint1 x918; + uint32_t x919; + fiat_p521_uint1 x920; + uint32_t x921; + fiat_p521_uint1 x922; + uint32_t x923; + fiat_p521_uint1 x924; + uint32_t x925; + fiat_p521_uint1 x926; + uint32_t x927; + fiat_p521_uint1 x928; + uint32_t x929; + fiat_p521_uint1 x930; + uint32_t x931; + uint32_t x932; + uint32_t x933; + uint32_t x934; + uint32_t x935; + uint32_t x936; + uint32_t x937; + uint32_t x938; + uint32_t x939; + uint32_t x940; + uint32_t x941; + uint32_t x942; + uint32_t x943; + uint32_t x944; + uint32_t x945; + uint32_t x946; + uint32_t x947; + uint32_t x948; + uint32_t x949; + uint32_t x950; + uint32_t x951; + uint32_t x952; + uint32_t x953; + uint32_t x954; + uint32_t x955; + uint32_t x956; + uint32_t x957; + uint32_t x958; + uint32_t x959; + uint32_t x960; + uint32_t x961; + uint32_t x962; + uint32_t x963; + uint32_t x964; + uint32_t x965; + fiat_p521_uint1 x966; + uint32_t x967; + fiat_p521_uint1 x968; + uint32_t x969; + fiat_p521_uint1 x970; + uint32_t x971; + fiat_p521_uint1 x972; + uint32_t x973; + fiat_p521_uint1 x974; + uint32_t x975; + fiat_p521_uint1 x976; + uint32_t x977; + fiat_p521_uint1 x978; + uint32_t x979; + fiat_p521_uint1 x980; + uint32_t x981; + fiat_p521_uint1 x982; + uint32_t x983; + fiat_p521_uint1 x984; + uint32_t x985; + fiat_p521_uint1 x986; + uint32_t x987; + fiat_p521_uint1 x988; + uint32_t x989; + fiat_p521_uint1 x990; + uint32_t x991; + fiat_p521_uint1 x992; + uint32_t x993; + fiat_p521_uint1 x994; + uint32_t x995; + fiat_p521_uint1 x996; + uint32_t x997; + fiat_p521_uint1 x998; + uint32_t x999; + fiat_p521_uint1 x1000; + uint32_t x1001; + fiat_p521_uint1 x1002; + uint32_t x1003; + fiat_p521_uint1 x1004; + uint32_t x1005; + fiat_p521_uint1 x1006; + uint32_t x1007; + fiat_p521_uint1 x1008; + uint32_t x1009; + fiat_p521_uint1 x1010; + uint32_t x1011; + fiat_p521_uint1 x1012; + uint32_t x1013; + fiat_p521_uint1 x1014; + uint32_t x1015; + fiat_p521_uint1 x1016; + uint32_t x1017; + fiat_p521_uint1 x1018; + uint32_t x1019; + fiat_p521_uint1 x1020; + uint32_t x1021; + fiat_p521_uint1 x1022; + uint32_t x1023; + fiat_p521_uint1 x1024; + uint32_t x1025; + fiat_p521_uint1 x1026; + uint32_t x1027; + fiat_p521_uint1 x1028; + uint32_t x1029; + fiat_p521_uint1 x1030; + uint32_t x1031; + uint32_t x1032; + uint32_t x1033; + fiat_p521_uint1 x1034; + uint32_t x1035; + fiat_p521_uint1 x1036; + uint32_t x1037; + fiat_p521_uint1 x1038; + uint32_t x1039; + fiat_p521_uint1 x1040; + uint32_t x1041; + fiat_p521_uint1 x1042; + uint32_t x1043; + fiat_p521_uint1 x1044; + uint32_t x1045; + fiat_p521_uint1 x1046; + uint32_t x1047; + fiat_p521_uint1 x1048; + uint32_t x1049; + fiat_p521_uint1 x1050; + uint32_t x1051; + fiat_p521_uint1 x1052; + uint32_t x1053; + fiat_p521_uint1 x1054; + uint32_t x1055; + fiat_p521_uint1 x1056; + uint32_t x1057; + fiat_p521_uint1 x1058; + uint32_t x1059; + fiat_p521_uint1 x1060; + uint32_t x1061; + fiat_p521_uint1 x1062; + uint32_t x1063; + uint32_t x1064; + uint32_t x1065; + uint32_t x1066; + uint32_t x1067; + uint32_t x1068; + uint32_t x1069; + uint32_t x1070; + uint32_t x1071; + uint32_t x1072; + uint32_t x1073; + uint32_t x1074; + uint32_t x1075; + uint32_t x1076; + uint32_t x1077; + uint32_t x1078; + uint32_t x1079; + uint32_t x1080; + uint32_t x1081; + uint32_t x1082; + uint32_t x1083; + uint32_t x1084; + uint32_t x1085; + uint32_t x1086; + uint32_t x1087; + uint32_t x1088; + uint32_t x1089; + uint32_t x1090; + uint32_t x1091; + uint32_t x1092; + uint32_t x1093; + uint32_t x1094; + uint32_t x1095; + uint32_t x1096; + uint32_t x1097; + fiat_p521_uint1 x1098; + uint32_t x1099; + fiat_p521_uint1 x1100; + uint32_t x1101; + fiat_p521_uint1 x1102; + uint32_t x1103; + fiat_p521_uint1 x1104; + uint32_t x1105; + fiat_p521_uint1 x1106; + uint32_t x1107; + fiat_p521_uint1 x1108; + uint32_t x1109; + fiat_p521_uint1 x1110; + uint32_t x1111; + fiat_p521_uint1 x1112; + uint32_t x1113; + fiat_p521_uint1 x1114; + uint32_t x1115; + fiat_p521_uint1 x1116; + uint32_t x1117; + fiat_p521_uint1 x1118; + uint32_t x1119; + fiat_p521_uint1 x1120; + uint32_t x1121; + fiat_p521_uint1 x1122; + uint32_t x1123; + fiat_p521_uint1 x1124; + uint32_t x1125; + fiat_p521_uint1 x1126; + uint32_t x1127; + fiat_p521_uint1 x1128; + uint32_t x1129; + fiat_p521_uint1 x1130; + uint32_t x1131; + fiat_p521_uint1 x1132; + uint32_t x1133; + fiat_p521_uint1 x1134; + uint32_t x1135; + fiat_p521_uint1 x1136; + uint32_t x1137; + fiat_p521_uint1 x1138; + uint32_t x1139; + fiat_p521_uint1 x1140; + uint32_t x1141; + fiat_p521_uint1 x1142; + uint32_t x1143; + fiat_p521_uint1 x1144; + uint32_t x1145; + fiat_p521_uint1 x1146; + uint32_t x1147; + fiat_p521_uint1 x1148; + uint32_t x1149; + fiat_p521_uint1 x1150; + uint32_t x1151; + fiat_p521_uint1 x1152; + uint32_t x1153; + fiat_p521_uint1 x1154; + uint32_t x1155; + fiat_p521_uint1 x1156; + uint32_t x1157; + fiat_p521_uint1 x1158; + uint32_t x1159; + fiat_p521_uint1 x1160; + uint32_t x1161; + fiat_p521_uint1 x1162; + uint32_t x1163; + uint32_t x1164; + uint32_t x1165; + fiat_p521_uint1 x1166; + uint32_t x1167; + fiat_p521_uint1 x1168; + uint32_t x1169; + fiat_p521_uint1 x1170; + uint32_t x1171; + fiat_p521_uint1 x1172; + uint32_t x1173; + fiat_p521_uint1 x1174; + uint32_t x1175; + fiat_p521_uint1 x1176; + uint32_t x1177; + fiat_p521_uint1 x1178; + uint32_t x1179; + fiat_p521_uint1 x1180; + uint32_t x1181; + fiat_p521_uint1 x1182; + uint32_t x1183; + fiat_p521_uint1 x1184; + uint32_t x1185; + fiat_p521_uint1 x1186; + uint32_t x1187; + fiat_p521_uint1 x1188; + uint32_t x1189; + fiat_p521_uint1 x1190; + uint32_t x1191; + fiat_p521_uint1 x1192; + uint32_t x1193; + fiat_p521_uint1 x1194; + uint32_t x1195; + uint32_t x1196; + uint32_t x1197; + uint32_t x1198; + uint32_t x1199; + uint32_t x1200; + uint32_t x1201; + uint32_t x1202; + uint32_t x1203; + uint32_t x1204; + uint32_t x1205; + uint32_t x1206; + uint32_t x1207; + uint32_t x1208; + uint32_t x1209; + uint32_t x1210; + uint32_t x1211; + uint32_t x1212; + uint32_t x1213; + uint32_t x1214; + uint32_t x1215; + uint32_t x1216; + uint32_t x1217; + uint32_t x1218; + uint32_t x1219; + uint32_t x1220; + uint32_t x1221; + uint32_t x1222; + uint32_t x1223; + uint32_t x1224; + uint32_t x1225; + uint32_t x1226; + uint32_t x1227; + uint32_t x1228; + uint32_t x1229; + fiat_p521_uint1 x1230; + uint32_t x1231; + fiat_p521_uint1 x1232; + uint32_t x1233; + fiat_p521_uint1 x1234; + uint32_t x1235; + fiat_p521_uint1 x1236; + uint32_t x1237; + fiat_p521_uint1 x1238; + uint32_t x1239; + fiat_p521_uint1 x1240; + uint32_t x1241; + fiat_p521_uint1 x1242; + uint32_t x1243; + fiat_p521_uint1 x1244; + uint32_t x1245; + fiat_p521_uint1 x1246; + uint32_t x1247; + fiat_p521_uint1 x1248; + uint32_t x1249; + fiat_p521_uint1 x1250; + uint32_t x1251; + fiat_p521_uint1 x1252; + uint32_t x1253; + fiat_p521_uint1 x1254; + uint32_t x1255; + fiat_p521_uint1 x1256; + uint32_t x1257; + fiat_p521_uint1 x1258; + uint32_t x1259; + fiat_p521_uint1 x1260; + uint32_t x1261; + fiat_p521_uint1 x1262; + uint32_t x1263; + fiat_p521_uint1 x1264; + uint32_t x1265; + fiat_p521_uint1 x1266; + uint32_t x1267; + fiat_p521_uint1 x1268; + uint32_t x1269; + fiat_p521_uint1 x1270; + uint32_t x1271; + fiat_p521_uint1 x1272; + uint32_t x1273; + fiat_p521_uint1 x1274; + uint32_t x1275; + fiat_p521_uint1 x1276; + uint32_t x1277; + fiat_p521_uint1 x1278; + uint32_t x1279; + fiat_p521_uint1 x1280; + uint32_t x1281; + fiat_p521_uint1 x1282; + uint32_t x1283; + fiat_p521_uint1 x1284; + uint32_t x1285; + fiat_p521_uint1 x1286; + uint32_t x1287; + fiat_p521_uint1 x1288; + uint32_t x1289; + fiat_p521_uint1 x1290; + uint32_t x1291; + fiat_p521_uint1 x1292; + uint32_t x1293; + fiat_p521_uint1 x1294; + uint32_t x1295; + uint32_t x1296; + uint32_t x1297; + fiat_p521_uint1 x1298; + uint32_t x1299; + fiat_p521_uint1 x1300; + uint32_t x1301; + fiat_p521_uint1 x1302; + uint32_t x1303; + fiat_p521_uint1 x1304; + uint32_t x1305; + fiat_p521_uint1 x1306; + uint32_t x1307; + fiat_p521_uint1 x1308; + uint32_t x1309; + fiat_p521_uint1 x1310; + uint32_t x1311; + fiat_p521_uint1 x1312; + uint32_t x1313; + fiat_p521_uint1 x1314; + uint32_t x1315; + fiat_p521_uint1 x1316; + uint32_t x1317; + fiat_p521_uint1 x1318; + uint32_t x1319; + fiat_p521_uint1 x1320; + uint32_t x1321; + fiat_p521_uint1 x1322; + uint32_t x1323; + fiat_p521_uint1 x1324; + uint32_t x1325; + fiat_p521_uint1 x1326; + uint32_t x1327; + uint32_t x1328; + uint32_t x1329; + uint32_t x1330; + uint32_t x1331; + uint32_t x1332; + uint32_t x1333; + uint32_t x1334; + uint32_t x1335; + uint32_t x1336; + uint32_t x1337; + uint32_t x1338; + uint32_t x1339; + uint32_t x1340; + uint32_t x1341; + uint32_t x1342; + uint32_t x1343; + uint32_t x1344; + uint32_t x1345; + uint32_t x1346; + uint32_t x1347; + uint32_t x1348; + uint32_t x1349; + uint32_t x1350; + uint32_t x1351; + uint32_t x1352; + uint32_t x1353; + uint32_t x1354; + uint32_t x1355; + uint32_t x1356; + uint32_t x1357; + uint32_t x1358; + uint32_t x1359; + uint32_t x1360; + uint32_t x1361; + fiat_p521_uint1 x1362; + uint32_t x1363; + fiat_p521_uint1 x1364; + uint32_t x1365; + fiat_p521_uint1 x1366; + uint32_t x1367; + fiat_p521_uint1 x1368; + uint32_t x1369; + fiat_p521_uint1 x1370; + uint32_t x1371; + fiat_p521_uint1 x1372; + uint32_t x1373; + fiat_p521_uint1 x1374; + uint32_t x1375; + fiat_p521_uint1 x1376; + uint32_t x1377; + fiat_p521_uint1 x1378; + uint32_t x1379; + fiat_p521_uint1 x1380; + uint32_t x1381; + fiat_p521_uint1 x1382; + uint32_t x1383; + fiat_p521_uint1 x1384; + uint32_t x1385; + fiat_p521_uint1 x1386; + uint32_t x1387; + fiat_p521_uint1 x1388; + uint32_t x1389; + fiat_p521_uint1 x1390; + uint32_t x1391; + fiat_p521_uint1 x1392; + uint32_t x1393; + fiat_p521_uint1 x1394; + uint32_t x1395; + fiat_p521_uint1 x1396; + uint32_t x1397; + fiat_p521_uint1 x1398; + uint32_t x1399; + fiat_p521_uint1 x1400; + uint32_t x1401; + fiat_p521_uint1 x1402; + uint32_t x1403; + fiat_p521_uint1 x1404; + uint32_t x1405; + fiat_p521_uint1 x1406; + uint32_t x1407; + fiat_p521_uint1 x1408; + uint32_t x1409; + fiat_p521_uint1 x1410; + uint32_t x1411; + fiat_p521_uint1 x1412; + uint32_t x1413; + fiat_p521_uint1 x1414; + uint32_t x1415; + fiat_p521_uint1 x1416; + uint32_t x1417; + fiat_p521_uint1 x1418; + uint32_t x1419; + fiat_p521_uint1 x1420; + uint32_t x1421; + fiat_p521_uint1 x1422; + uint32_t x1423; + fiat_p521_uint1 x1424; + uint32_t x1425; + fiat_p521_uint1 x1426; + uint32_t x1427; + uint32_t x1428; + uint32_t x1429; + fiat_p521_uint1 x1430; + uint32_t x1431; + fiat_p521_uint1 x1432; + uint32_t x1433; + fiat_p521_uint1 x1434; + uint32_t x1435; + fiat_p521_uint1 x1436; + uint32_t x1437; + fiat_p521_uint1 x1438; + uint32_t x1439; + fiat_p521_uint1 x1440; + uint32_t x1441; + fiat_p521_uint1 x1442; + uint32_t x1443; + fiat_p521_uint1 x1444; + uint32_t x1445; + fiat_p521_uint1 x1446; + uint32_t x1447; + fiat_p521_uint1 x1448; + uint32_t x1449; + fiat_p521_uint1 x1450; + uint32_t x1451; + fiat_p521_uint1 x1452; + uint32_t x1453; + fiat_p521_uint1 x1454; + uint32_t x1455; + fiat_p521_uint1 x1456; + uint32_t x1457; + fiat_p521_uint1 x1458; + uint32_t x1459; + uint32_t x1460; + uint32_t x1461; + uint32_t x1462; + uint32_t x1463; + uint32_t x1464; + uint32_t x1465; + uint32_t x1466; + uint32_t x1467; + uint32_t x1468; + uint32_t x1469; + uint32_t x1470; + uint32_t x1471; + uint32_t x1472; + uint32_t x1473; + uint32_t x1474; + uint32_t x1475; + uint32_t x1476; + uint32_t x1477; + uint32_t x1478; + uint32_t x1479; + uint32_t x1480; + uint32_t x1481; + uint32_t x1482; + uint32_t x1483; + uint32_t x1484; + uint32_t x1485; + uint32_t x1486; + uint32_t x1487; + uint32_t x1488; + uint32_t x1489; + uint32_t x1490; + uint32_t x1491; + uint32_t x1492; + uint32_t x1493; + fiat_p521_uint1 x1494; + uint32_t x1495; + fiat_p521_uint1 x1496; + uint32_t x1497; + fiat_p521_uint1 x1498; + uint32_t x1499; + fiat_p521_uint1 x1500; + uint32_t x1501; + fiat_p521_uint1 x1502; + uint32_t x1503; + fiat_p521_uint1 x1504; + uint32_t x1505; + fiat_p521_uint1 x1506; + uint32_t x1507; + fiat_p521_uint1 x1508; + uint32_t x1509; + fiat_p521_uint1 x1510; + uint32_t x1511; + fiat_p521_uint1 x1512; + uint32_t x1513; + fiat_p521_uint1 x1514; + uint32_t x1515; + fiat_p521_uint1 x1516; + uint32_t x1517; + fiat_p521_uint1 x1518; + uint32_t x1519; + fiat_p521_uint1 x1520; + uint32_t x1521; + fiat_p521_uint1 x1522; + uint32_t x1523; + fiat_p521_uint1 x1524; + uint32_t x1525; + fiat_p521_uint1 x1526; + uint32_t x1527; + fiat_p521_uint1 x1528; + uint32_t x1529; + fiat_p521_uint1 x1530; + uint32_t x1531; + fiat_p521_uint1 x1532; + uint32_t x1533; + fiat_p521_uint1 x1534; + uint32_t x1535; + fiat_p521_uint1 x1536; + uint32_t x1537; + fiat_p521_uint1 x1538; + uint32_t x1539; + fiat_p521_uint1 x1540; + uint32_t x1541; + fiat_p521_uint1 x1542; + uint32_t x1543; + fiat_p521_uint1 x1544; + uint32_t x1545; + fiat_p521_uint1 x1546; + uint32_t x1547; + fiat_p521_uint1 x1548; + uint32_t x1549; + fiat_p521_uint1 x1550; + uint32_t x1551; + fiat_p521_uint1 x1552; + uint32_t x1553; + fiat_p521_uint1 x1554; + uint32_t x1555; + fiat_p521_uint1 x1556; + uint32_t x1557; + fiat_p521_uint1 x1558; + uint32_t x1559; + uint32_t x1560; + uint32_t x1561; + fiat_p521_uint1 x1562; + uint32_t x1563; + fiat_p521_uint1 x1564; + uint32_t x1565; + fiat_p521_uint1 x1566; + uint32_t x1567; + fiat_p521_uint1 x1568; + uint32_t x1569; + fiat_p521_uint1 x1570; + uint32_t x1571; + fiat_p521_uint1 x1572; + uint32_t x1573; + fiat_p521_uint1 x1574; + uint32_t x1575; + fiat_p521_uint1 x1576; + uint32_t x1577; + fiat_p521_uint1 x1578; + uint32_t x1579; + fiat_p521_uint1 x1580; + uint32_t x1581; + fiat_p521_uint1 x1582; + uint32_t x1583; + fiat_p521_uint1 x1584; + uint32_t x1585; + fiat_p521_uint1 x1586; + uint32_t x1587; + fiat_p521_uint1 x1588; + uint32_t x1589; + fiat_p521_uint1 x1590; + uint32_t x1591; + uint32_t x1592; + uint32_t x1593; + uint32_t x1594; + uint32_t x1595; + uint32_t x1596; + uint32_t x1597; + uint32_t x1598; + uint32_t x1599; + uint32_t x1600; + uint32_t x1601; + uint32_t x1602; + uint32_t x1603; + uint32_t x1604; + uint32_t x1605; + uint32_t x1606; + uint32_t x1607; + uint32_t x1608; + uint32_t x1609; + uint32_t x1610; + uint32_t x1611; + uint32_t x1612; + uint32_t x1613; + uint32_t x1614; + uint32_t x1615; + uint32_t x1616; + uint32_t x1617; + uint32_t x1618; + uint32_t x1619; + uint32_t x1620; + uint32_t x1621; + uint32_t x1622; + uint32_t x1623; + uint32_t x1624; + uint32_t x1625; + fiat_p521_uint1 x1626; + uint32_t x1627; + fiat_p521_uint1 x1628; + uint32_t x1629; + fiat_p521_uint1 x1630; + uint32_t x1631; + fiat_p521_uint1 x1632; + uint32_t x1633; + fiat_p521_uint1 x1634; + uint32_t x1635; + fiat_p521_uint1 x1636; + uint32_t x1637; + fiat_p521_uint1 x1638; + uint32_t x1639; + fiat_p521_uint1 x1640; + uint32_t x1641; + fiat_p521_uint1 x1642; + uint32_t x1643; + fiat_p521_uint1 x1644; + uint32_t x1645; + fiat_p521_uint1 x1646; + uint32_t x1647; + fiat_p521_uint1 x1648; + uint32_t x1649; + fiat_p521_uint1 x1650; + uint32_t x1651; + fiat_p521_uint1 x1652; + uint32_t x1653; + fiat_p521_uint1 x1654; + uint32_t x1655; + fiat_p521_uint1 x1656; + uint32_t x1657; + fiat_p521_uint1 x1658; + uint32_t x1659; + fiat_p521_uint1 x1660; + uint32_t x1661; + fiat_p521_uint1 x1662; + uint32_t x1663; + fiat_p521_uint1 x1664; + uint32_t x1665; + fiat_p521_uint1 x1666; + uint32_t x1667; + fiat_p521_uint1 x1668; + uint32_t x1669; + fiat_p521_uint1 x1670; + uint32_t x1671; + fiat_p521_uint1 x1672; + uint32_t x1673; + fiat_p521_uint1 x1674; + uint32_t x1675; + fiat_p521_uint1 x1676; + uint32_t x1677; + fiat_p521_uint1 x1678; + uint32_t x1679; + fiat_p521_uint1 x1680; + uint32_t x1681; + fiat_p521_uint1 x1682; + uint32_t x1683; + fiat_p521_uint1 x1684; + uint32_t x1685; + fiat_p521_uint1 x1686; + uint32_t x1687; + fiat_p521_uint1 x1688; + uint32_t x1689; + fiat_p521_uint1 x1690; + uint32_t x1691; + uint32_t x1692; + uint32_t x1693; + fiat_p521_uint1 x1694; + uint32_t x1695; + fiat_p521_uint1 x1696; + uint32_t x1697; + fiat_p521_uint1 x1698; + uint32_t x1699; + fiat_p521_uint1 x1700; + uint32_t x1701; + fiat_p521_uint1 x1702; + uint32_t x1703; + fiat_p521_uint1 x1704; + uint32_t x1705; + fiat_p521_uint1 x1706; + uint32_t x1707; + fiat_p521_uint1 x1708; + uint32_t x1709; + fiat_p521_uint1 x1710; + uint32_t x1711; + fiat_p521_uint1 x1712; + uint32_t x1713; + fiat_p521_uint1 x1714; + uint32_t x1715; + fiat_p521_uint1 x1716; + uint32_t x1717; + fiat_p521_uint1 x1718; + uint32_t x1719; + fiat_p521_uint1 x1720; + uint32_t x1721; + fiat_p521_uint1 x1722; + uint32_t x1723; + uint32_t x1724; + uint32_t x1725; + uint32_t x1726; + uint32_t x1727; + uint32_t x1728; + uint32_t x1729; + uint32_t x1730; + uint32_t x1731; + uint32_t x1732; + uint32_t x1733; + uint32_t x1734; + uint32_t x1735; + uint32_t x1736; + uint32_t x1737; + uint32_t x1738; + uint32_t x1739; + uint32_t x1740; + uint32_t x1741; + uint32_t x1742; + uint32_t x1743; + uint32_t x1744; + uint32_t x1745; + uint32_t x1746; + uint32_t x1747; + uint32_t x1748; + uint32_t x1749; + uint32_t x1750; + uint32_t x1751; + uint32_t x1752; + uint32_t x1753; + uint32_t x1754; + uint32_t x1755; + uint32_t x1756; + uint32_t x1757; + fiat_p521_uint1 x1758; + uint32_t x1759; + fiat_p521_uint1 x1760; + uint32_t x1761; + fiat_p521_uint1 x1762; + uint32_t x1763; + fiat_p521_uint1 x1764; + uint32_t x1765; + fiat_p521_uint1 x1766; + uint32_t x1767; + fiat_p521_uint1 x1768; + uint32_t x1769; + fiat_p521_uint1 x1770; + uint32_t x1771; + fiat_p521_uint1 x1772; + uint32_t x1773; + fiat_p521_uint1 x1774; + uint32_t x1775; + fiat_p521_uint1 x1776; + uint32_t x1777; + fiat_p521_uint1 x1778; + uint32_t x1779; + fiat_p521_uint1 x1780; + uint32_t x1781; + fiat_p521_uint1 x1782; + uint32_t x1783; + fiat_p521_uint1 x1784; + uint32_t x1785; + fiat_p521_uint1 x1786; + uint32_t x1787; + fiat_p521_uint1 x1788; + uint32_t x1789; + fiat_p521_uint1 x1790; + uint32_t x1791; + fiat_p521_uint1 x1792; + uint32_t x1793; + fiat_p521_uint1 x1794; + uint32_t x1795; + fiat_p521_uint1 x1796; + uint32_t x1797; + fiat_p521_uint1 x1798; + uint32_t x1799; + fiat_p521_uint1 x1800; + uint32_t x1801; + fiat_p521_uint1 x1802; + uint32_t x1803; + fiat_p521_uint1 x1804; + uint32_t x1805; + fiat_p521_uint1 x1806; + uint32_t x1807; + fiat_p521_uint1 x1808; + uint32_t x1809; + fiat_p521_uint1 x1810; + uint32_t x1811; + fiat_p521_uint1 x1812; + uint32_t x1813; + fiat_p521_uint1 x1814; + uint32_t x1815; + fiat_p521_uint1 x1816; + uint32_t x1817; + fiat_p521_uint1 x1818; + uint32_t x1819; + fiat_p521_uint1 x1820; + uint32_t x1821; + fiat_p521_uint1 x1822; + uint32_t x1823; + uint32_t x1824; + uint32_t x1825; + fiat_p521_uint1 x1826; + uint32_t x1827; + fiat_p521_uint1 x1828; + uint32_t x1829; + fiat_p521_uint1 x1830; + uint32_t x1831; + fiat_p521_uint1 x1832; + uint32_t x1833; + fiat_p521_uint1 x1834; + uint32_t x1835; + fiat_p521_uint1 x1836; + uint32_t x1837; + fiat_p521_uint1 x1838; + uint32_t x1839; + fiat_p521_uint1 x1840; + uint32_t x1841; + fiat_p521_uint1 x1842; + uint32_t x1843; + fiat_p521_uint1 x1844; + uint32_t x1845; + fiat_p521_uint1 x1846; + uint32_t x1847; + fiat_p521_uint1 x1848; + uint32_t x1849; + fiat_p521_uint1 x1850; + uint32_t x1851; + fiat_p521_uint1 x1852; + uint32_t x1853; + fiat_p521_uint1 x1854; + uint32_t x1855; + uint32_t x1856; + uint32_t x1857; + uint32_t x1858; + uint32_t x1859; + uint32_t x1860; + uint32_t x1861; + uint32_t x1862; + uint32_t x1863; + uint32_t x1864; + uint32_t x1865; + uint32_t x1866; + uint32_t x1867; + uint32_t x1868; + uint32_t x1869; + uint32_t x1870; + uint32_t x1871; + uint32_t x1872; + uint32_t x1873; + uint32_t x1874; + uint32_t x1875; + uint32_t x1876; + uint32_t x1877; + uint32_t x1878; + uint32_t x1879; + uint32_t x1880; + uint32_t x1881; + uint32_t x1882; + uint32_t x1883; + uint32_t x1884; + uint32_t x1885; + uint32_t x1886; + uint32_t x1887; + uint32_t x1888; + uint32_t x1889; + fiat_p521_uint1 x1890; + uint32_t x1891; + fiat_p521_uint1 x1892; + uint32_t x1893; + fiat_p521_uint1 x1894; + uint32_t x1895; + fiat_p521_uint1 x1896; + uint32_t x1897; + fiat_p521_uint1 x1898; + uint32_t x1899; + fiat_p521_uint1 x1900; + uint32_t x1901; + fiat_p521_uint1 x1902; + uint32_t x1903; + fiat_p521_uint1 x1904; + uint32_t x1905; + fiat_p521_uint1 x1906; + uint32_t x1907; + fiat_p521_uint1 x1908; + uint32_t x1909; + fiat_p521_uint1 x1910; + uint32_t x1911; + fiat_p521_uint1 x1912; + uint32_t x1913; + fiat_p521_uint1 x1914; + uint32_t x1915; + fiat_p521_uint1 x1916; + uint32_t x1917; + fiat_p521_uint1 x1918; + uint32_t x1919; + fiat_p521_uint1 x1920; + uint32_t x1921; + fiat_p521_uint1 x1922; + uint32_t x1923; + fiat_p521_uint1 x1924; + uint32_t x1925; + fiat_p521_uint1 x1926; + uint32_t x1927; + fiat_p521_uint1 x1928; + uint32_t x1929; + fiat_p521_uint1 x1930; + uint32_t x1931; + fiat_p521_uint1 x1932; + uint32_t x1933; + fiat_p521_uint1 x1934; + uint32_t x1935; + fiat_p521_uint1 x1936; + uint32_t x1937; + fiat_p521_uint1 x1938; + uint32_t x1939; + fiat_p521_uint1 x1940; + uint32_t x1941; + fiat_p521_uint1 x1942; + uint32_t x1943; + fiat_p521_uint1 x1944; + uint32_t x1945; + fiat_p521_uint1 x1946; + uint32_t x1947; + fiat_p521_uint1 x1948; + uint32_t x1949; + fiat_p521_uint1 x1950; + uint32_t x1951; + fiat_p521_uint1 x1952; + uint32_t x1953; + fiat_p521_uint1 x1954; + uint32_t x1955; + uint32_t x1956; + uint32_t x1957; + fiat_p521_uint1 x1958; + uint32_t x1959; + fiat_p521_uint1 x1960; + uint32_t x1961; + fiat_p521_uint1 x1962; + uint32_t x1963; + fiat_p521_uint1 x1964; + uint32_t x1965; + fiat_p521_uint1 x1966; + uint32_t x1967; + fiat_p521_uint1 x1968; + uint32_t x1969; + fiat_p521_uint1 x1970; + uint32_t x1971; + fiat_p521_uint1 x1972; + uint32_t x1973; + fiat_p521_uint1 x1974; + uint32_t x1975; + fiat_p521_uint1 x1976; + uint32_t x1977; + fiat_p521_uint1 x1978; + uint32_t x1979; + fiat_p521_uint1 x1980; + uint32_t x1981; + fiat_p521_uint1 x1982; + uint32_t x1983; + fiat_p521_uint1 x1984; + uint32_t x1985; + fiat_p521_uint1 x1986; + uint32_t x1987; + uint32_t x1988; + uint32_t x1989; + uint32_t x1990; + uint32_t x1991; + uint32_t x1992; + uint32_t x1993; + uint32_t x1994; + uint32_t x1995; + uint32_t x1996; + uint32_t x1997; + uint32_t x1998; + uint32_t x1999; + uint32_t x2000; + uint32_t x2001; + uint32_t x2002; + uint32_t x2003; + uint32_t x2004; + uint32_t x2005; + uint32_t x2006; + uint32_t x2007; + uint32_t x2008; + uint32_t x2009; + uint32_t x2010; + uint32_t x2011; + uint32_t x2012; + uint32_t x2013; + uint32_t x2014; + uint32_t x2015; + uint32_t x2016; + uint32_t x2017; + uint32_t x2018; + uint32_t x2019; + uint32_t x2020; + uint32_t x2021; + fiat_p521_uint1 x2022; + uint32_t x2023; + fiat_p521_uint1 x2024; + uint32_t x2025; + fiat_p521_uint1 x2026; + uint32_t x2027; + fiat_p521_uint1 x2028; + uint32_t x2029; + fiat_p521_uint1 x2030; + uint32_t x2031; + fiat_p521_uint1 x2032; + uint32_t x2033; + fiat_p521_uint1 x2034; + uint32_t x2035; + fiat_p521_uint1 x2036; + uint32_t x2037; + fiat_p521_uint1 x2038; + uint32_t x2039; + fiat_p521_uint1 x2040; + uint32_t x2041; + fiat_p521_uint1 x2042; + uint32_t x2043; + fiat_p521_uint1 x2044; + uint32_t x2045; + fiat_p521_uint1 x2046; + uint32_t x2047; + fiat_p521_uint1 x2048; + uint32_t x2049; + fiat_p521_uint1 x2050; + uint32_t x2051; + fiat_p521_uint1 x2052; + uint32_t x2053; + fiat_p521_uint1 x2054; + uint32_t x2055; + fiat_p521_uint1 x2056; + uint32_t x2057; + fiat_p521_uint1 x2058; + uint32_t x2059; + fiat_p521_uint1 x2060; + uint32_t x2061; + fiat_p521_uint1 x2062; + uint32_t x2063; + fiat_p521_uint1 x2064; + uint32_t x2065; + fiat_p521_uint1 x2066; + uint32_t x2067; + fiat_p521_uint1 x2068; + uint32_t x2069; + fiat_p521_uint1 x2070; + uint32_t x2071; + fiat_p521_uint1 x2072; + uint32_t x2073; + fiat_p521_uint1 x2074; + uint32_t x2075; + fiat_p521_uint1 x2076; + uint32_t x2077; + fiat_p521_uint1 x2078; + uint32_t x2079; + fiat_p521_uint1 x2080; + uint32_t x2081; + fiat_p521_uint1 x2082; + uint32_t x2083; + fiat_p521_uint1 x2084; + uint32_t x2085; + fiat_p521_uint1 x2086; + uint32_t x2087; + uint32_t x2088; + fiat_p521_uint1 x2089; + uint32_t x2090; + fiat_p521_uint1 x2091; + uint32_t x2092; + fiat_p521_uint1 x2093; + uint32_t x2094; + fiat_p521_uint1 x2095; + uint32_t x2096; + fiat_p521_uint1 x2097; + uint32_t x2098; + fiat_p521_uint1 x2099; + uint32_t x2100; + fiat_p521_uint1 x2101; + uint32_t x2102; + fiat_p521_uint1 x2103; + uint32_t x2104; + fiat_p521_uint1 x2105; + uint32_t x2106; + fiat_p521_uint1 x2107; + uint32_t x2108; + fiat_p521_uint1 x2109; + uint32_t x2110; + fiat_p521_uint1 x2111; + uint32_t x2112; + fiat_p521_uint1 x2113; + uint32_t x2114; + fiat_p521_uint1 x2115; + uint32_t x2116; + fiat_p521_uint1 x2117; + uint32_t x2118; + fiat_p521_uint1 x2119; + uint32_t x2120; + fiat_p521_uint1 x2121; + uint32_t x2122; + fiat_p521_uint1 x2123; + uint32_t x2124; + uint32_t x2125; + uint32_t x2126; + uint32_t x2127; + uint32_t x2128; + uint32_t x2129; + uint32_t x2130; + uint32_t x2131; + uint32_t x2132; + uint32_t x2133; + uint32_t x2134; + uint32_t x2135; + uint32_t x2136; + uint32_t x2137; + uint32_t x2138; + uint32_t x2139; + uint32_t x2140; + fiat_p521_mulx_u32(&x1, &x2, (arg1[0]), UINT16_C(0x4000)); + fiat_p521_mulx_u32(&x3, &x4, (arg1[1]), UINT16_C(0x4000)); + fiat_p521_addcarryx_u32(&x5, &x6, 0x0, x2, x3); + fiat_p521_mulx_u32(&x7, &x8, x1, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x9, &x10, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x11, &x12, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x13, &x14, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x15, &x16, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x17, &x18, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x19, &x20, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x21, &x22, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x23, &x24, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x25, &x26, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x27, &x28, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x29, &x30, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x31, &x32, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x33, &x34, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x35, &x36, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x37, &x38, x1, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x39, &x40, x1, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x41, &x42, 0x0, x40, x37); + fiat_p521_addcarryx_u32(&x43, &x44, x42, x38, x35); + fiat_p521_addcarryx_u32(&x45, &x46, x44, x36, x33); + fiat_p521_addcarryx_u32(&x47, &x48, x46, x34, x31); + fiat_p521_addcarryx_u32(&x49, &x50, x48, x32, x29); + fiat_p521_addcarryx_u32(&x51, &x52, x50, x30, x27); + fiat_p521_addcarryx_u32(&x53, &x54, x52, x28, x25); + fiat_p521_addcarryx_u32(&x55, &x56, x54, x26, x23); + fiat_p521_addcarryx_u32(&x57, &x58, x56, x24, x21); + fiat_p521_addcarryx_u32(&x59, &x60, x58, x22, x19); + fiat_p521_addcarryx_u32(&x61, &x62, x60, x20, x17); + fiat_p521_addcarryx_u32(&x63, &x64, x62, x18, x15); + fiat_p521_addcarryx_u32(&x65, &x66, x64, x16, x13); + fiat_p521_addcarryx_u32(&x67, &x68, x66, x14, x11); + fiat_p521_addcarryx_u32(&x69, &x70, x68, x12, x9); + fiat_p521_addcarryx_u32(&x71, &x72, x70, x10, x7); + fiat_p521_addcarryx_u32(&x73, &x74, 0x0, x1, x39); + fiat_p521_addcarryx_u32(&x75, &x76, x74, x5, x41); + fiat_p521_addcarryx_u32(&x77, &x78, x76, (x6 + x4), x43); + fiat_p521_addcarryx_u32(&x79, &x80, x78, 0x0, x45); + fiat_p521_addcarryx_u32(&x81, &x82, x80, 0x0, x47); + fiat_p521_addcarryx_u32(&x83, &x84, x82, 0x0, x49); + fiat_p521_addcarryx_u32(&x85, &x86, x84, 0x0, x51); + fiat_p521_addcarryx_u32(&x87, &x88, x86, 0x0, x53); + fiat_p521_addcarryx_u32(&x89, &x90, x88, 0x0, x55); + fiat_p521_addcarryx_u32(&x91, &x92, x90, 0x0, x57); + fiat_p521_addcarryx_u32(&x93, &x94, x92, 0x0, x59); + fiat_p521_addcarryx_u32(&x95, &x96, x94, 0x0, x61); + fiat_p521_addcarryx_u32(&x97, &x98, x96, 0x0, x63); + fiat_p521_addcarryx_u32(&x99, &x100, x98, 0x0, x65); + fiat_p521_addcarryx_u32(&x101, &x102, x100, 0x0, x67); + fiat_p521_addcarryx_u32(&x103, &x104, x102, 0x0, x69); + fiat_p521_addcarryx_u32(&x105, &x106, x104, 0x0, x71); + fiat_p521_mulx_u32(&x107, &x108, (arg1[2]), UINT16_C(0x4000)); + fiat_p521_addcarryx_u32(&x109, &x110, 0x0, x77, x107); + fiat_p521_addcarryx_u32(&x111, &x112, x110, x79, x108); + fiat_p521_addcarryx_u32(&x113, &x114, x112, x81, 0x0); + fiat_p521_addcarryx_u32(&x115, &x116, x114, x83, 0x0); + fiat_p521_addcarryx_u32(&x117, &x118, x116, x85, 0x0); + fiat_p521_addcarryx_u32(&x119, &x120, x118, x87, 0x0); + fiat_p521_addcarryx_u32(&x121, &x122, x120, x89, 0x0); + fiat_p521_addcarryx_u32(&x123, &x124, x122, x91, 0x0); + fiat_p521_addcarryx_u32(&x125, &x126, x124, x93, 0x0); + fiat_p521_addcarryx_u32(&x127, &x128, x126, x95, 0x0); + fiat_p521_addcarryx_u32(&x129, &x130, x128, x97, 0x0); + fiat_p521_addcarryx_u32(&x131, &x132, x130, x99, 0x0); + fiat_p521_addcarryx_u32(&x133, &x134, x132, x101, 0x0); + fiat_p521_addcarryx_u32(&x135, &x136, x134, x103, 0x0); + fiat_p521_addcarryx_u32(&x137, &x138, x136, x105, 0x0); + fiat_p521_mulx_u32(&x139, &x140, x75, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x141, &x142, x75, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x143, &x144, x75, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x145, &x146, x75, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x147, &x148, x75, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x149, &x150, x75, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x151, &x152, x75, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x153, &x154, x75, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x155, &x156, x75, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x157, &x158, x75, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x159, &x160, x75, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x161, &x162, x75, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x163, &x164, x75, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x165, &x166, x75, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x167, &x168, x75, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x169, &x170, x75, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x171, &x172, x75, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x173, &x174, 0x0, x172, x169); + fiat_p521_addcarryx_u32(&x175, &x176, x174, x170, x167); + fiat_p521_addcarryx_u32(&x177, &x178, x176, x168, x165); + fiat_p521_addcarryx_u32(&x179, &x180, x178, x166, x163); + fiat_p521_addcarryx_u32(&x181, &x182, x180, x164, x161); + fiat_p521_addcarryx_u32(&x183, &x184, x182, x162, x159); + fiat_p521_addcarryx_u32(&x185, &x186, x184, x160, x157); + fiat_p521_addcarryx_u32(&x187, &x188, x186, x158, x155); + fiat_p521_addcarryx_u32(&x189, &x190, x188, x156, x153); + fiat_p521_addcarryx_u32(&x191, &x192, x190, x154, x151); + fiat_p521_addcarryx_u32(&x193, &x194, x192, x152, x149); + fiat_p521_addcarryx_u32(&x195, &x196, x194, x150, x147); + fiat_p521_addcarryx_u32(&x197, &x198, x196, x148, x145); + fiat_p521_addcarryx_u32(&x199, &x200, x198, x146, x143); + fiat_p521_addcarryx_u32(&x201, &x202, x200, x144, x141); + fiat_p521_addcarryx_u32(&x203, &x204, x202, x142, x139); + fiat_p521_addcarryx_u32(&x205, &x206, 0x0, x75, x171); + fiat_p521_addcarryx_u32(&x207, &x208, x206, x109, x173); + fiat_p521_addcarryx_u32(&x209, &x210, x208, x111, x175); + fiat_p521_addcarryx_u32(&x211, &x212, x210, x113, x177); + fiat_p521_addcarryx_u32(&x213, &x214, x212, x115, x179); + fiat_p521_addcarryx_u32(&x215, &x216, x214, x117, x181); + fiat_p521_addcarryx_u32(&x217, &x218, x216, x119, x183); + fiat_p521_addcarryx_u32(&x219, &x220, x218, x121, x185); + fiat_p521_addcarryx_u32(&x221, &x222, x220, x123, x187); + fiat_p521_addcarryx_u32(&x223, &x224, x222, x125, x189); + fiat_p521_addcarryx_u32(&x225, &x226, x224, x127, x191); + fiat_p521_addcarryx_u32(&x227, &x228, x226, x129, x193); + fiat_p521_addcarryx_u32(&x229, &x230, x228, x131, x195); + fiat_p521_addcarryx_u32(&x231, &x232, x230, x133, x197); + fiat_p521_addcarryx_u32(&x233, &x234, x232, x135, x199); + fiat_p521_addcarryx_u32(&x235, &x236, x234, x137, x201); + fiat_p521_addcarryx_u32(&x237, &x238, x236, (x138 + (x106 + (x72 + x8))), x203); + fiat_p521_mulx_u32(&x239, &x240, (arg1[3]), UINT16_C(0x4000)); + fiat_p521_addcarryx_u32(&x241, &x242, 0x0, x209, x239); + fiat_p521_addcarryx_u32(&x243, &x244, x242, x211, x240); + fiat_p521_addcarryx_u32(&x245, &x246, x244, x213, 0x0); + fiat_p521_addcarryx_u32(&x247, &x248, x246, x215, 0x0); + fiat_p521_addcarryx_u32(&x249, &x250, x248, x217, 0x0); + fiat_p521_addcarryx_u32(&x251, &x252, x250, x219, 0x0); + fiat_p521_addcarryx_u32(&x253, &x254, x252, x221, 0x0); + fiat_p521_addcarryx_u32(&x255, &x256, x254, x223, 0x0); + fiat_p521_addcarryx_u32(&x257, &x258, x256, x225, 0x0); + fiat_p521_addcarryx_u32(&x259, &x260, x258, x227, 0x0); + fiat_p521_addcarryx_u32(&x261, &x262, x260, x229, 0x0); + fiat_p521_addcarryx_u32(&x263, &x264, x262, x231, 0x0); + fiat_p521_addcarryx_u32(&x265, &x266, x264, x233, 0x0); + fiat_p521_addcarryx_u32(&x267, &x268, x266, x235, 0x0); + fiat_p521_addcarryx_u32(&x269, &x270, x268, x237, 0x0); + fiat_p521_mulx_u32(&x271, &x272, x207, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x273, &x274, x207, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x275, &x276, x207, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x277, &x278, x207, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x279, &x280, x207, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x281, &x282, x207, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x283, &x284, x207, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x285, &x286, x207, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x287, &x288, x207, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x289, &x290, x207, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x291, &x292, x207, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x293, &x294, x207, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x295, &x296, x207, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x297, &x298, x207, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x299, &x300, x207, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x301, &x302, x207, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x303, &x304, x207, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x305, &x306, 0x0, x304, x301); + fiat_p521_addcarryx_u32(&x307, &x308, x306, x302, x299); + fiat_p521_addcarryx_u32(&x309, &x310, x308, x300, x297); + fiat_p521_addcarryx_u32(&x311, &x312, x310, x298, x295); + fiat_p521_addcarryx_u32(&x313, &x314, x312, x296, x293); + fiat_p521_addcarryx_u32(&x315, &x316, x314, x294, x291); + fiat_p521_addcarryx_u32(&x317, &x318, x316, x292, x289); + fiat_p521_addcarryx_u32(&x319, &x320, x318, x290, x287); + fiat_p521_addcarryx_u32(&x321, &x322, x320, x288, x285); + fiat_p521_addcarryx_u32(&x323, &x324, x322, x286, x283); + fiat_p521_addcarryx_u32(&x325, &x326, x324, x284, x281); + fiat_p521_addcarryx_u32(&x327, &x328, x326, x282, x279); + fiat_p521_addcarryx_u32(&x329, &x330, x328, x280, x277); + fiat_p521_addcarryx_u32(&x331, &x332, x330, x278, x275); + fiat_p521_addcarryx_u32(&x333, &x334, x332, x276, x273); + fiat_p521_addcarryx_u32(&x335, &x336, x334, x274, x271); + fiat_p521_addcarryx_u32(&x337, &x338, 0x0, x207, x303); + fiat_p521_addcarryx_u32(&x339, &x340, x338, x241, x305); + fiat_p521_addcarryx_u32(&x341, &x342, x340, x243, x307); + fiat_p521_addcarryx_u32(&x343, &x344, x342, x245, x309); + fiat_p521_addcarryx_u32(&x345, &x346, x344, x247, x311); + fiat_p521_addcarryx_u32(&x347, &x348, x346, x249, x313); + fiat_p521_addcarryx_u32(&x349, &x350, x348, x251, x315); + fiat_p521_addcarryx_u32(&x351, &x352, x350, x253, x317); + fiat_p521_addcarryx_u32(&x353, &x354, x352, x255, x319); + fiat_p521_addcarryx_u32(&x355, &x356, x354, x257, x321); + fiat_p521_addcarryx_u32(&x357, &x358, x356, x259, x323); + fiat_p521_addcarryx_u32(&x359, &x360, x358, x261, x325); + fiat_p521_addcarryx_u32(&x361, &x362, x360, x263, x327); + fiat_p521_addcarryx_u32(&x363, &x364, x362, x265, x329); + fiat_p521_addcarryx_u32(&x365, &x366, x364, x267, x331); + fiat_p521_addcarryx_u32(&x367, &x368, x366, x269, x333); + fiat_p521_addcarryx_u32(&x369, &x370, x368, (x270 + (x238 + (x204 + x140))), x335); + fiat_p521_mulx_u32(&x371, &x372, (arg1[4]), UINT16_C(0x4000)); + fiat_p521_addcarryx_u32(&x373, &x374, 0x0, x341, x371); + fiat_p521_addcarryx_u32(&x375, &x376, x374, x343, x372); + fiat_p521_addcarryx_u32(&x377, &x378, x376, x345, 0x0); + fiat_p521_addcarryx_u32(&x379, &x380, x378, x347, 0x0); + fiat_p521_addcarryx_u32(&x381, &x382, x380, x349, 0x0); + fiat_p521_addcarryx_u32(&x383, &x384, x382, x351, 0x0); + fiat_p521_addcarryx_u32(&x385, &x386, x384, x353, 0x0); + fiat_p521_addcarryx_u32(&x387, &x388, x386, x355, 0x0); + fiat_p521_addcarryx_u32(&x389, &x390, x388, x357, 0x0); + fiat_p521_addcarryx_u32(&x391, &x392, x390, x359, 0x0); + fiat_p521_addcarryx_u32(&x393, &x394, x392, x361, 0x0); + fiat_p521_addcarryx_u32(&x395, &x396, x394, x363, 0x0); + fiat_p521_addcarryx_u32(&x397, &x398, x396, x365, 0x0); + fiat_p521_addcarryx_u32(&x399, &x400, x398, x367, 0x0); + fiat_p521_addcarryx_u32(&x401, &x402, x400, x369, 0x0); + fiat_p521_mulx_u32(&x403, &x404, x339, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x405, &x406, x339, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x407, &x408, x339, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x409, &x410, x339, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x411, &x412, x339, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x413, &x414, x339, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x415, &x416, x339, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x417, &x418, x339, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x419, &x420, x339, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x421, &x422, x339, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x423, &x424, x339, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x425, &x426, x339, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x427, &x428, x339, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x429, &x430, x339, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x431, &x432, x339, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x433, &x434, x339, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x435, &x436, x339, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x437, &x438, 0x0, x436, x433); + fiat_p521_addcarryx_u32(&x439, &x440, x438, x434, x431); + fiat_p521_addcarryx_u32(&x441, &x442, x440, x432, x429); + fiat_p521_addcarryx_u32(&x443, &x444, x442, x430, x427); + fiat_p521_addcarryx_u32(&x445, &x446, x444, x428, x425); + fiat_p521_addcarryx_u32(&x447, &x448, x446, x426, x423); + fiat_p521_addcarryx_u32(&x449, &x450, x448, x424, x421); + fiat_p521_addcarryx_u32(&x451, &x452, x450, x422, x419); + fiat_p521_addcarryx_u32(&x453, &x454, x452, x420, x417); + fiat_p521_addcarryx_u32(&x455, &x456, x454, x418, x415); + fiat_p521_addcarryx_u32(&x457, &x458, x456, x416, x413); + fiat_p521_addcarryx_u32(&x459, &x460, x458, x414, x411); + fiat_p521_addcarryx_u32(&x461, &x462, x460, x412, x409); + fiat_p521_addcarryx_u32(&x463, &x464, x462, x410, x407); + fiat_p521_addcarryx_u32(&x465, &x466, x464, x408, x405); + fiat_p521_addcarryx_u32(&x467, &x468, x466, x406, x403); + fiat_p521_addcarryx_u32(&x469, &x470, 0x0, x339, x435); + fiat_p521_addcarryx_u32(&x471, &x472, x470, x373, x437); + fiat_p521_addcarryx_u32(&x473, &x474, x472, x375, x439); + fiat_p521_addcarryx_u32(&x475, &x476, x474, x377, x441); + fiat_p521_addcarryx_u32(&x477, &x478, x476, x379, x443); + fiat_p521_addcarryx_u32(&x479, &x480, x478, x381, x445); + fiat_p521_addcarryx_u32(&x481, &x482, x480, x383, x447); + fiat_p521_addcarryx_u32(&x483, &x484, x482, x385, x449); + fiat_p521_addcarryx_u32(&x485, &x486, x484, x387, x451); + fiat_p521_addcarryx_u32(&x487, &x488, x486, x389, x453); + fiat_p521_addcarryx_u32(&x489, &x490, x488, x391, x455); + fiat_p521_addcarryx_u32(&x491, &x492, x490, x393, x457); + fiat_p521_addcarryx_u32(&x493, &x494, x492, x395, x459); + fiat_p521_addcarryx_u32(&x495, &x496, x494, x397, x461); + fiat_p521_addcarryx_u32(&x497, &x498, x496, x399, x463); + fiat_p521_addcarryx_u32(&x499, &x500, x498, x401, x465); + fiat_p521_addcarryx_u32(&x501, &x502, x500, (x402 + (x370 + (x336 + x272))), x467); + fiat_p521_mulx_u32(&x503, &x504, (arg1[5]), UINT16_C(0x4000)); + fiat_p521_addcarryx_u32(&x505, &x506, 0x0, x473, x503); + fiat_p521_addcarryx_u32(&x507, &x508, x506, x475, x504); + fiat_p521_addcarryx_u32(&x509, &x510, x508, x477, 0x0); + fiat_p521_addcarryx_u32(&x511, &x512, x510, x479, 0x0); + fiat_p521_addcarryx_u32(&x513, &x514, x512, x481, 0x0); + fiat_p521_addcarryx_u32(&x515, &x516, x514, x483, 0x0); + fiat_p521_addcarryx_u32(&x517, &x518, x516, x485, 0x0); + fiat_p521_addcarryx_u32(&x519, &x520, x518, x487, 0x0); + fiat_p521_addcarryx_u32(&x521, &x522, x520, x489, 0x0); + fiat_p521_addcarryx_u32(&x523, &x524, x522, x491, 0x0); + fiat_p521_addcarryx_u32(&x525, &x526, x524, x493, 0x0); + fiat_p521_addcarryx_u32(&x527, &x528, x526, x495, 0x0); + fiat_p521_addcarryx_u32(&x529, &x530, x528, x497, 0x0); + fiat_p521_addcarryx_u32(&x531, &x532, x530, x499, 0x0); + fiat_p521_addcarryx_u32(&x533, &x534, x532, x501, 0x0); + fiat_p521_mulx_u32(&x535, &x536, x471, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x537, &x538, x471, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x539, &x540, x471, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x541, &x542, x471, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x543, &x544, x471, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x545, &x546, x471, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x547, &x548, x471, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x549, &x550, x471, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x551, &x552, x471, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x553, &x554, x471, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x555, &x556, x471, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x557, &x558, x471, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x559, &x560, x471, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x561, &x562, x471, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x563, &x564, x471, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x565, &x566, x471, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x567, &x568, x471, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x569, &x570, 0x0, x568, x565); + fiat_p521_addcarryx_u32(&x571, &x572, x570, x566, x563); + fiat_p521_addcarryx_u32(&x573, &x574, x572, x564, x561); + fiat_p521_addcarryx_u32(&x575, &x576, x574, x562, x559); + fiat_p521_addcarryx_u32(&x577, &x578, x576, x560, x557); + fiat_p521_addcarryx_u32(&x579, &x580, x578, x558, x555); + fiat_p521_addcarryx_u32(&x581, &x582, x580, x556, x553); + fiat_p521_addcarryx_u32(&x583, &x584, x582, x554, x551); + fiat_p521_addcarryx_u32(&x585, &x586, x584, x552, x549); + fiat_p521_addcarryx_u32(&x587, &x588, x586, x550, x547); + fiat_p521_addcarryx_u32(&x589, &x590, x588, x548, x545); + fiat_p521_addcarryx_u32(&x591, &x592, x590, x546, x543); + fiat_p521_addcarryx_u32(&x593, &x594, x592, x544, x541); + fiat_p521_addcarryx_u32(&x595, &x596, x594, x542, x539); + fiat_p521_addcarryx_u32(&x597, &x598, x596, x540, x537); + fiat_p521_addcarryx_u32(&x599, &x600, x598, x538, x535); + fiat_p521_addcarryx_u32(&x601, &x602, 0x0, x471, x567); + fiat_p521_addcarryx_u32(&x603, &x604, x602, x505, x569); + fiat_p521_addcarryx_u32(&x605, &x606, x604, x507, x571); + fiat_p521_addcarryx_u32(&x607, &x608, x606, x509, x573); + fiat_p521_addcarryx_u32(&x609, &x610, x608, x511, x575); + fiat_p521_addcarryx_u32(&x611, &x612, x610, x513, x577); + fiat_p521_addcarryx_u32(&x613, &x614, x612, x515, x579); + fiat_p521_addcarryx_u32(&x615, &x616, x614, x517, x581); + fiat_p521_addcarryx_u32(&x617, &x618, x616, x519, x583); + fiat_p521_addcarryx_u32(&x619, &x620, x618, x521, x585); + fiat_p521_addcarryx_u32(&x621, &x622, x620, x523, x587); + fiat_p521_addcarryx_u32(&x623, &x624, x622, x525, x589); + fiat_p521_addcarryx_u32(&x625, &x626, x624, x527, x591); + fiat_p521_addcarryx_u32(&x627, &x628, x626, x529, x593); + fiat_p521_addcarryx_u32(&x629, &x630, x628, x531, x595); + fiat_p521_addcarryx_u32(&x631, &x632, x630, x533, x597); + fiat_p521_addcarryx_u32(&x633, &x634, x632, (x534 + (x502 + (x468 + x404))), x599); + fiat_p521_mulx_u32(&x635, &x636, (arg1[6]), UINT16_C(0x4000)); + fiat_p521_addcarryx_u32(&x637, &x638, 0x0, x605, x635); + fiat_p521_addcarryx_u32(&x639, &x640, x638, x607, x636); + fiat_p521_addcarryx_u32(&x641, &x642, x640, x609, 0x0); + fiat_p521_addcarryx_u32(&x643, &x644, x642, x611, 0x0); + fiat_p521_addcarryx_u32(&x645, &x646, x644, x613, 0x0); + fiat_p521_addcarryx_u32(&x647, &x648, x646, x615, 0x0); + fiat_p521_addcarryx_u32(&x649, &x650, x648, x617, 0x0); + fiat_p521_addcarryx_u32(&x651, &x652, x650, x619, 0x0); + fiat_p521_addcarryx_u32(&x653, &x654, x652, x621, 0x0); + fiat_p521_addcarryx_u32(&x655, &x656, x654, x623, 0x0); + fiat_p521_addcarryx_u32(&x657, &x658, x656, x625, 0x0); + fiat_p521_addcarryx_u32(&x659, &x660, x658, x627, 0x0); + fiat_p521_addcarryx_u32(&x661, &x662, x660, x629, 0x0); + fiat_p521_addcarryx_u32(&x663, &x664, x662, x631, 0x0); + fiat_p521_addcarryx_u32(&x665, &x666, x664, x633, 0x0); + fiat_p521_mulx_u32(&x667, &x668, x603, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x669, &x670, x603, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x671, &x672, x603, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x673, &x674, x603, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x675, &x676, x603, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x677, &x678, x603, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x679, &x680, x603, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x681, &x682, x603, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x683, &x684, x603, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x685, &x686, x603, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x687, &x688, x603, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x689, &x690, x603, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x691, &x692, x603, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x693, &x694, x603, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x695, &x696, x603, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x697, &x698, x603, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x699, &x700, x603, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x701, &x702, 0x0, x700, x697); + fiat_p521_addcarryx_u32(&x703, &x704, x702, x698, x695); + fiat_p521_addcarryx_u32(&x705, &x706, x704, x696, x693); + fiat_p521_addcarryx_u32(&x707, &x708, x706, x694, x691); + fiat_p521_addcarryx_u32(&x709, &x710, x708, x692, x689); + fiat_p521_addcarryx_u32(&x711, &x712, x710, x690, x687); + fiat_p521_addcarryx_u32(&x713, &x714, x712, x688, x685); + fiat_p521_addcarryx_u32(&x715, &x716, x714, x686, x683); + fiat_p521_addcarryx_u32(&x717, &x718, x716, x684, x681); + fiat_p521_addcarryx_u32(&x719, &x720, x718, x682, x679); + fiat_p521_addcarryx_u32(&x721, &x722, x720, x680, x677); + fiat_p521_addcarryx_u32(&x723, &x724, x722, x678, x675); + fiat_p521_addcarryx_u32(&x725, &x726, x724, x676, x673); + fiat_p521_addcarryx_u32(&x727, &x728, x726, x674, x671); + fiat_p521_addcarryx_u32(&x729, &x730, x728, x672, x669); + fiat_p521_addcarryx_u32(&x731, &x732, x730, x670, x667); + fiat_p521_addcarryx_u32(&x733, &x734, 0x0, x603, x699); + fiat_p521_addcarryx_u32(&x735, &x736, x734, x637, x701); + fiat_p521_addcarryx_u32(&x737, &x738, x736, x639, x703); + fiat_p521_addcarryx_u32(&x739, &x740, x738, x641, x705); + fiat_p521_addcarryx_u32(&x741, &x742, x740, x643, x707); + fiat_p521_addcarryx_u32(&x743, &x744, x742, x645, x709); + fiat_p521_addcarryx_u32(&x745, &x746, x744, x647, x711); + fiat_p521_addcarryx_u32(&x747, &x748, x746, x649, x713); + fiat_p521_addcarryx_u32(&x749, &x750, x748, x651, x715); + fiat_p521_addcarryx_u32(&x751, &x752, x750, x653, x717); + fiat_p521_addcarryx_u32(&x753, &x754, x752, x655, x719); + fiat_p521_addcarryx_u32(&x755, &x756, x754, x657, x721); + fiat_p521_addcarryx_u32(&x757, &x758, x756, x659, x723); + fiat_p521_addcarryx_u32(&x759, &x760, x758, x661, x725); + fiat_p521_addcarryx_u32(&x761, &x762, x760, x663, x727); + fiat_p521_addcarryx_u32(&x763, &x764, x762, x665, x729); + fiat_p521_addcarryx_u32(&x765, &x766, x764, (x666 + (x634 + (x600 + x536))), x731); + fiat_p521_mulx_u32(&x767, &x768, (arg1[7]), UINT16_C(0x4000)); + fiat_p521_addcarryx_u32(&x769, &x770, 0x0, x737, x767); + fiat_p521_addcarryx_u32(&x771, &x772, x770, x739, x768); + fiat_p521_addcarryx_u32(&x773, &x774, x772, x741, 0x0); + fiat_p521_addcarryx_u32(&x775, &x776, x774, x743, 0x0); + fiat_p521_addcarryx_u32(&x777, &x778, x776, x745, 0x0); + fiat_p521_addcarryx_u32(&x779, &x780, x778, x747, 0x0); + fiat_p521_addcarryx_u32(&x781, &x782, x780, x749, 0x0); + fiat_p521_addcarryx_u32(&x783, &x784, x782, x751, 0x0); + fiat_p521_addcarryx_u32(&x785, &x786, x784, x753, 0x0); + fiat_p521_addcarryx_u32(&x787, &x788, x786, x755, 0x0); + fiat_p521_addcarryx_u32(&x789, &x790, x788, x757, 0x0); + fiat_p521_addcarryx_u32(&x791, &x792, x790, x759, 0x0); + fiat_p521_addcarryx_u32(&x793, &x794, x792, x761, 0x0); + fiat_p521_addcarryx_u32(&x795, &x796, x794, x763, 0x0); + fiat_p521_addcarryx_u32(&x797, &x798, x796, x765, 0x0); + fiat_p521_mulx_u32(&x799, &x800, x735, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x801, &x802, x735, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x803, &x804, x735, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x805, &x806, x735, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x807, &x808, x735, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x809, &x810, x735, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x811, &x812, x735, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x813, &x814, x735, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x815, &x816, x735, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x817, &x818, x735, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x819, &x820, x735, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x821, &x822, x735, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x823, &x824, x735, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x825, &x826, x735, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x827, &x828, x735, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x829, &x830, x735, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x831, &x832, x735, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x833, &x834, 0x0, x832, x829); + fiat_p521_addcarryx_u32(&x835, &x836, x834, x830, x827); + fiat_p521_addcarryx_u32(&x837, &x838, x836, x828, x825); + fiat_p521_addcarryx_u32(&x839, &x840, x838, x826, x823); + fiat_p521_addcarryx_u32(&x841, &x842, x840, x824, x821); + fiat_p521_addcarryx_u32(&x843, &x844, x842, x822, x819); + fiat_p521_addcarryx_u32(&x845, &x846, x844, x820, x817); + fiat_p521_addcarryx_u32(&x847, &x848, x846, x818, x815); + fiat_p521_addcarryx_u32(&x849, &x850, x848, x816, x813); + fiat_p521_addcarryx_u32(&x851, &x852, x850, x814, x811); + fiat_p521_addcarryx_u32(&x853, &x854, x852, x812, x809); + fiat_p521_addcarryx_u32(&x855, &x856, x854, x810, x807); + fiat_p521_addcarryx_u32(&x857, &x858, x856, x808, x805); + fiat_p521_addcarryx_u32(&x859, &x860, x858, x806, x803); + fiat_p521_addcarryx_u32(&x861, &x862, x860, x804, x801); + fiat_p521_addcarryx_u32(&x863, &x864, x862, x802, x799); + fiat_p521_addcarryx_u32(&x865, &x866, 0x0, x735, x831); + fiat_p521_addcarryx_u32(&x867, &x868, x866, x769, x833); + fiat_p521_addcarryx_u32(&x869, &x870, x868, x771, x835); + fiat_p521_addcarryx_u32(&x871, &x872, x870, x773, x837); + fiat_p521_addcarryx_u32(&x873, &x874, x872, x775, x839); + fiat_p521_addcarryx_u32(&x875, &x876, x874, x777, x841); + fiat_p521_addcarryx_u32(&x877, &x878, x876, x779, x843); + fiat_p521_addcarryx_u32(&x879, &x880, x878, x781, x845); + fiat_p521_addcarryx_u32(&x881, &x882, x880, x783, x847); + fiat_p521_addcarryx_u32(&x883, &x884, x882, x785, x849); + fiat_p521_addcarryx_u32(&x885, &x886, x884, x787, x851); + fiat_p521_addcarryx_u32(&x887, &x888, x886, x789, x853); + fiat_p521_addcarryx_u32(&x889, &x890, x888, x791, x855); + fiat_p521_addcarryx_u32(&x891, &x892, x890, x793, x857); + fiat_p521_addcarryx_u32(&x893, &x894, x892, x795, x859); + fiat_p521_addcarryx_u32(&x895, &x896, x894, x797, x861); + fiat_p521_addcarryx_u32(&x897, &x898, x896, (x798 + (x766 + (x732 + x668))), x863); + fiat_p521_mulx_u32(&x899, &x900, (arg1[8]), UINT16_C(0x4000)); + fiat_p521_addcarryx_u32(&x901, &x902, 0x0, x869, x899); + fiat_p521_addcarryx_u32(&x903, &x904, x902, x871, x900); + fiat_p521_addcarryx_u32(&x905, &x906, x904, x873, 0x0); + fiat_p521_addcarryx_u32(&x907, &x908, x906, x875, 0x0); + fiat_p521_addcarryx_u32(&x909, &x910, x908, x877, 0x0); + fiat_p521_addcarryx_u32(&x911, &x912, x910, x879, 0x0); + fiat_p521_addcarryx_u32(&x913, &x914, x912, x881, 0x0); + fiat_p521_addcarryx_u32(&x915, &x916, x914, x883, 0x0); + fiat_p521_addcarryx_u32(&x917, &x918, x916, x885, 0x0); + fiat_p521_addcarryx_u32(&x919, &x920, x918, x887, 0x0); + fiat_p521_addcarryx_u32(&x921, &x922, x920, x889, 0x0); + fiat_p521_addcarryx_u32(&x923, &x924, x922, x891, 0x0); + fiat_p521_addcarryx_u32(&x925, &x926, x924, x893, 0x0); + fiat_p521_addcarryx_u32(&x927, &x928, x926, x895, 0x0); + fiat_p521_addcarryx_u32(&x929, &x930, x928, x897, 0x0); + fiat_p521_mulx_u32(&x931, &x932, x867, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x933, &x934, x867, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x935, &x936, x867, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x937, &x938, x867, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x939, &x940, x867, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x941, &x942, x867, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x943, &x944, x867, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x945, &x946, x867, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x947, &x948, x867, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x949, &x950, x867, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x951, &x952, x867, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x953, &x954, x867, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x955, &x956, x867, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x957, &x958, x867, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x959, &x960, x867, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x961, &x962, x867, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x963, &x964, x867, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x965, &x966, 0x0, x964, x961); + fiat_p521_addcarryx_u32(&x967, &x968, x966, x962, x959); + fiat_p521_addcarryx_u32(&x969, &x970, x968, x960, x957); + fiat_p521_addcarryx_u32(&x971, &x972, x970, x958, x955); + fiat_p521_addcarryx_u32(&x973, &x974, x972, x956, x953); + fiat_p521_addcarryx_u32(&x975, &x976, x974, x954, x951); + fiat_p521_addcarryx_u32(&x977, &x978, x976, x952, x949); + fiat_p521_addcarryx_u32(&x979, &x980, x978, x950, x947); + fiat_p521_addcarryx_u32(&x981, &x982, x980, x948, x945); + fiat_p521_addcarryx_u32(&x983, &x984, x982, x946, x943); + fiat_p521_addcarryx_u32(&x985, &x986, x984, x944, x941); + fiat_p521_addcarryx_u32(&x987, &x988, x986, x942, x939); + fiat_p521_addcarryx_u32(&x989, &x990, x988, x940, x937); + fiat_p521_addcarryx_u32(&x991, &x992, x990, x938, x935); + fiat_p521_addcarryx_u32(&x993, &x994, x992, x936, x933); + fiat_p521_addcarryx_u32(&x995, &x996, x994, x934, x931); + fiat_p521_addcarryx_u32(&x997, &x998, 0x0, x867, x963); + fiat_p521_addcarryx_u32(&x999, &x1000, x998, x901, x965); + fiat_p521_addcarryx_u32(&x1001, &x1002, x1000, x903, x967); + fiat_p521_addcarryx_u32(&x1003, &x1004, x1002, x905, x969); + fiat_p521_addcarryx_u32(&x1005, &x1006, x1004, x907, x971); + fiat_p521_addcarryx_u32(&x1007, &x1008, x1006, x909, x973); + fiat_p521_addcarryx_u32(&x1009, &x1010, x1008, x911, x975); + fiat_p521_addcarryx_u32(&x1011, &x1012, x1010, x913, x977); + fiat_p521_addcarryx_u32(&x1013, &x1014, x1012, x915, x979); + fiat_p521_addcarryx_u32(&x1015, &x1016, x1014, x917, x981); + fiat_p521_addcarryx_u32(&x1017, &x1018, x1016, x919, x983); + fiat_p521_addcarryx_u32(&x1019, &x1020, x1018, x921, x985); + fiat_p521_addcarryx_u32(&x1021, &x1022, x1020, x923, x987); + fiat_p521_addcarryx_u32(&x1023, &x1024, x1022, x925, x989); + fiat_p521_addcarryx_u32(&x1025, &x1026, x1024, x927, x991); + fiat_p521_addcarryx_u32(&x1027, &x1028, x1026, x929, x993); + fiat_p521_addcarryx_u32(&x1029, &x1030, x1028, (x930 + (x898 + (x864 + x800))), x995); + fiat_p521_mulx_u32(&x1031, &x1032, (arg1[9]), UINT16_C(0x4000)); + fiat_p521_addcarryx_u32(&x1033, &x1034, 0x0, x1001, x1031); + fiat_p521_addcarryx_u32(&x1035, &x1036, x1034, x1003, x1032); + fiat_p521_addcarryx_u32(&x1037, &x1038, x1036, x1005, 0x0); + fiat_p521_addcarryx_u32(&x1039, &x1040, x1038, x1007, 0x0); + fiat_p521_addcarryx_u32(&x1041, &x1042, x1040, x1009, 0x0); + fiat_p521_addcarryx_u32(&x1043, &x1044, x1042, x1011, 0x0); + fiat_p521_addcarryx_u32(&x1045, &x1046, x1044, x1013, 0x0); + fiat_p521_addcarryx_u32(&x1047, &x1048, x1046, x1015, 0x0); + fiat_p521_addcarryx_u32(&x1049, &x1050, x1048, x1017, 0x0); + fiat_p521_addcarryx_u32(&x1051, &x1052, x1050, x1019, 0x0); + fiat_p521_addcarryx_u32(&x1053, &x1054, x1052, x1021, 0x0); + fiat_p521_addcarryx_u32(&x1055, &x1056, x1054, x1023, 0x0); + fiat_p521_addcarryx_u32(&x1057, &x1058, x1056, x1025, 0x0); + fiat_p521_addcarryx_u32(&x1059, &x1060, x1058, x1027, 0x0); + fiat_p521_addcarryx_u32(&x1061, &x1062, x1060, x1029, 0x0); + fiat_p521_mulx_u32(&x1063, &x1064, x999, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1065, &x1066, x999, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1067, &x1068, x999, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1069, &x1070, x999, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1071, &x1072, x999, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1073, &x1074, x999, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1075, &x1076, x999, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1077, &x1078, x999, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1079, &x1080, x999, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1081, &x1082, x999, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1083, &x1084, x999, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1085, &x1086, x999, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1087, &x1088, x999, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1089, &x1090, x999, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1091, &x1092, x999, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1093, &x1094, x999, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1095, &x1096, x999, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1097, &x1098, 0x0, x1096, x1093); + fiat_p521_addcarryx_u32(&x1099, &x1100, x1098, x1094, x1091); + fiat_p521_addcarryx_u32(&x1101, &x1102, x1100, x1092, x1089); + fiat_p521_addcarryx_u32(&x1103, &x1104, x1102, x1090, x1087); + fiat_p521_addcarryx_u32(&x1105, &x1106, x1104, x1088, x1085); + fiat_p521_addcarryx_u32(&x1107, &x1108, x1106, x1086, x1083); + fiat_p521_addcarryx_u32(&x1109, &x1110, x1108, x1084, x1081); + fiat_p521_addcarryx_u32(&x1111, &x1112, x1110, x1082, x1079); + fiat_p521_addcarryx_u32(&x1113, &x1114, x1112, x1080, x1077); + fiat_p521_addcarryx_u32(&x1115, &x1116, x1114, x1078, x1075); + fiat_p521_addcarryx_u32(&x1117, &x1118, x1116, x1076, x1073); + fiat_p521_addcarryx_u32(&x1119, &x1120, x1118, x1074, x1071); + fiat_p521_addcarryx_u32(&x1121, &x1122, x1120, x1072, x1069); + fiat_p521_addcarryx_u32(&x1123, &x1124, x1122, x1070, x1067); + fiat_p521_addcarryx_u32(&x1125, &x1126, x1124, x1068, x1065); + fiat_p521_addcarryx_u32(&x1127, &x1128, x1126, x1066, x1063); + fiat_p521_addcarryx_u32(&x1129, &x1130, 0x0, x999, x1095); + fiat_p521_addcarryx_u32(&x1131, &x1132, x1130, x1033, x1097); + fiat_p521_addcarryx_u32(&x1133, &x1134, x1132, x1035, x1099); + fiat_p521_addcarryx_u32(&x1135, &x1136, x1134, x1037, x1101); + fiat_p521_addcarryx_u32(&x1137, &x1138, x1136, x1039, x1103); + fiat_p521_addcarryx_u32(&x1139, &x1140, x1138, x1041, x1105); + fiat_p521_addcarryx_u32(&x1141, &x1142, x1140, x1043, x1107); + fiat_p521_addcarryx_u32(&x1143, &x1144, x1142, x1045, x1109); + fiat_p521_addcarryx_u32(&x1145, &x1146, x1144, x1047, x1111); + fiat_p521_addcarryx_u32(&x1147, &x1148, x1146, x1049, x1113); + fiat_p521_addcarryx_u32(&x1149, &x1150, x1148, x1051, x1115); + fiat_p521_addcarryx_u32(&x1151, &x1152, x1150, x1053, x1117); + fiat_p521_addcarryx_u32(&x1153, &x1154, x1152, x1055, x1119); + fiat_p521_addcarryx_u32(&x1155, &x1156, x1154, x1057, x1121); + fiat_p521_addcarryx_u32(&x1157, &x1158, x1156, x1059, x1123); + fiat_p521_addcarryx_u32(&x1159, &x1160, x1158, x1061, x1125); + fiat_p521_addcarryx_u32(&x1161, &x1162, x1160, (x1062 + (x1030 + (x996 + x932))), x1127); + fiat_p521_mulx_u32(&x1163, &x1164, (arg1[10]), UINT16_C(0x4000)); + fiat_p521_addcarryx_u32(&x1165, &x1166, 0x0, x1133, x1163); + fiat_p521_addcarryx_u32(&x1167, &x1168, x1166, x1135, x1164); + fiat_p521_addcarryx_u32(&x1169, &x1170, x1168, x1137, 0x0); + fiat_p521_addcarryx_u32(&x1171, &x1172, x1170, x1139, 0x0); + fiat_p521_addcarryx_u32(&x1173, &x1174, x1172, x1141, 0x0); + fiat_p521_addcarryx_u32(&x1175, &x1176, x1174, x1143, 0x0); + fiat_p521_addcarryx_u32(&x1177, &x1178, x1176, x1145, 0x0); + fiat_p521_addcarryx_u32(&x1179, &x1180, x1178, x1147, 0x0); + fiat_p521_addcarryx_u32(&x1181, &x1182, x1180, x1149, 0x0); + fiat_p521_addcarryx_u32(&x1183, &x1184, x1182, x1151, 0x0); + fiat_p521_addcarryx_u32(&x1185, &x1186, x1184, x1153, 0x0); + fiat_p521_addcarryx_u32(&x1187, &x1188, x1186, x1155, 0x0); + fiat_p521_addcarryx_u32(&x1189, &x1190, x1188, x1157, 0x0); + fiat_p521_addcarryx_u32(&x1191, &x1192, x1190, x1159, 0x0); + fiat_p521_addcarryx_u32(&x1193, &x1194, x1192, x1161, 0x0); + fiat_p521_mulx_u32(&x1195, &x1196, x1131, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1197, &x1198, x1131, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1199, &x1200, x1131, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1201, &x1202, x1131, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1203, &x1204, x1131, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1205, &x1206, x1131, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1207, &x1208, x1131, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1209, &x1210, x1131, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1211, &x1212, x1131, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1213, &x1214, x1131, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1215, &x1216, x1131, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1217, &x1218, x1131, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1219, &x1220, x1131, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1221, &x1222, x1131, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1223, &x1224, x1131, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1225, &x1226, x1131, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1227, &x1228, x1131, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1229, &x1230, 0x0, x1228, x1225); + fiat_p521_addcarryx_u32(&x1231, &x1232, x1230, x1226, x1223); + fiat_p521_addcarryx_u32(&x1233, &x1234, x1232, x1224, x1221); + fiat_p521_addcarryx_u32(&x1235, &x1236, x1234, x1222, x1219); + fiat_p521_addcarryx_u32(&x1237, &x1238, x1236, x1220, x1217); + fiat_p521_addcarryx_u32(&x1239, &x1240, x1238, x1218, x1215); + fiat_p521_addcarryx_u32(&x1241, &x1242, x1240, x1216, x1213); + fiat_p521_addcarryx_u32(&x1243, &x1244, x1242, x1214, x1211); + fiat_p521_addcarryx_u32(&x1245, &x1246, x1244, x1212, x1209); + fiat_p521_addcarryx_u32(&x1247, &x1248, x1246, x1210, x1207); + fiat_p521_addcarryx_u32(&x1249, &x1250, x1248, x1208, x1205); + fiat_p521_addcarryx_u32(&x1251, &x1252, x1250, x1206, x1203); + fiat_p521_addcarryx_u32(&x1253, &x1254, x1252, x1204, x1201); + fiat_p521_addcarryx_u32(&x1255, &x1256, x1254, x1202, x1199); + fiat_p521_addcarryx_u32(&x1257, &x1258, x1256, x1200, x1197); + fiat_p521_addcarryx_u32(&x1259, &x1260, x1258, x1198, x1195); + fiat_p521_addcarryx_u32(&x1261, &x1262, 0x0, x1131, x1227); + fiat_p521_addcarryx_u32(&x1263, &x1264, x1262, x1165, x1229); + fiat_p521_addcarryx_u32(&x1265, &x1266, x1264, x1167, x1231); + fiat_p521_addcarryx_u32(&x1267, &x1268, x1266, x1169, x1233); + fiat_p521_addcarryx_u32(&x1269, &x1270, x1268, x1171, x1235); + fiat_p521_addcarryx_u32(&x1271, &x1272, x1270, x1173, x1237); + fiat_p521_addcarryx_u32(&x1273, &x1274, x1272, x1175, x1239); + fiat_p521_addcarryx_u32(&x1275, &x1276, x1274, x1177, x1241); + fiat_p521_addcarryx_u32(&x1277, &x1278, x1276, x1179, x1243); + fiat_p521_addcarryx_u32(&x1279, &x1280, x1278, x1181, x1245); + fiat_p521_addcarryx_u32(&x1281, &x1282, x1280, x1183, x1247); + fiat_p521_addcarryx_u32(&x1283, &x1284, x1282, x1185, x1249); + fiat_p521_addcarryx_u32(&x1285, &x1286, x1284, x1187, x1251); + fiat_p521_addcarryx_u32(&x1287, &x1288, x1286, x1189, x1253); + fiat_p521_addcarryx_u32(&x1289, &x1290, x1288, x1191, x1255); + fiat_p521_addcarryx_u32(&x1291, &x1292, x1290, x1193, x1257); + fiat_p521_addcarryx_u32(&x1293, &x1294, x1292, (x1194 + (x1162 + (x1128 + x1064))), x1259); + fiat_p521_mulx_u32(&x1295, &x1296, (arg1[11]), UINT16_C(0x4000)); + fiat_p521_addcarryx_u32(&x1297, &x1298, 0x0, x1265, x1295); + fiat_p521_addcarryx_u32(&x1299, &x1300, x1298, x1267, x1296); + fiat_p521_addcarryx_u32(&x1301, &x1302, x1300, x1269, 0x0); + fiat_p521_addcarryx_u32(&x1303, &x1304, x1302, x1271, 0x0); + fiat_p521_addcarryx_u32(&x1305, &x1306, x1304, x1273, 0x0); + fiat_p521_addcarryx_u32(&x1307, &x1308, x1306, x1275, 0x0); + fiat_p521_addcarryx_u32(&x1309, &x1310, x1308, x1277, 0x0); + fiat_p521_addcarryx_u32(&x1311, &x1312, x1310, x1279, 0x0); + fiat_p521_addcarryx_u32(&x1313, &x1314, x1312, x1281, 0x0); + fiat_p521_addcarryx_u32(&x1315, &x1316, x1314, x1283, 0x0); + fiat_p521_addcarryx_u32(&x1317, &x1318, x1316, x1285, 0x0); + fiat_p521_addcarryx_u32(&x1319, &x1320, x1318, x1287, 0x0); + fiat_p521_addcarryx_u32(&x1321, &x1322, x1320, x1289, 0x0); + fiat_p521_addcarryx_u32(&x1323, &x1324, x1322, x1291, 0x0); + fiat_p521_addcarryx_u32(&x1325, &x1326, x1324, x1293, 0x0); + fiat_p521_mulx_u32(&x1327, &x1328, x1263, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1329, &x1330, x1263, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1331, &x1332, x1263, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1333, &x1334, x1263, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1335, &x1336, x1263, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1337, &x1338, x1263, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1339, &x1340, x1263, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1341, &x1342, x1263, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1343, &x1344, x1263, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1345, &x1346, x1263, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1347, &x1348, x1263, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1349, &x1350, x1263, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1351, &x1352, x1263, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1353, &x1354, x1263, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1355, &x1356, x1263, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1357, &x1358, x1263, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1359, &x1360, x1263, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1361, &x1362, 0x0, x1360, x1357); + fiat_p521_addcarryx_u32(&x1363, &x1364, x1362, x1358, x1355); + fiat_p521_addcarryx_u32(&x1365, &x1366, x1364, x1356, x1353); + fiat_p521_addcarryx_u32(&x1367, &x1368, x1366, x1354, x1351); + fiat_p521_addcarryx_u32(&x1369, &x1370, x1368, x1352, x1349); + fiat_p521_addcarryx_u32(&x1371, &x1372, x1370, x1350, x1347); + fiat_p521_addcarryx_u32(&x1373, &x1374, x1372, x1348, x1345); + fiat_p521_addcarryx_u32(&x1375, &x1376, x1374, x1346, x1343); + fiat_p521_addcarryx_u32(&x1377, &x1378, x1376, x1344, x1341); + fiat_p521_addcarryx_u32(&x1379, &x1380, x1378, x1342, x1339); + fiat_p521_addcarryx_u32(&x1381, &x1382, x1380, x1340, x1337); + fiat_p521_addcarryx_u32(&x1383, &x1384, x1382, x1338, x1335); + fiat_p521_addcarryx_u32(&x1385, &x1386, x1384, x1336, x1333); + fiat_p521_addcarryx_u32(&x1387, &x1388, x1386, x1334, x1331); + fiat_p521_addcarryx_u32(&x1389, &x1390, x1388, x1332, x1329); + fiat_p521_addcarryx_u32(&x1391, &x1392, x1390, x1330, x1327); + fiat_p521_addcarryx_u32(&x1393, &x1394, 0x0, x1263, x1359); + fiat_p521_addcarryx_u32(&x1395, &x1396, x1394, x1297, x1361); + fiat_p521_addcarryx_u32(&x1397, &x1398, x1396, x1299, x1363); + fiat_p521_addcarryx_u32(&x1399, &x1400, x1398, x1301, x1365); + fiat_p521_addcarryx_u32(&x1401, &x1402, x1400, x1303, x1367); + fiat_p521_addcarryx_u32(&x1403, &x1404, x1402, x1305, x1369); + fiat_p521_addcarryx_u32(&x1405, &x1406, x1404, x1307, x1371); + fiat_p521_addcarryx_u32(&x1407, &x1408, x1406, x1309, x1373); + fiat_p521_addcarryx_u32(&x1409, &x1410, x1408, x1311, x1375); + fiat_p521_addcarryx_u32(&x1411, &x1412, x1410, x1313, x1377); + fiat_p521_addcarryx_u32(&x1413, &x1414, x1412, x1315, x1379); + fiat_p521_addcarryx_u32(&x1415, &x1416, x1414, x1317, x1381); + fiat_p521_addcarryx_u32(&x1417, &x1418, x1416, x1319, x1383); + fiat_p521_addcarryx_u32(&x1419, &x1420, x1418, x1321, x1385); + fiat_p521_addcarryx_u32(&x1421, &x1422, x1420, x1323, x1387); + fiat_p521_addcarryx_u32(&x1423, &x1424, x1422, x1325, x1389); + fiat_p521_addcarryx_u32(&x1425, &x1426, x1424, (x1326 + (x1294 + (x1260 + x1196))), x1391); + fiat_p521_mulx_u32(&x1427, &x1428, (arg1[12]), UINT16_C(0x4000)); + fiat_p521_addcarryx_u32(&x1429, &x1430, 0x0, x1397, x1427); + fiat_p521_addcarryx_u32(&x1431, &x1432, x1430, x1399, x1428); + fiat_p521_addcarryx_u32(&x1433, &x1434, x1432, x1401, 0x0); + fiat_p521_addcarryx_u32(&x1435, &x1436, x1434, x1403, 0x0); + fiat_p521_addcarryx_u32(&x1437, &x1438, x1436, x1405, 0x0); + fiat_p521_addcarryx_u32(&x1439, &x1440, x1438, x1407, 0x0); + fiat_p521_addcarryx_u32(&x1441, &x1442, x1440, x1409, 0x0); + fiat_p521_addcarryx_u32(&x1443, &x1444, x1442, x1411, 0x0); + fiat_p521_addcarryx_u32(&x1445, &x1446, x1444, x1413, 0x0); + fiat_p521_addcarryx_u32(&x1447, &x1448, x1446, x1415, 0x0); + fiat_p521_addcarryx_u32(&x1449, &x1450, x1448, x1417, 0x0); + fiat_p521_addcarryx_u32(&x1451, &x1452, x1450, x1419, 0x0); + fiat_p521_addcarryx_u32(&x1453, &x1454, x1452, x1421, 0x0); + fiat_p521_addcarryx_u32(&x1455, &x1456, x1454, x1423, 0x0); + fiat_p521_addcarryx_u32(&x1457, &x1458, x1456, x1425, 0x0); + fiat_p521_mulx_u32(&x1459, &x1460, x1395, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1461, &x1462, x1395, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1463, &x1464, x1395, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1465, &x1466, x1395, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1467, &x1468, x1395, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1469, &x1470, x1395, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1471, &x1472, x1395, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1473, &x1474, x1395, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1475, &x1476, x1395, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1477, &x1478, x1395, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1479, &x1480, x1395, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1481, &x1482, x1395, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1483, &x1484, x1395, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1485, &x1486, x1395, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1487, &x1488, x1395, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1489, &x1490, x1395, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1491, &x1492, x1395, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1493, &x1494, 0x0, x1492, x1489); + fiat_p521_addcarryx_u32(&x1495, &x1496, x1494, x1490, x1487); + fiat_p521_addcarryx_u32(&x1497, &x1498, x1496, x1488, x1485); + fiat_p521_addcarryx_u32(&x1499, &x1500, x1498, x1486, x1483); + fiat_p521_addcarryx_u32(&x1501, &x1502, x1500, x1484, x1481); + fiat_p521_addcarryx_u32(&x1503, &x1504, x1502, x1482, x1479); + fiat_p521_addcarryx_u32(&x1505, &x1506, x1504, x1480, x1477); + fiat_p521_addcarryx_u32(&x1507, &x1508, x1506, x1478, x1475); + fiat_p521_addcarryx_u32(&x1509, &x1510, x1508, x1476, x1473); + fiat_p521_addcarryx_u32(&x1511, &x1512, x1510, x1474, x1471); + fiat_p521_addcarryx_u32(&x1513, &x1514, x1512, x1472, x1469); + fiat_p521_addcarryx_u32(&x1515, &x1516, x1514, x1470, x1467); + fiat_p521_addcarryx_u32(&x1517, &x1518, x1516, x1468, x1465); + fiat_p521_addcarryx_u32(&x1519, &x1520, x1518, x1466, x1463); + fiat_p521_addcarryx_u32(&x1521, &x1522, x1520, x1464, x1461); + fiat_p521_addcarryx_u32(&x1523, &x1524, x1522, x1462, x1459); + fiat_p521_addcarryx_u32(&x1525, &x1526, 0x0, x1395, x1491); + fiat_p521_addcarryx_u32(&x1527, &x1528, x1526, x1429, x1493); + fiat_p521_addcarryx_u32(&x1529, &x1530, x1528, x1431, x1495); + fiat_p521_addcarryx_u32(&x1531, &x1532, x1530, x1433, x1497); + fiat_p521_addcarryx_u32(&x1533, &x1534, x1532, x1435, x1499); + fiat_p521_addcarryx_u32(&x1535, &x1536, x1534, x1437, x1501); + fiat_p521_addcarryx_u32(&x1537, &x1538, x1536, x1439, x1503); + fiat_p521_addcarryx_u32(&x1539, &x1540, x1538, x1441, x1505); + fiat_p521_addcarryx_u32(&x1541, &x1542, x1540, x1443, x1507); + fiat_p521_addcarryx_u32(&x1543, &x1544, x1542, x1445, x1509); + fiat_p521_addcarryx_u32(&x1545, &x1546, x1544, x1447, x1511); + fiat_p521_addcarryx_u32(&x1547, &x1548, x1546, x1449, x1513); + fiat_p521_addcarryx_u32(&x1549, &x1550, x1548, x1451, x1515); + fiat_p521_addcarryx_u32(&x1551, &x1552, x1550, x1453, x1517); + fiat_p521_addcarryx_u32(&x1553, &x1554, x1552, x1455, x1519); + fiat_p521_addcarryx_u32(&x1555, &x1556, x1554, x1457, x1521); + fiat_p521_addcarryx_u32(&x1557, &x1558, x1556, (x1458 + (x1426 + (x1392 + x1328))), x1523); + fiat_p521_mulx_u32(&x1559, &x1560, (arg1[13]), UINT16_C(0x4000)); + fiat_p521_addcarryx_u32(&x1561, &x1562, 0x0, x1529, x1559); + fiat_p521_addcarryx_u32(&x1563, &x1564, x1562, x1531, x1560); + fiat_p521_addcarryx_u32(&x1565, &x1566, x1564, x1533, 0x0); + fiat_p521_addcarryx_u32(&x1567, &x1568, x1566, x1535, 0x0); + fiat_p521_addcarryx_u32(&x1569, &x1570, x1568, x1537, 0x0); + fiat_p521_addcarryx_u32(&x1571, &x1572, x1570, x1539, 0x0); + fiat_p521_addcarryx_u32(&x1573, &x1574, x1572, x1541, 0x0); + fiat_p521_addcarryx_u32(&x1575, &x1576, x1574, x1543, 0x0); + fiat_p521_addcarryx_u32(&x1577, &x1578, x1576, x1545, 0x0); + fiat_p521_addcarryx_u32(&x1579, &x1580, x1578, x1547, 0x0); + fiat_p521_addcarryx_u32(&x1581, &x1582, x1580, x1549, 0x0); + fiat_p521_addcarryx_u32(&x1583, &x1584, x1582, x1551, 0x0); + fiat_p521_addcarryx_u32(&x1585, &x1586, x1584, x1553, 0x0); + fiat_p521_addcarryx_u32(&x1587, &x1588, x1586, x1555, 0x0); + fiat_p521_addcarryx_u32(&x1589, &x1590, x1588, x1557, 0x0); + fiat_p521_mulx_u32(&x1591, &x1592, x1527, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1593, &x1594, x1527, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1595, &x1596, x1527, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1597, &x1598, x1527, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1599, &x1600, x1527, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1601, &x1602, x1527, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1603, &x1604, x1527, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1605, &x1606, x1527, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1607, &x1608, x1527, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1609, &x1610, x1527, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1611, &x1612, x1527, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1613, &x1614, x1527, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1615, &x1616, x1527, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1617, &x1618, x1527, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1619, &x1620, x1527, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1621, &x1622, x1527, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1623, &x1624, x1527, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1625, &x1626, 0x0, x1624, x1621); + fiat_p521_addcarryx_u32(&x1627, &x1628, x1626, x1622, x1619); + fiat_p521_addcarryx_u32(&x1629, &x1630, x1628, x1620, x1617); + fiat_p521_addcarryx_u32(&x1631, &x1632, x1630, x1618, x1615); + fiat_p521_addcarryx_u32(&x1633, &x1634, x1632, x1616, x1613); + fiat_p521_addcarryx_u32(&x1635, &x1636, x1634, x1614, x1611); + fiat_p521_addcarryx_u32(&x1637, &x1638, x1636, x1612, x1609); + fiat_p521_addcarryx_u32(&x1639, &x1640, x1638, x1610, x1607); + fiat_p521_addcarryx_u32(&x1641, &x1642, x1640, x1608, x1605); + fiat_p521_addcarryx_u32(&x1643, &x1644, x1642, x1606, x1603); + fiat_p521_addcarryx_u32(&x1645, &x1646, x1644, x1604, x1601); + fiat_p521_addcarryx_u32(&x1647, &x1648, x1646, x1602, x1599); + fiat_p521_addcarryx_u32(&x1649, &x1650, x1648, x1600, x1597); + fiat_p521_addcarryx_u32(&x1651, &x1652, x1650, x1598, x1595); + fiat_p521_addcarryx_u32(&x1653, &x1654, x1652, x1596, x1593); + fiat_p521_addcarryx_u32(&x1655, &x1656, x1654, x1594, x1591); + fiat_p521_addcarryx_u32(&x1657, &x1658, 0x0, x1527, x1623); + fiat_p521_addcarryx_u32(&x1659, &x1660, x1658, x1561, x1625); + fiat_p521_addcarryx_u32(&x1661, &x1662, x1660, x1563, x1627); + fiat_p521_addcarryx_u32(&x1663, &x1664, x1662, x1565, x1629); + fiat_p521_addcarryx_u32(&x1665, &x1666, x1664, x1567, x1631); + fiat_p521_addcarryx_u32(&x1667, &x1668, x1666, x1569, x1633); + fiat_p521_addcarryx_u32(&x1669, &x1670, x1668, x1571, x1635); + fiat_p521_addcarryx_u32(&x1671, &x1672, x1670, x1573, x1637); + fiat_p521_addcarryx_u32(&x1673, &x1674, x1672, x1575, x1639); + fiat_p521_addcarryx_u32(&x1675, &x1676, x1674, x1577, x1641); + fiat_p521_addcarryx_u32(&x1677, &x1678, x1676, x1579, x1643); + fiat_p521_addcarryx_u32(&x1679, &x1680, x1678, x1581, x1645); + fiat_p521_addcarryx_u32(&x1681, &x1682, x1680, x1583, x1647); + fiat_p521_addcarryx_u32(&x1683, &x1684, x1682, x1585, x1649); + fiat_p521_addcarryx_u32(&x1685, &x1686, x1684, x1587, x1651); + fiat_p521_addcarryx_u32(&x1687, &x1688, x1686, x1589, x1653); + fiat_p521_addcarryx_u32(&x1689, &x1690, x1688, (x1590 + (x1558 + (x1524 + x1460))), x1655); + fiat_p521_mulx_u32(&x1691, &x1692, (arg1[14]), UINT16_C(0x4000)); + fiat_p521_addcarryx_u32(&x1693, &x1694, 0x0, x1661, x1691); + fiat_p521_addcarryx_u32(&x1695, &x1696, x1694, x1663, x1692); + fiat_p521_addcarryx_u32(&x1697, &x1698, x1696, x1665, 0x0); + fiat_p521_addcarryx_u32(&x1699, &x1700, x1698, x1667, 0x0); + fiat_p521_addcarryx_u32(&x1701, &x1702, x1700, x1669, 0x0); + fiat_p521_addcarryx_u32(&x1703, &x1704, x1702, x1671, 0x0); + fiat_p521_addcarryx_u32(&x1705, &x1706, x1704, x1673, 0x0); + fiat_p521_addcarryx_u32(&x1707, &x1708, x1706, x1675, 0x0); + fiat_p521_addcarryx_u32(&x1709, &x1710, x1708, x1677, 0x0); + fiat_p521_addcarryx_u32(&x1711, &x1712, x1710, x1679, 0x0); + fiat_p521_addcarryx_u32(&x1713, &x1714, x1712, x1681, 0x0); + fiat_p521_addcarryx_u32(&x1715, &x1716, x1714, x1683, 0x0); + fiat_p521_addcarryx_u32(&x1717, &x1718, x1716, x1685, 0x0); + fiat_p521_addcarryx_u32(&x1719, &x1720, x1718, x1687, 0x0); + fiat_p521_addcarryx_u32(&x1721, &x1722, x1720, x1689, 0x0); + fiat_p521_mulx_u32(&x1723, &x1724, x1659, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1725, &x1726, x1659, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1727, &x1728, x1659, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1729, &x1730, x1659, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1731, &x1732, x1659, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1733, &x1734, x1659, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1735, &x1736, x1659, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1737, &x1738, x1659, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1739, &x1740, x1659, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1741, &x1742, x1659, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1743, &x1744, x1659, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1745, &x1746, x1659, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1747, &x1748, x1659, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1749, &x1750, x1659, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1751, &x1752, x1659, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1753, &x1754, x1659, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1755, &x1756, x1659, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1757, &x1758, 0x0, x1756, x1753); + fiat_p521_addcarryx_u32(&x1759, &x1760, x1758, x1754, x1751); + fiat_p521_addcarryx_u32(&x1761, &x1762, x1760, x1752, x1749); + fiat_p521_addcarryx_u32(&x1763, &x1764, x1762, x1750, x1747); + fiat_p521_addcarryx_u32(&x1765, &x1766, x1764, x1748, x1745); + fiat_p521_addcarryx_u32(&x1767, &x1768, x1766, x1746, x1743); + fiat_p521_addcarryx_u32(&x1769, &x1770, x1768, x1744, x1741); + fiat_p521_addcarryx_u32(&x1771, &x1772, x1770, x1742, x1739); + fiat_p521_addcarryx_u32(&x1773, &x1774, x1772, x1740, x1737); + fiat_p521_addcarryx_u32(&x1775, &x1776, x1774, x1738, x1735); + fiat_p521_addcarryx_u32(&x1777, &x1778, x1776, x1736, x1733); + fiat_p521_addcarryx_u32(&x1779, &x1780, x1778, x1734, x1731); + fiat_p521_addcarryx_u32(&x1781, &x1782, x1780, x1732, x1729); + fiat_p521_addcarryx_u32(&x1783, &x1784, x1782, x1730, x1727); + fiat_p521_addcarryx_u32(&x1785, &x1786, x1784, x1728, x1725); + fiat_p521_addcarryx_u32(&x1787, &x1788, x1786, x1726, x1723); + fiat_p521_addcarryx_u32(&x1789, &x1790, 0x0, x1659, x1755); + fiat_p521_addcarryx_u32(&x1791, &x1792, x1790, x1693, x1757); + fiat_p521_addcarryx_u32(&x1793, &x1794, x1792, x1695, x1759); + fiat_p521_addcarryx_u32(&x1795, &x1796, x1794, x1697, x1761); + fiat_p521_addcarryx_u32(&x1797, &x1798, x1796, x1699, x1763); + fiat_p521_addcarryx_u32(&x1799, &x1800, x1798, x1701, x1765); + fiat_p521_addcarryx_u32(&x1801, &x1802, x1800, x1703, x1767); + fiat_p521_addcarryx_u32(&x1803, &x1804, x1802, x1705, x1769); + fiat_p521_addcarryx_u32(&x1805, &x1806, x1804, x1707, x1771); + fiat_p521_addcarryx_u32(&x1807, &x1808, x1806, x1709, x1773); + fiat_p521_addcarryx_u32(&x1809, &x1810, x1808, x1711, x1775); + fiat_p521_addcarryx_u32(&x1811, &x1812, x1810, x1713, x1777); + fiat_p521_addcarryx_u32(&x1813, &x1814, x1812, x1715, x1779); + fiat_p521_addcarryx_u32(&x1815, &x1816, x1814, x1717, x1781); + fiat_p521_addcarryx_u32(&x1817, &x1818, x1816, x1719, x1783); + fiat_p521_addcarryx_u32(&x1819, &x1820, x1818, x1721, x1785); + fiat_p521_addcarryx_u32(&x1821, &x1822, x1820, (x1722 + (x1690 + (x1656 + x1592))), x1787); + fiat_p521_mulx_u32(&x1823, &x1824, (arg1[15]), UINT16_C(0x4000)); + fiat_p521_addcarryx_u32(&x1825, &x1826, 0x0, x1793, x1823); + fiat_p521_addcarryx_u32(&x1827, &x1828, x1826, x1795, x1824); + fiat_p521_addcarryx_u32(&x1829, &x1830, x1828, x1797, 0x0); + fiat_p521_addcarryx_u32(&x1831, &x1832, x1830, x1799, 0x0); + fiat_p521_addcarryx_u32(&x1833, &x1834, x1832, x1801, 0x0); + fiat_p521_addcarryx_u32(&x1835, &x1836, x1834, x1803, 0x0); + fiat_p521_addcarryx_u32(&x1837, &x1838, x1836, x1805, 0x0); + fiat_p521_addcarryx_u32(&x1839, &x1840, x1838, x1807, 0x0); + fiat_p521_addcarryx_u32(&x1841, &x1842, x1840, x1809, 0x0); + fiat_p521_addcarryx_u32(&x1843, &x1844, x1842, x1811, 0x0); + fiat_p521_addcarryx_u32(&x1845, &x1846, x1844, x1813, 0x0); + fiat_p521_addcarryx_u32(&x1847, &x1848, x1846, x1815, 0x0); + fiat_p521_addcarryx_u32(&x1849, &x1850, x1848, x1817, 0x0); + fiat_p521_addcarryx_u32(&x1851, &x1852, x1850, x1819, 0x0); + fiat_p521_addcarryx_u32(&x1853, &x1854, x1852, x1821, 0x0); + fiat_p521_mulx_u32(&x1855, &x1856, x1791, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1857, &x1858, x1791, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1859, &x1860, x1791, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1861, &x1862, x1791, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1863, &x1864, x1791, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1865, &x1866, x1791, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1867, &x1868, x1791, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1869, &x1870, x1791, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1871, &x1872, x1791, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1873, &x1874, x1791, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1875, &x1876, x1791, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1877, &x1878, x1791, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1879, &x1880, x1791, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1881, &x1882, x1791, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1883, &x1884, x1791, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1885, &x1886, x1791, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1887, &x1888, x1791, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x1889, &x1890, 0x0, x1888, x1885); + fiat_p521_addcarryx_u32(&x1891, &x1892, x1890, x1886, x1883); + fiat_p521_addcarryx_u32(&x1893, &x1894, x1892, x1884, x1881); + fiat_p521_addcarryx_u32(&x1895, &x1896, x1894, x1882, x1879); + fiat_p521_addcarryx_u32(&x1897, &x1898, x1896, x1880, x1877); + fiat_p521_addcarryx_u32(&x1899, &x1900, x1898, x1878, x1875); + fiat_p521_addcarryx_u32(&x1901, &x1902, x1900, x1876, x1873); + fiat_p521_addcarryx_u32(&x1903, &x1904, x1902, x1874, x1871); + fiat_p521_addcarryx_u32(&x1905, &x1906, x1904, x1872, x1869); + fiat_p521_addcarryx_u32(&x1907, &x1908, x1906, x1870, x1867); + fiat_p521_addcarryx_u32(&x1909, &x1910, x1908, x1868, x1865); + fiat_p521_addcarryx_u32(&x1911, &x1912, x1910, x1866, x1863); + fiat_p521_addcarryx_u32(&x1913, &x1914, x1912, x1864, x1861); + fiat_p521_addcarryx_u32(&x1915, &x1916, x1914, x1862, x1859); + fiat_p521_addcarryx_u32(&x1917, &x1918, x1916, x1860, x1857); + fiat_p521_addcarryx_u32(&x1919, &x1920, x1918, x1858, x1855); + fiat_p521_addcarryx_u32(&x1921, &x1922, 0x0, x1791, x1887); + fiat_p521_addcarryx_u32(&x1923, &x1924, x1922, x1825, x1889); + fiat_p521_addcarryx_u32(&x1925, &x1926, x1924, x1827, x1891); + fiat_p521_addcarryx_u32(&x1927, &x1928, x1926, x1829, x1893); + fiat_p521_addcarryx_u32(&x1929, &x1930, x1928, x1831, x1895); + fiat_p521_addcarryx_u32(&x1931, &x1932, x1930, x1833, x1897); + fiat_p521_addcarryx_u32(&x1933, &x1934, x1932, x1835, x1899); + fiat_p521_addcarryx_u32(&x1935, &x1936, x1934, x1837, x1901); + fiat_p521_addcarryx_u32(&x1937, &x1938, x1936, x1839, x1903); + fiat_p521_addcarryx_u32(&x1939, &x1940, x1938, x1841, x1905); + fiat_p521_addcarryx_u32(&x1941, &x1942, x1940, x1843, x1907); + fiat_p521_addcarryx_u32(&x1943, &x1944, x1942, x1845, x1909); + fiat_p521_addcarryx_u32(&x1945, &x1946, x1944, x1847, x1911); + fiat_p521_addcarryx_u32(&x1947, &x1948, x1946, x1849, x1913); + fiat_p521_addcarryx_u32(&x1949, &x1950, x1948, x1851, x1915); + fiat_p521_addcarryx_u32(&x1951, &x1952, x1950, x1853, x1917); + fiat_p521_addcarryx_u32(&x1953, &x1954, x1952, (x1854 + (x1822 + (x1788 + x1724))), x1919); + fiat_p521_mulx_u32(&x1955, &x1956, (arg1[16]), UINT16_C(0x4000)); + fiat_p521_addcarryx_u32(&x1957, &x1958, 0x0, x1925, x1955); + fiat_p521_addcarryx_u32(&x1959, &x1960, x1958, x1927, x1956); + fiat_p521_addcarryx_u32(&x1961, &x1962, x1960, x1929, 0x0); + fiat_p521_addcarryx_u32(&x1963, &x1964, x1962, x1931, 0x0); + fiat_p521_addcarryx_u32(&x1965, &x1966, x1964, x1933, 0x0); + fiat_p521_addcarryx_u32(&x1967, &x1968, x1966, x1935, 0x0); + fiat_p521_addcarryx_u32(&x1969, &x1970, x1968, x1937, 0x0); + fiat_p521_addcarryx_u32(&x1971, &x1972, x1970, x1939, 0x0); + fiat_p521_addcarryx_u32(&x1973, &x1974, x1972, x1941, 0x0); + fiat_p521_addcarryx_u32(&x1975, &x1976, x1974, x1943, 0x0); + fiat_p521_addcarryx_u32(&x1977, &x1978, x1976, x1945, 0x0); + fiat_p521_addcarryx_u32(&x1979, &x1980, x1978, x1947, 0x0); + fiat_p521_addcarryx_u32(&x1981, &x1982, x1980, x1949, 0x0); + fiat_p521_addcarryx_u32(&x1983, &x1984, x1982, x1951, 0x0); + fiat_p521_addcarryx_u32(&x1985, &x1986, x1984, x1953, 0x0); + fiat_p521_mulx_u32(&x1987, &x1988, x1923, UINT16_C(0x1ff)); + fiat_p521_mulx_u32(&x1989, &x1990, x1923, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1991, &x1992, x1923, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1993, &x1994, x1923, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1995, &x1996, x1923, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1997, &x1998, x1923, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x1999, &x2000, x1923, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2001, &x2002, x1923, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2003, &x2004, x1923, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2005, &x2006, x1923, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2007, &x2008, x1923, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2009, &x2010, x1923, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2011, &x2012, x1923, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2013, &x2014, x1923, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2015, &x2016, x1923, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2017, &x2018, x1923, UINT32_C(0xffffffff)); + fiat_p521_mulx_u32(&x2019, &x2020, x1923, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x2021, &x2022, 0x0, x2020, x2017); + fiat_p521_addcarryx_u32(&x2023, &x2024, x2022, x2018, x2015); + fiat_p521_addcarryx_u32(&x2025, &x2026, x2024, x2016, x2013); + fiat_p521_addcarryx_u32(&x2027, &x2028, x2026, x2014, x2011); + fiat_p521_addcarryx_u32(&x2029, &x2030, x2028, x2012, x2009); + fiat_p521_addcarryx_u32(&x2031, &x2032, x2030, x2010, x2007); + fiat_p521_addcarryx_u32(&x2033, &x2034, x2032, x2008, x2005); + fiat_p521_addcarryx_u32(&x2035, &x2036, x2034, x2006, x2003); + fiat_p521_addcarryx_u32(&x2037, &x2038, x2036, x2004, x2001); + fiat_p521_addcarryx_u32(&x2039, &x2040, x2038, x2002, x1999); + fiat_p521_addcarryx_u32(&x2041, &x2042, x2040, x2000, x1997); + fiat_p521_addcarryx_u32(&x2043, &x2044, x2042, x1998, x1995); + fiat_p521_addcarryx_u32(&x2045, &x2046, x2044, x1996, x1993); + fiat_p521_addcarryx_u32(&x2047, &x2048, x2046, x1994, x1991); + fiat_p521_addcarryx_u32(&x2049, &x2050, x2048, x1992, x1989); + fiat_p521_addcarryx_u32(&x2051, &x2052, x2050, x1990, x1987); + fiat_p521_addcarryx_u32(&x2053, &x2054, 0x0, x1923, x2019); + fiat_p521_addcarryx_u32(&x2055, &x2056, x2054, x1957, x2021); + fiat_p521_addcarryx_u32(&x2057, &x2058, x2056, x1959, x2023); + fiat_p521_addcarryx_u32(&x2059, &x2060, x2058, x1961, x2025); + fiat_p521_addcarryx_u32(&x2061, &x2062, x2060, x1963, x2027); + fiat_p521_addcarryx_u32(&x2063, &x2064, x2062, x1965, x2029); + fiat_p521_addcarryx_u32(&x2065, &x2066, x2064, x1967, x2031); + fiat_p521_addcarryx_u32(&x2067, &x2068, x2066, x1969, x2033); + fiat_p521_addcarryx_u32(&x2069, &x2070, x2068, x1971, x2035); + fiat_p521_addcarryx_u32(&x2071, &x2072, x2070, x1973, x2037); + fiat_p521_addcarryx_u32(&x2073, &x2074, x2072, x1975, x2039); + fiat_p521_addcarryx_u32(&x2075, &x2076, x2074, x1977, x2041); + fiat_p521_addcarryx_u32(&x2077, &x2078, x2076, x1979, x2043); + fiat_p521_addcarryx_u32(&x2079, &x2080, x2078, x1981, x2045); + fiat_p521_addcarryx_u32(&x2081, &x2082, x2080, x1983, x2047); + fiat_p521_addcarryx_u32(&x2083, &x2084, x2082, x1985, x2049); + fiat_p521_addcarryx_u32(&x2085, &x2086, x2084, (x1986 + (x1954 + (x1920 + x1856))), x2051); + x2087 = (x2086 + (x2052 + x1988)); + fiat_p521_subborrowx_u32(&x2088, &x2089, 0x0, x2055, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2090, &x2091, x2089, x2057, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2092, &x2093, x2091, x2059, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2094, &x2095, x2093, x2061, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2096, &x2097, x2095, x2063, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2098, &x2099, x2097, x2065, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2100, &x2101, x2099, x2067, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2102, &x2103, x2101, x2069, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2104, &x2105, x2103, x2071, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2106, &x2107, x2105, x2073, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2108, &x2109, x2107, x2075, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2110, &x2111, x2109, x2077, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2112, &x2113, x2111, x2079, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2114, &x2115, x2113, x2081, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2116, &x2117, x2115, x2083, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2118, &x2119, x2117, x2085, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x2120, &x2121, x2119, x2087, UINT16_C(0x1ff)); + fiat_p521_subborrowx_u32(&x2122, &x2123, x2121, 0x0, 0x0); + fiat_p521_cmovznz_u32(&x2124, x2123, x2088, x2055); + fiat_p521_cmovznz_u32(&x2125, x2123, x2090, x2057); + fiat_p521_cmovznz_u32(&x2126, x2123, x2092, x2059); + fiat_p521_cmovznz_u32(&x2127, x2123, x2094, x2061); + fiat_p521_cmovznz_u32(&x2128, x2123, x2096, x2063); + fiat_p521_cmovznz_u32(&x2129, x2123, x2098, x2065); + fiat_p521_cmovznz_u32(&x2130, x2123, x2100, x2067); + fiat_p521_cmovznz_u32(&x2131, x2123, x2102, x2069); + fiat_p521_cmovznz_u32(&x2132, x2123, x2104, x2071); + fiat_p521_cmovznz_u32(&x2133, x2123, x2106, x2073); + fiat_p521_cmovznz_u32(&x2134, x2123, x2108, x2075); + fiat_p521_cmovznz_u32(&x2135, x2123, x2110, x2077); + fiat_p521_cmovznz_u32(&x2136, x2123, x2112, x2079); + fiat_p521_cmovznz_u32(&x2137, x2123, x2114, x2081); + fiat_p521_cmovznz_u32(&x2138, x2123, x2116, x2083); + fiat_p521_cmovznz_u32(&x2139, x2123, x2118, x2085); + fiat_p521_cmovznz_u32(&x2140, x2123, x2120, x2087); + out1[0] = x2124; + out1[1] = x2125; + out1[2] = x2126; + out1[3] = x2127; + out1[4] = x2128; + out1[5] = x2129; + out1[6] = x2130; + out1[7] = x2131; + out1[8] = x2132; + out1[9] = x2133; + out1[10] = x2134; + out1[11] = x2135; + out1[12] = x2136; + out1[13] = x2137; + out1[14] = x2138; + out1[15] = x2139; + out1[16] = x2140; +} + +/* + * The function fiat_p521_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + */ +static void fiat_p521_nonzero(uint32_t* out1, const uint32_t arg1[17]) { + uint32_t x1; + x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | ((arg1[4]) | ((arg1[5]) | ((arg1[6]) | ((arg1[7]) | ((arg1[8]) | ((arg1[9]) | ((arg1[10]) | ((arg1[11]) | ((arg1[12]) | ((arg1[13]) | ((arg1[14]) | ((arg1[15]) | (arg1[16]))))))))))))))))); + *out1 = x1; +} + +/* + * The function fiat_p521_selectznz is a multi-limb conditional select. + * Postconditions: + * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p521_selectznz(uint32_t out1[17], fiat_p521_uint1 arg1, const uint32_t arg2[17], const uint32_t arg3[17]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + fiat_p521_cmovznz_u32(&x1, arg1, (arg2[0]), (arg3[0])); + fiat_p521_cmovznz_u32(&x2, arg1, (arg2[1]), (arg3[1])); + fiat_p521_cmovznz_u32(&x3, arg1, (arg2[2]), (arg3[2])); + fiat_p521_cmovznz_u32(&x4, arg1, (arg2[3]), (arg3[3])); + fiat_p521_cmovznz_u32(&x5, arg1, (arg2[4]), (arg3[4])); + fiat_p521_cmovznz_u32(&x6, arg1, (arg2[5]), (arg3[5])); + fiat_p521_cmovznz_u32(&x7, arg1, (arg2[6]), (arg3[6])); + fiat_p521_cmovznz_u32(&x8, arg1, (arg2[7]), (arg3[7])); + fiat_p521_cmovznz_u32(&x9, arg1, (arg2[8]), (arg3[8])); + fiat_p521_cmovznz_u32(&x10, arg1, (arg2[9]), (arg3[9])); + fiat_p521_cmovznz_u32(&x11, arg1, (arg2[10]), (arg3[10])); + fiat_p521_cmovznz_u32(&x12, arg1, (arg2[11]), (arg3[11])); + fiat_p521_cmovznz_u32(&x13, arg1, (arg2[12]), (arg3[12])); + fiat_p521_cmovznz_u32(&x14, arg1, (arg2[13]), (arg3[13])); + fiat_p521_cmovznz_u32(&x15, arg1, (arg2[14]), (arg3[14])); + fiat_p521_cmovznz_u32(&x16, arg1, (arg2[15]), (arg3[15])); + fiat_p521_cmovznz_u32(&x17, arg1, (arg2[16]), (arg3[16])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; + out1[6] = x7; + out1[7] = x8; + out1[8] = x9; + out1[9] = x10; + out1[10] = x11; + out1[11] = x12; + out1[12] = x13; + out1[13] = x14; + out1[14] = x15; + out1[15] = x16; + out1[16] = x17; +} + +/* + * The function fiat_p521_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..65] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0x1ff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x1]] + */ +static void fiat_p521_to_bytes(uint8_t out1[66], const uint32_t arg1[17]) { + uint32_t x1; + uint32_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint8_t x18; + uint32_t x19; + uint8_t x20; + uint32_t x21; + uint8_t x22; + uint8_t x23; + uint8_t x24; + uint32_t x25; + uint8_t x26; + uint32_t x27; + uint8_t x28; + uint8_t x29; + uint8_t x30; + uint32_t x31; + uint8_t x32; + uint32_t x33; + uint8_t x34; + uint8_t x35; + uint8_t x36; + uint32_t x37; + uint8_t x38; + uint32_t x39; + uint8_t x40; + uint8_t x41; + uint8_t x42; + uint32_t x43; + uint8_t x44; + uint32_t x45; + uint8_t x46; + uint8_t x47; + uint8_t x48; + uint32_t x49; + uint8_t x50; + uint32_t x51; + uint8_t x52; + uint8_t x53; + uint8_t x54; + uint32_t x55; + uint8_t x56; + uint32_t x57; + uint8_t x58; + uint8_t x59; + uint8_t x60; + uint32_t x61; + uint8_t x62; + uint32_t x63; + uint8_t x64; + uint8_t x65; + uint8_t x66; + uint32_t x67; + uint8_t x68; + uint32_t x69; + uint8_t x70; + uint8_t x71; + uint8_t x72; + uint32_t x73; + uint8_t x74; + uint32_t x75; + uint8_t x76; + uint8_t x77; + uint8_t x78; + uint32_t x79; + uint8_t x80; + uint32_t x81; + uint8_t x82; + uint8_t x83; + uint8_t x84; + uint32_t x85; + uint8_t x86; + uint32_t x87; + uint8_t x88; + uint8_t x89; + uint8_t x90; + uint32_t x91; + uint8_t x92; + uint32_t x93; + uint8_t x94; + uint8_t x95; + uint8_t x96; + uint32_t x97; + uint8_t x98; + uint32_t x99; + uint8_t x100; + uint8_t x101; + uint8_t x102; + uint32_t x103; + uint8_t x104; + uint32_t x105; + uint8_t x106; + uint8_t x107; + uint8_t x108; + uint32_t x109; + uint8_t x110; + uint32_t x111; + uint8_t x112; + uint8_t x113; + uint8_t x114; + fiat_p521_uint1 x115; + x1 = (arg1[16]); + x2 = (arg1[15]); + x3 = (arg1[14]); + x4 = (arg1[13]); + x5 = (arg1[12]); + x6 = (arg1[11]); + x7 = (arg1[10]); + x8 = (arg1[9]); + x9 = (arg1[8]); + x10 = (arg1[7]); + x11 = (arg1[6]); + x12 = (arg1[5]); + x13 = (arg1[4]); + x14 = (arg1[3]); + x15 = (arg1[2]); + x16 = (arg1[1]); + x17 = (arg1[0]); + x18 = (uint8_t)(x17 & UINT8_C(0xff)); + x19 = (x17 >> 8); + x20 = (uint8_t)(x19 & UINT8_C(0xff)); + x21 = (x19 >> 8); + x22 = (uint8_t)(x21 & UINT8_C(0xff)); + x23 = (uint8_t)(x21 >> 8); + x24 = (uint8_t)(x16 & UINT8_C(0xff)); + x25 = (x16 >> 8); + x26 = (uint8_t)(x25 & UINT8_C(0xff)); + x27 = (x25 >> 8); + x28 = (uint8_t)(x27 & UINT8_C(0xff)); + x29 = (uint8_t)(x27 >> 8); + x30 = (uint8_t)(x15 & UINT8_C(0xff)); + x31 = (x15 >> 8); + x32 = (uint8_t)(x31 & UINT8_C(0xff)); + x33 = (x31 >> 8); + x34 = (uint8_t)(x33 & UINT8_C(0xff)); + x35 = (uint8_t)(x33 >> 8); + x36 = (uint8_t)(x14 & UINT8_C(0xff)); + x37 = (x14 >> 8); + x38 = (uint8_t)(x37 & UINT8_C(0xff)); + x39 = (x37 >> 8); + x40 = (uint8_t)(x39 & UINT8_C(0xff)); + x41 = (uint8_t)(x39 >> 8); + x42 = (uint8_t)(x13 & UINT8_C(0xff)); + x43 = (x13 >> 8); + x44 = (uint8_t)(x43 & UINT8_C(0xff)); + x45 = (x43 >> 8); + x46 = (uint8_t)(x45 & UINT8_C(0xff)); + x47 = (uint8_t)(x45 >> 8); + x48 = (uint8_t)(x12 & UINT8_C(0xff)); + x49 = (x12 >> 8); + x50 = (uint8_t)(x49 & UINT8_C(0xff)); + x51 = (x49 >> 8); + x52 = (uint8_t)(x51 & UINT8_C(0xff)); + x53 = (uint8_t)(x51 >> 8); + x54 = (uint8_t)(x11 & UINT8_C(0xff)); + x55 = (x11 >> 8); + x56 = (uint8_t)(x55 & UINT8_C(0xff)); + x57 = (x55 >> 8); + x58 = (uint8_t)(x57 & UINT8_C(0xff)); + x59 = (uint8_t)(x57 >> 8); + x60 = (uint8_t)(x10 & UINT8_C(0xff)); + x61 = (x10 >> 8); + x62 = (uint8_t)(x61 & UINT8_C(0xff)); + x63 = (x61 >> 8); + x64 = (uint8_t)(x63 & UINT8_C(0xff)); + x65 = (uint8_t)(x63 >> 8); + x66 = (uint8_t)(x9 & UINT8_C(0xff)); + x67 = (x9 >> 8); + x68 = (uint8_t)(x67 & UINT8_C(0xff)); + x69 = (x67 >> 8); + x70 = (uint8_t)(x69 & UINT8_C(0xff)); + x71 = (uint8_t)(x69 >> 8); + x72 = (uint8_t)(x8 & UINT8_C(0xff)); + x73 = (x8 >> 8); + x74 = (uint8_t)(x73 & UINT8_C(0xff)); + x75 = (x73 >> 8); + x76 = (uint8_t)(x75 & UINT8_C(0xff)); + x77 = (uint8_t)(x75 >> 8); + x78 = (uint8_t)(x7 & UINT8_C(0xff)); + x79 = (x7 >> 8); + x80 = (uint8_t)(x79 & UINT8_C(0xff)); + x81 = (x79 >> 8); + x82 = (uint8_t)(x81 & UINT8_C(0xff)); + x83 = (uint8_t)(x81 >> 8); + x84 = (uint8_t)(x6 & UINT8_C(0xff)); + x85 = (x6 >> 8); + x86 = (uint8_t)(x85 & UINT8_C(0xff)); + x87 = (x85 >> 8); + x88 = (uint8_t)(x87 & UINT8_C(0xff)); + x89 = (uint8_t)(x87 >> 8); + x90 = (uint8_t)(x5 & UINT8_C(0xff)); + x91 = (x5 >> 8); + x92 = (uint8_t)(x91 & UINT8_C(0xff)); + x93 = (x91 >> 8); + x94 = (uint8_t)(x93 & UINT8_C(0xff)); + x95 = (uint8_t)(x93 >> 8); + x96 = (uint8_t)(x4 & UINT8_C(0xff)); + x97 = (x4 >> 8); + x98 = (uint8_t)(x97 & UINT8_C(0xff)); + x99 = (x97 >> 8); + x100 = (uint8_t)(x99 & UINT8_C(0xff)); + x101 = (uint8_t)(x99 >> 8); + x102 = (uint8_t)(x3 & UINT8_C(0xff)); + x103 = (x3 >> 8); + x104 = (uint8_t)(x103 & UINT8_C(0xff)); + x105 = (x103 >> 8); + x106 = (uint8_t)(x105 & UINT8_C(0xff)); + x107 = (uint8_t)(x105 >> 8); + x108 = (uint8_t)(x2 & UINT8_C(0xff)); + x109 = (x2 >> 8); + x110 = (uint8_t)(x109 & UINT8_C(0xff)); + x111 = (x109 >> 8); + x112 = (uint8_t)(x111 & UINT8_C(0xff)); + x113 = (uint8_t)(x111 >> 8); + x114 = (uint8_t)(x1 & UINT8_C(0xff)); + x115 = (fiat_p521_uint1)(x1 >> 8); + out1[0] = x18; + out1[1] = x20; + out1[2] = x22; + out1[3] = x23; + out1[4] = x24; + out1[5] = x26; + out1[6] = x28; + out1[7] = x29; + out1[8] = x30; + out1[9] = x32; + out1[10] = x34; + out1[11] = x35; + out1[12] = x36; + out1[13] = x38; + out1[14] = x40; + out1[15] = x41; + out1[16] = x42; + out1[17] = x44; + out1[18] = x46; + out1[19] = x47; + out1[20] = x48; + out1[21] = x50; + out1[22] = x52; + out1[23] = x53; + out1[24] = x54; + out1[25] = x56; + out1[26] = x58; + out1[27] = x59; + out1[28] = x60; + out1[29] = x62; + out1[30] = x64; + out1[31] = x65; + out1[32] = x66; + out1[33] = x68; + out1[34] = x70; + out1[35] = x71; + out1[36] = x72; + out1[37] = x74; + out1[38] = x76; + out1[39] = x77; + out1[40] = x78; + out1[41] = x80; + out1[42] = x82; + out1[43] = x83; + out1[44] = x84; + out1[45] = x86; + out1[46] = x88; + out1[47] = x89; + out1[48] = x90; + out1[49] = x92; + out1[50] = x94; + out1[51] = x95; + out1[52] = x96; + out1[53] = x98; + out1[54] = x100; + out1[55] = x101; + out1[56] = x102; + out1[57] = x104; + out1[58] = x106; + out1[59] = x107; + out1[60] = x108; + out1[61] = x110; + out1[62] = x112; + out1[63] = x113; + out1[64] = x114; + out1[65] = x115; +} + +/* + * The function fiat_p521_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x1]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0x1ff]] + */ +static void fiat_p521_from_bytes(uint32_t out1[17], const uint8_t arg1[66]) { + uint32_t x1; + uint8_t x2; + uint32_t x3; + uint32_t x4; + uint32_t x5; + uint8_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint8_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint8_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint8_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint8_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + uint8_t x26; + uint32_t x27; + uint32_t x28; + uint32_t x29; + uint8_t x30; + uint32_t x31; + uint32_t x32; + uint32_t x33; + uint8_t x34; + uint32_t x35; + uint32_t x36; + uint32_t x37; + uint8_t x38; + uint32_t x39; + uint32_t x40; + uint32_t x41; + uint8_t x42; + uint32_t x43; + uint32_t x44; + uint32_t x45; + uint8_t x46; + uint32_t x47; + uint32_t x48; + uint32_t x49; + uint8_t x50; + uint32_t x51; + uint32_t x52; + uint32_t x53; + uint8_t x54; + uint32_t x55; + uint32_t x56; + uint32_t x57; + uint8_t x58; + uint32_t x59; + uint32_t x60; + uint32_t x61; + uint8_t x62; + uint32_t x63; + uint32_t x64; + uint32_t x65; + uint8_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + uint32_t x81; + uint32_t x82; + uint32_t x83; + uint32_t x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + uint32_t x88; + uint32_t x89; + uint32_t x90; + uint32_t x91; + uint32_t x92; + uint32_t x93; + uint32_t x94; + uint32_t x95; + uint32_t x96; + uint32_t x97; + uint32_t x98; + uint32_t x99; + uint32_t x100; + uint32_t x101; + uint32_t x102; + uint32_t x103; + uint32_t x104; + uint32_t x105; + uint32_t x106; + uint32_t x107; + uint32_t x108; + uint32_t x109; + uint32_t x110; + uint32_t x111; + uint32_t x112; + uint32_t x113; + uint32_t x114; + uint32_t x115; + x1 = ((uint32_t)(fiat_p521_uint1)(arg1[65]) << 8); + x2 = (arg1[64]); + x3 = ((uint32_t)(arg1[63]) << 24); + x4 = ((uint32_t)(arg1[62]) << 16); + x5 = ((uint32_t)(arg1[61]) << 8); + x6 = (arg1[60]); + x7 = ((uint32_t)(arg1[59]) << 24); + x8 = ((uint32_t)(arg1[58]) << 16); + x9 = ((uint32_t)(arg1[57]) << 8); + x10 = (arg1[56]); + x11 = ((uint32_t)(arg1[55]) << 24); + x12 = ((uint32_t)(arg1[54]) << 16); + x13 = ((uint32_t)(arg1[53]) << 8); + x14 = (arg1[52]); + x15 = ((uint32_t)(arg1[51]) << 24); + x16 = ((uint32_t)(arg1[50]) << 16); + x17 = ((uint32_t)(arg1[49]) << 8); + x18 = (arg1[48]); + x19 = ((uint32_t)(arg1[47]) << 24); + x20 = ((uint32_t)(arg1[46]) << 16); + x21 = ((uint32_t)(arg1[45]) << 8); + x22 = (arg1[44]); + x23 = ((uint32_t)(arg1[43]) << 24); + x24 = ((uint32_t)(arg1[42]) << 16); + x25 = ((uint32_t)(arg1[41]) << 8); + x26 = (arg1[40]); + x27 = ((uint32_t)(arg1[39]) << 24); + x28 = ((uint32_t)(arg1[38]) << 16); + x29 = ((uint32_t)(arg1[37]) << 8); + x30 = (arg1[36]); + x31 = ((uint32_t)(arg1[35]) << 24); + x32 = ((uint32_t)(arg1[34]) << 16); + x33 = ((uint32_t)(arg1[33]) << 8); + x34 = (arg1[32]); + x35 = ((uint32_t)(arg1[31]) << 24); + x36 = ((uint32_t)(arg1[30]) << 16); + x37 = ((uint32_t)(arg1[29]) << 8); + x38 = (arg1[28]); + x39 = ((uint32_t)(arg1[27]) << 24); + x40 = ((uint32_t)(arg1[26]) << 16); + x41 = ((uint32_t)(arg1[25]) << 8); + x42 = (arg1[24]); + x43 = ((uint32_t)(arg1[23]) << 24); + x44 = ((uint32_t)(arg1[22]) << 16); + x45 = ((uint32_t)(arg1[21]) << 8); + x46 = (arg1[20]); + x47 = ((uint32_t)(arg1[19]) << 24); + x48 = ((uint32_t)(arg1[18]) << 16); + x49 = ((uint32_t)(arg1[17]) << 8); + x50 = (arg1[16]); + x51 = ((uint32_t)(arg1[15]) << 24); + x52 = ((uint32_t)(arg1[14]) << 16); + x53 = ((uint32_t)(arg1[13]) << 8); + x54 = (arg1[12]); + x55 = ((uint32_t)(arg1[11]) << 24); + x56 = ((uint32_t)(arg1[10]) << 16); + x57 = ((uint32_t)(arg1[9]) << 8); + x58 = (arg1[8]); + x59 = ((uint32_t)(arg1[7]) << 24); + x60 = ((uint32_t)(arg1[6]) << 16); + x61 = ((uint32_t)(arg1[5]) << 8); + x62 = (arg1[4]); + x63 = ((uint32_t)(arg1[3]) << 24); + x64 = ((uint32_t)(arg1[2]) << 16); + x65 = ((uint32_t)(arg1[1]) << 8); + x66 = (arg1[0]); + x67 = (x65 + (uint32_t)x66); + x68 = (x64 + x67); + x69 = (x63 + x68); + x70 = (x61 + (uint32_t)x62); + x71 = (x60 + x70); + x72 = (x59 + x71); + x73 = (x57 + (uint32_t)x58); + x74 = (x56 + x73); + x75 = (x55 + x74); + x76 = (x53 + (uint32_t)x54); + x77 = (x52 + x76); + x78 = (x51 + x77); + x79 = (x49 + (uint32_t)x50); + x80 = (x48 + x79); + x81 = (x47 + x80); + x82 = (x45 + (uint32_t)x46); + x83 = (x44 + x82); + x84 = (x43 + x83); + x85 = (x41 + (uint32_t)x42); + x86 = (x40 + x85); + x87 = (x39 + x86); + x88 = (x37 + (uint32_t)x38); + x89 = (x36 + x88); + x90 = (x35 + x89); + x91 = (x33 + (uint32_t)x34); + x92 = (x32 + x91); + x93 = (x31 + x92); + x94 = (x29 + (uint32_t)x30); + x95 = (x28 + x94); + x96 = (x27 + x95); + x97 = (x25 + (uint32_t)x26); + x98 = (x24 + x97); + x99 = (x23 + x98); + x100 = (x21 + (uint32_t)x22); + x101 = (x20 + x100); + x102 = (x19 + x101); + x103 = (x17 + (uint32_t)x18); + x104 = (x16 + x103); + x105 = (x15 + x104); + x106 = (x13 + (uint32_t)x14); + x107 = (x12 + x106); + x108 = (x11 + x107); + x109 = (x9 + (uint32_t)x10); + x110 = (x8 + x109); + x111 = (x7 + x110); + x112 = (x5 + (uint32_t)x6); + x113 = (x4 + x112); + x114 = (x3 + x113); + x115 = (x1 + (uint32_t)x2); + out1[0] = x69; + out1[1] = x72; + out1[2] = x75; + out1[3] = x78; + out1[4] = x81; + out1[5] = x84; + out1[6] = x87; + out1[7] = x90; + out1[8] = x93; + out1[9] = x96; + out1[10] = x99; + out1[11] = x102; + out1[12] = x105; + out1[13] = x108; + out1[14] = x111; + out1[15] = x114; + out1[16] = x115; +} + +/* + * The function fiat_p521_set_one returns the field element one in the Montgomery domain. + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p521_set_one(uint32_t out1[17]) { + out1[0] = UINT32_C(0x800000); + out1[1] = 0x0; + out1[2] = 0x0; + out1[3] = 0x0; + out1[4] = 0x0; + out1[5] = 0x0; + out1[6] = 0x0; + out1[7] = 0x0; + out1[8] = 0x0; + out1[9] = 0x0; + out1[10] = 0x0; + out1[11] = 0x0; + out1[12] = 0x0; + out1[13] = 0x0; + out1[14] = 0x0; + out1[15] = 0x0; + out1[16] = 0x0; +} + +/* + * The function fiat_p521_msat returns the saturated represtation of the prime modulus. + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p521_msat(uint32_t out1[18]) { + out1[0] = UINT32_C(0xffffffff); + out1[1] = UINT32_C(0xffffffff); + out1[2] = UINT32_C(0xffffffff); + out1[3] = UINT32_C(0xffffffff); + out1[4] = UINT32_C(0xffffffff); + out1[5] = UINT32_C(0xffffffff); + out1[6] = UINT32_C(0xffffffff); + out1[7] = UINT32_C(0xffffffff); + out1[8] = UINT32_C(0xffffffff); + out1[9] = UINT32_C(0xffffffff); + out1[10] = UINT32_C(0xffffffff); + out1[11] = UINT32_C(0xffffffff); + out1[12] = UINT32_C(0xffffffff); + out1[13] = UINT32_C(0xffffffff); + out1[14] = UINT32_C(0xffffffff); + out1[15] = UINT32_C(0xffffffff); + out1[16] = UINT16_C(0x1ff); + out1[17] = 0x0; +} + +/* + * The function fiat_p521_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if (log2 m) + 1 < 46 then ⌊(49 * ((log2 m) + 1) + 80) / 17⌋ else ⌊(49 * ((log2 m) + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p521_divstep_precomp(uint32_t out1[17]) { + out1[0] = 0x0; + out1[1] = 0x0; + out1[2] = UINT32_C(0x20000); + out1[3] = 0x0; + out1[4] = 0x0; + out1[5] = 0x0; + out1[6] = 0x0; + out1[7] = 0x0; + out1[8] = 0x0; + out1[9] = 0x0; + out1[10] = 0x0; + out1[11] = 0x0; + out1[12] = 0x0; + out1[13] = 0x0; + out1[14] = 0x0; + out1[15] = 0x0; + out1[16] = 0x0; +} + +/* + * The function fiat_p521_divstep computes a divstep. + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffff] + * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg4: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * arg5: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffff] + * out2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out4: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + * out5: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] + */ +static void fiat_p521_divstep(uint32_t* out1, uint32_t out2[18], uint32_t out3[18], uint32_t out4[17], uint32_t out5[17], uint32_t arg1, const uint32_t arg2[18], const uint32_t arg3[18], const uint32_t arg4[17], const uint32_t arg5[17]) { + uint32_t x1; + fiat_p521_uint1 x2; + fiat_p521_uint1 x3; + uint32_t x4; + fiat_p521_uint1 x5; + uint32_t x6; + uint32_t x7; + uint32_t x8; + uint32_t x9; + uint32_t x10; + uint32_t x11; + uint32_t x12; + uint32_t x13; + uint32_t x14; + uint32_t x15; + uint32_t x16; + uint32_t x17; + uint32_t x18; + uint32_t x19; + uint32_t x20; + uint32_t x21; + uint32_t x22; + uint32_t x23; + uint32_t x24; + uint32_t x25; + fiat_p521_uint1 x26; + uint32_t x27; + fiat_p521_uint1 x28; + uint32_t x29; + fiat_p521_uint1 x30; + uint32_t x31; + fiat_p521_uint1 x32; + uint32_t x33; + fiat_p521_uint1 x34; + uint32_t x35; + fiat_p521_uint1 x36; + uint32_t x37; + fiat_p521_uint1 x38; + uint32_t x39; + fiat_p521_uint1 x40; + uint32_t x41; + fiat_p521_uint1 x42; + uint32_t x43; + fiat_p521_uint1 x44; + uint32_t x45; + fiat_p521_uint1 x46; + uint32_t x47; + fiat_p521_uint1 x48; + uint32_t x49; + fiat_p521_uint1 x50; + uint32_t x51; + fiat_p521_uint1 x52; + uint32_t x53; + fiat_p521_uint1 x54; + uint32_t x55; + fiat_p521_uint1 x56; + uint32_t x57; + fiat_p521_uint1 x58; + uint32_t x59; + fiat_p521_uint1 x60; + uint32_t x61; + uint32_t x62; + uint32_t x63; + uint32_t x64; + uint32_t x65; + uint32_t x66; + uint32_t x67; + uint32_t x68; + uint32_t x69; + uint32_t x70; + uint32_t x71; + uint32_t x72; + uint32_t x73; + uint32_t x74; + uint32_t x75; + uint32_t x76; + uint32_t x77; + uint32_t x78; + uint32_t x79; + uint32_t x80; + uint32_t x81; + uint32_t x82; + uint32_t x83; + uint32_t x84; + uint32_t x85; + uint32_t x86; + uint32_t x87; + uint32_t x88; + uint32_t x89; + uint32_t x90; + uint32_t x91; + uint32_t x92; + uint32_t x93; + uint32_t x94; + uint32_t x95; + uint32_t x96; + fiat_p521_uint1 x97; + uint32_t x98; + fiat_p521_uint1 x99; + uint32_t x100; + fiat_p521_uint1 x101; + uint32_t x102; + fiat_p521_uint1 x103; + uint32_t x104; + fiat_p521_uint1 x105; + uint32_t x106; + fiat_p521_uint1 x107; + uint32_t x108; + fiat_p521_uint1 x109; + uint32_t x110; + fiat_p521_uint1 x111; + uint32_t x112; + fiat_p521_uint1 x113; + uint32_t x114; + fiat_p521_uint1 x115; + uint32_t x116; + fiat_p521_uint1 x117; + uint32_t x118; + fiat_p521_uint1 x119; + uint32_t x120; + fiat_p521_uint1 x121; + uint32_t x122; + fiat_p521_uint1 x123; + uint32_t x124; + fiat_p521_uint1 x125; + uint32_t x126; + fiat_p521_uint1 x127; + uint32_t x128; + fiat_p521_uint1 x129; + uint32_t x130; + fiat_p521_uint1 x131; + uint32_t x132; + fiat_p521_uint1 x133; + uint32_t x134; + fiat_p521_uint1 x135; + uint32_t x136; + fiat_p521_uint1 x137; + uint32_t x138; + fiat_p521_uint1 x139; + uint32_t x140; + fiat_p521_uint1 x141; + uint32_t x142; + fiat_p521_uint1 x143; + uint32_t x144; + fiat_p521_uint1 x145; + uint32_t x146; + fiat_p521_uint1 x147; + uint32_t x148; + fiat_p521_uint1 x149; + uint32_t x150; + fiat_p521_uint1 x151; + uint32_t x152; + fiat_p521_uint1 x153; + uint32_t x154; + fiat_p521_uint1 x155; + uint32_t x156; + fiat_p521_uint1 x157; + uint32_t x158; + fiat_p521_uint1 x159; + uint32_t x160; + fiat_p521_uint1 x161; + uint32_t x162; + fiat_p521_uint1 x163; + uint32_t x164; + fiat_p521_uint1 x165; + uint32_t x166; + uint32_t x167; + uint32_t x168; + uint32_t x169; + uint32_t x170; + uint32_t x171; + uint32_t x172; + uint32_t x173; + uint32_t x174; + uint32_t x175; + uint32_t x176; + uint32_t x177; + uint32_t x178; + uint32_t x179; + uint32_t x180; + uint32_t x181; + uint32_t x182; + uint32_t x183; + fiat_p521_uint1 x184; + uint32_t x185; + fiat_p521_uint1 x186; + uint32_t x187; + fiat_p521_uint1 x188; + uint32_t x189; + fiat_p521_uint1 x190; + uint32_t x191; + fiat_p521_uint1 x192; + uint32_t x193; + fiat_p521_uint1 x194; + uint32_t x195; + fiat_p521_uint1 x196; + uint32_t x197; + fiat_p521_uint1 x198; + uint32_t x199; + fiat_p521_uint1 x200; + uint32_t x201; + fiat_p521_uint1 x202; + uint32_t x203; + fiat_p521_uint1 x204; + uint32_t x205; + fiat_p521_uint1 x206; + uint32_t x207; + fiat_p521_uint1 x208; + uint32_t x209; + fiat_p521_uint1 x210; + uint32_t x211; + fiat_p521_uint1 x212; + uint32_t x213; + fiat_p521_uint1 x214; + uint32_t x215; + fiat_p521_uint1 x216; + uint32_t x217; + uint32_t x218; + fiat_p521_uint1 x219; + uint32_t x220; + fiat_p521_uint1 x221; + uint32_t x222; + fiat_p521_uint1 x223; + uint32_t x224; + fiat_p521_uint1 x225; + uint32_t x226; + fiat_p521_uint1 x227; + uint32_t x228; + fiat_p521_uint1 x229; + uint32_t x230; + fiat_p521_uint1 x231; + uint32_t x232; + fiat_p521_uint1 x233; + uint32_t x234; + fiat_p521_uint1 x235; + uint32_t x236; + fiat_p521_uint1 x237; + uint32_t x238; + fiat_p521_uint1 x239; + uint32_t x240; + fiat_p521_uint1 x241; + uint32_t x242; + fiat_p521_uint1 x243; + uint32_t x244; + fiat_p521_uint1 x245; + uint32_t x246; + fiat_p521_uint1 x247; + uint32_t x248; + fiat_p521_uint1 x249; + uint32_t x250; + fiat_p521_uint1 x251; + uint32_t x252; + uint32_t x253; + uint32_t x254; + uint32_t x255; + uint32_t x256; + uint32_t x257; + uint32_t x258; + uint32_t x259; + uint32_t x260; + uint32_t x261; + uint32_t x262; + uint32_t x263; + uint32_t x264; + uint32_t x265; + uint32_t x266; + uint32_t x267; + uint32_t x268; + fiat_p521_uint1 x269; + uint32_t x270; + uint32_t x271; + uint32_t x272; + uint32_t x273; + uint32_t x274; + uint32_t x275; + uint32_t x276; + uint32_t x277; + uint32_t x278; + uint32_t x279; + uint32_t x280; + uint32_t x281; + uint32_t x282; + uint32_t x283; + uint32_t x284; + uint32_t x285; + uint32_t x286; + uint32_t x287; + uint32_t x288; + fiat_p521_uint1 x289; + uint32_t x290; + fiat_p521_uint1 x291; + uint32_t x292; + fiat_p521_uint1 x293; + uint32_t x294; + fiat_p521_uint1 x295; + uint32_t x296; + fiat_p521_uint1 x297; + uint32_t x298; + fiat_p521_uint1 x299; + uint32_t x300; + fiat_p521_uint1 x301; + uint32_t x302; + fiat_p521_uint1 x303; + uint32_t x304; + fiat_p521_uint1 x305; + uint32_t x306; + fiat_p521_uint1 x307; + uint32_t x308; + fiat_p521_uint1 x309; + uint32_t x310; + fiat_p521_uint1 x311; + uint32_t x312; + fiat_p521_uint1 x313; + uint32_t x314; + fiat_p521_uint1 x315; + uint32_t x316; + fiat_p521_uint1 x317; + uint32_t x318; + fiat_p521_uint1 x319; + uint32_t x320; + fiat_p521_uint1 x321; + uint32_t x322; + fiat_p521_uint1 x323; + uint32_t x324; + uint32_t x325; + uint32_t x326; + uint32_t x327; + uint32_t x328; + uint32_t x329; + uint32_t x330; + uint32_t x331; + uint32_t x332; + uint32_t x333; + uint32_t x334; + uint32_t x335; + uint32_t x336; + uint32_t x337; + uint32_t x338; + uint32_t x339; + uint32_t x340; + uint32_t x341; + fiat_p521_uint1 x342; + uint32_t x343; + fiat_p521_uint1 x344; + uint32_t x345; + fiat_p521_uint1 x346; + uint32_t x347; + fiat_p521_uint1 x348; + uint32_t x349; + fiat_p521_uint1 x350; + uint32_t x351; + fiat_p521_uint1 x352; + uint32_t x353; + fiat_p521_uint1 x354; + uint32_t x355; + fiat_p521_uint1 x356; + uint32_t x357; + fiat_p521_uint1 x358; + uint32_t x359; + fiat_p521_uint1 x360; + uint32_t x361; + fiat_p521_uint1 x362; + uint32_t x363; + fiat_p521_uint1 x364; + uint32_t x365; + fiat_p521_uint1 x366; + uint32_t x367; + fiat_p521_uint1 x368; + uint32_t x369; + fiat_p521_uint1 x370; + uint32_t x371; + fiat_p521_uint1 x372; + uint32_t x373; + fiat_p521_uint1 x374; + uint32_t x375; + fiat_p521_uint1 x376; + uint32_t x377; + fiat_p521_uint1 x378; + uint32_t x379; + fiat_p521_uint1 x380; + uint32_t x381; + fiat_p521_uint1 x382; + uint32_t x383; + fiat_p521_uint1 x384; + uint32_t x385; + fiat_p521_uint1 x386; + uint32_t x387; + fiat_p521_uint1 x388; + uint32_t x389; + fiat_p521_uint1 x390; + uint32_t x391; + fiat_p521_uint1 x392; + uint32_t x393; + fiat_p521_uint1 x394; + uint32_t x395; + fiat_p521_uint1 x396; + uint32_t x397; + fiat_p521_uint1 x398; + uint32_t x399; + fiat_p521_uint1 x400; + uint32_t x401; + fiat_p521_uint1 x402; + uint32_t x403; + fiat_p521_uint1 x404; + uint32_t x405; + fiat_p521_uint1 x406; + uint32_t x407; + fiat_p521_uint1 x408; + uint32_t x409; + fiat_p521_uint1 x410; + uint32_t x411; + fiat_p521_uint1 x412; + uint32_t x413; + uint32_t x414; + uint32_t x415; + uint32_t x416; + uint32_t x417; + uint32_t x418; + uint32_t x419; + uint32_t x420; + uint32_t x421; + uint32_t x422; + uint32_t x423; + uint32_t x424; + uint32_t x425; + uint32_t x426; + uint32_t x427; + uint32_t x428; + uint32_t x429; + uint32_t x430; + uint32_t x431; + uint32_t x432; + uint32_t x433; + uint32_t x434; + uint32_t x435; + uint32_t x436; + uint32_t x437; + uint32_t x438; + uint32_t x439; + uint32_t x440; + uint32_t x441; + uint32_t x442; + uint32_t x443; + uint32_t x444; + uint32_t x445; + uint32_t x446; + uint32_t x447; + uint32_t x448; + uint32_t x449; + uint32_t x450; + uint32_t x451; + uint32_t x452; + uint32_t x453; + uint32_t x454; + uint32_t x455; + uint32_t x456; + uint32_t x457; + uint32_t x458; + uint32_t x459; + uint32_t x460; + uint32_t x461; + uint32_t x462; + uint32_t x463; + uint32_t x464; + fiat_p521_addcarryx_u32(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_p521_uint1)((fiat_p521_uint1)(x1 >> 31) & (fiat_p521_uint1)((arg3[0]) & 0x1)); + fiat_p521_addcarryx_u32(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_p521_cmovznz_u32(&x6, x3, arg1, x4); + fiat_p521_cmovznz_u32(&x7, x3, (arg2[0]), (arg3[0])); + fiat_p521_cmovznz_u32(&x8, x3, (arg2[1]), (arg3[1])); + fiat_p521_cmovznz_u32(&x9, x3, (arg2[2]), (arg3[2])); + fiat_p521_cmovznz_u32(&x10, x3, (arg2[3]), (arg3[3])); + fiat_p521_cmovznz_u32(&x11, x3, (arg2[4]), (arg3[4])); + fiat_p521_cmovznz_u32(&x12, x3, (arg2[5]), (arg3[5])); + fiat_p521_cmovznz_u32(&x13, x3, (arg2[6]), (arg3[6])); + fiat_p521_cmovznz_u32(&x14, x3, (arg2[7]), (arg3[7])); + fiat_p521_cmovznz_u32(&x15, x3, (arg2[8]), (arg3[8])); + fiat_p521_cmovznz_u32(&x16, x3, (arg2[9]), (arg3[9])); + fiat_p521_cmovznz_u32(&x17, x3, (arg2[10]), (arg3[10])); + fiat_p521_cmovznz_u32(&x18, x3, (arg2[11]), (arg3[11])); + fiat_p521_cmovznz_u32(&x19, x3, (arg2[12]), (arg3[12])); + fiat_p521_cmovznz_u32(&x20, x3, (arg2[13]), (arg3[13])); + fiat_p521_cmovznz_u32(&x21, x3, (arg2[14]), (arg3[14])); + fiat_p521_cmovznz_u32(&x22, x3, (arg2[15]), (arg3[15])); + fiat_p521_cmovznz_u32(&x23, x3, (arg2[16]), (arg3[16])); + fiat_p521_cmovznz_u32(&x24, x3, (arg2[17]), (arg3[17])); + fiat_p521_addcarryx_u32(&x25, &x26, 0x0, 0x1, (~(arg2[0]))); + fiat_p521_addcarryx_u32(&x27, &x28, x26, 0x0, (~(arg2[1]))); + fiat_p521_addcarryx_u32(&x29, &x30, x28, 0x0, (~(arg2[2]))); + fiat_p521_addcarryx_u32(&x31, &x32, x30, 0x0, (~(arg2[3]))); + fiat_p521_addcarryx_u32(&x33, &x34, x32, 0x0, (~(arg2[4]))); + fiat_p521_addcarryx_u32(&x35, &x36, x34, 0x0, (~(arg2[5]))); + fiat_p521_addcarryx_u32(&x37, &x38, x36, 0x0, (~(arg2[6]))); + fiat_p521_addcarryx_u32(&x39, &x40, x38, 0x0, (~(arg2[7]))); + fiat_p521_addcarryx_u32(&x41, &x42, x40, 0x0, (~(arg2[8]))); + fiat_p521_addcarryx_u32(&x43, &x44, x42, 0x0, (~(arg2[9]))); + fiat_p521_addcarryx_u32(&x45, &x46, x44, 0x0, (~(arg2[10]))); + fiat_p521_addcarryx_u32(&x47, &x48, x46, 0x0, (~(arg2[11]))); + fiat_p521_addcarryx_u32(&x49, &x50, x48, 0x0, (~(arg2[12]))); + fiat_p521_addcarryx_u32(&x51, &x52, x50, 0x0, (~(arg2[13]))); + fiat_p521_addcarryx_u32(&x53, &x54, x52, 0x0, (~(arg2[14]))); + fiat_p521_addcarryx_u32(&x55, &x56, x54, 0x0, (~(arg2[15]))); + fiat_p521_addcarryx_u32(&x57, &x58, x56, 0x0, (~(arg2[16]))); + fiat_p521_addcarryx_u32(&x59, &x60, x58, 0x0, (~(arg2[17]))); + fiat_p521_cmovznz_u32(&x61, x3, (arg3[0]), x25); + fiat_p521_cmovznz_u32(&x62, x3, (arg3[1]), x27); + fiat_p521_cmovznz_u32(&x63, x3, (arg3[2]), x29); + fiat_p521_cmovznz_u32(&x64, x3, (arg3[3]), x31); + fiat_p521_cmovznz_u32(&x65, x3, (arg3[4]), x33); + fiat_p521_cmovznz_u32(&x66, x3, (arg3[5]), x35); + fiat_p521_cmovznz_u32(&x67, x3, (arg3[6]), x37); + fiat_p521_cmovznz_u32(&x68, x3, (arg3[7]), x39); + fiat_p521_cmovznz_u32(&x69, x3, (arg3[8]), x41); + fiat_p521_cmovznz_u32(&x70, x3, (arg3[9]), x43); + fiat_p521_cmovznz_u32(&x71, x3, (arg3[10]), x45); + fiat_p521_cmovznz_u32(&x72, x3, (arg3[11]), x47); + fiat_p521_cmovznz_u32(&x73, x3, (arg3[12]), x49); + fiat_p521_cmovznz_u32(&x74, x3, (arg3[13]), x51); + fiat_p521_cmovznz_u32(&x75, x3, (arg3[14]), x53); + fiat_p521_cmovznz_u32(&x76, x3, (arg3[15]), x55); + fiat_p521_cmovznz_u32(&x77, x3, (arg3[16]), x57); + fiat_p521_cmovznz_u32(&x78, x3, (arg3[17]), x59); + fiat_p521_cmovznz_u32(&x79, x3, (arg4[0]), (arg5[0])); + fiat_p521_cmovznz_u32(&x80, x3, (arg4[1]), (arg5[1])); + fiat_p521_cmovznz_u32(&x81, x3, (arg4[2]), (arg5[2])); + fiat_p521_cmovznz_u32(&x82, x3, (arg4[3]), (arg5[3])); + fiat_p521_cmovznz_u32(&x83, x3, (arg4[4]), (arg5[4])); + fiat_p521_cmovznz_u32(&x84, x3, (arg4[5]), (arg5[5])); + fiat_p521_cmovznz_u32(&x85, x3, (arg4[6]), (arg5[6])); + fiat_p521_cmovznz_u32(&x86, x3, (arg4[7]), (arg5[7])); + fiat_p521_cmovznz_u32(&x87, x3, (arg4[8]), (arg5[8])); + fiat_p521_cmovznz_u32(&x88, x3, (arg4[9]), (arg5[9])); + fiat_p521_cmovznz_u32(&x89, x3, (arg4[10]), (arg5[10])); + fiat_p521_cmovznz_u32(&x90, x3, (arg4[11]), (arg5[11])); + fiat_p521_cmovznz_u32(&x91, x3, (arg4[12]), (arg5[12])); + fiat_p521_cmovznz_u32(&x92, x3, (arg4[13]), (arg5[13])); + fiat_p521_cmovznz_u32(&x93, x3, (arg4[14]), (arg5[14])); + fiat_p521_cmovznz_u32(&x94, x3, (arg4[15]), (arg5[15])); + fiat_p521_cmovznz_u32(&x95, x3, (arg4[16]), (arg5[16])); + fiat_p521_addcarryx_u32(&x96, &x97, 0x0, x79, x79); + fiat_p521_addcarryx_u32(&x98, &x99, x97, x80, x80); + fiat_p521_addcarryx_u32(&x100, &x101, x99, x81, x81); + fiat_p521_addcarryx_u32(&x102, &x103, x101, x82, x82); + fiat_p521_addcarryx_u32(&x104, &x105, x103, x83, x83); + fiat_p521_addcarryx_u32(&x106, &x107, x105, x84, x84); + fiat_p521_addcarryx_u32(&x108, &x109, x107, x85, x85); + fiat_p521_addcarryx_u32(&x110, &x111, x109, x86, x86); + fiat_p521_addcarryx_u32(&x112, &x113, x111, x87, x87); + fiat_p521_addcarryx_u32(&x114, &x115, x113, x88, x88); + fiat_p521_addcarryx_u32(&x116, &x117, x115, x89, x89); + fiat_p521_addcarryx_u32(&x118, &x119, x117, x90, x90); + fiat_p521_addcarryx_u32(&x120, &x121, x119, x91, x91); + fiat_p521_addcarryx_u32(&x122, &x123, x121, x92, x92); + fiat_p521_addcarryx_u32(&x124, &x125, x123, x93, x93); + fiat_p521_addcarryx_u32(&x126, &x127, x125, x94, x94); + fiat_p521_addcarryx_u32(&x128, &x129, x127, x95, x95); + fiat_p521_subborrowx_u32(&x130, &x131, 0x0, x96, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x132, &x133, x131, x98, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x134, &x135, x133, x100, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x136, &x137, x135, x102, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x138, &x139, x137, x104, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x140, &x141, x139, x106, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x142, &x143, x141, x108, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x144, &x145, x143, x110, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x146, &x147, x145, x112, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x148, &x149, x147, x114, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x150, &x151, x149, x116, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x152, &x153, x151, x118, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x154, &x155, x153, x120, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x156, &x157, x155, x122, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x158, &x159, x157, x124, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x160, &x161, x159, x126, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x162, &x163, x161, x128, UINT16_C(0x1ff)); + fiat_p521_subborrowx_u32(&x164, &x165, x163, x129, 0x0); + x166 = (arg4[16]); + x167 = (arg4[15]); + x168 = (arg4[14]); + x169 = (arg4[13]); + x170 = (arg4[12]); + x171 = (arg4[11]); + x172 = (arg4[10]); + x173 = (arg4[9]); + x174 = (arg4[8]); + x175 = (arg4[7]); + x176 = (arg4[6]); + x177 = (arg4[5]); + x178 = (arg4[4]); + x179 = (arg4[3]); + x180 = (arg4[2]); + x181 = (arg4[1]); + x182 = (arg4[0]); + fiat_p521_subborrowx_u32(&x183, &x184, 0x0, 0x0, x182); + fiat_p521_subborrowx_u32(&x185, &x186, x184, 0x0, x181); + fiat_p521_subborrowx_u32(&x187, &x188, x186, 0x0, x180); + fiat_p521_subborrowx_u32(&x189, &x190, x188, 0x0, x179); + fiat_p521_subborrowx_u32(&x191, &x192, x190, 0x0, x178); + fiat_p521_subborrowx_u32(&x193, &x194, x192, 0x0, x177); + fiat_p521_subborrowx_u32(&x195, &x196, x194, 0x0, x176); + fiat_p521_subborrowx_u32(&x197, &x198, x196, 0x0, x175); + fiat_p521_subborrowx_u32(&x199, &x200, x198, 0x0, x174); + fiat_p521_subborrowx_u32(&x201, &x202, x200, 0x0, x173); + fiat_p521_subborrowx_u32(&x203, &x204, x202, 0x0, x172); + fiat_p521_subborrowx_u32(&x205, &x206, x204, 0x0, x171); + fiat_p521_subborrowx_u32(&x207, &x208, x206, 0x0, x170); + fiat_p521_subborrowx_u32(&x209, &x210, x208, 0x0, x169); + fiat_p521_subborrowx_u32(&x211, &x212, x210, 0x0, x168); + fiat_p521_subborrowx_u32(&x213, &x214, x212, 0x0, x167); + fiat_p521_subborrowx_u32(&x215, &x216, x214, 0x0, x166); + fiat_p521_cmovznz_u32(&x217, x216, 0x0, UINT32_C(0xffffffff)); + fiat_p521_addcarryx_u32(&x218, &x219, 0x0, x183, x217); + fiat_p521_addcarryx_u32(&x220, &x221, x219, x185, x217); + fiat_p521_addcarryx_u32(&x222, &x223, x221, x187, x217); + fiat_p521_addcarryx_u32(&x224, &x225, x223, x189, x217); + fiat_p521_addcarryx_u32(&x226, &x227, x225, x191, x217); + fiat_p521_addcarryx_u32(&x228, &x229, x227, x193, x217); + fiat_p521_addcarryx_u32(&x230, &x231, x229, x195, x217); + fiat_p521_addcarryx_u32(&x232, &x233, x231, x197, x217); + fiat_p521_addcarryx_u32(&x234, &x235, x233, x199, x217); + fiat_p521_addcarryx_u32(&x236, &x237, x235, x201, x217); + fiat_p521_addcarryx_u32(&x238, &x239, x237, x203, x217); + fiat_p521_addcarryx_u32(&x240, &x241, x239, x205, x217); + fiat_p521_addcarryx_u32(&x242, &x243, x241, x207, x217); + fiat_p521_addcarryx_u32(&x244, &x245, x243, x209, x217); + fiat_p521_addcarryx_u32(&x246, &x247, x245, x211, x217); + fiat_p521_addcarryx_u32(&x248, &x249, x247, x213, x217); + fiat_p521_addcarryx_u32(&x250, &x251, x249, x215, (x217 & UINT16_C(0x1ff))); + fiat_p521_cmovznz_u32(&x252, x3, (arg5[0]), x218); + fiat_p521_cmovznz_u32(&x253, x3, (arg5[1]), x220); + fiat_p521_cmovznz_u32(&x254, x3, (arg5[2]), x222); + fiat_p521_cmovznz_u32(&x255, x3, (arg5[3]), x224); + fiat_p521_cmovznz_u32(&x256, x3, (arg5[4]), x226); + fiat_p521_cmovznz_u32(&x257, x3, (arg5[5]), x228); + fiat_p521_cmovznz_u32(&x258, x3, (arg5[6]), x230); + fiat_p521_cmovznz_u32(&x259, x3, (arg5[7]), x232); + fiat_p521_cmovznz_u32(&x260, x3, (arg5[8]), x234); + fiat_p521_cmovznz_u32(&x261, x3, (arg5[9]), x236); + fiat_p521_cmovznz_u32(&x262, x3, (arg5[10]), x238); + fiat_p521_cmovznz_u32(&x263, x3, (arg5[11]), x240); + fiat_p521_cmovznz_u32(&x264, x3, (arg5[12]), x242); + fiat_p521_cmovznz_u32(&x265, x3, (arg5[13]), x244); + fiat_p521_cmovznz_u32(&x266, x3, (arg5[14]), x246); + fiat_p521_cmovznz_u32(&x267, x3, (arg5[15]), x248); + fiat_p521_cmovznz_u32(&x268, x3, (arg5[16]), x250); + x269 = (fiat_p521_uint1)(x61 & 0x1); + fiat_p521_cmovznz_u32(&x270, x269, 0x0, x7); + fiat_p521_cmovznz_u32(&x271, x269, 0x0, x8); + fiat_p521_cmovznz_u32(&x272, x269, 0x0, x9); + fiat_p521_cmovznz_u32(&x273, x269, 0x0, x10); + fiat_p521_cmovznz_u32(&x274, x269, 0x0, x11); + fiat_p521_cmovznz_u32(&x275, x269, 0x0, x12); + fiat_p521_cmovznz_u32(&x276, x269, 0x0, x13); + fiat_p521_cmovznz_u32(&x277, x269, 0x0, x14); + fiat_p521_cmovznz_u32(&x278, x269, 0x0, x15); + fiat_p521_cmovznz_u32(&x279, x269, 0x0, x16); + fiat_p521_cmovznz_u32(&x280, x269, 0x0, x17); + fiat_p521_cmovznz_u32(&x281, x269, 0x0, x18); + fiat_p521_cmovznz_u32(&x282, x269, 0x0, x19); + fiat_p521_cmovznz_u32(&x283, x269, 0x0, x20); + fiat_p521_cmovznz_u32(&x284, x269, 0x0, x21); + fiat_p521_cmovznz_u32(&x285, x269, 0x0, x22); + fiat_p521_cmovznz_u32(&x286, x269, 0x0, x23); + fiat_p521_cmovznz_u32(&x287, x269, 0x0, x24); + fiat_p521_addcarryx_u32(&x288, &x289, 0x0, x61, x270); + fiat_p521_addcarryx_u32(&x290, &x291, x289, x62, x271); + fiat_p521_addcarryx_u32(&x292, &x293, x291, x63, x272); + fiat_p521_addcarryx_u32(&x294, &x295, x293, x64, x273); + fiat_p521_addcarryx_u32(&x296, &x297, x295, x65, x274); + fiat_p521_addcarryx_u32(&x298, &x299, x297, x66, x275); + fiat_p521_addcarryx_u32(&x300, &x301, x299, x67, x276); + fiat_p521_addcarryx_u32(&x302, &x303, x301, x68, x277); + fiat_p521_addcarryx_u32(&x304, &x305, x303, x69, x278); + fiat_p521_addcarryx_u32(&x306, &x307, x305, x70, x279); + fiat_p521_addcarryx_u32(&x308, &x309, x307, x71, x280); + fiat_p521_addcarryx_u32(&x310, &x311, x309, x72, x281); + fiat_p521_addcarryx_u32(&x312, &x313, x311, x73, x282); + fiat_p521_addcarryx_u32(&x314, &x315, x313, x74, x283); + fiat_p521_addcarryx_u32(&x316, &x317, x315, x75, x284); + fiat_p521_addcarryx_u32(&x318, &x319, x317, x76, x285); + fiat_p521_addcarryx_u32(&x320, &x321, x319, x77, x286); + fiat_p521_addcarryx_u32(&x322, &x323, x321, x78, x287); + fiat_p521_cmovznz_u32(&x324, x269, 0x0, x79); + fiat_p521_cmovznz_u32(&x325, x269, 0x0, x80); + fiat_p521_cmovznz_u32(&x326, x269, 0x0, x81); + fiat_p521_cmovznz_u32(&x327, x269, 0x0, x82); + fiat_p521_cmovznz_u32(&x328, x269, 0x0, x83); + fiat_p521_cmovznz_u32(&x329, x269, 0x0, x84); + fiat_p521_cmovznz_u32(&x330, x269, 0x0, x85); + fiat_p521_cmovznz_u32(&x331, x269, 0x0, x86); + fiat_p521_cmovznz_u32(&x332, x269, 0x0, x87); + fiat_p521_cmovznz_u32(&x333, x269, 0x0, x88); + fiat_p521_cmovznz_u32(&x334, x269, 0x0, x89); + fiat_p521_cmovznz_u32(&x335, x269, 0x0, x90); + fiat_p521_cmovznz_u32(&x336, x269, 0x0, x91); + fiat_p521_cmovznz_u32(&x337, x269, 0x0, x92); + fiat_p521_cmovznz_u32(&x338, x269, 0x0, x93); + fiat_p521_cmovznz_u32(&x339, x269, 0x0, x94); + fiat_p521_cmovznz_u32(&x340, x269, 0x0, x95); + fiat_p521_addcarryx_u32(&x341, &x342, 0x0, x252, x324); + fiat_p521_addcarryx_u32(&x343, &x344, x342, x253, x325); + fiat_p521_addcarryx_u32(&x345, &x346, x344, x254, x326); + fiat_p521_addcarryx_u32(&x347, &x348, x346, x255, x327); + fiat_p521_addcarryx_u32(&x349, &x350, x348, x256, x328); + fiat_p521_addcarryx_u32(&x351, &x352, x350, x257, x329); + fiat_p521_addcarryx_u32(&x353, &x354, x352, x258, x330); + fiat_p521_addcarryx_u32(&x355, &x356, x354, x259, x331); + fiat_p521_addcarryx_u32(&x357, &x358, x356, x260, x332); + fiat_p521_addcarryx_u32(&x359, &x360, x358, x261, x333); + fiat_p521_addcarryx_u32(&x361, &x362, x360, x262, x334); + fiat_p521_addcarryx_u32(&x363, &x364, x362, x263, x335); + fiat_p521_addcarryx_u32(&x365, &x366, x364, x264, x336); + fiat_p521_addcarryx_u32(&x367, &x368, x366, x265, x337); + fiat_p521_addcarryx_u32(&x369, &x370, x368, x266, x338); + fiat_p521_addcarryx_u32(&x371, &x372, x370, x267, x339); + fiat_p521_addcarryx_u32(&x373, &x374, x372, x268, x340); + fiat_p521_subborrowx_u32(&x375, &x376, 0x0, x341, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x377, &x378, x376, x343, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x379, &x380, x378, x345, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x381, &x382, x380, x347, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x383, &x384, x382, x349, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x385, &x386, x384, x351, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x387, &x388, x386, x353, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x389, &x390, x388, x355, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x391, &x392, x390, x357, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x393, &x394, x392, x359, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x395, &x396, x394, x361, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x397, &x398, x396, x363, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x399, &x400, x398, x365, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x401, &x402, x400, x367, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x403, &x404, x402, x369, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x405, &x406, x404, x371, UINT32_C(0xffffffff)); + fiat_p521_subborrowx_u32(&x407, &x408, x406, x373, UINT16_C(0x1ff)); + fiat_p521_subborrowx_u32(&x409, &x410, x408, x374, 0x0); + fiat_p521_addcarryx_u32(&x411, &x412, 0x0, x6, 0x1); + x413 = ((x288 >> 1) | ((x290 << 31) & UINT32_C(0xffffffff))); + x414 = ((x290 >> 1) | ((x292 << 31) & UINT32_C(0xffffffff))); + x415 = ((x292 >> 1) | ((x294 << 31) & UINT32_C(0xffffffff))); + x416 = ((x294 >> 1) | ((x296 << 31) & UINT32_C(0xffffffff))); + x417 = ((x296 >> 1) | ((x298 << 31) & UINT32_C(0xffffffff))); + x418 = ((x298 >> 1) | ((x300 << 31) & UINT32_C(0xffffffff))); + x419 = ((x300 >> 1) | ((x302 << 31) & UINT32_C(0xffffffff))); + x420 = ((x302 >> 1) | ((x304 << 31) & UINT32_C(0xffffffff))); + x421 = ((x304 >> 1) | ((x306 << 31) & UINT32_C(0xffffffff))); + x422 = ((x306 >> 1) | ((x308 << 31) & UINT32_C(0xffffffff))); + x423 = ((x308 >> 1) | ((x310 << 31) & UINT32_C(0xffffffff))); + x424 = ((x310 >> 1) | ((x312 << 31) & UINT32_C(0xffffffff))); + x425 = ((x312 >> 1) | ((x314 << 31) & UINT32_C(0xffffffff))); + x426 = ((x314 >> 1) | ((x316 << 31) & UINT32_C(0xffffffff))); + x427 = ((x316 >> 1) | ((x318 << 31) & UINT32_C(0xffffffff))); + x428 = ((x318 >> 1) | ((x320 << 31) & UINT32_C(0xffffffff))); + x429 = ((x320 >> 1) | ((x322 << 31) & UINT32_C(0xffffffff))); + x430 = ((x322 & UINT32_C(0x80000000)) | (x322 >> 1)); + fiat_p521_cmovznz_u32(&x431, x165, x130, x96); + fiat_p521_cmovznz_u32(&x432, x165, x132, x98); + fiat_p521_cmovznz_u32(&x433, x165, x134, x100); + fiat_p521_cmovznz_u32(&x434, x165, x136, x102); + fiat_p521_cmovznz_u32(&x435, x165, x138, x104); + fiat_p521_cmovznz_u32(&x436, x165, x140, x106); + fiat_p521_cmovznz_u32(&x437, x165, x142, x108); + fiat_p521_cmovznz_u32(&x438, x165, x144, x110); + fiat_p521_cmovznz_u32(&x439, x165, x146, x112); + fiat_p521_cmovznz_u32(&x440, x165, x148, x114); + fiat_p521_cmovznz_u32(&x441, x165, x150, x116); + fiat_p521_cmovznz_u32(&x442, x165, x152, x118); + fiat_p521_cmovznz_u32(&x443, x165, x154, x120); + fiat_p521_cmovznz_u32(&x444, x165, x156, x122); + fiat_p521_cmovznz_u32(&x445, x165, x158, x124); + fiat_p521_cmovznz_u32(&x446, x165, x160, x126); + fiat_p521_cmovznz_u32(&x447, x165, x162, x128); + fiat_p521_cmovznz_u32(&x448, x410, x375, x341); + fiat_p521_cmovznz_u32(&x449, x410, x377, x343); + fiat_p521_cmovznz_u32(&x450, x410, x379, x345); + fiat_p521_cmovznz_u32(&x451, x410, x381, x347); + fiat_p521_cmovznz_u32(&x452, x410, x383, x349); + fiat_p521_cmovznz_u32(&x453, x410, x385, x351); + fiat_p521_cmovznz_u32(&x454, x410, x387, x353); + fiat_p521_cmovznz_u32(&x455, x410, x389, x355); + fiat_p521_cmovznz_u32(&x456, x410, x391, x357); + fiat_p521_cmovznz_u32(&x457, x410, x393, x359); + fiat_p521_cmovznz_u32(&x458, x410, x395, x361); + fiat_p521_cmovznz_u32(&x459, x410, x397, x363); + fiat_p521_cmovznz_u32(&x460, x410, x399, x365); + fiat_p521_cmovznz_u32(&x461, x410, x401, x367); + fiat_p521_cmovznz_u32(&x462, x410, x403, x369); + fiat_p521_cmovznz_u32(&x463, x410, x405, x371); + fiat_p521_cmovznz_u32(&x464, x410, x407, x373); + *out1 = x411; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out2[5] = x12; + out2[6] = x13; + out2[7] = x14; + out2[8] = x15; + out2[9] = x16; + out2[10] = x17; + out2[11] = x18; + out2[12] = x19; + out2[13] = x20; + out2[14] = x21; + out2[15] = x22; + out2[16] = x23; + out2[17] = x24; + out3[0] = x413; + out3[1] = x414; + out3[2] = x415; + out3[3] = x416; + out3[4] = x417; + out3[5] = x418; + out3[6] = x419; + out3[7] = x420; + out3[8] = x421; + out3[9] = x422; + out3[10] = x423; + out3[11] = x424; + out3[12] = x425; + out3[13] = x426; + out3[14] = x427; + out3[15] = x428; + out3[16] = x429; + out3[17] = x430; + out4[0] = x431; + out4[1] = x432; + out4[2] = x433; + out4[3] = x434; + out4[4] = x435; + out4[5] = x436; + out4[6] = x437; + out4[7] = x438; + out4[8] = x439; + out4[9] = x440; + out4[10] = x441; + out4[11] = x442; + out4[12] = x443; + out4[13] = x444; + out4[14] = x445; + out4[15] = x446; + out4[16] = x447; + out5[0] = x448; + out5[1] = x449; + out5[2] = x450; + out5[3] = x451; + out5[4] = x452; + out5[5] = x453; + out5[6] = x454; + out5[7] = x455; + out5[8] = x456; + out5[9] = x457; + out5[10] = x458; + out5[11] = x459; + out5[12] = x460; + out5[13] = x461; + out5[14] = x462; + out5[15] = x463; + out5[16] = x464; +} + diff --git a/ec/native/p521_64.h b/ec/native/p521_64.h new file mode 100644 index 00000000..a889e2a0 --- /dev/null +++ b/ec/native/p521_64.h @@ -0,0 +1,6625 @@ +/* Autogenerated: '../fiat-crypto/src/ExtractionOCaml/word_by_word_montgomery' --static --use-value-barrier p521 64 '2^521 - 1' */ +/* curve description: p521 */ +/* machine_wordsize = 64 (from "64") */ +/* requested operations: (all) */ +/* m = 0x1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff (from "2^521 - 1") */ +/* */ +/* NOTE: In addition to the bounds specified above each function, all */ +/* functions synthesized for this Montgomery arithmetic require the */ +/* input to be strictly less than the prime modulus (m), and also */ +/* require the input to be in the unique saturated representation. */ +/* All functions also ensure that these two properties are true of */ +/* return values. */ +/* */ +/* Computed values: */ +/* eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) + (z[4] << 256) + (z[5] << 0x140) + (z[6] << 0x180) + (z[7] << 0x1c0) + (z[8] << 2^9) */ +/* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) + (z[32] << 256) + (z[33] << 0x108) + (z[34] << 0x110) + (z[35] << 0x118) + (z[36] << 0x120) + (z[37] << 0x128) + (z[38] << 0x130) + (z[39] << 0x138) + (z[40] << 0x140) + (z[41] << 0x148) + (z[42] << 0x150) + (z[43] << 0x158) + (z[44] << 0x160) + (z[45] << 0x168) + (z[46] << 0x170) + (z[47] << 0x178) + (z[48] << 0x180) + (z[49] << 0x188) + (z[50] << 0x190) + (z[51] << 0x198) + (z[52] << 0x1a0) + (z[53] << 0x1a8) + (z[54] << 0x1b0) + (z[55] << 0x1b8) + (z[56] << 0x1c0) + (z[57] << 0x1c8) + (z[58] << 0x1d0) + (z[59] << 0x1d8) + (z[60] << 0x1e0) + (z[61] << 0x1e8) + (z[62] << 0x1f0) + (z[63] << 0x1f8) + (z[64] << 2^9) + (z[65] << 0x208) */ + +#include +typedef unsigned char fiat_p521_uint1; +typedef signed char fiat_p521_int1; +#ifdef __GNUC__ +# define FIAT_P521_FIAT_EXTENSION __extension__ +#else +# define FIAT_P521_FIAT_EXTENSION +#endif + +FIAT_P521_FIAT_EXTENSION typedef signed __int128 fiat_p521_int128; +FIAT_P521_FIAT_EXTENSION typedef unsigned __int128 fiat_p521_uint128; + +#if (-1 & 3) != 3 +#error "This code only works on a two's complement system" +#endif + +#if !defined(FIAT_P521_NO_ASM) && (defined(__GNUC__) || defined(__clang__)) +static __inline__ uint64_t fiat_p521_value_barrier_u64(uint64_t a) { + __asm__("" : "+r"(a) : /* no inputs */); + return a; +} +#else +# define fiat_p521_value_barrier_u64(x) (x) +#endif + + +/* + * The function fiat_p521_addcarryx_u64 is an addition with carry. + * Postconditions: + * out1 = (arg1 + arg2 + arg3) mod 2^64 + * out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p521_addcarryx_u64(uint64_t* out1, fiat_p521_uint1* out2, fiat_p521_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_p521_uint128 x1; + uint64_t x2; + fiat_p521_uint1 x3; + x1 = ((arg1 + (fiat_p521_uint128)arg2) + arg3); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (fiat_p521_uint1)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p521_subborrowx_u64 is a subtraction with borrow. + * Postconditions: + * out1 = (-arg1 + arg2 + -arg3) mod 2^64 + * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0x1] + */ +static void fiat_p521_subborrowx_u64(uint64_t* out1, fiat_p521_uint1* out2, fiat_p521_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_p521_int128 x1; + fiat_p521_int1 x2; + uint64_t x3; + x1 = ((arg2 - (fiat_p521_int128)arg1) - arg3); + x2 = (fiat_p521_int1)(x1 >> 64); + x3 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + *out1 = x3; + *out2 = (fiat_p521_uint1)(0x0 - x2); +} + +/* + * The function fiat_p521_mulx_u64 is a multiplication, returning the full double-width result. + * Postconditions: + * out1 = (arg1 * arg2) mod 2^64 + * out2 = ⌊arg1 * arg2 / 2^64⌋ + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_p521_mulx_u64(uint64_t* out1, uint64_t* out2, uint64_t arg1, uint64_t arg2) { + fiat_p521_uint128 x1; + uint64_t x2; + uint64_t x3; + x1 = ((fiat_p521_uint128)arg1 * arg2); + x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); + x3 = (uint64_t)(x1 >> 64); + *out1 = x2; + *out2 = x3; +} + +/* + * The function fiat_p521_cmovznz_u64 is a single-word conditional move. + * Postconditions: + * out1 = (if arg1 = 0 then arg2 else arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [0x0 ~> 0xffffffffffffffff] + * arg3: [0x0 ~> 0xffffffffffffffff] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_p521_cmovznz_u64(uint64_t* out1, fiat_p521_uint1 arg1, uint64_t arg2, uint64_t arg3) { + fiat_p521_uint1 x1; + uint64_t x2; + uint64_t x3; + x1 = (!(!arg1)); + x2 = ((fiat_p521_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); + x3 = ((fiat_p521_value_barrier_u64(x2) & arg3) | (fiat_p521_value_barrier_u64((~x2)) & arg2)); + *out1 = x3; +} + +/* + * The function fiat_p521_mul multiplies two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p521_mul(uint64_t out1[9], const uint64_t arg1[9], const uint64_t arg2[9]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + fiat_p521_uint1 x29; + uint64_t x30; + fiat_p521_uint1 x31; + uint64_t x32; + fiat_p521_uint1 x33; + uint64_t x34; + fiat_p521_uint1 x35; + uint64_t x36; + fiat_p521_uint1 x37; + uint64_t x38; + fiat_p521_uint1 x39; + uint64_t x40; + fiat_p521_uint1 x41; + uint64_t x42; + fiat_p521_uint1 x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint64_t x57; + uint64_t x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + fiat_p521_uint1 x64; + uint64_t x65; + fiat_p521_uint1 x66; + uint64_t x67; + fiat_p521_uint1 x68; + uint64_t x69; + fiat_p521_uint1 x70; + uint64_t x71; + fiat_p521_uint1 x72; + uint64_t x73; + fiat_p521_uint1 x74; + uint64_t x75; + fiat_p521_uint1 x76; + uint64_t x77; + fiat_p521_uint1 x78; + uint64_t x79; + uint64_t x80; + fiat_p521_uint1 x81; + uint64_t x82; + fiat_p521_uint1 x83; + uint64_t x84; + fiat_p521_uint1 x85; + uint64_t x86; + fiat_p521_uint1 x87; + uint64_t x88; + fiat_p521_uint1 x89; + uint64_t x90; + fiat_p521_uint1 x91; + uint64_t x92; + fiat_p521_uint1 x93; + uint64_t x94; + fiat_p521_uint1 x95; + uint64_t x96; + fiat_p521_uint1 x97; + uint64_t x98; + fiat_p521_uint1 x99; + uint64_t x100; + uint64_t x101; + uint64_t x102; + uint64_t x103; + uint64_t x104; + uint64_t x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + uint64_t x109; + uint64_t x110; + uint64_t x111; + uint64_t x112; + uint64_t x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + fiat_p521_uint1 x119; + uint64_t x120; + fiat_p521_uint1 x121; + uint64_t x122; + fiat_p521_uint1 x123; + uint64_t x124; + fiat_p521_uint1 x125; + uint64_t x126; + fiat_p521_uint1 x127; + uint64_t x128; + fiat_p521_uint1 x129; + uint64_t x130; + fiat_p521_uint1 x131; + uint64_t x132; + fiat_p521_uint1 x133; + uint64_t x134; + uint64_t x135; + fiat_p521_uint1 x136; + uint64_t x137; + fiat_p521_uint1 x138; + uint64_t x139; + fiat_p521_uint1 x140; + uint64_t x141; + fiat_p521_uint1 x142; + uint64_t x143; + fiat_p521_uint1 x144; + uint64_t x145; + fiat_p521_uint1 x146; + uint64_t x147; + fiat_p521_uint1 x148; + uint64_t x149; + fiat_p521_uint1 x150; + uint64_t x151; + fiat_p521_uint1 x152; + uint64_t x153; + fiat_p521_uint1 x154; + uint64_t x155; + uint64_t x156; + uint64_t x157; + uint64_t x158; + uint64_t x159; + uint64_t x160; + uint64_t x161; + uint64_t x162; + uint64_t x163; + uint64_t x164; + uint64_t x165; + uint64_t x166; + uint64_t x167; + uint64_t x168; + uint64_t x169; + uint64_t x170; + uint64_t x171; + uint64_t x172; + uint64_t x173; + fiat_p521_uint1 x174; + uint64_t x175; + fiat_p521_uint1 x176; + uint64_t x177; + fiat_p521_uint1 x178; + uint64_t x179; + fiat_p521_uint1 x180; + uint64_t x181; + fiat_p521_uint1 x182; + uint64_t x183; + fiat_p521_uint1 x184; + uint64_t x185; + fiat_p521_uint1 x186; + uint64_t x187; + fiat_p521_uint1 x188; + uint64_t x189; + uint64_t x190; + fiat_p521_uint1 x191; + uint64_t x192; + fiat_p521_uint1 x193; + uint64_t x194; + fiat_p521_uint1 x195; + uint64_t x196; + fiat_p521_uint1 x197; + uint64_t x198; + fiat_p521_uint1 x199; + uint64_t x200; + fiat_p521_uint1 x201; + uint64_t x202; + fiat_p521_uint1 x203; + uint64_t x204; + fiat_p521_uint1 x205; + uint64_t x206; + fiat_p521_uint1 x207; + uint64_t x208; + fiat_p521_uint1 x209; + uint64_t x210; + uint64_t x211; + uint64_t x212; + uint64_t x213; + uint64_t x214; + uint64_t x215; + uint64_t x216; + uint64_t x217; + uint64_t x218; + uint64_t x219; + uint64_t x220; + uint64_t x221; + uint64_t x222; + uint64_t x223; + uint64_t x224; + uint64_t x225; + uint64_t x226; + uint64_t x227; + uint64_t x228; + uint64_t x229; + fiat_p521_uint1 x230; + uint64_t x231; + fiat_p521_uint1 x232; + uint64_t x233; + fiat_p521_uint1 x234; + uint64_t x235; + fiat_p521_uint1 x236; + uint64_t x237; + fiat_p521_uint1 x238; + uint64_t x239; + fiat_p521_uint1 x240; + uint64_t x241; + fiat_p521_uint1 x242; + uint64_t x243; + fiat_p521_uint1 x244; + uint64_t x245; + uint64_t x246; + fiat_p521_uint1 x247; + uint64_t x248; + fiat_p521_uint1 x249; + uint64_t x250; + fiat_p521_uint1 x251; + uint64_t x252; + fiat_p521_uint1 x253; + uint64_t x254; + fiat_p521_uint1 x255; + uint64_t x256; + fiat_p521_uint1 x257; + uint64_t x258; + fiat_p521_uint1 x259; + uint64_t x260; + fiat_p521_uint1 x261; + uint64_t x262; + fiat_p521_uint1 x263; + uint64_t x264; + fiat_p521_uint1 x265; + uint64_t x266; + uint64_t x267; + uint64_t x268; + uint64_t x269; + uint64_t x270; + uint64_t x271; + uint64_t x272; + uint64_t x273; + uint64_t x274; + uint64_t x275; + uint64_t x276; + uint64_t x277; + uint64_t x278; + uint64_t x279; + uint64_t x280; + uint64_t x281; + uint64_t x282; + uint64_t x283; + uint64_t x284; + fiat_p521_uint1 x285; + uint64_t x286; + fiat_p521_uint1 x287; + uint64_t x288; + fiat_p521_uint1 x289; + uint64_t x290; + fiat_p521_uint1 x291; + uint64_t x292; + fiat_p521_uint1 x293; + uint64_t x294; + fiat_p521_uint1 x295; + uint64_t x296; + fiat_p521_uint1 x297; + uint64_t x298; + fiat_p521_uint1 x299; + uint64_t x300; + uint64_t x301; + fiat_p521_uint1 x302; + uint64_t x303; + fiat_p521_uint1 x304; + uint64_t x305; + fiat_p521_uint1 x306; + uint64_t x307; + fiat_p521_uint1 x308; + uint64_t x309; + fiat_p521_uint1 x310; + uint64_t x311; + fiat_p521_uint1 x312; + uint64_t x313; + fiat_p521_uint1 x314; + uint64_t x315; + fiat_p521_uint1 x316; + uint64_t x317; + fiat_p521_uint1 x318; + uint64_t x319; + fiat_p521_uint1 x320; + uint64_t x321; + uint64_t x322; + uint64_t x323; + uint64_t x324; + uint64_t x325; + uint64_t x326; + uint64_t x327; + uint64_t x328; + uint64_t x329; + uint64_t x330; + uint64_t x331; + uint64_t x332; + uint64_t x333; + uint64_t x334; + uint64_t x335; + uint64_t x336; + uint64_t x337; + uint64_t x338; + uint64_t x339; + uint64_t x340; + fiat_p521_uint1 x341; + uint64_t x342; + fiat_p521_uint1 x343; + uint64_t x344; + fiat_p521_uint1 x345; + uint64_t x346; + fiat_p521_uint1 x347; + uint64_t x348; + fiat_p521_uint1 x349; + uint64_t x350; + fiat_p521_uint1 x351; + uint64_t x352; + fiat_p521_uint1 x353; + uint64_t x354; + fiat_p521_uint1 x355; + uint64_t x356; + uint64_t x357; + fiat_p521_uint1 x358; + uint64_t x359; + fiat_p521_uint1 x360; + uint64_t x361; + fiat_p521_uint1 x362; + uint64_t x363; + fiat_p521_uint1 x364; + uint64_t x365; + fiat_p521_uint1 x366; + uint64_t x367; + fiat_p521_uint1 x368; + uint64_t x369; + fiat_p521_uint1 x370; + uint64_t x371; + fiat_p521_uint1 x372; + uint64_t x373; + fiat_p521_uint1 x374; + uint64_t x375; + fiat_p521_uint1 x376; + uint64_t x377; + uint64_t x378; + uint64_t x379; + uint64_t x380; + uint64_t x381; + uint64_t x382; + uint64_t x383; + uint64_t x384; + uint64_t x385; + uint64_t x386; + uint64_t x387; + uint64_t x388; + uint64_t x389; + uint64_t x390; + uint64_t x391; + uint64_t x392; + uint64_t x393; + uint64_t x394; + uint64_t x395; + fiat_p521_uint1 x396; + uint64_t x397; + fiat_p521_uint1 x398; + uint64_t x399; + fiat_p521_uint1 x400; + uint64_t x401; + fiat_p521_uint1 x402; + uint64_t x403; + fiat_p521_uint1 x404; + uint64_t x405; + fiat_p521_uint1 x406; + uint64_t x407; + fiat_p521_uint1 x408; + uint64_t x409; + fiat_p521_uint1 x410; + uint64_t x411; + uint64_t x412; + fiat_p521_uint1 x413; + uint64_t x414; + fiat_p521_uint1 x415; + uint64_t x416; + fiat_p521_uint1 x417; + uint64_t x418; + fiat_p521_uint1 x419; + uint64_t x420; + fiat_p521_uint1 x421; + uint64_t x422; + fiat_p521_uint1 x423; + uint64_t x424; + fiat_p521_uint1 x425; + uint64_t x426; + fiat_p521_uint1 x427; + uint64_t x428; + fiat_p521_uint1 x429; + uint64_t x430; + fiat_p521_uint1 x431; + uint64_t x432; + uint64_t x433; + uint64_t x434; + uint64_t x435; + uint64_t x436; + uint64_t x437; + uint64_t x438; + uint64_t x439; + uint64_t x440; + uint64_t x441; + uint64_t x442; + uint64_t x443; + uint64_t x444; + uint64_t x445; + uint64_t x446; + uint64_t x447; + uint64_t x448; + uint64_t x449; + uint64_t x450; + uint64_t x451; + fiat_p521_uint1 x452; + uint64_t x453; + fiat_p521_uint1 x454; + uint64_t x455; + fiat_p521_uint1 x456; + uint64_t x457; + fiat_p521_uint1 x458; + uint64_t x459; + fiat_p521_uint1 x460; + uint64_t x461; + fiat_p521_uint1 x462; + uint64_t x463; + fiat_p521_uint1 x464; + uint64_t x465; + fiat_p521_uint1 x466; + uint64_t x467; + uint64_t x468; + fiat_p521_uint1 x469; + uint64_t x470; + fiat_p521_uint1 x471; + uint64_t x472; + fiat_p521_uint1 x473; + uint64_t x474; + fiat_p521_uint1 x475; + uint64_t x476; + fiat_p521_uint1 x477; + uint64_t x478; + fiat_p521_uint1 x479; + uint64_t x480; + fiat_p521_uint1 x481; + uint64_t x482; + fiat_p521_uint1 x483; + uint64_t x484; + fiat_p521_uint1 x485; + uint64_t x486; + fiat_p521_uint1 x487; + uint64_t x488; + uint64_t x489; + uint64_t x490; + uint64_t x491; + uint64_t x492; + uint64_t x493; + uint64_t x494; + uint64_t x495; + uint64_t x496; + uint64_t x497; + uint64_t x498; + uint64_t x499; + uint64_t x500; + uint64_t x501; + uint64_t x502; + uint64_t x503; + uint64_t x504; + uint64_t x505; + uint64_t x506; + fiat_p521_uint1 x507; + uint64_t x508; + fiat_p521_uint1 x509; + uint64_t x510; + fiat_p521_uint1 x511; + uint64_t x512; + fiat_p521_uint1 x513; + uint64_t x514; + fiat_p521_uint1 x515; + uint64_t x516; + fiat_p521_uint1 x517; + uint64_t x518; + fiat_p521_uint1 x519; + uint64_t x520; + fiat_p521_uint1 x521; + uint64_t x522; + uint64_t x523; + fiat_p521_uint1 x524; + uint64_t x525; + fiat_p521_uint1 x526; + uint64_t x527; + fiat_p521_uint1 x528; + uint64_t x529; + fiat_p521_uint1 x530; + uint64_t x531; + fiat_p521_uint1 x532; + uint64_t x533; + fiat_p521_uint1 x534; + uint64_t x535; + fiat_p521_uint1 x536; + uint64_t x537; + fiat_p521_uint1 x538; + uint64_t x539; + fiat_p521_uint1 x540; + uint64_t x541; + fiat_p521_uint1 x542; + uint64_t x543; + uint64_t x544; + uint64_t x545; + uint64_t x546; + uint64_t x547; + uint64_t x548; + uint64_t x549; + uint64_t x550; + uint64_t x551; + uint64_t x552; + uint64_t x553; + uint64_t x554; + uint64_t x555; + uint64_t x556; + uint64_t x557; + uint64_t x558; + uint64_t x559; + uint64_t x560; + uint64_t x561; + uint64_t x562; + fiat_p521_uint1 x563; + uint64_t x564; + fiat_p521_uint1 x565; + uint64_t x566; + fiat_p521_uint1 x567; + uint64_t x568; + fiat_p521_uint1 x569; + uint64_t x570; + fiat_p521_uint1 x571; + uint64_t x572; + fiat_p521_uint1 x573; + uint64_t x574; + fiat_p521_uint1 x575; + uint64_t x576; + fiat_p521_uint1 x577; + uint64_t x578; + uint64_t x579; + fiat_p521_uint1 x580; + uint64_t x581; + fiat_p521_uint1 x582; + uint64_t x583; + fiat_p521_uint1 x584; + uint64_t x585; + fiat_p521_uint1 x586; + uint64_t x587; + fiat_p521_uint1 x588; + uint64_t x589; + fiat_p521_uint1 x590; + uint64_t x591; + fiat_p521_uint1 x592; + uint64_t x593; + fiat_p521_uint1 x594; + uint64_t x595; + fiat_p521_uint1 x596; + uint64_t x597; + fiat_p521_uint1 x598; + uint64_t x599; + uint64_t x600; + uint64_t x601; + uint64_t x602; + uint64_t x603; + uint64_t x604; + uint64_t x605; + uint64_t x606; + uint64_t x607; + uint64_t x608; + uint64_t x609; + uint64_t x610; + uint64_t x611; + uint64_t x612; + uint64_t x613; + uint64_t x614; + uint64_t x615; + uint64_t x616; + uint64_t x617; + fiat_p521_uint1 x618; + uint64_t x619; + fiat_p521_uint1 x620; + uint64_t x621; + fiat_p521_uint1 x622; + uint64_t x623; + fiat_p521_uint1 x624; + uint64_t x625; + fiat_p521_uint1 x626; + uint64_t x627; + fiat_p521_uint1 x628; + uint64_t x629; + fiat_p521_uint1 x630; + uint64_t x631; + fiat_p521_uint1 x632; + uint64_t x633; + uint64_t x634; + fiat_p521_uint1 x635; + uint64_t x636; + fiat_p521_uint1 x637; + uint64_t x638; + fiat_p521_uint1 x639; + uint64_t x640; + fiat_p521_uint1 x641; + uint64_t x642; + fiat_p521_uint1 x643; + uint64_t x644; + fiat_p521_uint1 x645; + uint64_t x646; + fiat_p521_uint1 x647; + uint64_t x648; + fiat_p521_uint1 x649; + uint64_t x650; + fiat_p521_uint1 x651; + uint64_t x652; + fiat_p521_uint1 x653; + uint64_t x654; + uint64_t x655; + uint64_t x656; + uint64_t x657; + uint64_t x658; + uint64_t x659; + uint64_t x660; + uint64_t x661; + uint64_t x662; + uint64_t x663; + uint64_t x664; + uint64_t x665; + uint64_t x666; + uint64_t x667; + uint64_t x668; + uint64_t x669; + uint64_t x670; + uint64_t x671; + uint64_t x672; + uint64_t x673; + fiat_p521_uint1 x674; + uint64_t x675; + fiat_p521_uint1 x676; + uint64_t x677; + fiat_p521_uint1 x678; + uint64_t x679; + fiat_p521_uint1 x680; + uint64_t x681; + fiat_p521_uint1 x682; + uint64_t x683; + fiat_p521_uint1 x684; + uint64_t x685; + fiat_p521_uint1 x686; + uint64_t x687; + fiat_p521_uint1 x688; + uint64_t x689; + uint64_t x690; + fiat_p521_uint1 x691; + uint64_t x692; + fiat_p521_uint1 x693; + uint64_t x694; + fiat_p521_uint1 x695; + uint64_t x696; + fiat_p521_uint1 x697; + uint64_t x698; + fiat_p521_uint1 x699; + uint64_t x700; + fiat_p521_uint1 x701; + uint64_t x702; + fiat_p521_uint1 x703; + uint64_t x704; + fiat_p521_uint1 x705; + uint64_t x706; + fiat_p521_uint1 x707; + uint64_t x708; + fiat_p521_uint1 x709; + uint64_t x710; + uint64_t x711; + uint64_t x712; + uint64_t x713; + uint64_t x714; + uint64_t x715; + uint64_t x716; + uint64_t x717; + uint64_t x718; + uint64_t x719; + uint64_t x720; + uint64_t x721; + uint64_t x722; + uint64_t x723; + uint64_t x724; + uint64_t x725; + uint64_t x726; + uint64_t x727; + uint64_t x728; + fiat_p521_uint1 x729; + uint64_t x730; + fiat_p521_uint1 x731; + uint64_t x732; + fiat_p521_uint1 x733; + uint64_t x734; + fiat_p521_uint1 x735; + uint64_t x736; + fiat_p521_uint1 x737; + uint64_t x738; + fiat_p521_uint1 x739; + uint64_t x740; + fiat_p521_uint1 x741; + uint64_t x742; + fiat_p521_uint1 x743; + uint64_t x744; + uint64_t x745; + fiat_p521_uint1 x746; + uint64_t x747; + fiat_p521_uint1 x748; + uint64_t x749; + fiat_p521_uint1 x750; + uint64_t x751; + fiat_p521_uint1 x752; + uint64_t x753; + fiat_p521_uint1 x754; + uint64_t x755; + fiat_p521_uint1 x756; + uint64_t x757; + fiat_p521_uint1 x758; + uint64_t x759; + fiat_p521_uint1 x760; + uint64_t x761; + fiat_p521_uint1 x762; + uint64_t x763; + fiat_p521_uint1 x764; + uint64_t x765; + uint64_t x766; + uint64_t x767; + uint64_t x768; + uint64_t x769; + uint64_t x770; + uint64_t x771; + uint64_t x772; + uint64_t x773; + uint64_t x774; + uint64_t x775; + uint64_t x776; + uint64_t x777; + uint64_t x778; + uint64_t x779; + uint64_t x780; + uint64_t x781; + uint64_t x782; + uint64_t x783; + uint64_t x784; + fiat_p521_uint1 x785; + uint64_t x786; + fiat_p521_uint1 x787; + uint64_t x788; + fiat_p521_uint1 x789; + uint64_t x790; + fiat_p521_uint1 x791; + uint64_t x792; + fiat_p521_uint1 x793; + uint64_t x794; + fiat_p521_uint1 x795; + uint64_t x796; + fiat_p521_uint1 x797; + uint64_t x798; + fiat_p521_uint1 x799; + uint64_t x800; + uint64_t x801; + fiat_p521_uint1 x802; + uint64_t x803; + fiat_p521_uint1 x804; + uint64_t x805; + fiat_p521_uint1 x806; + uint64_t x807; + fiat_p521_uint1 x808; + uint64_t x809; + fiat_p521_uint1 x810; + uint64_t x811; + fiat_p521_uint1 x812; + uint64_t x813; + fiat_p521_uint1 x814; + uint64_t x815; + fiat_p521_uint1 x816; + uint64_t x817; + fiat_p521_uint1 x818; + uint64_t x819; + fiat_p521_uint1 x820; + uint64_t x821; + uint64_t x822; + uint64_t x823; + uint64_t x824; + uint64_t x825; + uint64_t x826; + uint64_t x827; + uint64_t x828; + uint64_t x829; + uint64_t x830; + uint64_t x831; + uint64_t x832; + uint64_t x833; + uint64_t x834; + uint64_t x835; + uint64_t x836; + uint64_t x837; + uint64_t x838; + uint64_t x839; + fiat_p521_uint1 x840; + uint64_t x841; + fiat_p521_uint1 x842; + uint64_t x843; + fiat_p521_uint1 x844; + uint64_t x845; + fiat_p521_uint1 x846; + uint64_t x847; + fiat_p521_uint1 x848; + uint64_t x849; + fiat_p521_uint1 x850; + uint64_t x851; + fiat_p521_uint1 x852; + uint64_t x853; + fiat_p521_uint1 x854; + uint64_t x855; + uint64_t x856; + fiat_p521_uint1 x857; + uint64_t x858; + fiat_p521_uint1 x859; + uint64_t x860; + fiat_p521_uint1 x861; + uint64_t x862; + fiat_p521_uint1 x863; + uint64_t x864; + fiat_p521_uint1 x865; + uint64_t x866; + fiat_p521_uint1 x867; + uint64_t x868; + fiat_p521_uint1 x869; + uint64_t x870; + fiat_p521_uint1 x871; + uint64_t x872; + fiat_p521_uint1 x873; + uint64_t x874; + fiat_p521_uint1 x875; + uint64_t x876; + uint64_t x877; + uint64_t x878; + uint64_t x879; + uint64_t x880; + uint64_t x881; + uint64_t x882; + uint64_t x883; + uint64_t x884; + uint64_t x885; + uint64_t x886; + uint64_t x887; + uint64_t x888; + uint64_t x889; + uint64_t x890; + uint64_t x891; + uint64_t x892; + uint64_t x893; + uint64_t x894; + uint64_t x895; + fiat_p521_uint1 x896; + uint64_t x897; + fiat_p521_uint1 x898; + uint64_t x899; + fiat_p521_uint1 x900; + uint64_t x901; + fiat_p521_uint1 x902; + uint64_t x903; + fiat_p521_uint1 x904; + uint64_t x905; + fiat_p521_uint1 x906; + uint64_t x907; + fiat_p521_uint1 x908; + uint64_t x909; + fiat_p521_uint1 x910; + uint64_t x911; + uint64_t x912; + fiat_p521_uint1 x913; + uint64_t x914; + fiat_p521_uint1 x915; + uint64_t x916; + fiat_p521_uint1 x917; + uint64_t x918; + fiat_p521_uint1 x919; + uint64_t x920; + fiat_p521_uint1 x921; + uint64_t x922; + fiat_p521_uint1 x923; + uint64_t x924; + fiat_p521_uint1 x925; + uint64_t x926; + fiat_p521_uint1 x927; + uint64_t x928; + fiat_p521_uint1 x929; + uint64_t x930; + fiat_p521_uint1 x931; + uint64_t x932; + uint64_t x933; + uint64_t x934; + uint64_t x935; + uint64_t x936; + uint64_t x937; + uint64_t x938; + uint64_t x939; + uint64_t x940; + uint64_t x941; + uint64_t x942; + uint64_t x943; + uint64_t x944; + uint64_t x945; + uint64_t x946; + uint64_t x947; + uint64_t x948; + uint64_t x949; + uint64_t x950; + fiat_p521_uint1 x951; + uint64_t x952; + fiat_p521_uint1 x953; + uint64_t x954; + fiat_p521_uint1 x955; + uint64_t x956; + fiat_p521_uint1 x957; + uint64_t x958; + fiat_p521_uint1 x959; + uint64_t x960; + fiat_p521_uint1 x961; + uint64_t x962; + fiat_p521_uint1 x963; + uint64_t x964; + fiat_p521_uint1 x965; + uint64_t x966; + uint64_t x967; + fiat_p521_uint1 x968; + uint64_t x969; + fiat_p521_uint1 x970; + uint64_t x971; + fiat_p521_uint1 x972; + uint64_t x973; + fiat_p521_uint1 x974; + uint64_t x975; + fiat_p521_uint1 x976; + uint64_t x977; + fiat_p521_uint1 x978; + uint64_t x979; + fiat_p521_uint1 x980; + uint64_t x981; + fiat_p521_uint1 x982; + uint64_t x983; + fiat_p521_uint1 x984; + uint64_t x985; + fiat_p521_uint1 x986; + uint64_t x987; + uint64_t x988; + fiat_p521_uint1 x989; + uint64_t x990; + fiat_p521_uint1 x991; + uint64_t x992; + fiat_p521_uint1 x993; + uint64_t x994; + fiat_p521_uint1 x995; + uint64_t x996; + fiat_p521_uint1 x997; + uint64_t x998; + fiat_p521_uint1 x999; + uint64_t x1000; + fiat_p521_uint1 x1001; + uint64_t x1002; + fiat_p521_uint1 x1003; + uint64_t x1004; + fiat_p521_uint1 x1005; + uint64_t x1006; + fiat_p521_uint1 x1007; + uint64_t x1008; + uint64_t x1009; + uint64_t x1010; + uint64_t x1011; + uint64_t x1012; + uint64_t x1013; + uint64_t x1014; + uint64_t x1015; + uint64_t x1016; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[8]); + x9 = (arg1[0]); + fiat_p521_mulx_u64(&x10, &x11, x9, (arg2[8])); + fiat_p521_mulx_u64(&x12, &x13, x9, (arg2[7])); + fiat_p521_mulx_u64(&x14, &x15, x9, (arg2[6])); + fiat_p521_mulx_u64(&x16, &x17, x9, (arg2[5])); + fiat_p521_mulx_u64(&x18, &x19, x9, (arg2[4])); + fiat_p521_mulx_u64(&x20, &x21, x9, (arg2[3])); + fiat_p521_mulx_u64(&x22, &x23, x9, (arg2[2])); + fiat_p521_mulx_u64(&x24, &x25, x9, (arg2[1])); + fiat_p521_mulx_u64(&x26, &x27, x9, (arg2[0])); + fiat_p521_addcarryx_u64(&x28, &x29, 0x0, x27, x24); + fiat_p521_addcarryx_u64(&x30, &x31, x29, x25, x22); + fiat_p521_addcarryx_u64(&x32, &x33, x31, x23, x20); + fiat_p521_addcarryx_u64(&x34, &x35, x33, x21, x18); + fiat_p521_addcarryx_u64(&x36, &x37, x35, x19, x16); + fiat_p521_addcarryx_u64(&x38, &x39, x37, x17, x14); + fiat_p521_addcarryx_u64(&x40, &x41, x39, x15, x12); + fiat_p521_addcarryx_u64(&x42, &x43, x41, x13, x10); + x44 = (x43 + x11); + fiat_p521_mulx_u64(&x45, &x46, x26, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x47, &x48, x26, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x49, &x50, x26, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x51, &x52, x26, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x53, &x54, x26, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x55, &x56, x26, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x57, &x58, x26, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x59, &x60, x26, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x61, &x62, x26, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x63, &x64, 0x0, x62, x59); + fiat_p521_addcarryx_u64(&x65, &x66, x64, x60, x57); + fiat_p521_addcarryx_u64(&x67, &x68, x66, x58, x55); + fiat_p521_addcarryx_u64(&x69, &x70, x68, x56, x53); + fiat_p521_addcarryx_u64(&x71, &x72, x70, x54, x51); + fiat_p521_addcarryx_u64(&x73, &x74, x72, x52, x49); + fiat_p521_addcarryx_u64(&x75, &x76, x74, x50, x47); + fiat_p521_addcarryx_u64(&x77, &x78, x76, x48, x45); + x79 = (x78 + x46); + fiat_p521_addcarryx_u64(&x80, &x81, 0x0, x26, x61); + fiat_p521_addcarryx_u64(&x82, &x83, x81, x28, x63); + fiat_p521_addcarryx_u64(&x84, &x85, x83, x30, x65); + fiat_p521_addcarryx_u64(&x86, &x87, x85, x32, x67); + fiat_p521_addcarryx_u64(&x88, &x89, x87, x34, x69); + fiat_p521_addcarryx_u64(&x90, &x91, x89, x36, x71); + fiat_p521_addcarryx_u64(&x92, &x93, x91, x38, x73); + fiat_p521_addcarryx_u64(&x94, &x95, x93, x40, x75); + fiat_p521_addcarryx_u64(&x96, &x97, x95, x42, x77); + fiat_p521_addcarryx_u64(&x98, &x99, x97, x44, x79); + fiat_p521_mulx_u64(&x100, &x101, x1, (arg2[8])); + fiat_p521_mulx_u64(&x102, &x103, x1, (arg2[7])); + fiat_p521_mulx_u64(&x104, &x105, x1, (arg2[6])); + fiat_p521_mulx_u64(&x106, &x107, x1, (arg2[5])); + fiat_p521_mulx_u64(&x108, &x109, x1, (arg2[4])); + fiat_p521_mulx_u64(&x110, &x111, x1, (arg2[3])); + fiat_p521_mulx_u64(&x112, &x113, x1, (arg2[2])); + fiat_p521_mulx_u64(&x114, &x115, x1, (arg2[1])); + fiat_p521_mulx_u64(&x116, &x117, x1, (arg2[0])); + fiat_p521_addcarryx_u64(&x118, &x119, 0x0, x117, x114); + fiat_p521_addcarryx_u64(&x120, &x121, x119, x115, x112); + fiat_p521_addcarryx_u64(&x122, &x123, x121, x113, x110); + fiat_p521_addcarryx_u64(&x124, &x125, x123, x111, x108); + fiat_p521_addcarryx_u64(&x126, &x127, x125, x109, x106); + fiat_p521_addcarryx_u64(&x128, &x129, x127, x107, x104); + fiat_p521_addcarryx_u64(&x130, &x131, x129, x105, x102); + fiat_p521_addcarryx_u64(&x132, &x133, x131, x103, x100); + x134 = (x133 + x101); + fiat_p521_addcarryx_u64(&x135, &x136, 0x0, x82, x116); + fiat_p521_addcarryx_u64(&x137, &x138, x136, x84, x118); + fiat_p521_addcarryx_u64(&x139, &x140, x138, x86, x120); + fiat_p521_addcarryx_u64(&x141, &x142, x140, x88, x122); + fiat_p521_addcarryx_u64(&x143, &x144, x142, x90, x124); + fiat_p521_addcarryx_u64(&x145, &x146, x144, x92, x126); + fiat_p521_addcarryx_u64(&x147, &x148, x146, x94, x128); + fiat_p521_addcarryx_u64(&x149, &x150, x148, x96, x130); + fiat_p521_addcarryx_u64(&x151, &x152, x150, x98, x132); + fiat_p521_addcarryx_u64(&x153, &x154, x152, x99, x134); + fiat_p521_mulx_u64(&x155, &x156, x135, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x157, &x158, x135, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x159, &x160, x135, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x161, &x162, x135, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x163, &x164, x135, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x165, &x166, x135, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x167, &x168, x135, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x169, &x170, x135, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x171, &x172, x135, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x173, &x174, 0x0, x172, x169); + fiat_p521_addcarryx_u64(&x175, &x176, x174, x170, x167); + fiat_p521_addcarryx_u64(&x177, &x178, x176, x168, x165); + fiat_p521_addcarryx_u64(&x179, &x180, x178, x166, x163); + fiat_p521_addcarryx_u64(&x181, &x182, x180, x164, x161); + fiat_p521_addcarryx_u64(&x183, &x184, x182, x162, x159); + fiat_p521_addcarryx_u64(&x185, &x186, x184, x160, x157); + fiat_p521_addcarryx_u64(&x187, &x188, x186, x158, x155); + x189 = (x188 + x156); + fiat_p521_addcarryx_u64(&x190, &x191, 0x0, x135, x171); + fiat_p521_addcarryx_u64(&x192, &x193, x191, x137, x173); + fiat_p521_addcarryx_u64(&x194, &x195, x193, x139, x175); + fiat_p521_addcarryx_u64(&x196, &x197, x195, x141, x177); + fiat_p521_addcarryx_u64(&x198, &x199, x197, x143, x179); + fiat_p521_addcarryx_u64(&x200, &x201, x199, x145, x181); + fiat_p521_addcarryx_u64(&x202, &x203, x201, x147, x183); + fiat_p521_addcarryx_u64(&x204, &x205, x203, x149, x185); + fiat_p521_addcarryx_u64(&x206, &x207, x205, x151, x187); + fiat_p521_addcarryx_u64(&x208, &x209, x207, x153, x189); + x210 = ((uint64_t)x209 + x154); + fiat_p521_mulx_u64(&x211, &x212, x2, (arg2[8])); + fiat_p521_mulx_u64(&x213, &x214, x2, (arg2[7])); + fiat_p521_mulx_u64(&x215, &x216, x2, (arg2[6])); + fiat_p521_mulx_u64(&x217, &x218, x2, (arg2[5])); + fiat_p521_mulx_u64(&x219, &x220, x2, (arg2[4])); + fiat_p521_mulx_u64(&x221, &x222, x2, (arg2[3])); + fiat_p521_mulx_u64(&x223, &x224, x2, (arg2[2])); + fiat_p521_mulx_u64(&x225, &x226, x2, (arg2[1])); + fiat_p521_mulx_u64(&x227, &x228, x2, (arg2[0])); + fiat_p521_addcarryx_u64(&x229, &x230, 0x0, x228, x225); + fiat_p521_addcarryx_u64(&x231, &x232, x230, x226, x223); + fiat_p521_addcarryx_u64(&x233, &x234, x232, x224, x221); + fiat_p521_addcarryx_u64(&x235, &x236, x234, x222, x219); + fiat_p521_addcarryx_u64(&x237, &x238, x236, x220, x217); + fiat_p521_addcarryx_u64(&x239, &x240, x238, x218, x215); + fiat_p521_addcarryx_u64(&x241, &x242, x240, x216, x213); + fiat_p521_addcarryx_u64(&x243, &x244, x242, x214, x211); + x245 = (x244 + x212); + fiat_p521_addcarryx_u64(&x246, &x247, 0x0, x192, x227); + fiat_p521_addcarryx_u64(&x248, &x249, x247, x194, x229); + fiat_p521_addcarryx_u64(&x250, &x251, x249, x196, x231); + fiat_p521_addcarryx_u64(&x252, &x253, x251, x198, x233); + fiat_p521_addcarryx_u64(&x254, &x255, x253, x200, x235); + fiat_p521_addcarryx_u64(&x256, &x257, x255, x202, x237); + fiat_p521_addcarryx_u64(&x258, &x259, x257, x204, x239); + fiat_p521_addcarryx_u64(&x260, &x261, x259, x206, x241); + fiat_p521_addcarryx_u64(&x262, &x263, x261, x208, x243); + fiat_p521_addcarryx_u64(&x264, &x265, x263, x210, x245); + fiat_p521_mulx_u64(&x266, &x267, x246, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x268, &x269, x246, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x270, &x271, x246, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x272, &x273, x246, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x274, &x275, x246, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x276, &x277, x246, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x278, &x279, x246, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x280, &x281, x246, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x282, &x283, x246, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x284, &x285, 0x0, x283, x280); + fiat_p521_addcarryx_u64(&x286, &x287, x285, x281, x278); + fiat_p521_addcarryx_u64(&x288, &x289, x287, x279, x276); + fiat_p521_addcarryx_u64(&x290, &x291, x289, x277, x274); + fiat_p521_addcarryx_u64(&x292, &x293, x291, x275, x272); + fiat_p521_addcarryx_u64(&x294, &x295, x293, x273, x270); + fiat_p521_addcarryx_u64(&x296, &x297, x295, x271, x268); + fiat_p521_addcarryx_u64(&x298, &x299, x297, x269, x266); + x300 = (x299 + x267); + fiat_p521_addcarryx_u64(&x301, &x302, 0x0, x246, x282); + fiat_p521_addcarryx_u64(&x303, &x304, x302, x248, x284); + fiat_p521_addcarryx_u64(&x305, &x306, x304, x250, x286); + fiat_p521_addcarryx_u64(&x307, &x308, x306, x252, x288); + fiat_p521_addcarryx_u64(&x309, &x310, x308, x254, x290); + fiat_p521_addcarryx_u64(&x311, &x312, x310, x256, x292); + fiat_p521_addcarryx_u64(&x313, &x314, x312, x258, x294); + fiat_p521_addcarryx_u64(&x315, &x316, x314, x260, x296); + fiat_p521_addcarryx_u64(&x317, &x318, x316, x262, x298); + fiat_p521_addcarryx_u64(&x319, &x320, x318, x264, x300); + x321 = ((uint64_t)x320 + x265); + fiat_p521_mulx_u64(&x322, &x323, x3, (arg2[8])); + fiat_p521_mulx_u64(&x324, &x325, x3, (arg2[7])); + fiat_p521_mulx_u64(&x326, &x327, x3, (arg2[6])); + fiat_p521_mulx_u64(&x328, &x329, x3, (arg2[5])); + fiat_p521_mulx_u64(&x330, &x331, x3, (arg2[4])); + fiat_p521_mulx_u64(&x332, &x333, x3, (arg2[3])); + fiat_p521_mulx_u64(&x334, &x335, x3, (arg2[2])); + fiat_p521_mulx_u64(&x336, &x337, x3, (arg2[1])); + fiat_p521_mulx_u64(&x338, &x339, x3, (arg2[0])); + fiat_p521_addcarryx_u64(&x340, &x341, 0x0, x339, x336); + fiat_p521_addcarryx_u64(&x342, &x343, x341, x337, x334); + fiat_p521_addcarryx_u64(&x344, &x345, x343, x335, x332); + fiat_p521_addcarryx_u64(&x346, &x347, x345, x333, x330); + fiat_p521_addcarryx_u64(&x348, &x349, x347, x331, x328); + fiat_p521_addcarryx_u64(&x350, &x351, x349, x329, x326); + fiat_p521_addcarryx_u64(&x352, &x353, x351, x327, x324); + fiat_p521_addcarryx_u64(&x354, &x355, x353, x325, x322); + x356 = (x355 + x323); + fiat_p521_addcarryx_u64(&x357, &x358, 0x0, x303, x338); + fiat_p521_addcarryx_u64(&x359, &x360, x358, x305, x340); + fiat_p521_addcarryx_u64(&x361, &x362, x360, x307, x342); + fiat_p521_addcarryx_u64(&x363, &x364, x362, x309, x344); + fiat_p521_addcarryx_u64(&x365, &x366, x364, x311, x346); + fiat_p521_addcarryx_u64(&x367, &x368, x366, x313, x348); + fiat_p521_addcarryx_u64(&x369, &x370, x368, x315, x350); + fiat_p521_addcarryx_u64(&x371, &x372, x370, x317, x352); + fiat_p521_addcarryx_u64(&x373, &x374, x372, x319, x354); + fiat_p521_addcarryx_u64(&x375, &x376, x374, x321, x356); + fiat_p521_mulx_u64(&x377, &x378, x357, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x379, &x380, x357, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x381, &x382, x357, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x383, &x384, x357, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x385, &x386, x357, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x387, &x388, x357, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x389, &x390, x357, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x391, &x392, x357, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x393, &x394, x357, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x395, &x396, 0x0, x394, x391); + fiat_p521_addcarryx_u64(&x397, &x398, x396, x392, x389); + fiat_p521_addcarryx_u64(&x399, &x400, x398, x390, x387); + fiat_p521_addcarryx_u64(&x401, &x402, x400, x388, x385); + fiat_p521_addcarryx_u64(&x403, &x404, x402, x386, x383); + fiat_p521_addcarryx_u64(&x405, &x406, x404, x384, x381); + fiat_p521_addcarryx_u64(&x407, &x408, x406, x382, x379); + fiat_p521_addcarryx_u64(&x409, &x410, x408, x380, x377); + x411 = (x410 + x378); + fiat_p521_addcarryx_u64(&x412, &x413, 0x0, x357, x393); + fiat_p521_addcarryx_u64(&x414, &x415, x413, x359, x395); + fiat_p521_addcarryx_u64(&x416, &x417, x415, x361, x397); + fiat_p521_addcarryx_u64(&x418, &x419, x417, x363, x399); + fiat_p521_addcarryx_u64(&x420, &x421, x419, x365, x401); + fiat_p521_addcarryx_u64(&x422, &x423, x421, x367, x403); + fiat_p521_addcarryx_u64(&x424, &x425, x423, x369, x405); + fiat_p521_addcarryx_u64(&x426, &x427, x425, x371, x407); + fiat_p521_addcarryx_u64(&x428, &x429, x427, x373, x409); + fiat_p521_addcarryx_u64(&x430, &x431, x429, x375, x411); + x432 = ((uint64_t)x431 + x376); + fiat_p521_mulx_u64(&x433, &x434, x4, (arg2[8])); + fiat_p521_mulx_u64(&x435, &x436, x4, (arg2[7])); + fiat_p521_mulx_u64(&x437, &x438, x4, (arg2[6])); + fiat_p521_mulx_u64(&x439, &x440, x4, (arg2[5])); + fiat_p521_mulx_u64(&x441, &x442, x4, (arg2[4])); + fiat_p521_mulx_u64(&x443, &x444, x4, (arg2[3])); + fiat_p521_mulx_u64(&x445, &x446, x4, (arg2[2])); + fiat_p521_mulx_u64(&x447, &x448, x4, (arg2[1])); + fiat_p521_mulx_u64(&x449, &x450, x4, (arg2[0])); + fiat_p521_addcarryx_u64(&x451, &x452, 0x0, x450, x447); + fiat_p521_addcarryx_u64(&x453, &x454, x452, x448, x445); + fiat_p521_addcarryx_u64(&x455, &x456, x454, x446, x443); + fiat_p521_addcarryx_u64(&x457, &x458, x456, x444, x441); + fiat_p521_addcarryx_u64(&x459, &x460, x458, x442, x439); + fiat_p521_addcarryx_u64(&x461, &x462, x460, x440, x437); + fiat_p521_addcarryx_u64(&x463, &x464, x462, x438, x435); + fiat_p521_addcarryx_u64(&x465, &x466, x464, x436, x433); + x467 = (x466 + x434); + fiat_p521_addcarryx_u64(&x468, &x469, 0x0, x414, x449); + fiat_p521_addcarryx_u64(&x470, &x471, x469, x416, x451); + fiat_p521_addcarryx_u64(&x472, &x473, x471, x418, x453); + fiat_p521_addcarryx_u64(&x474, &x475, x473, x420, x455); + fiat_p521_addcarryx_u64(&x476, &x477, x475, x422, x457); + fiat_p521_addcarryx_u64(&x478, &x479, x477, x424, x459); + fiat_p521_addcarryx_u64(&x480, &x481, x479, x426, x461); + fiat_p521_addcarryx_u64(&x482, &x483, x481, x428, x463); + fiat_p521_addcarryx_u64(&x484, &x485, x483, x430, x465); + fiat_p521_addcarryx_u64(&x486, &x487, x485, x432, x467); + fiat_p521_mulx_u64(&x488, &x489, x468, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x490, &x491, x468, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x492, &x493, x468, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x494, &x495, x468, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x496, &x497, x468, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x498, &x499, x468, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x500, &x501, x468, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x502, &x503, x468, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x504, &x505, x468, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x506, &x507, 0x0, x505, x502); + fiat_p521_addcarryx_u64(&x508, &x509, x507, x503, x500); + fiat_p521_addcarryx_u64(&x510, &x511, x509, x501, x498); + fiat_p521_addcarryx_u64(&x512, &x513, x511, x499, x496); + fiat_p521_addcarryx_u64(&x514, &x515, x513, x497, x494); + fiat_p521_addcarryx_u64(&x516, &x517, x515, x495, x492); + fiat_p521_addcarryx_u64(&x518, &x519, x517, x493, x490); + fiat_p521_addcarryx_u64(&x520, &x521, x519, x491, x488); + x522 = (x521 + x489); + fiat_p521_addcarryx_u64(&x523, &x524, 0x0, x468, x504); + fiat_p521_addcarryx_u64(&x525, &x526, x524, x470, x506); + fiat_p521_addcarryx_u64(&x527, &x528, x526, x472, x508); + fiat_p521_addcarryx_u64(&x529, &x530, x528, x474, x510); + fiat_p521_addcarryx_u64(&x531, &x532, x530, x476, x512); + fiat_p521_addcarryx_u64(&x533, &x534, x532, x478, x514); + fiat_p521_addcarryx_u64(&x535, &x536, x534, x480, x516); + fiat_p521_addcarryx_u64(&x537, &x538, x536, x482, x518); + fiat_p521_addcarryx_u64(&x539, &x540, x538, x484, x520); + fiat_p521_addcarryx_u64(&x541, &x542, x540, x486, x522); + x543 = ((uint64_t)x542 + x487); + fiat_p521_mulx_u64(&x544, &x545, x5, (arg2[8])); + fiat_p521_mulx_u64(&x546, &x547, x5, (arg2[7])); + fiat_p521_mulx_u64(&x548, &x549, x5, (arg2[6])); + fiat_p521_mulx_u64(&x550, &x551, x5, (arg2[5])); + fiat_p521_mulx_u64(&x552, &x553, x5, (arg2[4])); + fiat_p521_mulx_u64(&x554, &x555, x5, (arg2[3])); + fiat_p521_mulx_u64(&x556, &x557, x5, (arg2[2])); + fiat_p521_mulx_u64(&x558, &x559, x5, (arg2[1])); + fiat_p521_mulx_u64(&x560, &x561, x5, (arg2[0])); + fiat_p521_addcarryx_u64(&x562, &x563, 0x0, x561, x558); + fiat_p521_addcarryx_u64(&x564, &x565, x563, x559, x556); + fiat_p521_addcarryx_u64(&x566, &x567, x565, x557, x554); + fiat_p521_addcarryx_u64(&x568, &x569, x567, x555, x552); + fiat_p521_addcarryx_u64(&x570, &x571, x569, x553, x550); + fiat_p521_addcarryx_u64(&x572, &x573, x571, x551, x548); + fiat_p521_addcarryx_u64(&x574, &x575, x573, x549, x546); + fiat_p521_addcarryx_u64(&x576, &x577, x575, x547, x544); + x578 = (x577 + x545); + fiat_p521_addcarryx_u64(&x579, &x580, 0x0, x525, x560); + fiat_p521_addcarryx_u64(&x581, &x582, x580, x527, x562); + fiat_p521_addcarryx_u64(&x583, &x584, x582, x529, x564); + fiat_p521_addcarryx_u64(&x585, &x586, x584, x531, x566); + fiat_p521_addcarryx_u64(&x587, &x588, x586, x533, x568); + fiat_p521_addcarryx_u64(&x589, &x590, x588, x535, x570); + fiat_p521_addcarryx_u64(&x591, &x592, x590, x537, x572); + fiat_p521_addcarryx_u64(&x593, &x594, x592, x539, x574); + fiat_p521_addcarryx_u64(&x595, &x596, x594, x541, x576); + fiat_p521_addcarryx_u64(&x597, &x598, x596, x543, x578); + fiat_p521_mulx_u64(&x599, &x600, x579, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x601, &x602, x579, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x603, &x604, x579, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x605, &x606, x579, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x607, &x608, x579, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x609, &x610, x579, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x611, &x612, x579, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x613, &x614, x579, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x615, &x616, x579, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x617, &x618, 0x0, x616, x613); + fiat_p521_addcarryx_u64(&x619, &x620, x618, x614, x611); + fiat_p521_addcarryx_u64(&x621, &x622, x620, x612, x609); + fiat_p521_addcarryx_u64(&x623, &x624, x622, x610, x607); + fiat_p521_addcarryx_u64(&x625, &x626, x624, x608, x605); + fiat_p521_addcarryx_u64(&x627, &x628, x626, x606, x603); + fiat_p521_addcarryx_u64(&x629, &x630, x628, x604, x601); + fiat_p521_addcarryx_u64(&x631, &x632, x630, x602, x599); + x633 = (x632 + x600); + fiat_p521_addcarryx_u64(&x634, &x635, 0x0, x579, x615); + fiat_p521_addcarryx_u64(&x636, &x637, x635, x581, x617); + fiat_p521_addcarryx_u64(&x638, &x639, x637, x583, x619); + fiat_p521_addcarryx_u64(&x640, &x641, x639, x585, x621); + fiat_p521_addcarryx_u64(&x642, &x643, x641, x587, x623); + fiat_p521_addcarryx_u64(&x644, &x645, x643, x589, x625); + fiat_p521_addcarryx_u64(&x646, &x647, x645, x591, x627); + fiat_p521_addcarryx_u64(&x648, &x649, x647, x593, x629); + fiat_p521_addcarryx_u64(&x650, &x651, x649, x595, x631); + fiat_p521_addcarryx_u64(&x652, &x653, x651, x597, x633); + x654 = ((uint64_t)x653 + x598); + fiat_p521_mulx_u64(&x655, &x656, x6, (arg2[8])); + fiat_p521_mulx_u64(&x657, &x658, x6, (arg2[7])); + fiat_p521_mulx_u64(&x659, &x660, x6, (arg2[6])); + fiat_p521_mulx_u64(&x661, &x662, x6, (arg2[5])); + fiat_p521_mulx_u64(&x663, &x664, x6, (arg2[4])); + fiat_p521_mulx_u64(&x665, &x666, x6, (arg2[3])); + fiat_p521_mulx_u64(&x667, &x668, x6, (arg2[2])); + fiat_p521_mulx_u64(&x669, &x670, x6, (arg2[1])); + fiat_p521_mulx_u64(&x671, &x672, x6, (arg2[0])); + fiat_p521_addcarryx_u64(&x673, &x674, 0x0, x672, x669); + fiat_p521_addcarryx_u64(&x675, &x676, x674, x670, x667); + fiat_p521_addcarryx_u64(&x677, &x678, x676, x668, x665); + fiat_p521_addcarryx_u64(&x679, &x680, x678, x666, x663); + fiat_p521_addcarryx_u64(&x681, &x682, x680, x664, x661); + fiat_p521_addcarryx_u64(&x683, &x684, x682, x662, x659); + fiat_p521_addcarryx_u64(&x685, &x686, x684, x660, x657); + fiat_p521_addcarryx_u64(&x687, &x688, x686, x658, x655); + x689 = (x688 + x656); + fiat_p521_addcarryx_u64(&x690, &x691, 0x0, x636, x671); + fiat_p521_addcarryx_u64(&x692, &x693, x691, x638, x673); + fiat_p521_addcarryx_u64(&x694, &x695, x693, x640, x675); + fiat_p521_addcarryx_u64(&x696, &x697, x695, x642, x677); + fiat_p521_addcarryx_u64(&x698, &x699, x697, x644, x679); + fiat_p521_addcarryx_u64(&x700, &x701, x699, x646, x681); + fiat_p521_addcarryx_u64(&x702, &x703, x701, x648, x683); + fiat_p521_addcarryx_u64(&x704, &x705, x703, x650, x685); + fiat_p521_addcarryx_u64(&x706, &x707, x705, x652, x687); + fiat_p521_addcarryx_u64(&x708, &x709, x707, x654, x689); + fiat_p521_mulx_u64(&x710, &x711, x690, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x712, &x713, x690, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x714, &x715, x690, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x716, &x717, x690, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x718, &x719, x690, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x720, &x721, x690, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x722, &x723, x690, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x724, &x725, x690, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x726, &x727, x690, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x728, &x729, 0x0, x727, x724); + fiat_p521_addcarryx_u64(&x730, &x731, x729, x725, x722); + fiat_p521_addcarryx_u64(&x732, &x733, x731, x723, x720); + fiat_p521_addcarryx_u64(&x734, &x735, x733, x721, x718); + fiat_p521_addcarryx_u64(&x736, &x737, x735, x719, x716); + fiat_p521_addcarryx_u64(&x738, &x739, x737, x717, x714); + fiat_p521_addcarryx_u64(&x740, &x741, x739, x715, x712); + fiat_p521_addcarryx_u64(&x742, &x743, x741, x713, x710); + x744 = (x743 + x711); + fiat_p521_addcarryx_u64(&x745, &x746, 0x0, x690, x726); + fiat_p521_addcarryx_u64(&x747, &x748, x746, x692, x728); + fiat_p521_addcarryx_u64(&x749, &x750, x748, x694, x730); + fiat_p521_addcarryx_u64(&x751, &x752, x750, x696, x732); + fiat_p521_addcarryx_u64(&x753, &x754, x752, x698, x734); + fiat_p521_addcarryx_u64(&x755, &x756, x754, x700, x736); + fiat_p521_addcarryx_u64(&x757, &x758, x756, x702, x738); + fiat_p521_addcarryx_u64(&x759, &x760, x758, x704, x740); + fiat_p521_addcarryx_u64(&x761, &x762, x760, x706, x742); + fiat_p521_addcarryx_u64(&x763, &x764, x762, x708, x744); + x765 = ((uint64_t)x764 + x709); + fiat_p521_mulx_u64(&x766, &x767, x7, (arg2[8])); + fiat_p521_mulx_u64(&x768, &x769, x7, (arg2[7])); + fiat_p521_mulx_u64(&x770, &x771, x7, (arg2[6])); + fiat_p521_mulx_u64(&x772, &x773, x7, (arg2[5])); + fiat_p521_mulx_u64(&x774, &x775, x7, (arg2[4])); + fiat_p521_mulx_u64(&x776, &x777, x7, (arg2[3])); + fiat_p521_mulx_u64(&x778, &x779, x7, (arg2[2])); + fiat_p521_mulx_u64(&x780, &x781, x7, (arg2[1])); + fiat_p521_mulx_u64(&x782, &x783, x7, (arg2[0])); + fiat_p521_addcarryx_u64(&x784, &x785, 0x0, x783, x780); + fiat_p521_addcarryx_u64(&x786, &x787, x785, x781, x778); + fiat_p521_addcarryx_u64(&x788, &x789, x787, x779, x776); + fiat_p521_addcarryx_u64(&x790, &x791, x789, x777, x774); + fiat_p521_addcarryx_u64(&x792, &x793, x791, x775, x772); + fiat_p521_addcarryx_u64(&x794, &x795, x793, x773, x770); + fiat_p521_addcarryx_u64(&x796, &x797, x795, x771, x768); + fiat_p521_addcarryx_u64(&x798, &x799, x797, x769, x766); + x800 = (x799 + x767); + fiat_p521_addcarryx_u64(&x801, &x802, 0x0, x747, x782); + fiat_p521_addcarryx_u64(&x803, &x804, x802, x749, x784); + fiat_p521_addcarryx_u64(&x805, &x806, x804, x751, x786); + fiat_p521_addcarryx_u64(&x807, &x808, x806, x753, x788); + fiat_p521_addcarryx_u64(&x809, &x810, x808, x755, x790); + fiat_p521_addcarryx_u64(&x811, &x812, x810, x757, x792); + fiat_p521_addcarryx_u64(&x813, &x814, x812, x759, x794); + fiat_p521_addcarryx_u64(&x815, &x816, x814, x761, x796); + fiat_p521_addcarryx_u64(&x817, &x818, x816, x763, x798); + fiat_p521_addcarryx_u64(&x819, &x820, x818, x765, x800); + fiat_p521_mulx_u64(&x821, &x822, x801, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x823, &x824, x801, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x825, &x826, x801, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x827, &x828, x801, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x829, &x830, x801, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x831, &x832, x801, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x833, &x834, x801, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x835, &x836, x801, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x837, &x838, x801, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x839, &x840, 0x0, x838, x835); + fiat_p521_addcarryx_u64(&x841, &x842, x840, x836, x833); + fiat_p521_addcarryx_u64(&x843, &x844, x842, x834, x831); + fiat_p521_addcarryx_u64(&x845, &x846, x844, x832, x829); + fiat_p521_addcarryx_u64(&x847, &x848, x846, x830, x827); + fiat_p521_addcarryx_u64(&x849, &x850, x848, x828, x825); + fiat_p521_addcarryx_u64(&x851, &x852, x850, x826, x823); + fiat_p521_addcarryx_u64(&x853, &x854, x852, x824, x821); + x855 = (x854 + x822); + fiat_p521_addcarryx_u64(&x856, &x857, 0x0, x801, x837); + fiat_p521_addcarryx_u64(&x858, &x859, x857, x803, x839); + fiat_p521_addcarryx_u64(&x860, &x861, x859, x805, x841); + fiat_p521_addcarryx_u64(&x862, &x863, x861, x807, x843); + fiat_p521_addcarryx_u64(&x864, &x865, x863, x809, x845); + fiat_p521_addcarryx_u64(&x866, &x867, x865, x811, x847); + fiat_p521_addcarryx_u64(&x868, &x869, x867, x813, x849); + fiat_p521_addcarryx_u64(&x870, &x871, x869, x815, x851); + fiat_p521_addcarryx_u64(&x872, &x873, x871, x817, x853); + fiat_p521_addcarryx_u64(&x874, &x875, x873, x819, x855); + x876 = ((uint64_t)x875 + x820); + fiat_p521_mulx_u64(&x877, &x878, x8, (arg2[8])); + fiat_p521_mulx_u64(&x879, &x880, x8, (arg2[7])); + fiat_p521_mulx_u64(&x881, &x882, x8, (arg2[6])); + fiat_p521_mulx_u64(&x883, &x884, x8, (arg2[5])); + fiat_p521_mulx_u64(&x885, &x886, x8, (arg2[4])); + fiat_p521_mulx_u64(&x887, &x888, x8, (arg2[3])); + fiat_p521_mulx_u64(&x889, &x890, x8, (arg2[2])); + fiat_p521_mulx_u64(&x891, &x892, x8, (arg2[1])); + fiat_p521_mulx_u64(&x893, &x894, x8, (arg2[0])); + fiat_p521_addcarryx_u64(&x895, &x896, 0x0, x894, x891); + fiat_p521_addcarryx_u64(&x897, &x898, x896, x892, x889); + fiat_p521_addcarryx_u64(&x899, &x900, x898, x890, x887); + fiat_p521_addcarryx_u64(&x901, &x902, x900, x888, x885); + fiat_p521_addcarryx_u64(&x903, &x904, x902, x886, x883); + fiat_p521_addcarryx_u64(&x905, &x906, x904, x884, x881); + fiat_p521_addcarryx_u64(&x907, &x908, x906, x882, x879); + fiat_p521_addcarryx_u64(&x909, &x910, x908, x880, x877); + x911 = (x910 + x878); + fiat_p521_addcarryx_u64(&x912, &x913, 0x0, x858, x893); + fiat_p521_addcarryx_u64(&x914, &x915, x913, x860, x895); + fiat_p521_addcarryx_u64(&x916, &x917, x915, x862, x897); + fiat_p521_addcarryx_u64(&x918, &x919, x917, x864, x899); + fiat_p521_addcarryx_u64(&x920, &x921, x919, x866, x901); + fiat_p521_addcarryx_u64(&x922, &x923, x921, x868, x903); + fiat_p521_addcarryx_u64(&x924, &x925, x923, x870, x905); + fiat_p521_addcarryx_u64(&x926, &x927, x925, x872, x907); + fiat_p521_addcarryx_u64(&x928, &x929, x927, x874, x909); + fiat_p521_addcarryx_u64(&x930, &x931, x929, x876, x911); + fiat_p521_mulx_u64(&x932, &x933, x912, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x934, &x935, x912, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x936, &x937, x912, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x938, &x939, x912, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x940, &x941, x912, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x942, &x943, x912, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x944, &x945, x912, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x946, &x947, x912, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x948, &x949, x912, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x950, &x951, 0x0, x949, x946); + fiat_p521_addcarryx_u64(&x952, &x953, x951, x947, x944); + fiat_p521_addcarryx_u64(&x954, &x955, x953, x945, x942); + fiat_p521_addcarryx_u64(&x956, &x957, x955, x943, x940); + fiat_p521_addcarryx_u64(&x958, &x959, x957, x941, x938); + fiat_p521_addcarryx_u64(&x960, &x961, x959, x939, x936); + fiat_p521_addcarryx_u64(&x962, &x963, x961, x937, x934); + fiat_p521_addcarryx_u64(&x964, &x965, x963, x935, x932); + x966 = (x965 + x933); + fiat_p521_addcarryx_u64(&x967, &x968, 0x0, x912, x948); + fiat_p521_addcarryx_u64(&x969, &x970, x968, x914, x950); + fiat_p521_addcarryx_u64(&x971, &x972, x970, x916, x952); + fiat_p521_addcarryx_u64(&x973, &x974, x972, x918, x954); + fiat_p521_addcarryx_u64(&x975, &x976, x974, x920, x956); + fiat_p521_addcarryx_u64(&x977, &x978, x976, x922, x958); + fiat_p521_addcarryx_u64(&x979, &x980, x978, x924, x960); + fiat_p521_addcarryx_u64(&x981, &x982, x980, x926, x962); + fiat_p521_addcarryx_u64(&x983, &x984, x982, x928, x964); + fiat_p521_addcarryx_u64(&x985, &x986, x984, x930, x966); + x987 = ((uint64_t)x986 + x931); + fiat_p521_subborrowx_u64(&x988, &x989, 0x0, x969, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x990, &x991, x989, x971, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x992, &x993, x991, x973, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x994, &x995, x993, x975, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x996, &x997, x995, x977, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x998, &x999, x997, x979, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x1000, &x1001, x999, x981, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x1002, &x1003, x1001, x983, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x1004, &x1005, x1003, x985, UINT16_C(0x1ff)); + fiat_p521_subborrowx_u64(&x1006, &x1007, x1005, x987, 0x0); + fiat_p521_cmovznz_u64(&x1008, x1007, x988, x969); + fiat_p521_cmovznz_u64(&x1009, x1007, x990, x971); + fiat_p521_cmovznz_u64(&x1010, x1007, x992, x973); + fiat_p521_cmovznz_u64(&x1011, x1007, x994, x975); + fiat_p521_cmovznz_u64(&x1012, x1007, x996, x977); + fiat_p521_cmovznz_u64(&x1013, x1007, x998, x979); + fiat_p521_cmovznz_u64(&x1014, x1007, x1000, x981); + fiat_p521_cmovznz_u64(&x1015, x1007, x1002, x983); + fiat_p521_cmovznz_u64(&x1016, x1007, x1004, x985); + out1[0] = x1008; + out1[1] = x1009; + out1[2] = x1010; + out1[3] = x1011; + out1[4] = x1012; + out1[5] = x1013; + out1[6] = x1014; + out1[7] = x1015; + out1[8] = x1016; +} + +/* + * The function fiat_p521_square squares a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p521_square(uint64_t out1[9], const uint64_t arg1[9]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + fiat_p521_uint1 x29; + uint64_t x30; + fiat_p521_uint1 x31; + uint64_t x32; + fiat_p521_uint1 x33; + uint64_t x34; + fiat_p521_uint1 x35; + uint64_t x36; + fiat_p521_uint1 x37; + uint64_t x38; + fiat_p521_uint1 x39; + uint64_t x40; + fiat_p521_uint1 x41; + uint64_t x42; + fiat_p521_uint1 x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint64_t x57; + uint64_t x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + fiat_p521_uint1 x64; + uint64_t x65; + fiat_p521_uint1 x66; + uint64_t x67; + fiat_p521_uint1 x68; + uint64_t x69; + fiat_p521_uint1 x70; + uint64_t x71; + fiat_p521_uint1 x72; + uint64_t x73; + fiat_p521_uint1 x74; + uint64_t x75; + fiat_p521_uint1 x76; + uint64_t x77; + fiat_p521_uint1 x78; + uint64_t x79; + uint64_t x80; + fiat_p521_uint1 x81; + uint64_t x82; + fiat_p521_uint1 x83; + uint64_t x84; + fiat_p521_uint1 x85; + uint64_t x86; + fiat_p521_uint1 x87; + uint64_t x88; + fiat_p521_uint1 x89; + uint64_t x90; + fiat_p521_uint1 x91; + uint64_t x92; + fiat_p521_uint1 x93; + uint64_t x94; + fiat_p521_uint1 x95; + uint64_t x96; + fiat_p521_uint1 x97; + uint64_t x98; + fiat_p521_uint1 x99; + uint64_t x100; + uint64_t x101; + uint64_t x102; + uint64_t x103; + uint64_t x104; + uint64_t x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + uint64_t x109; + uint64_t x110; + uint64_t x111; + uint64_t x112; + uint64_t x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + fiat_p521_uint1 x119; + uint64_t x120; + fiat_p521_uint1 x121; + uint64_t x122; + fiat_p521_uint1 x123; + uint64_t x124; + fiat_p521_uint1 x125; + uint64_t x126; + fiat_p521_uint1 x127; + uint64_t x128; + fiat_p521_uint1 x129; + uint64_t x130; + fiat_p521_uint1 x131; + uint64_t x132; + fiat_p521_uint1 x133; + uint64_t x134; + uint64_t x135; + fiat_p521_uint1 x136; + uint64_t x137; + fiat_p521_uint1 x138; + uint64_t x139; + fiat_p521_uint1 x140; + uint64_t x141; + fiat_p521_uint1 x142; + uint64_t x143; + fiat_p521_uint1 x144; + uint64_t x145; + fiat_p521_uint1 x146; + uint64_t x147; + fiat_p521_uint1 x148; + uint64_t x149; + fiat_p521_uint1 x150; + uint64_t x151; + fiat_p521_uint1 x152; + uint64_t x153; + fiat_p521_uint1 x154; + uint64_t x155; + uint64_t x156; + uint64_t x157; + uint64_t x158; + uint64_t x159; + uint64_t x160; + uint64_t x161; + uint64_t x162; + uint64_t x163; + uint64_t x164; + uint64_t x165; + uint64_t x166; + uint64_t x167; + uint64_t x168; + uint64_t x169; + uint64_t x170; + uint64_t x171; + uint64_t x172; + uint64_t x173; + fiat_p521_uint1 x174; + uint64_t x175; + fiat_p521_uint1 x176; + uint64_t x177; + fiat_p521_uint1 x178; + uint64_t x179; + fiat_p521_uint1 x180; + uint64_t x181; + fiat_p521_uint1 x182; + uint64_t x183; + fiat_p521_uint1 x184; + uint64_t x185; + fiat_p521_uint1 x186; + uint64_t x187; + fiat_p521_uint1 x188; + uint64_t x189; + uint64_t x190; + fiat_p521_uint1 x191; + uint64_t x192; + fiat_p521_uint1 x193; + uint64_t x194; + fiat_p521_uint1 x195; + uint64_t x196; + fiat_p521_uint1 x197; + uint64_t x198; + fiat_p521_uint1 x199; + uint64_t x200; + fiat_p521_uint1 x201; + uint64_t x202; + fiat_p521_uint1 x203; + uint64_t x204; + fiat_p521_uint1 x205; + uint64_t x206; + fiat_p521_uint1 x207; + uint64_t x208; + fiat_p521_uint1 x209; + uint64_t x210; + uint64_t x211; + uint64_t x212; + uint64_t x213; + uint64_t x214; + uint64_t x215; + uint64_t x216; + uint64_t x217; + uint64_t x218; + uint64_t x219; + uint64_t x220; + uint64_t x221; + uint64_t x222; + uint64_t x223; + uint64_t x224; + uint64_t x225; + uint64_t x226; + uint64_t x227; + uint64_t x228; + uint64_t x229; + fiat_p521_uint1 x230; + uint64_t x231; + fiat_p521_uint1 x232; + uint64_t x233; + fiat_p521_uint1 x234; + uint64_t x235; + fiat_p521_uint1 x236; + uint64_t x237; + fiat_p521_uint1 x238; + uint64_t x239; + fiat_p521_uint1 x240; + uint64_t x241; + fiat_p521_uint1 x242; + uint64_t x243; + fiat_p521_uint1 x244; + uint64_t x245; + uint64_t x246; + fiat_p521_uint1 x247; + uint64_t x248; + fiat_p521_uint1 x249; + uint64_t x250; + fiat_p521_uint1 x251; + uint64_t x252; + fiat_p521_uint1 x253; + uint64_t x254; + fiat_p521_uint1 x255; + uint64_t x256; + fiat_p521_uint1 x257; + uint64_t x258; + fiat_p521_uint1 x259; + uint64_t x260; + fiat_p521_uint1 x261; + uint64_t x262; + fiat_p521_uint1 x263; + uint64_t x264; + fiat_p521_uint1 x265; + uint64_t x266; + uint64_t x267; + uint64_t x268; + uint64_t x269; + uint64_t x270; + uint64_t x271; + uint64_t x272; + uint64_t x273; + uint64_t x274; + uint64_t x275; + uint64_t x276; + uint64_t x277; + uint64_t x278; + uint64_t x279; + uint64_t x280; + uint64_t x281; + uint64_t x282; + uint64_t x283; + uint64_t x284; + fiat_p521_uint1 x285; + uint64_t x286; + fiat_p521_uint1 x287; + uint64_t x288; + fiat_p521_uint1 x289; + uint64_t x290; + fiat_p521_uint1 x291; + uint64_t x292; + fiat_p521_uint1 x293; + uint64_t x294; + fiat_p521_uint1 x295; + uint64_t x296; + fiat_p521_uint1 x297; + uint64_t x298; + fiat_p521_uint1 x299; + uint64_t x300; + uint64_t x301; + fiat_p521_uint1 x302; + uint64_t x303; + fiat_p521_uint1 x304; + uint64_t x305; + fiat_p521_uint1 x306; + uint64_t x307; + fiat_p521_uint1 x308; + uint64_t x309; + fiat_p521_uint1 x310; + uint64_t x311; + fiat_p521_uint1 x312; + uint64_t x313; + fiat_p521_uint1 x314; + uint64_t x315; + fiat_p521_uint1 x316; + uint64_t x317; + fiat_p521_uint1 x318; + uint64_t x319; + fiat_p521_uint1 x320; + uint64_t x321; + uint64_t x322; + uint64_t x323; + uint64_t x324; + uint64_t x325; + uint64_t x326; + uint64_t x327; + uint64_t x328; + uint64_t x329; + uint64_t x330; + uint64_t x331; + uint64_t x332; + uint64_t x333; + uint64_t x334; + uint64_t x335; + uint64_t x336; + uint64_t x337; + uint64_t x338; + uint64_t x339; + uint64_t x340; + fiat_p521_uint1 x341; + uint64_t x342; + fiat_p521_uint1 x343; + uint64_t x344; + fiat_p521_uint1 x345; + uint64_t x346; + fiat_p521_uint1 x347; + uint64_t x348; + fiat_p521_uint1 x349; + uint64_t x350; + fiat_p521_uint1 x351; + uint64_t x352; + fiat_p521_uint1 x353; + uint64_t x354; + fiat_p521_uint1 x355; + uint64_t x356; + uint64_t x357; + fiat_p521_uint1 x358; + uint64_t x359; + fiat_p521_uint1 x360; + uint64_t x361; + fiat_p521_uint1 x362; + uint64_t x363; + fiat_p521_uint1 x364; + uint64_t x365; + fiat_p521_uint1 x366; + uint64_t x367; + fiat_p521_uint1 x368; + uint64_t x369; + fiat_p521_uint1 x370; + uint64_t x371; + fiat_p521_uint1 x372; + uint64_t x373; + fiat_p521_uint1 x374; + uint64_t x375; + fiat_p521_uint1 x376; + uint64_t x377; + uint64_t x378; + uint64_t x379; + uint64_t x380; + uint64_t x381; + uint64_t x382; + uint64_t x383; + uint64_t x384; + uint64_t x385; + uint64_t x386; + uint64_t x387; + uint64_t x388; + uint64_t x389; + uint64_t x390; + uint64_t x391; + uint64_t x392; + uint64_t x393; + uint64_t x394; + uint64_t x395; + fiat_p521_uint1 x396; + uint64_t x397; + fiat_p521_uint1 x398; + uint64_t x399; + fiat_p521_uint1 x400; + uint64_t x401; + fiat_p521_uint1 x402; + uint64_t x403; + fiat_p521_uint1 x404; + uint64_t x405; + fiat_p521_uint1 x406; + uint64_t x407; + fiat_p521_uint1 x408; + uint64_t x409; + fiat_p521_uint1 x410; + uint64_t x411; + uint64_t x412; + fiat_p521_uint1 x413; + uint64_t x414; + fiat_p521_uint1 x415; + uint64_t x416; + fiat_p521_uint1 x417; + uint64_t x418; + fiat_p521_uint1 x419; + uint64_t x420; + fiat_p521_uint1 x421; + uint64_t x422; + fiat_p521_uint1 x423; + uint64_t x424; + fiat_p521_uint1 x425; + uint64_t x426; + fiat_p521_uint1 x427; + uint64_t x428; + fiat_p521_uint1 x429; + uint64_t x430; + fiat_p521_uint1 x431; + uint64_t x432; + uint64_t x433; + uint64_t x434; + uint64_t x435; + uint64_t x436; + uint64_t x437; + uint64_t x438; + uint64_t x439; + uint64_t x440; + uint64_t x441; + uint64_t x442; + uint64_t x443; + uint64_t x444; + uint64_t x445; + uint64_t x446; + uint64_t x447; + uint64_t x448; + uint64_t x449; + uint64_t x450; + uint64_t x451; + fiat_p521_uint1 x452; + uint64_t x453; + fiat_p521_uint1 x454; + uint64_t x455; + fiat_p521_uint1 x456; + uint64_t x457; + fiat_p521_uint1 x458; + uint64_t x459; + fiat_p521_uint1 x460; + uint64_t x461; + fiat_p521_uint1 x462; + uint64_t x463; + fiat_p521_uint1 x464; + uint64_t x465; + fiat_p521_uint1 x466; + uint64_t x467; + uint64_t x468; + fiat_p521_uint1 x469; + uint64_t x470; + fiat_p521_uint1 x471; + uint64_t x472; + fiat_p521_uint1 x473; + uint64_t x474; + fiat_p521_uint1 x475; + uint64_t x476; + fiat_p521_uint1 x477; + uint64_t x478; + fiat_p521_uint1 x479; + uint64_t x480; + fiat_p521_uint1 x481; + uint64_t x482; + fiat_p521_uint1 x483; + uint64_t x484; + fiat_p521_uint1 x485; + uint64_t x486; + fiat_p521_uint1 x487; + uint64_t x488; + uint64_t x489; + uint64_t x490; + uint64_t x491; + uint64_t x492; + uint64_t x493; + uint64_t x494; + uint64_t x495; + uint64_t x496; + uint64_t x497; + uint64_t x498; + uint64_t x499; + uint64_t x500; + uint64_t x501; + uint64_t x502; + uint64_t x503; + uint64_t x504; + uint64_t x505; + uint64_t x506; + fiat_p521_uint1 x507; + uint64_t x508; + fiat_p521_uint1 x509; + uint64_t x510; + fiat_p521_uint1 x511; + uint64_t x512; + fiat_p521_uint1 x513; + uint64_t x514; + fiat_p521_uint1 x515; + uint64_t x516; + fiat_p521_uint1 x517; + uint64_t x518; + fiat_p521_uint1 x519; + uint64_t x520; + fiat_p521_uint1 x521; + uint64_t x522; + uint64_t x523; + fiat_p521_uint1 x524; + uint64_t x525; + fiat_p521_uint1 x526; + uint64_t x527; + fiat_p521_uint1 x528; + uint64_t x529; + fiat_p521_uint1 x530; + uint64_t x531; + fiat_p521_uint1 x532; + uint64_t x533; + fiat_p521_uint1 x534; + uint64_t x535; + fiat_p521_uint1 x536; + uint64_t x537; + fiat_p521_uint1 x538; + uint64_t x539; + fiat_p521_uint1 x540; + uint64_t x541; + fiat_p521_uint1 x542; + uint64_t x543; + uint64_t x544; + uint64_t x545; + uint64_t x546; + uint64_t x547; + uint64_t x548; + uint64_t x549; + uint64_t x550; + uint64_t x551; + uint64_t x552; + uint64_t x553; + uint64_t x554; + uint64_t x555; + uint64_t x556; + uint64_t x557; + uint64_t x558; + uint64_t x559; + uint64_t x560; + uint64_t x561; + uint64_t x562; + fiat_p521_uint1 x563; + uint64_t x564; + fiat_p521_uint1 x565; + uint64_t x566; + fiat_p521_uint1 x567; + uint64_t x568; + fiat_p521_uint1 x569; + uint64_t x570; + fiat_p521_uint1 x571; + uint64_t x572; + fiat_p521_uint1 x573; + uint64_t x574; + fiat_p521_uint1 x575; + uint64_t x576; + fiat_p521_uint1 x577; + uint64_t x578; + uint64_t x579; + fiat_p521_uint1 x580; + uint64_t x581; + fiat_p521_uint1 x582; + uint64_t x583; + fiat_p521_uint1 x584; + uint64_t x585; + fiat_p521_uint1 x586; + uint64_t x587; + fiat_p521_uint1 x588; + uint64_t x589; + fiat_p521_uint1 x590; + uint64_t x591; + fiat_p521_uint1 x592; + uint64_t x593; + fiat_p521_uint1 x594; + uint64_t x595; + fiat_p521_uint1 x596; + uint64_t x597; + fiat_p521_uint1 x598; + uint64_t x599; + uint64_t x600; + uint64_t x601; + uint64_t x602; + uint64_t x603; + uint64_t x604; + uint64_t x605; + uint64_t x606; + uint64_t x607; + uint64_t x608; + uint64_t x609; + uint64_t x610; + uint64_t x611; + uint64_t x612; + uint64_t x613; + uint64_t x614; + uint64_t x615; + uint64_t x616; + uint64_t x617; + fiat_p521_uint1 x618; + uint64_t x619; + fiat_p521_uint1 x620; + uint64_t x621; + fiat_p521_uint1 x622; + uint64_t x623; + fiat_p521_uint1 x624; + uint64_t x625; + fiat_p521_uint1 x626; + uint64_t x627; + fiat_p521_uint1 x628; + uint64_t x629; + fiat_p521_uint1 x630; + uint64_t x631; + fiat_p521_uint1 x632; + uint64_t x633; + uint64_t x634; + fiat_p521_uint1 x635; + uint64_t x636; + fiat_p521_uint1 x637; + uint64_t x638; + fiat_p521_uint1 x639; + uint64_t x640; + fiat_p521_uint1 x641; + uint64_t x642; + fiat_p521_uint1 x643; + uint64_t x644; + fiat_p521_uint1 x645; + uint64_t x646; + fiat_p521_uint1 x647; + uint64_t x648; + fiat_p521_uint1 x649; + uint64_t x650; + fiat_p521_uint1 x651; + uint64_t x652; + fiat_p521_uint1 x653; + uint64_t x654; + uint64_t x655; + uint64_t x656; + uint64_t x657; + uint64_t x658; + uint64_t x659; + uint64_t x660; + uint64_t x661; + uint64_t x662; + uint64_t x663; + uint64_t x664; + uint64_t x665; + uint64_t x666; + uint64_t x667; + uint64_t x668; + uint64_t x669; + uint64_t x670; + uint64_t x671; + uint64_t x672; + uint64_t x673; + fiat_p521_uint1 x674; + uint64_t x675; + fiat_p521_uint1 x676; + uint64_t x677; + fiat_p521_uint1 x678; + uint64_t x679; + fiat_p521_uint1 x680; + uint64_t x681; + fiat_p521_uint1 x682; + uint64_t x683; + fiat_p521_uint1 x684; + uint64_t x685; + fiat_p521_uint1 x686; + uint64_t x687; + fiat_p521_uint1 x688; + uint64_t x689; + uint64_t x690; + fiat_p521_uint1 x691; + uint64_t x692; + fiat_p521_uint1 x693; + uint64_t x694; + fiat_p521_uint1 x695; + uint64_t x696; + fiat_p521_uint1 x697; + uint64_t x698; + fiat_p521_uint1 x699; + uint64_t x700; + fiat_p521_uint1 x701; + uint64_t x702; + fiat_p521_uint1 x703; + uint64_t x704; + fiat_p521_uint1 x705; + uint64_t x706; + fiat_p521_uint1 x707; + uint64_t x708; + fiat_p521_uint1 x709; + uint64_t x710; + uint64_t x711; + uint64_t x712; + uint64_t x713; + uint64_t x714; + uint64_t x715; + uint64_t x716; + uint64_t x717; + uint64_t x718; + uint64_t x719; + uint64_t x720; + uint64_t x721; + uint64_t x722; + uint64_t x723; + uint64_t x724; + uint64_t x725; + uint64_t x726; + uint64_t x727; + uint64_t x728; + fiat_p521_uint1 x729; + uint64_t x730; + fiat_p521_uint1 x731; + uint64_t x732; + fiat_p521_uint1 x733; + uint64_t x734; + fiat_p521_uint1 x735; + uint64_t x736; + fiat_p521_uint1 x737; + uint64_t x738; + fiat_p521_uint1 x739; + uint64_t x740; + fiat_p521_uint1 x741; + uint64_t x742; + fiat_p521_uint1 x743; + uint64_t x744; + uint64_t x745; + fiat_p521_uint1 x746; + uint64_t x747; + fiat_p521_uint1 x748; + uint64_t x749; + fiat_p521_uint1 x750; + uint64_t x751; + fiat_p521_uint1 x752; + uint64_t x753; + fiat_p521_uint1 x754; + uint64_t x755; + fiat_p521_uint1 x756; + uint64_t x757; + fiat_p521_uint1 x758; + uint64_t x759; + fiat_p521_uint1 x760; + uint64_t x761; + fiat_p521_uint1 x762; + uint64_t x763; + fiat_p521_uint1 x764; + uint64_t x765; + uint64_t x766; + uint64_t x767; + uint64_t x768; + uint64_t x769; + uint64_t x770; + uint64_t x771; + uint64_t x772; + uint64_t x773; + uint64_t x774; + uint64_t x775; + uint64_t x776; + uint64_t x777; + uint64_t x778; + uint64_t x779; + uint64_t x780; + uint64_t x781; + uint64_t x782; + uint64_t x783; + uint64_t x784; + fiat_p521_uint1 x785; + uint64_t x786; + fiat_p521_uint1 x787; + uint64_t x788; + fiat_p521_uint1 x789; + uint64_t x790; + fiat_p521_uint1 x791; + uint64_t x792; + fiat_p521_uint1 x793; + uint64_t x794; + fiat_p521_uint1 x795; + uint64_t x796; + fiat_p521_uint1 x797; + uint64_t x798; + fiat_p521_uint1 x799; + uint64_t x800; + uint64_t x801; + fiat_p521_uint1 x802; + uint64_t x803; + fiat_p521_uint1 x804; + uint64_t x805; + fiat_p521_uint1 x806; + uint64_t x807; + fiat_p521_uint1 x808; + uint64_t x809; + fiat_p521_uint1 x810; + uint64_t x811; + fiat_p521_uint1 x812; + uint64_t x813; + fiat_p521_uint1 x814; + uint64_t x815; + fiat_p521_uint1 x816; + uint64_t x817; + fiat_p521_uint1 x818; + uint64_t x819; + fiat_p521_uint1 x820; + uint64_t x821; + uint64_t x822; + uint64_t x823; + uint64_t x824; + uint64_t x825; + uint64_t x826; + uint64_t x827; + uint64_t x828; + uint64_t x829; + uint64_t x830; + uint64_t x831; + uint64_t x832; + uint64_t x833; + uint64_t x834; + uint64_t x835; + uint64_t x836; + uint64_t x837; + uint64_t x838; + uint64_t x839; + fiat_p521_uint1 x840; + uint64_t x841; + fiat_p521_uint1 x842; + uint64_t x843; + fiat_p521_uint1 x844; + uint64_t x845; + fiat_p521_uint1 x846; + uint64_t x847; + fiat_p521_uint1 x848; + uint64_t x849; + fiat_p521_uint1 x850; + uint64_t x851; + fiat_p521_uint1 x852; + uint64_t x853; + fiat_p521_uint1 x854; + uint64_t x855; + uint64_t x856; + fiat_p521_uint1 x857; + uint64_t x858; + fiat_p521_uint1 x859; + uint64_t x860; + fiat_p521_uint1 x861; + uint64_t x862; + fiat_p521_uint1 x863; + uint64_t x864; + fiat_p521_uint1 x865; + uint64_t x866; + fiat_p521_uint1 x867; + uint64_t x868; + fiat_p521_uint1 x869; + uint64_t x870; + fiat_p521_uint1 x871; + uint64_t x872; + fiat_p521_uint1 x873; + uint64_t x874; + fiat_p521_uint1 x875; + uint64_t x876; + uint64_t x877; + uint64_t x878; + uint64_t x879; + uint64_t x880; + uint64_t x881; + uint64_t x882; + uint64_t x883; + uint64_t x884; + uint64_t x885; + uint64_t x886; + uint64_t x887; + uint64_t x888; + uint64_t x889; + uint64_t x890; + uint64_t x891; + uint64_t x892; + uint64_t x893; + uint64_t x894; + uint64_t x895; + fiat_p521_uint1 x896; + uint64_t x897; + fiat_p521_uint1 x898; + uint64_t x899; + fiat_p521_uint1 x900; + uint64_t x901; + fiat_p521_uint1 x902; + uint64_t x903; + fiat_p521_uint1 x904; + uint64_t x905; + fiat_p521_uint1 x906; + uint64_t x907; + fiat_p521_uint1 x908; + uint64_t x909; + fiat_p521_uint1 x910; + uint64_t x911; + uint64_t x912; + fiat_p521_uint1 x913; + uint64_t x914; + fiat_p521_uint1 x915; + uint64_t x916; + fiat_p521_uint1 x917; + uint64_t x918; + fiat_p521_uint1 x919; + uint64_t x920; + fiat_p521_uint1 x921; + uint64_t x922; + fiat_p521_uint1 x923; + uint64_t x924; + fiat_p521_uint1 x925; + uint64_t x926; + fiat_p521_uint1 x927; + uint64_t x928; + fiat_p521_uint1 x929; + uint64_t x930; + fiat_p521_uint1 x931; + uint64_t x932; + uint64_t x933; + uint64_t x934; + uint64_t x935; + uint64_t x936; + uint64_t x937; + uint64_t x938; + uint64_t x939; + uint64_t x940; + uint64_t x941; + uint64_t x942; + uint64_t x943; + uint64_t x944; + uint64_t x945; + uint64_t x946; + uint64_t x947; + uint64_t x948; + uint64_t x949; + uint64_t x950; + fiat_p521_uint1 x951; + uint64_t x952; + fiat_p521_uint1 x953; + uint64_t x954; + fiat_p521_uint1 x955; + uint64_t x956; + fiat_p521_uint1 x957; + uint64_t x958; + fiat_p521_uint1 x959; + uint64_t x960; + fiat_p521_uint1 x961; + uint64_t x962; + fiat_p521_uint1 x963; + uint64_t x964; + fiat_p521_uint1 x965; + uint64_t x966; + uint64_t x967; + fiat_p521_uint1 x968; + uint64_t x969; + fiat_p521_uint1 x970; + uint64_t x971; + fiat_p521_uint1 x972; + uint64_t x973; + fiat_p521_uint1 x974; + uint64_t x975; + fiat_p521_uint1 x976; + uint64_t x977; + fiat_p521_uint1 x978; + uint64_t x979; + fiat_p521_uint1 x980; + uint64_t x981; + fiat_p521_uint1 x982; + uint64_t x983; + fiat_p521_uint1 x984; + uint64_t x985; + fiat_p521_uint1 x986; + uint64_t x987; + uint64_t x988; + fiat_p521_uint1 x989; + uint64_t x990; + fiat_p521_uint1 x991; + uint64_t x992; + fiat_p521_uint1 x993; + uint64_t x994; + fiat_p521_uint1 x995; + uint64_t x996; + fiat_p521_uint1 x997; + uint64_t x998; + fiat_p521_uint1 x999; + uint64_t x1000; + fiat_p521_uint1 x1001; + uint64_t x1002; + fiat_p521_uint1 x1003; + uint64_t x1004; + fiat_p521_uint1 x1005; + uint64_t x1006; + fiat_p521_uint1 x1007; + uint64_t x1008; + uint64_t x1009; + uint64_t x1010; + uint64_t x1011; + uint64_t x1012; + uint64_t x1013; + uint64_t x1014; + uint64_t x1015; + uint64_t x1016; + x1 = (arg1[1]); + x2 = (arg1[2]); + x3 = (arg1[3]); + x4 = (arg1[4]); + x5 = (arg1[5]); + x6 = (arg1[6]); + x7 = (arg1[7]); + x8 = (arg1[8]); + x9 = (arg1[0]); + fiat_p521_mulx_u64(&x10, &x11, x9, (arg1[8])); + fiat_p521_mulx_u64(&x12, &x13, x9, (arg1[7])); + fiat_p521_mulx_u64(&x14, &x15, x9, (arg1[6])); + fiat_p521_mulx_u64(&x16, &x17, x9, (arg1[5])); + fiat_p521_mulx_u64(&x18, &x19, x9, (arg1[4])); + fiat_p521_mulx_u64(&x20, &x21, x9, (arg1[3])); + fiat_p521_mulx_u64(&x22, &x23, x9, (arg1[2])); + fiat_p521_mulx_u64(&x24, &x25, x9, (arg1[1])); + fiat_p521_mulx_u64(&x26, &x27, x9, (arg1[0])); + fiat_p521_addcarryx_u64(&x28, &x29, 0x0, x27, x24); + fiat_p521_addcarryx_u64(&x30, &x31, x29, x25, x22); + fiat_p521_addcarryx_u64(&x32, &x33, x31, x23, x20); + fiat_p521_addcarryx_u64(&x34, &x35, x33, x21, x18); + fiat_p521_addcarryx_u64(&x36, &x37, x35, x19, x16); + fiat_p521_addcarryx_u64(&x38, &x39, x37, x17, x14); + fiat_p521_addcarryx_u64(&x40, &x41, x39, x15, x12); + fiat_p521_addcarryx_u64(&x42, &x43, x41, x13, x10); + x44 = (x43 + x11); + fiat_p521_mulx_u64(&x45, &x46, x26, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x47, &x48, x26, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x49, &x50, x26, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x51, &x52, x26, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x53, &x54, x26, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x55, &x56, x26, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x57, &x58, x26, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x59, &x60, x26, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x61, &x62, x26, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x63, &x64, 0x0, x62, x59); + fiat_p521_addcarryx_u64(&x65, &x66, x64, x60, x57); + fiat_p521_addcarryx_u64(&x67, &x68, x66, x58, x55); + fiat_p521_addcarryx_u64(&x69, &x70, x68, x56, x53); + fiat_p521_addcarryx_u64(&x71, &x72, x70, x54, x51); + fiat_p521_addcarryx_u64(&x73, &x74, x72, x52, x49); + fiat_p521_addcarryx_u64(&x75, &x76, x74, x50, x47); + fiat_p521_addcarryx_u64(&x77, &x78, x76, x48, x45); + x79 = (x78 + x46); + fiat_p521_addcarryx_u64(&x80, &x81, 0x0, x26, x61); + fiat_p521_addcarryx_u64(&x82, &x83, x81, x28, x63); + fiat_p521_addcarryx_u64(&x84, &x85, x83, x30, x65); + fiat_p521_addcarryx_u64(&x86, &x87, x85, x32, x67); + fiat_p521_addcarryx_u64(&x88, &x89, x87, x34, x69); + fiat_p521_addcarryx_u64(&x90, &x91, x89, x36, x71); + fiat_p521_addcarryx_u64(&x92, &x93, x91, x38, x73); + fiat_p521_addcarryx_u64(&x94, &x95, x93, x40, x75); + fiat_p521_addcarryx_u64(&x96, &x97, x95, x42, x77); + fiat_p521_addcarryx_u64(&x98, &x99, x97, x44, x79); + fiat_p521_mulx_u64(&x100, &x101, x1, (arg1[8])); + fiat_p521_mulx_u64(&x102, &x103, x1, (arg1[7])); + fiat_p521_mulx_u64(&x104, &x105, x1, (arg1[6])); + fiat_p521_mulx_u64(&x106, &x107, x1, (arg1[5])); + fiat_p521_mulx_u64(&x108, &x109, x1, (arg1[4])); + fiat_p521_mulx_u64(&x110, &x111, x1, (arg1[3])); + fiat_p521_mulx_u64(&x112, &x113, x1, (arg1[2])); + fiat_p521_mulx_u64(&x114, &x115, x1, (arg1[1])); + fiat_p521_mulx_u64(&x116, &x117, x1, (arg1[0])); + fiat_p521_addcarryx_u64(&x118, &x119, 0x0, x117, x114); + fiat_p521_addcarryx_u64(&x120, &x121, x119, x115, x112); + fiat_p521_addcarryx_u64(&x122, &x123, x121, x113, x110); + fiat_p521_addcarryx_u64(&x124, &x125, x123, x111, x108); + fiat_p521_addcarryx_u64(&x126, &x127, x125, x109, x106); + fiat_p521_addcarryx_u64(&x128, &x129, x127, x107, x104); + fiat_p521_addcarryx_u64(&x130, &x131, x129, x105, x102); + fiat_p521_addcarryx_u64(&x132, &x133, x131, x103, x100); + x134 = (x133 + x101); + fiat_p521_addcarryx_u64(&x135, &x136, 0x0, x82, x116); + fiat_p521_addcarryx_u64(&x137, &x138, x136, x84, x118); + fiat_p521_addcarryx_u64(&x139, &x140, x138, x86, x120); + fiat_p521_addcarryx_u64(&x141, &x142, x140, x88, x122); + fiat_p521_addcarryx_u64(&x143, &x144, x142, x90, x124); + fiat_p521_addcarryx_u64(&x145, &x146, x144, x92, x126); + fiat_p521_addcarryx_u64(&x147, &x148, x146, x94, x128); + fiat_p521_addcarryx_u64(&x149, &x150, x148, x96, x130); + fiat_p521_addcarryx_u64(&x151, &x152, x150, x98, x132); + fiat_p521_addcarryx_u64(&x153, &x154, x152, x99, x134); + fiat_p521_mulx_u64(&x155, &x156, x135, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x157, &x158, x135, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x159, &x160, x135, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x161, &x162, x135, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x163, &x164, x135, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x165, &x166, x135, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x167, &x168, x135, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x169, &x170, x135, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x171, &x172, x135, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x173, &x174, 0x0, x172, x169); + fiat_p521_addcarryx_u64(&x175, &x176, x174, x170, x167); + fiat_p521_addcarryx_u64(&x177, &x178, x176, x168, x165); + fiat_p521_addcarryx_u64(&x179, &x180, x178, x166, x163); + fiat_p521_addcarryx_u64(&x181, &x182, x180, x164, x161); + fiat_p521_addcarryx_u64(&x183, &x184, x182, x162, x159); + fiat_p521_addcarryx_u64(&x185, &x186, x184, x160, x157); + fiat_p521_addcarryx_u64(&x187, &x188, x186, x158, x155); + x189 = (x188 + x156); + fiat_p521_addcarryx_u64(&x190, &x191, 0x0, x135, x171); + fiat_p521_addcarryx_u64(&x192, &x193, x191, x137, x173); + fiat_p521_addcarryx_u64(&x194, &x195, x193, x139, x175); + fiat_p521_addcarryx_u64(&x196, &x197, x195, x141, x177); + fiat_p521_addcarryx_u64(&x198, &x199, x197, x143, x179); + fiat_p521_addcarryx_u64(&x200, &x201, x199, x145, x181); + fiat_p521_addcarryx_u64(&x202, &x203, x201, x147, x183); + fiat_p521_addcarryx_u64(&x204, &x205, x203, x149, x185); + fiat_p521_addcarryx_u64(&x206, &x207, x205, x151, x187); + fiat_p521_addcarryx_u64(&x208, &x209, x207, x153, x189); + x210 = ((uint64_t)x209 + x154); + fiat_p521_mulx_u64(&x211, &x212, x2, (arg1[8])); + fiat_p521_mulx_u64(&x213, &x214, x2, (arg1[7])); + fiat_p521_mulx_u64(&x215, &x216, x2, (arg1[6])); + fiat_p521_mulx_u64(&x217, &x218, x2, (arg1[5])); + fiat_p521_mulx_u64(&x219, &x220, x2, (arg1[4])); + fiat_p521_mulx_u64(&x221, &x222, x2, (arg1[3])); + fiat_p521_mulx_u64(&x223, &x224, x2, (arg1[2])); + fiat_p521_mulx_u64(&x225, &x226, x2, (arg1[1])); + fiat_p521_mulx_u64(&x227, &x228, x2, (arg1[0])); + fiat_p521_addcarryx_u64(&x229, &x230, 0x0, x228, x225); + fiat_p521_addcarryx_u64(&x231, &x232, x230, x226, x223); + fiat_p521_addcarryx_u64(&x233, &x234, x232, x224, x221); + fiat_p521_addcarryx_u64(&x235, &x236, x234, x222, x219); + fiat_p521_addcarryx_u64(&x237, &x238, x236, x220, x217); + fiat_p521_addcarryx_u64(&x239, &x240, x238, x218, x215); + fiat_p521_addcarryx_u64(&x241, &x242, x240, x216, x213); + fiat_p521_addcarryx_u64(&x243, &x244, x242, x214, x211); + x245 = (x244 + x212); + fiat_p521_addcarryx_u64(&x246, &x247, 0x0, x192, x227); + fiat_p521_addcarryx_u64(&x248, &x249, x247, x194, x229); + fiat_p521_addcarryx_u64(&x250, &x251, x249, x196, x231); + fiat_p521_addcarryx_u64(&x252, &x253, x251, x198, x233); + fiat_p521_addcarryx_u64(&x254, &x255, x253, x200, x235); + fiat_p521_addcarryx_u64(&x256, &x257, x255, x202, x237); + fiat_p521_addcarryx_u64(&x258, &x259, x257, x204, x239); + fiat_p521_addcarryx_u64(&x260, &x261, x259, x206, x241); + fiat_p521_addcarryx_u64(&x262, &x263, x261, x208, x243); + fiat_p521_addcarryx_u64(&x264, &x265, x263, x210, x245); + fiat_p521_mulx_u64(&x266, &x267, x246, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x268, &x269, x246, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x270, &x271, x246, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x272, &x273, x246, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x274, &x275, x246, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x276, &x277, x246, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x278, &x279, x246, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x280, &x281, x246, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x282, &x283, x246, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x284, &x285, 0x0, x283, x280); + fiat_p521_addcarryx_u64(&x286, &x287, x285, x281, x278); + fiat_p521_addcarryx_u64(&x288, &x289, x287, x279, x276); + fiat_p521_addcarryx_u64(&x290, &x291, x289, x277, x274); + fiat_p521_addcarryx_u64(&x292, &x293, x291, x275, x272); + fiat_p521_addcarryx_u64(&x294, &x295, x293, x273, x270); + fiat_p521_addcarryx_u64(&x296, &x297, x295, x271, x268); + fiat_p521_addcarryx_u64(&x298, &x299, x297, x269, x266); + x300 = (x299 + x267); + fiat_p521_addcarryx_u64(&x301, &x302, 0x0, x246, x282); + fiat_p521_addcarryx_u64(&x303, &x304, x302, x248, x284); + fiat_p521_addcarryx_u64(&x305, &x306, x304, x250, x286); + fiat_p521_addcarryx_u64(&x307, &x308, x306, x252, x288); + fiat_p521_addcarryx_u64(&x309, &x310, x308, x254, x290); + fiat_p521_addcarryx_u64(&x311, &x312, x310, x256, x292); + fiat_p521_addcarryx_u64(&x313, &x314, x312, x258, x294); + fiat_p521_addcarryx_u64(&x315, &x316, x314, x260, x296); + fiat_p521_addcarryx_u64(&x317, &x318, x316, x262, x298); + fiat_p521_addcarryx_u64(&x319, &x320, x318, x264, x300); + x321 = ((uint64_t)x320 + x265); + fiat_p521_mulx_u64(&x322, &x323, x3, (arg1[8])); + fiat_p521_mulx_u64(&x324, &x325, x3, (arg1[7])); + fiat_p521_mulx_u64(&x326, &x327, x3, (arg1[6])); + fiat_p521_mulx_u64(&x328, &x329, x3, (arg1[5])); + fiat_p521_mulx_u64(&x330, &x331, x3, (arg1[4])); + fiat_p521_mulx_u64(&x332, &x333, x3, (arg1[3])); + fiat_p521_mulx_u64(&x334, &x335, x3, (arg1[2])); + fiat_p521_mulx_u64(&x336, &x337, x3, (arg1[1])); + fiat_p521_mulx_u64(&x338, &x339, x3, (arg1[0])); + fiat_p521_addcarryx_u64(&x340, &x341, 0x0, x339, x336); + fiat_p521_addcarryx_u64(&x342, &x343, x341, x337, x334); + fiat_p521_addcarryx_u64(&x344, &x345, x343, x335, x332); + fiat_p521_addcarryx_u64(&x346, &x347, x345, x333, x330); + fiat_p521_addcarryx_u64(&x348, &x349, x347, x331, x328); + fiat_p521_addcarryx_u64(&x350, &x351, x349, x329, x326); + fiat_p521_addcarryx_u64(&x352, &x353, x351, x327, x324); + fiat_p521_addcarryx_u64(&x354, &x355, x353, x325, x322); + x356 = (x355 + x323); + fiat_p521_addcarryx_u64(&x357, &x358, 0x0, x303, x338); + fiat_p521_addcarryx_u64(&x359, &x360, x358, x305, x340); + fiat_p521_addcarryx_u64(&x361, &x362, x360, x307, x342); + fiat_p521_addcarryx_u64(&x363, &x364, x362, x309, x344); + fiat_p521_addcarryx_u64(&x365, &x366, x364, x311, x346); + fiat_p521_addcarryx_u64(&x367, &x368, x366, x313, x348); + fiat_p521_addcarryx_u64(&x369, &x370, x368, x315, x350); + fiat_p521_addcarryx_u64(&x371, &x372, x370, x317, x352); + fiat_p521_addcarryx_u64(&x373, &x374, x372, x319, x354); + fiat_p521_addcarryx_u64(&x375, &x376, x374, x321, x356); + fiat_p521_mulx_u64(&x377, &x378, x357, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x379, &x380, x357, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x381, &x382, x357, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x383, &x384, x357, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x385, &x386, x357, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x387, &x388, x357, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x389, &x390, x357, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x391, &x392, x357, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x393, &x394, x357, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x395, &x396, 0x0, x394, x391); + fiat_p521_addcarryx_u64(&x397, &x398, x396, x392, x389); + fiat_p521_addcarryx_u64(&x399, &x400, x398, x390, x387); + fiat_p521_addcarryx_u64(&x401, &x402, x400, x388, x385); + fiat_p521_addcarryx_u64(&x403, &x404, x402, x386, x383); + fiat_p521_addcarryx_u64(&x405, &x406, x404, x384, x381); + fiat_p521_addcarryx_u64(&x407, &x408, x406, x382, x379); + fiat_p521_addcarryx_u64(&x409, &x410, x408, x380, x377); + x411 = (x410 + x378); + fiat_p521_addcarryx_u64(&x412, &x413, 0x0, x357, x393); + fiat_p521_addcarryx_u64(&x414, &x415, x413, x359, x395); + fiat_p521_addcarryx_u64(&x416, &x417, x415, x361, x397); + fiat_p521_addcarryx_u64(&x418, &x419, x417, x363, x399); + fiat_p521_addcarryx_u64(&x420, &x421, x419, x365, x401); + fiat_p521_addcarryx_u64(&x422, &x423, x421, x367, x403); + fiat_p521_addcarryx_u64(&x424, &x425, x423, x369, x405); + fiat_p521_addcarryx_u64(&x426, &x427, x425, x371, x407); + fiat_p521_addcarryx_u64(&x428, &x429, x427, x373, x409); + fiat_p521_addcarryx_u64(&x430, &x431, x429, x375, x411); + x432 = ((uint64_t)x431 + x376); + fiat_p521_mulx_u64(&x433, &x434, x4, (arg1[8])); + fiat_p521_mulx_u64(&x435, &x436, x4, (arg1[7])); + fiat_p521_mulx_u64(&x437, &x438, x4, (arg1[6])); + fiat_p521_mulx_u64(&x439, &x440, x4, (arg1[5])); + fiat_p521_mulx_u64(&x441, &x442, x4, (arg1[4])); + fiat_p521_mulx_u64(&x443, &x444, x4, (arg1[3])); + fiat_p521_mulx_u64(&x445, &x446, x4, (arg1[2])); + fiat_p521_mulx_u64(&x447, &x448, x4, (arg1[1])); + fiat_p521_mulx_u64(&x449, &x450, x4, (arg1[0])); + fiat_p521_addcarryx_u64(&x451, &x452, 0x0, x450, x447); + fiat_p521_addcarryx_u64(&x453, &x454, x452, x448, x445); + fiat_p521_addcarryx_u64(&x455, &x456, x454, x446, x443); + fiat_p521_addcarryx_u64(&x457, &x458, x456, x444, x441); + fiat_p521_addcarryx_u64(&x459, &x460, x458, x442, x439); + fiat_p521_addcarryx_u64(&x461, &x462, x460, x440, x437); + fiat_p521_addcarryx_u64(&x463, &x464, x462, x438, x435); + fiat_p521_addcarryx_u64(&x465, &x466, x464, x436, x433); + x467 = (x466 + x434); + fiat_p521_addcarryx_u64(&x468, &x469, 0x0, x414, x449); + fiat_p521_addcarryx_u64(&x470, &x471, x469, x416, x451); + fiat_p521_addcarryx_u64(&x472, &x473, x471, x418, x453); + fiat_p521_addcarryx_u64(&x474, &x475, x473, x420, x455); + fiat_p521_addcarryx_u64(&x476, &x477, x475, x422, x457); + fiat_p521_addcarryx_u64(&x478, &x479, x477, x424, x459); + fiat_p521_addcarryx_u64(&x480, &x481, x479, x426, x461); + fiat_p521_addcarryx_u64(&x482, &x483, x481, x428, x463); + fiat_p521_addcarryx_u64(&x484, &x485, x483, x430, x465); + fiat_p521_addcarryx_u64(&x486, &x487, x485, x432, x467); + fiat_p521_mulx_u64(&x488, &x489, x468, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x490, &x491, x468, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x492, &x493, x468, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x494, &x495, x468, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x496, &x497, x468, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x498, &x499, x468, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x500, &x501, x468, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x502, &x503, x468, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x504, &x505, x468, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x506, &x507, 0x0, x505, x502); + fiat_p521_addcarryx_u64(&x508, &x509, x507, x503, x500); + fiat_p521_addcarryx_u64(&x510, &x511, x509, x501, x498); + fiat_p521_addcarryx_u64(&x512, &x513, x511, x499, x496); + fiat_p521_addcarryx_u64(&x514, &x515, x513, x497, x494); + fiat_p521_addcarryx_u64(&x516, &x517, x515, x495, x492); + fiat_p521_addcarryx_u64(&x518, &x519, x517, x493, x490); + fiat_p521_addcarryx_u64(&x520, &x521, x519, x491, x488); + x522 = (x521 + x489); + fiat_p521_addcarryx_u64(&x523, &x524, 0x0, x468, x504); + fiat_p521_addcarryx_u64(&x525, &x526, x524, x470, x506); + fiat_p521_addcarryx_u64(&x527, &x528, x526, x472, x508); + fiat_p521_addcarryx_u64(&x529, &x530, x528, x474, x510); + fiat_p521_addcarryx_u64(&x531, &x532, x530, x476, x512); + fiat_p521_addcarryx_u64(&x533, &x534, x532, x478, x514); + fiat_p521_addcarryx_u64(&x535, &x536, x534, x480, x516); + fiat_p521_addcarryx_u64(&x537, &x538, x536, x482, x518); + fiat_p521_addcarryx_u64(&x539, &x540, x538, x484, x520); + fiat_p521_addcarryx_u64(&x541, &x542, x540, x486, x522); + x543 = ((uint64_t)x542 + x487); + fiat_p521_mulx_u64(&x544, &x545, x5, (arg1[8])); + fiat_p521_mulx_u64(&x546, &x547, x5, (arg1[7])); + fiat_p521_mulx_u64(&x548, &x549, x5, (arg1[6])); + fiat_p521_mulx_u64(&x550, &x551, x5, (arg1[5])); + fiat_p521_mulx_u64(&x552, &x553, x5, (arg1[4])); + fiat_p521_mulx_u64(&x554, &x555, x5, (arg1[3])); + fiat_p521_mulx_u64(&x556, &x557, x5, (arg1[2])); + fiat_p521_mulx_u64(&x558, &x559, x5, (arg1[1])); + fiat_p521_mulx_u64(&x560, &x561, x5, (arg1[0])); + fiat_p521_addcarryx_u64(&x562, &x563, 0x0, x561, x558); + fiat_p521_addcarryx_u64(&x564, &x565, x563, x559, x556); + fiat_p521_addcarryx_u64(&x566, &x567, x565, x557, x554); + fiat_p521_addcarryx_u64(&x568, &x569, x567, x555, x552); + fiat_p521_addcarryx_u64(&x570, &x571, x569, x553, x550); + fiat_p521_addcarryx_u64(&x572, &x573, x571, x551, x548); + fiat_p521_addcarryx_u64(&x574, &x575, x573, x549, x546); + fiat_p521_addcarryx_u64(&x576, &x577, x575, x547, x544); + x578 = (x577 + x545); + fiat_p521_addcarryx_u64(&x579, &x580, 0x0, x525, x560); + fiat_p521_addcarryx_u64(&x581, &x582, x580, x527, x562); + fiat_p521_addcarryx_u64(&x583, &x584, x582, x529, x564); + fiat_p521_addcarryx_u64(&x585, &x586, x584, x531, x566); + fiat_p521_addcarryx_u64(&x587, &x588, x586, x533, x568); + fiat_p521_addcarryx_u64(&x589, &x590, x588, x535, x570); + fiat_p521_addcarryx_u64(&x591, &x592, x590, x537, x572); + fiat_p521_addcarryx_u64(&x593, &x594, x592, x539, x574); + fiat_p521_addcarryx_u64(&x595, &x596, x594, x541, x576); + fiat_p521_addcarryx_u64(&x597, &x598, x596, x543, x578); + fiat_p521_mulx_u64(&x599, &x600, x579, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x601, &x602, x579, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x603, &x604, x579, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x605, &x606, x579, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x607, &x608, x579, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x609, &x610, x579, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x611, &x612, x579, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x613, &x614, x579, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x615, &x616, x579, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x617, &x618, 0x0, x616, x613); + fiat_p521_addcarryx_u64(&x619, &x620, x618, x614, x611); + fiat_p521_addcarryx_u64(&x621, &x622, x620, x612, x609); + fiat_p521_addcarryx_u64(&x623, &x624, x622, x610, x607); + fiat_p521_addcarryx_u64(&x625, &x626, x624, x608, x605); + fiat_p521_addcarryx_u64(&x627, &x628, x626, x606, x603); + fiat_p521_addcarryx_u64(&x629, &x630, x628, x604, x601); + fiat_p521_addcarryx_u64(&x631, &x632, x630, x602, x599); + x633 = (x632 + x600); + fiat_p521_addcarryx_u64(&x634, &x635, 0x0, x579, x615); + fiat_p521_addcarryx_u64(&x636, &x637, x635, x581, x617); + fiat_p521_addcarryx_u64(&x638, &x639, x637, x583, x619); + fiat_p521_addcarryx_u64(&x640, &x641, x639, x585, x621); + fiat_p521_addcarryx_u64(&x642, &x643, x641, x587, x623); + fiat_p521_addcarryx_u64(&x644, &x645, x643, x589, x625); + fiat_p521_addcarryx_u64(&x646, &x647, x645, x591, x627); + fiat_p521_addcarryx_u64(&x648, &x649, x647, x593, x629); + fiat_p521_addcarryx_u64(&x650, &x651, x649, x595, x631); + fiat_p521_addcarryx_u64(&x652, &x653, x651, x597, x633); + x654 = ((uint64_t)x653 + x598); + fiat_p521_mulx_u64(&x655, &x656, x6, (arg1[8])); + fiat_p521_mulx_u64(&x657, &x658, x6, (arg1[7])); + fiat_p521_mulx_u64(&x659, &x660, x6, (arg1[6])); + fiat_p521_mulx_u64(&x661, &x662, x6, (arg1[5])); + fiat_p521_mulx_u64(&x663, &x664, x6, (arg1[4])); + fiat_p521_mulx_u64(&x665, &x666, x6, (arg1[3])); + fiat_p521_mulx_u64(&x667, &x668, x6, (arg1[2])); + fiat_p521_mulx_u64(&x669, &x670, x6, (arg1[1])); + fiat_p521_mulx_u64(&x671, &x672, x6, (arg1[0])); + fiat_p521_addcarryx_u64(&x673, &x674, 0x0, x672, x669); + fiat_p521_addcarryx_u64(&x675, &x676, x674, x670, x667); + fiat_p521_addcarryx_u64(&x677, &x678, x676, x668, x665); + fiat_p521_addcarryx_u64(&x679, &x680, x678, x666, x663); + fiat_p521_addcarryx_u64(&x681, &x682, x680, x664, x661); + fiat_p521_addcarryx_u64(&x683, &x684, x682, x662, x659); + fiat_p521_addcarryx_u64(&x685, &x686, x684, x660, x657); + fiat_p521_addcarryx_u64(&x687, &x688, x686, x658, x655); + x689 = (x688 + x656); + fiat_p521_addcarryx_u64(&x690, &x691, 0x0, x636, x671); + fiat_p521_addcarryx_u64(&x692, &x693, x691, x638, x673); + fiat_p521_addcarryx_u64(&x694, &x695, x693, x640, x675); + fiat_p521_addcarryx_u64(&x696, &x697, x695, x642, x677); + fiat_p521_addcarryx_u64(&x698, &x699, x697, x644, x679); + fiat_p521_addcarryx_u64(&x700, &x701, x699, x646, x681); + fiat_p521_addcarryx_u64(&x702, &x703, x701, x648, x683); + fiat_p521_addcarryx_u64(&x704, &x705, x703, x650, x685); + fiat_p521_addcarryx_u64(&x706, &x707, x705, x652, x687); + fiat_p521_addcarryx_u64(&x708, &x709, x707, x654, x689); + fiat_p521_mulx_u64(&x710, &x711, x690, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x712, &x713, x690, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x714, &x715, x690, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x716, &x717, x690, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x718, &x719, x690, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x720, &x721, x690, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x722, &x723, x690, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x724, &x725, x690, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x726, &x727, x690, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x728, &x729, 0x0, x727, x724); + fiat_p521_addcarryx_u64(&x730, &x731, x729, x725, x722); + fiat_p521_addcarryx_u64(&x732, &x733, x731, x723, x720); + fiat_p521_addcarryx_u64(&x734, &x735, x733, x721, x718); + fiat_p521_addcarryx_u64(&x736, &x737, x735, x719, x716); + fiat_p521_addcarryx_u64(&x738, &x739, x737, x717, x714); + fiat_p521_addcarryx_u64(&x740, &x741, x739, x715, x712); + fiat_p521_addcarryx_u64(&x742, &x743, x741, x713, x710); + x744 = (x743 + x711); + fiat_p521_addcarryx_u64(&x745, &x746, 0x0, x690, x726); + fiat_p521_addcarryx_u64(&x747, &x748, x746, x692, x728); + fiat_p521_addcarryx_u64(&x749, &x750, x748, x694, x730); + fiat_p521_addcarryx_u64(&x751, &x752, x750, x696, x732); + fiat_p521_addcarryx_u64(&x753, &x754, x752, x698, x734); + fiat_p521_addcarryx_u64(&x755, &x756, x754, x700, x736); + fiat_p521_addcarryx_u64(&x757, &x758, x756, x702, x738); + fiat_p521_addcarryx_u64(&x759, &x760, x758, x704, x740); + fiat_p521_addcarryx_u64(&x761, &x762, x760, x706, x742); + fiat_p521_addcarryx_u64(&x763, &x764, x762, x708, x744); + x765 = ((uint64_t)x764 + x709); + fiat_p521_mulx_u64(&x766, &x767, x7, (arg1[8])); + fiat_p521_mulx_u64(&x768, &x769, x7, (arg1[7])); + fiat_p521_mulx_u64(&x770, &x771, x7, (arg1[6])); + fiat_p521_mulx_u64(&x772, &x773, x7, (arg1[5])); + fiat_p521_mulx_u64(&x774, &x775, x7, (arg1[4])); + fiat_p521_mulx_u64(&x776, &x777, x7, (arg1[3])); + fiat_p521_mulx_u64(&x778, &x779, x7, (arg1[2])); + fiat_p521_mulx_u64(&x780, &x781, x7, (arg1[1])); + fiat_p521_mulx_u64(&x782, &x783, x7, (arg1[0])); + fiat_p521_addcarryx_u64(&x784, &x785, 0x0, x783, x780); + fiat_p521_addcarryx_u64(&x786, &x787, x785, x781, x778); + fiat_p521_addcarryx_u64(&x788, &x789, x787, x779, x776); + fiat_p521_addcarryx_u64(&x790, &x791, x789, x777, x774); + fiat_p521_addcarryx_u64(&x792, &x793, x791, x775, x772); + fiat_p521_addcarryx_u64(&x794, &x795, x793, x773, x770); + fiat_p521_addcarryx_u64(&x796, &x797, x795, x771, x768); + fiat_p521_addcarryx_u64(&x798, &x799, x797, x769, x766); + x800 = (x799 + x767); + fiat_p521_addcarryx_u64(&x801, &x802, 0x0, x747, x782); + fiat_p521_addcarryx_u64(&x803, &x804, x802, x749, x784); + fiat_p521_addcarryx_u64(&x805, &x806, x804, x751, x786); + fiat_p521_addcarryx_u64(&x807, &x808, x806, x753, x788); + fiat_p521_addcarryx_u64(&x809, &x810, x808, x755, x790); + fiat_p521_addcarryx_u64(&x811, &x812, x810, x757, x792); + fiat_p521_addcarryx_u64(&x813, &x814, x812, x759, x794); + fiat_p521_addcarryx_u64(&x815, &x816, x814, x761, x796); + fiat_p521_addcarryx_u64(&x817, &x818, x816, x763, x798); + fiat_p521_addcarryx_u64(&x819, &x820, x818, x765, x800); + fiat_p521_mulx_u64(&x821, &x822, x801, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x823, &x824, x801, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x825, &x826, x801, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x827, &x828, x801, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x829, &x830, x801, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x831, &x832, x801, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x833, &x834, x801, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x835, &x836, x801, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x837, &x838, x801, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x839, &x840, 0x0, x838, x835); + fiat_p521_addcarryx_u64(&x841, &x842, x840, x836, x833); + fiat_p521_addcarryx_u64(&x843, &x844, x842, x834, x831); + fiat_p521_addcarryx_u64(&x845, &x846, x844, x832, x829); + fiat_p521_addcarryx_u64(&x847, &x848, x846, x830, x827); + fiat_p521_addcarryx_u64(&x849, &x850, x848, x828, x825); + fiat_p521_addcarryx_u64(&x851, &x852, x850, x826, x823); + fiat_p521_addcarryx_u64(&x853, &x854, x852, x824, x821); + x855 = (x854 + x822); + fiat_p521_addcarryx_u64(&x856, &x857, 0x0, x801, x837); + fiat_p521_addcarryx_u64(&x858, &x859, x857, x803, x839); + fiat_p521_addcarryx_u64(&x860, &x861, x859, x805, x841); + fiat_p521_addcarryx_u64(&x862, &x863, x861, x807, x843); + fiat_p521_addcarryx_u64(&x864, &x865, x863, x809, x845); + fiat_p521_addcarryx_u64(&x866, &x867, x865, x811, x847); + fiat_p521_addcarryx_u64(&x868, &x869, x867, x813, x849); + fiat_p521_addcarryx_u64(&x870, &x871, x869, x815, x851); + fiat_p521_addcarryx_u64(&x872, &x873, x871, x817, x853); + fiat_p521_addcarryx_u64(&x874, &x875, x873, x819, x855); + x876 = ((uint64_t)x875 + x820); + fiat_p521_mulx_u64(&x877, &x878, x8, (arg1[8])); + fiat_p521_mulx_u64(&x879, &x880, x8, (arg1[7])); + fiat_p521_mulx_u64(&x881, &x882, x8, (arg1[6])); + fiat_p521_mulx_u64(&x883, &x884, x8, (arg1[5])); + fiat_p521_mulx_u64(&x885, &x886, x8, (arg1[4])); + fiat_p521_mulx_u64(&x887, &x888, x8, (arg1[3])); + fiat_p521_mulx_u64(&x889, &x890, x8, (arg1[2])); + fiat_p521_mulx_u64(&x891, &x892, x8, (arg1[1])); + fiat_p521_mulx_u64(&x893, &x894, x8, (arg1[0])); + fiat_p521_addcarryx_u64(&x895, &x896, 0x0, x894, x891); + fiat_p521_addcarryx_u64(&x897, &x898, x896, x892, x889); + fiat_p521_addcarryx_u64(&x899, &x900, x898, x890, x887); + fiat_p521_addcarryx_u64(&x901, &x902, x900, x888, x885); + fiat_p521_addcarryx_u64(&x903, &x904, x902, x886, x883); + fiat_p521_addcarryx_u64(&x905, &x906, x904, x884, x881); + fiat_p521_addcarryx_u64(&x907, &x908, x906, x882, x879); + fiat_p521_addcarryx_u64(&x909, &x910, x908, x880, x877); + x911 = (x910 + x878); + fiat_p521_addcarryx_u64(&x912, &x913, 0x0, x858, x893); + fiat_p521_addcarryx_u64(&x914, &x915, x913, x860, x895); + fiat_p521_addcarryx_u64(&x916, &x917, x915, x862, x897); + fiat_p521_addcarryx_u64(&x918, &x919, x917, x864, x899); + fiat_p521_addcarryx_u64(&x920, &x921, x919, x866, x901); + fiat_p521_addcarryx_u64(&x922, &x923, x921, x868, x903); + fiat_p521_addcarryx_u64(&x924, &x925, x923, x870, x905); + fiat_p521_addcarryx_u64(&x926, &x927, x925, x872, x907); + fiat_p521_addcarryx_u64(&x928, &x929, x927, x874, x909); + fiat_p521_addcarryx_u64(&x930, &x931, x929, x876, x911); + fiat_p521_mulx_u64(&x932, &x933, x912, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x934, &x935, x912, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x936, &x937, x912, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x938, &x939, x912, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x940, &x941, x912, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x942, &x943, x912, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x944, &x945, x912, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x946, &x947, x912, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x948, &x949, x912, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x950, &x951, 0x0, x949, x946); + fiat_p521_addcarryx_u64(&x952, &x953, x951, x947, x944); + fiat_p521_addcarryx_u64(&x954, &x955, x953, x945, x942); + fiat_p521_addcarryx_u64(&x956, &x957, x955, x943, x940); + fiat_p521_addcarryx_u64(&x958, &x959, x957, x941, x938); + fiat_p521_addcarryx_u64(&x960, &x961, x959, x939, x936); + fiat_p521_addcarryx_u64(&x962, &x963, x961, x937, x934); + fiat_p521_addcarryx_u64(&x964, &x965, x963, x935, x932); + x966 = (x965 + x933); + fiat_p521_addcarryx_u64(&x967, &x968, 0x0, x912, x948); + fiat_p521_addcarryx_u64(&x969, &x970, x968, x914, x950); + fiat_p521_addcarryx_u64(&x971, &x972, x970, x916, x952); + fiat_p521_addcarryx_u64(&x973, &x974, x972, x918, x954); + fiat_p521_addcarryx_u64(&x975, &x976, x974, x920, x956); + fiat_p521_addcarryx_u64(&x977, &x978, x976, x922, x958); + fiat_p521_addcarryx_u64(&x979, &x980, x978, x924, x960); + fiat_p521_addcarryx_u64(&x981, &x982, x980, x926, x962); + fiat_p521_addcarryx_u64(&x983, &x984, x982, x928, x964); + fiat_p521_addcarryx_u64(&x985, &x986, x984, x930, x966); + x987 = ((uint64_t)x986 + x931); + fiat_p521_subborrowx_u64(&x988, &x989, 0x0, x969, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x990, &x991, x989, x971, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x992, &x993, x991, x973, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x994, &x995, x993, x975, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x996, &x997, x995, x977, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x998, &x999, x997, x979, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x1000, &x1001, x999, x981, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x1002, &x1003, x1001, x983, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x1004, &x1005, x1003, x985, UINT16_C(0x1ff)); + fiat_p521_subborrowx_u64(&x1006, &x1007, x1005, x987, 0x0); + fiat_p521_cmovznz_u64(&x1008, x1007, x988, x969); + fiat_p521_cmovznz_u64(&x1009, x1007, x990, x971); + fiat_p521_cmovznz_u64(&x1010, x1007, x992, x973); + fiat_p521_cmovznz_u64(&x1011, x1007, x994, x975); + fiat_p521_cmovznz_u64(&x1012, x1007, x996, x977); + fiat_p521_cmovznz_u64(&x1013, x1007, x998, x979); + fiat_p521_cmovznz_u64(&x1014, x1007, x1000, x981); + fiat_p521_cmovznz_u64(&x1015, x1007, x1002, x983); + fiat_p521_cmovznz_u64(&x1016, x1007, x1004, x985); + out1[0] = x1008; + out1[1] = x1009; + out1[2] = x1010; + out1[3] = x1011; + out1[4] = x1012; + out1[5] = x1013; + out1[6] = x1014; + out1[7] = x1015; + out1[8] = x1016; +} + +/* + * The function fiat_p521_add adds two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p521_add(uint64_t out1[9], const uint64_t arg1[9], const uint64_t arg2[9]) { + uint64_t x1; + fiat_p521_uint1 x2; + uint64_t x3; + fiat_p521_uint1 x4; + uint64_t x5; + fiat_p521_uint1 x6; + uint64_t x7; + fiat_p521_uint1 x8; + uint64_t x9; + fiat_p521_uint1 x10; + uint64_t x11; + fiat_p521_uint1 x12; + uint64_t x13; + fiat_p521_uint1 x14; + uint64_t x15; + fiat_p521_uint1 x16; + uint64_t x17; + fiat_p521_uint1 x18; + uint64_t x19; + fiat_p521_uint1 x20; + uint64_t x21; + fiat_p521_uint1 x22; + uint64_t x23; + fiat_p521_uint1 x24; + uint64_t x25; + fiat_p521_uint1 x26; + uint64_t x27; + fiat_p521_uint1 x28; + uint64_t x29; + fiat_p521_uint1 x30; + uint64_t x31; + fiat_p521_uint1 x32; + uint64_t x33; + fiat_p521_uint1 x34; + uint64_t x35; + fiat_p521_uint1 x36; + uint64_t x37; + fiat_p521_uint1 x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + fiat_p521_addcarryx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_p521_addcarryx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_p521_addcarryx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_p521_addcarryx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_p521_addcarryx_u64(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_p521_addcarryx_u64(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_p521_addcarryx_u64(&x13, &x14, x12, (arg1[6]), (arg2[6])); + fiat_p521_addcarryx_u64(&x15, &x16, x14, (arg1[7]), (arg2[7])); + fiat_p521_addcarryx_u64(&x17, &x18, x16, (arg1[8]), (arg2[8])); + fiat_p521_subborrowx_u64(&x19, &x20, 0x0, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x21, &x22, x20, x3, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x23, &x24, x22, x5, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x25, &x26, x24, x7, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x27, &x28, x26, x9, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x29, &x30, x28, x11, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x31, &x32, x30, x13, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x33, &x34, x32, x15, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x35, &x36, x34, x17, UINT16_C(0x1ff)); + fiat_p521_subborrowx_u64(&x37, &x38, x36, x18, 0x0); + fiat_p521_cmovznz_u64(&x39, x38, x19, x1); + fiat_p521_cmovznz_u64(&x40, x38, x21, x3); + fiat_p521_cmovznz_u64(&x41, x38, x23, x5); + fiat_p521_cmovznz_u64(&x42, x38, x25, x7); + fiat_p521_cmovznz_u64(&x43, x38, x27, x9); + fiat_p521_cmovznz_u64(&x44, x38, x29, x11); + fiat_p521_cmovznz_u64(&x45, x38, x31, x13); + fiat_p521_cmovznz_u64(&x46, x38, x33, x15); + fiat_p521_cmovznz_u64(&x47, x38, x35, x17); + out1[0] = x39; + out1[1] = x40; + out1[2] = x41; + out1[3] = x42; + out1[4] = x43; + out1[5] = x44; + out1[6] = x45; + out1[7] = x46; + out1[8] = x47; +} + +/* + * The function fiat_p521_sub subtracts two field elements in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * 0 ≤ eval arg2 < m + * Postconditions: + * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p521_sub(uint64_t out1[9], const uint64_t arg1[9], const uint64_t arg2[9]) { + uint64_t x1; + fiat_p521_uint1 x2; + uint64_t x3; + fiat_p521_uint1 x4; + uint64_t x5; + fiat_p521_uint1 x6; + uint64_t x7; + fiat_p521_uint1 x8; + uint64_t x9; + fiat_p521_uint1 x10; + uint64_t x11; + fiat_p521_uint1 x12; + uint64_t x13; + fiat_p521_uint1 x14; + uint64_t x15; + fiat_p521_uint1 x16; + uint64_t x17; + fiat_p521_uint1 x18; + uint64_t x19; + uint64_t x20; + fiat_p521_uint1 x21; + uint64_t x22; + fiat_p521_uint1 x23; + uint64_t x24; + fiat_p521_uint1 x25; + uint64_t x26; + fiat_p521_uint1 x27; + uint64_t x28; + fiat_p521_uint1 x29; + uint64_t x30; + fiat_p521_uint1 x31; + uint64_t x32; + fiat_p521_uint1 x33; + uint64_t x34; + fiat_p521_uint1 x35; + uint64_t x36; + fiat_p521_uint1 x37; + fiat_p521_subborrowx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); + fiat_p521_subborrowx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); + fiat_p521_subborrowx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); + fiat_p521_subborrowx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); + fiat_p521_subborrowx_u64(&x9, &x10, x8, (arg1[4]), (arg2[4])); + fiat_p521_subborrowx_u64(&x11, &x12, x10, (arg1[5]), (arg2[5])); + fiat_p521_subborrowx_u64(&x13, &x14, x12, (arg1[6]), (arg2[6])); + fiat_p521_subborrowx_u64(&x15, &x16, x14, (arg1[7]), (arg2[7])); + fiat_p521_subborrowx_u64(&x17, &x18, x16, (arg1[8]), (arg2[8])); + fiat_p521_cmovznz_u64(&x19, x18, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x20, &x21, 0x0, x1, x19); + fiat_p521_addcarryx_u64(&x22, &x23, x21, x3, x19); + fiat_p521_addcarryx_u64(&x24, &x25, x23, x5, x19); + fiat_p521_addcarryx_u64(&x26, &x27, x25, x7, x19); + fiat_p521_addcarryx_u64(&x28, &x29, x27, x9, x19); + fiat_p521_addcarryx_u64(&x30, &x31, x29, x11, x19); + fiat_p521_addcarryx_u64(&x32, &x33, x31, x13, x19); + fiat_p521_addcarryx_u64(&x34, &x35, x33, x15, x19); + fiat_p521_addcarryx_u64(&x36, &x37, x35, x17, (x19 & UINT16_C(0x1ff))); + out1[0] = x20; + out1[1] = x22; + out1[2] = x24; + out1[3] = x26; + out1[4] = x28; + out1[5] = x30; + out1[6] = x32; + out1[7] = x34; + out1[8] = x36; +} + +/* + * The function fiat_p521_opp negates a field element in the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p521_opp(uint64_t out1[9], const uint64_t arg1[9]) { + uint64_t x1; + fiat_p521_uint1 x2; + uint64_t x3; + fiat_p521_uint1 x4; + uint64_t x5; + fiat_p521_uint1 x6; + uint64_t x7; + fiat_p521_uint1 x8; + uint64_t x9; + fiat_p521_uint1 x10; + uint64_t x11; + fiat_p521_uint1 x12; + uint64_t x13; + fiat_p521_uint1 x14; + uint64_t x15; + fiat_p521_uint1 x16; + uint64_t x17; + fiat_p521_uint1 x18; + uint64_t x19; + uint64_t x20; + fiat_p521_uint1 x21; + uint64_t x22; + fiat_p521_uint1 x23; + uint64_t x24; + fiat_p521_uint1 x25; + uint64_t x26; + fiat_p521_uint1 x27; + uint64_t x28; + fiat_p521_uint1 x29; + uint64_t x30; + fiat_p521_uint1 x31; + uint64_t x32; + fiat_p521_uint1 x33; + uint64_t x34; + fiat_p521_uint1 x35; + uint64_t x36; + fiat_p521_uint1 x37; + fiat_p521_subborrowx_u64(&x1, &x2, 0x0, 0x0, (arg1[0])); + fiat_p521_subborrowx_u64(&x3, &x4, x2, 0x0, (arg1[1])); + fiat_p521_subborrowx_u64(&x5, &x6, x4, 0x0, (arg1[2])); + fiat_p521_subborrowx_u64(&x7, &x8, x6, 0x0, (arg1[3])); + fiat_p521_subborrowx_u64(&x9, &x10, x8, 0x0, (arg1[4])); + fiat_p521_subborrowx_u64(&x11, &x12, x10, 0x0, (arg1[5])); + fiat_p521_subborrowx_u64(&x13, &x14, x12, 0x0, (arg1[6])); + fiat_p521_subborrowx_u64(&x15, &x16, x14, 0x0, (arg1[7])); + fiat_p521_subborrowx_u64(&x17, &x18, x16, 0x0, (arg1[8])); + fiat_p521_cmovznz_u64(&x19, x18, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x20, &x21, 0x0, x1, x19); + fiat_p521_addcarryx_u64(&x22, &x23, x21, x3, x19); + fiat_p521_addcarryx_u64(&x24, &x25, x23, x5, x19); + fiat_p521_addcarryx_u64(&x26, &x27, x25, x7, x19); + fiat_p521_addcarryx_u64(&x28, &x29, x27, x9, x19); + fiat_p521_addcarryx_u64(&x30, &x31, x29, x11, x19); + fiat_p521_addcarryx_u64(&x32, &x33, x31, x13, x19); + fiat_p521_addcarryx_u64(&x34, &x35, x33, x15, x19); + fiat_p521_addcarryx_u64(&x36, &x37, x35, x17, (x19 & UINT16_C(0x1ff))); + out1[0] = x20; + out1[1] = x22; + out1[2] = x24; + out1[3] = x26; + out1[4] = x28; + out1[5] = x30; + out1[6] = x32; + out1[7] = x34; + out1[8] = x36; +} + +/* + * The function fiat_p521_from_montgomery translates a field element out of the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval out1 mod m = (eval arg1 * ((2^64)⁻¹ mod m)^9) mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p521_from_montgomery(uint64_t out1[9], const uint64_t arg1[9]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + fiat_p521_uint1 x21; + uint64_t x22; + fiat_p521_uint1 x23; + uint64_t x24; + fiat_p521_uint1 x25; + uint64_t x26; + fiat_p521_uint1 x27; + uint64_t x28; + fiat_p521_uint1 x29; + uint64_t x30; + fiat_p521_uint1 x31; + uint64_t x32; + fiat_p521_uint1 x33; + uint64_t x34; + fiat_p521_uint1 x35; + uint64_t x36; + fiat_p521_uint1 x37; + uint64_t x38; + fiat_p521_uint1 x39; + uint64_t x40; + fiat_p521_uint1 x41; + uint64_t x42; + fiat_p521_uint1 x43; + uint64_t x44; + fiat_p521_uint1 x45; + uint64_t x46; + fiat_p521_uint1 x47; + uint64_t x48; + fiat_p521_uint1 x49; + uint64_t x50; + fiat_p521_uint1 x51; + uint64_t x52; + fiat_p521_uint1 x53; + uint64_t x54; + fiat_p521_uint1 x55; + uint64_t x56; + fiat_p521_uint1 x57; + uint64_t x58; + fiat_p521_uint1 x59; + uint64_t x60; + fiat_p521_uint1 x61; + uint64_t x62; + fiat_p521_uint1 x63; + uint64_t x64; + fiat_p521_uint1 x65; + uint64_t x66; + fiat_p521_uint1 x67; + uint64_t x68; + fiat_p521_uint1 x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + uint64_t x81; + uint64_t x82; + uint64_t x83; + uint64_t x84; + uint64_t x85; + uint64_t x86; + uint64_t x87; + uint64_t x88; + fiat_p521_uint1 x89; + uint64_t x90; + fiat_p521_uint1 x91; + uint64_t x92; + fiat_p521_uint1 x93; + uint64_t x94; + fiat_p521_uint1 x95; + uint64_t x96; + fiat_p521_uint1 x97; + uint64_t x98; + fiat_p521_uint1 x99; + uint64_t x100; + fiat_p521_uint1 x101; + uint64_t x102; + fiat_p521_uint1 x103; + uint64_t x104; + fiat_p521_uint1 x105; + uint64_t x106; + fiat_p521_uint1 x107; + uint64_t x108; + fiat_p521_uint1 x109; + uint64_t x110; + fiat_p521_uint1 x111; + uint64_t x112; + fiat_p521_uint1 x113; + uint64_t x114; + fiat_p521_uint1 x115; + uint64_t x116; + fiat_p521_uint1 x117; + uint64_t x118; + fiat_p521_uint1 x119; + uint64_t x120; + fiat_p521_uint1 x121; + uint64_t x122; + fiat_p521_uint1 x123; + uint64_t x124; + fiat_p521_uint1 x125; + uint64_t x126; + fiat_p521_uint1 x127; + uint64_t x128; + fiat_p521_uint1 x129; + uint64_t x130; + fiat_p521_uint1 x131; + uint64_t x132; + fiat_p521_uint1 x133; + uint64_t x134; + fiat_p521_uint1 x135; + uint64_t x136; + fiat_p521_uint1 x137; + uint64_t x138; + uint64_t x139; + uint64_t x140; + uint64_t x141; + uint64_t x142; + uint64_t x143; + uint64_t x144; + uint64_t x145; + uint64_t x146; + uint64_t x147; + uint64_t x148; + uint64_t x149; + uint64_t x150; + uint64_t x151; + uint64_t x152; + uint64_t x153; + uint64_t x154; + uint64_t x155; + uint64_t x156; + fiat_p521_uint1 x157; + uint64_t x158; + fiat_p521_uint1 x159; + uint64_t x160; + fiat_p521_uint1 x161; + uint64_t x162; + fiat_p521_uint1 x163; + uint64_t x164; + fiat_p521_uint1 x165; + uint64_t x166; + fiat_p521_uint1 x167; + uint64_t x168; + fiat_p521_uint1 x169; + uint64_t x170; + fiat_p521_uint1 x171; + uint64_t x172; + fiat_p521_uint1 x173; + uint64_t x174; + fiat_p521_uint1 x175; + uint64_t x176; + fiat_p521_uint1 x177; + uint64_t x178; + fiat_p521_uint1 x179; + uint64_t x180; + fiat_p521_uint1 x181; + uint64_t x182; + fiat_p521_uint1 x183; + uint64_t x184; + fiat_p521_uint1 x185; + uint64_t x186; + fiat_p521_uint1 x187; + uint64_t x188; + fiat_p521_uint1 x189; + uint64_t x190; + fiat_p521_uint1 x191; + uint64_t x192; + fiat_p521_uint1 x193; + uint64_t x194; + fiat_p521_uint1 x195; + uint64_t x196; + fiat_p521_uint1 x197; + uint64_t x198; + fiat_p521_uint1 x199; + uint64_t x200; + fiat_p521_uint1 x201; + uint64_t x202; + fiat_p521_uint1 x203; + uint64_t x204; + fiat_p521_uint1 x205; + uint64_t x206; + uint64_t x207; + uint64_t x208; + uint64_t x209; + uint64_t x210; + uint64_t x211; + uint64_t x212; + uint64_t x213; + uint64_t x214; + uint64_t x215; + uint64_t x216; + uint64_t x217; + uint64_t x218; + uint64_t x219; + uint64_t x220; + uint64_t x221; + uint64_t x222; + uint64_t x223; + uint64_t x224; + fiat_p521_uint1 x225; + uint64_t x226; + fiat_p521_uint1 x227; + uint64_t x228; + fiat_p521_uint1 x229; + uint64_t x230; + fiat_p521_uint1 x231; + uint64_t x232; + fiat_p521_uint1 x233; + uint64_t x234; + fiat_p521_uint1 x235; + uint64_t x236; + fiat_p521_uint1 x237; + uint64_t x238; + fiat_p521_uint1 x239; + uint64_t x240; + fiat_p521_uint1 x241; + uint64_t x242; + fiat_p521_uint1 x243; + uint64_t x244; + fiat_p521_uint1 x245; + uint64_t x246; + fiat_p521_uint1 x247; + uint64_t x248; + fiat_p521_uint1 x249; + uint64_t x250; + fiat_p521_uint1 x251; + uint64_t x252; + fiat_p521_uint1 x253; + uint64_t x254; + fiat_p521_uint1 x255; + uint64_t x256; + fiat_p521_uint1 x257; + uint64_t x258; + fiat_p521_uint1 x259; + uint64_t x260; + fiat_p521_uint1 x261; + uint64_t x262; + fiat_p521_uint1 x263; + uint64_t x264; + fiat_p521_uint1 x265; + uint64_t x266; + fiat_p521_uint1 x267; + uint64_t x268; + fiat_p521_uint1 x269; + uint64_t x270; + fiat_p521_uint1 x271; + uint64_t x272; + fiat_p521_uint1 x273; + uint64_t x274; + uint64_t x275; + uint64_t x276; + uint64_t x277; + uint64_t x278; + uint64_t x279; + uint64_t x280; + uint64_t x281; + uint64_t x282; + uint64_t x283; + uint64_t x284; + uint64_t x285; + uint64_t x286; + uint64_t x287; + uint64_t x288; + uint64_t x289; + uint64_t x290; + uint64_t x291; + uint64_t x292; + fiat_p521_uint1 x293; + uint64_t x294; + fiat_p521_uint1 x295; + uint64_t x296; + fiat_p521_uint1 x297; + uint64_t x298; + fiat_p521_uint1 x299; + uint64_t x300; + fiat_p521_uint1 x301; + uint64_t x302; + fiat_p521_uint1 x303; + uint64_t x304; + fiat_p521_uint1 x305; + uint64_t x306; + fiat_p521_uint1 x307; + uint64_t x308; + fiat_p521_uint1 x309; + uint64_t x310; + fiat_p521_uint1 x311; + uint64_t x312; + fiat_p521_uint1 x313; + uint64_t x314; + fiat_p521_uint1 x315; + uint64_t x316; + fiat_p521_uint1 x317; + uint64_t x318; + fiat_p521_uint1 x319; + uint64_t x320; + fiat_p521_uint1 x321; + uint64_t x322; + fiat_p521_uint1 x323; + uint64_t x324; + fiat_p521_uint1 x325; + uint64_t x326; + fiat_p521_uint1 x327; + uint64_t x328; + fiat_p521_uint1 x329; + uint64_t x330; + fiat_p521_uint1 x331; + uint64_t x332; + fiat_p521_uint1 x333; + uint64_t x334; + fiat_p521_uint1 x335; + uint64_t x336; + fiat_p521_uint1 x337; + uint64_t x338; + fiat_p521_uint1 x339; + uint64_t x340; + fiat_p521_uint1 x341; + uint64_t x342; + uint64_t x343; + uint64_t x344; + uint64_t x345; + uint64_t x346; + uint64_t x347; + uint64_t x348; + uint64_t x349; + uint64_t x350; + uint64_t x351; + uint64_t x352; + uint64_t x353; + uint64_t x354; + uint64_t x355; + uint64_t x356; + uint64_t x357; + uint64_t x358; + uint64_t x359; + uint64_t x360; + fiat_p521_uint1 x361; + uint64_t x362; + fiat_p521_uint1 x363; + uint64_t x364; + fiat_p521_uint1 x365; + uint64_t x366; + fiat_p521_uint1 x367; + uint64_t x368; + fiat_p521_uint1 x369; + uint64_t x370; + fiat_p521_uint1 x371; + uint64_t x372; + fiat_p521_uint1 x373; + uint64_t x374; + fiat_p521_uint1 x375; + uint64_t x376; + fiat_p521_uint1 x377; + uint64_t x378; + fiat_p521_uint1 x379; + uint64_t x380; + fiat_p521_uint1 x381; + uint64_t x382; + fiat_p521_uint1 x383; + uint64_t x384; + fiat_p521_uint1 x385; + uint64_t x386; + fiat_p521_uint1 x387; + uint64_t x388; + fiat_p521_uint1 x389; + uint64_t x390; + fiat_p521_uint1 x391; + uint64_t x392; + fiat_p521_uint1 x393; + uint64_t x394; + fiat_p521_uint1 x395; + uint64_t x396; + fiat_p521_uint1 x397; + uint64_t x398; + fiat_p521_uint1 x399; + uint64_t x400; + fiat_p521_uint1 x401; + uint64_t x402; + fiat_p521_uint1 x403; + uint64_t x404; + fiat_p521_uint1 x405; + uint64_t x406; + fiat_p521_uint1 x407; + uint64_t x408; + fiat_p521_uint1 x409; + uint64_t x410; + uint64_t x411; + uint64_t x412; + uint64_t x413; + uint64_t x414; + uint64_t x415; + uint64_t x416; + uint64_t x417; + uint64_t x418; + uint64_t x419; + uint64_t x420; + uint64_t x421; + uint64_t x422; + uint64_t x423; + uint64_t x424; + uint64_t x425; + uint64_t x426; + uint64_t x427; + uint64_t x428; + fiat_p521_uint1 x429; + uint64_t x430; + fiat_p521_uint1 x431; + uint64_t x432; + fiat_p521_uint1 x433; + uint64_t x434; + fiat_p521_uint1 x435; + uint64_t x436; + fiat_p521_uint1 x437; + uint64_t x438; + fiat_p521_uint1 x439; + uint64_t x440; + fiat_p521_uint1 x441; + uint64_t x442; + fiat_p521_uint1 x443; + uint64_t x444; + fiat_p521_uint1 x445; + uint64_t x446; + fiat_p521_uint1 x447; + uint64_t x448; + fiat_p521_uint1 x449; + uint64_t x450; + fiat_p521_uint1 x451; + uint64_t x452; + fiat_p521_uint1 x453; + uint64_t x454; + fiat_p521_uint1 x455; + uint64_t x456; + fiat_p521_uint1 x457; + uint64_t x458; + fiat_p521_uint1 x459; + uint64_t x460; + fiat_p521_uint1 x461; + uint64_t x462; + fiat_p521_uint1 x463; + uint64_t x464; + fiat_p521_uint1 x465; + uint64_t x466; + fiat_p521_uint1 x467; + uint64_t x468; + fiat_p521_uint1 x469; + uint64_t x470; + fiat_p521_uint1 x471; + uint64_t x472; + fiat_p521_uint1 x473; + uint64_t x474; + fiat_p521_uint1 x475; + uint64_t x476; + fiat_p521_uint1 x477; + uint64_t x478; + uint64_t x479; + uint64_t x480; + uint64_t x481; + uint64_t x482; + uint64_t x483; + uint64_t x484; + uint64_t x485; + uint64_t x486; + uint64_t x487; + uint64_t x488; + uint64_t x489; + uint64_t x490; + uint64_t x491; + uint64_t x492; + uint64_t x493; + uint64_t x494; + uint64_t x495; + uint64_t x496; + fiat_p521_uint1 x497; + uint64_t x498; + fiat_p521_uint1 x499; + uint64_t x500; + fiat_p521_uint1 x501; + uint64_t x502; + fiat_p521_uint1 x503; + uint64_t x504; + fiat_p521_uint1 x505; + uint64_t x506; + fiat_p521_uint1 x507; + uint64_t x508; + fiat_p521_uint1 x509; + uint64_t x510; + fiat_p521_uint1 x511; + uint64_t x512; + fiat_p521_uint1 x513; + uint64_t x514; + fiat_p521_uint1 x515; + uint64_t x516; + fiat_p521_uint1 x517; + uint64_t x518; + fiat_p521_uint1 x519; + uint64_t x520; + fiat_p521_uint1 x521; + uint64_t x522; + fiat_p521_uint1 x523; + uint64_t x524; + fiat_p521_uint1 x525; + uint64_t x526; + fiat_p521_uint1 x527; + uint64_t x528; + fiat_p521_uint1 x529; + uint64_t x530; + fiat_p521_uint1 x531; + uint64_t x532; + fiat_p521_uint1 x533; + uint64_t x534; + fiat_p521_uint1 x535; + uint64_t x536; + fiat_p521_uint1 x537; + uint64_t x538; + fiat_p521_uint1 x539; + uint64_t x540; + fiat_p521_uint1 x541; + uint64_t x542; + fiat_p521_uint1 x543; + uint64_t x544; + fiat_p521_uint1 x545; + uint64_t x546; + uint64_t x547; + uint64_t x548; + uint64_t x549; + uint64_t x550; + uint64_t x551; + uint64_t x552; + uint64_t x553; + uint64_t x554; + uint64_t x555; + uint64_t x556; + uint64_t x557; + uint64_t x558; + uint64_t x559; + uint64_t x560; + uint64_t x561; + uint64_t x562; + uint64_t x563; + uint64_t x564; + fiat_p521_uint1 x565; + uint64_t x566; + fiat_p521_uint1 x567; + uint64_t x568; + fiat_p521_uint1 x569; + uint64_t x570; + fiat_p521_uint1 x571; + uint64_t x572; + fiat_p521_uint1 x573; + uint64_t x574; + fiat_p521_uint1 x575; + uint64_t x576; + fiat_p521_uint1 x577; + uint64_t x578; + fiat_p521_uint1 x579; + uint64_t x580; + fiat_p521_uint1 x581; + uint64_t x582; + fiat_p521_uint1 x583; + uint64_t x584; + fiat_p521_uint1 x585; + uint64_t x586; + fiat_p521_uint1 x587; + uint64_t x588; + fiat_p521_uint1 x589; + uint64_t x590; + fiat_p521_uint1 x591; + uint64_t x592; + fiat_p521_uint1 x593; + uint64_t x594; + fiat_p521_uint1 x595; + uint64_t x596; + fiat_p521_uint1 x597; + uint64_t x598; + uint64_t x599; + fiat_p521_uint1 x600; + uint64_t x601; + fiat_p521_uint1 x602; + uint64_t x603; + fiat_p521_uint1 x604; + uint64_t x605; + fiat_p521_uint1 x606; + uint64_t x607; + fiat_p521_uint1 x608; + uint64_t x609; + fiat_p521_uint1 x610; + uint64_t x611; + fiat_p521_uint1 x612; + uint64_t x613; + fiat_p521_uint1 x614; + uint64_t x615; + fiat_p521_uint1 x616; + uint64_t x617; + fiat_p521_uint1 x618; + uint64_t x619; + uint64_t x620; + uint64_t x621; + uint64_t x622; + uint64_t x623; + uint64_t x624; + uint64_t x625; + uint64_t x626; + uint64_t x627; + x1 = (arg1[0]); + fiat_p521_mulx_u64(&x2, &x3, x1, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x4, &x5, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x6, &x7, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x8, &x9, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x10, &x11, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x12, &x13, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x14, &x15, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x16, &x17, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x18, &x19, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x20, &x21, 0x0, x19, x16); + fiat_p521_addcarryx_u64(&x22, &x23, x21, x17, x14); + fiat_p521_addcarryx_u64(&x24, &x25, x23, x15, x12); + fiat_p521_addcarryx_u64(&x26, &x27, x25, x13, x10); + fiat_p521_addcarryx_u64(&x28, &x29, x27, x11, x8); + fiat_p521_addcarryx_u64(&x30, &x31, x29, x9, x6); + fiat_p521_addcarryx_u64(&x32, &x33, x31, x7, x4); + fiat_p521_addcarryx_u64(&x34, &x35, x33, x5, x2); + fiat_p521_addcarryx_u64(&x36, &x37, 0x0, x1, x18); + fiat_p521_addcarryx_u64(&x38, &x39, x37, 0x0, x20); + fiat_p521_addcarryx_u64(&x40, &x41, x39, 0x0, x22); + fiat_p521_addcarryx_u64(&x42, &x43, x41, 0x0, x24); + fiat_p521_addcarryx_u64(&x44, &x45, x43, 0x0, x26); + fiat_p521_addcarryx_u64(&x46, &x47, x45, 0x0, x28); + fiat_p521_addcarryx_u64(&x48, &x49, x47, 0x0, x30); + fiat_p521_addcarryx_u64(&x50, &x51, x49, 0x0, x32); + fiat_p521_addcarryx_u64(&x52, &x53, x51, 0x0, x34); + fiat_p521_addcarryx_u64(&x54, &x55, 0x0, x38, (arg1[1])); + fiat_p521_addcarryx_u64(&x56, &x57, x55, x40, 0x0); + fiat_p521_addcarryx_u64(&x58, &x59, x57, x42, 0x0); + fiat_p521_addcarryx_u64(&x60, &x61, x59, x44, 0x0); + fiat_p521_addcarryx_u64(&x62, &x63, x61, x46, 0x0); + fiat_p521_addcarryx_u64(&x64, &x65, x63, x48, 0x0); + fiat_p521_addcarryx_u64(&x66, &x67, x65, x50, 0x0); + fiat_p521_addcarryx_u64(&x68, &x69, x67, x52, 0x0); + fiat_p521_mulx_u64(&x70, &x71, x54, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x72, &x73, x54, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x74, &x75, x54, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x76, &x77, x54, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x78, &x79, x54, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x80, &x81, x54, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x82, &x83, x54, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x84, &x85, x54, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x86, &x87, x54, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x88, &x89, 0x0, x87, x84); + fiat_p521_addcarryx_u64(&x90, &x91, x89, x85, x82); + fiat_p521_addcarryx_u64(&x92, &x93, x91, x83, x80); + fiat_p521_addcarryx_u64(&x94, &x95, x93, x81, x78); + fiat_p521_addcarryx_u64(&x96, &x97, x95, x79, x76); + fiat_p521_addcarryx_u64(&x98, &x99, x97, x77, x74); + fiat_p521_addcarryx_u64(&x100, &x101, x99, x75, x72); + fiat_p521_addcarryx_u64(&x102, &x103, x101, x73, x70); + fiat_p521_addcarryx_u64(&x104, &x105, 0x0, x54, x86); + fiat_p521_addcarryx_u64(&x106, &x107, x105, x56, x88); + fiat_p521_addcarryx_u64(&x108, &x109, x107, x58, x90); + fiat_p521_addcarryx_u64(&x110, &x111, x109, x60, x92); + fiat_p521_addcarryx_u64(&x112, &x113, x111, x62, x94); + fiat_p521_addcarryx_u64(&x114, &x115, x113, x64, x96); + fiat_p521_addcarryx_u64(&x116, &x117, x115, x66, x98); + fiat_p521_addcarryx_u64(&x118, &x119, x117, x68, x100); + fiat_p521_addcarryx_u64(&x120, &x121, x119, (x69 + (x53 + (x35 + x3))), x102); + fiat_p521_addcarryx_u64(&x122, &x123, 0x0, x106, (arg1[2])); + fiat_p521_addcarryx_u64(&x124, &x125, x123, x108, 0x0); + fiat_p521_addcarryx_u64(&x126, &x127, x125, x110, 0x0); + fiat_p521_addcarryx_u64(&x128, &x129, x127, x112, 0x0); + fiat_p521_addcarryx_u64(&x130, &x131, x129, x114, 0x0); + fiat_p521_addcarryx_u64(&x132, &x133, x131, x116, 0x0); + fiat_p521_addcarryx_u64(&x134, &x135, x133, x118, 0x0); + fiat_p521_addcarryx_u64(&x136, &x137, x135, x120, 0x0); + fiat_p521_mulx_u64(&x138, &x139, x122, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x140, &x141, x122, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x142, &x143, x122, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x144, &x145, x122, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x146, &x147, x122, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x148, &x149, x122, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x150, &x151, x122, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x152, &x153, x122, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x154, &x155, x122, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x156, &x157, 0x0, x155, x152); + fiat_p521_addcarryx_u64(&x158, &x159, x157, x153, x150); + fiat_p521_addcarryx_u64(&x160, &x161, x159, x151, x148); + fiat_p521_addcarryx_u64(&x162, &x163, x161, x149, x146); + fiat_p521_addcarryx_u64(&x164, &x165, x163, x147, x144); + fiat_p521_addcarryx_u64(&x166, &x167, x165, x145, x142); + fiat_p521_addcarryx_u64(&x168, &x169, x167, x143, x140); + fiat_p521_addcarryx_u64(&x170, &x171, x169, x141, x138); + fiat_p521_addcarryx_u64(&x172, &x173, 0x0, x122, x154); + fiat_p521_addcarryx_u64(&x174, &x175, x173, x124, x156); + fiat_p521_addcarryx_u64(&x176, &x177, x175, x126, x158); + fiat_p521_addcarryx_u64(&x178, &x179, x177, x128, x160); + fiat_p521_addcarryx_u64(&x180, &x181, x179, x130, x162); + fiat_p521_addcarryx_u64(&x182, &x183, x181, x132, x164); + fiat_p521_addcarryx_u64(&x184, &x185, x183, x134, x166); + fiat_p521_addcarryx_u64(&x186, &x187, x185, x136, x168); + fiat_p521_addcarryx_u64(&x188, &x189, x187, (x137 + (x121 + (x103 + x71))), x170); + fiat_p521_addcarryx_u64(&x190, &x191, 0x0, x174, (arg1[3])); + fiat_p521_addcarryx_u64(&x192, &x193, x191, x176, 0x0); + fiat_p521_addcarryx_u64(&x194, &x195, x193, x178, 0x0); + fiat_p521_addcarryx_u64(&x196, &x197, x195, x180, 0x0); + fiat_p521_addcarryx_u64(&x198, &x199, x197, x182, 0x0); + fiat_p521_addcarryx_u64(&x200, &x201, x199, x184, 0x0); + fiat_p521_addcarryx_u64(&x202, &x203, x201, x186, 0x0); + fiat_p521_addcarryx_u64(&x204, &x205, x203, x188, 0x0); + fiat_p521_mulx_u64(&x206, &x207, x190, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x208, &x209, x190, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x210, &x211, x190, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x212, &x213, x190, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x214, &x215, x190, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x216, &x217, x190, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x218, &x219, x190, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x220, &x221, x190, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x222, &x223, x190, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x224, &x225, 0x0, x223, x220); + fiat_p521_addcarryx_u64(&x226, &x227, x225, x221, x218); + fiat_p521_addcarryx_u64(&x228, &x229, x227, x219, x216); + fiat_p521_addcarryx_u64(&x230, &x231, x229, x217, x214); + fiat_p521_addcarryx_u64(&x232, &x233, x231, x215, x212); + fiat_p521_addcarryx_u64(&x234, &x235, x233, x213, x210); + fiat_p521_addcarryx_u64(&x236, &x237, x235, x211, x208); + fiat_p521_addcarryx_u64(&x238, &x239, x237, x209, x206); + fiat_p521_addcarryx_u64(&x240, &x241, 0x0, x190, x222); + fiat_p521_addcarryx_u64(&x242, &x243, x241, x192, x224); + fiat_p521_addcarryx_u64(&x244, &x245, x243, x194, x226); + fiat_p521_addcarryx_u64(&x246, &x247, x245, x196, x228); + fiat_p521_addcarryx_u64(&x248, &x249, x247, x198, x230); + fiat_p521_addcarryx_u64(&x250, &x251, x249, x200, x232); + fiat_p521_addcarryx_u64(&x252, &x253, x251, x202, x234); + fiat_p521_addcarryx_u64(&x254, &x255, x253, x204, x236); + fiat_p521_addcarryx_u64(&x256, &x257, x255, (x205 + (x189 + (x171 + x139))), x238); + fiat_p521_addcarryx_u64(&x258, &x259, 0x0, x242, (arg1[4])); + fiat_p521_addcarryx_u64(&x260, &x261, x259, x244, 0x0); + fiat_p521_addcarryx_u64(&x262, &x263, x261, x246, 0x0); + fiat_p521_addcarryx_u64(&x264, &x265, x263, x248, 0x0); + fiat_p521_addcarryx_u64(&x266, &x267, x265, x250, 0x0); + fiat_p521_addcarryx_u64(&x268, &x269, x267, x252, 0x0); + fiat_p521_addcarryx_u64(&x270, &x271, x269, x254, 0x0); + fiat_p521_addcarryx_u64(&x272, &x273, x271, x256, 0x0); + fiat_p521_mulx_u64(&x274, &x275, x258, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x276, &x277, x258, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x278, &x279, x258, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x280, &x281, x258, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x282, &x283, x258, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x284, &x285, x258, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x286, &x287, x258, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x288, &x289, x258, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x290, &x291, x258, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x292, &x293, 0x0, x291, x288); + fiat_p521_addcarryx_u64(&x294, &x295, x293, x289, x286); + fiat_p521_addcarryx_u64(&x296, &x297, x295, x287, x284); + fiat_p521_addcarryx_u64(&x298, &x299, x297, x285, x282); + fiat_p521_addcarryx_u64(&x300, &x301, x299, x283, x280); + fiat_p521_addcarryx_u64(&x302, &x303, x301, x281, x278); + fiat_p521_addcarryx_u64(&x304, &x305, x303, x279, x276); + fiat_p521_addcarryx_u64(&x306, &x307, x305, x277, x274); + fiat_p521_addcarryx_u64(&x308, &x309, 0x0, x258, x290); + fiat_p521_addcarryx_u64(&x310, &x311, x309, x260, x292); + fiat_p521_addcarryx_u64(&x312, &x313, x311, x262, x294); + fiat_p521_addcarryx_u64(&x314, &x315, x313, x264, x296); + fiat_p521_addcarryx_u64(&x316, &x317, x315, x266, x298); + fiat_p521_addcarryx_u64(&x318, &x319, x317, x268, x300); + fiat_p521_addcarryx_u64(&x320, &x321, x319, x270, x302); + fiat_p521_addcarryx_u64(&x322, &x323, x321, x272, x304); + fiat_p521_addcarryx_u64(&x324, &x325, x323, (x273 + (x257 + (x239 + x207))), x306); + fiat_p521_addcarryx_u64(&x326, &x327, 0x0, x310, (arg1[5])); + fiat_p521_addcarryx_u64(&x328, &x329, x327, x312, 0x0); + fiat_p521_addcarryx_u64(&x330, &x331, x329, x314, 0x0); + fiat_p521_addcarryx_u64(&x332, &x333, x331, x316, 0x0); + fiat_p521_addcarryx_u64(&x334, &x335, x333, x318, 0x0); + fiat_p521_addcarryx_u64(&x336, &x337, x335, x320, 0x0); + fiat_p521_addcarryx_u64(&x338, &x339, x337, x322, 0x0); + fiat_p521_addcarryx_u64(&x340, &x341, x339, x324, 0x0); + fiat_p521_mulx_u64(&x342, &x343, x326, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x344, &x345, x326, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x346, &x347, x326, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x348, &x349, x326, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x350, &x351, x326, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x352, &x353, x326, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x354, &x355, x326, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x356, &x357, x326, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x358, &x359, x326, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x360, &x361, 0x0, x359, x356); + fiat_p521_addcarryx_u64(&x362, &x363, x361, x357, x354); + fiat_p521_addcarryx_u64(&x364, &x365, x363, x355, x352); + fiat_p521_addcarryx_u64(&x366, &x367, x365, x353, x350); + fiat_p521_addcarryx_u64(&x368, &x369, x367, x351, x348); + fiat_p521_addcarryx_u64(&x370, &x371, x369, x349, x346); + fiat_p521_addcarryx_u64(&x372, &x373, x371, x347, x344); + fiat_p521_addcarryx_u64(&x374, &x375, x373, x345, x342); + fiat_p521_addcarryx_u64(&x376, &x377, 0x0, x326, x358); + fiat_p521_addcarryx_u64(&x378, &x379, x377, x328, x360); + fiat_p521_addcarryx_u64(&x380, &x381, x379, x330, x362); + fiat_p521_addcarryx_u64(&x382, &x383, x381, x332, x364); + fiat_p521_addcarryx_u64(&x384, &x385, x383, x334, x366); + fiat_p521_addcarryx_u64(&x386, &x387, x385, x336, x368); + fiat_p521_addcarryx_u64(&x388, &x389, x387, x338, x370); + fiat_p521_addcarryx_u64(&x390, &x391, x389, x340, x372); + fiat_p521_addcarryx_u64(&x392, &x393, x391, (x341 + (x325 + (x307 + x275))), x374); + fiat_p521_addcarryx_u64(&x394, &x395, 0x0, x378, (arg1[6])); + fiat_p521_addcarryx_u64(&x396, &x397, x395, x380, 0x0); + fiat_p521_addcarryx_u64(&x398, &x399, x397, x382, 0x0); + fiat_p521_addcarryx_u64(&x400, &x401, x399, x384, 0x0); + fiat_p521_addcarryx_u64(&x402, &x403, x401, x386, 0x0); + fiat_p521_addcarryx_u64(&x404, &x405, x403, x388, 0x0); + fiat_p521_addcarryx_u64(&x406, &x407, x405, x390, 0x0); + fiat_p521_addcarryx_u64(&x408, &x409, x407, x392, 0x0); + fiat_p521_mulx_u64(&x410, &x411, x394, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x412, &x413, x394, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x414, &x415, x394, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x416, &x417, x394, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x418, &x419, x394, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x420, &x421, x394, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x422, &x423, x394, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x424, &x425, x394, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x426, &x427, x394, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x428, &x429, 0x0, x427, x424); + fiat_p521_addcarryx_u64(&x430, &x431, x429, x425, x422); + fiat_p521_addcarryx_u64(&x432, &x433, x431, x423, x420); + fiat_p521_addcarryx_u64(&x434, &x435, x433, x421, x418); + fiat_p521_addcarryx_u64(&x436, &x437, x435, x419, x416); + fiat_p521_addcarryx_u64(&x438, &x439, x437, x417, x414); + fiat_p521_addcarryx_u64(&x440, &x441, x439, x415, x412); + fiat_p521_addcarryx_u64(&x442, &x443, x441, x413, x410); + fiat_p521_addcarryx_u64(&x444, &x445, 0x0, x394, x426); + fiat_p521_addcarryx_u64(&x446, &x447, x445, x396, x428); + fiat_p521_addcarryx_u64(&x448, &x449, x447, x398, x430); + fiat_p521_addcarryx_u64(&x450, &x451, x449, x400, x432); + fiat_p521_addcarryx_u64(&x452, &x453, x451, x402, x434); + fiat_p521_addcarryx_u64(&x454, &x455, x453, x404, x436); + fiat_p521_addcarryx_u64(&x456, &x457, x455, x406, x438); + fiat_p521_addcarryx_u64(&x458, &x459, x457, x408, x440); + fiat_p521_addcarryx_u64(&x460, &x461, x459, (x409 + (x393 + (x375 + x343))), x442); + fiat_p521_addcarryx_u64(&x462, &x463, 0x0, x446, (arg1[7])); + fiat_p521_addcarryx_u64(&x464, &x465, x463, x448, 0x0); + fiat_p521_addcarryx_u64(&x466, &x467, x465, x450, 0x0); + fiat_p521_addcarryx_u64(&x468, &x469, x467, x452, 0x0); + fiat_p521_addcarryx_u64(&x470, &x471, x469, x454, 0x0); + fiat_p521_addcarryx_u64(&x472, &x473, x471, x456, 0x0); + fiat_p521_addcarryx_u64(&x474, &x475, x473, x458, 0x0); + fiat_p521_addcarryx_u64(&x476, &x477, x475, x460, 0x0); + fiat_p521_mulx_u64(&x478, &x479, x462, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x480, &x481, x462, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x482, &x483, x462, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x484, &x485, x462, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x486, &x487, x462, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x488, &x489, x462, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x490, &x491, x462, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x492, &x493, x462, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x494, &x495, x462, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x496, &x497, 0x0, x495, x492); + fiat_p521_addcarryx_u64(&x498, &x499, x497, x493, x490); + fiat_p521_addcarryx_u64(&x500, &x501, x499, x491, x488); + fiat_p521_addcarryx_u64(&x502, &x503, x501, x489, x486); + fiat_p521_addcarryx_u64(&x504, &x505, x503, x487, x484); + fiat_p521_addcarryx_u64(&x506, &x507, x505, x485, x482); + fiat_p521_addcarryx_u64(&x508, &x509, x507, x483, x480); + fiat_p521_addcarryx_u64(&x510, &x511, x509, x481, x478); + fiat_p521_addcarryx_u64(&x512, &x513, 0x0, x462, x494); + fiat_p521_addcarryx_u64(&x514, &x515, x513, x464, x496); + fiat_p521_addcarryx_u64(&x516, &x517, x515, x466, x498); + fiat_p521_addcarryx_u64(&x518, &x519, x517, x468, x500); + fiat_p521_addcarryx_u64(&x520, &x521, x519, x470, x502); + fiat_p521_addcarryx_u64(&x522, &x523, x521, x472, x504); + fiat_p521_addcarryx_u64(&x524, &x525, x523, x474, x506); + fiat_p521_addcarryx_u64(&x526, &x527, x525, x476, x508); + fiat_p521_addcarryx_u64(&x528, &x529, x527, (x477 + (x461 + (x443 + x411))), x510); + fiat_p521_addcarryx_u64(&x530, &x531, 0x0, x514, (arg1[8])); + fiat_p521_addcarryx_u64(&x532, &x533, x531, x516, 0x0); + fiat_p521_addcarryx_u64(&x534, &x535, x533, x518, 0x0); + fiat_p521_addcarryx_u64(&x536, &x537, x535, x520, 0x0); + fiat_p521_addcarryx_u64(&x538, &x539, x537, x522, 0x0); + fiat_p521_addcarryx_u64(&x540, &x541, x539, x524, 0x0); + fiat_p521_addcarryx_u64(&x542, &x543, x541, x526, 0x0); + fiat_p521_addcarryx_u64(&x544, &x545, x543, x528, 0x0); + fiat_p521_mulx_u64(&x546, &x547, x530, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x548, &x549, x530, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x550, &x551, x530, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x552, &x553, x530, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x554, &x555, x530, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x556, &x557, x530, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x558, &x559, x530, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x560, &x561, x530, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x562, &x563, x530, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x564, &x565, 0x0, x563, x560); + fiat_p521_addcarryx_u64(&x566, &x567, x565, x561, x558); + fiat_p521_addcarryx_u64(&x568, &x569, x567, x559, x556); + fiat_p521_addcarryx_u64(&x570, &x571, x569, x557, x554); + fiat_p521_addcarryx_u64(&x572, &x573, x571, x555, x552); + fiat_p521_addcarryx_u64(&x574, &x575, x573, x553, x550); + fiat_p521_addcarryx_u64(&x576, &x577, x575, x551, x548); + fiat_p521_addcarryx_u64(&x578, &x579, x577, x549, x546); + fiat_p521_addcarryx_u64(&x580, &x581, 0x0, x530, x562); + fiat_p521_addcarryx_u64(&x582, &x583, x581, x532, x564); + fiat_p521_addcarryx_u64(&x584, &x585, x583, x534, x566); + fiat_p521_addcarryx_u64(&x586, &x587, x585, x536, x568); + fiat_p521_addcarryx_u64(&x588, &x589, x587, x538, x570); + fiat_p521_addcarryx_u64(&x590, &x591, x589, x540, x572); + fiat_p521_addcarryx_u64(&x592, &x593, x591, x542, x574); + fiat_p521_addcarryx_u64(&x594, &x595, x593, x544, x576); + fiat_p521_addcarryx_u64(&x596, &x597, x595, (x545 + (x529 + (x511 + x479))), x578); + x598 = (x597 + (x579 + x547)); + fiat_p521_subborrowx_u64(&x599, &x600, 0x0, x582, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x601, &x602, x600, x584, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x603, &x604, x602, x586, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x605, &x606, x604, x588, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x607, &x608, x606, x590, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x609, &x610, x608, x592, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x611, &x612, x610, x594, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x613, &x614, x612, x596, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x615, &x616, x614, x598, UINT16_C(0x1ff)); + fiat_p521_subborrowx_u64(&x617, &x618, x616, 0x0, 0x0); + fiat_p521_cmovznz_u64(&x619, x618, x599, x582); + fiat_p521_cmovznz_u64(&x620, x618, x601, x584); + fiat_p521_cmovznz_u64(&x621, x618, x603, x586); + fiat_p521_cmovznz_u64(&x622, x618, x605, x588); + fiat_p521_cmovznz_u64(&x623, x618, x607, x590); + fiat_p521_cmovznz_u64(&x624, x618, x609, x592); + fiat_p521_cmovznz_u64(&x625, x618, x611, x594); + fiat_p521_cmovznz_u64(&x626, x618, x613, x596); + fiat_p521_cmovznz_u64(&x627, x618, x615, x598); + out1[0] = x619; + out1[1] = x620; + out1[2] = x621; + out1[3] = x622; + out1[4] = x623; + out1[5] = x624; + out1[6] = x625; + out1[7] = x626; + out1[8] = x627; +} + +/* + * The function fiat_p521_to_montgomery translates a field element into the Montgomery domain. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * eval (from_montgomery out1) mod m = eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p521_to_montgomery(uint64_t out1[9], const uint64_t arg1[9]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + fiat_p521_uint1 x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + fiat_p521_uint1 x26; + uint64_t x27; + fiat_p521_uint1 x28; + uint64_t x29; + fiat_p521_uint1 x30; + uint64_t x31; + fiat_p521_uint1 x32; + uint64_t x33; + fiat_p521_uint1 x34; + uint64_t x35; + fiat_p521_uint1 x36; + uint64_t x37; + fiat_p521_uint1 x38; + uint64_t x39; + fiat_p521_uint1 x40; + uint64_t x41; + fiat_p521_uint1 x42; + uint64_t x43; + fiat_p521_uint1 x44; + uint64_t x45; + fiat_p521_uint1 x46; + uint64_t x47; + fiat_p521_uint1 x48; + uint64_t x49; + fiat_p521_uint1 x50; + uint64_t x51; + fiat_p521_uint1 x52; + uint64_t x53; + fiat_p521_uint1 x54; + uint64_t x55; + fiat_p521_uint1 x56; + uint64_t x57; + fiat_p521_uint1 x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + fiat_p521_uint1 x62; + uint64_t x63; + fiat_p521_uint1 x64; + uint64_t x65; + fiat_p521_uint1 x66; + uint64_t x67; + fiat_p521_uint1 x68; + uint64_t x69; + fiat_p521_uint1 x70; + uint64_t x71; + fiat_p521_uint1 x72; + uint64_t x73; + fiat_p521_uint1 x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + uint64_t x81; + uint64_t x82; + uint64_t x83; + uint64_t x84; + uint64_t x85; + uint64_t x86; + uint64_t x87; + uint64_t x88; + uint64_t x89; + uint64_t x90; + uint64_t x91; + uint64_t x92; + uint64_t x93; + fiat_p521_uint1 x94; + uint64_t x95; + fiat_p521_uint1 x96; + uint64_t x97; + fiat_p521_uint1 x98; + uint64_t x99; + fiat_p521_uint1 x100; + uint64_t x101; + fiat_p521_uint1 x102; + uint64_t x103; + fiat_p521_uint1 x104; + uint64_t x105; + fiat_p521_uint1 x106; + uint64_t x107; + fiat_p521_uint1 x108; + uint64_t x109; + fiat_p521_uint1 x110; + uint64_t x111; + fiat_p521_uint1 x112; + uint64_t x113; + fiat_p521_uint1 x114; + uint64_t x115; + fiat_p521_uint1 x116; + uint64_t x117; + fiat_p521_uint1 x118; + uint64_t x119; + fiat_p521_uint1 x120; + uint64_t x121; + fiat_p521_uint1 x122; + uint64_t x123; + fiat_p521_uint1 x124; + uint64_t x125; + fiat_p521_uint1 x126; + uint64_t x127; + uint64_t x128; + uint64_t x129; + fiat_p521_uint1 x130; + uint64_t x131; + fiat_p521_uint1 x132; + uint64_t x133; + fiat_p521_uint1 x134; + uint64_t x135; + fiat_p521_uint1 x136; + uint64_t x137; + fiat_p521_uint1 x138; + uint64_t x139; + fiat_p521_uint1 x140; + uint64_t x141; + fiat_p521_uint1 x142; + uint64_t x143; + uint64_t x144; + uint64_t x145; + uint64_t x146; + uint64_t x147; + uint64_t x148; + uint64_t x149; + uint64_t x150; + uint64_t x151; + uint64_t x152; + uint64_t x153; + uint64_t x154; + uint64_t x155; + uint64_t x156; + uint64_t x157; + uint64_t x158; + uint64_t x159; + uint64_t x160; + uint64_t x161; + fiat_p521_uint1 x162; + uint64_t x163; + fiat_p521_uint1 x164; + uint64_t x165; + fiat_p521_uint1 x166; + uint64_t x167; + fiat_p521_uint1 x168; + uint64_t x169; + fiat_p521_uint1 x170; + uint64_t x171; + fiat_p521_uint1 x172; + uint64_t x173; + fiat_p521_uint1 x174; + uint64_t x175; + fiat_p521_uint1 x176; + uint64_t x177; + fiat_p521_uint1 x178; + uint64_t x179; + fiat_p521_uint1 x180; + uint64_t x181; + fiat_p521_uint1 x182; + uint64_t x183; + fiat_p521_uint1 x184; + uint64_t x185; + fiat_p521_uint1 x186; + uint64_t x187; + fiat_p521_uint1 x188; + uint64_t x189; + fiat_p521_uint1 x190; + uint64_t x191; + fiat_p521_uint1 x192; + uint64_t x193; + fiat_p521_uint1 x194; + uint64_t x195; + uint64_t x196; + uint64_t x197; + fiat_p521_uint1 x198; + uint64_t x199; + fiat_p521_uint1 x200; + uint64_t x201; + fiat_p521_uint1 x202; + uint64_t x203; + fiat_p521_uint1 x204; + uint64_t x205; + fiat_p521_uint1 x206; + uint64_t x207; + fiat_p521_uint1 x208; + uint64_t x209; + fiat_p521_uint1 x210; + uint64_t x211; + uint64_t x212; + uint64_t x213; + uint64_t x214; + uint64_t x215; + uint64_t x216; + uint64_t x217; + uint64_t x218; + uint64_t x219; + uint64_t x220; + uint64_t x221; + uint64_t x222; + uint64_t x223; + uint64_t x224; + uint64_t x225; + uint64_t x226; + uint64_t x227; + uint64_t x228; + uint64_t x229; + fiat_p521_uint1 x230; + uint64_t x231; + fiat_p521_uint1 x232; + uint64_t x233; + fiat_p521_uint1 x234; + uint64_t x235; + fiat_p521_uint1 x236; + uint64_t x237; + fiat_p521_uint1 x238; + uint64_t x239; + fiat_p521_uint1 x240; + uint64_t x241; + fiat_p521_uint1 x242; + uint64_t x243; + fiat_p521_uint1 x244; + uint64_t x245; + fiat_p521_uint1 x246; + uint64_t x247; + fiat_p521_uint1 x248; + uint64_t x249; + fiat_p521_uint1 x250; + uint64_t x251; + fiat_p521_uint1 x252; + uint64_t x253; + fiat_p521_uint1 x254; + uint64_t x255; + fiat_p521_uint1 x256; + uint64_t x257; + fiat_p521_uint1 x258; + uint64_t x259; + fiat_p521_uint1 x260; + uint64_t x261; + fiat_p521_uint1 x262; + uint64_t x263; + uint64_t x264; + uint64_t x265; + fiat_p521_uint1 x266; + uint64_t x267; + fiat_p521_uint1 x268; + uint64_t x269; + fiat_p521_uint1 x270; + uint64_t x271; + fiat_p521_uint1 x272; + uint64_t x273; + fiat_p521_uint1 x274; + uint64_t x275; + fiat_p521_uint1 x276; + uint64_t x277; + fiat_p521_uint1 x278; + uint64_t x279; + uint64_t x280; + uint64_t x281; + uint64_t x282; + uint64_t x283; + uint64_t x284; + uint64_t x285; + uint64_t x286; + uint64_t x287; + uint64_t x288; + uint64_t x289; + uint64_t x290; + uint64_t x291; + uint64_t x292; + uint64_t x293; + uint64_t x294; + uint64_t x295; + uint64_t x296; + uint64_t x297; + fiat_p521_uint1 x298; + uint64_t x299; + fiat_p521_uint1 x300; + uint64_t x301; + fiat_p521_uint1 x302; + uint64_t x303; + fiat_p521_uint1 x304; + uint64_t x305; + fiat_p521_uint1 x306; + uint64_t x307; + fiat_p521_uint1 x308; + uint64_t x309; + fiat_p521_uint1 x310; + uint64_t x311; + fiat_p521_uint1 x312; + uint64_t x313; + fiat_p521_uint1 x314; + uint64_t x315; + fiat_p521_uint1 x316; + uint64_t x317; + fiat_p521_uint1 x318; + uint64_t x319; + fiat_p521_uint1 x320; + uint64_t x321; + fiat_p521_uint1 x322; + uint64_t x323; + fiat_p521_uint1 x324; + uint64_t x325; + fiat_p521_uint1 x326; + uint64_t x327; + fiat_p521_uint1 x328; + uint64_t x329; + fiat_p521_uint1 x330; + uint64_t x331; + uint64_t x332; + uint64_t x333; + fiat_p521_uint1 x334; + uint64_t x335; + fiat_p521_uint1 x336; + uint64_t x337; + fiat_p521_uint1 x338; + uint64_t x339; + fiat_p521_uint1 x340; + uint64_t x341; + fiat_p521_uint1 x342; + uint64_t x343; + fiat_p521_uint1 x344; + uint64_t x345; + fiat_p521_uint1 x346; + uint64_t x347; + uint64_t x348; + uint64_t x349; + uint64_t x350; + uint64_t x351; + uint64_t x352; + uint64_t x353; + uint64_t x354; + uint64_t x355; + uint64_t x356; + uint64_t x357; + uint64_t x358; + uint64_t x359; + uint64_t x360; + uint64_t x361; + uint64_t x362; + uint64_t x363; + uint64_t x364; + uint64_t x365; + fiat_p521_uint1 x366; + uint64_t x367; + fiat_p521_uint1 x368; + uint64_t x369; + fiat_p521_uint1 x370; + uint64_t x371; + fiat_p521_uint1 x372; + uint64_t x373; + fiat_p521_uint1 x374; + uint64_t x375; + fiat_p521_uint1 x376; + uint64_t x377; + fiat_p521_uint1 x378; + uint64_t x379; + fiat_p521_uint1 x380; + uint64_t x381; + fiat_p521_uint1 x382; + uint64_t x383; + fiat_p521_uint1 x384; + uint64_t x385; + fiat_p521_uint1 x386; + uint64_t x387; + fiat_p521_uint1 x388; + uint64_t x389; + fiat_p521_uint1 x390; + uint64_t x391; + fiat_p521_uint1 x392; + uint64_t x393; + fiat_p521_uint1 x394; + uint64_t x395; + fiat_p521_uint1 x396; + uint64_t x397; + fiat_p521_uint1 x398; + uint64_t x399; + uint64_t x400; + uint64_t x401; + fiat_p521_uint1 x402; + uint64_t x403; + fiat_p521_uint1 x404; + uint64_t x405; + fiat_p521_uint1 x406; + uint64_t x407; + fiat_p521_uint1 x408; + uint64_t x409; + fiat_p521_uint1 x410; + uint64_t x411; + fiat_p521_uint1 x412; + uint64_t x413; + fiat_p521_uint1 x414; + uint64_t x415; + uint64_t x416; + uint64_t x417; + uint64_t x418; + uint64_t x419; + uint64_t x420; + uint64_t x421; + uint64_t x422; + uint64_t x423; + uint64_t x424; + uint64_t x425; + uint64_t x426; + uint64_t x427; + uint64_t x428; + uint64_t x429; + uint64_t x430; + uint64_t x431; + uint64_t x432; + uint64_t x433; + fiat_p521_uint1 x434; + uint64_t x435; + fiat_p521_uint1 x436; + uint64_t x437; + fiat_p521_uint1 x438; + uint64_t x439; + fiat_p521_uint1 x440; + uint64_t x441; + fiat_p521_uint1 x442; + uint64_t x443; + fiat_p521_uint1 x444; + uint64_t x445; + fiat_p521_uint1 x446; + uint64_t x447; + fiat_p521_uint1 x448; + uint64_t x449; + fiat_p521_uint1 x450; + uint64_t x451; + fiat_p521_uint1 x452; + uint64_t x453; + fiat_p521_uint1 x454; + uint64_t x455; + fiat_p521_uint1 x456; + uint64_t x457; + fiat_p521_uint1 x458; + uint64_t x459; + fiat_p521_uint1 x460; + uint64_t x461; + fiat_p521_uint1 x462; + uint64_t x463; + fiat_p521_uint1 x464; + uint64_t x465; + fiat_p521_uint1 x466; + uint64_t x467; + uint64_t x468; + uint64_t x469; + fiat_p521_uint1 x470; + uint64_t x471; + fiat_p521_uint1 x472; + uint64_t x473; + fiat_p521_uint1 x474; + uint64_t x475; + fiat_p521_uint1 x476; + uint64_t x477; + fiat_p521_uint1 x478; + uint64_t x479; + fiat_p521_uint1 x480; + uint64_t x481; + fiat_p521_uint1 x482; + uint64_t x483; + uint64_t x484; + uint64_t x485; + uint64_t x486; + uint64_t x487; + uint64_t x488; + uint64_t x489; + uint64_t x490; + uint64_t x491; + uint64_t x492; + uint64_t x493; + uint64_t x494; + uint64_t x495; + uint64_t x496; + uint64_t x497; + uint64_t x498; + uint64_t x499; + uint64_t x500; + uint64_t x501; + fiat_p521_uint1 x502; + uint64_t x503; + fiat_p521_uint1 x504; + uint64_t x505; + fiat_p521_uint1 x506; + uint64_t x507; + fiat_p521_uint1 x508; + uint64_t x509; + fiat_p521_uint1 x510; + uint64_t x511; + fiat_p521_uint1 x512; + uint64_t x513; + fiat_p521_uint1 x514; + uint64_t x515; + fiat_p521_uint1 x516; + uint64_t x517; + fiat_p521_uint1 x518; + uint64_t x519; + fiat_p521_uint1 x520; + uint64_t x521; + fiat_p521_uint1 x522; + uint64_t x523; + fiat_p521_uint1 x524; + uint64_t x525; + fiat_p521_uint1 x526; + uint64_t x527; + fiat_p521_uint1 x528; + uint64_t x529; + fiat_p521_uint1 x530; + uint64_t x531; + fiat_p521_uint1 x532; + uint64_t x533; + fiat_p521_uint1 x534; + uint64_t x535; + uint64_t x536; + fiat_p521_uint1 x537; + uint64_t x538; + fiat_p521_uint1 x539; + uint64_t x540; + fiat_p521_uint1 x541; + uint64_t x542; + fiat_p521_uint1 x543; + uint64_t x544; + fiat_p521_uint1 x545; + uint64_t x546; + fiat_p521_uint1 x547; + uint64_t x548; + fiat_p521_uint1 x549; + uint64_t x550; + fiat_p521_uint1 x551; + uint64_t x552; + fiat_p521_uint1 x553; + uint64_t x554; + fiat_p521_uint1 x555; + uint64_t x556; + uint64_t x557; + uint64_t x558; + uint64_t x559; + uint64_t x560; + uint64_t x561; + uint64_t x562; + uint64_t x563; + uint64_t x564; + fiat_p521_mulx_u64(&x1, &x2, (arg1[0]), UINT64_C(0x400000000000)); + fiat_p521_mulx_u64(&x3, &x4, (arg1[1]), UINT64_C(0x400000000000)); + fiat_p521_addcarryx_u64(&x5, &x6, 0x0, x2, x3); + fiat_p521_mulx_u64(&x7, &x8, x1, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x9, &x10, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x11, &x12, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x13, &x14, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x15, &x16, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x17, &x18, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x19, &x20, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x21, &x22, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x23, &x24, x1, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x25, &x26, 0x0, x24, x21); + fiat_p521_addcarryx_u64(&x27, &x28, x26, x22, x19); + fiat_p521_addcarryx_u64(&x29, &x30, x28, x20, x17); + fiat_p521_addcarryx_u64(&x31, &x32, x30, x18, x15); + fiat_p521_addcarryx_u64(&x33, &x34, x32, x16, x13); + fiat_p521_addcarryx_u64(&x35, &x36, x34, x14, x11); + fiat_p521_addcarryx_u64(&x37, &x38, x36, x12, x9); + fiat_p521_addcarryx_u64(&x39, &x40, x38, x10, x7); + fiat_p521_addcarryx_u64(&x41, &x42, 0x0, x1, x23); + fiat_p521_addcarryx_u64(&x43, &x44, x42, x5, x25); + fiat_p521_addcarryx_u64(&x45, &x46, x44, (x6 + x4), x27); + fiat_p521_addcarryx_u64(&x47, &x48, x46, 0x0, x29); + fiat_p521_addcarryx_u64(&x49, &x50, x48, 0x0, x31); + fiat_p521_addcarryx_u64(&x51, &x52, x50, 0x0, x33); + fiat_p521_addcarryx_u64(&x53, &x54, x52, 0x0, x35); + fiat_p521_addcarryx_u64(&x55, &x56, x54, 0x0, x37); + fiat_p521_addcarryx_u64(&x57, &x58, x56, 0x0, x39); + fiat_p521_mulx_u64(&x59, &x60, (arg1[2]), UINT64_C(0x400000000000)); + fiat_p521_addcarryx_u64(&x61, &x62, 0x0, x45, x59); + fiat_p521_addcarryx_u64(&x63, &x64, x62, x47, x60); + fiat_p521_addcarryx_u64(&x65, &x66, x64, x49, 0x0); + fiat_p521_addcarryx_u64(&x67, &x68, x66, x51, 0x0); + fiat_p521_addcarryx_u64(&x69, &x70, x68, x53, 0x0); + fiat_p521_addcarryx_u64(&x71, &x72, x70, x55, 0x0); + fiat_p521_addcarryx_u64(&x73, &x74, x72, x57, 0x0); + fiat_p521_mulx_u64(&x75, &x76, x43, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x77, &x78, x43, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x79, &x80, x43, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x81, &x82, x43, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x83, &x84, x43, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x85, &x86, x43, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x87, &x88, x43, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x89, &x90, x43, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x91, &x92, x43, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x93, &x94, 0x0, x92, x89); + fiat_p521_addcarryx_u64(&x95, &x96, x94, x90, x87); + fiat_p521_addcarryx_u64(&x97, &x98, x96, x88, x85); + fiat_p521_addcarryx_u64(&x99, &x100, x98, x86, x83); + fiat_p521_addcarryx_u64(&x101, &x102, x100, x84, x81); + fiat_p521_addcarryx_u64(&x103, &x104, x102, x82, x79); + fiat_p521_addcarryx_u64(&x105, &x106, x104, x80, x77); + fiat_p521_addcarryx_u64(&x107, &x108, x106, x78, x75); + fiat_p521_addcarryx_u64(&x109, &x110, 0x0, x43, x91); + fiat_p521_addcarryx_u64(&x111, &x112, x110, x61, x93); + fiat_p521_addcarryx_u64(&x113, &x114, x112, x63, x95); + fiat_p521_addcarryx_u64(&x115, &x116, x114, x65, x97); + fiat_p521_addcarryx_u64(&x117, &x118, x116, x67, x99); + fiat_p521_addcarryx_u64(&x119, &x120, x118, x69, x101); + fiat_p521_addcarryx_u64(&x121, &x122, x120, x71, x103); + fiat_p521_addcarryx_u64(&x123, &x124, x122, x73, x105); + fiat_p521_addcarryx_u64(&x125, &x126, x124, (x74 + (x58 + (x40 + x8))), x107); + fiat_p521_mulx_u64(&x127, &x128, (arg1[3]), UINT64_C(0x400000000000)); + fiat_p521_addcarryx_u64(&x129, &x130, 0x0, x113, x127); + fiat_p521_addcarryx_u64(&x131, &x132, x130, x115, x128); + fiat_p521_addcarryx_u64(&x133, &x134, x132, x117, 0x0); + fiat_p521_addcarryx_u64(&x135, &x136, x134, x119, 0x0); + fiat_p521_addcarryx_u64(&x137, &x138, x136, x121, 0x0); + fiat_p521_addcarryx_u64(&x139, &x140, x138, x123, 0x0); + fiat_p521_addcarryx_u64(&x141, &x142, x140, x125, 0x0); + fiat_p521_mulx_u64(&x143, &x144, x111, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x145, &x146, x111, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x147, &x148, x111, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x149, &x150, x111, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x151, &x152, x111, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x153, &x154, x111, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x155, &x156, x111, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x157, &x158, x111, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x159, &x160, x111, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x161, &x162, 0x0, x160, x157); + fiat_p521_addcarryx_u64(&x163, &x164, x162, x158, x155); + fiat_p521_addcarryx_u64(&x165, &x166, x164, x156, x153); + fiat_p521_addcarryx_u64(&x167, &x168, x166, x154, x151); + fiat_p521_addcarryx_u64(&x169, &x170, x168, x152, x149); + fiat_p521_addcarryx_u64(&x171, &x172, x170, x150, x147); + fiat_p521_addcarryx_u64(&x173, &x174, x172, x148, x145); + fiat_p521_addcarryx_u64(&x175, &x176, x174, x146, x143); + fiat_p521_addcarryx_u64(&x177, &x178, 0x0, x111, x159); + fiat_p521_addcarryx_u64(&x179, &x180, x178, x129, x161); + fiat_p521_addcarryx_u64(&x181, &x182, x180, x131, x163); + fiat_p521_addcarryx_u64(&x183, &x184, x182, x133, x165); + fiat_p521_addcarryx_u64(&x185, &x186, x184, x135, x167); + fiat_p521_addcarryx_u64(&x187, &x188, x186, x137, x169); + fiat_p521_addcarryx_u64(&x189, &x190, x188, x139, x171); + fiat_p521_addcarryx_u64(&x191, &x192, x190, x141, x173); + fiat_p521_addcarryx_u64(&x193, &x194, x192, (x142 + (x126 + (x108 + x76))), x175); + fiat_p521_mulx_u64(&x195, &x196, (arg1[4]), UINT64_C(0x400000000000)); + fiat_p521_addcarryx_u64(&x197, &x198, 0x0, x181, x195); + fiat_p521_addcarryx_u64(&x199, &x200, x198, x183, x196); + fiat_p521_addcarryx_u64(&x201, &x202, x200, x185, 0x0); + fiat_p521_addcarryx_u64(&x203, &x204, x202, x187, 0x0); + fiat_p521_addcarryx_u64(&x205, &x206, x204, x189, 0x0); + fiat_p521_addcarryx_u64(&x207, &x208, x206, x191, 0x0); + fiat_p521_addcarryx_u64(&x209, &x210, x208, x193, 0x0); + fiat_p521_mulx_u64(&x211, &x212, x179, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x213, &x214, x179, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x215, &x216, x179, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x217, &x218, x179, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x219, &x220, x179, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x221, &x222, x179, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x223, &x224, x179, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x225, &x226, x179, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x227, &x228, x179, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x229, &x230, 0x0, x228, x225); + fiat_p521_addcarryx_u64(&x231, &x232, x230, x226, x223); + fiat_p521_addcarryx_u64(&x233, &x234, x232, x224, x221); + fiat_p521_addcarryx_u64(&x235, &x236, x234, x222, x219); + fiat_p521_addcarryx_u64(&x237, &x238, x236, x220, x217); + fiat_p521_addcarryx_u64(&x239, &x240, x238, x218, x215); + fiat_p521_addcarryx_u64(&x241, &x242, x240, x216, x213); + fiat_p521_addcarryx_u64(&x243, &x244, x242, x214, x211); + fiat_p521_addcarryx_u64(&x245, &x246, 0x0, x179, x227); + fiat_p521_addcarryx_u64(&x247, &x248, x246, x197, x229); + fiat_p521_addcarryx_u64(&x249, &x250, x248, x199, x231); + fiat_p521_addcarryx_u64(&x251, &x252, x250, x201, x233); + fiat_p521_addcarryx_u64(&x253, &x254, x252, x203, x235); + fiat_p521_addcarryx_u64(&x255, &x256, x254, x205, x237); + fiat_p521_addcarryx_u64(&x257, &x258, x256, x207, x239); + fiat_p521_addcarryx_u64(&x259, &x260, x258, x209, x241); + fiat_p521_addcarryx_u64(&x261, &x262, x260, (x210 + (x194 + (x176 + x144))), x243); + fiat_p521_mulx_u64(&x263, &x264, (arg1[5]), UINT64_C(0x400000000000)); + fiat_p521_addcarryx_u64(&x265, &x266, 0x0, x249, x263); + fiat_p521_addcarryx_u64(&x267, &x268, x266, x251, x264); + fiat_p521_addcarryx_u64(&x269, &x270, x268, x253, 0x0); + fiat_p521_addcarryx_u64(&x271, &x272, x270, x255, 0x0); + fiat_p521_addcarryx_u64(&x273, &x274, x272, x257, 0x0); + fiat_p521_addcarryx_u64(&x275, &x276, x274, x259, 0x0); + fiat_p521_addcarryx_u64(&x277, &x278, x276, x261, 0x0); + fiat_p521_mulx_u64(&x279, &x280, x247, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x281, &x282, x247, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x283, &x284, x247, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x285, &x286, x247, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x287, &x288, x247, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x289, &x290, x247, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x291, &x292, x247, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x293, &x294, x247, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x295, &x296, x247, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x297, &x298, 0x0, x296, x293); + fiat_p521_addcarryx_u64(&x299, &x300, x298, x294, x291); + fiat_p521_addcarryx_u64(&x301, &x302, x300, x292, x289); + fiat_p521_addcarryx_u64(&x303, &x304, x302, x290, x287); + fiat_p521_addcarryx_u64(&x305, &x306, x304, x288, x285); + fiat_p521_addcarryx_u64(&x307, &x308, x306, x286, x283); + fiat_p521_addcarryx_u64(&x309, &x310, x308, x284, x281); + fiat_p521_addcarryx_u64(&x311, &x312, x310, x282, x279); + fiat_p521_addcarryx_u64(&x313, &x314, 0x0, x247, x295); + fiat_p521_addcarryx_u64(&x315, &x316, x314, x265, x297); + fiat_p521_addcarryx_u64(&x317, &x318, x316, x267, x299); + fiat_p521_addcarryx_u64(&x319, &x320, x318, x269, x301); + fiat_p521_addcarryx_u64(&x321, &x322, x320, x271, x303); + fiat_p521_addcarryx_u64(&x323, &x324, x322, x273, x305); + fiat_p521_addcarryx_u64(&x325, &x326, x324, x275, x307); + fiat_p521_addcarryx_u64(&x327, &x328, x326, x277, x309); + fiat_p521_addcarryx_u64(&x329, &x330, x328, (x278 + (x262 + (x244 + x212))), x311); + fiat_p521_mulx_u64(&x331, &x332, (arg1[6]), UINT64_C(0x400000000000)); + fiat_p521_addcarryx_u64(&x333, &x334, 0x0, x317, x331); + fiat_p521_addcarryx_u64(&x335, &x336, x334, x319, x332); + fiat_p521_addcarryx_u64(&x337, &x338, x336, x321, 0x0); + fiat_p521_addcarryx_u64(&x339, &x340, x338, x323, 0x0); + fiat_p521_addcarryx_u64(&x341, &x342, x340, x325, 0x0); + fiat_p521_addcarryx_u64(&x343, &x344, x342, x327, 0x0); + fiat_p521_addcarryx_u64(&x345, &x346, x344, x329, 0x0); + fiat_p521_mulx_u64(&x347, &x348, x315, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x349, &x350, x315, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x351, &x352, x315, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x353, &x354, x315, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x355, &x356, x315, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x357, &x358, x315, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x359, &x360, x315, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x361, &x362, x315, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x363, &x364, x315, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x365, &x366, 0x0, x364, x361); + fiat_p521_addcarryx_u64(&x367, &x368, x366, x362, x359); + fiat_p521_addcarryx_u64(&x369, &x370, x368, x360, x357); + fiat_p521_addcarryx_u64(&x371, &x372, x370, x358, x355); + fiat_p521_addcarryx_u64(&x373, &x374, x372, x356, x353); + fiat_p521_addcarryx_u64(&x375, &x376, x374, x354, x351); + fiat_p521_addcarryx_u64(&x377, &x378, x376, x352, x349); + fiat_p521_addcarryx_u64(&x379, &x380, x378, x350, x347); + fiat_p521_addcarryx_u64(&x381, &x382, 0x0, x315, x363); + fiat_p521_addcarryx_u64(&x383, &x384, x382, x333, x365); + fiat_p521_addcarryx_u64(&x385, &x386, x384, x335, x367); + fiat_p521_addcarryx_u64(&x387, &x388, x386, x337, x369); + fiat_p521_addcarryx_u64(&x389, &x390, x388, x339, x371); + fiat_p521_addcarryx_u64(&x391, &x392, x390, x341, x373); + fiat_p521_addcarryx_u64(&x393, &x394, x392, x343, x375); + fiat_p521_addcarryx_u64(&x395, &x396, x394, x345, x377); + fiat_p521_addcarryx_u64(&x397, &x398, x396, (x346 + (x330 + (x312 + x280))), x379); + fiat_p521_mulx_u64(&x399, &x400, (arg1[7]), UINT64_C(0x400000000000)); + fiat_p521_addcarryx_u64(&x401, &x402, 0x0, x385, x399); + fiat_p521_addcarryx_u64(&x403, &x404, x402, x387, x400); + fiat_p521_addcarryx_u64(&x405, &x406, x404, x389, 0x0); + fiat_p521_addcarryx_u64(&x407, &x408, x406, x391, 0x0); + fiat_p521_addcarryx_u64(&x409, &x410, x408, x393, 0x0); + fiat_p521_addcarryx_u64(&x411, &x412, x410, x395, 0x0); + fiat_p521_addcarryx_u64(&x413, &x414, x412, x397, 0x0); + fiat_p521_mulx_u64(&x415, &x416, x383, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x417, &x418, x383, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x419, &x420, x383, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x421, &x422, x383, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x423, &x424, x383, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x425, &x426, x383, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x427, &x428, x383, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x429, &x430, x383, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x431, &x432, x383, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x433, &x434, 0x0, x432, x429); + fiat_p521_addcarryx_u64(&x435, &x436, x434, x430, x427); + fiat_p521_addcarryx_u64(&x437, &x438, x436, x428, x425); + fiat_p521_addcarryx_u64(&x439, &x440, x438, x426, x423); + fiat_p521_addcarryx_u64(&x441, &x442, x440, x424, x421); + fiat_p521_addcarryx_u64(&x443, &x444, x442, x422, x419); + fiat_p521_addcarryx_u64(&x445, &x446, x444, x420, x417); + fiat_p521_addcarryx_u64(&x447, &x448, x446, x418, x415); + fiat_p521_addcarryx_u64(&x449, &x450, 0x0, x383, x431); + fiat_p521_addcarryx_u64(&x451, &x452, x450, x401, x433); + fiat_p521_addcarryx_u64(&x453, &x454, x452, x403, x435); + fiat_p521_addcarryx_u64(&x455, &x456, x454, x405, x437); + fiat_p521_addcarryx_u64(&x457, &x458, x456, x407, x439); + fiat_p521_addcarryx_u64(&x459, &x460, x458, x409, x441); + fiat_p521_addcarryx_u64(&x461, &x462, x460, x411, x443); + fiat_p521_addcarryx_u64(&x463, &x464, x462, x413, x445); + fiat_p521_addcarryx_u64(&x465, &x466, x464, (x414 + (x398 + (x380 + x348))), x447); + fiat_p521_mulx_u64(&x467, &x468, (arg1[8]), UINT64_C(0x400000000000)); + fiat_p521_addcarryx_u64(&x469, &x470, 0x0, x453, x467); + fiat_p521_addcarryx_u64(&x471, &x472, x470, x455, x468); + fiat_p521_addcarryx_u64(&x473, &x474, x472, x457, 0x0); + fiat_p521_addcarryx_u64(&x475, &x476, x474, x459, 0x0); + fiat_p521_addcarryx_u64(&x477, &x478, x476, x461, 0x0); + fiat_p521_addcarryx_u64(&x479, &x480, x478, x463, 0x0); + fiat_p521_addcarryx_u64(&x481, &x482, x480, x465, 0x0); + fiat_p521_mulx_u64(&x483, &x484, x451, UINT16_C(0x1ff)); + fiat_p521_mulx_u64(&x485, &x486, x451, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x487, &x488, x451, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x489, &x490, x451, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x491, &x492, x451, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x493, &x494, x451, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x495, &x496, x451, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x497, &x498, x451, UINT64_C(0xffffffffffffffff)); + fiat_p521_mulx_u64(&x499, &x500, x451, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x501, &x502, 0x0, x500, x497); + fiat_p521_addcarryx_u64(&x503, &x504, x502, x498, x495); + fiat_p521_addcarryx_u64(&x505, &x506, x504, x496, x493); + fiat_p521_addcarryx_u64(&x507, &x508, x506, x494, x491); + fiat_p521_addcarryx_u64(&x509, &x510, x508, x492, x489); + fiat_p521_addcarryx_u64(&x511, &x512, x510, x490, x487); + fiat_p521_addcarryx_u64(&x513, &x514, x512, x488, x485); + fiat_p521_addcarryx_u64(&x515, &x516, x514, x486, x483); + fiat_p521_addcarryx_u64(&x517, &x518, 0x0, x451, x499); + fiat_p521_addcarryx_u64(&x519, &x520, x518, x469, x501); + fiat_p521_addcarryx_u64(&x521, &x522, x520, x471, x503); + fiat_p521_addcarryx_u64(&x523, &x524, x522, x473, x505); + fiat_p521_addcarryx_u64(&x525, &x526, x524, x475, x507); + fiat_p521_addcarryx_u64(&x527, &x528, x526, x477, x509); + fiat_p521_addcarryx_u64(&x529, &x530, x528, x479, x511); + fiat_p521_addcarryx_u64(&x531, &x532, x530, x481, x513); + fiat_p521_addcarryx_u64(&x533, &x534, x532, (x482 + (x466 + (x448 + x416))), x515); + x535 = (x534 + (x516 + x484)); + fiat_p521_subborrowx_u64(&x536, &x537, 0x0, x519, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x538, &x539, x537, x521, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x540, &x541, x539, x523, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x542, &x543, x541, x525, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x544, &x545, x543, x527, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x546, &x547, x545, x529, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x548, &x549, x547, x531, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x550, &x551, x549, x533, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x552, &x553, x551, x535, UINT16_C(0x1ff)); + fiat_p521_subborrowx_u64(&x554, &x555, x553, 0x0, 0x0); + fiat_p521_cmovznz_u64(&x556, x555, x536, x519); + fiat_p521_cmovznz_u64(&x557, x555, x538, x521); + fiat_p521_cmovznz_u64(&x558, x555, x540, x523); + fiat_p521_cmovznz_u64(&x559, x555, x542, x525); + fiat_p521_cmovznz_u64(&x560, x555, x544, x527); + fiat_p521_cmovznz_u64(&x561, x555, x546, x529); + fiat_p521_cmovznz_u64(&x562, x555, x548, x531); + fiat_p521_cmovznz_u64(&x563, x555, x550, x533); + fiat_p521_cmovznz_u64(&x564, x555, x552, x535); + out1[0] = x556; + out1[1] = x557; + out1[2] = x558; + out1[3] = x559; + out1[4] = x560; + out1[5] = x561; + out1[6] = x562; + out1[7] = x563; + out1[8] = x564; +} + +/* + * The function fiat_p521_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + */ +static void fiat_p521_nonzero(uint64_t* out1, const uint64_t arg1[9]) { + uint64_t x1; + x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | ((arg1[4]) | ((arg1[5]) | ((arg1[6]) | ((arg1[7]) | (arg1[8]))))))))); + *out1 = x1; +} + +/* + * The function fiat_p521_selectznz is a multi-limb conditional select. + * Postconditions: + * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) + * + * Input Bounds: + * arg1: [0x0 ~> 0x1] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p521_selectznz(uint64_t out1[9], fiat_p521_uint1 arg1, const uint64_t arg2[9], const uint64_t arg3[9]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + fiat_p521_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0])); + fiat_p521_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1])); + fiat_p521_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2])); + fiat_p521_cmovznz_u64(&x4, arg1, (arg2[3]), (arg3[3])); + fiat_p521_cmovznz_u64(&x5, arg1, (arg2[4]), (arg3[4])); + fiat_p521_cmovznz_u64(&x6, arg1, (arg2[5]), (arg3[5])); + fiat_p521_cmovznz_u64(&x7, arg1, (arg2[6]), (arg3[6])); + fiat_p521_cmovznz_u64(&x8, arg1, (arg2[7]), (arg3[7])); + fiat_p521_cmovznz_u64(&x9, arg1, (arg2[8]), (arg3[8])); + out1[0] = x1; + out1[1] = x2; + out1[2] = x3; + out1[3] = x4; + out1[4] = x5; + out1[5] = x6; + out1[6] = x7; + out1[7] = x8; + out1[8] = x9; +} + +/* + * The function fiat_p521_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. + * Preconditions: + * 0 ≤ eval arg1 < m + * Postconditions: + * out1 = map (λ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..65] + * + * Input Bounds: + * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0x1ff]] + * Output Bounds: + * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x1]] + */ +static void fiat_p521_to_bytes(uint8_t out1[66], const uint64_t arg1[9]) { + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint8_t x10; + uint64_t x11; + uint8_t x12; + uint64_t x13; + uint8_t x14; + uint64_t x15; + uint8_t x16; + uint64_t x17; + uint8_t x18; + uint64_t x19; + uint8_t x20; + uint64_t x21; + uint8_t x22; + uint8_t x23; + uint8_t x24; + uint64_t x25; + uint8_t x26; + uint64_t x27; + uint8_t x28; + uint64_t x29; + uint8_t x30; + uint64_t x31; + uint8_t x32; + uint64_t x33; + uint8_t x34; + uint64_t x35; + uint8_t x36; + uint8_t x37; + uint8_t x38; + uint64_t x39; + uint8_t x40; + uint64_t x41; + uint8_t x42; + uint64_t x43; + uint8_t x44; + uint64_t x45; + uint8_t x46; + uint64_t x47; + uint8_t x48; + uint64_t x49; + uint8_t x50; + uint8_t x51; + uint8_t x52; + uint64_t x53; + uint8_t x54; + uint64_t x55; + uint8_t x56; + uint64_t x57; + uint8_t x58; + uint64_t x59; + uint8_t x60; + uint64_t x61; + uint8_t x62; + uint64_t x63; + uint8_t x64; + uint8_t x65; + uint8_t x66; + uint64_t x67; + uint8_t x68; + uint64_t x69; + uint8_t x70; + uint64_t x71; + uint8_t x72; + uint64_t x73; + uint8_t x74; + uint64_t x75; + uint8_t x76; + uint64_t x77; + uint8_t x78; + uint8_t x79; + uint8_t x80; + uint64_t x81; + uint8_t x82; + uint64_t x83; + uint8_t x84; + uint64_t x85; + uint8_t x86; + uint64_t x87; + uint8_t x88; + uint64_t x89; + uint8_t x90; + uint64_t x91; + uint8_t x92; + uint8_t x93; + uint8_t x94; + uint64_t x95; + uint8_t x96; + uint64_t x97; + uint8_t x98; + uint64_t x99; + uint8_t x100; + uint64_t x101; + uint8_t x102; + uint64_t x103; + uint8_t x104; + uint64_t x105; + uint8_t x106; + uint8_t x107; + uint8_t x108; + uint64_t x109; + uint8_t x110; + uint64_t x111; + uint8_t x112; + uint64_t x113; + uint8_t x114; + uint64_t x115; + uint8_t x116; + uint64_t x117; + uint8_t x118; + uint64_t x119; + uint8_t x120; + uint8_t x121; + uint8_t x122; + fiat_p521_uint1 x123; + x1 = (arg1[8]); + x2 = (arg1[7]); + x3 = (arg1[6]); + x4 = (arg1[5]); + x5 = (arg1[4]); + x6 = (arg1[3]); + x7 = (arg1[2]); + x8 = (arg1[1]); + x9 = (arg1[0]); + x10 = (uint8_t)(x9 & UINT8_C(0xff)); + x11 = (x9 >> 8); + x12 = (uint8_t)(x11 & UINT8_C(0xff)); + x13 = (x11 >> 8); + x14 = (uint8_t)(x13 & UINT8_C(0xff)); + x15 = (x13 >> 8); + x16 = (uint8_t)(x15 & UINT8_C(0xff)); + x17 = (x15 >> 8); + x18 = (uint8_t)(x17 & UINT8_C(0xff)); + x19 = (x17 >> 8); + x20 = (uint8_t)(x19 & UINT8_C(0xff)); + x21 = (x19 >> 8); + x22 = (uint8_t)(x21 & UINT8_C(0xff)); + x23 = (uint8_t)(x21 >> 8); + x24 = (uint8_t)(x8 & UINT8_C(0xff)); + x25 = (x8 >> 8); + x26 = (uint8_t)(x25 & UINT8_C(0xff)); + x27 = (x25 >> 8); + x28 = (uint8_t)(x27 & UINT8_C(0xff)); + x29 = (x27 >> 8); + x30 = (uint8_t)(x29 & UINT8_C(0xff)); + x31 = (x29 >> 8); + x32 = (uint8_t)(x31 & UINT8_C(0xff)); + x33 = (x31 >> 8); + x34 = (uint8_t)(x33 & UINT8_C(0xff)); + x35 = (x33 >> 8); + x36 = (uint8_t)(x35 & UINT8_C(0xff)); + x37 = (uint8_t)(x35 >> 8); + x38 = (uint8_t)(x7 & UINT8_C(0xff)); + x39 = (x7 >> 8); + x40 = (uint8_t)(x39 & UINT8_C(0xff)); + x41 = (x39 >> 8); + x42 = (uint8_t)(x41 & UINT8_C(0xff)); + x43 = (x41 >> 8); + x44 = (uint8_t)(x43 & UINT8_C(0xff)); + x45 = (x43 >> 8); + x46 = (uint8_t)(x45 & UINT8_C(0xff)); + x47 = (x45 >> 8); + x48 = (uint8_t)(x47 & UINT8_C(0xff)); + x49 = (x47 >> 8); + x50 = (uint8_t)(x49 & UINT8_C(0xff)); + x51 = (uint8_t)(x49 >> 8); + x52 = (uint8_t)(x6 & UINT8_C(0xff)); + x53 = (x6 >> 8); + x54 = (uint8_t)(x53 & UINT8_C(0xff)); + x55 = (x53 >> 8); + x56 = (uint8_t)(x55 & UINT8_C(0xff)); + x57 = (x55 >> 8); + x58 = (uint8_t)(x57 & UINT8_C(0xff)); + x59 = (x57 >> 8); + x60 = (uint8_t)(x59 & UINT8_C(0xff)); + x61 = (x59 >> 8); + x62 = (uint8_t)(x61 & UINT8_C(0xff)); + x63 = (x61 >> 8); + x64 = (uint8_t)(x63 & UINT8_C(0xff)); + x65 = (uint8_t)(x63 >> 8); + x66 = (uint8_t)(x5 & UINT8_C(0xff)); + x67 = (x5 >> 8); + x68 = (uint8_t)(x67 & UINT8_C(0xff)); + x69 = (x67 >> 8); + x70 = (uint8_t)(x69 & UINT8_C(0xff)); + x71 = (x69 >> 8); + x72 = (uint8_t)(x71 & UINT8_C(0xff)); + x73 = (x71 >> 8); + x74 = (uint8_t)(x73 & UINT8_C(0xff)); + x75 = (x73 >> 8); + x76 = (uint8_t)(x75 & UINT8_C(0xff)); + x77 = (x75 >> 8); + x78 = (uint8_t)(x77 & UINT8_C(0xff)); + x79 = (uint8_t)(x77 >> 8); + x80 = (uint8_t)(x4 & UINT8_C(0xff)); + x81 = (x4 >> 8); + x82 = (uint8_t)(x81 & UINT8_C(0xff)); + x83 = (x81 >> 8); + x84 = (uint8_t)(x83 & UINT8_C(0xff)); + x85 = (x83 >> 8); + x86 = (uint8_t)(x85 & UINT8_C(0xff)); + x87 = (x85 >> 8); + x88 = (uint8_t)(x87 & UINT8_C(0xff)); + x89 = (x87 >> 8); + x90 = (uint8_t)(x89 & UINT8_C(0xff)); + x91 = (x89 >> 8); + x92 = (uint8_t)(x91 & UINT8_C(0xff)); + x93 = (uint8_t)(x91 >> 8); + x94 = (uint8_t)(x3 & UINT8_C(0xff)); + x95 = (x3 >> 8); + x96 = (uint8_t)(x95 & UINT8_C(0xff)); + x97 = (x95 >> 8); + x98 = (uint8_t)(x97 & UINT8_C(0xff)); + x99 = (x97 >> 8); + x100 = (uint8_t)(x99 & UINT8_C(0xff)); + x101 = (x99 >> 8); + x102 = (uint8_t)(x101 & UINT8_C(0xff)); + x103 = (x101 >> 8); + x104 = (uint8_t)(x103 & UINT8_C(0xff)); + x105 = (x103 >> 8); + x106 = (uint8_t)(x105 & UINT8_C(0xff)); + x107 = (uint8_t)(x105 >> 8); + x108 = (uint8_t)(x2 & UINT8_C(0xff)); + x109 = (x2 >> 8); + x110 = (uint8_t)(x109 & UINT8_C(0xff)); + x111 = (x109 >> 8); + x112 = (uint8_t)(x111 & UINT8_C(0xff)); + x113 = (x111 >> 8); + x114 = (uint8_t)(x113 & UINT8_C(0xff)); + x115 = (x113 >> 8); + x116 = (uint8_t)(x115 & UINT8_C(0xff)); + x117 = (x115 >> 8); + x118 = (uint8_t)(x117 & UINT8_C(0xff)); + x119 = (x117 >> 8); + x120 = (uint8_t)(x119 & UINT8_C(0xff)); + x121 = (uint8_t)(x119 >> 8); + x122 = (uint8_t)(x1 & UINT8_C(0xff)); + x123 = (fiat_p521_uint1)(x1 >> 8); + out1[0] = x10; + out1[1] = x12; + out1[2] = x14; + out1[3] = x16; + out1[4] = x18; + out1[5] = x20; + out1[6] = x22; + out1[7] = x23; + out1[8] = x24; + out1[9] = x26; + out1[10] = x28; + out1[11] = x30; + out1[12] = x32; + out1[13] = x34; + out1[14] = x36; + out1[15] = x37; + out1[16] = x38; + out1[17] = x40; + out1[18] = x42; + out1[19] = x44; + out1[20] = x46; + out1[21] = x48; + out1[22] = x50; + out1[23] = x51; + out1[24] = x52; + out1[25] = x54; + out1[26] = x56; + out1[27] = x58; + out1[28] = x60; + out1[29] = x62; + out1[30] = x64; + out1[31] = x65; + out1[32] = x66; + out1[33] = x68; + out1[34] = x70; + out1[35] = x72; + out1[36] = x74; + out1[37] = x76; + out1[38] = x78; + out1[39] = x79; + out1[40] = x80; + out1[41] = x82; + out1[42] = x84; + out1[43] = x86; + out1[44] = x88; + out1[45] = x90; + out1[46] = x92; + out1[47] = x93; + out1[48] = x94; + out1[49] = x96; + out1[50] = x98; + out1[51] = x100; + out1[52] = x102; + out1[53] = x104; + out1[54] = x106; + out1[55] = x107; + out1[56] = x108; + out1[57] = x110; + out1[58] = x112; + out1[59] = x114; + out1[60] = x116; + out1[61] = x118; + out1[62] = x120; + out1[63] = x121; + out1[64] = x122; + out1[65] = x123; +} + +/* + * The function fiat_p521_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. + * Preconditions: + * 0 ≤ bytes_eval arg1 < m + * Postconditions: + * eval out1 mod m = bytes_eval arg1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0x1]] + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0x1ff]] + */ +static void fiat_p521_from_bytes(uint64_t out1[9], const uint8_t arg1[66]) { + uint64_t x1; + uint8_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint8_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint8_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint8_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; + uint64_t x32; + uint64_t x33; + uint8_t x34; + uint64_t x35; + uint64_t x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint8_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint8_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + uint64_t x57; + uint8_t x58; + uint64_t x59; + uint64_t x60; + uint64_t x61; + uint64_t x62; + uint64_t x63; + uint64_t x64; + uint64_t x65; + uint8_t x66; + uint64_t x67; + uint64_t x68; + uint64_t x69; + uint64_t x70; + uint64_t x71; + uint64_t x72; + uint64_t x73; + uint64_t x74; + uint64_t x75; + uint64_t x76; + uint64_t x77; + uint64_t x78; + uint64_t x79; + uint64_t x80; + uint64_t x81; + uint64_t x82; + uint64_t x83; + uint64_t x84; + uint64_t x85; + uint64_t x86; + uint64_t x87; + uint64_t x88; + uint64_t x89; + uint64_t x90; + uint64_t x91; + uint64_t x92; + uint64_t x93; + uint64_t x94; + uint64_t x95; + uint64_t x96; + uint64_t x97; + uint64_t x98; + uint64_t x99; + uint64_t x100; + uint64_t x101; + uint64_t x102; + uint64_t x103; + uint64_t x104; + uint64_t x105; + uint64_t x106; + uint64_t x107; + uint64_t x108; + uint64_t x109; + uint64_t x110; + uint64_t x111; + uint64_t x112; + uint64_t x113; + uint64_t x114; + uint64_t x115; + uint64_t x116; + uint64_t x117; + uint64_t x118; + uint64_t x119; + uint64_t x120; + uint64_t x121; + uint64_t x122; + uint64_t x123; + x1 = ((uint64_t)(fiat_p521_uint1)(arg1[65]) << 8); + x2 = (arg1[64]); + x3 = ((uint64_t)(arg1[63]) << 56); + x4 = ((uint64_t)(arg1[62]) << 48); + x5 = ((uint64_t)(arg1[61]) << 40); + x6 = ((uint64_t)(arg1[60]) << 32); + x7 = ((uint64_t)(arg1[59]) << 24); + x8 = ((uint64_t)(arg1[58]) << 16); + x9 = ((uint64_t)(arg1[57]) << 8); + x10 = (arg1[56]); + x11 = ((uint64_t)(arg1[55]) << 56); + x12 = ((uint64_t)(arg1[54]) << 48); + x13 = ((uint64_t)(arg1[53]) << 40); + x14 = ((uint64_t)(arg1[52]) << 32); + x15 = ((uint64_t)(arg1[51]) << 24); + x16 = ((uint64_t)(arg1[50]) << 16); + x17 = ((uint64_t)(arg1[49]) << 8); + x18 = (arg1[48]); + x19 = ((uint64_t)(arg1[47]) << 56); + x20 = ((uint64_t)(arg1[46]) << 48); + x21 = ((uint64_t)(arg1[45]) << 40); + x22 = ((uint64_t)(arg1[44]) << 32); + x23 = ((uint64_t)(arg1[43]) << 24); + x24 = ((uint64_t)(arg1[42]) << 16); + x25 = ((uint64_t)(arg1[41]) << 8); + x26 = (arg1[40]); + x27 = ((uint64_t)(arg1[39]) << 56); + x28 = ((uint64_t)(arg1[38]) << 48); + x29 = ((uint64_t)(arg1[37]) << 40); + x30 = ((uint64_t)(arg1[36]) << 32); + x31 = ((uint64_t)(arg1[35]) << 24); + x32 = ((uint64_t)(arg1[34]) << 16); + x33 = ((uint64_t)(arg1[33]) << 8); + x34 = (arg1[32]); + x35 = ((uint64_t)(arg1[31]) << 56); + x36 = ((uint64_t)(arg1[30]) << 48); + x37 = ((uint64_t)(arg1[29]) << 40); + x38 = ((uint64_t)(arg1[28]) << 32); + x39 = ((uint64_t)(arg1[27]) << 24); + x40 = ((uint64_t)(arg1[26]) << 16); + x41 = ((uint64_t)(arg1[25]) << 8); + x42 = (arg1[24]); + x43 = ((uint64_t)(arg1[23]) << 56); + x44 = ((uint64_t)(arg1[22]) << 48); + x45 = ((uint64_t)(arg1[21]) << 40); + x46 = ((uint64_t)(arg1[20]) << 32); + x47 = ((uint64_t)(arg1[19]) << 24); + x48 = ((uint64_t)(arg1[18]) << 16); + x49 = ((uint64_t)(arg1[17]) << 8); + x50 = (arg1[16]); + x51 = ((uint64_t)(arg1[15]) << 56); + x52 = ((uint64_t)(arg1[14]) << 48); + x53 = ((uint64_t)(arg1[13]) << 40); + x54 = ((uint64_t)(arg1[12]) << 32); + x55 = ((uint64_t)(arg1[11]) << 24); + x56 = ((uint64_t)(arg1[10]) << 16); + x57 = ((uint64_t)(arg1[9]) << 8); + x58 = (arg1[8]); + x59 = ((uint64_t)(arg1[7]) << 56); + x60 = ((uint64_t)(arg1[6]) << 48); + x61 = ((uint64_t)(arg1[5]) << 40); + x62 = ((uint64_t)(arg1[4]) << 32); + x63 = ((uint64_t)(arg1[3]) << 24); + x64 = ((uint64_t)(arg1[2]) << 16); + x65 = ((uint64_t)(arg1[1]) << 8); + x66 = (arg1[0]); + x67 = (x65 + (uint64_t)x66); + x68 = (x64 + x67); + x69 = (x63 + x68); + x70 = (x62 + x69); + x71 = (x61 + x70); + x72 = (x60 + x71); + x73 = (x59 + x72); + x74 = (x57 + (uint64_t)x58); + x75 = (x56 + x74); + x76 = (x55 + x75); + x77 = (x54 + x76); + x78 = (x53 + x77); + x79 = (x52 + x78); + x80 = (x51 + x79); + x81 = (x49 + (uint64_t)x50); + x82 = (x48 + x81); + x83 = (x47 + x82); + x84 = (x46 + x83); + x85 = (x45 + x84); + x86 = (x44 + x85); + x87 = (x43 + x86); + x88 = (x41 + (uint64_t)x42); + x89 = (x40 + x88); + x90 = (x39 + x89); + x91 = (x38 + x90); + x92 = (x37 + x91); + x93 = (x36 + x92); + x94 = (x35 + x93); + x95 = (x33 + (uint64_t)x34); + x96 = (x32 + x95); + x97 = (x31 + x96); + x98 = (x30 + x97); + x99 = (x29 + x98); + x100 = (x28 + x99); + x101 = (x27 + x100); + x102 = (x25 + (uint64_t)x26); + x103 = (x24 + x102); + x104 = (x23 + x103); + x105 = (x22 + x104); + x106 = (x21 + x105); + x107 = (x20 + x106); + x108 = (x19 + x107); + x109 = (x17 + (uint64_t)x18); + x110 = (x16 + x109); + x111 = (x15 + x110); + x112 = (x14 + x111); + x113 = (x13 + x112); + x114 = (x12 + x113); + x115 = (x11 + x114); + x116 = (x9 + (uint64_t)x10); + x117 = (x8 + x116); + x118 = (x7 + x117); + x119 = (x6 + x118); + x120 = (x5 + x119); + x121 = (x4 + x120); + x122 = (x3 + x121); + x123 = (x1 + (uint64_t)x2); + out1[0] = x73; + out1[1] = x80; + out1[2] = x87; + out1[3] = x94; + out1[4] = x101; + out1[5] = x108; + out1[6] = x115; + out1[7] = x122; + out1[8] = x123; +} + +/* + * The function fiat_p521_set_one returns the field element one in the Montgomery domain. + * Postconditions: + * eval (from_montgomery out1) mod m = 1 mod m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p521_set_one(uint64_t out1[9]) { + out1[0] = UINT64_C(0x80000000000000); + out1[1] = 0x0; + out1[2] = 0x0; + out1[3] = 0x0; + out1[4] = 0x0; + out1[5] = 0x0; + out1[6] = 0x0; + out1[7] = 0x0; + out1[8] = 0x0; +} + +/* + * The function fiat_p521_msat returns the saturated represtation of the prime modulus. + * Postconditions: + * twos_complement_eval out1 = m + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p521_msat(uint64_t out1[10]) { + out1[0] = UINT64_C(0xffffffffffffffff); + out1[1] = UINT64_C(0xffffffffffffffff); + out1[2] = UINT64_C(0xffffffffffffffff); + out1[3] = UINT64_C(0xffffffffffffffff); + out1[4] = UINT64_C(0xffffffffffffffff); + out1[5] = UINT64_C(0xffffffffffffffff); + out1[6] = UINT64_C(0xffffffffffffffff); + out1[7] = UINT64_C(0xffffffffffffffff); + out1[8] = UINT16_C(0x1ff); + out1[9] = 0x0; +} + +/* + * The function fiat_p521_divstep_precomp returns the precomputed value for Bernstein-Yang-inversion (in montgomery form). + * Postconditions: + * eval (from_montgomery out1) = ⌊(m - 1) / 2⌋^(if (log2 m) + 1 < 46 then ⌊(49 * ((log2 m) + 1) + 80) / 17⌋ else ⌊(49 * ((log2 m) + 1) + 57) / 17⌋) + * 0 ≤ eval out1 < m + * + * Input Bounds: + * Output Bounds: + * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p521_divstep_precomp(uint64_t out1[9]) { + out1[0] = 0x0; + out1[1] = UINT64_C(0x2000000000000); + out1[2] = 0x0; + out1[3] = 0x0; + out1[4] = 0x0; + out1[5] = 0x0; + out1[6] = 0x0; + out1[7] = 0x0; + out1[8] = 0x0; +} + +/* + * The function fiat_p521_divstep computes a divstep. + * Preconditions: + * 0 ≤ eval arg4 < m + * 0 ≤ eval arg5 < m + * Postconditions: + * out1 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then 1 - arg1 else 1 + arg1) + * twos_complement_eval out2 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then twos_complement_eval arg3 else twos_complement_eval arg2) + * twos_complement_eval out3 = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then ⌊(twos_complement_eval arg3 - twos_complement_eval arg2) / 2⌋ else ⌊(twos_complement_eval arg3 + (twos_complement_eval arg3 mod 2) * twos_complement_eval arg2) / 2⌋) + * eval (from_montgomery out4) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (2 * eval (from_montgomery arg5)) mod m else (2 * eval (from_montgomery arg4)) mod m) + * eval (from_montgomery out5) mod m = (if 0 < arg1 ∧ (twos_complement_eval arg3) is odd then (eval (from_montgomery arg4) - eval (from_montgomery arg4)) mod m else (eval (from_montgomery arg5) + (twos_complement_eval arg3 mod 2) * eval (from_montgomery arg4)) mod m) + * 0 ≤ eval out5 < m + * 0 ≤ eval out5 < m + * 0 ≤ eval out2 < m + * 0 ≤ eval out3 < m + * + * Input Bounds: + * arg1: [0x0 ~> 0xffffffffffffffff] + * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * arg5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * Output Bounds: + * out1: [0x0 ~> 0xffffffffffffffff] + * out2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out4: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + * out5: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] + */ +static void fiat_p521_divstep(uint64_t* out1, uint64_t out2[10], uint64_t out3[10], uint64_t out4[9], uint64_t out5[9], uint64_t arg1, const uint64_t arg2[10], const uint64_t arg3[10], const uint64_t arg4[9], const uint64_t arg5[9]) { + uint64_t x1; + fiat_p521_uint1 x2; + fiat_p521_uint1 x3; + uint64_t x4; + fiat_p521_uint1 x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + fiat_p521_uint1 x18; + uint64_t x19; + fiat_p521_uint1 x20; + uint64_t x21; + fiat_p521_uint1 x22; + uint64_t x23; + fiat_p521_uint1 x24; + uint64_t x25; + fiat_p521_uint1 x26; + uint64_t x27; + fiat_p521_uint1 x28; + uint64_t x29; + fiat_p521_uint1 x30; + uint64_t x31; + fiat_p521_uint1 x32; + uint64_t x33; + fiat_p521_uint1 x34; + uint64_t x35; + fiat_p521_uint1 x36; + uint64_t x37; + uint64_t x38; + uint64_t x39; + uint64_t x40; + uint64_t x41; + uint64_t x42; + uint64_t x43; + uint64_t x44; + uint64_t x45; + uint64_t x46; + uint64_t x47; + uint64_t x48; + uint64_t x49; + uint64_t x50; + uint64_t x51; + uint64_t x52; + uint64_t x53; + uint64_t x54; + uint64_t x55; + uint64_t x56; + fiat_p521_uint1 x57; + uint64_t x58; + fiat_p521_uint1 x59; + uint64_t x60; + fiat_p521_uint1 x61; + uint64_t x62; + fiat_p521_uint1 x63; + uint64_t x64; + fiat_p521_uint1 x65; + uint64_t x66; + fiat_p521_uint1 x67; + uint64_t x68; + fiat_p521_uint1 x69; + uint64_t x70; + fiat_p521_uint1 x71; + uint64_t x72; + fiat_p521_uint1 x73; + uint64_t x74; + fiat_p521_uint1 x75; + uint64_t x76; + fiat_p521_uint1 x77; + uint64_t x78; + fiat_p521_uint1 x79; + uint64_t x80; + fiat_p521_uint1 x81; + uint64_t x82; + fiat_p521_uint1 x83; + uint64_t x84; + fiat_p521_uint1 x85; + uint64_t x86; + fiat_p521_uint1 x87; + uint64_t x88; + fiat_p521_uint1 x89; + uint64_t x90; + fiat_p521_uint1 x91; + uint64_t x92; + fiat_p521_uint1 x93; + uint64_t x94; + uint64_t x95; + uint64_t x96; + uint64_t x97; + uint64_t x98; + uint64_t x99; + uint64_t x100; + uint64_t x101; + uint64_t x102; + uint64_t x103; + fiat_p521_uint1 x104; + uint64_t x105; + fiat_p521_uint1 x106; + uint64_t x107; + fiat_p521_uint1 x108; + uint64_t x109; + fiat_p521_uint1 x110; + uint64_t x111; + fiat_p521_uint1 x112; + uint64_t x113; + fiat_p521_uint1 x114; + uint64_t x115; + fiat_p521_uint1 x116; + uint64_t x117; + fiat_p521_uint1 x118; + uint64_t x119; + fiat_p521_uint1 x120; + uint64_t x121; + uint64_t x122; + fiat_p521_uint1 x123; + uint64_t x124; + fiat_p521_uint1 x125; + uint64_t x126; + fiat_p521_uint1 x127; + uint64_t x128; + fiat_p521_uint1 x129; + uint64_t x130; + fiat_p521_uint1 x131; + uint64_t x132; + fiat_p521_uint1 x133; + uint64_t x134; + fiat_p521_uint1 x135; + uint64_t x136; + fiat_p521_uint1 x137; + uint64_t x138; + fiat_p521_uint1 x139; + uint64_t x140; + uint64_t x141; + uint64_t x142; + uint64_t x143; + uint64_t x144; + uint64_t x145; + uint64_t x146; + uint64_t x147; + uint64_t x148; + fiat_p521_uint1 x149; + uint64_t x150; + uint64_t x151; + uint64_t x152; + uint64_t x153; + uint64_t x154; + uint64_t x155; + uint64_t x156; + uint64_t x157; + uint64_t x158; + uint64_t x159; + uint64_t x160; + fiat_p521_uint1 x161; + uint64_t x162; + fiat_p521_uint1 x163; + uint64_t x164; + fiat_p521_uint1 x165; + uint64_t x166; + fiat_p521_uint1 x167; + uint64_t x168; + fiat_p521_uint1 x169; + uint64_t x170; + fiat_p521_uint1 x171; + uint64_t x172; + fiat_p521_uint1 x173; + uint64_t x174; + fiat_p521_uint1 x175; + uint64_t x176; + fiat_p521_uint1 x177; + uint64_t x178; + fiat_p521_uint1 x179; + uint64_t x180; + uint64_t x181; + uint64_t x182; + uint64_t x183; + uint64_t x184; + uint64_t x185; + uint64_t x186; + uint64_t x187; + uint64_t x188; + uint64_t x189; + fiat_p521_uint1 x190; + uint64_t x191; + fiat_p521_uint1 x192; + uint64_t x193; + fiat_p521_uint1 x194; + uint64_t x195; + fiat_p521_uint1 x196; + uint64_t x197; + fiat_p521_uint1 x198; + uint64_t x199; + fiat_p521_uint1 x200; + uint64_t x201; + fiat_p521_uint1 x202; + uint64_t x203; + fiat_p521_uint1 x204; + uint64_t x205; + fiat_p521_uint1 x206; + uint64_t x207; + fiat_p521_uint1 x208; + uint64_t x209; + fiat_p521_uint1 x210; + uint64_t x211; + fiat_p521_uint1 x212; + uint64_t x213; + fiat_p521_uint1 x214; + uint64_t x215; + fiat_p521_uint1 x216; + uint64_t x217; + fiat_p521_uint1 x218; + uint64_t x219; + fiat_p521_uint1 x220; + uint64_t x221; + fiat_p521_uint1 x222; + uint64_t x223; + fiat_p521_uint1 x224; + uint64_t x225; + fiat_p521_uint1 x226; + uint64_t x227; + fiat_p521_uint1 x228; + uint64_t x229; + uint64_t x230; + uint64_t x231; + uint64_t x232; + uint64_t x233; + uint64_t x234; + uint64_t x235; + uint64_t x236; + uint64_t x237; + uint64_t x238; + uint64_t x239; + uint64_t x240; + uint64_t x241; + uint64_t x242; + uint64_t x243; + uint64_t x244; + uint64_t x245; + uint64_t x246; + uint64_t x247; + uint64_t x248; + uint64_t x249; + uint64_t x250; + uint64_t x251; + uint64_t x252; + uint64_t x253; + uint64_t x254; + uint64_t x255; + uint64_t x256; + fiat_p521_addcarryx_u64(&x1, &x2, 0x0, (~arg1), 0x1); + x3 = (fiat_p521_uint1)((fiat_p521_uint1)(x1 >> 63) & (fiat_p521_uint1)((arg3[0]) & 0x1)); + fiat_p521_addcarryx_u64(&x4, &x5, 0x0, (~arg1), 0x1); + fiat_p521_cmovznz_u64(&x6, x3, arg1, x4); + fiat_p521_cmovznz_u64(&x7, x3, (arg2[0]), (arg3[0])); + fiat_p521_cmovznz_u64(&x8, x3, (arg2[1]), (arg3[1])); + fiat_p521_cmovznz_u64(&x9, x3, (arg2[2]), (arg3[2])); + fiat_p521_cmovznz_u64(&x10, x3, (arg2[3]), (arg3[3])); + fiat_p521_cmovznz_u64(&x11, x3, (arg2[4]), (arg3[4])); + fiat_p521_cmovznz_u64(&x12, x3, (arg2[5]), (arg3[5])); + fiat_p521_cmovznz_u64(&x13, x3, (arg2[6]), (arg3[6])); + fiat_p521_cmovznz_u64(&x14, x3, (arg2[7]), (arg3[7])); + fiat_p521_cmovznz_u64(&x15, x3, (arg2[8]), (arg3[8])); + fiat_p521_cmovznz_u64(&x16, x3, (arg2[9]), (arg3[9])); + fiat_p521_addcarryx_u64(&x17, &x18, 0x0, 0x1, (~(arg2[0]))); + fiat_p521_addcarryx_u64(&x19, &x20, x18, 0x0, (~(arg2[1]))); + fiat_p521_addcarryx_u64(&x21, &x22, x20, 0x0, (~(arg2[2]))); + fiat_p521_addcarryx_u64(&x23, &x24, x22, 0x0, (~(arg2[3]))); + fiat_p521_addcarryx_u64(&x25, &x26, x24, 0x0, (~(arg2[4]))); + fiat_p521_addcarryx_u64(&x27, &x28, x26, 0x0, (~(arg2[5]))); + fiat_p521_addcarryx_u64(&x29, &x30, x28, 0x0, (~(arg2[6]))); + fiat_p521_addcarryx_u64(&x31, &x32, x30, 0x0, (~(arg2[7]))); + fiat_p521_addcarryx_u64(&x33, &x34, x32, 0x0, (~(arg2[8]))); + fiat_p521_addcarryx_u64(&x35, &x36, x34, 0x0, (~(arg2[9]))); + fiat_p521_cmovznz_u64(&x37, x3, (arg3[0]), x17); + fiat_p521_cmovznz_u64(&x38, x3, (arg3[1]), x19); + fiat_p521_cmovznz_u64(&x39, x3, (arg3[2]), x21); + fiat_p521_cmovznz_u64(&x40, x3, (arg3[3]), x23); + fiat_p521_cmovznz_u64(&x41, x3, (arg3[4]), x25); + fiat_p521_cmovznz_u64(&x42, x3, (arg3[5]), x27); + fiat_p521_cmovznz_u64(&x43, x3, (arg3[6]), x29); + fiat_p521_cmovznz_u64(&x44, x3, (arg3[7]), x31); + fiat_p521_cmovznz_u64(&x45, x3, (arg3[8]), x33); + fiat_p521_cmovznz_u64(&x46, x3, (arg3[9]), x35); + fiat_p521_cmovznz_u64(&x47, x3, (arg4[0]), (arg5[0])); + fiat_p521_cmovznz_u64(&x48, x3, (arg4[1]), (arg5[1])); + fiat_p521_cmovznz_u64(&x49, x3, (arg4[2]), (arg5[2])); + fiat_p521_cmovznz_u64(&x50, x3, (arg4[3]), (arg5[3])); + fiat_p521_cmovznz_u64(&x51, x3, (arg4[4]), (arg5[4])); + fiat_p521_cmovznz_u64(&x52, x3, (arg4[5]), (arg5[5])); + fiat_p521_cmovznz_u64(&x53, x3, (arg4[6]), (arg5[6])); + fiat_p521_cmovznz_u64(&x54, x3, (arg4[7]), (arg5[7])); + fiat_p521_cmovznz_u64(&x55, x3, (arg4[8]), (arg5[8])); + fiat_p521_addcarryx_u64(&x56, &x57, 0x0, x47, x47); + fiat_p521_addcarryx_u64(&x58, &x59, x57, x48, x48); + fiat_p521_addcarryx_u64(&x60, &x61, x59, x49, x49); + fiat_p521_addcarryx_u64(&x62, &x63, x61, x50, x50); + fiat_p521_addcarryx_u64(&x64, &x65, x63, x51, x51); + fiat_p521_addcarryx_u64(&x66, &x67, x65, x52, x52); + fiat_p521_addcarryx_u64(&x68, &x69, x67, x53, x53); + fiat_p521_addcarryx_u64(&x70, &x71, x69, x54, x54); + fiat_p521_addcarryx_u64(&x72, &x73, x71, x55, x55); + fiat_p521_subborrowx_u64(&x74, &x75, 0x0, x56, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x76, &x77, x75, x58, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x78, &x79, x77, x60, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x80, &x81, x79, x62, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x82, &x83, x81, x64, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x84, &x85, x83, x66, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x86, &x87, x85, x68, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x88, &x89, x87, x70, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x90, &x91, x89, x72, UINT16_C(0x1ff)); + fiat_p521_subborrowx_u64(&x92, &x93, x91, x73, 0x0); + x94 = (arg4[8]); + x95 = (arg4[7]); + x96 = (arg4[6]); + x97 = (arg4[5]); + x98 = (arg4[4]); + x99 = (arg4[3]); + x100 = (arg4[2]); + x101 = (arg4[1]); + x102 = (arg4[0]); + fiat_p521_subborrowx_u64(&x103, &x104, 0x0, 0x0, x102); + fiat_p521_subborrowx_u64(&x105, &x106, x104, 0x0, x101); + fiat_p521_subborrowx_u64(&x107, &x108, x106, 0x0, x100); + fiat_p521_subborrowx_u64(&x109, &x110, x108, 0x0, x99); + fiat_p521_subborrowx_u64(&x111, &x112, x110, 0x0, x98); + fiat_p521_subborrowx_u64(&x113, &x114, x112, 0x0, x97); + fiat_p521_subborrowx_u64(&x115, &x116, x114, 0x0, x96); + fiat_p521_subborrowx_u64(&x117, &x118, x116, 0x0, x95); + fiat_p521_subborrowx_u64(&x119, &x120, x118, 0x0, x94); + fiat_p521_cmovznz_u64(&x121, x120, 0x0, UINT64_C(0xffffffffffffffff)); + fiat_p521_addcarryx_u64(&x122, &x123, 0x0, x103, x121); + fiat_p521_addcarryx_u64(&x124, &x125, x123, x105, x121); + fiat_p521_addcarryx_u64(&x126, &x127, x125, x107, x121); + fiat_p521_addcarryx_u64(&x128, &x129, x127, x109, x121); + fiat_p521_addcarryx_u64(&x130, &x131, x129, x111, x121); + fiat_p521_addcarryx_u64(&x132, &x133, x131, x113, x121); + fiat_p521_addcarryx_u64(&x134, &x135, x133, x115, x121); + fiat_p521_addcarryx_u64(&x136, &x137, x135, x117, x121); + fiat_p521_addcarryx_u64(&x138, &x139, x137, x119, (x121 & UINT16_C(0x1ff))); + fiat_p521_cmovznz_u64(&x140, x3, (arg5[0]), x122); + fiat_p521_cmovznz_u64(&x141, x3, (arg5[1]), x124); + fiat_p521_cmovznz_u64(&x142, x3, (arg5[2]), x126); + fiat_p521_cmovznz_u64(&x143, x3, (arg5[3]), x128); + fiat_p521_cmovznz_u64(&x144, x3, (arg5[4]), x130); + fiat_p521_cmovznz_u64(&x145, x3, (arg5[5]), x132); + fiat_p521_cmovznz_u64(&x146, x3, (arg5[6]), x134); + fiat_p521_cmovznz_u64(&x147, x3, (arg5[7]), x136); + fiat_p521_cmovznz_u64(&x148, x3, (arg5[8]), x138); + x149 = (fiat_p521_uint1)(x37 & 0x1); + fiat_p521_cmovznz_u64(&x150, x149, 0x0, x7); + fiat_p521_cmovznz_u64(&x151, x149, 0x0, x8); + fiat_p521_cmovznz_u64(&x152, x149, 0x0, x9); + fiat_p521_cmovznz_u64(&x153, x149, 0x0, x10); + fiat_p521_cmovznz_u64(&x154, x149, 0x0, x11); + fiat_p521_cmovznz_u64(&x155, x149, 0x0, x12); + fiat_p521_cmovznz_u64(&x156, x149, 0x0, x13); + fiat_p521_cmovznz_u64(&x157, x149, 0x0, x14); + fiat_p521_cmovznz_u64(&x158, x149, 0x0, x15); + fiat_p521_cmovznz_u64(&x159, x149, 0x0, x16); + fiat_p521_addcarryx_u64(&x160, &x161, 0x0, x37, x150); + fiat_p521_addcarryx_u64(&x162, &x163, x161, x38, x151); + fiat_p521_addcarryx_u64(&x164, &x165, x163, x39, x152); + fiat_p521_addcarryx_u64(&x166, &x167, x165, x40, x153); + fiat_p521_addcarryx_u64(&x168, &x169, x167, x41, x154); + fiat_p521_addcarryx_u64(&x170, &x171, x169, x42, x155); + fiat_p521_addcarryx_u64(&x172, &x173, x171, x43, x156); + fiat_p521_addcarryx_u64(&x174, &x175, x173, x44, x157); + fiat_p521_addcarryx_u64(&x176, &x177, x175, x45, x158); + fiat_p521_addcarryx_u64(&x178, &x179, x177, x46, x159); + fiat_p521_cmovznz_u64(&x180, x149, 0x0, x47); + fiat_p521_cmovznz_u64(&x181, x149, 0x0, x48); + fiat_p521_cmovznz_u64(&x182, x149, 0x0, x49); + fiat_p521_cmovznz_u64(&x183, x149, 0x0, x50); + fiat_p521_cmovznz_u64(&x184, x149, 0x0, x51); + fiat_p521_cmovznz_u64(&x185, x149, 0x0, x52); + fiat_p521_cmovznz_u64(&x186, x149, 0x0, x53); + fiat_p521_cmovznz_u64(&x187, x149, 0x0, x54); + fiat_p521_cmovznz_u64(&x188, x149, 0x0, x55); + fiat_p521_addcarryx_u64(&x189, &x190, 0x0, x140, x180); + fiat_p521_addcarryx_u64(&x191, &x192, x190, x141, x181); + fiat_p521_addcarryx_u64(&x193, &x194, x192, x142, x182); + fiat_p521_addcarryx_u64(&x195, &x196, x194, x143, x183); + fiat_p521_addcarryx_u64(&x197, &x198, x196, x144, x184); + fiat_p521_addcarryx_u64(&x199, &x200, x198, x145, x185); + fiat_p521_addcarryx_u64(&x201, &x202, x200, x146, x186); + fiat_p521_addcarryx_u64(&x203, &x204, x202, x147, x187); + fiat_p521_addcarryx_u64(&x205, &x206, x204, x148, x188); + fiat_p521_subborrowx_u64(&x207, &x208, 0x0, x189, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x209, &x210, x208, x191, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x211, &x212, x210, x193, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x213, &x214, x212, x195, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x215, &x216, x214, x197, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x217, &x218, x216, x199, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x219, &x220, x218, x201, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x221, &x222, x220, x203, UINT64_C(0xffffffffffffffff)); + fiat_p521_subborrowx_u64(&x223, &x224, x222, x205, UINT16_C(0x1ff)); + fiat_p521_subborrowx_u64(&x225, &x226, x224, x206, 0x0); + fiat_p521_addcarryx_u64(&x227, &x228, 0x0, x6, 0x1); + x229 = ((x160 >> 1) | ((x162 << 63) & UINT64_C(0xffffffffffffffff))); + x230 = ((x162 >> 1) | ((x164 << 63) & UINT64_C(0xffffffffffffffff))); + x231 = ((x164 >> 1) | ((x166 << 63) & UINT64_C(0xffffffffffffffff))); + x232 = ((x166 >> 1) | ((x168 << 63) & UINT64_C(0xffffffffffffffff))); + x233 = ((x168 >> 1) | ((x170 << 63) & UINT64_C(0xffffffffffffffff))); + x234 = ((x170 >> 1) | ((x172 << 63) & UINT64_C(0xffffffffffffffff))); + x235 = ((x172 >> 1) | ((x174 << 63) & UINT64_C(0xffffffffffffffff))); + x236 = ((x174 >> 1) | ((x176 << 63) & UINT64_C(0xffffffffffffffff))); + x237 = ((x176 >> 1) | ((x178 << 63) & UINT64_C(0xffffffffffffffff))); + x238 = ((x178 & UINT64_C(0x8000000000000000)) | (x178 >> 1)); + fiat_p521_cmovznz_u64(&x239, x93, x74, x56); + fiat_p521_cmovznz_u64(&x240, x93, x76, x58); + fiat_p521_cmovznz_u64(&x241, x93, x78, x60); + fiat_p521_cmovznz_u64(&x242, x93, x80, x62); + fiat_p521_cmovznz_u64(&x243, x93, x82, x64); + fiat_p521_cmovznz_u64(&x244, x93, x84, x66); + fiat_p521_cmovznz_u64(&x245, x93, x86, x68); + fiat_p521_cmovznz_u64(&x246, x93, x88, x70); + fiat_p521_cmovznz_u64(&x247, x93, x90, x72); + fiat_p521_cmovznz_u64(&x248, x226, x207, x189); + fiat_p521_cmovznz_u64(&x249, x226, x209, x191); + fiat_p521_cmovznz_u64(&x250, x226, x211, x193); + fiat_p521_cmovznz_u64(&x251, x226, x213, x195); + fiat_p521_cmovznz_u64(&x252, x226, x215, x197); + fiat_p521_cmovznz_u64(&x253, x226, x217, x199); + fiat_p521_cmovznz_u64(&x254, x226, x219, x201); + fiat_p521_cmovznz_u64(&x255, x226, x221, x203); + fiat_p521_cmovznz_u64(&x256, x226, x223, x205); + *out1 = x227; + out2[0] = x7; + out2[1] = x8; + out2[2] = x9; + out2[3] = x10; + out2[4] = x11; + out2[5] = x12; + out2[6] = x13; + out2[7] = x14; + out2[8] = x15; + out2[9] = x16; + out3[0] = x229; + out3[1] = x230; + out3[2] = x231; + out3[3] = x232; + out3[4] = x233; + out3[5] = x234; + out3[6] = x235; + out3[7] = x236; + out3[8] = x237; + out3[9] = x238; + out4[0] = x239; + out4[1] = x240; + out4[2] = x241; + out4[3] = x242; + out4[4] = x243; + out4[5] = x244; + out4[6] = x245; + out4[7] = x246; + out4[8] = x247; + out5[0] = x248; + out5[1] = x249; + out5[2] = x250; + out5[3] = x251; + out5[4] = x252; + out5[5] = x253; + out5[6] = x254; + out5[7] = x255; + out5[8] = x256; +} + diff --git a/ec/native/p521_stubs.c b/ec/native/p521_stubs.c new file mode 100644 index 00000000..e8d6764d --- /dev/null +++ b/ec/native/p521_stubs.c @@ -0,0 +1,143 @@ +#include "mirage_crypto.h" + +#ifdef ARCH_64BIT +#include "p521_64.h" +#define LIMBS 9 +#define WORD uint64_t +#define WORDSIZE 64 +#else +#include "p521_32.h" +#define LIMBS 17 +#define WORD uint32_t +#define WORDSIZE 32 +#endif + +#define LEN_PRIME 521 +#define CURVE_DESCRIPTION fiat_p521 + +#include "inversion_template.h" +#include "point_operations.h" + +#include + +CAMLprim value mc_p521_sub(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_p521_sub(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p521_add(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_p521_add(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p521_mul(value out, value a, value b) +{ + CAMLparam3(out, a, b); + fiat_p521_mul(Caml_ba_data_val(out), Caml_ba_data_val(a), Caml_ba_data_val(b)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p521_from_bytes(value out, value in) +{ + CAMLparam2(out, in); + fiat_p521_from_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p521_to_bytes(value out, value in) +{ + CAMLparam2(out, in); + fiat_p521_to_bytes(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p521_sqr(value out, value in) +{ + CAMLparam2(out, in); + fiat_p521_square(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p521_from_montgomery(value x) +{ + CAMLparam1(x); + WORD *l = Caml_ba_data_val(x); + fiat_p521_from_montgomery(l, l); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p521_to_montgomery(value x) +{ + CAMLparam1(x); + WORD *l = Caml_ba_data_val(x); + fiat_p521_to_montgomery(l, l); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p521_nz(value x) +{ + CAMLparam1(x); + CAMLreturn(Val_bool(fe_nz(Caml_ba_data_val(x)))); +} + +CAMLprim value mc_p521_set_one(value x) +{ + CAMLparam1(x); + fiat_p521_set_one(Caml_ba_data_val(x)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p521_inv(value out, value in) +{ + CAMLparam2(out, in); + inversion(Caml_ba_data_val(out), Caml_ba_data_val(in)); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p521_point_double(value out, value in) +{ + CAMLparam2(out, in); + point_double( + Caml_ba_data_val(Field(out, 0)), + Caml_ba_data_val(Field(out, 1)), + Caml_ba_data_val(Field(out, 2)), + Caml_ba_data_val(Field(in, 0)), + Caml_ba_data_val(Field(in, 1)), + Caml_ba_data_val(Field(in, 2)) + ); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p521_point_add(value out, value p, value q) +{ + CAMLparam3(out, p, q); + point_add( + Caml_ba_data_val(Field(out, 0)), + Caml_ba_data_val(Field(out, 1)), + Caml_ba_data_val(Field(out, 2)), + Caml_ba_data_val(Field(p, 0)), + Caml_ba_data_val(Field(p, 1)), + Caml_ba_data_val(Field(p, 2)), + 0, + Caml_ba_data_val(Field(q, 0)), + Caml_ba_data_val(Field(q, 1)), + Caml_ba_data_val(Field(q, 2)) + ); + CAMLreturn(Val_unit); +} + +CAMLprim value mc_p521_select(value out, value bit, value t, value f) +{ + CAMLparam4(out, bit, t, f); + fe_cmovznz( + Caml_ba_data_val(out), + Bool_val(bit), + Caml_ba_data_val(f), + Caml_ba_data_val(t) + ); + CAMLreturn(Val_unit); +} diff --git a/ec/native/point_operations.h b/ec/native/point_operations.h new file mode 100644 index 00000000..416c0121 --- /dev/null +++ b/ec/native/point_operations.h @@ -0,0 +1,210 @@ +#define MAKE_FN_NAME1(x,y) x ## y +#define MAKE_FN_NAME(x,y) MAKE_FN_NAME1(x,y) + +#define fe_add MAKE_FN_NAME(CURVE_DESCRIPTION,_add) +#define fe_sub MAKE_FN_NAME(CURVE_DESCRIPTION,_sub) + +#define fe_mul MAKE_FN_NAME(CURVE_DESCRIPTION,_mul) +#define fe_sqr MAKE_FN_NAME(CURVE_DESCRIPTION,_square) + +#define fe_nonzero MAKE_FN_NAME(CURVE_DESCRIPTION,_nonzero) +#define fe_selectznz MAKE_FN_NAME(CURVE_DESCRIPTION,_selectznz) + +typedef WORD fe[LIMBS]; + +static WORD fe_nz(const WORD in1[LIMBS]) { + WORD ret; + fe_nonzero(&ret, in1); + return ret; +} + +static void fe_copy(WORD out[LIMBS], const WORD in1[LIMBS]) { + for (int i = 0; i < LIMBS; i++) { + out[i] = in1[i]; + } +} + +static void fe_cmovznz(WORD out[LIMBS], WORD t, const WORD z[LIMBS], + const WORD nz[LIMBS]) { + fe_selectznz(out, !!t, z, nz); +} + +// Group operations +// ---------------- +// +// Building on top of the field operations we have the operations on the +// elliptic curve group itself. Points on the curve are represented in Jacobian +// coordinates. +// +// Both operations were transcribed to Coq and proven to correspond to naive +// implementations using Affine coordinates, for all suitable fields. In the +// Coq proofs, issues of constant-time execution and memory layout (aliasing) +// conventions were not considered. Specification of affine coordinates: +// +// As a sanity check, a proof that these points form a commutative group: +// + +// point_double calculates 2*(x_in, y_in, z_in) +// +// The method is taken from: +// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b +// +// Coq transcription and correctness proof: +// +// +// +// Outputs can equal corresponding inputs, i.e., x_out == x_in is allowed. +// while x_out == y_in is not (maybe this works, but it's not tested). +static void point_double(fe x_out, fe y_out, fe z_out, + const fe x_in, const fe y_in, const fe z_in) { + fe delta, gamma, beta, ftmp, ftmp2, tmptmp, alpha, fourbeta; + // delta = z^2 + fe_sqr(delta, z_in); + // gamma = y^2 + fe_sqr(gamma, y_in); + // beta = x*gamma + fe_mul(beta, x_in, gamma); + + // alpha = 3*(x-delta)*(x+delta) + fe_sub(ftmp, x_in, delta); + fe_add(ftmp2, x_in, delta); + + fe_add(tmptmp, ftmp2, ftmp2); + fe_add(ftmp2, ftmp2, tmptmp); + fe_mul(alpha, ftmp, ftmp2); + + // x' = alpha^2 - 8*beta + fe_sqr(x_out, alpha); + fe_add(fourbeta, beta, beta); + fe_add(fourbeta, fourbeta, fourbeta); + fe_add(tmptmp, fourbeta, fourbeta); + fe_sub(x_out, x_out, tmptmp); + + // z' = (y + z)^2 - gamma - delta + fe_add(delta, gamma, delta); + fe_add(ftmp, y_in, z_in); + fe_sqr(z_out, ftmp); + fe_sub(z_out, z_out, delta); + + // y' = alpha*(4*beta - x') - 8*gamma^2 + fe_sub(y_out, fourbeta, x_out); + fe_add(gamma, gamma, gamma); + fe_sqr(gamma, gamma); + fe_mul(y_out, alpha, y_out); + fe_add(gamma, gamma, gamma); + fe_sub(y_out, y_out, gamma); +} + +// point_add calculates (x1, y1, z1) + (x2, y2, z2) +// +// The method is taken from: +// http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-2007-bl, +// adapted for mixed addition (z2 = 1, or z2 = 0 for the point at infinity). +// +// Coq transcription and correctness proof: +// +// +// +// This function includes a branch for checking whether the two input points +// are equal, (while not equal to the point at infinity). This case never +// happens during single point multiplication, so there is no timing leak for +// ECDH or ECDSA signing. +static void point_add(fe x3, fe y3, fe z3, const fe x1, + const fe y1, const fe z1, const int mixed, + const fe x2, const fe y2, const fe z2) { + fe x_out, y_out, z_out; + WORD z1nz = fe_nz(z1); + WORD z2nz = fe_nz(z2); + + // z1z1 = z1z1 = z1**2 + fe z1z1; fe_sqr(z1z1, z1); + + fe u1, s1, two_z1z2; + if (!mixed) { + // z2z2 = z2**2 + fe z2z2; fe_sqr(z2z2, z2); + + // u1 = x1*z2z2 + fe_mul(u1, x1, z2z2); + + // two_z1z2 = (z1 + z2)**2 - (z1z1 + z2z2) = 2z1z2 + fe_add(two_z1z2, z1, z2); + fe_sqr(two_z1z2, two_z1z2); + fe_sub(two_z1z2, two_z1z2, z1z1); + fe_sub(two_z1z2, two_z1z2, z2z2); + + // s1 = y1 * z2**3 + fe_mul(s1, z2, z2z2); + fe_mul(s1, s1, y1); + } else { + // We'll assume z2 = 1 (special case z2 = 0 is handled later). + + // u1 = x1*z2z2 + fe_copy(u1, x1); + // two_z1z2 = 2z1z2 + fe_add(two_z1z2, z1, z1); + // s1 = y1 * z2**3 + fe_copy(s1, y1); + } + + // u2 = x2*z1z1 + fe u2; fe_mul(u2, x2, z1z1); + + // h = u2 - u1 + fe h; fe_sub(h, u2, u1); + + WORD xneq = fe_nz(h); + + // z_out = two_z1z2 * h + fe_mul(z_out, h, two_z1z2); + + // z1z1z1 = z1 * z1z1 + fe z1z1z1; fe_mul(z1z1z1, z1, z1z1); + + // s2 = y2 * z1**3 + fe s2; fe_mul(s2, y2, z1z1z1); + + // r = (s2 - s1)*2 + fe r; + fe_sub(r, s2, s1); + fe_add(r, r, r); + + WORD yneq = fe_nz(r); + + if (!xneq && !yneq && z1nz && z2nz) { + point_double(x3, y3, z3, x1, y1, z1); + return; + } + + // I = (2h)**2 + fe i; + fe_add(i, h, h); + fe_sqr(i, i); + + // J = h * I + fe j; fe_mul(j, h, i); + + // V = U1 * I + fe v; fe_mul(v, u1, i); + + // x_out = r**2 - J - 2V + fe_sqr(x_out, r); + fe_sub(x_out, x_out, j); + fe_sub(x_out, x_out, v); + fe_sub(x_out, x_out, v); + + // y_out = r(V-x_out) - 2 * s1 * J + fe_sub(y_out, v, x_out); + fe_mul(y_out, y_out, r); + fe s1j; + fe_mul(s1j, s1, j); + fe_sub(y_out, y_out, s1j); + fe_sub(y_out, y_out, s1j); + + fe_cmovznz(x_out, z1nz, x2, x_out); + fe_cmovznz(x3, z2nz, x1, x_out); + fe_cmovznz(y_out, z1nz, y2, y_out); + fe_cmovznz(y3, z2nz, y1, y_out); + fe_cmovznz(z_out, z1nz, z2, z_out); + fe_cmovznz(z3, z2nz, z1, z_out); +} diff --git a/ec/parameters.ml b/ec/parameters.ml deleted file mode 100644 index 9f460bc5..00000000 --- a/ec/parameters.ml +++ /dev/null @@ -1,13 +0,0 @@ -let a = `Hex "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC" - -let b = `Hex "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B" - -let g_x = - `Hex "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296" - -let g_y = - `Hex "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5" - -let p = `Hex "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF" - -let n = `Hex "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551" diff --git a/ec/parameters.mli b/ec/parameters.mli deleted file mode 100644 index b6b08340..00000000 --- a/ec/parameters.mli +++ /dev/null @@ -1,19 +0,0 @@ -(** Curve parameters. - They are stored as [Hex.t] because [Fe.t] and [Cstruct.t] are - mutable. *) - -val a : Hex.t - -val b : Hex.t - -val g_x : Hex.t -(** The base point's x coordinate. *) - -val g_y : Hex.t -(** The base point's y coordinate. *) - -val p : Hex.t -(** The prime number corresponding to [Fe]. *) - -val n : Hex.t -(** The group order. *) diff --git a/ec/point.ml b/ec/point.ml deleted file mode 100644 index ea447924..00000000 --- a/ec/point.ml +++ /dev/null @@ -1,122 +0,0 @@ -module Fe = Field_element - -type t = { f_x : Fe.t; f_y : Fe.t; f_z : Fe.t } - -let at_infinity () = - let f_x = Fe.one () in - let f_y = Fe.one () in - let f_z = Fe.create () in - { f_x; f_y; f_z } - -let is_infinity p = not (Fe.nz p.f_z) - -let is_solution_to_curve_equation ~x ~y = - let a = Fe.from_be_cstruct (Hex.to_cstruct Parameters.a) in - let b = Fe.from_be_cstruct (Hex.to_cstruct Parameters.b) in - let x3 = Fe.create () in - Fe.mul x3 x x; - Fe.mul x3 x3 x; - let ax = Fe.create () in - Fe.mul ax a x; - let y2 = Fe.create () in - Fe.mul y2 y y; - let sum = Fe.create () in - Fe.add sum x3 ax; - Fe.add sum sum b; - Fe.sub sum sum y2; - not (Fe.nz sum) - -let check_coordinate cs = - let p = Hex.to_cstruct Parameters.p in - (* ensure cs < p: *) - match Eqaf_cstruct.compare_be_with_len ~len:32 cs p >= 0 with - | true -> None - | exception Invalid_argument _ -> None - | false -> Some (Fe.from_be_cstruct cs) - -(** Convert cstruct coordinates to a finite point ensuring: - - x < p - - y < p - - y^2 = ax^3 + ax + b -*) -let validate_finite_point ~x ~y = - match (check_coordinate x, check_coordinate y) with - | Some f_x, Some f_y -> - if is_solution_to_curve_equation ~x:f_x ~y:f_y then - let f_z = Fe.one () in - Ok { f_x; f_y; f_z } - else Error `Not_on_curve - | _ -> Error `Invalid_range - -let first_byte cs = - if Cstruct.len cs = 0 then None else Some (Cstruct.get_uint8 cs 0) - -let of_cstruct cs = - match (first_byte cs, Cstruct.len cs) with - | Some 0x00, 1 -> Ok (at_infinity ()) - | Some 0x04, 65 -> - let x = Cstruct.sub cs 1 32 in - let y = Cstruct.sub cs 33 32 in - validate_finite_point ~x ~y - | Some 0x00, _ | Some 0x04, _ -> Error `Invalid_length - | _, _ -> Error `Invalid_format - -let to_affine p = - if is_infinity p then None - else - let out_x = Cstruct.create 32 in - let out_y = Cstruct.create 32 in - let z1 = Fe.create () in - let z2 = Fe.create () in - Fe.copy z1 p.f_z; - Fe.inv z2 z1; - Fe.sqr z1 z2; - Fe.from_montgomery z1; - let x = Fe.create () in - Fe.copy x p.f_x; - Fe.mul x x z1; - Fe.to_bytes out_x x; - let y = Fe.create () in - Fe.copy y p.f_y; - Fe.mul z1 z1 z2; - Fe.mul y y z1; - Fe.to_bytes out_y y; - Some (out_x, out_y) - -let to_cstruct p = - match to_affine p with - | None -> Cstruct.create 1 - | Some (x, y) -> - let four = Cstruct.create 1 in - Cstruct.set_uint8 four 0 4; - let rev_x = Cstruct.rev x and rev_y = Cstruct.rev y in - Cstruct.concat [ four; rev_x; rev_y ] - -external double_c : t -> t -> unit = "fiat_p256_caml_point_double" [@@noalloc] - -let double p = - let out = { f_x = Fe.create (); f_y = Fe.create (); f_z = Fe.create () } in - double_c out p; - out - -external add_c : t -> t -> t -> unit = "fiat_p256_caml_point_add" [@@noalloc] - -let add fe_p fe_q = - let out = { f_x = Fe.create (); f_y = Fe.create (); f_z = Fe.create () } in - add_c out fe_p fe_q; - out - -let x_of_finite_point p = - match to_affine p with None -> assert false | Some (x, _) -> Cstruct.rev x - -let params_g = - let x = Hex.to_cstruct Parameters.g_x in - let y = Hex.to_cstruct Parameters.g_y in - match validate_finite_point ~x ~y with Ok p -> p | Error _ -> assert false - -let select bit ~then_ ~else_ = - { - f_x = Fe.select bit ~then_:then_.f_x ~else_:else_.f_x; - f_y = Fe.select bit ~then_:then_.f_y ~else_:else_.f_y; - f_z = Fe.select bit ~then_:then_.f_z ~else_:else_.f_z; - } diff --git a/ec/point.mli b/ec/point.mli deleted file mode 100644 index a018e60a..00000000 --- a/ec/point.mli +++ /dev/null @@ -1,43 +0,0 @@ -type t -(** A Point on the P-256 curve. *) - -val at_infinity : unit -> t -(** The point at infinity *) - -val is_infinity : t -> bool -(** [is_infty p] checks wether [p] is the point at infinity. *) - -val add : t -> t -> t -(** Point addition. [add p q] returns the result of the addition of [p] and [q]. *) - -val double : t -> t -(** Point doubling. [double p] returns the result of doubling [p]. *) - -val of_cstruct : - Cstruct.t -> - ( t, - [> `Invalid_format | `Invalid_length | `Invalid_range | `Not_on_curve ] ) - result -(** Convert from cstruct. The format is the uncompressed format described in - SEC1, section 2.3.4, that is to say: - - - the point at infinity is the single byte "00". - - for a point (x, y) not at infinity, the format is: - - the byte "04" - - x serialized in big endian format, padded to 32 bytes. - - y serialized in big endian format, padded to 32 bytes. - - @see -*) - -val to_cstruct : t -> Cstruct.t -(** Convert to a cstruct. See [of_cstruct] for the format. *) - -val x_of_finite_point : t -> Cstruct.t -(** Return only the X coordinate of a point that is not at infinity. *) - -val params_g : t -(** The curve's base point *) - -val select : bool -> then_:t -> else_:t -> t -(** Constant-time selection. See [Field_element.select]. *) diff --git a/ec/scalar.ml b/ec/scalar.ml deleted file mode 100644 index d1166e2a..00000000 --- a/ec/scalar.ml +++ /dev/null @@ -1,19 +0,0 @@ -type t = Scalar of Cstruct.t - -let is_in_range cs = - let zero = Cstruct.create 32 in - let n = Hex.to_cstruct Parameters.n in - Eqaf_cstruct.compare_be_with_len ~len:32 cs zero > 0 - && Eqaf_cstruct.compare_be_with_len ~len:32 n cs > 0 - -let of_cstruct cs = - match is_in_range cs with - | exception Invalid_argument _ -> Error `Invalid_length - | true -> Ok (Scalar (Cstruct.rev cs)) - | false -> Error `Invalid_range - -let bit_at (Scalar s) i = - let byte_num = i / 8 in - let bit_num = i mod 8 in - let byte = Cstruct.get_uint8 s byte_num in - byte land (1 lsl bit_num) <> 0 diff --git a/ec/scalar.mli b/ec/scalar.mli deleted file mode 100644 index 64ad4aa8..00000000 --- a/ec/scalar.mli +++ /dev/null @@ -1,14 +0,0 @@ -type t -(** A scalar value strictly between 1 and n-1 where n is the group order. *) - -val of_cstruct : Cstruct.t -> (t, Error.scalar_error) result -(** [of_cstruct cs] is a scalar {!t} when successful. - It should be in big endian format. - Returns an [Error _] when [cs] is not 32 bytes long; - or when the number is zero; - or if it is larger than or equal to the group order. -*) - -val bit_at : t -> int -> bool -(** [bit_at d n] returns the [n]th bit from [d], where bit 0 is the least - significant bit. *) diff --git a/ec/scalar_mult.ml b/ec/scalar_mult.ml deleted file mode 100644 index 23d340a0..00000000 --- a/ec/scalar_mult.ml +++ /dev/null @@ -1,12 +0,0 @@ -let scalar_mult d p = - let r0 = ref (Point.at_infinity ()) in - let r1 = ref p in - for i = 255 downto 0 do - let bit = Scalar.bit_at d i in - let sum = Point.add !r0 !r1 in - let r0_double = Point.double !r0 in - let r1_double = Point.double !r1 in - r0 := Point.select bit ~then_:sum ~else_:r0_double; - r1 := Point.select bit ~then_:r1_double ~else_:sum - done; - !r0 diff --git a/ec/scalar_mult.mli b/ec/scalar_mult.mli deleted file mode 100644 index e430789c..00000000 --- a/ec/scalar_mult.mli +++ /dev/null @@ -1,3 +0,0 @@ -val scalar_mult : Scalar.t -> Point.t -> Point.t -(** Scalar multiplication, implemented using the Montgomery powering ladder. - @see *) diff --git a/mirage-crypto-ec.opam b/mirage-crypto-ec.opam index e31f54b3..b02b3218 100644 --- a/mirage-crypto-ec.opam +++ b/mirage-crypto-ec.opam @@ -27,18 +27,18 @@ bug-reports: "https://github.com/mirage/mirage-crypto/issues" depends: [ "dune" {>= "2.6"} "alcotest" {with-test} - "asn1-combinators" {with-test} + "asn1-combinators" {with-test} # & >= "0.2.5"} "ocaml" {>= "4.08.0"} "cstruct" {>= "3.5.0"} "dune-configurator" - "eqaf" {>= "0.5"} - "hex" + "eqaf" {>= "0.7"} + "hex" {with-test} "conf-pkg-config" {build} "ppx_deriving_yojson" {with-test} "ppx_deriving" {with-test} - "rresult" {with-test} - "stdlib-shims" {with-test} "yojson" {with-test & >= "1.6.0"} + "mirage-crypto" #{=version} + "mirage-crypto-rng" #{=version} ] depopts: ["ocaml-freestanding"] conflicts: [ diff --git a/tests/dune b/tests/dune index f689d0d7..eff3f5cd 100644 --- a/tests/dune +++ b/tests/dune @@ -52,12 +52,19 @@ (test (name test_ec) (modules test_ec) - (libraries alcotest mirage-crypto-ec) + (libraries alcotest mirage-crypto mirage-crypto-ec mirage-crypto-rng.unix + hex) (package mirage-crypto-ec)) (test - (name test_ec_wycheproof_secp256r1) - (modules test_ec_wycheproof_secp256r1) - (deps ecdh_secp256r1_test.json) - (libraries alcotest mirage-crypto-ec wycheproof asn1-combinators) + (name test_ec_wycheproof) + (modules test_ec_wycheproof) + (deps ecdh_secp224r1_test.json ecdsa_secp224r1_sha224_test.json + ecdsa_secp224r1_sha256_test.json ecdsa_secp224r1_sha512_test.json + ecdh_secp256r1_test.json ecdsa_secp256r1_sha256_test.json + ecdsa_secp256r1_sha512_test.json ecdh_secp384r1_test.json + ecdsa_secp384r1_sha384_test.json ecdsa_secp384r1_sha512_test.json + ecdh_secp521r1_test.json ecdsa_secp521r1_sha512_test.json) + (libraries alcotest mirage-crypto-ec wycheproof asn1-combinators + mirage-crypto-pk mirage-crypto) (package mirage-crypto-ec)) diff --git a/tests/ecdh_secp224r1_test.json b/tests/ecdh_secp224r1_test.json new file mode 100644 index 00000000..8f08ecf6 --- /dev/null +++ b/tests/ecdh_secp224r1_test.json @@ -0,0 +1,3581 @@ +{ + "algorithm" : "ECDH", + "generatorVersion" : "0.8r12", + "numberOfTests" : 340, + "header" : [ + "Test vectors of type EcdhTest are intended for", + "testing an ECDH implementations using X509 encoded", + "public keys and integers for private keys.", + "Test vectors of this format are useful for testing", + "Java providers." + ], + "notes" : { + "AddSubChain" : "The private key has a special value. Implementations using addition subtraction chains for the point multiplication may get the point at infinity as an intermediate result. See CVE_2017_10176", + "CompressedPoint" : "The point in the public key is compressed. Not every library supports points in compressed format.", + "InvalidAsn" : "The public key in this test uses an invalid ASN encoding. Some cases where the ASN parser is not strictly checking the ASN format are benign as long as the ECDH computation still returns the correct shared value.", + "InvalidPublic" : "The public key has been modified and is invalid. An implementation should always check whether the public key is valid and on the same curve as the private key. The test vector includes the shared secret computed with the original public key if the public point is on the curve of the private key. Generating a shared secret other than the one with the original key likely indicates that the bug is exploitable.", + "ModifiedPrime" : "The modulus of the public key has been modified. The public point of the public key has been chosen so that it is both a point on both the curve of the modified public key and the private key.", + "UnnamedCurve" : "The public key does not use a named curve. RFC 3279 allows to encode such curves by explicitly encoding, the parameters of the curve equation, modulus, generator, order and cofactor. However, many crypto libraries only support named curves. Modifying some of the EC parameters and encoding the corresponding public key as an unnamed curve is a potential attack vector.", + "UnusedParam" : "A parameter that is typically not used for ECDH has been modified. Sometimes libraries ignore small differences between public and private key. For example, a library might ignore an incorrect cofactor in the public key. We consider ignoring such changes as acceptable as long as these differences do not change the outcome of the ECDH computation, i.e. as long as the computation is done on the curve from the private key.", + "WeakPublicKey" : "The vector contains a weak public key. The curve is not a named curve, the public key point has order 3 and has been chosen to be on the same curve as the private key. This test vector is used to check ECC implementations for missing steps in the verification of the public key.", + "WrongOrder" : "The order of the public key has been modified. If this order is used in a cryptographic primitive instead of the correct order then private keys may leak. E.g. ECDHC in BC 1.52 suffered from this." + }, + "schema" : "ecdh_test_schema.json", + "testGroups" : [ + { + "curve" : "secp224r1", + "encoding" : "asn", + "type" : "EcdhTest", + "tests" : [ + { + "tcId" : 1, + "comment" : "normal case", + "public" : "304e301006072a8648ce3d020106052b81040021033a00047d8ac211e1228eb094e285a957d9912e93deee433ed777440ae9fc719b01d050dfbe653e72f39491be87fb1a2742daa6e0a2aada98bb1aca", + "private" : "565577a49415ca761a0322ad54e4ad0ae7625174baf372c2816f5328", + "shared" : "b8ecdb552d39228ee332bafe4886dbff272f7109edf933bc7542bd4f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "compressed public key", + "public" : "3032301006072a8648ce3d020106052b81040021031e00027d8ac211e1228eb094e285a957d9912e93deee433ed777440ae9fc71", + "private" : "565577a49415ca761a0322ad54e4ad0ae7625174baf372c2816f5328", + "shared" : "b8ecdb552d39228ee332bafe4886dbff272f7109edf933bc7542bd4f", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 3, + "comment" : "edge case for shared secret", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004e73a6ca72f3a2fae6e0a01a0ed03bfa3058b04576942eaf063095e62ca16fd31fa0f38eeb592cbeea1147751fdd2a5b6cc0ead404467a5b6", + "private" : "00a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "00000000000000000000000000000000000000000000000000000003", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "edge case for shared secret", + "public" : "304e301006072a8648ce3d020106052b81040021033a00045763fa2ae16367ad23d471cc9a52466f0d81d864e5640cefe384114594d9fecfbed4f254505ac8b41d2532055a07f0241c4818b552cbb636", + "private" : "00a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "00000000000000000000000100000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "edge case for shared secret", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004142c1fd80fa2121a59aa898144084ec033f7a56a34eee0b499e29ae51c6d8c1bbb1ef2a76d565899fe44ffc1207d530d7f598fb77f4bb76b", + "private" : "00a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "00000000000000ffffffffffffff0000000000000100000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "edge case for shared secret", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ed6f793e10c80d12d871cf8988399c4898a9bf9ffd8f27399f63de25f0051cdf4eec7f368f922cfcd948893ceca0c92e540cc4367a99a66a", + "private" : "00a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "00000000ffffffffffffffff00000000000000010000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "edge case for shared secret", + "public" : "304e301006072a8648ce3d020106052b81040021033a000408fcfc1a63c82860be12e4137433dfc40be9acdd245f9a8c4e56be61a385fc09f808383383f4b1d0d5365b6e5dcfacdc19bc7bcfed221274", + "private" : "00a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "edge case for shared secret", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004d883ed77f1861e8712800d31df67888fe39f150c79a27aa88caeda6b180f3f623e2ff3ab5370cf8179165b085af3dd4502850c0104caed9a", + "private" : "00a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "0003fffffff00000003fffffff00000003fffffff000000040000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "edge case for shared secret", + "public" : "304e301006072a8648ce3d020106052b81040021033a00042b8b279b85ee3f3d2c0abeb36fdfc5aad6157d652d26489381a32cd73224bd757ef794acc92b0b3b9e7990618bb343a9a09bdb9d3616eff6", + "private" : "00a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "01fffffffc00000007fffffff00000001fffffffc000000080000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "edge case for shared secret", + "public" : "304e301006072a8648ce3d020106052b81040021033a00048bd5f03391eeeae1744e8fc53d314efffafa4d3fa4f1b95c3388a9cd7c86358b273119c537133eb55e79c6ac510b10980b379b919ccf2e2f", + "private" : "00a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "0a15c112ff784b1445e889f955be7e3ffdf451a2c0e76ab5cb32cf41", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "edge case for shared secret", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ce9631b6a16227778625c8e5421ae083cdd913abefde01dbe69f6c2b95386aff2b483b2c47151cfaabfd000614c683ce2e1778221ae42c1b", + "private" : "00a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "62989eaaa26a16f07330c3c51e0a4631fd016bfcede26552816aee39", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "edge case for shared secret", + "public" : "304e301006072a8648ce3d020106052b81040021033a00041f441c98eda956a6a7fdbfd8d21910860ab59d16c3e52f8e7fad6ca5df61a55fc508fc0499c55492f1e87bb2faa0cb4170b79f3a85ec2f3d", + "private" : "00a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "661ac958c0febbc718ccf39cefc6b66c4231fbb9a76f35228a3bf5c3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "edge case for shared secret", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004be74583cb9d3a05ae54923624e478a329a697d842dfae33141c844d7d9ba4fc96e0fe716ac0542e87368662fc2f0cb9b0ae57936ddec7190", + "private" : "00a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "6d7e41821abe1094d430237923d2a50de31768ab51b12dce8a09e34c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "edge case for shared secret", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004a281ad992b363597ac93ff0de8ab1f7e51a6672dcbb58f9d739ba430ce0192874038daefc3130eec65811c7255da70fea65c1003f6892faa", + "private" : "00a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "edge case for shared secret", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004be3e22133f51203f631b81dde8c020cdea5daa1f99cfc05c88fad2dc0f243798d6e72d1de9e3cdca4144e0a6c0f2a584d07589006972c197", + "private" : "00a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "edge case for shared secret", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004af14547c20afbd91bfe64ea03d45a76a71241f23520ef897ff91eff1b54ca6ca8c25fd73852ec6654617434eff7f0225684d4dea7a4f8a97", + "private" : "00a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "ffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "edge case for shared secret", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004b1e484925018729926acda56ff3e2f6c1e7e8f162b178d8e8afb45564fceaa6da5d998fe26b6b26a055169063a5ab6908852ca8b54e2de6c", + "private" : "00a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "fffff0000007fffffe000000ffffffc000001ffffff8000003ffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "edge case for shared secret", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004937eb09fb145c8829cb7df20a4cbeed396791373de277871d6c5f9cc3b5b4fd56464a71fc4a2a6af3bd251952bffa829489e68a8d06f96b6", + "private" : "00a2b6442a37f9201b56758034d2009be64b0ab7c02d7e398cac9665d6", + "shared" : "ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "edge cases for ephemeral key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004000000000000000000000000000000000000000000000000000000037cac269c67bd55ea14efff4eadefe5e74978514af14c88fab46ec046", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "3fa0b9ff70b884f9f57bb84f7a9532d93f6ba803f89dd8ff008177d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "edge cases for ephemeral key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004000000000000000000000001000000000000000000000000000000012ea2f4917bdfdb008306cc10a18e2557633ba861001829dcbfb96fba", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "be1ded8cb7ff8a585181f96d681e31b332fe27dcae922dca2310300d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "edge cases for ephemeral key", + "public" : "304e301006072a8648ce3d020106052b81040021033a000400000000000000ffffffffffffff000000000000010000000000000073ca5f8f104997a2399e0c7f25e72a75ec29fc4542533d3fea89a33a", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "a2e86a260e13515918a0cafdd87855f231b5624c560f976159e06a75", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "edge cases for ephemeral key", + "public" : "304e301006072a8648ce3d020106052b81040021033a000400000000ffffffffffffffff000000000000000100000000000000006fe6805f59b19b0dd389452a1d4a420bfeb6c369cf6fed5b12e6e654", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "31ef7c8d10404a0046994f313a70574b027e87f9028eca242c1b5bf5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "edge cases for ephemeral key", + "public" : "304e301006072a8648ce3d020106052b81040021033a00040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff77c5cfa4e2c384938d48bd8dd98f54c86b279f1df8c0a1f6692439c9", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "d1976a8ef5f54f24f5a269ad504fdca849fc9c28587ba294ef267396", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "edge cases for ephemeral key", + "public" : "304e301006072a8648ce3d020106052b81040021033a00040003fffffff00000003fffffff00000003fffffff00000004000000001f0828136016bb97445461bc59f2175d8d23557d6b9381f26136e3d", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "ce7890d108ddb2e5474e6417fcf7a9f2b3bd018816062f4835260dc8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "edge cases for ephemeral key", + "public" : "304e301006072a8648ce3d020106052b81040021033a000401fffffffc00000007fffffff00000001fffffffc0000000800000012d8acca6f199d4a94b933ba1aa713a7debde8ac57b928f596ae66a66", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "30b6ff6e8051dae51e4fe34b2d9a0b1879153e007eb0b5bdf1791a9c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "edge cases for ephemeral key", + "public" : "304e301006072a8648ce3d020106052b81040021033a00040a15c112ff784b1445e889f955be7e3ffdf451a2c0e76ab5cb32cf413d4df973c563c6decdd435e4f864557e4c273096d9941ca4260a266e", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "77ec668a00f72d85aa527624abb16c039fe490d17dd6c455a1ed7fd8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "edge cases for ephemeral key", + "public" : "304e301006072a8648ce3d020106052b81040021033a000462989eaaa26a16f07330c3c51e0a4631fd016bfcede26552816aee39389ee9436d616cab90032931aa7fbbfcfc13309f61e2423cc8dab93c", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "a3f432f6aba9a92f49a5ea64ffe7059a9d9b487a0b5223ddc988208b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "edge cases for ephemeral key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004661ac958c0febbc718ccf39cefc6b66c4231fbb9a76f35228a3bf5c3103b8040e3cb41966fc64a68cacb0c14053f87d27e8ed7bf2d7fe51b", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "1530fd9caf03737af34a4ba716b558cbecbc35d18402535a0a142313", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "edge cases for ephemeral key", + "public" : "304e301006072a8648ce3d020106052b81040021033a00046d7e41821abe1094d430237923d2a50de31768ab51b12dce8a09e34c276cf273d75d367820dd556182def0957af0a314f48fed227c298dc0", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "cfc39ccacb94ad0e0552b2e47112f60fbbe7ae0dc32230b9273dd210", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "edge cases for ephemeral key", + "public" : "304e301006072a8648ce3d020106052b81040021033a00047fffffffffffffffffffffffffffffffffffffffffffffffffffffff7d8dbca36c56bcaae92e3475f799294f30768038e816a7d5f7f07d77", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "73bd63bd384a0faafb75cfed3e95d3892cbacf0db10f282c3b644771", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "edge cases for ephemeral key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc000800174f1ff5ea7fbc72b92f61e06556c26bab84c0b082dd6400ca1c1eb6d", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "85b079c62e1f5b0fd6841dfa16026e15b641f65e13a14042567166bb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "edge cases for ephemeral key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0126fdd5fccd0b5aa7fd5bb5b1308584b30556248cec80208a2fe962", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "8a834ff40e3fc9f9d412a481e18537ea799536c5520c6c7baaf12166", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "edge cases for ephemeral key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004fffff0000007fffffe000000ffffffc000001ffffff8000003ffffff20cfa23077acc9fbcb71339c65880cd0b966b8a9497e65abed17f0b5", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "a0887269766e6efcbc81d2b38f2d4638663f12377468a23421044188", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "edge cases for ephemeral key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ffffffff00000000ffffffff00000000ffffffff00000000ffffffff1c05ac2d4f10b69877c3243d51f887277b7bf735c326ab2f0d70da8c", + "private" : "2bc15cf3981f4e15bbad387b506df647989e5478160be862f8c26969", + "shared" : "c65d1911bc076a74588d8793ce7a0dcabf5793460cd2ebb02754a1be", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "point with coordinate y = 1", + "public" : "304e301006072a8648ce3d020106052b81040021033a00043b5889352ddf7468bf8c0729212aa1b2a3fcb1a844b8be91abb753d500000000000000000000000000000000000000000000000000000001", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "e973c413cc7dd34d4e3637522b2e033c20815412b67574a1f2f6bdd7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "point with coordinate y = 1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004bf09e268942555c73ce9e00d272c9b12bf0c3fc13a639acc791167f6b05df0023c9bd41d0b0c461854582d0601182213f2219d44ea44914a", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "ec856e807808a9c5332e886759e03f01be02437cfe0214613e4e7dc7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "point with coordinate y = 1", + "public" : "304e301006072a8648ce3d020106052b81040021033a00047b664cff2eef0a4f7dce24780113432f66feb25cb0931d033d63910f548ee514f6fdf1cb6f5709581c197d76a5eb218afaed19f205f4ab80", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "91d424e122c9c01720bbed6b53ec1b37a86996fa4fcf74bfd30f723d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a00045a2b3ec1053390550b587557712bcc0bf85654d23099420154877ec4138322ca02e5fceae870227a43ae8982b67276f6d8f1dd7e12692474", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "012879a1ff456acb8726455836bc4f504c1bd799a4d96f514b3730c6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004fc229bb1df3e11351e7e4224f68f40c0d0e194023c6e0840cd45ee5ca242112fbab5736e821dad26493e4006e2c6125342e7d9bc25272856", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "fd6e5edb54d7dd554f8747ec87b8031258fc0bf1d2404b64db4540d4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a000469a65f62d4159235801a246f2d13e45c8983a3362da480e7a51d42a65b7047abfc2a179d943bb196fede7ac3ad8a4fcacd4c4caa717b6b26", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "164e95bfa2a9c3a1f959feb88720bb7a37f988a08124639d8adf86df", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004dc68eb945528af0051cbf23e3eea43b2bc4c728976231e7031e63a2744ba65a4e1e34e8ec50cf7e8df4458582b16413ab83f568508c59037", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "b0ffd55fa112aa48eddc960db4a1200d406e144aac9e109ad9892b2d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a000481c89369d7be252920e08e2d6c6841b887efb4fc747db31dd1030b1919bf8ccb629b58fea6234e39812083fb0833a0c937e348eda22ea0c0", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "d6ab4567eff21277284be082d9e09eb08bb80685f4929dc3dca4b333", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a000451d830f792795409f1ee972d3b94289f59206fe09e12166920739a73d2f1831b26677901bfaf8323f82b81e1012d9d3f1c9296c59c97970f", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "b43de12912b40cbdd56e30fdfe9a2c24fb72687168c9cfe6b7476966", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ab63ce55145842149f99023f37a0a89b9fc4ae6a878fdae8caf31d17ffd0d55830eed46f8255f94b6dcf98a22f1ff26dabf773d556788881", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "588ee0af3bc60118a715325c6d56c850f73067dcb37b7596d0cfda5f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a00041d64535d54bfcccb38165acbfac01ae33db20e802c5687343cb21b7eb59d86f1892a974741925624477eef21f4e72fa04ee6ce35dfffe5f2", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "7219ef73ac9e47ac2e03dead23fa8382ae898e2415017cdeb4739f0f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004d9d78436a3f9c1fa20e8c2318e61e62b94623e23a0ab746c5ac0cbc38262bd66c17515d3048944dae43b2bd6dd9d7c7a0f7042de2d1001c6", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "267b069aac5d768a720acc62c92f20b786fc48c7da42f1f5677424ee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a000465eb3750c6401339caa69ebe6dec86dfc4d79bf657d68bbdd082c5a03eb81e85931352ff338ccbc3a1d332e2d8bc84342d516da06bef220f", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "bbdd4ac5890b9c0412e4ef3135f666e5b3ddb658ec837691e8129be8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004e92d3be1614555ae17a90647979fbb37468c55a1fff9e15f376d49994e470f515b7b3fe50cb55def16142df594c3e46d9d1354730778f9e8", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "f793ff0d14bd7690840c733162b589cd3413d8c41f4488b427da496f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a00043c92710c9a7f6f98bbec9d2a4fa617cc70e96bc96ecd4597e329143f4750a027c6972459c091ab02c0e2a3082fccec429a38d3596e7aff2b", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "56c703d4716239c954109b9b841db75b04a790f1f72aa966aece3494", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004568dfbfa42efc94ce207322e637b4c94f37a5668ad230e987a91d048dcadd244fc059cffab5fa8820a969353620e708e85bd5eec8a0c68ec", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "7823fe7eb642d50984fb32f911ef289419d85330c3398423d0eda05f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ec10837e495b644904dba58d8dd82133c905a285ae7c2a06d5ccaf6bf0fbf00d13e21a399dc95ae5524a1a37044193e94e3300259b70e058", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "f7014d38f460836a51075cce9667b56b8851ba19011c8b0274b74a4b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004bee2f9352f42ceeb3bf3109e90e6578d0bd4888458df7d179d746977e50e53503dee83eca1824a290566588fa3591645b1a2d56861bda760", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "777f99f2bdaa72a1185388465ddda1d059872ad043c7cb85b94e28bb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004546facbcaa8b551c51715a9add5edc3c8a66dcc47a6223f605614cf7af6d92f5bdebea738658a42c6231e53c08237ccf52f79399579b2dcc", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "a1db178b716e51e0fa46c1d74a2603005326bca7e81170d4b33a3d2a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a000423b1811fee891adb33c8bfee289964e92a9d3358daf975d0efb73e229a3332668b7d6da290a2edc941e8bd6f2e33745fc606756eddc013bb", + "private" : "00938f3dbe37135cdbdb9993a187a0e9b9f0def035fbc52ad59fc50421", + "shared" : "f455c8273416199505019861266ddb9bcde7bee3c3f15a98ee54607b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a000458f53d67332415fe5b4b81999f8332fb6dcdb965d96dbcbab0fac375f29efef7ab4d94bb2d25d25205eae29fe8d9a85b811114a50f6c6859", + "private" : "00c1781d86cac2c0af3fb50d54c554a67bd75d25ca796f0486e3fa84f9", + "shared" : "d3af1857aca1689514fcfee8d8c40b8637d40452ae35c404f9e67494", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004f2d6e58fcd3ed3f656a9bc687fe4c789ba9614d0359967bc0468eabfa1658a14ef0633f2485e29141e2c4a13bd328ec9bf6af4c7a774131b", + "private" : "00c1781d86cac2c0af3fb50d54c554a67bd75d25ca796f0486e3fa84f9", + "shared" : "933c385d5fadb57de53e4a5d385118fce830430703c3f585a5d4d0b5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a000402ca5d1b7638b7b88ad02176bd10ff1cfe8812a62f9769a6d62e0c6c787b3e3b2a063940911bf987fc38deebf542400b8bbd9dfeb7d90a8a", + "private" : "00c1781d86cac2c0af3fb50d54c554a67bd75d25ca796f0486e3fa84f9", + "shared" : "75aea79d99e5c7edaab0284443b548843371d1d9b55f2d73a1a9092f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004a394d8bf9b479ec3c7ac3fc6a631d01d57d338b9fb5a0ed6e5130e050cfc600cfb08e67727ac5a33345ec1d48d4a9a18516c2203acbd2667", + "private" : "00c1781d86cac2c0af3fb50d54c554a67bd75d25ca796f0486e3fa84f9", + "shared" : "8c1d0850691cda7523ffccf1cba44b4d472193e6a3bb0727e490a8b5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004642e26421e96fa88f956d098ac26f02f1d6faa80e460e701a3789a66c38dd95c6b33de8768c85cbe6879d0d77e29fe5a18b26a35cb60c0b6", + "private" : "00c1781d86cac2c0af3fb50d54c554a67bd75d25ca796f0486e3fa84f9", + "shared" : "50b9ed4d99e2f24e0096eaeded0b552cf8deff5ca8f976964ae47e92", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004f974d1cbbf4171d4773c3e84eab80bc3c6c2858dadcfbd11d64316905df36fbe345f28a3ef663125649474c6fc1ebe175c3865c4469e192b", + "private" : "00c1781d86cac2c0af3fb50d54c554a67bd75d25ca796f0486e3fa84f9", + "shared" : "5616ee3e63dfb424d329c2b9b50cf378bb77a8bd7e314a241b5942c7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a000455561db3cc8fb08a71654ee9573a1a36a44f0913ca8ad7582cfafbfc62b31e5e78be98ad8c8ceab4bb82e8efc0acb29f1a8d031ed044046c", + "private" : "00c1781d86cac2c0af3fb50d54c554a67bd75d25ca796f0486e3fa84f9", + "shared" : "b1da14507b5c05159e15f77d085c017acd89f158011357a97802855d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004a363bcb9bddd5de84a2f4433c039f7be3fce6057b0d3b4a3459e54a2ba32302871e7ba5c3dd7ec9b76946cdc702c15a8d9ec0f4a04e7afb6", + "private" : "00c1781d86cac2c0af3fb50d54c554a67bd75d25ca796f0486e3fa84f9", + "shared" : "2f1bd4a5a497481c4a21222320ff61f32674a95d540cc3f4f3ca5849", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a00043a656d0e25bce27282f256b121fbfcde0a180ccd7aa601a5929fc74002f89e45b4dcb873c56da5d1a28fbca33a126177b217a098e0952e62", + "private" : "00c1781d86cac2c0af3fb50d54c554a67bd75d25ca796f0486e3fa84f9", + "shared" : "8c807d65ba7b9fd3061dffef26c025a89524a26b942edd3a984fe51d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004bf5f49ba0086eec289b068b783438ef24b6f28130bb1ed969ef8b041f11b0de95f15edcd835f01bab1f5faaa1749c2ca4f16a7d99d916ff4", + "private" : "00c1781d86cac2c0af3fb50d54c554a67bd75d25ca796f0486e3fa84f9", + "shared" : "8fda76f4d124e6727f855e5f4921cc05c48e2a8ed0fee7c75d6a8047", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004a57232560d9d604655181f775859b0723d4e01a4c867844eb9d81dabb5d19507bbe9cda3346bad7c184daa432e7f794a5b9b8b8d4e55be3a", + "private" : "00c1781d86cac2c0af3fb50d54c554a67bd75d25ca796f0486e3fa84f9", + "shared" : "daf35bb7bf3a056bb62bb01ba00f581c107f64de85842b3a49bc2a4a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "edge case private key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "03", + "shared" : "e71f2157bfe37697ea5193d4732dcc6e5412fa9d38387eacd391c1c6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "edge case private key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "00ffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "fa2664717c7fa0161ec2c669b2c0986cdc20456a6e5406302bb53c77", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "edge case private key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "01000000000000000000000000000000000000000000000000000000", + "shared" : "af6e5ad34497bae0745f53ad78ce8b285d79f400d5c6e6a071f8e6bd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "edge case private key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "12fd302ff8c13c55a9c111f8bb6b0a13ecf88299c0ae3032ce2bcaff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "edge case private key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "0080000000000000000000000000000000000000000000000000000000", + "shared" : "73f1a395b842f1a6752ae417e2c3dc90cafc4476d1d861b7e68ad030", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "edge case private key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "00ffffffffffffffffffffffffffff16a2e0b8f03d13dd29455c5c2a3d", + "shared" : "b329c20ddb7c78ee4e622bb23a984c0d273ba34b6269f3d9e8f89f8e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "edge case private key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "00ffffffffffffffffffffffffffff16a2e0b8f03e13cd29455c5c2a3d", + "shared" : "6f48345209b290ffc5abbe754a201479e5d667a209468080d06197b4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "edge case private key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "00ffffffffffffffffffffffffffff16a2e0b8f03e13d529455c5c2a3d", + "shared" : "9f6e30c1c9dad42a153aacd4b49a8e5c721d085cd07b5d5aec244fc1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "edge case private key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29445c5c2a3d", + "shared" : "8cadfb19a80949e61bd5b829ad0e76d18a5bb2eeb9ed7fe2b901cecd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "edge case private key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29b7", + "shared" : "475fd96e0eb8cb8f100a5d7fe043a7a6851d1d611da2643a3c6ae708", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 76, + "comment" : "edge case private key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a37", + "shared" : "41ef931d669d1f57d8bb95a01a92321da74be8c6cbc3bbe0b2e73ebd", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 77, + "comment" : "edge case private key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a", + "shared" : "e71f2157bfe37697ea5193d4732dcc6e5412fa9d38387eacd391c1c6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "edge case private key", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004478e73465bb1183583f4064e67e8b4343af4a05d29dfc04eb60ac2302e5b9a3a1b32e4208d4c284ff26822e09c3a9a4683443e4a35175504", + "private" : "00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3b", + "shared" : "11ff15126411299cbd49e2b7542e69e91ef132e2551a16ecfebb23a3", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 79, + "comment" : "point is not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a00040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "point is not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a00040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "point is not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a000400000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "point is not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a000400000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000001", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "point is not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a00040000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "point is not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a00040000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "point is not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a000400000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffff000000000000000000000000", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "point is not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a000400000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffff000000000000000000000001", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "point is not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "point is not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000001", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "point is not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ffffffffffffffffffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "point is not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ffffffffffffffffffffffffffffffff000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000001", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "point is not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ffffffffffffffffffffffffffffffff00000000000000000000000100000000000000000000000000000000000000000000000000000000", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "point is not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ffffffffffffffffffffffffffffffff00000000000000000000000100000000000000000000000000000000000000000000000000000001", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "point is not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ffffffffffffffffffffffffffffffff000000000000000000000001ffffffffffffffffffffffffffffffff000000000000000000000000", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "point is not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004ffffffffffffffffffffffffffffffff000000000000000000000001ffffffffffffffffffffffffffffffff000000000000000000000001", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "", + "public" : "3015301006072a8648ce3d020106052b81040021030100", + "private" : "00c6cafb74e2a5b5ed4b991cbbfbc28c18f6df208b6d05e7a2e6668014", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "public point not on curve", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5d", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 97, + "comment" : "public point = (0,0)", + "public" : "304e301006072a8648ce3d020106052b81040021033a00040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 98, + "comment" : "order = -26959946667150639794667015087019625940457807714424391721682722368061", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021dff0000000000000000000000000000e95d1f470fc1ec22d6baa3a3d5c3020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 99, + "comment" : "order = 0", + "public" : "3081f73081b806072a8648ce3d02013081ac020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34020100020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 100, + "comment" : "order = 1", + "public" : "3081f73081b806072a8648ce3d02013081ac020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34020101020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 101, + "comment" : "order = 6277101735386680763835789423207665314073163949517624387909", + "public" : "3082010f3081d006072a8648ce3d02013081c4020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021900ffffffffffffffffffffffffffff16a2e0b8f03e13dd2945020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 102, + "comment" : "generator = (0,0)", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb40439040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 103, + "comment" : "generator not on curve", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e36021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 104, + "comment" : "cofactor = -1", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d0201ff033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "invalid", + "flags" : [ + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 105, + "comment" : "cofactor = 0", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020100033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "invalid", + "flags" : [ + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 106, + "comment" : "cofactor = 2", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020102033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 107, + "comment" : "cofactor = 26959946667150639794667015087019625940457807714424391721682722368061", + "public" : "3082012f3081f006072a8648ce3d02013081e4020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "invalid", + "flags" : [ + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 108, + "comment" : "cofactor = None", + "public" : "308201103081d106072a8648ce3d02013081c5020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cfffffffffffffffffffffffffffffffefffffffffffffffffffffffe041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 109, + "comment" : "modified prime", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00c123da0a46a971da9468161e61a5c71a02e6c9bdb3392f4016fb457b303c041c3edc25f5b9568e256b97e9e19e5a38e4fd1936424cc6d0bfe904ba83041cb4050a850c04b3abf54132565044b0b7d7bfd8ba270b39432355ffb4043904000000000000000000285145f31ae4d40000000000000000000003387edad63d1a600740ce66b6f04d67ed06ea1a75c16294336ed05b3fa3021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004000000000000000000285145f31ae4d40000000000000000000003387edad63d1a600740ce66b6f04d67ed06ea1a75c16294336ed05b3fa3", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "3de0a5036fcde544c72cbe33cedb8709549bc3b6a4d750ee0de4c80d", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 110, + "comment" : "using secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 111, + "comment" : "using secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 112, + "comment" : "a = 0", + "public" : "3081f83081b906072a8648ce3d02013081ad020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff0000000000000000000000013021040100041cd0d5e347a38ce5b6e1f47edddd8a223bca45d2015de76ec835a4df57043904a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004a10fb7bf22d299fc5bc43bd2d0e8da28af28ace8430bee28f9e5b57554275c0615d8d9a3011d7bc4c1c4cf4a834c8dc46f25b98854401a5b", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "9b992dad1c2b5dadd3b5aeb84b7a91fb6fe5f46e02ab2c7fa32696a7", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 113, + "comment" : "public key of order 3", + "public" : "308201133081d406072a8648ce3d02013081c8020101302806072a8648ce3d0101021d00ffffffffffffffffffffffffffffffff000000000000000000000001303c041cacb441c744c5af60905e78cd53b10f4aec9f30a302bb4ab0aeb53182041c2356bdcb3ae3e1c1e31741c951add1b2b0f87305d01021232aa22e0c043904bafbb7559c7335192c6f0cc5970e9c92a12e9af1a0cb5403d9bcc4eb7a545a1d9302be01456f17846a445ef45ff7c31710b08a6881dc11d1021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101033a0004bafbb7559c7335192c6f0cc5970e9c92a12e9af1a0cb5403d9bcc4eb85aba5e26cfd41feba90e87b95bba10aa0083ce8ef4f75977e23ee30", + "private" : "00d07629eb653a169ae3231ea1030faaf3e7f8ffe388030ee315d0a1d2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 114, + "comment" : "Public key uses wrong curve: secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ea36cf70fab75684eabe6569ce623db0deaa8c95f61c8be50b8b9f3eb7d4b9ec48d9e4814f4cb1c286589eaaa990d3f3238b2d6d6be964abfad964824b653376", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "Public key uses wrong curve: secp384r1", + "public" : "3076301006072a8648ce3d020106052b81040022036200044b2470ad3d13269c10a17d222ebdffbd61fb04488db1b1d7caef8d4988b7bb8ba6d81857a05b255232b9e37a30e328bb9d9c42d86096f2bcee3d258cfe208d2fd03cbd5ccc6a3bb8ce4b0efa5b059b4afbd0377aa6e274721a57efe8ee85d86a", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "Public key uses wrong curve: secp521r1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004012841a2260f0f1f424865fef275374779bf0355720223f8ec6a9ba767b1603b492f58a6bba1705d882257bc6be1935de4411c5f1fdad44ec65ba8b97ce0e73e1ac90006937832a602147e37c1a42ca2a63629ffc9a35b31bfacb38c6242b42916125f7446b45c718f797259bc3011cb71e868560b331cf7d01139a0643443f9fd7306c1", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "Public key uses wrong curve: secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004c2199fecf75648c0e952dff143821fa4012b28f90435ce6ee54653687f969a76092a3844e17d478a594f43b28cc10a5c553b4f64906121031c3a79299c70dbd6", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "Public key uses wrong curve: secp224k1", + "public" : "304e301006072a8648ce3d020106052b81040020033a000473e833aee75c67a34cc497fd01275372d09e3e8f2ff054c8c29e405ef3e35d699190a448079c058022512fa9976e504e298baee340d5648b", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "Public key uses wrong curve: brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a00046caa3d6d86f792df7b29e41eb4203150f60f4fca10f57d0b2454abfb201f9f7e6dcbb92bdcfb9240dc86bcaeaf157c77bca22b2ec86ee8d6", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "Public key uses wrong curve: brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200042750180012c3ba7489517d428e4826784e50b50ac42ef7991c61a396c03a52da5e74908ae8a89627a7c15e554b105b0ebaeebcfed10e3ea60223d0a8bc3b36ab", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "Public key uses wrong curve: brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b2403030208010109035200045b523d3a8f20f6a569c6951e0b8de48d89e7549a184e8506820421c3e404473692cd248d7480843b911d87a87e401112fce0d3d2c36978cf6dd7f1d93bfaebe0827d4bf4006006d3202e842126fe1b68", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "Public key uses wrong curve: brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b03620004449607c76c6dc7334c269a0ebab5beec83b6c263377ce06ef5c276f45a9916eff85f50438f5f32ced0210a6c414fe5e242c7c1070823f5395b35965bda6758acf84725f11ea836dda7d391fee91342026645241853224a437a6fb74e4cdc871f", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "Public key uses wrong curve: brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000463e7a491240848e4f53ea5fb857d428c493053193e4b0b4f995ac8bf4c56276a507870131a384aa7e236c64cd7a049a1b37e40ad00c3b8a920dcbad6531616356ce1b6e6d96a7d1b693e25e5abd83ab560a3d764bcd49ec98a1b49421163bd5fc5a625f44c91eb4c2984d5a2e51e816ebdee8fbe08364bb14b7ac876990e64d9", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "Public key uses wrong curve: brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00047c592ecb8908355d1ebf8d59b3619275dbe3666209b72ced6a3c88740456ce61d6a84e0542d7cd10dd8804afb8c784d5dffd9480d8cfdc95", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "Public key uses wrong curve: brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b240303020801010803420004746226a3e005c37ede51828d3375ef91ebd0ff719a380af69d7dfd131b42a3e8917d4a4d573872935a74d1040f1c47d25d6b26f4156cccdcdc11833b9cde433a", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "Public key uses wrong curve: brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a035200043298b36825c7bd90ab5157b913d40bbfd732a0de0557e02a2c65a0c223e9a65d62c32462040dd6fe578103023c831caff122c1ed4b8ff7373fa2f08d11c9f4c7f85f81802262ffed9bb82cb6d92eed2d", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "Public key uses wrong curve: brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200043af2849b981f7e5e6ab936e6abb4f206c1fd5561998df8008bfe98d84173c9f2301cdbd5bffc569c0b5a57ce2a8f4d640f1816475fc6043baa8e5a3453bf327b54cb29c7e54a5f31348969aa94615094dbcd1a8e5c2d630465e45fc556c02194", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "Public key uses wrong curve: brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e038182000453d2506047e72af6d98558e1633ecb7e6a05c37861cd3289455cf41bfbf1703f2e9a83052b8eca7d84cba2f001abd8b978f68b69ed6bd874755c44d347fe302c5760b2078c56b24ebd0dcd99f26b8f8a23044b3767a3d2a306587687a7b00668974674edbf18c3db2f3473a97ee77065fdcdd1a9aa053716a4c504f3d18b9170", + "private" : "2ddd06cb77ca2eae5266a34a107b49e56ffb4c2d3952112da2df90fc", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "invalid public key", + "public" : "3032301006072a8648ce3d020106052b81040021031e00020ca753db5ddeca474241f8d2dafc0844343fd0e37eded2f0192d51b2", + "private" : "00fc28a0ca0f8e36b0d4f71421845135a22aef543b9fddf8c775b2d18f", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 130, + "comment" : "long form encoding of length of sequence", + "public" : "30814e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 131, + "comment" : "long form encoding of length of sequence", + "public" : "304f30811006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 132, + "comment" : "length of sequence contains leading 0", + "public" : "3082004e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 133, + "comment" : "length of sequence contains leading 0", + "public" : "30503082001006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 134, + "comment" : "wrong length of sequence", + "public" : "304f301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 135, + "comment" : "wrong length of sequence", + "public" : "304d301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 136, + "comment" : "wrong length of sequence", + "public" : "304e301106072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 137, + "comment" : "wrong length of sequence", + "public" : "304e300f06072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 138, + "comment" : "uint32 overflow in length of sequence", + "public" : "3085010000004e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 139, + "comment" : "uint32 overflow in length of sequence", + "public" : "30533085010000001006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 140, + "comment" : "uint64 overflow in length of sequence", + "public" : "308901000000000000004e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 141, + "comment" : "uint64 overflow in length of sequence", + "public" : "3057308901000000000000001006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 142, + "comment" : "length of sequence = 2**31 - 1", + "public" : "30847fffffff301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 143, + "comment" : "length of sequence = 2**31 - 1", + "public" : "305230847fffffff06072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 144, + "comment" : "length of sequence = 2**32 - 1", + "public" : "3084ffffffff301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 145, + "comment" : "length of sequence = 2**32 - 1", + "public" : "30523084ffffffff06072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 146, + "comment" : "length of sequence = 2**40 - 1", + "public" : "3085ffffffffff301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 147, + "comment" : "length of sequence = 2**40 - 1", + "public" : "30533085ffffffffff06072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 148, + "comment" : "length of sequence = 2**64 - 1", + "public" : "3088ffffffffffffffff301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 149, + "comment" : "length of sequence = 2**64 - 1", + "public" : "30563088ffffffffffffffff06072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 150, + "comment" : "incorrect length of sequence", + "public" : "30ff301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 151, + "comment" : "incorrect length of sequence", + "public" : "304e30ff06072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 152, + "comment" : "indefinite length without termination", + "public" : "3080301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 153, + "comment" : "indefinite length without termination", + "public" : "304e308006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 154, + "comment" : "indefinite length without termination", + "public" : "304e301006802a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 155, + "comment" : "indefinite length without termination", + "public" : "304e301006072a8648ce3d020106802b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 156, + "comment" : "indefinite length without termination", + "public" : "304e301006072a8648ce3d020106052b810400210380000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 157, + "comment" : "removing sequence", + "public" : "", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 158, + "comment" : "removing sequence", + "public" : "303c033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 159, + "comment" : "lonely sequence tag", + "public" : "30", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 160, + "comment" : "lonely sequence tag", + "public" : "303d30033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 161, + "comment" : "appending 0's to sequence", + "public" : "3050301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da620000", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 162, + "comment" : "appending 0's to sequence", + "public" : "3050301206072a8648ce3d020106052b810400210000033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 163, + "comment" : "prepending 0's to sequence", + "public" : "30500000301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 164, + "comment" : "prepending 0's to sequence", + "public" : "30503012000006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 165, + "comment" : "appending unused 0's to sequence", + "public" : "304e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da620000", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 166, + "comment" : "appending unused 0's to sequence", + "public" : "3050301006072a8648ce3d020106052b810400210000033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 167, + "comment" : "appending null value to sequence", + "public" : "3050301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da620500", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 168, + "comment" : "appending null value to sequence", + "public" : "3050301206072a8648ce3d020106052b810400210500033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 169, + "comment" : "including garbage", + "public" : "3053498177304e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 170, + "comment" : "including garbage", + "public" : "30522500304e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 171, + "comment" : "including garbage", + "public" : "3050304e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da620004deadbeef", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 172, + "comment" : "including garbage", + "public" : "30533015498177301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 173, + "comment" : "including garbage", + "public" : "305230142500301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 174, + "comment" : "including garbage", + "public" : "30563012301006072a8648ce3d020106052b810400210004deadbeef033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 175, + "comment" : "including garbage", + "public" : "30533015260c49817706072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 176, + "comment" : "including garbage", + "public" : "30523014260b250006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 177, + "comment" : "including garbage", + "public" : "30563018260906072a8648ce3d02010004deadbeef06052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 178, + "comment" : "including garbage", + "public" : "3053301506072a8648ce3d0201260a49817706052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 179, + "comment" : "including garbage", + "public" : "3052301406072a8648ce3d02012609250006052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 180, + "comment" : "including garbage", + "public" : "3056301806072a8648ce3d0201260706052b810400210004deadbeef033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 181, + "comment" : "including garbage", + "public" : "3053301006072a8648ce3d020106052b81040021233f498177033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 182, + "comment" : "including garbage", + "public" : "3052301006072a8648ce3d020106052b81040021233e2500033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 183, + "comment" : "including garbage", + "public" : "3056301006072a8648ce3d020106052b81040021233c033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da620004deadbeef", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 184, + "comment" : "including undefined tags", + "public" : "3056aa00bb00cd00304e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 185, + "comment" : "including undefined tags", + "public" : "3054aa02aabb304e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 186, + "comment" : "including undefined tags", + "public" : "30563018aa00bb00cd00301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 187, + "comment" : "including undefined tags", + "public" : "30543016aa02aabb301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 188, + "comment" : "including undefined tags", + "public" : "30563018260faa00bb00cd0006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 189, + "comment" : "including undefined tags", + "public" : "30543016260daa02aabb06072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 190, + "comment" : "including undefined tags", + "public" : "3056301806072a8648ce3d0201260daa00bb00cd0006052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 191, + "comment" : "including undefined tags", + "public" : "3054301606072a8648ce3d0201260baa02aabb06052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 192, + "comment" : "including undefined tags", + "public" : "3056301006072a8648ce3d020106052b810400212342aa00bb00cd00033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 193, + "comment" : "including undefined tags", + "public" : "3054301006072a8648ce3d020106052b810400212340aa02aabb033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 194, + "comment" : "truncated length of sequence", + "public" : "3081", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 195, + "comment" : "truncated length of sequence", + "public" : "303e3081033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 196, + "comment" : "Replacing sequence with NULL", + "public" : "0500", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 197, + "comment" : "Replacing sequence with NULL", + "public" : "303e0500033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 198, + "comment" : "changing tag value of sequence", + "public" : "2e4e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 199, + "comment" : "changing tag value of sequence", + "public" : "2f4e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 200, + "comment" : "changing tag value of sequence", + "public" : "314e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 201, + "comment" : "changing tag value of sequence", + "public" : "324e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 202, + "comment" : "changing tag value of sequence", + "public" : "ff4e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 203, + "comment" : "changing tag value of sequence", + "public" : "304e2e1006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 204, + "comment" : "changing tag value of sequence", + "public" : "304e2f1006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 205, + "comment" : "changing tag value of sequence", + "public" : "304e311006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 206, + "comment" : "changing tag value of sequence", + "public" : "304e321006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 207, + "comment" : "changing tag value of sequence", + "public" : "304eff1006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 208, + "comment" : "dropping value of sequence", + "public" : "3000", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 209, + "comment" : "dropping value of sequence", + "public" : "303e3000033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 210, + "comment" : "truncated sequence", + "public" : "304d301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 211, + "comment" : "truncated sequence", + "public" : "304d1006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 212, + "comment" : "truncated sequence", + "public" : "304d300f06072a8648ce3d020106052b810400033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 213, + "comment" : "truncated sequence", + "public" : "304d300f072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 214, + "comment" : "indefinite length", + "public" : "3080301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da620000", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 215, + "comment" : "indefinite length", + "public" : "3050308006072a8648ce3d020106052b810400210000033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 216, + "comment" : "indefinite length with truncated delimiter", + "public" : "3080301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da6200", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 217, + "comment" : "indefinite length with truncated delimiter", + "public" : "304f308006072a8648ce3d020106052b8104002100033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 218, + "comment" : "indefinite length with additional element", + "public" : "3080301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da6205000000", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 219, + "comment" : "indefinite length with additional element", + "public" : "3052308006072a8648ce3d020106052b8104002105000000033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 220, + "comment" : "indefinite length with truncated element", + "public" : "3080301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62060811220000", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 221, + "comment" : "indefinite length with truncated element", + "public" : "3054308006072a8648ce3d020106052b81040021060811220000033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 222, + "comment" : "indefinite length with garbage", + "public" : "3080301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da620000fe02beef", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 223, + "comment" : "indefinite length with garbage", + "public" : "3054308006072a8648ce3d020106052b810400210000fe02beef033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 224, + "comment" : "indefinite length with nonempty EOC", + "public" : "3080301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da620002beef", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 225, + "comment" : "indefinite length with nonempty EOC", + "public" : "3052308006072a8648ce3d020106052b810400210002beef033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 226, + "comment" : "prepend empty sequence", + "public" : "30503000301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 227, + "comment" : "prepend empty sequence", + "public" : "30503012300006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 228, + "comment" : "append empty sequence", + "public" : "3050301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da623000", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 229, + "comment" : "append empty sequence", + "public" : "3050301206072a8648ce3d020106052b810400213000033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 230, + "comment" : "append garbage with high tag number", + "public" : "3051301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62bf7f00", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 231, + "comment" : "append garbage with high tag number", + "public" : "3051301306072a8648ce3d020106052b81040021bf7f00033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 232, + "comment" : "sequence of sequence", + "public" : "3050304e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 233, + "comment" : "sequence of sequence", + "public" : "30503012301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 234, + "comment" : "truncated sequence: removed last 1 elements", + "public" : "3012301006072a8648ce3d020106052b81040021", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 235, + "comment" : "truncated sequence: removed last 1 elements", + "public" : "3047300906072a8648ce3d0201033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 236, + "comment" : "repeating element in sequence", + "public" : "30818a301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 237, + "comment" : "repeating element in sequence", + "public" : "3055301706072a8648ce3d020106052b8104002106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 238, + "comment" : "long form encoding of length of oid", + "public" : "304f30110681072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 239, + "comment" : "long form encoding of length of oid", + "public" : "304f301106072a8648ce3d02010681052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 240, + "comment" : "length of oid contains leading 0", + "public" : "30503012068200072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 241, + "comment" : "length of oid contains leading 0", + "public" : "3050301206072a8648ce3d0201068200052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 242, + "comment" : "wrong length of oid", + "public" : "304e301006082a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 243, + "comment" : "wrong length of oid", + "public" : "304e301006062a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 244, + "comment" : "wrong length of oid", + "public" : "304e301006072a8648ce3d020106062b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 245, + "comment" : "wrong length of oid", + "public" : "304e301006072a8648ce3d020106042b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 246, + "comment" : "uint32 overflow in length of oid", + "public" : "30533015068501000000072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 247, + "comment" : "uint32 overflow in length of oid", + "public" : "3053301506072a8648ce3d0201068501000000052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 248, + "comment" : "uint64 overflow in length of oid", + "public" : "3057301906890100000000000000072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 249, + "comment" : "uint64 overflow in length of oid", + "public" : "3057301906072a8648ce3d020106890100000000000000052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 250, + "comment" : "length of oid = 2**31 - 1", + "public" : "3052301406847fffffff2a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 251, + "comment" : "length of oid = 2**31 - 1", + "public" : "3052301406072a8648ce3d020106847fffffff2b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 252, + "comment" : "length of oid = 2**32 - 1", + "public" : "305230140684ffffffff2a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 253, + "comment" : "length of oid = 2**32 - 1", + "public" : "3052301406072a8648ce3d02010684ffffffff2b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 254, + "comment" : "length of oid = 2**40 - 1", + "public" : "305330150685ffffffffff2a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 255, + "comment" : "length of oid = 2**40 - 1", + "public" : "3053301506072a8648ce3d02010685ffffffffff2b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 256, + "comment" : "length of oid = 2**64 - 1", + "public" : "305630180688ffffffffffffffff2a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 257, + "comment" : "length of oid = 2**64 - 1", + "public" : "3056301806072a8648ce3d02010688ffffffffffffffff2b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 258, + "comment" : "incorrect length of oid", + "public" : "304e301006ff2a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 259, + "comment" : "incorrect length of oid", + "public" : "304e301006072a8648ce3d020106ff2b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 260, + "comment" : "removing oid", + "public" : "3045300706052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 261, + "comment" : "lonely oid tag", + "public" : "304630080606052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 262, + "comment" : "lonely oid tag", + "public" : "3048300a06072a8648ce3d020106033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 263, + "comment" : "appending 0's to oid", + "public" : "3050301206092a8648ce3d0201000006052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 264, + "comment" : "appending 0's to oid", + "public" : "3050301206072a8648ce3d020106072b810400210000033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 265, + "comment" : "prepending 0's to oid", + "public" : "30503012060900002a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 266, + "comment" : "prepending 0's to oid", + "public" : "3050301206072a8648ce3d0201060700002b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 267, + "comment" : "appending unused 0's to oid", + "public" : "3050301206072a8648ce3d0201000006052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 268, + "comment" : "appending null value to oid", + "public" : "3050301206092a8648ce3d0201050006052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 269, + "comment" : "appending null value to oid", + "public" : "3050301206072a8648ce3d020106072b810400210500033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 270, + "comment" : "truncated length of oid", + "public" : "30473009068106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 271, + "comment" : "truncated length of oid", + "public" : "3049300b06072a8648ce3d02010681033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 272, + "comment" : "Replacing oid with NULL", + "public" : "30473009050006052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 273, + "comment" : "Replacing oid with NULL", + "public" : "3049300b06072a8648ce3d02010500033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 274, + "comment" : "changing tag value of oid", + "public" : "304e301004072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 275, + "comment" : "changing tag value of oid", + "public" : "304e301005072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 276, + "comment" : "changing tag value of oid", + "public" : "304e301007072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 277, + "comment" : "changing tag value of oid", + "public" : "304e301008072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 278, + "comment" : "changing tag value of oid", + "public" : "304e3010ff072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 279, + "comment" : "changing tag value of oid", + "public" : "304e301006072a8648ce3d020104052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 280, + "comment" : "changing tag value of oid", + "public" : "304e301006072a8648ce3d020105052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 281, + "comment" : "changing tag value of oid", + "public" : "304e301006072a8648ce3d020107052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 282, + "comment" : "changing tag value of oid", + "public" : "304e301006072a8648ce3d020108052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 283, + "comment" : "changing tag value of oid", + "public" : "304e301006072a8648ce3d0201ff052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 284, + "comment" : "dropping value of oid", + "public" : "30473009060006052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 285, + "comment" : "dropping value of oid", + "public" : "3049300b06072a8648ce3d02010600033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 286, + "comment" : "modify first byte of oid", + "public" : "304e30100607288648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 287, + "comment" : "modify first byte of oid", + "public" : "304e301006072a8648ce3d020106052981040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 288, + "comment" : "modify last byte of oid", + "public" : "304e301006072a8648ce3d028106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 289, + "comment" : "modify last byte of oid", + "public" : "304e301006072a8648ce3d020106052b810400a1033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 290, + "comment" : "truncated oid", + "public" : "304d300f06062a8648ce3d0206052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 291, + "comment" : "truncated oid", + "public" : "304d300f06068648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 292, + "comment" : "truncated oid", + "public" : "304d300f06072a8648ce3d020106042b810400033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 293, + "comment" : "truncated oid", + "public" : "304d300f06072a8648ce3d0201060481040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 294, + "comment" : "wrong oid", + "public" : "304c300e06052b0e03021a06052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 295, + "comment" : "wrong oid", + "public" : "30503012060960864801650304020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 296, + "comment" : "wrong oid", + "public" : "304e301006072a8648ce3d020106052b0e03021a033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 297, + "comment" : "wrong oid", + "public" : "3052301406072a8648ce3d02010609608648016503040201033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 298, + "comment" : "longer oid", + "public" : "304f301106082a8648ce3d02010106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 299, + "comment" : "longer oid", + "public" : "304f301106072a8648ce3d020106062b8104002101033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 300, + "comment" : "oid with modified node", + "public" : "304e301006072a8648ce3d021106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 301, + "comment" : "oid with modified node", + "public" : "30523014060b2a8648ce3d02888080800106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 302, + "comment" : "oid with modified node", + "public" : "304e301006072a8648ce3d020106052b81040031033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 303, + "comment" : "oid with modified node", + "public" : "3052301406072a8648ce3d020106092b8104008880808021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 304, + "comment" : "large integer in oid", + "public" : "3057301906102a8648ce3d028280808080808080800106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 305, + "comment" : "large integer in oid", + "public" : "3057301906072a8648ce3d0201060e2b81040082808080808080808021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 306, + "comment" : "oid with invalid node", + "public" : "304f301106082a8648ce3d0201e006052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 307, + "comment" : "oid with invalid node", + "public" : "304f301106082a808648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 308, + "comment" : "oid with invalid node", + "public" : "304f301106072a8648ce3d020106062b81040021e0033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 309, + "comment" : "oid with invalid node", + "public" : "304f301106072a8648ce3d020106062b8081040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 310, + "comment" : "long form encoding of length of bit string", + "public" : "304f301006072a8648ce3d020106052b8104002103813a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 311, + "comment" : "length of bit string contains leading 0", + "public" : "3050301006072a8648ce3d020106052b810400210382003a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 312, + "comment" : "wrong length of bit string", + "public" : "304e301006072a8648ce3d020106052b81040021033b000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 313, + "comment" : "wrong length of bit string", + "public" : "304e301006072a8648ce3d020106052b810400210339000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 314, + "comment" : "uint32 overflow in length of bit string", + "public" : "3053301006072a8648ce3d020106052b810400210385010000003a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 315, + "comment" : "uint64 overflow in length of bit string", + "public" : "3057301006072a8648ce3d020106052b81040021038901000000000000003a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 316, + "comment" : "length of bit string = 2**31 - 1", + "public" : "3052301006072a8648ce3d020106052b8104002103847fffffff000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 317, + "comment" : "length of bit string = 2**32 - 1", + "public" : "3052301006072a8648ce3d020106052b810400210384ffffffff000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 318, + "comment" : "length of bit string = 2**40 - 1", + "public" : "3053301006072a8648ce3d020106052b810400210385ffffffffff000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 319, + "comment" : "length of bit string = 2**64 - 1", + "public" : "3056301006072a8648ce3d020106052b810400210388ffffffffffffffff000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 320, + "comment" : "incorrect length of bit string", + "public" : "304e301006072a8648ce3d020106052b8104002103ff000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 321, + "comment" : "lonely bit string tag", + "public" : "3013301006072a8648ce3d020106052b8104002103", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 322, + "comment" : "appending 0's to bit string", + "public" : "3050301006072a8648ce3d020106052b81040021033c000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da620000", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 323, + "comment" : "prepending 0's to bit string", + "public" : "3050301006072a8648ce3d020106052b81040021033c0000000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 324, + "comment" : "appending null value to bit string", + "public" : "3050301006072a8648ce3d020106052b81040021033c000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da620500", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 325, + "comment" : "truncated length of bit string", + "public" : "3014301006072a8648ce3d020106052b810400210381", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 326, + "comment" : "Replacing bit string with NULL", + "public" : "3014301006072a8648ce3d020106052b810400210500", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 327, + "comment" : "changing tag value of bit string", + "public" : "304e301006072a8648ce3d020106052b81040021013a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 328, + "comment" : "changing tag value of bit string", + "public" : "304e301006072a8648ce3d020106052b81040021023a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 329, + "comment" : "changing tag value of bit string", + "public" : "304e301006072a8648ce3d020106052b81040021043a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 330, + "comment" : "changing tag value of bit string", + "public" : "304e301006072a8648ce3d020106052b81040021053a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 331, + "comment" : "changing tag value of bit string", + "public" : "304e301006072a8648ce3d020106052b81040021ff3a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 332, + "comment" : "dropping value of bit string", + "public" : "3014301006072a8648ce3d020106052b810400210300", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 333, + "comment" : "modify first byte of bit string", + "public" : "304e301006072a8648ce3d020106052b81040021033a020486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 334, + "comment" : "modify last byte of bit string", + "public" : "304e301006072a8648ce3d020106052b81040021033a000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3dae2", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 335, + "comment" : "truncated bit string", + "public" : "304d301006072a8648ce3d020106052b810400210339000486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 336, + "comment" : "truncated bit string", + "public" : "304d301006072a8648ce3d020106052b8104002103390486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 337, + "comment" : "declaring bits as unused in bit string", + "public" : "304e301006072a8648ce3d020106052b81040021033a010486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 338, + "comment" : "unused bits in bit string", + "public" : "3052301006072a8648ce3d020106052b81040021033e200486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da6201020304", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 339, + "comment" : "unused bits in empty bit-string", + "public" : "3015301006072a8648ce3d020106052b81040021030103", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 340, + "comment" : "128 unused bits", + "public" : "304e301006072a8648ce3d020106052b81040021033a800486e2f72bccd974a3f1a4fc2cdcf22043eaf8be047de6be726b62001fda6f50f6df0b51bee99195d8a1a1c97e59e72fa4fcf8c1d21cb3da62", + "private" : "00a1b9444f59642d428e2f299055004165a34c3b8796c5057ae8a1a572", + "shared" : "85a70fc4dfc8509fb9ba1cfcf1879443e2ce176d794228029b10da63", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + } + ] + } + ] +} diff --git a/tests/ecdh_secp256r1_test.json b/tests/ecdh_secp256r1_test.json index 44d6e1e8..c8b8327a 100644 --- a/tests/ecdh_secp256r1_test.json +++ b/tests/ecdh_secp256r1_test.json @@ -1,6 +1,14 @@ { "algorithm" : "ECDH", - "generatorVersion" : "0.4.12", + "generatorVersion" : "0.8r12", + "numberOfTests" : 460, + "header" : [ + "Test vectors of type EcdhTest are intended for", + "testing an ECDH implementations using X509 encoded", + "public keys and integers for private keys.", + "Test vectors of this format are useful for testing", + "Java providers." + ], "notes" : { "AddSubChain" : "The private key has a special value. Implementations using addition subtraction chains for the point multiplication may get the point at infinity as an intermediate result. See CVE_2017_10176", "CompressedPoint" : "The point in the public key is compressed. Not every library supports points in compressed format.", @@ -12,19 +20,18 @@ "WeakPublicKey" : "The vector contains a weak public key. The curve is not a named curve, the public key point has order 3 and has been chosen to be on the same curve as the private key. This test vector is used to check ECC implementations for missing steps in the verification of the public key.", "WrongOrder" : "The order of the public key has been modified. If this order is used in a cryptographic primitive instead of the correct order then private keys may leak. E.g. ECDHC in BC 1.52 suffered from this." }, - "numberOfTests" : 340, - "header" : [], + "schema" : "ecdh_test_schema.json", "testGroups" : [ { "curve" : "secp256r1", "encoding" : "asn", - "type" : "ECHDComp", + "type" : "EcdhTest", "tests" : [ { "tcId" : 1, "comment" : "normal case", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000462d5bd3372af75fe85a040715d0f502428e07046868b0bfdfa61d731afe44f26ac333a93a9e70a81cd5a95b5bf8d13990eb741c8c38872b4a07d275a014e30cf", - "private" : "612465c89a023ab17855b0a6bcebfd3febb53aef84138647b5352e02c10c346", + "private" : "0612465c89a023ab17855b0a6bcebfd3febb53aef84138647b5352e02c10c346", "shared" : "53020d908b0219328b658b525f26780e3ae12bcd952bb25a93bc0895e1714285", "result" : "valid", "flags" : [] @@ -33,7 +40,7 @@ "tcId" : 2, "comment" : "compressed public key", "public" : "3039301306072a8648ce3d020106082a8648ce3d0301070322000362d5bd3372af75fe85a040715d0f502428e07046868b0bfdfa61d731afe44f26", - "private" : "612465c89a023ab17855b0a6bcebfd3febb53aef84138647b5352e02c10c346", + "private" : "0612465c89a023ab17855b0a6bcebfd3febb53aef84138647b5352e02c10c346", "shared" : "53020d908b0219328b658b525f26780e3ae12bcd952bb25a93bc0895e1714285", "result" : "acceptable", "flags" : [ @@ -546,33 +553,1086 @@ }, { "tcId" : 59, + "comment" : "point with coordinate x = 0", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004000000000000000000000000000000000000000000000000000000000000000066485c780e2f83d72433bd5d84a06bb6541c2af31dae871728bf856a174f93f4", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "d11c640b4382e60ec8d254ee76f09b8fac57651ab73b6dd3fdc935a61564a3e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "point with coordinate x = 0", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004100121f1a09443851c9aa2ab6ee6440e2ac5e1be648274bd5d26c12fb3ba3f7f032a1c219fa1457cb20588297e0513cfd4901f9a95414f7e914f9179f38567a6", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "90e712e2afd14171c19467a2bfe7abf1c477d1f40f6675f00e622fd5604fa16a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "point with coordinate x = 0", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cad02ab537c80831ccdd395129fc4bfe4a89ae0c866f6619a3e14146d3691694689d477065b40f140ed87b37ad041e28229b0f79a6b3c992689954c97f7336d0", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "159583103d83f63538bd4e203607d7348990bb7f847ffbc9e5e509c7e34d392c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004abd12eed4d654baa7d968633770f4a582f173d6633906000ed8acf6233c6365f0912f30bb98e7cb525890d5ea1e217149d52a6c59f7802a9f307e80d2a9fee3a", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "546a2dfadb1d60140becac2dc2e62d20c789037755ad5a49e37e48f2ca1b7680", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a562c1ad9a72217df00147c7d2ceafc65a1620a1469c947e14fe43003ac5371b7ad1d33c01f0eb92b779ed6e460d0334447075a3cf66b2ffbdae31b438df6d7b", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "e5859c7811c5c3aca6c236ab499ccad10301c7c5ee913ce91bb66428cde11e4d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048cdbebe9d07d2ebc4e41b1d72a9bac2974cfc4cf738d8b6de71a40ede9920d88dc2439ee0003fbde7b0a3ae41710c64b17b08a8841e97a390e482c9768fe01ea", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "65754ab459a10471af00943f414f28de1bc37968b097ad2845fe111420855008", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f0cd7cd8334678308cfeb785a68a1504a91418d4441c4d4c740c57488b9aafb079d8a8d29973eb502267eccf6eda326626fc6e025d532b85e9f711f8ce6971bb", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "8631fedee6ceb3386ac42edf322c188824893d267d6108f0cf5de6964b88331b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048ad0af23b90e0341b4e2a5a963c8522fe011ace19b1b8610cbe7927a17a7249736b87ab9907289a23a0fb20ca4be42d421fe38d35af09d79cbe6e6a4e95a1a8b", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "68c58599c123be6d37d343bd41b11cecc5f84b2635661163656f76d7fb04b426", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000459c9cc2d7297ddb0be6304c94cebf42d813e970c50f45287753b8e9cb0c6db45f571d986990897851fc8e1db67c99759e8979c3d9ddfd02f633cf1ea5b6c48ab", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "b58d00525c4c4b4f46562852c15ce2e48dbe23a3be37541e048446eff5152ec6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e97080da7263a29c3072a65178b7b31587a5dffc19754c561e32fc53199234f04e0b9b70c97b60e940d5629f2266d1a8e242deb71eb7f0b2b2da2e3044738ab0", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "4baa01c211af8f94aca89548902a71f7b53f7814bbceb3d4bef31b376e34b476", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000444f600da7160b975a0232cb6a4a9e72803fd77caac84352039ce9f4a67a1da77626045599381e599eb9cd03f282e267b8cfd3ba98dabbb0f29ab1c0944270f3f", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "e19fe9d1294cca94a6388825249e6b37931a231eb917cfecb292792d0c18f1b8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000471e3e9be0e0ee4449a19d2ef7919266814a0fafd04fb677edc32656e6a46e4d2bc5f404c5b54f03e294be22e8820a71b4d4ac04a708e13cd71fdb0041e7e9698", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "ddc1f4663b928add06b1e57c48db98ea08c4d33c3c2106371407f3848a9d53f7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000427b693610154d5b7f08094e46ff2a2ac1c01d3cd826e3208e5254436ed279960f2364e3a604f3b592e19262a1b22b1a148e38cd82c9e54f108ef8f833683f8b4", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "91dfa95ed1eacbea419156471a8ddbb6cb93dd456433e18633d26817611b9c64", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004c32a52af6dac369b6a499a49d3e38e7c9534bb9139f57d4984b1d3c04ab8220653cdc2daefac83cf43c0d64604e5f9d85b55dde62b692cd36af99ebff4140c39", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "9f91a9633daa4c56465e9fbef4431e13041f68910fb5ba89f8da9381d68a0dfe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046f4e2f72f32ae66f1f4610966004c436aa0d90b7df07ce9c4aca52b02d46b4d0c6a3ec76bf321b7fe5203cf3d66e2d52e3ee0495ec766d579a4511175e01bc4d", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "014ae81442f8cb6df58ff41e6db203db40ea951b91bebf86d42cda7be33fea64", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042e065975df642fcfdafe2fa5affc18b2c68371796f9d963d89c4f5ac5ccea28b990f31522fbb265c3f4d5c4bb82ebf5ddff5a8ea588db4d282acdca7a6ccf428", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "78e81e8573c3ae6089df7db1fb29d7be12dc11f15bb25bff2af802e15ddc136e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e1331eee03c50cc2b90944ddfc0d3a7dd8185e6c21c75fa92a0c14b0f1949ac9154d783f4547dcf5508bbd86c3dd8c3b17b61989f93db5490ec02a46a1005c2c", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "ed67195a272c63c50205abf27439291134ffa1e8ec597f3b302716d93632e98d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e0c56d486e9c01163ed6c3ff25de3cdf5744dbf9e0e00bdcf19965df4ba1f311bd5e44430665823d8c0b34ebec0a6aab5ea96cf239de214fd011e6f9ec501dd4", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "50774347848828eeb6230f497cd181f8c57fbd18ffbf8328cd008321a1c37c43", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004885ead6c074f8d751a767e918c4e89210a587c4b19d42244ae07027e361831053e80772be57fbd744955a2e8523063cc6136f2bb37befbef7a681d3bbbc57788", + "private" : "00e461c5b5e63d75b4c8c123bf8b9cd45e712af08f7e2e494a8f255ac9d80e058b", + "shared" : "913da71044b8021a86c8fcaf4f634d0d625ff91ee1c8474d548bd10888964fb1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000441e9d4cfa8efe80b895a8cbcce2568e251db7ecdfd20a7ad710d4a4bf2addc6b5ec36a8339168a03f15b8c80f2a2a828f151d38791584853ba2ff44a2a0460a1", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "b48e119d29eef7dbb76b64218e728ddbf6ec600505ec7ced6ab6fb8763308da5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004776aef1acb82b628e132cc29440988f0a15d4cc2b4f328aecb063c9b86e5018e6e44dfc60444faa9c4e36bc217451f7ac2956cb3b2e9bbd655eba297163d1f34", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "28a88b6b258f233020ba6fa9c00d1d72831f4515b86966a9782f521315e18aa7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200049ec06b0b08662c0e1dd9111696a63a1601cc83cee20695778adf84d43064fc90156001f084cd3c1df1a087f626533b6572584889bd3d5c2c99f0e311e22b41e6", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "c4ff865ff3dc4953ea78d92a02f3345a53bdb6050cfd8f41baa4395ecb6acab8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004fa51d128adc2000f09ff12c6fd8e25aa08556d708bf6b0ffff9e8eaad4783f0de22bf529e516e1f64b8e0d09f98fad4e501695a930a1b22076659da707e3ccd0", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "de1069f051637e10166559cef44688afc809341855261215c4f381d9d7da76ca", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004614dcfbea4789a3f3eb4a8e2f111c887f0248d9316b99d0864c927a045d6941753a073befe08491a8050a4d96d08ba4790ae18db3ef7f0eaccf59ce1095afc54", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "4207bf4159faa0e50ed238b9c0ff46194a539a1ba03a5a4c8d68f369aecd31a5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004efe7754ed4c0b3c1dd301bc1ed69800aa2ff5d51fb85937715e60d2e7bcada8eb1581ab75fb3c797ef94a9dba3d82568c84617eaf3fa04f279fbfd898f704604", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "b5a0ec92aecc3010d27d2263d3da66e3d2f3395d23947024a3f4744454622027", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "point with coordinate x = 0 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d8e13fbd017f1f9a26be35c611d7b2299f5d10de3c8a26362273fffb85238f3ed1426b748c1f87e3afa2c1e7a0224310c980655e07399590d1494d6d6bea0396", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "d2a5bc66498c6036aecdfaad041cef732a893de190a0a5b42ff71e13f09280e7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "point with coordinate x = 0 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045a1027666a0e372481fec0b3901e058d60107c07b1115550ceb05789b55a6d35063d4c8ee66ed45ff3e1dfdcfd73ed96a9e83193884adbcaa574b2dd118a692b", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "1f812313ddcf36bc38071d0e51a74100d630c8e20cc414326eefa42ecb1b5f8e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "point with coordinate x = 0 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047937b9c40986dd755a0656203089782583da7d8113a44190762ab474a20bcf60efcbc1525aed5b4ad8e687cb02c2ef8887095cadca56c765b41b4a9544ff2fe8", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "f284089bddd5e2e1be3f82640efa0658468fa1f10b281963a3ca190c3982fda6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "point with coordinate x = 0 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200049368066a0748867a7b870244f5c9f82ea8bd51552959dd550bb7394497159a5d40764add1ae24c8e3f432ee011be97d3130718fe0a6a90ed8b1011b2034d09a0", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "4529f4b631c9984ab216a6801281fc4fd8731a58b65ca8d07bff07811116371f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "point with coordinate x = 0 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004981d7449bdf0013f5eeddbb7e42c442f7ccdd9427bd26d7b388755aa5e26f46a1292b88fa6bf5dffca054dd42ed3594277b593dcc402d80340fb7816e4dcab37", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "64bbc9fdd73643eb2954f4ab640381b938c5e601846a0c6b6954966e0dc73e6f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "point with coordinate y = 1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000409e78d4ef60d05f750f6636209092bc43cbdd6b47e11a9de20a9feb2a50bb96c0000000000000000000000000000000000000000000000000000000000000001", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "28f67757acc28b1684ba76ffd534aed42d45b8b3f10b82a5699416eff7199a74", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "point with coordinate y = 1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045384d6c0def78960db967b8096d35477c5a5ce30ef0c6d8879a5568ca87e979401ee56c4581722610b43f3cbfcf3862c082a6e36baa36fd6f78403c0e399faa5", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "9ee653cda46db67612760ce35bac8450bbf48dbf74451ed93abb6db408a9fe10", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "point with coordinate y = 1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044eca7641a4afd5eab0b214657ff3bdcbfc66f1551a53bb59493bc38ed78ff39614a0cadff14c14736edbdcdab510cba07a8924ffd0490ee514aedfaadb648b01", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "9736ad6b2a2ef17ec3f8c8dc2e35715fb1c06f28d82e4e26876f0214588165f1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "point with coordinate y = 1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048d0177ebab9c6e9e10db6dd095dbac0d6375e8a97b70f611875d877f0069d2c70000000000000000000000000000000000000000000000000000000000000001", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "748fa4f5a399320382dc920026938694c41a26fe2aaa318c5e710198dd71c793", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "point with coordinate y = 1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045fdb7f0cffb8b5b1142d24698a4bda76bf9827d63b1a6bd85a4e2f9b59c510cfbcb35ba9c987108b6d4337ad5393f9f910ec92410c230869d66528ed88c1b98a", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "7f97db83b4d86f04fe286041ee21e80ec3d59f3ce82cdeeaf362016fc87a3e02", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "point with coordinate y = 1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004530b2293e60c6b6f14c75c90b1ef8b9f9fa6b2151b8d9855792eb2b3dc69f07a0db42440e73fd7d6df04aed5022fbe21ceaec33c5fbade1bd6ad321ef2e10d0b", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "21794cf24f56273fa4463cc7ae4232fa34dbe0f18b73613b8ae9cbfb9c36abf0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "point with coordinate y = 1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046916fac45e568b6b9e2e2ecd611b282e5fcc40a3067d601057f879ce5a8a73cc0000000000000000000000000000000000000000000000000000000000000001", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "915106d07816e879e7643f00abf6d79fb8f1cb78bf64a6a3827f91a7b0ef0f41", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "point with coordinate y = 1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ed9568c85bc52a6b45733618c3602107c1fdacf23b1a38e486af95978a214e2efa0d71d5e737891c4276e247581ee6139011ca1460db9b1e20b364d9275683e2", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "2fcce552310819dd775ab7ba9ff0f96a1fcadd25a0c709703cef04bb6e1a7bd7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "point with coordinate y = 1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200049ff7731c00f2aa88b3fc174aba907ad17595e602e768a5f1e9462a6d4b89b2d23f178a70b9bb3edce289118338a33df30c432c347f12a3de0a2b03b353878d96", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "757d926a2693bc8a3d2d8c0554a13579ef9e559186578911f37edc88b2f5e61a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048270f8179d57436b34dfc0bdf7d417a5c895116b90cb51aec718614f864a635d174804e0c0e06e3d68d3149e0b956621c6aa2bde83f4d17d03d28ef8aa389fff", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "3db29ec6f978d2269e92e9c7eb5c8b5a8e56c2228a4fb9e483feca50aa3e451f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004c61750e98abaf20225a881dbfd3510532cfc3df971bbbca4a2bd52f91acc9c59d0fe79342097f88ae78fc79a8032245fdd2c30cc64aceaaa9fd57b0825692531", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "72c57c2e10d77318b3a796097bbf768c6366142d80f98c90a93780a841075f32", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200049c5d3bb54650d9550e1ee2efa3ea43c14ab99d18bb049f37b42a6dac48232f0bd3a2760d83d33afe4ce6f1d1245489c509bd26b0251f308f8c996e80f7a3f8eb", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "a96b07944e9eb2b22a9a36575eff1f4f6363b4aa3a53b100b8518a67ba5405dd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f1724efd481ad45a55795f06126b1f5ed28e7d9bb4fee910af2ad8c1373b18ff77edbc34da6c787ec73430347f4da86810032d88f7475f6c42f15914079d179e", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "855883316b6d097ae5eab6c67e8411a1397349a09b9d7d8f096b2ba1bd03ea31", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004fc3680af52fa89ffcd193ecc0b0714466fe5db277ee5872846c520bf4e3721d927260a0e225a3d377e6723ecb6bef8d4493c2da78a22a307fcca8f88f4527208", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "5a75bb7a0c96b8340d0842bcccf11974e1a5a2c8f4bc22b333433cce646b6a8a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004106b6f81e3482db18d74029291821ae448c38844ef783bf1d6999a404401f63f6a5753f0edc68a62cfd6a0b181bb2599e1f3bac5fa8824af160de79ed867c350", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "d96412e31cf4d26195920cac952fb79ea25f6c50abc79b5ed0ef8026a6e83319", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004093cb5193a4f94cd18edaa20a973b87ff79b0c03684c79487ecfee347e5354eb04fcb5752539170777932be15cd84c97f03815ffee8b60b647c178eebb8e14d4", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "2b0eed9badc92a1068196dfec124fe8f9d3f451e294d322eb881cce02f286026", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d6c38f448b964e27b5b450cc38d3cf41ef9df83d8a959771eb9c21855cb36445df638aef46a2aeb13199281e1a26d12fe61b029ec7f68b90faa89f88c7a95942", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "ed0b1d8dfd27a61fce91dc6405bfc53b6d48a8c13ba541c96ef3dcf31d7cdb88", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048a748d61f59c3b6a29b733b0d554b2492e7f76fad7cae1c17f2ac3de9e4a65d2eedbe6c26b6fd22bfc03c1687555d2f0a38e02adee5570686171abfec6681917", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "a796dd144f21ba3318f9e10828ecefc9c0f6ef2c427ae31351c16c2fbfa3cfa6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f1052699d87e5677c75e26b2abe719310648d820a96e5b381fff58b392401581b1bb16ae8b68cbb76a3256870bad1ee5a30ff9fd662fd4f8d1fe5b5f1f98ff46", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "1f3a9615b0745046a972bad5d59794a0b60b032b4ac94fe85f77dfb380d1f32b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200041219af5230064ee9778667225f0e009cdb961330e386edb34e4fa9fddd0e5be7e2a12554227f613aaaa78938ddbbc99b923f9d181b8192dc4b816577e8f3b7e9", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "caf9141d1fca4d0f10683b5e86d2b41af5602f017991fe7348d44e8d7014115c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000460def130f190e6dc44f5eb8a59e12e7efb27db968c7fa6cc6d31785f066b41b1f1bb556ac4cd77033e7aa6c5ba16f47ebafb14975a7fd72dd9b7fe23116bca55", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "6539ec1c98fa75197ba07c678b26300b3da1fe407dd4c68b89457ed669082e06", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f23f09bdb7d17289eb005975a757a39325b4df9b29e55ba2ca679b5ec0973ae918c881f3c7b6c12bed1ec54b837d08c5908e89bdcedd84b9177720378f789600", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "0b6619827cfa948d63f021e9eddb92f884fb5ce8a404bfe059e993fc23447a69", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045dbec098c1b7de3e3e2e73d0b62cd49c877e1a0130a1b39eb2fd4dbd4426aa4ccbeee217591a8d76cc8deaf14dde52e3f401e53b30cbb9c1807910d827d0041d", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "2a53a561acf5caec6eb0d8aa40727942881a75d136899dfbff91528236926c39", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200041e70730dc4f39c8970182e1a29cc836b9e9d6cbd6fcaa8c0dc1062fed9a849693e7b9151f9c8a3345366f8221c8fb700e8c3a9aa7f0cc46a48864e1605592094", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "9b377716ff1d056dac8e392249eaec740d2f5aa62303f4baf6bb1b03b2a276c5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f428c9ae3e23eaf9c2a5b9a7e41efd1cffbf35f881bfc35694d9c05d1e312b10ef6da9023cfd2dd0cb7b9e2a77d644affe62a63fb0f29d45291c6861aa063c5c", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "0c0c6867669743082547aa94451feb362fa29fbaf228dfb3eaf375f1a5ec2fb3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b9a16d9a5b85a714e2bb2aa22b086a17404c7a3ff62452732347419c99e90bdad578b462f523994304b6afcf6944a9cc5d0ad1afad956475c8f2953c06b06b97", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "d11f9e32587fd3b6f4a2354812618b4b3b4a7539b8a223b388bb7437f8d138a5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048f659a163a58e9f900c1e9b34fb1cd61ffc9890267be3417c8afe79d57214da05cd5cb68a2b93da0dbe56c1cfc0dce8b6c3260e0c48379c6d2091f16b39221c0", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "4babf6368e0359b78614060241ece46facca3f52f5bbc47ac0b46a075b5dd3a0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d257f133f00a079f4e6778ea4a9bf42b9f231290431b5b93d7e8b0e35b48010650d6c6b46574d1efce03510b8db4a0981ce138c5bd8fe0e54c988c40c5fc9200", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "9627cc5c8d8b72278be89c32b52210173e6f4b8e2f48e460c6429f46f9f469ae", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045ef2ac57c4e93cf78d8f86c35d413b98dc1902dd245affde5c16034afc7ea45547b3e9f77fbc5075bad03c418094f1aec1d03edeafa167fa6af83526552f7034", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "d2b178bc9bb16b5a91a100bb72e15a9639e050c034346061413ec20c4fcc9bbc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a7b513f96266414fa6ff439a35d8f09ab615db0bb6a3b1a120c217683f724b2342007a2c9feabcd6249a0d17acecd995e2a217fb5f07bec96938016e297efa52", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "6cdca0a731aff1ccfb1904a769cef79eba965fbab1cc64d2049d0df45dccd276", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047743ab7248dae5f1a59ac6b0a136e9f1e51aff8bd45795ace5f8187a13edf9adbd9642078378bab5c6d484f9e1ce39675b72170bf39abc9be7942fc01fc435d7", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "bd15e97a7f49aa33e57b54140a75fffce71b788ce0faa334cf8b45623dcc818a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040e3aa971bacdace350dc0957fa5bde0946324eb139939d7fc1997c701effd04a4e6c3625d9564168d3a752961221a1de8cf5f3d603752a8c2e6277ac3a918c25", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "c8b5e8e7488857a2dde62c5fc21e4525ebaba0e06b5be83ec6e7dd771e15a01a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040f563e21bf9b24015a7cdbb6f000a692784ac2e4bc2715c76f684264a899c8240cab0d76e6b01cabe4f327429d11be115ed6dc0ca74f02c1b987a082f5af43a8", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "1c63a457509b148272687e6e442bde51982d41b0080d8c0c5eb714257af971e7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045da49f10249e4df3dbb4e31ece0b0ee9aa073f2588195aaae63e74f6567a774810b5dd61b6bf219e9eab30ef09c13fc184b3d09ff7a4e192bca8f5111c4163c7", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "73a1ac9ece354a930dfd9c77577b4f50acc0a78964ea0d7775631d64c709c4a2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046f72e6e5c6300679d3f14f0f6e590665643576ae8bbcb7c05b2f4a83e75e6ac3e712cb056ff034da340543c5da6997e65a3ab4cd39e997892bb92ee2c22b8167", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "fcaa406329bb74f995862cea7cecc7425c6bd4148ef1a9f46b5d42da5994556a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046b544df9168e7787db282e2ae01dd72306d9c9bc80f5ab38ce594766c3d929e967493ff601ca60862b47d3a0785c917e44584044e36023a54424015e58be5040", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "e49ff11d46b6c4b5dde528b04132d15c040e79f9b7151fbc650030988028cb87", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200041c31385b9db9b374e92499939ab0fd7e7eda464561eba89fcd7b4769814a8638a4764cf8ce97b5d143bb8eeb9e1b27287f2b73942ecdbc6359aafb1ee7a152c2", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "fc8f64eac1c7e688c52c467185de21914e8b253056d9e4be010ed0128f92a889", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004aabcf8b1443d6cbb1de129a0ffe09f60b23fd9d0a44b6bdf25bed7373fdbfd1db716bde7fe9f2f46de0b688e3025e029cff15244429ad4f83484f5dea4af8583", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "6b56d8a01a884319ab5fb9d890cacfc7aabd81ad938cb5eaae207c8c1aa06efb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e7cd580bd957915d527056832e37793ab3b082ddfad9372412e1908e5c16bbb6208601a970d5844b780d9246e9583eb35918c42ed695c07d52244037f0e31db5", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "2f64b5c8046d41a4e1d631ff23846bff956a4925a47f8534490a20b4b1918b9c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042a52db1fe246b71c79c0d0ac49a7d38de67b202995efbbd2a9cc525f6f36010368f494be27e0593e2d612f1fa10a9211437e6aa16e65d97735014072f0dcec94", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "63ac31e718b9a780a85f0670e1d3685bbe306e5f06fee282a8784700b503c124", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200041c50dc49fef708c4cdd62e766f9b60f784d51afee17a8fe9f3701b2fae55b7a5d10f0d9639d83dce8f26a869705a6d6d38e6d328f5685581142aec0dcd1f90e7", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "555c1917b770cebe6a98337a008ae3d8d04f571565327c93debf61ef90ddddd8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046d0aa1bc1cee6d07d045002c13290d0ca25ca3c8783343a525fac70472b92c62d6fba71174448b472cf172b0ca9e377f1a2603ba7ae1276d153b20c63e7d24bf", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "3a65a9200f8f96635912faa5e7859fa303a76a1c2a41ea97ef61aa39287700a9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f07e3d8be2ba54c6084141e1fd2b29cfd00d4e6dd6ffb115ed839b10bd8a422f42992cb9a5243897d55408e9bb556043318d87349af35dcc0975ed805c8fa2c9", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "bb7bb52da570ba58e05fd322f82d556c2d65b365db30815879f67f233b089b51", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000443a9b90274dbd5f36dd29046fc8390008dde74513ce4c3e8892b236efff80c9dc71547152a5897dbe16957bd15d1a87d770496f814fe2921c8f33df04393c7f8", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "e8cae9944233b867eedf5902fc49ecd07e4c81c46279531e89520b74ba5370b5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e9af8e8c19da9d5c2f3b3c03b8e927c3cbe2d717f98f500972e56d82eb07c2b14e83fcaacadc26f8bb5e7b94741fe54f31275ebd6e1c969d7ec2fecead8a0dae", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "e72ad0cdb25f4307d1d834a5f792e9af64fd1b69a47041ec8fa46d526f419e4d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000433d9582b567aadbe59606fa6ffc11848e4947b5179597317776317b2b4ff65d0b4d8568dc843319cc04f4bf110496dee7c9229fc68cb0958f3cbd37ecca6990f", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "000197fbc260a84dbcbf88136aeaa79b03bb8949aefd2416bef63929ef789bf3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e21c0282adb1b2055fda744644c68612cfb0c68a70b9812d007f21a78f1adc4849f3e7644bc6633e2773a2f3cc5214fa7208e30afb3de992f077ee321569dc48", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "cdb18bf62670a853488ca510d8f55bab2918991424925bd9b74a821d2c6e7e3c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004af27de0da6556e4e64588c9694afee9a84e1cbd0c388972df3a997f760bbcd903c5a02e161551f333d770559ab1af49bf8b68274896590939ce956d9913b676f", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "167303505d22cf9ef78c5b9687a5418fa9fb284f2b0ff68316288ecd7f2e2e09", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040da41b82550b358ff474915d83104d41a83a12ef70589b9d392f0f30dc32429edc76163c8fe07a3f709cbd92da0bbfc5045f3db82aa5344cf1fd5b27fcd2f7a6", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "85600ff23c3cde26009fea9b6539664bf045056883728ab0d4498ea0a8f4a453", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000419c844b8c7209026a0996a782983e1bd0f0de9255b86739be9bef08ea5475cc669a779ddf57747cf7d9a22f00ed8efc6e818af5827b750d665fee6d6d58a22e8", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "a3250a2bfb145ce86e706ac3ab2bf503a66486ac0b2f7522601c124b0e0f9c5b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004bd07bd4326cdcabf42905efa4559a30e68cb215d40c9afb60ce02d4fda617579b927b5cba02d24fb9aafe1d429351e48bae9dd92d7bc7be15e5b8a30a86be13d", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "2d70cc8c8af01366051cc8359c2fc8f258757e2601fd8f3e08422a7b23bfeff5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040089dee27a60d071dabbaf58f3e56614dad3b7f9a8030769fd0463b3e6e0f03a147b4d6e7e7fd939b9b54dab458fd556ad8fdaf4da6c3909588c4e050ca74a67", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "cbe0c571d1080ea34ee20ad1bfd21ea5ecc442ead733fb4eee3c0d7b0cce9935", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000442ede106cf85aef46df7e5dba8a8b00459317d9e766a7b77c299aa0e17dea142b6e9a86f4fc3e945d4323ba8e459f6b7b14c563a698c757a2d5f7b0bc301ede2", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "33320fc7917fe4e19280bfbfe16f223c037f7c2dc30c0fda98310740f57fe289", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004974b4316c5e7d1348b28dbc4fd61d8d3470de744c30f5be237f85f29969dea77b5f00b58b83cfc7bc51655465b4a28abe1ed3dbec20c6b4643aec85b95a5bec6", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "35c726ead66c39414fe0c24604df7838e5725d2fc1bd0853261e1de3338ecb4f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000459873d7523936a121b629e9870f930419f253a5767b9d0dc49716f2c50e17bd0163b71f2bf4318fbde1ceaa585450080eec28474cd18bf7c21d2d1bfde4ff677", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "66ea42fe6fd8741b37599bbdada3ec0e6b08c0b52ea67c29a33172f72742583c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004bd85a79f81c4f9613e64fa347886437856c7358d1b69cf1e923d7742d82f9b6767d26918eaa8acb113a1daadaedc709742457303ebc23cdda5572613dc827703", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "2f8a502e4f440133e84fb625292cbeabe2cb79da73987c76d4fed864d1b1b762", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 145, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043e6a4effc47c2f5926bb6b4acf2eac48b9524c47d511f816976796778600d6c5bfce593242a5985a977590f8d7485df3f953352957f3c17c13e94583d9c0e7b9", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "06436817d8928b77b73d16c5c3b35e243ad3ef2ab59ad047142c67a6d0923c84", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 146, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200049a4487fcfce8396688e7449e095fe803caa253d4bd7c66dbc6261cc9d9f883a50e5251bae29c5a5cdfa31bc61105671a88a018467398158d35b88829237c0bff", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "7e83fd2c3d713bc85d6d85d9078b3a0842824d410e8abde04da0fd71c7d94705", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 147, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004fed6ce127290c1291ca5ce64acb4e0f2f8905654d1d25ba57c1f74ab52f21f42963d31671c06b802169929525c4a1fdeff5b1eafab919dc2df6c52be84dfaef3", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "0e3dfdab606ebdc6428282acd443f189c99b3b483aa101fd8d6bed38aec59e02", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 148, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f7cee5b55f1869f137dd707c8f8fb8965a2be5840c3149fb759695a4661b9c0d23c78c4e9647b0d6cb2f2602be73ff25cf3d09c96d892b5745fe5eca814aec91", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "f489f2bd93f76b8e41fc6b9f211bc599d49db1f17a38e95bab1d31b2a2b55829", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 149, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042baaaec3b3e8d54a4e18f0960b947da2535e3cfcca2cfa8b7113aad8e3b6626f72f71e7c9e96042c1d39cc8f1139d5147c6f4fe62e23cf6df364b5f4d899f842", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "cc5738b49d30d5d02cf7e0c54a3de09b5b6f3c4dea91dd0679072a3562444c37", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 150, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a51ab1238bc1bed25247e7d179c83a61ae2d4a9fe2288c363ae0eb7a77de432a3c6d35d82ba8017e6ca9041cc785a30703f7bc4427506e624ac5979d715421dd", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "89a11177d6907a81d47467093bf6a3cc8ba55dee05239b160a31a3000f5d807b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 151, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048b5ae8a0e55f30f509061315abae79ac480f88b44655f7269a385c81526884be262974a31a0e2322126c2d77b26b108abd81f8b952c458ccc95d46fb4924c7c0", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "2cb03c30b20037a5cf4d5b33574f3abac895bfab37867eb2ebed260e0929058d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 152, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045f60c77e474dd66c8135ee3dafc75ba644649824c72737542091ad469adbb685312c09c69b629d0436bf3bd6c6083ff2a87be484a73ef3a5d2c3e06b5d9b21b3", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "e54d487d0c4b12fe522af3e663ce316e632ba9d63a1f02a36fc5a82bf82731a4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 153, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e06eaa73f6feae45417d859bbad4bc404b2885bcd213ebace594e16f4970e0c411ed3323a3d7afc7076239884307f91849ed5f5e36b6171d309c81344c53e06d", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "ccea969d40fa42933f4fbdc4cabe2185f8a452996254c1f4e0dde5e14feeea8d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 154, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040f1c1b89e9fc6fc0faefc9109fc4a1247d9f54c7497b6cc975e6a5455bef410836cb3818548ac9b41e2b8336c3eb8d97075ae47e1827fa1ff93d4341d43c0c1d", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "eaae0e188c9427bf3c8b3ded772122204c328d5941e389d808e2724638f9aff8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 155, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004577069e8284a95f51dcab919b0536657058971dab76217f8d3ae722a64092e26e51f68a722cc0397f4801401771e9a3d1988d4af76f14f9e2f9c36e0773e29c2", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "fea0cce1358f1ff40ffeaaffbf91b2e8d426d4e31e9627731ace3a122eab6b0d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 156, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042406a2759050b925dd4f814c5033e355548f42bbf1afb791c110f0031f29f68099d5f4b005de3927f165abeff196a28c7217fab1be2b5209c324e7d62d2dd687", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "837621ea4827bba0376aaa8aa66cfe144a2ff1e359dc619a06441d3e055f9771", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 157, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ccaac61f35a27861183621642bc573af913356fb47cf582f0b5299099d6f6c6991f7272b83b738a7a5d30447c87f126a7d98ec72fa2609d0939d18db7ea7eb3a", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "63974ce6153762e5b364523cead93e8ce8bcc77dda56365d676136169fc4e39b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 158, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000401415917272f1984e7217a36fb311fd2904d41a6b13973f92aae3b90e85e4d56d97c822eb7b21a84d0d1be4867404a80c34867f43139dadcc3619e10b222562b", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "0a0488144bc36d690b62148ac3076047d46d48f7adbb0f34fee9a636295fe737", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 159, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b2575d100c6fa056bcd137ab111b5315a8908c29243b84f3dc996d0e45764b9166cabeb41885588ec08b47257df58bd58f7dcd9e012e2669fa2f52e25767fc4c", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "1232165538a44268aa7c199c54d6d207c4ef3f5aa790c10c926a20752ca645ce", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 160, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004c17355ed30ccd6427f9685709021b25c11ed176e9610c479bcc4cc7552a738e61f75114761dba0ec60cd264bbab763c5d5abcc75cd8fb5651d0645179988cc6d", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "dcab5e874e4fb76bc4312528e9d76dfae56145922533089734110bf5653f4d77", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 161, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004341592390ccce485de8880f3d727f664c381914a1becec383b35586751fc81c2add71852b87016e1019cae7a9080e75ce0b0b8aac175d692d5e7b4dad088f5cc", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "4ce2701b2be63a0083a4c53f7a0bf04cf871654f5edb6f625e3ea5e7d0bdcc90", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 162, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004fa764b6b76a86c3b762120825d353a24766208c1f5cc0fe3fe7998026a2ec5c43bb2f948fd94cdaa5869b1e0e73a4d97035cc49357fb7b74d7ed0a2c5b8d54eb", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "7abef9765cca721320fbf8edcbef6d2ba25d17b70ffa1776029bc38fe677a12c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 163, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a71fbb617199bd585b4b66212ca33ca9e09370e6bf15c8ea0acefd9c8e945d06840f058863078e743e220ff99f23bbc1daa36835d4b1269f0a7536e63f06d853", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "5f61404dbbbc2867dff95c1f37ed44f4cb8fabcd223b03739d888308d13bc412", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 164, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000413c8292d854d39451c0c63a802b8c03e4fcb875ef01239896295ba1c0f386975f82df197086fd86032cb36b69a27876dd75a8e9679f36ffc2210edb128d4be13", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "8d673a577e35bf9d5d00676c08b2c739617c46a052188403aa06dc714af6acc1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 165, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040cd9df415acc0c32fd4e3d6924ce53075b0452bf919a2ab2ebe26597570f1ecd5985d8d2c5df78fc100f87efb6dfa9543757bdffecf083dfcd1ecb38de6c23f8", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "a7835ffee0f2a69dfcf70d4e798dbe3ed32ba03cfddae5ddd11d8c0ac3d74f9b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 166, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d2dbea4046b23fd2b233d1ce31dceddb89b25f26c0627a9d2db3c5605c9cc99535bdc8de7451c1e27e97aa91402cce3882c71269d9cbdcb5d7ac0ceb911b9b6d", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "e98ea22209cd397edb6c319648c1eb24bc4d39598ab11995571926684ce2ceca", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 167, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004888fb044fb2b6caa60366bfa662adba479b8365a6555a29887d580f587086ba8482f4ec24082a48d6402afa1622143f26e61d91b7e30d6a4b223630ee10f70fb", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "91b65733860b1bdb9541d9f55895a3dbb3f13c199251d33006b6dcf90ac349ed", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 168, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042e2bec134249379d57700301f3a58e4b395a4d28370d2a06e65e7ac89ed76ac697dc960bd795cdf4fbcfdd75149057b8e022331c7b5461f383ac589d764df333", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "1fdf7c5c48047a113e5e5d1b7ed593337e769231cca5c7110160e0c1b97f4256", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 169, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004c78cda7e3b9e1772ebed30b2b51dcf155a69a0fc504557836e25147cfb8127d2f8289cf38b033d3763c8f9f6c091787a3142fb83dff5719590282c6f852e0105", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "ba0abc3e71726cb51330489176357b81b8074d7690e4e82e9a3c00151e1fa318", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 170, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200041e3df4dd7fb7718cb0aa0dd72f8a25c83c4e804e7cbd48c5e965651f9e23bf4ef0ff40dd9796e4a9a5eddd2c4ca4ebd10990d8fb8918d12d53c76001afa9de7f", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "16e632f9752d36602c95ec274b32ad594f39f6ac3bd4b0b20f8637392142cef4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 171, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e5c5dc3fd88d85668b3b709fd6b4232f1f80949cbccb5588363e6c217a2b3ed88dbd0d6e3cc97f3081d16602aa3d1b655ee0791c87fcb5abe6217d8c8513807e", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "9eed4b96569f604a4d3f5af97499807111fc9888c458ece2e3000e245c2c02b0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 172, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004021c41eceec24e0fba894ad7415a9598cbcd14fa6ca46e25575268a1d8e5bbc63f846c6a185fa3f23bb92c14e7e2cba8c74047c09af766f55ef0c907c80d9451", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "21ac32013838812621dbb584965bded6fc851d3a029810679bc57b2381bb7a7d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 173, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048e24192cd33335a114f5070266c014cb0d8c704d16d6042e89c17597bcd4e77ebdb4c5171704c2c09275c22a310e0c4fe092e4084856da99b94abbfa9f469f48", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "fc5978da01ca83e127dddf989a0358871b3c4ce0755bfb020633db467e21a53c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 174, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431c90ae47a93d09a2352b6f3677e7975ea62aadedb56c118eb8b9f771e2dd9f5f2601fb9cca2304e594423cf48064dbed17ae40452f18be6ae018321911e8cb3", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "9f417341261aa45d396b0ccf2a3dee7a466ca47e3ce86ecd2071d9c4db08820e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 175, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d2f211cfab84e01c8e5544036234debe35ae103bb878d7abcea6825f753e03a385f7f1870e64f1262af67a25ef9880419f45608e7f9da6dee83f5f46ceb53dcb", + "private" : "00809c461d8b39163537ff8f5ef5b977e4cdb980e70e38a7ee0b37cc876729e9ff", + "shared" : "f419febb32c254611adf569c2d583b17542b1538caa0001967f0a4bc34b8b789", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 176, "comment" : "edge case private key", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", - "private" : "3", + "private" : "03", "shared" : "85a0b58519b28e70a694ec5198f72c4bfdabaa30a70f7143b5b1cd7536f716ca", "result" : "valid", "flags" : [] }, { - "tcId" : 60, + "tcId" : 177, "comment" : "edge case private key", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", - "private" : "0ffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "00ffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "shared" : "a329a7d80424ea2d6c904393808e510dfbb28155092f1bac284dceda1f13afe5", "result" : "valid", "flags" : [] }, { - "tcId" : 61, + "tcId" : 178, "comment" : "edge case private key", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", - "private" : "100000000000000000000000000000000000000000000000000000000000000", + "private" : "0100000000000000000000000000000000000000000000000000000000000000", "shared" : "bd26d0293e8851c51ebe0d426345683ae94026aca545282a4759faa85fde6687", "result" : "valid", "flags" : [] }, { - "tcId" : 62, + "tcId" : 179, "comment" : "edge case private key", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", @@ -581,55 +1641,55 @@ "flags" : [] }, { - "tcId" : 63, + "tcId" : 180, "comment" : "edge case private key", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", - "private" : "08000000000000000000000000000000000000000000000000000000000000000", + "private" : "008000000000000000000000000000000000000000000000000000000000000000", "shared" : "34eed3f6673d340b6f716913f6dfa36b5ac85fa667791e2d6a217b0c0b7ba807", "result" : "valid", "flags" : [] }, { - "tcId" : 64, + "tcId" : 181, "comment" : "edge case private key", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", - "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e83f3b9cac2fc632551", + "private" : "00ffffffff00000000ffffffffffffffffbce6faada7179e83f3b9cac2fc632551", "shared" : "1354ce6692c9df7b6fc3119d47c56338afbedccb62faa546c0fe6ed4959e41c3", "result" : "valid", "flags" : [] }, { - "tcId" : 65, + "tcId" : 182, "comment" : "edge case private key", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", - "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3a9cac2fc632551", + "private" : "00ffffffff00000000ffffffffffffffffbce6faada7179e84f3a9cac2fc632551", "shared" : "fe7496c30d534995f0bf428b5471c21585aaafc81733916f0165597a55d12cb4", "result" : "valid", "flags" : [] }, { - "tcId" : 66, + "tcId" : 183, "comment" : "edge case private key", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", - "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b1cac2fc632551", + "private" : "00ffffffff00000000ffffffffffffffffbce6faada7179e84f3b1cac2fc632551", "shared" : "348bf8042e4edf1d03c8b36ab815156e77c201b764ed4562cfe2ee90638ffef5", "result" : "valid", "flags" : [] }, { - "tcId" : 67, + "tcId" : 184, "comment" : "edge case private key", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", - "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac1fc632551", + "private" : "00ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac1fc632551", "shared" : "6e4ec5479a7c20a537501700484f6f433a8a8fe53c288f7a25c8e8c92d39e8dc", "result" : "valid", "flags" : [] }, { - "tcId" : 68, + "tcId" : 185, "comment" : "edge case private key", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", - "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f3", + "private" : "00ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324f3", "shared" : "f7407d61fdf581be4f564621d590ca9b7ba37f31396150f9922f1501da8c83ef", "result" : "valid", "flags" : [ @@ -637,10 +1697,10 @@ ] }, { - "tcId" : 69, + "tcId" : 186, "comment" : "edge case private key", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", - "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632533", + "private" : "00ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632533", "shared" : "82236fd272208693e0574555ca465c6cc512163486084fa57f5e1bd2e2ccc0b3", "result" : "valid", "flags" : [ @@ -648,10 +1708,10 @@ ] }, { - "tcId" : 70, + "tcId" : 187, "comment" : "edge case private key", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", - "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632543", + "private" : "00ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632543", "shared" : "06537149664dba1a9924654cb7f787ed224851b0df25ef53fcf54f8f26cd5f3f", "result" : "valid", "flags" : [ @@ -659,10 +1719,10 @@ ] }, { - "tcId" : 71, + "tcId" : 188, "comment" : "edge case private key", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", - "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254b", + "private" : "00ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254b", "shared" : "f2b38539bce995d443c7bfeeefadc9e42cc2c89c60bf4e86eac95d51987bd112", "result" : "valid", "flags" : [ @@ -670,19 +1730,19 @@ ] }, { - "tcId" : 72, + "tcId" : 189, "comment" : "edge case private key", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", - "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "private" : "00ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", "shared" : "85a0b58519b28e70a694ec5198f72c4bfdabaa30a70f7143b5b1cd7536f716ca", "result" : "valid", "flags" : [] }, { - "tcId" : 73, + "tcId" : 190, "comment" : "edge case private key", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000431028f3377fc8f2b1967edaab90213acad0da9f50897f08f57537f78f116744743a1930189363bbde2ac4cbd1649cdc6f451add71dd2f16a8a867f2b17caa16b", - "private" : "0ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f", + "private" : "00ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f", "shared" : "027b013a6f166db655d69d643c127ef8ace175311e667dff2520f5b5c75b7659", "result" : "valid", "flags" : [ @@ -690,7 +1750,7 @@ ] }, { - "tcId" : 74, + "tcId" : 191, "comment" : "CVE-2017-8932", "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004023819813ac969847059028ea88a1f30dfbcde03fc791d3a252c6b41211882eaf93e4ae433cc12cf2a43fc0ef26400c0e125508224cdb649380f25479148a4ad", "private" : "2a265f8bcbdcaf94d58519141e578124cb40d64a501fba9c11847b28965bc737", @@ -699,7 +1759,7 @@ "flags" : [] }, { - "tcId" : 75, + "tcId" : 192, "comment" : "CVE-2017-8932", "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cc11887b2d66cbae8f4d306627192522932146b42f01d3c6f92bd5c8ba739b06a2f08a029cd06b46183085bae9248b0ed15b70280c7ef13a457f5af382426031", "private" : "313f72ff9fe811bf573176231b286a3bdb6f1b14e05c40146590727a71c3bccd", @@ -708,7 +1768,7 @@ "flags" : [] }, { - "tcId" : 76, + "tcId" : 193, "comment" : "point is not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -717,7 +1777,7 @@ "flags" : [] }, { - "tcId" : 77, + "tcId" : 194, "comment" : "point is not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -726,7 +1786,7 @@ "flags" : [] }, { - "tcId" : 78, + "tcId" : 195, "comment" : "point is not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000000000000000000000000000000000000000000000000000ffffffff00000001000000000000000000000000fffffffffffffffffffffffe", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -735,7 +1795,7 @@ "flags" : [] }, { - "tcId" : 79, + "tcId" : 196, "comment" : "point is not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000000000000000000000000000000000000000000000000000ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -744,7 +1804,7 @@ "flags" : [] }, { - "tcId" : 80, + "tcId" : 197, "comment" : "point is not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -753,7 +1813,7 @@ "flags" : [] }, { - "tcId" : 81, + "tcId" : 198, "comment" : "point is not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -762,7 +1822,7 @@ "flags" : [] }, { - "tcId" : 82, + "tcId" : 199, "comment" : "point is not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000000000000000000000000000000000000000000000000001ffffffff00000001000000000000000000000000fffffffffffffffffffffffe", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -771,7 +1831,7 @@ "flags" : [] }, { - "tcId" : 83, + "tcId" : 200, "comment" : "point is not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040000000000000000000000000000000000000000000000000000000000000001ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -780,7 +1840,7 @@ "flags" : [] }, { - "tcId" : 84, + "tcId" : 201, "comment" : "point is not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000001000000000000000000000000fffffffffffffffffffffffe0000000000000000000000000000000000000000000000000000000000000000", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -789,7 +1849,7 @@ "flags" : [] }, { - "tcId" : 85, + "tcId" : 202, "comment" : "point is not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000001000000000000000000000000fffffffffffffffffffffffe0000000000000000000000000000000000000000000000000000000000000001", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -798,7 +1858,7 @@ "flags" : [] }, { - "tcId" : 86, + "tcId" : 203, "comment" : "point is not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000001000000000000000000000000fffffffffffffffffffffffeffffffff00000001000000000000000000000000fffffffffffffffffffffffe", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -807,7 +1867,7 @@ "flags" : [] }, { - "tcId" : 87, + "tcId" : 204, "comment" : "point is not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000001000000000000000000000000fffffffffffffffffffffffeffffffff00000001000000000000000000000000ffffffffffffffffffffffff", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -816,7 +1876,7 @@ "flags" : [] }, { - "tcId" : 88, + "tcId" : 205, "comment" : "point is not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -825,7 +1885,7 @@ "flags" : [] }, { - "tcId" : 89, + "tcId" : 206, "comment" : "point is not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000001", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -834,7 +1894,7 @@ "flags" : [] }, { - "tcId" : 90, + "tcId" : 207, "comment" : "point is not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000001000000000000000000000000fffffffffffffffffffffffe", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -843,7 +1903,7 @@ "flags" : [] }, { - "tcId" : 91, + "tcId" : 208, "comment" : "point is not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffffffff00000001000000000000000000000000ffffffffffffffffffffffffffffffff00000001000000000000000000000000ffffffffffffffffffffffff", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -852,7 +1912,7 @@ "flags" : [] }, { - "tcId" : 92, + "tcId" : 209, "comment" : "", "public" : "3018301306072a8648ce3d020106082a8648ce3d030107030100", "private" : "7e4aa54f714bf01df85c50269bea3a86721f84afe74f7b41ea58abcf3474e88d", @@ -861,7 +1921,7 @@ "flags" : [] }, { - "tcId" : 93, + "tcId" : 210, "comment" : "public point not on curve", "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764c", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -872,7 +1932,7 @@ ] }, { - "tcId" : 94, + "tcId" : 211, "comment" : "public point = (0,0)", "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -883,7 +1943,7 @@ ] }, { - "tcId" : 95, + "tcId" : 212, "comment" : "order = -115792089210356248762697446949407573529996955224135760342422259061068512044369", "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f50221ff00000000ffffffff00000000000000004319055258e8617b0c46353d039cdaaf020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -896,7 +1956,7 @@ ] }, { - "tcId" : 96, + "tcId" : 213, "comment" : "order = 0", "public" : "308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5020100020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -909,7 +1969,7 @@ ] }, { - "tcId" : 97, + "tcId" : 214, "comment" : "order = 1", "public" : "308201133081cc06072a8648ce3d02013081c0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5020101020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -922,7 +1982,7 @@ ] }, { - "tcId" : 98, + "tcId" : 215, "comment" : "order = 26959946660873538060741835960514744168612397095220107664918121663170", "public" : "3082012f3081e806072a8648ce3d02013081dc020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5021d00ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -935,7 +1995,7 @@ ] }, { - "tcId" : 99, + "tcId" : 216, "comment" : "generator = (0,0)", "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b04410400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -947,7 +2007,7 @@ ] }, { - "tcId" : 100, + "tcId" : 217, "comment" : "generator not on curve", "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f7022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -959,7 +2019,7 @@ ] }, { - "tcId" : 101, + "tcId" : 218, "comment" : "cofactor = -1", "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510201ff034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -971,7 +2031,7 @@ ] }, { - "tcId" : 102, + "tcId" : 219, "comment" : "cofactor = 0", "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020100034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -983,7 +2043,7 @@ ] }, { - "tcId" : 103, + "tcId" : 220, "comment" : "cofactor = 2", "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020102034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -995,7 +2055,7 @@ ] }, { - "tcId" : 104, + "tcId" : 221, "comment" : "cofactor = 115792089210356248762697446949407573529996955224135760342422259061068512044369", "public" : "308201553082010d06072a8648ce3d020130820100020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -1007,7 +2067,7 @@ ] }, { - "tcId" : 105, + "tcId" : 222, "comment" : "cofactor = None", "public" : "308201303081e906072a8648ce3d02013081dd020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff30440420ffffffff00000001000000000000000000000000fffffffffffffffffffffffc04205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -1019,7 +2079,7 @@ ] }, { - "tcId" : 106, + "tcId" : 223, "comment" : "modified prime", "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100fd091059a6893635f900e9449d63f572b2aebc4cff7b4e5e33f1b200e8bbc1453044042002f6efa55976c9cb06ff16bb629c0a8d4d5143b40084b1a1cc0e4dff17443eb704205ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b0441040000000000000000000006597fa94b1fd90000000000000000000000000000021b8c7dd77f9a95627922eceefea73f028f1ec95ba9b8fa95a3ad24bdf9fff414022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200040000000000000000000006597fa94b1fd90000000000000000000000000000021b8c7dd77f9a95627922eceefea73f028f1ec95ba9b8fa95a3ad24bdf9fff414", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -1032,7 +2092,7 @@ ] }, { - "tcId" : 107, + "tcId" : 224, "comment" : "using secp224r1", "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -1043,7 +2103,7 @@ ] }, { - "tcId" : 108, + "tcId" : 225, "comment" : "using secp256k1", "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -1054,7 +2114,7 @@ ] }, { - "tcId" : 109, + "tcId" : 226, "comment" : "a = 0", "public" : "308201143081cd06072a8648ce3d02013081c1020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff302504010004201b95c2f46065dbf0f3ff09153e4748ed71595e0774ba8e25c364ff1e6be039b70441041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101034200041510264c189c3d523ff9916abd7069efa6968d8dc7ddb6457d7869b53ea60cdcfafb7ed4786da15d29ee59256f536da3575a4888c1bb0a95b256f4a7e9fd764a", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", @@ -1066,11 +2126,11 @@ ] }, { - "tcId" : 110, + "tcId" : 227, "comment" : "public key of order 3", - "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff304404205a715b6a9ef865f5058e21e20b575d9d585533bd588a9d5fb61cd69534b4e581042036a1a972d367abf9054cce4d54424592882c345283dc9cf0ec47231711f56b22044104d68a3dfbaeb2d277742e833c51625c2ded89b13ea1ec5d33b9cbca77334d79ec89c97eb4143dc3c88d1925fc4f30baba454bb201e5c0d3158ec98bb1fd045e12022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255102010103420004d68a3dfbaeb2d277742e833c51625c2ded89b13ea1ec5d33b9cbca77334d79ec7636814aebc23c3872e6da03b0cf4545bab44dff1a3f2cea7136744e02fba1ed", + "public" : "308201333081ec06072a8648ce3d02013081e0020101302c06072a8648ce3d0101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff304404207b5c92a0cac0f30673473f260f89926a14da905bc7e5e07df1e8df69059d98570420cb2eaa5643572372d5cba1e69f687d287fd62f5518322af2614ce512dd680a76044104843587c1bea197a1be63c67c9f1641c70f7d3cba49147e9fc0c9bb246e1498186049243e8e92743df2f9994d60f90ab21635e00183e69b317f00ad226da8f546022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63255102010103420004843587c1bea197a1be63c67c9f1641c70f7d3cba49147e9fc0c9bb246e1498189fb6dbc0716d8bc30d0666b29f06f54de9ca1fff7c1964ce80ff52dd92570ab9", "private" : "4f3414d1589b49f7172d439cbbe78e5b5350dc85dea40cd2d6274740c6e0239c", - "shared" : "f0652d1cc135c763cd51e429d320a6101634d13b59790c3b1db0063f9f00dc99", + "shared" : "", "result" : "invalid", "flags" : [ "WeakPublicKey", @@ -1079,133 +2139,142 @@ ] }, { - "tcId" : 111, + "tcId" : 228, "comment" : "Public key uses wrong curve: secp224r1", "public" : "304e301006072a8648ce3d020106052b81040021033a00042af270d2a6030e3dd38cc46e7d719f176c2ca4eb04d7e8b84290c8edbcaed964ebe226b2d7ce17251622804c0d3b7adce020a3cdc97cac6c", - "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "private" : "00b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", "shared" : "", "result" : "invalid", "flags" : [] }, { - "tcId" : 112, + "tcId" : 229, "comment" : "Public key uses wrong curve: secp384r1", "public" : "3076301006072a8648ce3d020106052b81040022036200041f17901e731b06f349b6e9d7d17d45e8a2b46115a47485be16197932db87b39405b5c941b36fd61b9ef7dd20878e129e55a2277099c601dcdb3747f80ad6e166116378e1ebce2c95744a0986128cfeeaac7f90b71787d9a1cfe417cd4c8f6af5", - "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "private" : "00b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", "shared" : "", "result" : "invalid", "flags" : [] }, { - "tcId" : 113, + "tcId" : 230, "comment" : "Public key uses wrong curve: secp521r1", "public" : "30819b301006072a8648ce3d020106052b81040023038186000400ed76e5888428fad409ff203ab298b0f24827c091939ae0f9b1245d865ac5fbcd2749f9ae6c90fa8e29414d1bc7dc7b3c4aca904cd824484421cc66fe6af43bdfd200c1f790a0b3ae994937f91b6bdb9778b08c83ecadb8cba22a78c37bf565dac164f18e719be0ef890ee5cbf20e17fcfc9a5585e5416470b9862f82fb769339994f4e", - "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "private" : "00b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", "shared" : "", "result" : "invalid", "flags" : [] }, { - "tcId" : 114, + "tcId" : 231, "comment" : "Public key uses wrong curve: secp256k1", "public" : "3056301006072a8648ce3d020106052b8104000a034200048028d16082b07696d4aa4aab9d6b1f1463435ac097900631108f9888e13da67c4841fd8dd3ced6e7ad8c6fc656621c2f93d3db0eb29d48d1423154519865dbc1", - "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "private" : "00b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", "shared" : "", "result" : "invalid", "flags" : [] }, { - "tcId" : 115, + "tcId" : 232, + "comment" : "Public key uses wrong curve: secp224k1", + "public" : "304e301006072a8648ce3d020106052b81040020033a0004dc79fc28da096ac19f3cf0bc70b8e52529a83861ac66b1d44b9f2e9c68856babaa94f5fa67a1edfce5bd1768f9b9a1621483d214436aab02", + "private" : "00b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 233, "comment" : "Public key uses wrong curve: brainpoolP224r1", "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004a6bae3d155c1f9ca263928c986ede69acefd0dd9b3a19d2b9f4b0a3a66bea5d167318dcc028945fc1b40c60ce716ba2d414a743c6b856a6f", - "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "private" : "00b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", "shared" : "", "result" : "invalid", "flags" : [] }, { - "tcId" : 116, + "tcId" : 234, "comment" : "Public key uses wrong curve: brainpoolP256r1", "public" : "305a301406072a8648ce3d020106092b2403030208010107034200045d3ddbbb9bc071d8b59855c74bdf3541ae4cb6c1a24ec439034df7abde16a346523edf6a67896b304cb2cd2a083eec2b16935bbc910e85ec6eae38b50230bf70", - "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "private" : "00b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", "shared" : "", "result" : "invalid", "flags" : [] }, { - "tcId" : 117, + "tcId" : 235, "comment" : "Public key uses wrong curve: brainpoolP320r1", "public" : "306a301406072a8648ce3d020106092b240303020801010903520004a43c6ef2500723d54c1fc88f8844d83445ca5a0f585c10b8eb3f022d47d0e84862b7f5cbf97d352d4348ca730f600f2258d1d192da223f6ba83a7cc0d6da598d55c2b77824d326c8df000b8fff156d2c", - "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "private" : "00b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", "shared" : "", "result" : "invalid", "flags" : [] }, { - "tcId" : 118, + "tcId" : 236, "comment" : "Public key uses wrong curve: brainpoolP384r1", "public" : "307a301406072a8648ce3d020106092b240303020801010b036200042391c062833d1e6d89ec256cf4a3989534c1ead5e1e14ffae933a53f962857e4713087e1b3d65ac79634c71577af24698b5ce959183835551f7b08aef7853378c299930b360813fd58d5e4da8b37d5a7473e891ee11cb02881bd848b364fb7d5", - "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "private" : "00b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", "shared" : "", "result" : "invalid", "flags" : [] }, { - "tcId" : 119, + "tcId" : 237, "comment" : "Public key uses wrong curve: brainpoolP512r1", "public" : "30819b301406072a8648ce3d020106092b240303020801010d038182000484beae85096640953c1fd6ebbc32697263d53f89943cbaf14432061aea8c0318acbd9389ab1d2e904fa0e081d08cfabb614ed9bca618211142d94623c14b476a25e47abf98fd3b1da1417dfc2e2cfc8424b16ea14dd45e1422be7d4e0a5cc7f4d4ab5f198cdbaaa3f642ec6361842cbe869382ee78cd596ff5e740d9ec2c3ad6", - "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "private" : "00b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", "shared" : "", "result" : "invalid", "flags" : [] }, { - "tcId" : 120, + "tcId" : 238, "comment" : "Public key uses wrong curve: brainpoolP224t1", "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00042b0a1a858ffc44e7752940731d378f96570837e279ea3948fe00cff8b5f89adb4e2fe6f8781ba6426364f4590b34dd79fc80629de4a86084", - "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "private" : "00b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", "shared" : "", "result" : "invalid", "flags" : [] }, { - "tcId" : 121, + "tcId" : 239, "comment" : "Public key uses wrong curve: brainpoolP256t1", "public" : "305a301406072a8648ce3d020106092b2403030208010108034200043037c01b4a5ac53742e3f5528dffb0f010ab6ebeb08d792b32e19e9006ca331a024b67698d7cf4b575ccd9389441d5c640b77c63771cef1bd85675361c6602a4", - "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "private" : "00b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", "shared" : "", "result" : "invalid", "flags" : [] }, { - "tcId" : 122, + "tcId" : 240, "comment" : "Public key uses wrong curve: brainpoolP320t1", "public" : "306a301406072a8648ce3d020106092b240303020801010a035200040f0fd972a495a140124a4019291a20f5b39fb755c126bf268643bb3091eca44f2a3cda1dead6ab1f4fe08a4b3872423f71e5bf96b1c20bc0ca73b7e2c134cc14a5f77bc838ebcf01084da3bf15663536", - "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "private" : "00b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", "shared" : "", "result" : "invalid", "flags" : [] }, { - "tcId" : 123, + "tcId" : 241, "comment" : "Public key uses wrong curve: brainpoolP384t1", "public" : "307a301406072a8648ce3d020106092b240303020801010c0362000403b65faf5a6bf74bd5c166278a4b566c6c705ac6363e61f3b0699e116d3c5b19e8b7021b75b005f78a8cea8de34c49397f9b3b2bfc8706eb8163c802371eff7dfc825c40aa84dd9d1c4b34615ee5ae28c6c05d58d2a8ccc3786382b712d3bcda", - "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "private" : "00b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", "shared" : "", "result" : "invalid", "flags" : [] }, { - "tcId" : 124, + "tcId" : 242, "comment" : "Public key uses wrong curve: brainpoolP512t1", "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200047504d660943a69ab043378e44c034896534a346e0e95f35fcaad3503b490856bfb20a753ecabc6d7bfeec28d057f919923b7d3c086953eb16c5bd287b59788db72dbb7c273854294c927ea7eca205aae2f0830e5faaddad8316231bfc3572c85c33cb7054e04c8936e3ce059c907e59f40593444e590b31820bc1f514ed0ec8a", - "private" : "0b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", + "private" : "00b44f9670fedba887ad8e806226063e77604b27c362836326e93ecb7fcc6dc297", "shared" : "", "result" : "invalid", "flags" : [] }, { - "tcId" : 125, + "tcId" : 243, "comment" : "invalid public key", "public" : "3039301306072a8648ce3d020106082a8648ce3d03010703220002fd4bf61763b46581fd9174d623516cf3c81edd40e29ffa2777fb6cb0ae3ce535", "private" : "6f953faff3599e6c762d7f4cabfeed092de2add1df1bc5748c6cbb725cf35458", @@ -1216,10 +2285,10 @@ ] }, { - "tcId" : 126, + "tcId" : 244, "comment" : "public key is a low order point on twist", "public" : "3039301306072a8648ce3d020106082a8648ce3d03010703220003efdde3b32872a9effcf3b94cbf73aa7b39f9683ece9121b9852167f4e3da609b", - "private" : "0d27edf0ff5b6b6b465753e7158370332c153b468a1be087ad0f490bdb99e5f02", + "private" : "00d27edf0ff5b6b6b465753e7158370332c153b468a1be087ad0f490bdb99e5f02", "shared" : "", "result" : "invalid", "flags" : [ @@ -1227,10 +2296,10 @@ ] }, { - "tcId" : 127, + "tcId" : 245, "comment" : "public key is a low order point on twist", "public" : "3039301306072a8648ce3d020106082a8648ce3d03010703220002efdde3b32872a9effcf3b94cbf73aa7b39f9683ece9121b9852167f4e3da609b", - "private" : "0d27edf0ff5b6b6b465753e7158370332c153b468a1be087ad0f490bdb99e5f03", + "private" : "00d27edf0ff5b6b6b465753e7158370332c153b468a1be087ad0f490bdb99e5f03", "shared" : "", "result" : "invalid", "flags" : [ @@ -1238,10 +2307,10 @@ ] }, { - "tcId" : 128, + "tcId" : 246, "comment" : "public key is a low order point on twist", "public" : "3039301306072a8648ce3d020106082a8648ce3d03010703220002c49524b2adfd8f5f972ef554652836e2efb2d306c6d3b0689234cec93ae73db5", - "private" : "095ead84540c2d027aa3130ff1b47888cc1ed67e8dda46156e71ce0991791e835", + "private" : "0095ead84540c2d027aa3130ff1b47888cc1ed67e8dda46156e71ce0991791e835", "shared" : "", "result" : "invalid", "flags" : [ @@ -1249,10 +2318,10 @@ ] }, { - "tcId" : 129, + "tcId" : 247, "comment" : "public key is a low order point on twist", "public" : "3039301306072a8648ce3d020106082a8648ce3d0301070322000318f9bae7747cd844e98525b7ccd0daf6e1d20a818b2175a9a91e4eae5343bc98", - "private" : "0a8681ef67fb1f189647d95e8db00c52ceef6d41a85ba0a5bd74c44e8e62c8aa4", + "private" : "00a8681ef67fb1f189647d95e8db00c52ceef6d41a85ba0a5bd74c44e8e62c8aa4", "shared" : "", "result" : "invalid", "flags" : [ @@ -1260,10 +2329,10 @@ ] }, { - "tcId" : 130, + "tcId" : 248, "comment" : "public key is a low order point on twist", "public" : "3039301306072a8648ce3d020106082a8648ce3d0301070322000218f9bae7747cd844e98525b7ccd0daf6e1d20a818b2175a9a91e4eae5343bc98", - "private" : "0a8681ef67fb1f189647d95e8db00c52ceef6d41a85ba0a5bd74c44e8e62c8aa5", + "private" : "00a8681ef67fb1f189647d95e8db00c52ceef6d41a85ba0a5bd74c44e8e62c8aa5", "shared" : "", "result" : "invalid", "flags" : [ @@ -1271,10 +2340,10 @@ ] }, { - "tcId" : 131, + "tcId" : 249, "comment" : "public key is a low order point on twist", "public" : "3039301306072a8648ce3d020106082a8648ce3d03010703220003c49524b2adfd8f5f972ef554652836e2efb2d306c6d3b0689234cec93ae73db5", - "private" : "095ead84540c2d027aa3130ff1b47888cc1ed67e8dda46156e71ce0991791e834", + "private" : "0095ead84540c2d027aa3130ff1b47888cc1ed67e8dda46156e71ce0991791e834", "shared" : "", "result" : "invalid", "flags" : [ @@ -1282,10 +2351,10 @@ ] }, { - "tcId" : 132, - "comment" : "long form encoding of length", + "tcId" : 250, + "comment" : "long form encoding of length of sequence", "public" : "308159301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1293,43 +2362,10 @@ ] }, { - "tcId" : 133, - "comment" : "long form encoding of length", + "tcId" : 251, + "comment" : "long form encoding of length of sequence", "public" : "305a30811306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", - "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", - "result" : "acceptable", - "flags" : [ - "InvalidAsn" - ] - }, - { - "tcId" : 134, - "comment" : "long form encoding of length", - "public" : "305a30140681072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", - "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", - "result" : "acceptable", - "flags" : [ - "InvalidAsn" - ] - }, - { - "tcId" : 135, - "comment" : "long form encoding of length", - "public" : "305a301406072a8648ce3d02010681082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", - "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", - "result" : "acceptable", - "flags" : [ - "InvalidAsn" - ] - }, - { - "tcId" : 136, - "comment" : "long form encoding of length", - "public" : "305a301306072a8648ce3d020106082a8648ce3d03010703814200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1337,10 +2373,10 @@ ] }, { - "tcId" : 137, - "comment" : "length contains leading 0", + "tcId" : 252, + "comment" : "length of sequence contains leading 0", "public" : "30820059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1348,43 +2384,10 @@ ] }, { - "tcId" : 138, - "comment" : "length contains leading 0", + "tcId" : 253, + "comment" : "length of sequence contains leading 0", "public" : "305b3082001306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", - "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", - "result" : "acceptable", - "flags" : [ - "InvalidAsn" - ] - }, - { - "tcId" : 139, - "comment" : "length contains leading 0", - "public" : "305b3015068200072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", - "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", - "result" : "acceptable", - "flags" : [ - "InvalidAsn" - ] - }, - { - "tcId" : 140, - "comment" : "length contains leading 0", - "public" : "305b301506072a8648ce3d0201068200082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", - "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", - "result" : "acceptable", - "flags" : [ - "InvalidAsn" - ] - }, - { - "tcId" : 141, - "comment" : "length contains leading 0", - "public" : "305b301306072a8648ce3d020106082a8648ce3d0301070382004200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1392,10 +2395,10 @@ ] }, { - "tcId" : 142, - "comment" : "wrong length", + "tcId" : 254, + "comment" : "wrong length of sequence", "public" : "305a301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1403,43 +2406,10 @@ ] }, { - "tcId" : 143, - "comment" : "wrong length", + "tcId" : 255, + "comment" : "wrong length of sequence", "public" : "3058301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", - "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", - "result" : "acceptable", - "flags" : [ - "InvalidAsn" - ] - }, - { - "tcId" : 144, - "comment" : "wrong length", - "public" : "3059301406072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", - "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", - "result" : "acceptable", - "flags" : [ - "InvalidAsn" - ] - }, - { - "tcId" : 145, - "comment" : "wrong length", - "public" : "3059301206072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", - "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", - "result" : "acceptable", - "flags" : [ - "InvalidAsn" - ] - }, - { - "tcId" : 146, - "comment" : "wrong length", - "public" : "3059301306082a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1447,10 +2417,10 @@ ] }, { - "tcId" : 147, - "comment" : "wrong length", - "public" : "3059301306062a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 256, + "comment" : "wrong length of sequence", + "public" : "3059301406072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1458,10 +2428,10 @@ ] }, { - "tcId" : 148, - "comment" : "wrong length", - "public" : "3059301306072a8648ce3d020106092a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 257, + "comment" : "wrong length of sequence", + "public" : "3059301206072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1469,10 +2439,10 @@ ] }, { - "tcId" : 149, - "comment" : "wrong length", - "public" : "3059301306072a8648ce3d020106072a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 258, + "comment" : "uint32 overflow in length of sequence", + "public" : "30850100000059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1480,10 +2450,10 @@ ] }, { - "tcId" : 150, - "comment" : "wrong length", - "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034300042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 259, + "comment" : "uint32 overflow in length of sequence", + "public" : "305e3085010000001306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1491,10 +2461,10 @@ ] }, { - "tcId" : 151, - "comment" : "wrong length", - "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034100042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 260, + "comment" : "uint64 overflow in length of sequence", + "public" : "3089010000000000000059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1502,10 +2472,10 @@ ] }, { - "tcId" : 152, - "comment" : "uint32 overflow in length", - "public" : "30850100000059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 261, + "comment" : "uint64 overflow in length of sequence", + "public" : "3062308901000000000000001306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1513,10 +2483,10 @@ ] }, { - "tcId" : 153, - "comment" : "uint32 overflow in length", - "public" : "305e3085010000001306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 262, + "comment" : "length of sequence = 2**31 - 1", + "public" : "30847fffffff301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1524,10 +2494,10 @@ ] }, { - "tcId" : 154, - "comment" : "uint32 overflow in length", - "public" : "305e3018068501000000072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 263, + "comment" : "length of sequence = 2**31 - 1", + "public" : "305d30847fffffff06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1535,10 +2505,10 @@ ] }, { - "tcId" : 155, - "comment" : "uint32 overflow in length", - "public" : "305e301806072a8648ce3d0201068501000000082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 264, + "comment" : "length of sequence = 2**32 - 1", + "public" : "3084ffffffff301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1546,10 +2516,10 @@ ] }, { - "tcId" : 156, - "comment" : "uint32 overflow in length", - "public" : "305e301306072a8648ce3d020106082a8648ce3d0301070385010000004200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 265, + "comment" : "length of sequence = 2**32 - 1", + "public" : "305d3084ffffffff06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1557,10 +2527,10 @@ ] }, { - "tcId" : 157, - "comment" : "uint64 overflow in length", - "public" : "3089010000000000000059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 266, + "comment" : "length of sequence = 2**40 - 1", + "public" : "3085ffffffffff301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1568,10 +2538,10 @@ ] }, { - "tcId" : 158, - "comment" : "uint64 overflow in length", - "public" : "3062308901000000000000001306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 267, + "comment" : "length of sequence = 2**40 - 1", + "public" : "305e3085ffffffffff06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1579,10 +2549,10 @@ ] }, { - "tcId" : 159, - "comment" : "uint64 overflow in length", - "public" : "3062301c06890100000000000000072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 268, + "comment" : "length of sequence = 2**64 - 1", + "public" : "3088ffffffffffffffff301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1590,10 +2560,10 @@ ] }, { - "tcId" : 160, - "comment" : "uint64 overflow in length", - "public" : "3062301c06072a8648ce3d020106890100000000000000082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 269, + "comment" : "length of sequence = 2**64 - 1", + "public" : "30613088ffffffffffffffff06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1601,10 +2571,10 @@ ] }, { - "tcId" : 161, - "comment" : "uint64 overflow in length", - "public" : "3062301306072a8648ce3d020106082a8648ce3d030107038901000000000000004200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 270, + "comment" : "incorrect length of sequence", + "public" : "30ff301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1612,10 +2582,10 @@ ] }, { - "tcId" : 162, - "comment" : "length = 2**31 - 1", - "public" : "30847fffffff301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 271, + "comment" : "incorrect length of sequence", + "public" : "305930ff06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1623,10 +2593,10 @@ ] }, { - "tcId" : 163, - "comment" : "length = 2**31 - 1", - "public" : "305d30847fffffff06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 272, + "comment" : "indefinite length without termination", + "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1634,10 +2604,10 @@ ] }, { - "tcId" : 164, - "comment" : "length = 2**31 - 1", - "public" : "305d301706847fffffff2a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 273, + "comment" : "indefinite length without termination", + "public" : "3059308006072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1645,10 +2615,10 @@ ] }, { - "tcId" : 165, - "comment" : "length = 2**31 - 1", - "public" : "305d301706072a8648ce3d020106847fffffff2a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 274, + "comment" : "indefinite length without termination", + "public" : "3059301306802a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1656,10 +2626,10 @@ ] }, { - "tcId" : 166, - "comment" : "length = 2**31 - 1", - "public" : "305d301306072a8648ce3d020106082a8648ce3d03010703847fffffff00042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 275, + "comment" : "indefinite length without termination", + "public" : "3059301306072a8648ce3d020106802a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1667,10 +2637,10 @@ ] }, { - "tcId" : 167, - "comment" : "length = 2**32 - 1", - "public" : "3084ffffffff301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 276, + "comment" : "indefinite length without termination", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107038000042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1678,10 +2648,10 @@ ] }, { - "tcId" : 168, - "comment" : "length = 2**32 - 1", - "public" : "305d3084ffffffff06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 277, + "comment" : "removing sequence", + "public" : "", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1689,10 +2659,10 @@ ] }, { - "tcId" : 169, - "comment" : "length = 2**32 - 1", - "public" : "305d30170684ffffffff2a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 278, + "comment" : "removing sequence", + "public" : "3044034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1700,10 +2670,10 @@ ] }, { - "tcId" : 170, - "comment" : "length = 2**32 - 1", - "public" : "305d301706072a8648ce3d02010684ffffffff2a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 279, + "comment" : "lonely sequence tag", + "public" : "30", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1711,10 +2681,10 @@ ] }, { - "tcId" : 171, - "comment" : "length = 2**32 - 1", - "public" : "305d301306072a8648ce3d020106082a8648ce3d0301070384ffffffff00042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 280, + "comment" : "lonely sequence tag", + "public" : "304530034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1722,10 +2692,10 @@ ] }, { - "tcId" : 172, - "comment" : "length = 2**40 - 1", - "public" : "3085ffffffffff301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 281, + "comment" : "appending 0's to sequence", + "public" : "305b301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0000", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1733,10 +2703,10 @@ ] }, { - "tcId" : 173, - "comment" : "length = 2**40 - 1", - "public" : "305e3085ffffffffff06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 282, + "comment" : "appending 0's to sequence", + "public" : "305b301506072a8648ce3d020106082a8648ce3d0301070000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1744,10 +2714,10 @@ ] }, { - "tcId" : 174, - "comment" : "length = 2**40 - 1", - "public" : "305e30180685ffffffffff2a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 283, + "comment" : "prepending 0's to sequence", + "public" : "305b0000301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1755,10 +2725,10 @@ ] }, { - "tcId" : 175, - "comment" : "length = 2**40 - 1", - "public" : "305e301806072a8648ce3d02010685ffffffffff2a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 284, + "comment" : "prepending 0's to sequence", + "public" : "305b3015000006072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1766,10 +2736,10 @@ ] }, { - "tcId" : 176, - "comment" : "length = 2**40 - 1", - "public" : "305e301306072a8648ce3d020106082a8648ce3d0301070385ffffffffff00042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 285, + "comment" : "appending unused 0's to sequence", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0000", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1777,10 +2747,10 @@ ] }, { - "tcId" : 177, - "comment" : "length = 2**64 - 1", - "public" : "3088ffffffffffffffff301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 286, + "comment" : "appending unused 0's to sequence", + "public" : "305b301306072a8648ce3d020106082a8648ce3d0301070000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1788,10 +2758,10 @@ ] }, { - "tcId" : 178, - "comment" : "length = 2**64 - 1", - "public" : "30613088ffffffffffffffff06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 287, + "comment" : "appending null value to sequence", + "public" : "305b301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0500", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1799,10 +2769,10 @@ ] }, { - "tcId" : 179, - "comment" : "length = 2**64 - 1", - "public" : "3061301b0688ffffffffffffffff2a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 288, + "comment" : "appending null value to sequence", + "public" : "305b301506072a8648ce3d020106082a8648ce3d0301070500034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1810,10 +2780,10 @@ ] }, { - "tcId" : 180, - "comment" : "length = 2**64 - 1", - "public" : "3061301b06072a8648ce3d02010688ffffffffffffffff2a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 289, + "comment" : "including garbage", + "public" : "305e4981773059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1821,10 +2791,10 @@ ] }, { - "tcId" : 181, - "comment" : "length = 2**64 - 1", - "public" : "3061301306072a8648ce3d020106082a8648ce3d0301070388ffffffffffffffff00042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 290, + "comment" : "including garbage", + "public" : "305d25003059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1832,10 +2802,10 @@ ] }, { - "tcId" : 182, - "comment" : "incorrect length", - "public" : "30ff301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 291, + "comment" : "including garbage", + "public" : "305b3059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0004deadbeef", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1843,10 +2813,10 @@ ] }, { - "tcId" : 183, - "comment" : "incorrect length", - "public" : "305930ff06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 292, + "comment" : "including garbage", + "public" : "305e3018498177301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1854,10 +2824,10 @@ ] }, { - "tcId" : 184, - "comment" : "incorrect length", - "public" : "3059301306ff2a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 293, + "comment" : "including garbage", + "public" : "305d30172500301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1865,10 +2835,10 @@ ] }, { - "tcId" : 185, - "comment" : "incorrect length", - "public" : "3059301306072a8648ce3d020106ff2a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 294, + "comment" : "including garbage", + "public" : "30613015301306072a8648ce3d020106082a8648ce3d0301070004deadbeef034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1876,10 +2846,10 @@ ] }, { - "tcId" : 186, - "comment" : "incorrect length", - "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703ff00042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 295, + "comment" : "including garbage", + "public" : "305e3018260c49817706072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1887,10 +2857,10 @@ ] }, { - "tcId" : 187, - "comment" : "indefinite length without termination", - "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 296, + "comment" : "including garbage", + "public" : "305d3017260b250006072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1898,10 +2868,10 @@ ] }, { - "tcId" : 188, - "comment" : "indefinite length without termination", - "public" : "3059308006072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 297, + "comment" : "including garbage", + "public" : "3061301b260906072a8648ce3d02010004deadbeef06082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1909,10 +2879,10 @@ ] }, { - "tcId" : 189, - "comment" : "indefinite length without termination", - "public" : "3059301306802a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 298, + "comment" : "including garbage", + "public" : "305e301806072a8648ce3d0201260d49817706082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1920,10 +2890,10 @@ ] }, { - "tcId" : 190, - "comment" : "indefinite length without termination", - "public" : "3059301306072a8648ce3d020106802a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 299, + "comment" : "including garbage", + "public" : "305d301706072a8648ce3d0201260c250006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1931,10 +2901,10 @@ ] }, { - "tcId" : 191, - "comment" : "indefinite length without termination", - "public" : "3059301306072a8648ce3d020106082a8648ce3d030107038000042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 300, + "comment" : "including garbage", + "public" : "3061301b06072a8648ce3d0201260a06082a8648ce3d0301070004deadbeef034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1942,10 +2912,10 @@ ] }, { - "tcId" : 192, - "comment" : "removing sequence", - "public" : "", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 301, + "comment" : "including garbage", + "public" : "305e301306072a8648ce3d020106082a8648ce3d0301072347498177034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1953,10 +2923,10 @@ ] }, { - "tcId" : 193, - "comment" : "removing sequence", - "public" : "3044034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 302, + "comment" : "including garbage", + "public" : "305d301306072a8648ce3d020106082a8648ce3d03010723462500034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1964,10 +2934,10 @@ ] }, { - "tcId" : 194, - "comment" : "lonely sequence tag", - "public" : "30", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 303, + "comment" : "including garbage", + "public" : "3061301306072a8648ce3d020106082a8648ce3d0301072344034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0004deadbeef", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1975,10 +2945,10 @@ ] }, { - "tcId" : 195, - "comment" : "lonely sequence tag", - "public" : "304530034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 304, + "comment" : "including undefined tags", + "public" : "3061aa00bb00cd003059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1986,10 +2956,10 @@ ] }, { - "tcId" : 196, - "comment" : "appending 0's to sequence", - "public" : "305b301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0000", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 305, + "comment" : "including undefined tags", + "public" : "305faa02aabb3059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -1997,10 +2967,10 @@ ] }, { - "tcId" : 197, - "comment" : "appending 0's to sequence", - "public" : "305b301506072a8648ce3d020106082a8648ce3d0301070000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 306, + "comment" : "including undefined tags", + "public" : "3061301baa00bb00cd00301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2008,10 +2978,10 @@ ] }, { - "tcId" : 198, - "comment" : "prepending 0's to sequence", - "public" : "305b0000301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 307, + "comment" : "including undefined tags", + "public" : "305f3019aa02aabb301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2019,10 +2989,10 @@ ] }, { - "tcId" : 199, - "comment" : "prepending 0's to sequence", - "public" : "305b3015000006072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 308, + "comment" : "including undefined tags", + "public" : "3061301b260faa00bb00cd0006072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2030,10 +3000,10 @@ ] }, { - "tcId" : 200, - "comment" : "appending unused 0's to sequence", - "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0000", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 309, + "comment" : "including undefined tags", + "public" : "305f3019260daa02aabb06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2041,10 +3011,10 @@ ] }, { - "tcId" : 201, - "comment" : "appending unused 0's to sequence", - "public" : "305b301306072a8648ce3d020106082a8648ce3d0301070000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 310, + "comment" : "including undefined tags", + "public" : "3061301b06072a8648ce3d02012610aa00bb00cd0006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2052,10 +3022,10 @@ ] }, { - "tcId" : 202, - "comment" : "appending null value to sequence", - "public" : "305b301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0500", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 311, + "comment" : "including undefined tags", + "public" : "305f301906072a8648ce3d0201260eaa02aabb06082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2063,10 +3033,10 @@ ] }, { - "tcId" : 203, - "comment" : "appending null value to sequence", - "public" : "305b301506072a8648ce3d020106082a8648ce3d0301070500034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 312, + "comment" : "including undefined tags", + "public" : "3061301306072a8648ce3d020106082a8648ce3d030107234aaa00bb00cd00034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2074,10 +3044,10 @@ ] }, { - "tcId" : 204, - "comment" : "including garbage", - "public" : "305e4981773059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 313, + "comment" : "including undefined tags", + "public" : "305f301306072a8648ce3d020106082a8648ce3d0301072348aa02aabb034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2085,10 +3055,10 @@ ] }, { - "tcId" : 205, - "comment" : "including garbage", - "public" : "305d25003059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 314, + "comment" : "truncated length of sequence", + "public" : "3081", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2096,10 +3066,10 @@ ] }, { - "tcId" : 206, - "comment" : "including garbage", - "public" : "305b3059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0004deadbeef", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 315, + "comment" : "truncated length of sequence", + "public" : "30463081034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2107,10 +3077,10 @@ ] }, { - "tcId" : 207, - "comment" : "including garbage", - "public" : "305e3018498177301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 316, + "comment" : "Replacing sequence with NULL", + "public" : "0500", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2118,10 +3088,10 @@ ] }, { - "tcId" : 208, - "comment" : "including garbage", - "public" : "305d30172500301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 317, + "comment" : "Replacing sequence with NULL", + "public" : "30460500034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2129,10 +3099,10 @@ ] }, { - "tcId" : 209, - "comment" : "including garbage", - "public" : "30613015301306072a8648ce3d020106082a8648ce3d0301070004deadbeef034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 318, + "comment" : "changing tag value of sequence", + "public" : "2e59301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2140,10 +3110,10 @@ ] }, { - "tcId" : 210, - "comment" : "including garbage", - "public" : "305e3018260c49817706072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 319, + "comment" : "changing tag value of sequence", + "public" : "2f59301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2151,10 +3121,10 @@ ] }, { - "tcId" : 211, - "comment" : "including garbage", - "public" : "305d3017260b250006072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 320, + "comment" : "changing tag value of sequence", + "public" : "3159301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2162,10 +3132,10 @@ ] }, { - "tcId" : 212, - "comment" : "including garbage", - "public" : "3061301b260906072a8648ce3d02010004deadbeef06082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 321, + "comment" : "changing tag value of sequence", + "public" : "3259301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2173,10 +3143,10 @@ ] }, { - "tcId" : 213, - "comment" : "including garbage", - "public" : "305e301806072a8648ce3d0201260d49817706082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 322, + "comment" : "changing tag value of sequence", + "public" : "ff59301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2184,10 +3154,10 @@ ] }, { - "tcId" : 214, - "comment" : "including garbage", - "public" : "305d301706072a8648ce3d0201260c250006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 323, + "comment" : "changing tag value of sequence", + "public" : "30592e1306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2195,10 +3165,10 @@ ] }, { - "tcId" : 215, - "comment" : "including garbage", - "public" : "3061301b06072a8648ce3d0201260a06082a8648ce3d0301070004deadbeef034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 324, + "comment" : "changing tag value of sequence", + "public" : "30592f1306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2206,10 +3176,10 @@ ] }, { - "tcId" : 216, - "comment" : "including garbage", - "public" : "305e301306072a8648ce3d020106082a8648ce3d0301072347498177034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 325, + "comment" : "changing tag value of sequence", + "public" : "3059311306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2217,10 +3187,10 @@ ] }, { - "tcId" : 217, - "comment" : "including garbage", - "public" : "305d301306072a8648ce3d020106082a8648ce3d03010723462500034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 326, + "comment" : "changing tag value of sequence", + "public" : "3059321306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2228,10 +3198,10 @@ ] }, { - "tcId" : 218, - "comment" : "including garbage", - "public" : "3061301306072a8648ce3d020106082a8648ce3d0301072344034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0004deadbeef", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 327, + "comment" : "changing tag value of sequence", + "public" : "3059ff1306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2239,10 +3209,10 @@ ] }, { - "tcId" : 219, - "comment" : "including undefined tags", - "public" : "3061aa00bb00cd003059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 328, + "comment" : "dropping value of sequence", + "public" : "3000", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2250,10 +3220,10 @@ ] }, { - "tcId" : 220, - "comment" : "including undefined tags", - "public" : "305faa02aabb3059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 329, + "comment" : "dropping value of sequence", + "public" : "30463000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2261,10 +3231,10 @@ ] }, { - "tcId" : 221, - "comment" : "including undefined tags", - "public" : "3061301baa00bb00cd00301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 330, + "comment" : "truncated sequence", + "public" : "3058301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add6", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2272,10 +3242,10 @@ ] }, { - "tcId" : 222, - "comment" : "including undefined tags", - "public" : "305f3019aa02aabb301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 331, + "comment" : "truncated sequence", + "public" : "30581306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2283,10 +3253,10 @@ ] }, { - "tcId" : 223, - "comment" : "including undefined tags", - "public" : "3061301b260faa00bb00cd0006072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 332, + "comment" : "truncated sequence", + "public" : "3058301206072a8648ce3d020106082a8648ce3d0301034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2294,10 +3264,10 @@ ] }, { - "tcId" : 224, - "comment" : "including undefined tags", - "public" : "305f3019260daa02aabb06072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 333, + "comment" : "truncated sequence", + "public" : "30583012072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2305,10 +3275,10 @@ ] }, { - "tcId" : 225, - "comment" : "including undefined tags", - "public" : "3061301b06072a8648ce3d02012610aa00bb00cd0006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 334, + "comment" : "indefinite length", + "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0000", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2316,10 +3286,10 @@ ] }, { - "tcId" : 226, - "comment" : "including undefined tags", - "public" : "305f301906072a8648ce3d0201260eaa02aabb06082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 335, + "comment" : "indefinite length", + "public" : "305b308006072a8648ce3d020106082a8648ce3d0301070000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2327,10 +3297,10 @@ ] }, { - "tcId" : 227, - "comment" : "including undefined tags", - "public" : "3061301306072a8648ce3d020106082a8648ce3d030107234aaa00bb00cd00034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 336, + "comment" : "indefinite length with truncated delimiter", + "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b00", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2338,10 +3308,10 @@ ] }, { - "tcId" : 228, - "comment" : "including undefined tags", - "public" : "305f301306072a8648ce3d020106082a8648ce3d0301072348aa02aabb034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 337, + "comment" : "indefinite length with truncated delimiter", + "public" : "305a308006072a8648ce3d020106082a8648ce3d03010700034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2349,10 +3319,10 @@ ] }, { - "tcId" : 229, - "comment" : "truncated length of sequence", - "public" : "3081", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 338, + "comment" : "indefinite length with additional element", + "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b05000000", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2360,10 +3330,10 @@ ] }, { - "tcId" : 230, - "comment" : "truncated length of sequence", - "public" : "30463081034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 339, + "comment" : "indefinite length with additional element", + "public" : "305d308006072a8648ce3d020106082a8648ce3d03010705000000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2371,10 +3341,10 @@ ] }, { - "tcId" : 231, - "comment" : "Replacing sequence with NULL", - "public" : "0500", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 340, + "comment" : "indefinite length with truncated element", + "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b060811220000", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2382,10 +3352,10 @@ ] }, { - "tcId" : 232, - "comment" : "Replacing sequence with NULL", - "public" : "30460500034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 341, + "comment" : "indefinite length with truncated element", + "public" : "305f308006072a8648ce3d020106082a8648ce3d030107060811220000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2393,10 +3363,10 @@ ] }, { - "tcId" : 233, - "comment" : "changing tag value of sequence", - "public" : "2e59301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 342, + "comment" : "indefinite length with garbage", + "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0000fe02beef", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2404,10 +3374,10 @@ ] }, { - "tcId" : 234, - "comment" : "changing tag value of sequence", - "public" : "2f59301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 343, + "comment" : "indefinite length with garbage", + "public" : "305f308006072a8648ce3d020106082a8648ce3d0301070000fe02beef034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2415,10 +3385,10 @@ ] }, { - "tcId" : 235, - "comment" : "changing tag value of sequence", - "public" : "3159301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 344, + "comment" : "indefinite length with nonempty EOC", + "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0002beef", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2426,10 +3396,10 @@ ] }, { - "tcId" : 236, - "comment" : "changing tag value of sequence", - "public" : "3259301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 345, + "comment" : "indefinite length with nonempty EOC", + "public" : "305d308006072a8648ce3d020106082a8648ce3d0301070002beef034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2437,10 +3407,10 @@ ] }, { - "tcId" : 237, - "comment" : "changing tag value of sequence", - "public" : "ff59301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 346, + "comment" : "prepend empty sequence", + "public" : "305b3000301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2448,10 +3418,10 @@ ] }, { - "tcId" : 238, - "comment" : "changing tag value of sequence", - "public" : "30592e1306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 347, + "comment" : "prepend empty sequence", + "public" : "305b3015300006072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2459,10 +3429,10 @@ ] }, { - "tcId" : 239, - "comment" : "changing tag value of sequence", - "public" : "30592f1306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 348, + "comment" : "append empty sequence", + "public" : "305b301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b3000", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2470,10 +3440,10 @@ ] }, { - "tcId" : 240, - "comment" : "changing tag value of sequence", - "public" : "3059311306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 349, + "comment" : "append empty sequence", + "public" : "305b301506072a8648ce3d020106082a8648ce3d0301073000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2481,10 +3451,10 @@ ] }, { - "tcId" : 241, - "comment" : "changing tag value of sequence", - "public" : "3059321306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 350, + "comment" : "append garbage with high tag number", + "public" : "305c301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66bbf7f00", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2492,10 +3462,10 @@ ] }, { - "tcId" : 242, - "comment" : "changing tag value of sequence", - "public" : "3059ff1306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 351, + "comment" : "append garbage with high tag number", + "public" : "305c301606072a8648ce3d020106082a8648ce3d030107bf7f00034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2503,10 +3473,10 @@ ] }, { - "tcId" : 243, - "comment" : "dropping value of sequence", - "public" : "3000", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 352, + "comment" : "sequence of sequence", + "public" : "305b3059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2514,10 +3484,10 @@ ] }, { - "tcId" : 244, - "comment" : "dropping value of sequence", - "public" : "30463000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 353, + "comment" : "sequence of sequence", + "public" : "305b3015301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2525,10 +3495,10 @@ ] }, { - "tcId" : 245, - "comment" : "truncate sequence", - "public" : "3058301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add6", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 354, + "comment" : "truncated sequence: removed last 1 elements", + "public" : "3015301306072a8648ce3d020106082a8648ce3d030107", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2536,10 +3506,10 @@ ] }, { - "tcId" : 246, - "comment" : "truncate sequence", - "public" : "30581306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 355, + "comment" : "truncated sequence: removed last 1 elements", + "public" : "304f300906072a8648ce3d0201034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2547,10 +3517,10 @@ ] }, { - "tcId" : 247, - "comment" : "truncate sequence", - "public" : "3058301206072a8648ce3d020106082a8648ce3d0301034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 356, + "comment" : "repeating element in sequence", + "public" : "30819d301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2558,10 +3528,10 @@ ] }, { - "tcId" : 248, - "comment" : "truncate sequence", - "public" : "30583012072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 357, + "comment" : "repeating element in sequence", + "public" : "3063301d06072a8648ce3d020106082a8648ce3d03010706082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2569,10 +3539,10 @@ ] }, { - "tcId" : 249, - "comment" : "indefinite length", - "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0000", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 358, + "comment" : "long form encoding of length of oid", + "public" : "305a30140681072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2580,10 +3550,10 @@ ] }, { - "tcId" : 250, - "comment" : "indefinite length", - "public" : "305b308006072a8648ce3d020106082a8648ce3d0301070000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 359, + "comment" : "long form encoding of length of oid", + "public" : "305a301406072a8648ce3d02010681082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2591,10 +3561,10 @@ ] }, { - "tcId" : 251, - "comment" : "indefinite length with truncated delimiter", - "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b00", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 360, + "comment" : "length of oid contains leading 0", + "public" : "305b3015068200072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2602,10 +3572,10 @@ ] }, { - "tcId" : 252, - "comment" : "indefinite length with truncated delimiter", - "public" : "305a308006072a8648ce3d020106082a8648ce3d03010700034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 361, + "comment" : "length of oid contains leading 0", + "public" : "305b301506072a8648ce3d0201068200082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2613,10 +3583,10 @@ ] }, { - "tcId" : 253, - "comment" : "indefinite length with additional element", - "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b05000000", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 362, + "comment" : "wrong length of oid", + "public" : "3059301306082a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2624,10 +3594,10 @@ ] }, { - "tcId" : 254, - "comment" : "indefinite length with additional element", - "public" : "305d308006072a8648ce3d020106082a8648ce3d03010705000000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 363, + "comment" : "wrong length of oid", + "public" : "3059301306062a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2635,10 +3605,10 @@ ] }, { - "tcId" : 255, - "comment" : "indefinite length with truncated element", - "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b060811220000", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 364, + "comment" : "wrong length of oid", + "public" : "3059301306072a8648ce3d020106092a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2646,10 +3616,10 @@ ] }, { - "tcId" : 256, - "comment" : "indefinite length with truncated element", - "public" : "305f308006072a8648ce3d020106082a8648ce3d030107060811220000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 365, + "comment" : "wrong length of oid", + "public" : "3059301306072a8648ce3d020106072a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2657,10 +3627,10 @@ ] }, { - "tcId" : 257, - "comment" : "indefinite length with garbage", - "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0000fe02beef", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 366, + "comment" : "uint32 overflow in length of oid", + "public" : "305e3018068501000000072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2668,10 +3638,10 @@ ] }, { - "tcId" : 258, - "comment" : "indefinite length with garbage", - "public" : "305f308006072a8648ce3d020106082a8648ce3d0301070000fe02beef034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 367, + "comment" : "uint32 overflow in length of oid", + "public" : "305e301806072a8648ce3d0201068501000000082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2679,10 +3649,10 @@ ] }, { - "tcId" : 259, - "comment" : "indefinite length with nonempty EOC", - "public" : "3080301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0002beef", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 368, + "comment" : "uint64 overflow in length of oid", + "public" : "3062301c06890100000000000000072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2690,10 +3660,10 @@ ] }, { - "tcId" : 260, - "comment" : "indefinite length with nonempty EOC", - "public" : "305d308006072a8648ce3d020106082a8648ce3d0301070002beef034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 369, + "comment" : "uint64 overflow in length of oid", + "public" : "3062301c06072a8648ce3d020106890100000000000000082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2701,10 +3671,10 @@ ] }, { - "tcId" : 261, - "comment" : "prepend empty sequence", - "public" : "305b3000301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 370, + "comment" : "length of oid = 2**31 - 1", + "public" : "305d301706847fffffff2a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2712,10 +3682,10 @@ ] }, { - "tcId" : 262, - "comment" : "prepend empty sequence", - "public" : "305b3015300006072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 371, + "comment" : "length of oid = 2**31 - 1", + "public" : "305d301706072a8648ce3d020106847fffffff2a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2723,10 +3693,10 @@ ] }, { - "tcId" : 263, - "comment" : "append empty sequence", - "public" : "305b301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b3000", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 372, + "comment" : "length of oid = 2**32 - 1", + "public" : "305d30170684ffffffff2a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2734,10 +3704,10 @@ ] }, { - "tcId" : 264, - "comment" : "append empty sequence", - "public" : "305b301506072a8648ce3d020106082a8648ce3d0301073000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 373, + "comment" : "length of oid = 2**32 - 1", + "public" : "305d301706072a8648ce3d02010684ffffffff2a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2745,10 +3715,10 @@ ] }, { - "tcId" : 265, - "comment" : "sequence of sequence", - "public" : "305b3059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 374, + "comment" : "length of oid = 2**40 - 1", + "public" : "305e30180685ffffffffff2a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2756,10 +3726,10 @@ ] }, { - "tcId" : 266, - "comment" : "sequence of sequence", - "public" : "305b3015301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 375, + "comment" : "length of oid = 2**40 - 1", + "public" : "305e301806072a8648ce3d02010685ffffffffff2a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2767,10 +3737,10 @@ ] }, { - "tcId" : 267, - "comment" : "truncated sequence", - "public" : "3015301306072a8648ce3d020106082a8648ce3d030107", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 376, + "comment" : "length of oid = 2**64 - 1", + "public" : "3061301b0688ffffffffffffffff2a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2778,10 +3748,10 @@ ] }, { - "tcId" : 268, - "comment" : "truncated sequence", - "public" : "304f300906072a8648ce3d0201034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 377, + "comment" : "length of oid = 2**64 - 1", + "public" : "3061301b06072a8648ce3d02010688ffffffffffffffff2a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2789,10 +3759,10 @@ ] }, { - "tcId" : 269, - "comment" : "repeat element in sequence", - "public" : "30819d301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 378, + "comment" : "incorrect length of oid", + "public" : "3059301306ff2a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2800,10 +3770,10 @@ ] }, { - "tcId" : 270, - "comment" : "repeat element in sequence", - "public" : "3063301d06072a8648ce3d020106082a8648ce3d03010706082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "tcId" : 379, + "comment" : "incorrect length of oid", + "public" : "3059301306072a8648ce3d020106ff2a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2811,10 +3781,10 @@ ] }, { - "tcId" : 271, + "tcId" : 380, "comment" : "removing oid", "public" : "3050300a06082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2822,10 +3792,10 @@ ] }, { - "tcId" : 272, + "tcId" : 381, "comment" : "lonely oid tag", "public" : "3051300b0606082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2833,10 +3803,10 @@ ] }, { - "tcId" : 273, + "tcId" : 382, "comment" : "lonely oid tag", "public" : "3050300a06072a8648ce3d020106034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2844,10 +3814,10 @@ ] }, { - "tcId" : 274, + "tcId" : 383, "comment" : "appending 0's to oid", "public" : "305b301506092a8648ce3d0201000006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2855,10 +3825,10 @@ ] }, { - "tcId" : 275, + "tcId" : 384, "comment" : "appending 0's to oid", "public" : "305b301506072a8648ce3d0201060a2a8648ce3d0301070000034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2866,10 +3836,10 @@ ] }, { - "tcId" : 276, + "tcId" : 385, "comment" : "prepending 0's to oid", "public" : "305b3015060900002a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2877,10 +3847,10 @@ ] }, { - "tcId" : 277, + "tcId" : 386, "comment" : "prepending 0's to oid", "public" : "305b301506072a8648ce3d0201060a00002a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2888,10 +3858,10 @@ ] }, { - "tcId" : 278, + "tcId" : 387, "comment" : "appending unused 0's to oid", "public" : "305b301506072a8648ce3d0201000006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2899,10 +3869,10 @@ ] }, { - "tcId" : 279, + "tcId" : 388, "comment" : "appending null value to oid", "public" : "305b301506092a8648ce3d0201050006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2910,10 +3880,10 @@ ] }, { - "tcId" : 280, + "tcId" : 389, "comment" : "appending null value to oid", "public" : "305b301506072a8648ce3d0201060a2a8648ce3d0301070500034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2921,10 +3891,10 @@ ] }, { - "tcId" : 281, + "tcId" : 390, "comment" : "truncated length of oid", "public" : "3052300c068106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2932,10 +3902,10 @@ ] }, { - "tcId" : 282, + "tcId" : 391, "comment" : "truncated length of oid", "public" : "3051300b06072a8648ce3d02010681034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2943,10 +3913,10 @@ ] }, { - "tcId" : 283, + "tcId" : 392, "comment" : "Replacing oid with NULL", "public" : "3052300c050006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2954,10 +3924,10 @@ ] }, { - "tcId" : 284, + "tcId" : 393, "comment" : "Replacing oid with NULL", "public" : "3051300b06072a8648ce3d02010500034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2965,10 +3935,10 @@ ] }, { - "tcId" : 285, + "tcId" : 394, "comment" : "changing tag value of oid", "public" : "3059301304072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2976,10 +3946,10 @@ ] }, { - "tcId" : 286, + "tcId" : 395, "comment" : "changing tag value of oid", "public" : "3059301305072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2987,10 +3957,10 @@ ] }, { - "tcId" : 287, + "tcId" : 396, "comment" : "changing tag value of oid", "public" : "3059301307072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -2998,10 +3968,10 @@ ] }, { - "tcId" : 288, + "tcId" : 397, "comment" : "changing tag value of oid", "public" : "3059301308072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3009,10 +3979,10 @@ ] }, { - "tcId" : 289, + "tcId" : 398, "comment" : "changing tag value of oid", "public" : "30593013ff072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3020,10 +3990,10 @@ ] }, { - "tcId" : 290, + "tcId" : 399, "comment" : "changing tag value of oid", "public" : "3059301306072a8648ce3d020104082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3031,10 +4001,10 @@ ] }, { - "tcId" : 291, + "tcId" : 400, "comment" : "changing tag value of oid", "public" : "3059301306072a8648ce3d020105082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3042,10 +4012,10 @@ ] }, { - "tcId" : 292, + "tcId" : 401, "comment" : "changing tag value of oid", "public" : "3059301306072a8648ce3d020107082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3053,10 +4023,10 @@ ] }, { - "tcId" : 293, + "tcId" : 402, "comment" : "changing tag value of oid", "public" : "3059301306072a8648ce3d020108082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3064,10 +4034,10 @@ ] }, { - "tcId" : 294, + "tcId" : 403, "comment" : "changing tag value of oid", "public" : "3059301306072a8648ce3d0201ff082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3075,10 +4045,10 @@ ] }, { - "tcId" : 295, + "tcId" : 404, "comment" : "dropping value of oid", "public" : "3052300c060006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3086,10 +4056,10 @@ ] }, { - "tcId" : 296, + "tcId" : 405, "comment" : "dropping value of oid", "public" : "3051300b06072a8648ce3d02010600034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3097,10 +4067,10 @@ ] }, { - "tcId" : 297, + "tcId" : 406, "comment" : "modify first byte of oid", "public" : "305930130607288648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3108,10 +4078,10 @@ ] }, { - "tcId" : 298, + "tcId" : 407, "comment" : "modify first byte of oid", "public" : "3059301306072a8648ce3d02010608288648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3119,10 +4089,10 @@ ] }, { - "tcId" : 299, + "tcId" : 408, "comment" : "modify last byte of oid", "public" : "3059301306072a8648ce3d028106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3130,10 +4100,10 @@ ] }, { - "tcId" : 300, + "tcId" : 409, "comment" : "modify last byte of oid", "public" : "3059301306072a8648ce3d020106082a8648ce3d030187034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3141,10 +4111,10 @@ ] }, { - "tcId" : 301, - "comment" : "truncate oid", + "tcId" : 410, + "comment" : "truncated oid", "public" : "3058301206062a8648ce3d0206082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3152,10 +4122,10 @@ ] }, { - "tcId" : 302, - "comment" : "truncate oid", + "tcId" : 411, + "comment" : "truncated oid", "public" : "3058301206068648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3163,10 +4133,10 @@ ] }, { - "tcId" : 303, - "comment" : "truncate oid", + "tcId" : 412, + "comment" : "truncated oid", "public" : "3058301206072a8648ce3d020106072a8648ce3d0301034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3174,10 +4144,10 @@ ] }, { - "tcId" : 304, - "comment" : "truncate oid", + "tcId" : 413, + "comment" : "truncated oid", "public" : "3058301206072a8648ce3d020106078648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3185,10 +4155,10 @@ ] }, { - "tcId" : 305, + "tcId" : 414, "comment" : "wrong oid", - "public" : "305c3016060a3262306530333032316106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "public" : "3057301106052b0e03021a06082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3196,10 +4166,10 @@ ] }, { - "tcId" : 306, + "tcId" : 415, "comment" : "wrong oid", - "public" : "3064301e061236303836343830313635303330343032303106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "public" : "305b3015060960864801650304020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3207,10 +4177,10 @@ ] }, { - "tcId" : 307, + "tcId" : 416, "comment" : "wrong oid", - "public" : "305b301506072a8648ce3d0201060a32623065303330323161034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "public" : "3056301006072a8648ce3d020106052b0e03021a034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3218,10 +4188,10 @@ ] }, { - "tcId" : 308, + "tcId" : 417, "comment" : "wrong oid", - "public" : "3063301d06072a8648ce3d02010612363038363438303136353033303430323031034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "public" : "305a301406072a8648ce3d02010609608648016503040201034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3229,10 +4199,10 @@ ] }, { - "tcId" : 309, + "tcId" : 418, "comment" : "longer oid", - "public" : "3062301c06103261383634386365336430323031303106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "public" : "305a301406082a8648ce3d02010106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3240,10 +4210,10 @@ ] }, { - "tcId" : 310, + "tcId" : 419, "comment" : "longer oid", - "public" : "3063301d06072a8648ce3d02010612326138363438636533643033303130373031034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "public" : "305a301406072a8648ce3d020106092a8648ce3d03010701034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3251,10 +4221,10 @@ ] }, { - "tcId" : 311, + "tcId" : 420, "comment" : "oid with modified node", - "public" : "3060301a060e326138363438636533643032313106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "public" : "3059301306072a8648ce3d021106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3262,10 +4232,10 @@ ] }, { - "tcId" : 312, + "tcId" : 421, "comment" : "oid with modified node", - "public" : "3068302206163261383634386365336430323838383038303830303106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "public" : "305d3017060b2a8648ce3d02888080800106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3273,10 +4243,10 @@ ] }, { - "tcId" : 313, + "tcId" : 422, "comment" : "oid with modified node", - "public" : "3061301b06072a8648ce3d0201061032613836343863653364303330313137034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030117034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3284,10 +4254,10 @@ ] }, { - "tcId" : 314, + "tcId" : 423, "comment" : "oid with modified node", - "public" : "3069302306072a8648ce3d02010618326138363438636533643033303138383830383038303037034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "public" : "305d301706072a8648ce3d0201060c2a8648ce3d03018880808007034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3295,10 +4265,10 @@ ] }, { - "tcId" : 315, + "tcId" : 424, "comment" : "large integer in oid", - "public" : "3072302c0620326138363438636533643032383238303830383038303830383038303830303106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "public" : "3062301c06102a8648ce3d028280808080808080800106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3306,10 +4276,10 @@ ] }, { - "tcId" : 316, + "tcId" : 425, "comment" : "large integer in oid", - "public" : "3073302d06072a8648ce3d0201062232613836343863653364303330313832383038303830383038303830383038303037034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "public" : "3062301c06072a8648ce3d020106112a8648ce3d030182808080808080808007034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3317,10 +4287,10 @@ ] }, { - "tcId" : 317, + "tcId" : 426, "comment" : "oid with invalid node", - "public" : "3063301d0611326138363438636533643032303165303306082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "public" : "305a301406082a8648ce3d0201e006082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3328,10 +4298,10 @@ ] }, { - "tcId" : 318, + "tcId" : 427, "comment" : "oid with invalid node", "public" : "305a301406082a808648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3339,10 +4309,10 @@ ] }, { - "tcId" : 319, + "tcId" : 428, "comment" : "oid with invalid node", - "public" : "3064301e06072a8648ce3d0201061332613836343863653364303330313037653033034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "public" : "305a301406072a8648ce3d020106092a8648ce3d030107e0034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3350,10 +4320,10 @@ ] }, { - "tcId" : 320, + "tcId" : 429, "comment" : "oid with invalid node", "public" : "305a301406072a8648ce3d020106092a808648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3361,10 +4331,131 @@ ] }, { - "tcId" : 321, + "tcId" : 430, + "comment" : "long form encoding of length of bit string", + "public" : "305a301306072a8648ce3d020106082a8648ce3d03010703814200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 431, + "comment" : "length of bit string contains leading 0", + "public" : "305b301306072a8648ce3d020106082a8648ce3d0301070382004200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 432, + "comment" : "wrong length of bit string", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034300042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 433, + "comment" : "wrong length of bit string", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034100042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 434, + "comment" : "uint32 overflow in length of bit string", + "public" : "305e301306072a8648ce3d020106082a8648ce3d0301070385010000004200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 435, + "comment" : "uint64 overflow in length of bit string", + "public" : "3062301306072a8648ce3d020106082a8648ce3d030107038901000000000000004200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 436, + "comment" : "length of bit string = 2**31 - 1", + "public" : "305d301306072a8648ce3d020106082a8648ce3d03010703847fffffff00042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 437, + "comment" : "length of bit string = 2**32 - 1", + "public" : "305d301306072a8648ce3d020106082a8648ce3d0301070384ffffffff00042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 438, + "comment" : "length of bit string = 2**40 - 1", + "public" : "305e301306072a8648ce3d020106082a8648ce3d0301070385ffffffffff00042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 439, + "comment" : "length of bit string = 2**64 - 1", + "public" : "3061301306072a8648ce3d020106082a8648ce3d0301070388ffffffffffffffff00042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 440, + "comment" : "incorrect length of bit string", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703ff00042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 441, "comment" : "lonely bit string tag", "public" : "3016301306072a8648ce3d020106082a8648ce3d03010703", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3372,10 +4463,10 @@ ] }, { - "tcId" : 322, + "tcId" : 442, "comment" : "appending 0's to bit string", "public" : "305b301306072a8648ce3d020106082a8648ce3d030107034400042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0000", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3383,10 +4474,10 @@ ] }, { - "tcId" : 323, + "tcId" : 443, "comment" : "prepending 0's to bit string", "public" : "305b301306072a8648ce3d020106082a8648ce3d0301070344000000042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3394,10 +4485,10 @@ ] }, { - "tcId" : 324, + "tcId" : 444, "comment" : "appending null value to bit string", "public" : "305b301306072a8648ce3d020106082a8648ce3d030107034400042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b0500", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3405,10 +4496,10 @@ ] }, { - "tcId" : 325, + "tcId" : 445, "comment" : "truncated length of bit string", "public" : "3017301306072a8648ce3d020106082a8648ce3d0301070381", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3416,10 +4507,10 @@ ] }, { - "tcId" : 326, + "tcId" : 446, "comment" : "Replacing bit string with NULL", "public" : "3017301306072a8648ce3d020106082a8648ce3d0301070500", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3427,10 +4518,10 @@ ] }, { - "tcId" : 327, + "tcId" : 447, "comment" : "changing tag value of bit string", "public" : "3059301306072a8648ce3d020106082a8648ce3d030107014200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3438,10 +4529,10 @@ ] }, { - "tcId" : 328, + "tcId" : 448, "comment" : "changing tag value of bit string", "public" : "3059301306072a8648ce3d020106082a8648ce3d030107024200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3449,10 +4540,10 @@ ] }, { - "tcId" : 329, + "tcId" : 449, "comment" : "changing tag value of bit string", "public" : "3059301306072a8648ce3d020106082a8648ce3d030107044200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3460,10 +4551,10 @@ ] }, { - "tcId" : 330, + "tcId" : 450, "comment" : "changing tag value of bit string", "public" : "3059301306072a8648ce3d020106082a8648ce3d030107054200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3471,10 +4562,10 @@ ] }, { - "tcId" : 331, + "tcId" : 451, "comment" : "changing tag value of bit string", "public" : "3059301306072a8648ce3d020106082a8648ce3d030107ff4200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3482,10 +4573,10 @@ ] }, { - "tcId" : 332, + "tcId" : 452, "comment" : "dropping value of bit string", "public" : "3017301306072a8648ce3d020106082a8648ce3d0301070300", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3493,10 +4584,10 @@ ] }, { - "tcId" : 333, + "tcId" : 453, "comment" : "modify first byte of bit string", "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034202042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3504,10 +4595,10 @@ ] }, { - "tcId" : 334, + "tcId" : 454, "comment" : "modify last byte of bit string", "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add6eb", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3515,10 +4606,10 @@ ] }, { - "tcId" : 335, - "comment" : "truncate bit string", + "tcId" : 455, + "comment" : "truncated bit string", "public" : "3058301306072a8648ce3d020106082a8648ce3d030107034100042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add6", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3526,10 +4617,10 @@ ] }, { - "tcId" : 336, - "comment" : "truncate bit string", + "tcId" : 456, + "comment" : "truncated bit string", "public" : "3058301306072a8648ce3d020106082a8648ce3d0301070341042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3537,10 +4628,10 @@ ] }, { - "tcId" : 337, - "comment" : "declaring bits as unused in a bit-string", + "tcId" : 457, + "comment" : "declaring bits as unused in bit string", "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034201042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3548,10 +4639,10 @@ ] }, { - "tcId" : 338, - "comment" : "unused bits in a bit-string", + "tcId" : 458, + "comment" : "unused bits in bit string", "public" : "305d301306072a8648ce3d020106082a8648ce3d030107034620042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b01020304", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3559,10 +4650,10 @@ ] }, { - "tcId" : 339, + "tcId" : 459, "comment" : "unused bits in empty bit-string", "public" : "3018301306072a8648ce3d020106082a8648ce3d030107030103", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ @@ -3570,10 +4661,10 @@ ] }, { - "tcId" : 340, + "tcId" : 460, "comment" : "128 unused bits", "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034280042998705a9a71c783e1cf4397dbed9375a44e4cb88053594b0ea982203b6363b063d0af4971d1c3813db3c7799f9f9324cbe1b90054c81b510ff6297160add66b", - "private" : "0c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", + "private" : "00c9551ffe53ce60d73cbf8af553d0cb5f7632ece499590182c28cb6db2e3978d2", "shared" : "f0b6d851dcd8e9a8c474d695137962f082c4f2a1a2eefb182df58d88a72829e4", "result" : "acceptable", "flags" : [ diff --git a/tests/ecdh_secp384r1_test.json b/tests/ecdh_secp384r1_test.json new file mode 100644 index 00000000..9069ba0f --- /dev/null +++ b/tests/ecdh_secp384r1_test.json @@ -0,0 +1,4366 @@ +{ + "algorithm" : "ECDH", + "generatorVersion" : "0.8r12", + "numberOfTests" : 427, + "header" : [ + "Test vectors of type EcdhTest are intended for", + "testing an ECDH implementations using X509 encoded", + "public keys and integers for private keys.", + "Test vectors of this format are useful for testing", + "Java providers." + ], + "notes" : { + "AddSubChain" : "The private key has a special value. Implementations using addition subtraction chains for the point multiplication may get the point at infinity as an intermediate result. See CVE_2017_10176", + "CompressedPoint" : "The point in the public key is compressed. Not every library supports points in compressed format.", + "InvalidAsn" : "The public key in this test uses an invalid ASN encoding. Some cases where the ASN parser is not strictly checking the ASN format are benign as long as the ECDH computation still returns the correct shared value.", + "InvalidPublic" : "The public key has been modified and is invalid. An implementation should always check whether the public key is valid and on the same curve as the private key. The test vector includes the shared secret computed with the original public key if the public point is on the curve of the private key. Generating a shared secret other than the one with the original key likely indicates that the bug is exploitable.", + "ModifiedPrime" : "The modulus of the public key has been modified. The public point of the public key has been chosen so that it is both a point on both the curve of the modified public key and the private key.", + "UnnamedCurve" : "The public key does not use a named curve. RFC 3279 allows to encode such curves by explicitly encoding, the parameters of the curve equation, modulus, generator, order and cofactor. However, many crypto libraries only support named curves. Modifying some of the EC parameters and encoding the corresponding public key as an unnamed curve is a potential attack vector.", + "UnusedParam" : "A parameter that is typically not used for ECDH has been modified. Sometimes libraries ignore small differences between public and private key. For example, a library might ignore an incorrect cofactor in the public key. We consider ignoring such changes as acceptable as long as these differences do not change the outcome of the ECDH computation, i.e. as long as the computation is done on the curve from the private key.", + "WeakPublicKey" : "The vector contains a weak public key. The curve is not a named curve, the public key point has order 3 and has been chosen to be on the same curve as the private key. This test vector is used to check ECC implementations for missing steps in the verification of the public key.", + "WrongOrder" : "The order of the public key has been modified. If this order is used in a cryptographic primitive instead of the correct order then private keys may leak. E.g. ECDHC in BC 1.52 suffered from this." + }, + "schema" : "ecdh_test_schema.json", + "testGroups" : [ + { + "curve" : "secp384r1", + "encoding" : "asn", + "type" : "EcdhTest", + "tests" : [ + { + "tcId" : 1, + "comment" : "normal case", + "public" : "3076301006072a8648ce3d020106052b8104002203620004790a6e059ef9a5940163183d4a7809135d29791643fc43a2f17ee8bf677ab84f791b64a6be15969ffa012dd9185d8796d9b954baa8a75e82df711b3b56eadff6b0f668c3b26b4b1aeb308a1fcc1c680d329a6705025f1c98a0b5e5bfcb163caa", + "private" : "766e61425b2da9f846c09fc3564b93a6f8603b7392c785165bf20da948c49fd1fb1dee4edd64356b9f21c588b75dfd81", + "shared" : "6461defb95d996b24296f5a1832b34db05ed031114fbe7d98d098f93859866e4de1e229da71fef0c77fe49b249190135", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "compressed public key", + "public" : "3046301006072a8648ce3d020106052b8104002203320002790a6e059ef9a5940163183d4a7809135d29791643fc43a2f17ee8bf677ab84f791b64a6be15969ffa012dd9185d8796", + "private" : "766e61425b2da9f846c09fc3564b93a6f8603b7392c785165bf20da948c49fd1fb1dee4edd64356b9f21c588b75dfd81", + "shared" : "6461defb95d996b24296f5a1832b34db05ed031114fbe7d98d098f93859866e4de1e229da71fef0c77fe49b249190135", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 3, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b8104002203620004490e96d17f4c6ceccd45def408cea33e9704a5f1b01a3de2eaaa3409fd160d78d395d6b3b003d71fd1f590fad95bf1c9d8665efc2070d059aa847125c2f707435955535c7c5df6d6c079ec806dce6b6849d337140db7ca50616f9456de1323c4", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b81040022036200040161328909675213e32098d35a6b8308a8d500cca39dcee5e804e73bdb8deaf06fe417291fd9793b231ef5fe86945444a97a01f3ae3a8310c4af49b592cb291ef70ee5bc7f5534d3c23dc9eefde2304842c7737ae937ccf9bd215c28103e9fe2", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b8104002203620004af4ae964e3bcbd923accda5da3175d411fd62d17dd3c3a1c410bef1730985a6265d90e950ac0fc50743b1ed771906ff33b68cf4d3d83a885a87097fdd329ce83b189f98cec5be44c31d1a3a2bba10f471963232b8ba7610fa8c72179050eb86d", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b81040022036200041478ab6e032b9545eda9ac2c264e57a11f08acbc76d16a0ab77b04dbdaf20f215c4183437b32afc471eaa603d14c7c5d8a4c84ee0e895bec5c37f0a1ca075e106ff6bf38801b5c697409d39675231108d33c4a5ea65aaa8c03e939c95d96c4c4", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00000000000000010000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b8104002203620004f63208e34e7e90bb5fb036432467a89981444010663b8533b47bfa94bd2bc16f38aa516b930a4726e3876d3091bfb72ec783ed4da0cac06320817dc8bc64f59ccf06f48abc4386a150913fa95743a7b4601190e1c6ee8f8bf6354b254ecace45", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b8104002203620004033271ef42d92ad47b273b09ea2f45401161baa52696590d0e175ff2d1c0dfa3fea40e4266d446546c05e480d57fabec7889f16a8bcc176602f6d46561614a2f4284abe697b7cb9ce79f7e2e71b155cb1f155ce925d16391a680eda23152e6e1", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b8104002203620004737e8437e18683de2455b68945bba31daec3e754d72f0a0776d3192b2f9298bb95ca1464baa6687aabb679f804cf6ec6c2b4d47d61a60404df63b1e9ac0954b3419bbc2ad52a0409aeeb82f4703758588059165b20367dcb4b235b0caf71d727", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b810400220362000437f9004983156bbd9c47891e75237bb13016bd7fe6f4e0f71cef0e63f16a672f0d3b0e20165c33407e146b6a4ae6962dd3b57ccb99e7aaf1303240516d0ebe08e585513e3695d42c467dcab5340ef761990cadc8d8840aacc944481415c07feb", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "3b5eed80727bcbc5113b8a9e4db1c81b1dddc2d99ff56d9c3c1054348913bde296311c4bd2fa899b4d0e66aaa1b6a0dd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b81040022036200049655d8e5622718b317cfbc09894357f75a6b13fa516bcd6630721b869a620196cf0c3dec8860b32d27ed9bac2cf263af17321698116d7d811ae8da9b9cbbf9382c1e36e2b67d6c6af9bcea7d9de00ca72b398606c098a0a0f0c4b8941943ed65", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "6a99a5acd4a7edb1c707d7f8be12e81140338e3e14ba563c703c681a319a3f9ce1f90f032bf840f3758e89cb852ceca6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b8104002203620004ccb13d427b3c4bb33dd4f20cddabc68600eaf97eeb2c81e8c218ae90743e74ff38ca56f0c0224379db464dcf4a40f04350cd7a659b2c4851a5dcf8c990fc920c07d4d5aa50a2185750e6b84c42e83cff635050482decb4780f812e4c49fc7404", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "7c25a4f57f76ab13b25cab3c265db9d9bd925fecbf7bf93bef1308778646628decab067ed988a9755cd88e88de367104", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b81040022036200042664624307c02ef487030a632162c515f841d15ea3152d98ff2364232d7aab39343d5f703a4d5a31092aa7356c3a2f671c1cd603addfd8b5477552a3b32a18edaf3e33bec22ee2167f9da729636002a7974eaeb5ff082b2aabf8c7056b84c3ab", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "7fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b8104002203620004665f1f320b6ab1c1b52d144e52d87a154c2b4489838c9119de622c2d1b52b65b0a3955e44e0d4859175360c0f63dee813f14f69972f18caed7916c94a4d20ec344591e7536a4a7a4d8c9832818c96d60b1a81fabe64ea02c5f647e361bf5b60f", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b810400220362000491357ca87dbb08e85d7b1acecfd1e086078a82d19f81474da389364a39fe2543eb934b440173c38e61a1d9407855b5d89ef0d9e920764b6d7765b084cf9541dacc43d1dabaa390b0fb856097b0c00a8556f4e3848568ab4ae790c3d346ca01b6", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b8104002203620004d5a833bae33b2d10fdff6db7c5477adb614b191c70d97c6f130a14e93931cc1dc058053fee54a264a00fdd16d3166fdc42992276b79925bafcd183b03ed18235350980abfe67b814c6c11074c38f74cd4e734ad58cdb49d9fcd2181d1b8f1119", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "fffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000004000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b810400220362000467547cda7fbe8f16be5a4477cbb02979f1af72fc0f39302773552fbcf4667a8e23abc0e12856ee6234deeca5f22ae0503a4df7c068e7432417260cb9fe0d68b9c7fcf7e16a2ada05687d8f8900b84723103edbff0a42b27517da2760b7d38843", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "ffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b81040022036200041363e3b99008e09bb3f085949b9b6ea26a318f496de568a96630fdb9d4c72c2814df3087a1741f32f24989b428167f93c653cb3ae8c3ecfaec57efd54bb8ce9d79c7bf6cc70fb1114f939be8f1a99bf1e42b97431124ef9fa33450faa4e76839", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "ffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff0000000000000100000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b8104002203620004ba2be8d7147e2417c2ec80b24b4c1aa94464ffd0aae1fa2e078b3afbc77c144489ca9d064acbb7a9cfa6196d0f467b7e65ee1ca1eb1351ff9968f553dfe2e4c59ff8ba34c22a42b3baa13a9a1adc7f13abd40f1fd25d46bc5330852b9371966a", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "edge case for shared secret", + "public" : "3076301006072a8648ce3d020106052b8104002203620004d69850ccbacc4736ea200ff2f8488f26247945a2ab48dd3708f494b293d8cba83417f48974881c7fb03854089bbf66cc1c773ec03cb8cd5f007ec3b03bdd05a409b352103f0decf25b41673ab8ca3d04334babee01219f15701f2bca22d40b37", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "y-coordinate of the public key has many trailing 0's", + "public" : "3076301006072a8648ce3d020106052b81040022036200046fcaf82d982d222d6096ba83e55b1c7dcb71a41e88f323333f44284d95c4bd3616da7a1bef928f31c26f885ba7adb487826fde2ed9f5649c11cf8465f8bf8ad50f68914936fc39666f68219d066506bea4001fdc816c9a90e7e2afb19bea085f", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "000000000000000000000000000000000000000000000000000000001f03123b00000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "y-coordinate of the public key has many trailing 1's", + "public" : "3076301006072a8648ce3d020106052b81040022036200046fcaf82d982d222d6096ba83e55b1c7dcb71a41e88f323333f44284d95c4bd3616da7a1bef928f31c26f885ba7adb4877d9021d1260a9b63ee307b9a0740752af0976eb6c903c6999097de62f99af9405bffe0227e93656f181d504f6415f7a0", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "000000000000000000000000000000000000000000000000000000001f03123b00000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "y-coordinate of the public key is small", + "public" : "3076301006072a8648ce3d020106052b8104002203620004bfeb47fb40a65878e6b642f40b8e15022ade9ecfa8cb618043063494e2bc5d2df10d36f37869b58ef12dcc35e3982835fd2e55ec41fdfe8cabbbb7bcd8163645a19e9dac59630f3fe93b208094ff87cd461b53cef53482e70e2e8ea87200cc3f", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "0000000000000000000000000000000000000000000000000000000036a2907c00000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "y-coordinate of the public key is large", + "public" : "3076301006072a8648ce3d020106052b8104002203620004bfeb47fb40a65878e6b642f40b8e15022ade9ecfa8cb618043063494e2bc5d2df10d36f37869b58ef12dcc35e398283502d1aa13be0201735444484327e9c9ba5e616253a69cf0c016c4df7f6b007831b9e4ac300acb7d18f1d171588dff33c0", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75b14f5a6766da8035cc1943b15a8e4ebb6025f373be334080f22ab821a3535a6a7", + "shared" : "0000000000000000000000000000000000000000000000000000000036a2907c00000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b81040022036200040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003cf99ef04f51a5ea630ba3f9f960dd593a14c9be39fd2bd215d3b4b08aaaf86bbf927f2c46e52ab06fb742b8850e521e", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "6092a1757ddd43a04e185ff9472a0d18c7f7a7dc802f7e059e0c69ae16c802651719406e04de27652ff83da4a780ef2f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002732152442fb6ee5c3e6ce1d920c059bc623563814d79042b903ce60f1d4487fccd450a86da03f3e6ed525d02017bfdb3", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "89c804cb81443386b185bcd9e2e6c35ee6177c3b90298985c4e81a89d520cceb17d729540e56ecc343c26bf314f2d052", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b81040022036200040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000036660041b1c7984620e8d7fd7ccdb50cc3ba816da14d41a4d8affaba8488867f0ca5a24f8d42dd7e44b530a27dc5b58da", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "35513157e804bd918d04de202778b81a6fc7ad8aa541ee94116a0f18466725d75e71c6942bf044b1b0ecba19db33e0de", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b81040022036200040000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00000000000000010000000000000001141b9ee5310ea8170131b604484a6d677ed42576045b7143c026710ae92b277afbbea0c4458c220d561e69404dc7d888", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "102080c047881d19aefb01c29c82a4fb328a8ea6e6d6c914af73100507c8ee499799aaa646de0ea8c2727c0b5ed2439b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b810400220362000400000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff70370385413d3eff6fa3407ba24f682c2b01b51445dbdf5ef7b0dd0979f17e713e09081571f1e94dfb66bf282002f39f", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "f689f6e475b4e15162521acab4637a3cdb9cb42aa92f9114b0ee300ddae89d5eafff3463a1f5004a2a1bd4aeffa47b78", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b81040022036200040000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff112e191f1f78bbc54b6cc4f0b1e59ae8c6ff1a07f5128e41dfa2828e1b6538d4fa2ca2394c6aab3449dcb3fc4eb44c09", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "f3486244119b3632fd55be9e6951eb5d9c8c62f6a27042f94b924155ecfd4ff8744ba3d25bcf85a7b925bd28a12b897f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0008000028a4c8da5a05112fe6025ef41908969de20d05d9668e5c852ef2d492172ddc2a0a622fc488164fcc1a076b872942af2", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "8171b7c80d4c90bb58ae54393921ab9c5c0b3196f045e9fe5c8b168f0e5f6a77e1aa34ecedc5481ce55ab34c14e0f2e8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b81040022036200043b5eed80727bcbc5113b8a9e4db1c81b1dddc2d99ff56d9c3c1054348913bde296311c4bd2fa899b4d0e66aaa1b6a0dd7b7f0f28d55e2f3a50f1f1bef3976834a05b43418e979303bc0363ed16d2d0b4011cc37b3c06ad73154faeab7915cd87", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "1fe6fea5f00d3005abaae2267ff18e430915838d87909ab503885edf38be7618ecb321f0a4df71b0913fbf12c76fc1f0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b81040022036200046a99a5acd4a7edb1c707d7f8be12e81140338e3e14ba563c703c681a319a3f9ce1f90f032bf840f3758e89cb852ceca63cf99ef04f51a5ea630ba3f9f960dd593a14c9be39fd2bd215d3b4b08aaaf86bbf927f2c46e52ab06fb742b8850e521e", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "f58adc13ff997d38383910db7befb17670393a33d95b049c2aa19d760c8e728ecedd32168476b90b26a3742dcc121b07", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b81040022036200047c25a4f57f76ab13b25cab3c265db9d9bd925fecbf7bf93bef1308778646628decab067ed988a9755cd88e88de367104562ee0c57e71d96cefe31b4c4045bd4086a38e8ab9adf2d5567be318051d70f3aa68b753f271ab032b6abcce919e2962", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "56299684ec5ceb09ba4d94d1231005a826c9c08a5219c757e0136cbe8b6430badd4925172f2939891da7c7893850512f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b81040022036200047fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff80000040000024480ab33cb4bf7cb79c024eeade3fd641e2f3003698400e8986a7343a5da59a3b26eea4b4176e53239371437d834a1a7", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "1911a0ee6aebe263fdcf3db073f2598cdafabec2123a2f24a28c3d9151c871f32d6dc2f31d25af9c498fd68da23e5bef", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b81040022036200048000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020797da4c0751ced16de80d16ab7c654a5dc27d092626d0865a192a1c5ea7c1b88c9fcab057946741e41cc28c80ec0b9a", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "15900643e2e0583976974b05f83c7a96611425f7c4a6eb51916ab958a037fd9cc172bdcfff4540a2ff3ce64e6505557e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004fff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff6c70898ae6fb31fa2f086562af2d10486ba4c6fd5e41dfe4aa61598b4707a3bc276a62feb1b98557e3b17c025f7adf4e", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "88a544a769d5c34a051416bd509dfac911863f604c83ea844bf0e4c5c272dec86d057a88b152a9274701938c705900c3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004fffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff00000040000000eb1592858b6e6e3a199c0f3e7c5f0b4a92915936efb8bc0407680eb7274be7422156ce8cfc8b505b2d902c39992380f", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "b7db26b286e7527cb1f454782fe541862ff0f8d7eed960e22855deb7ac2a69611668c777c53bb74c2bcd40edfbf7944d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004ffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff4987abae412809c2fa48fd23b1bdf9e622f5a606c44117215ffa61b18ef46e54a7fbbf11f9a6ba59c991b4ae501fedce", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "b1e8aab1aa633d98dc6b768594e1e3edb801a9ef483f287c83e19744d2ad343ad3debdc4dc178213ad6876b52284f552", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004ffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000001000000000000013691fe493d4d28bf8ee1dfec812d6c306eae0842919eda6dc525f0d49ac2d26a992251912139a2936849f9d6fa949a68", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "b0de006f80f6f89e4eea6e46dfe305153005612d1e903171ec2886230971961b5202a9f3187bdac413ac24c836adf7a0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004ffffffffffffffffffffffffffffffff00000000000000000000000000000000ffffffffffffffffffffffffffffffff615842aa06b06f78f0a66f7bea88d4b6ee59653eeaa00dc5e0a2b658f969b71af90c9b4e96bd3ca33846955bdccbd359", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "ca8cfa42c5e374914c14d6402b1a99208e47e02ec49818913694ea0822a2cc6c310259a8f3ab7559b9974bc4c2fa337e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe732152442fb6ee5c3e6ce1d920c059bc623563814d79042b903ce60f1d4487fccd450a86da03f3e6ed525d02017bfdb3", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "edf040bace18d90bf9ce720df2a3b31d76d95b7ed9530a159ac0b24e82a871033eada40552f9e606f7115e6a78927511", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000001f03123b0000000000000000000000000000000071bd1e700c34075c3cade8ce29d33724af68a7672b265a4e157055360440ab7c461b8e9ac8024e63a8b9c17c00000000", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "ea817dff44f1944a38444498f1b6c1a70a8b913aa326bc2acc5068805d8ddd7a5e41b8ee5b8371a1cf3f7a094258e3a6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000001f03123b000000000000000000000000000000008e42e18ff3cbf8a3c3521731d62cc8db50975898d4d9a5b1ea8faac9fbbf5482b9e4716437fdb19c57463e84ffffffff", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "ea817dff44f1944a38444498f1b6c1a70a8b913aa326bc2acc5068805d8ddd7a5e41b8ee5b8371a1cf3f7a094258e3a6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b81040022036200040000000000000000000000000000000000000000000000000000000036a2907c00000000000000000000000000000000000000007f57b69a014783dbfa4967b2f9cfa678a6f0b6e9cfd41648cec5b3c498e72152da3f82d3da2e8e9f8ef37b11", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "bfa93e184f76279fd707d53ddcb3628855cfafb111bcbd0b4df6ef77aee624924d681626a153fa4e59c923b71fc090b3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "edge cases for ephemeral key", + "public" : "3076301006072a8648ce3d020106052b81040022036200040000000000000000000000000000000000000000000000000000000036a2907c00000000000000000000000000000000ffffffff80a84965feb87c2405b6984d06305987590f4916302be9b7313a4c3a6718deac25c07d2c25d17161710c84ee", + "private" : "2bc15cf3981eab6102c39f9a925aa1309db59c2c02a54411928d73c3945d157848dc36959efef7495c8528ea284c1c97", + "shared" : "bfa93e184f76279fd707d53ddcb3628855cfafb111bcbd0b4df6ef77aee624924d681626a153fa4e59c923b71fc090b3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "edge case for Jacobian and projective coordinates", + "public" : "3076301006072a8648ce3d020106052b8104002203620004fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe732152442fb6ee5c3e6ce1d920c059bc623563814d79042b903ce60f1d4487fccd450a86da03f3e6ed525d02017bfdb3", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "c3d38450a5dfdbe64f4b5da3add4ac1315f87d11720f29beb6f3616a65ebca1d569c0fae5c5bbb6d146bf9103e645b9f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "edge case for Jacobian and projective coordinates", + "public" : "3076301006072a8648ce3d020106052b8104002203620004183c0d3650d35a33423c0d00896aa0af9f340217f42086ba51203d158a60fa91ee83b52034ee6167c6593ce67a31c38a20813d9e7eea718d46485650420366dcc1cfdb5cde93eab28308def758ba4c3ba386139d4a3a3bdad64c54192f2bde32", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "18150961859e3efad6267582f97417f19ed8e7e537b692b91050944a6fab8030411dd92e941357c7494af0118840a614", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "edge case for Jacobian and projective coordinates", + "public" : "3076301006072a8648ce3d020106052b8104002203620004ce5ad811e7eb08024e40e30c1cb29cacdfc8f809f7f0110e6b225c6d8336f60c30a573ef1b912f5fd300b0615e9fdf1f631ba974beb9544b4a8c9945f72f3e5fc569438c4303672279fafa900e53690aff753da92f400ab62de8067da99fe37b", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "cdfc9463af891682c51b6f4c9656551c33b80739f177612f27a4b1f37c97fd8023495b0bc15c688ab19b7f9880efc8c5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000442faac2ae2bbad43a6e45a796f1dcc70cac444ec1570ac769d6e86207443db8c03a33ba07862fcc619cec806ce8826c2776e31dd086c1b19323b58084553bb0825d091ffb123d265afa5970cb72c2e6804ab327834299641e70ff14291975bb1", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "bee46c5518e8e2f5c7fa23f2ab8fc43f5a7419f70373daa1a674630b161ea39c381a1eaaa90efd34aefa9ac6edb53c75", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200046ad66f673d832f8a86cfd7a66d216d23a26583235c28ecb7b598ff8dd1132bc6cf0dc46a98c864665f195a996563e57770aaaadcbf36531a318da95120d9a800226ac9fbff06f47837911c7b95f5187c43ef959a4ea3e117b847f1dd1f8cc4b2", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "1ef2e485531e26d69ab7c7b8c27c1b4be152728961875681042683678c7bb4ef8b59c7c1d62adb5f034bb2886ff691e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004f842e8f47151949b5cb6cde4acc7a83d901173ae316ec423e1c966c8a39638ffa6def3160f7bea664982b9636f639f72702fe1d593454f73d06050655e28ecb8cfdfe13dcc7752bde38fe0070b43bda5e6b7203b45077471825df1b816a428c9", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "a8573b49006362d9b7363c502969b2233b2fc5730cf575d414c50a45f0a5b4d518bd450288c89e81d5171efadbce59c5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000464e68d8a8e6d44142fd0b3353275df4be95b0ff9465d114a18ff238fa4d3947ff4e3fc66970d85731d784b0a17157887cb961cf636c0e8d4b5f8db0060c2b699ed750e92a05ac4da49780b8a48729c6c2b866c75754afb2c7c2d661ecf640cc2", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "33f9aa308445cdc2d159cd39c33b495382ff8b9e21b6d1b160577a4b3c5daf00b8dad3c83852f18f27a4402ce94421ee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004237e5a05a3b9dd16f27d1cc04d16f19ec3d27881b90c2049fd2665cec7eaae1cacded4e0f8abba5a64d4183a71449d9b741073dc2594d02ac9a88988e51d7bee22111962f63748efdc8c311f631ae8680c8996028da4e956ac1284d0c01614f5", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "ddf7fea52b92e1544fb1c7ce2274409bca1704f44bc0ae1a6a8b388eaf316c90bce99b0c203f7556e5baaa26c6b7ad6d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004810face99512bec259d575229d9586791bdfb1b221d23c1738e4f9af0498f54b18cc0cbb01b64cf3411ec4b68480db6d6c06e6209188f354323b4db6f54f2b1dfc5c1c3dd4fef0cb379a7d7ea085acdac9e60e04f8db488be97f81ded66ea33e", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "d2287ccb642a76e001124dba6c6ce19e82536690abf542104cbd45c8708e462d8ce06e05ad2a0fea4d68492fcf376afe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004f0b00271a2bdde4bddbdac00406adf056d32b9b03f4bd29cc66093df22e5da09fe48cabfc8d44bf136b5be275c7f53f66ccdd0d00354a307fea0091070b61fa9e2da1e2f329fad68013449ecf477fe33458039bac911104da62c29c08192a315", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "36151b0d1c1b28ac062e0829f41bd55044dae6f1daf30ab3ff4148a83ccbccf507bef7340c9544f047f554c71272ae24", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004f82cbbaf1c9b6063a1b505580766b1446b6b5a990151703e7afd8a3175387fae567081019e0fdba7964ed6c0e4d0e45ecf379bc1eda30ce4fa560106b3d09bf38e9fcbec3eadc9e12c5622c01130c870c6136498f52bf62f3987defd294df33c", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "2451fd979864169462a77d742adb6f4505f2db956d2d2dea5b05e40f40f2654fc17d1cd1d3b353322bf0d1f3cf828c49", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004ccec117025eece29e0ed077d98678738fd1a5cca20e40bb322a40566831243dac806555b8508f4eaa68beb4e78ed917686415f11232c5ecb9f805b0dcc6ce06b57fdf4e4ae4e6d822472d6725a9c1da41c2fee1519586c502bbb1a4ce2582863", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "0b3c06fb8c7c31a96fa6dc80250143e39af9e5c201fdbe92245771e345cf787f99234ecc1d6870599ad50a1cadf687e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200041e829bdbd8a2c1321d04932aacd42972f5b2ac5b6a61b041216ca9481bb0da8abf6d5c1b63e868479f88d91345cb9153fca2c5698fd5b404c9bc125bdc3c608fe385367ee2b68408e959b83ec8bc3ec1e05a6fb984fedb256574885f5dd98940", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "5388905aee7f826b9a5b46faeffe26d49f8566c7a8e8af5a1653fcfbff7c0dfde566f043401248486ff91c390f5cc6ed", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200044dd1e1b454814f3be1c62eb87c120772c2062a3d7e5461d5554b3963a9fb1190db965695caf555a45ae25be73e47c3745baa93fe2bfb094fe718c8c9bd8e1e6e86cd629dca0bb91ee934e93469d4fff32a41dfd78c27ba534a3d5970c388effb", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "b920299ba26075d2647ccb978d15a54ef48330db3a8794d868ae02bf152b3c24ffa966893ea9eb5d3cce83e0239be02c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200049471abf4fd1b89d14df2325cb0a6bc92e73c8ec8e06c47b0978d93e9225adf089d3ee4e25c222b60d02199c1b58004c1d1b35bc1475cfcf3e3a6116593e2ca5a70344127ad907a4aa1d0c66139f287a7fe48cea5844a20df5a688b89211f19c3", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "705421b36618115fccb7ce6db8575fc4b3f0a2780ce02a3487e4055dd0d51834006270e992e0afaa4c7ce0f699f7fea2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000497046c4438b040315be39ee3869f3e8711c3196758476f2b4d90cd4399665c8c5c87f9cf64289c2bb01166742e1ae036b281922e8872b48b7d3e1384ab4d0a92c602ace7df3a93a47dc50c8c2e5e8a875d2d927f7201ce11fd8df812baa1e4f8", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "3c510006f8658f3fa414fef9723d634a179db7aaf0b7068b7696cff93f88e04136dfdac68349781bf05a787ae19e9021", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200048e3dae500fe2c645aab15379170682503154af1fd0a21ffd2e34f0501c518507e0ebf45d7cb8653fd57bf1f894f2a552cb69af7e009d43bd6e688bf28f5e2815f3c9f4fab1d829d29f05312bad99d75c2518d2a301a74d5ecee1333582d79c14", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "248967afa36386cfeaa2214847c7c8c32a891a2438b83665f99e5fe7ab6dd86353ff7a8b15d4be4e1277c721d69cbba7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200041fca8f9695650a02d6fb8049b1531a3783e449df75a98d45999fb9857c3e756219d48b2c84d5143f08c2ab097b365a3345aa197e10c659d9c53fa754f112d77973107ee35c3aee3b0b1322b362fa08497c097c1881934e36cebd5e18e9240cb6", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "a454ff4d944587a188e7ebaccd97649ab0cf83f8f8d19b3653a2e621206d3992868b5a5765d1fa762f0e3b0161a6809b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004731ba784e2ed21f4a4a2b4dd4877aec2fcd59031f80193b9558bbc1cf7fe6704469443fc7f398e8bec4086f88aa76aa26c389acfd51f69c89a153bfadb5d703a36cb12a4d85f5517cf462bf5d02abf7d19722f480eaf1a2617cba1941e1c76b6", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "99780ed215dc417f798c24327c3caf22f3685e5cf2ab835fc54b428117b7d17f0feb63f1755468157f3237b8117dffa6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200048725cb754b5527a3b053d63e0c4b097e4c34c5d731ab5cd4728650a618b4ded4bf9214d793ad74cfc470e35c5493a4b420a3c50049a42791721bc50d5f608cb272b60a5545db0608855bac8fbfa93990d6b80e3041773e10937d837010cae640", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "d738b7373fe978f27b194f69edd5c421b98922f5e313b76859a9357a1faf42ed0e06dc13d55843357538ce7f4127cee1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200049c7a594eaf2ddf3c8ab6c6e94f1ec011dac9fa42bd27df2fbe402ac949d3a2c676b684a24c99f7d1b7e89e9f8a0634eb3b83095c7a1cd6aa9332460ecbf257f7afa449608b9e0ddd15292b875ad2fd069dc927ce00a4b5e679338023bd3a4e6c", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "d9cc861db305b04a273d6b55348ef9f0a0a2aedf8b3d041a19e263ed6ae2e01e439a46823098f2aaa4867d4f08891e36", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000421b1aa359d72ff33a84ec9621483e65881d4fa8ce6df3669e0abbb9f6bf8d0ee3d9862a7dfb45213e39ffac7b3e1ed871f5e59cda5a5b861ab3eb86caa7c6e85933676efe660dff8ac5625ec8a7630a9cba9eb3fc149d3ef379d4a5ec174d237", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "c59281d09f44f679294aee5668eb538d503ef25aac591614b46f525d8c0b109ab129674963500ad7b6268941a28c0067", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e1ad2b68fa69456574de95b1e048b0715009409ef5cc270be51fdd40b4f65b1ade67938a6a6d725b01310f2253a38cf444f726b3eb5c5ddc257d6d9bda9bfa60bec6a07fe07dae967511314370d3a4e041c34f1cb49fe6b70663f020488e98a8", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "9eb70f8949861c30f2456990abe4d345550008b8531901521361aaa17296dbca06fb3c87e8f4592b7dc5d1997c58c076", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200040bad67ea0cca960ed3ea0588d5eeef366c24342ab3e46602891d1adb4d85d80dd242962c5654bd6af5913aeaefab27ad9a07b4197180c9869af795f696fdf6f25cdc66469f4ca7ca89c5c904636d85f6b9a19e7bcf0540831ca7aa40446dd8e1", + "private" : "00938f3dbe37135cd8c8c04182952f6e6f9bfe7a4cff4eacf90612a48865dc43e9b5d230f761d1fc4dfb69be20e84ccc8f", + "shared" : "45b02fd4dd76496701be3b37e632056cf7f63e9808f627fa858eecc5bac16a01a949741b4de151fe35e774c6d1e389e2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200042c4069bc8078236eb23a8c4d575bde9b537b13b79989688c40d89d898a8c29bd7ac61745797b7ee55aca60ea7d6c2a8430fcfbed18a2504661e0253c43e47be01940e81fcb2d65a5e501111978059949c5d25b0b60de7821476b88a8342a0bdf", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "6ce9bffb8901baa801d1b19e92b5e5f47f5bee10c15fe44b8209977572cc8bd7902ccfc0d7ae98f6b58bb87f316a5792", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000444bc1cb2d42ff974e72bc883dff784e86978501f918eef4d96d6e5242da6f5651a29cf5205c3dc3be33332fa2defc34788f88f549ed78732063020dd3fcb872515b25e088700e3eacb925de767e9edf6e89f089c4f9e0f4d8846980393667f6d", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "c6dd2d372d5a5173ac63f6d5ab5dec972e8ae44d566c7f826beb7f2693e200c470ddedb1c9929c11ed86d135f44c979f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004b824eb72c43edb5b3ce9af94ebbd33b446b4a7233b89affe1cfa3beb53cd199fb119a356772bfec178c03b077df12f53f99851fbeb9971ffcf29ad61ba484bd0580036dcaa59f407bc88a471cd862b80a163c91a6f64602b6f713959b2f6c2fd", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "0299b7fc3e5506926fea66d20f65b9791fb6c88c7179f7d4701d68c13427ab56ac0f9e1da96c1d5f3d1a65ff3122c153", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200049270b8cefb61a5d52fbb5e6b3b62361f3afa5d1a6b01419db9266e2dbabab36aea5b1961318eaf8f0bd7cca75ff2df5b7e538c63012a73f777b25e1737d44fdbc299a76288d7bcb57c8484c71c9bb6453245f239b6c6df32898424383b4c0309", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "13d78b7a4daf8ddd62e347ba235c36486fb2eb4a75a3e17a137ec6c2de37abaf45da92d1cf1b2966ded8d5381fd2319f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000419e5c28657479eb41d3718f63e0678be0daa58502a5406d65913567df7b86ab25e905ec846789530d81d8d1fc2a8cade4aaf131a0ccfc79a24bc889c953249ee85b49e2a1bfa52167fe20de296e6497ef9014c2cd0a02afbad1f9d00ac3d924d", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "7b0863fc6d72c4bd058576cff7a4aedf86482d3d9bc9c5fc55bd8fac84107dd0bf9f27d7e8d624edb0aa6ef1b9cc2246", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000459666df447dabc386d8dddae93543dc76151f7c1c04858660d9ca8e0655b51a72feffb7085bacbde153fea75b5716ab5c3c7811d0c7435be9e36db00cd29c6ca879ef991adb157a6b4bf56e3de5cb34598b79a684cc3d4e23f22d10063e8d19c", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "fba2bdfb54e468a4ff5afbaa54c7037400d76414c98eafaa419adab0df50c9692aac67d44a9efbd00d4f9cfc206d537b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "edge case for Jacobian and projective coordinates in right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200043bafce9b32616f3bde17fc989f1e556f92faf5c30e2cddebc2aba44edf36ae3957c9c610a34521e6ac454652aa597811827b4ff45f991f9405f2d8cf45d5d0876a260ef0deb6e86090c5b45f5b7b1786105324f40a0d2b43ded57868b38b43ef", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "ba9b68d1c00aa1246edafb70db6ddaed8570c465d9a5836d4156a1ac7fda2a209c25471a0df6d7de93f980c89c841620", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "edge case for Jacobian and projective coordinates in right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000453385b9303d2c5d1ea83e7700b3e811a7c905d1775c379a44e9e5c96821559700b492ee2868c5a01950aa4e2b05932ee8fa1bd83035aabbabc2be7b61f388f78b8046d36bee99b5489bafb3a86dede29c14d5373ed9bac72a92ab8e7c31fb86a", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "33c6c7e2c805889caae5679aa024dd79f54456f798eff0a0ddcc1b28d8ad302d2f67092275ff55f8f4d99357ac86ce58", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "edge case for Jacobian and projective coordinates in right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200049ebf8d313da3e5ba237ee33e6dd5be770390f837c9528fbdd440a9eb2ba1cffb27837d865cbe1b32ff9c7995d5dd511caa4125ec258d182ee7f7173ca1d17139ae13e6072acd970ba56f6d5034e9f45da36b2ec774349be2168f32bbf04f9a31", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "0deeb01decaae0eee55e2c29501cdd9cf7d4db2f1679fb72efcaa5db6e05cc4a658480245c59fec9984c613501411b0a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "edge case for Jacobian and projective coordinates in right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004d4cd22e8dfa620ca7d68e290451b09285298a1db5a7ca00ea830d6e9ec9cc4d03f5cd43fb2a9aaaa142fe4c6e2269cdc747e0ca07e38f4c5b412e52cb7930c381100d2aafe54b619ebf72e81a46e1149635d25a37fa66e2d1bc9ac25fc1a83f3", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "d360753c568698d7f7b261dd2f5064ffc8aa9f03343a2291b967632646d51570562f1ae87775648e74f9f30e966e7380", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "edge case for Jacobian and projective coordinates in right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000421b91b9c374ecf5cedc6d73422c6539b22ae5db61bfdb06b9c89e68112f6433e9d49715f474534fb9cd6c2cbfcdef94fb5d4fe306d59025af4e88f8cb3ddc3d64f707e6820b41cdfc055cd6762da23de01c1b311f1a5bf7010c4ff4ed0a7e84c", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "596af71209cdd23c386bb861edbd171ea9bc6a858993110c9333a956b3a03fc0f55393ca46bb15bcf9f12b496459c4e6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "point with coordinate x = 0", + "public" : "3076301006072a8648ce3d020106052b81040022036200040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000003cf99ef04f51a5ea630ba3f9f960dd593a14c9be39fd2bd215d3b4b08aaaf86bbf927f2c46e52ab06fb742b8850e521e", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "96876e9ed89edf3e3dfd8ead06dcba0acdce7763eb98aded82976fa36181c79ac4e833df385af5ee860ca1f20df4cb72", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "point with coordinate x = 0", + "public" : "3076301006072a8648ce3d020106052b8104002203620004dd607e954556c62e39b432d1f1b2fe6652d75a1fe33cd15c799ffac9d13d5d521899d25940da653d0824ad8456ddfb629f4142e08a3bd1d87bf6119a9ef4b0a80dc712a4d6c001bcb2794c4d1a03b1f1d392dc088c89ef844f93adb139d956b8", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "60d597a99c86a432e144bc2b0e0a89b91c4a72f3e1ff8e56e7f07d53b2e563e979c09e27b34be98bb19865e808d4290e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "point with coordinate x = 0", + "public" : "3076301006072a8648ce3d020106052b8104002203620004826d71ae4f7b3ecbb2a9bdf59512949542d0116f616440a550168f4b58812fd6c1ab94f310385fdf246db5efc0fd13995de099bdfcea355ee63827cf2a2e2d868f5cf0b487e41245df54fdc735eed6eb726cfc928bd5b4d01719d1644967ed1f", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "85961906edaa9adfa9c9b8279da66158f57fb350ff9b15dc4d75b8cab64b9d34f5ce912f1aa512a54c71821c6e31ff8f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004fa8919e4524e7040489cc17aa3d620f88276ef248d1ecd1e9a6637c7a06765f6f1d593b1febe331b9f696e82c5be61a4a074a912309662f44ce0825bf134582116cac3310577d5a00722ba513e6334cc17101091223346db67063cf6e7bffbff", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "43484dcf01492eab684d39881908da7f40119fe7183bba625c32fdc14da3c4236dc3397234e7db41857495cd0d09491b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004aecb8f15ab87579a03f5b8fcf33aa094337e4c362359c9f2727634909c6913c321be69f3f8aed693a31059989997fb32d4f4a37ff236d8f6237186a3a721a82a2ba22f8a628d7273ef3173e21ecc69969a47e669383ecf0cf5396eb02f46c3ed", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "65e6133929c8b061c25fe0bec9142c93d52c9f1695061b105f6c7da1347a967b5a3f1183565645f7b8fad8863f9a6345", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000440dc66d81c4e15e1a4c009c60c3441725fff08b2543773b0dde00db231f44badd77a8bc9619479bd5288e40da153b8ddc3d530262b169a6fa700ee32a5cd057baf43d29627f342fda8f6f0fb21b1fa35be96a452ab4881f417c9a4e4136b1e6d", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "0773673dae337a1688c2c31d1a600c0ed72604a171c665b5307ebaf740fd518e4a7c5c91e4f86f65905640ee37f4f830", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000453b5874738275a2e1d734e51f83636f89179c16fe89f46f4d8e71f521c594769d31725f6404122f21112943a1a22ff07586b41bb24bf303ae8545b25f7b98425ea62c4d3bf51d23d9d85e07719b828777efa0a28fb30f33b899980de3c532611", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "ea25b07a161f318a81a693f6604810b8142843c4fd26658d9b64fedb58a5eba58c217c4176569cf33fa47ac9f2b3d7f5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200042988addf62149e6ac08219d2f036d3f5720aa862905cf3fe7bdf136dc08b845e8a61be43db86d71a26dc17bf55374a9d53ac99c5d07de10ce74ed3b1c413686ebba700f49260b08357f95daf5b31a555345c076079f25d8690fc1ac20c71528d", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "a8d424068fb7846b0d43a5cc13029d054b11c97e508ee0f92e73d35ac8351a462eedfc9da9dd1279f12812ba46c06053", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004494b59de1b69534b4b62d75810ee3dad05a19afa41c7836db5ca78630208a800388d04034baf2923ad5af6ac72ee05f989df6d08f9a6400858d084fe770c0ddde298966cdc56a921a43184384d5a13f31c1eb4e834e23bed3069c10dfed6b63c", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "296f5d6fe4ddd8c3c7304beadd45f6cd3e3fcd4230c9d2ba1a13bd9b9498a3c8d1ef0ab6ee2a450b0c68e89a83711fa2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004b64c49ddf18bce79cff3b8cb7b0e58d48421eb6739f59d271fc4f54dd2fcb1cf56dd3b3c69173a5eab50ab1a2e0616d05d92b864cbc9e4a3f75650eff39e0eacbf87c4c010088f3338842cd97832724f79bb15986bd3fa85255816350473bbd3", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "db1edbbb1f3ac6df9f46128812bce7818b5d745c75322a9abe89983be868aa1aac555f4d60ec272730bb4ad949a53d38", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004a40b1ca1a51a8ee6bef5b58aaabcffe2e15f74a3087edb2620885d7d933e4f50d625eaad93b87b8dff58f0565792b174ab89717ffe87cd29ffbf3cd7d938b1173747bfc0311b78723684d7c9a1c2be3b597bf9236eed090028eda2146c477e65", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "1f84c641ade162a274ab2efc7cf6582f5a5d91ce7993af6956d55eea0e1b7fbf040da9750486b0fbb2bd70d9ccabb785", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200044e7a82ad74a1b7851995f6e1a18141bb4584ac22e839d4d916018b150fed9cd0cce427bd446798522744d395e90ee4b63445c1a6a4cd467c20cdb298854f1e270afbea053b7784976b504d0e1339c5c86007cec363839958a1fa51e9483de561", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "54efb9bb7269d86b06282b1d7dc28a940cd7789ca4e104c4bb7c5e5736676c3e5370cfd97849e1200a031b668388d8d0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200049b54678f8581ce665108abeb0c09cb7985bb5dd858bbb71c88e05344de5b45b4e67f33ab58d359dca2da8df1149dd1bbd09ba7f63a8d35848b40746ed5fec7944ed44fd9a9a2fc3d13ebc5c05ff94d5f500ee15072d1b4c1375fd6ec4f32125c", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "1e96c829cc8a79d73fa6434bc159dc432c2ace3b49ad2e74380e7b02feb53b3393446a0331b974f2bf219ae95d2b23e7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000486cb7a3ff3aedb2f39ae22f2e828ec0817d94b831ae654dd66aff31a4d84b33fab46fec1abe1a9e6bbfac5c99565fd3bb2f72d565d2ff5c5c24f375448dd7bb442dfdcb61e073e48402707bbcc26ad43d4788a9f44715f1b8e5b62bf49ceca65", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "84e7af176ddba3ec3ce7b7fc43df1ed59b4e3228fa3f6fb41a01f413b0a6c7404e43f7747118ba264b7b026d714e90d0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004ccf5a5b80deba6318b85f57a0d563e95765c7fe30df5ac88837f35329dd51070e29896f4d96ef40bcccf36244df835614e8785f8065f81c5e9270fd559b6a380b483874d298d0d382eee1edb6a59d9c163296ab7a068186b0d23f33737dd0eed", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "82864ef4d5fd25204ae1591c619f3ed813c762baa009ba3b49ac38c57b2f46652f719adceabfbcaf985b29958d1f420c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004c7f77ad286c68b88ffa64fefe4aaab3dee1f9bae37b7d069bb92bea82089e831a70dd9ed007ba6dce14f9c6d5e744eccb319ad6ec134376cb059a1c86984ea8bd154d826ed3dbae8d8d8e06aa0cbe0127ddfc32621bbc1f731f9d90e687a7cf5", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "1d0d3ed8c1e0d28f5e3766f193da7bdca1cc08376293f9bbde7bde0e9b1ebcf4cfa3c683dc63bcb42b2d9ede54242bc2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004aac3b4d280fc70a9fe175e1882a69eaca2482a0c9ded9200444028ca3dbf501fc361f7658bffec321ad577b48c9786b07f596bd868d51e73f0f7c25db956b12171cfab11abd4abb00a59ac432c0b0f058f4cca44fb581bc5803e472a05305f33", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "bf19548bb1d7333f46cff4d9d2a81dbb48ca82a52faec2b20c3b27bde392a66b8e44780c2098a7b5253157b014b40e51", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004747efb595d03dc05dd50c17155e1018ca14715054592906e671a2e2204acae552b6f5d345d3fcf9b4171892afb3e5587d8e709b083a8b5363663492f8a2a9af64c3ad01c64d8fa4764d61f43e6901a2445ce94b586f6090ae0687af0090fcd47", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "32d569310f61af475b6c6d075599625a3381b0a5b6a0b8c27c7165d00e2fd4dc8b2cf8e3b33e28ad4005525384227fb4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004ab14764bf24f8313b1c49c4bd6e367231275b303c601c66f7e8b3105c6b02a90b60f38745d755ce4dd40681ed15a1ac93e14cf2fa708300a2b279f2c37fbc0da7175c92c1114c57ef251467f6f3de79fbc38cb1e3db70e4d95225fbd8ad96889", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "266b261b6dd9eb51770f6c4c11b87134abff1629b65171107a9b20e0c7d168e1efc3cbc402464f36aeb3c027b9198e10", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200041e1fe9730fcd5b87b065fa90a69534036be45758513443f79c6427dbc31fc403e894043fb9c7f9f58c0a3670b1c0d80359db8f6a48970ccb9918cef04f352a4d91a204502119b2b7efc6c671a6ba4537e82c196e6d42685c5a6f559e4e8af704", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "fa9f208dcedee597f51122e6274b86710e36561f2361e76186fcb73d1d7f2928426d98c3f69e4cf48d3001d64970425e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000483fcea208c79227cbd97319a86597f85cbfc19ef60c5ba7a92fc521c685e208cec7735be9be27c737d3f9d2faa1c3f4695a32184d58fc9001402436ce00b52b8885bb1150f61e660eceba10768d0f41d5e4e7c21d4fd909aceaf61a7455dd0c6", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "9a1ddf3d9feb190a26f20ed925ffbd35df1017c4a4c9485d344cb8f81c7f452b2ff3aec44baf34e50886f183480b6325", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200042bf26936c9164ba1072544c410757630b97d4e853fdb7844f1811507d04a687d951fa65a34364e894cf8b0815db95f5e10664627bf6f72330a2d6f212361a233155abb79da54343b8572e30eace8c8f5480200e751c2102078528812c83f3cf4", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "47e4608e9bccf6a3296e41fe34eb7181a1b5ec306a93aabd5fb38e75e3d75e8e2ee4c1c44a7d08660681b9fa66642910", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004bb583da5de4c352e8a4fad31e9f71297bc963134ec182e96379c6b28a11d25fa4b77a4a0f947085db33b0ea77b9da09be1a0bd1300383ebd60b5aa6eeb20f03d56dd14df46157465146278536ebc28c5471a94f095554c4c085ac9dceb1da55f", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "8393a2689b376a228f3233ac61578be1aa2de1dbfbb28b03ad24f11ad9d77f8543e0977aea9a761d84e115b61507ae59", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e37791595b54e9b17cc30726d2425eeacc9672f5fbc91fc108cf8c84fff9b66ea65483841b7618694815e1a415186ba727af3ae6c658eb8c485d6ad8e49c1eade751457562d6003de75cd1f1e13ec15ea1d0413602ed7f6a6b7b84efd8a3056e", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "209417da721b49d64dfa09983a8683520e5e300a52b2e8f1677772ee3c086b339a1da25cab2be6e44de4526c31f4ebbc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200047f12cb987b08c235523465146b42258584398062a107429ce486b4b2f26a9628293ae4d30aa61c64bf92f97e6c08aea8d6621cfce5270cd7fa69dcb038ed8ba428afd77d528c230f8e5c9b83ef659c7e573f6671a18d8b8c4ceb20f2d760858e", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "e7eac460eada6eb99988cc39f6129a74d9510d2ec39601adae76b2b8fd6122407b79411f8e7adfbc4f0dc50da9f2b82b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004dc4f06d671d86012cd5ce10377ffefbde657da08fa9259e4aeffe6211ac57f6e1c5bf8732989d44c1342a84fa6fd7fba2714ce23cc0f8e0a8bda593ec2b4b5294ffc0363e6e89403d4482f3537dba9e4f36be68d8e2edafd8cc2c01f5f7dcec4", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "5a197a9a8793d94d8b84084c6dc36c36a293ac90337a1cf6a2653435d05e2f563bfd2933f23ed3aefd75555ead76e827", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004ca1ec6798c5667813bfc45dd1815e82bec93eaa7081069767bec3685cdfa56267fc24da6c186d8b3271627a852560c5a097d7c41e610e5267dabf525763f4a4a7478c5f9ae4b80baa1e620ac1f22d8689b07ed9a99dce0cd4a11682f07227fc4", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "8bf520337de6e5c6f27005161b3b2f1cf08759527c8fc7935e3621f68936f191ac6e931b794278d3ca1e3772dbfb19bf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000444b9e976b9e89aa31519fc0a35288c55e2d7630a1cd1fffd288cdac8c74bc2edcb0ff878fcccebbb78df9e7eb0afa6b1384782b8a1138946594d8fd3b6c9b4954e73d8c040a7a153f3da5a40f9fdaf3bf31a4522416c316f10dc7cd8afc2849b", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "1e56dc30dad33e34273535688605bb98ad7c6dd51d9267c90a62562d08e47dd684180d4ab7abb6cc14ae4c9bd6ae9e92", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004cf661b71c2b8734f7cf5142a66edf787c56a33174303c20741f07e0c348e1b5425705d9ebbb459967621ded6eb56d71037337aa16e1cf6e503182184c9451f9ba457d81a0313fb987343b8b39344f3693298010cd5b73e38bcdece66c67fa508", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "14e3a97e9ee69089410b72459870495a037d4077bba027eff4c499567d7e7f1af2720e1fedd07bd780509a4516fa5c48", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000450790908c043344e1cf42b27e4dc33a35d68a0b93be0ec2be05745b3c83c35f0a3ecc3ed27fb3188a5ed9f24cdbd29d1b0f03ff85fd7fcad4ea5bbd8bd4c42935f0957ca8011cfc93ebeb789c47214e60e5da16e4dd87a53547eedee479b0978", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "85a8ddb9997e2525cd555721f2d5f3b199ff76b57e91eec6fc7d2c95703a1a32f46e3d46952a90b51054c5fd046b3107", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "point with coordinate x = 0 in right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200042395d00779b6c7d4dad8cc9a8918496c28b2d4077e6886d0a1bef515e3125ddd813e5a9ea0f185cd009a69ea92210174b676775f763183c86f6fa50551ba137d79a83e8e32ff2fc09a2c28cdf80cddafcc0f40693e3985f28fe5c7dfe2d8b275", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "c269465cfb336ed8c7e9c0377349193aa4dbdb92a9f4670dbf7fa7a1f7556e8e4b240d5b70edeedd1bf5ce769cb8415e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "point with coordinate x = 0 in right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200045634ee155263c07d7d1e346b868ddd80e9a282fcef93bf6df8e8bc4ea34ff02e119a9f707816d06368ccb94c6e4802fbaadc33991574dde851e547e47027f54353e02d70be6bfa9f73953ca259011f23a4a80cbbaae8805d9d094ef150e0c54a", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "6a21f244472522389f084e2e4ae99b747b39cbee996ce9a3fa05353219b60c20fa3834d39b0b826f1096b7a467e8a218", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "point with coordinate x = 0 in right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000463aa6c3c249a32ebbccce65ffa1c56a205644b2c40b931b1ec9b042b52c1e99cd07e538299fb837fe67586aae71b4706166ac450fbd6d4921b442a11679f7786ba5a772ab33db00543a941bbc015e23581ba625a72c0e4eb44838e5f406ca1dc", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "c469919f58d80b1e45d5d53ee28d616bdf827a88e0b2f499291ec4f76c3c89f276776ea96a6b9053cf02776698864526", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "point with coordinate x = 0 in right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004a287bd74d501c29df23d786b7c34ea0daf10e4b3fce71d720f61a272f22151db2c5914867493028c01e103820b0ba6b121cb298ff8977ecf21fea8ee1b6ba7d9b98dacc2a45d75c63ec8323001a9bf5f5ba4d3cbfee80482ca1333f4de90a14a", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "18dd1d7b6bbc6311afe5383d796a5fec13844bae25708725554de0b5f03ec0f7d2e63b64db5f83d4ee9890c61e442c41", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "point with coordinate x = 0 in right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004ba406b46c1d92d4ba3f40b7b1fcf1e182289b84cdb387f28e5ad20f1ed8c43fe5ffa37128462763051e87f0d5ebfcd9d9dd4107ce4d92d783d0f0f81d7a998b76060735b6fd63bfcd971ca70132fe6dc9fbf8534ecc74b501ea01cd2e4f6c564", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "d639b9c31ad3ceddda7745d19e82fde272a86d31f8e6c203eed53bcb705e9ff58d659f8e9d66aa0492da545a399294ec", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "point with coordinate y = 1", + "public" : "3076301006072a8648ce3d020106052b81040022036200042261b2bf605c22f2f3aef6338719b2c486388ad5240719a5257315969ef01ba27f0a104c89704773a81fdabee6ab5c78000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "c923fb0d4b24e996e5e0d5df151d3c26b1f61c05b17b7fb39fc8590b47eeaff34709f6f7328923bdcaf7e8e413d77ddc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "point with coordinate y = 1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004d39c38aafa095233ef1af8c0f4aaf357dd684131b4ac58a534f3d9446196b60092072dc7e538106b7b2e66dc33cac7283a1b203fca47828e6f7a09af645af0f729802ca2f4000c4b9773b08c5af40e201a27493ab3eba9cad7da157f89f14a2c", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "af3904f83b9a0e95ee0b86b06155993ae598d14898366e5dcfc643de9d5ab72fc5fbef17d0a8fb36ebfddce46e5d4455", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "point with coordinate y = 1", + "public" : "3076301006072a8648ce3d020106052b810400220362000486da578567788ea3cc0f2a9da8d1393ed3a4447a75c18ea86af9d84b0cacc3b03749199890ef8e5d3188d4f1d041d46e433acd5d9f5542439eb2384ec1de0847d056058ea92489a74e083ffd6e030d060fad674f6a2a9a7c2198b8be9e465bae", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "1124bedd4c538ae71293085f2c95cf6b13cfe741f21d62c1f02a1e911667d5348b16d8afb544021acdc3cb7448d4d358", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004111447d242f6b421ca91f561d04b2f1d2f0d9212d918bb4a0ffb1ae6459d078e21a312b2a12594fc8c78fe944c81d513d3c981d5e9cda06c4380d1a842ca5bb51ed3a712b049dda3a50ce10a9fbd0b69dfffaff0787c74d83237ba9c4686a01e", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "69426158a29971ef44b11783ef559ef4297246611c994d4815637128869d5f6a0202632fe9b5ad7c365b63050c9f2d08", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004d7cd5024c4481e27d1653566152efba3284b50ba2a141b2643ffda18f300fa64b81b234b8f646cab4728b4e7a97024d76850aec0a2d131c6acd5b298b6f905cdba18e68564bc31f882fed51b28786a2e72f8812668c976f9ddc042695595fc6f", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "6597401c837fb498ef0780a382decd4a0dd580e1af5f24c44ac164e256a4884ad5bd2fb1f6c964682cb0bf79e2c7a6c6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e31487548037c0423e5710fc60e746ab6e47352561e416b583123a6d45caa911762cd88a60bce57b29a2ec1a1dc97fc1bd4b604038e6ac016dbdd48f0e6bd9f4b5daad8d68fc28838c6ab4a4eb5ab0eaea2cbdefa61dc57a3e04ae71242938b6", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "89411d9c8149b951fa0d5bea1e141bdfc2be7ed56d5e61473935789016bfd2daf6a40ac7bf5b1b0c0c02cd3aa0b2d95f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200041e17e173d37ab9838283f84f24a0a25caaa60c411fbfea582c44f8fba2560ece028cbe397b0eda69fc872d80d9ebe065789c0723eafcc9e9a2bad431b11caf7c5d7598ca999074056ba808a5d07977c678f9534de152ffdaca3f63cba3f97894", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "6f0aa11ab74ae5034e231ef2630bc76cda6eed26325d123642fce6a950b50f904bc0269f8f589bc4d38107332b14da84", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000476efcc8322f0af8d62e736a0e110f66b3aad5c87bf7a77333fce864f4ba6e8dfdc16d6add2c542c4805589a71f0e48a3c268feab02714c892f826622b25bd21ce2a33514b16c9ee84c722b523b19ec5fc34d874133080e158981849355e1f50d", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "7eb9962e0449ccd2e60b4f8094d5a7b461d0d4b06af0ba306b74ab0d60ad5cf894fbfc282ac8dca3da196d7a296baa14", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004c147d6c235d740b388e6d2afafcf85d5b7166e0df4ea21294088e3049b5c27d7633c93d30fdcf2b9375e1814f51b57bbefb2c12575c2234ee1f6b147b2e04c104a4d2b29cd8458f59b57bff75cab9b6acbe854fc4d96fb73372d6054bb768390", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "790295bed69f5347ecaae9befe15cd3499759cdfbe51974b1f1c4bc576e7d881cefa93d5e8bf2c21ebb982698e1c7aeb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004849c98fff5e31b108aefb16cc5cf5c7e88439d8b3ef188f2a5bc53f30901dedfe294abb38fb8cb46547a23cfe47909d656449f8a09aa88f8e260598ea2772df74d26a4431a03785934373be7b0ec9187b8215965761723e79591176960eac014", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "58a11a17c4ada4d446c08b83aa05687fee8fd6e78303648b8583262197f87be97dbe0bbd274e444a384e221696530fc9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000457cf645578dd242c714d100dd23568b16d3745da809708d01eb6a7168e6f71dec2074c5a6c23bd05523dfccc97dea6f08da195daa2056da0576bbc0ffb5e73bbdad03b04d23b4b602451a5ba91b17dce302f4ad164c6a4a2b58e3f0253a5e9d6", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "9260483a165690d54c10cb867a9f896bbd123d4768a18d322300d420aac88ae20f188b57f8e97afad55ebb815728f49a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004cab2d9d36c8ec09f18baa0abb521372a5cc2f624848f95460a8615238e68c11c1b43d22b84d1e535ec1d85560de293ce1fd5e6e7ac7eb6f173ad27b63985fcc83b9532aa56f2b59b53a9d116098fda9aba49d57c1eed0f063bcc701bb10f6c2b", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "b4679af80a2ad34ef86eacf2c2191556bc0240c7913fb14c4c1f8623b5db41b854d630dc65738d1faf544aa42979aed0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004d71df4095c138523340a4010cfa976b3b27af48ca83e8c6bb4596f9f8e8f13e38de4e25ce1d379b41a95f9d7f8a84606b28c69704b68788eb6a35c8bcaa7d9718e00c9bc567acdc458b6732aa87041d27b6a574d51e95437855bdc86748c5cac", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "8a34de8beb884364b583c9cbce390969967cc2a50090ee132acbd49bf780ad7f092ae3ebd4686a70ba554efdd6acd4ed", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004a5761775850a25985a32430442d660aadf9e1e388b57e6e1bfe41495b9a05a8240f77f3397c5cdb0c83d73945984abedd2c7cfa5d5d91738c6577646658c0448f0155b5bf839575a36d1b26d87d1b2b3afb4f68653a6bfa5edfc57aa8529e622", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "790dfcff4721ef1701e3ff521e4221be51ae242f95166b9292c7aa2fa3c9b799afd353987a535690ff20d66f578f38fc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000454fc2f89cde6f6e86b6cf3286198f9a9e33c8d662c2151205ddcff12e2d32fa891eec2359bc07224d64c5e339ff9d58918a3b79372d142fb341df3b15b54b30e8f956b079b1278276a33b4d8508920940ca63fb8e970ff98f91ecc7986275edb", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "cb861053c1d685194ea58413d8f9981e07145bc573ba924bdba2e29c5f98e9e70ea0cd0412d6c387449e9ae767dc4330", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004bfbf3fab1acb39ce28f063d78cf250772bd00bdca98b769e1f1fd442b77f4270106a5f7d913c1905bea0dc75b31f87a115c566dbff0cd1073325450a91096fe5f5d601a636407cfbc4f5720f396fa6cb16987370ce70e29bb7ed2f447425f10a", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "375ffb90ad6c518668e5d25941acd5f9c017346d06f893cf95752258bcc5f9a25996a80f42e0475a80443dc4197bba6c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200045757577480f32aedac6e19765f9197cc278cb0b1a21fc6b6423c8f6c6cdea1d324c93eea8bd7dcca8fd293d69876524360b1a4825522acd833d38dbd61508547358a2f5c281b496abd57072ab14f9a2235bca02545e0427526bc2bbc9268349f", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "d1a02a264ab15aef52a534eb5000e2943d8cf1f77255a27f845e96e1f81df47ee903c3e921539d77d72f55b7efc9dfbb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b81040022036200041452f5eafbb5cc563f2c7ca403b803f6f8d66479062508a2258a8d988a769b80e077735b45efab1f297ceebd74347f584f2badbca55457404866baefabfa99b70fbf105d17f352347f6799647448708f788f8a145bdd96d4af2d7e654be7e5f1", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "ccaa37769d035170bb5c19c135da2291446efd7ecd3be9008612b8ccc29f6e9d7a45dd4e0479123f03e7e304f34729e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004ad27a365e4b6994c5ed135fc4794d73eb71ec26d787fec10f1382b19c1b5cd1d672999feee86d5f305516d601fd1c6aaf8664858988f02f36c888f71872007870bb32654aa75530fc3b7a235f7fd2bcd815e303445526960f6ffcdd61d2d1340", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "4ae94d3eda5839f4b8b9ffe6d510144cf28bde98581e82726f2d76d933919adab71d2cdf4c4310f8abcc74d70eba3a33", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004733041f3a60468bc0711d5a5073a71ef6062d0ae70706af51316033580cae058fc4ac99ebba823b19f48f309e34fb02933670dcc75ed47744771f60238ccebcddccd42d64e41045fd8ebc35bbae0a37b43388ddb87356cbb525a13d57f47a2cd", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "062b8a968e45435c2b5b54b417f55e89f935b66dec44882c06ab8d6cda8dcfb553a78361d382a9211191871e9a34220f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000481885804ee931988cff3f218c9af1429573ccf8c8f3df40c698d976e8bc7c12881953445ddc4f1902b2f2f3153304e82d7094b673b76beebfa5d84c49b01ce168c459201cb8192ef96d891010e4bc88f0acc4fbb40ad61966e787b9a298a2bba", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "ba41c38d33b2ae342797ee69723f042a71dd7fb15f3dc80dae403d4f88acae28e2e51f2ca9d52b4aa4e2b3e58257e24d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004167915d962a405f8d04d6d6494270d883fe7594e9a21f7b57715750f8d78ec0714f0fb85a9fe5aee4e6d10344e4b12f91f00441c8bf567ff84e6ee4298b9d3392c78fb32461958102e1d29d2f4c4732104242cc4bfee22aa8f4a172aa510ac88", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "c6af4eae5999e0d0658505cb4b395e9d73592a3d9d0b3c07caeb2bef1b03ca4d603b33e6f6bbd90f9416c4aa0022e584", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000466e1fe893f72ffea5e24ea5a4f0d6558fdbd3222dba6e3340753c82979ac59530dbd37fac2f51355465d56afe1de582beaca9104ad269b0f848d8b4d71182afc30129147369a74193ddf4ddb3b6ff128f94168ce0bc60e7791b4b1ca2e29431b", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "9e364adcb72b15a42cbd6fa79114889e22b93b533b0119afd90914b181128151b8a17db49004ec39ad5db5603fb9711d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000462ebaabff2a07a852af9aab8126e93c31109e893cc61b354a72a1744cb409a02cec6e6195845957a53bde97dec7a87c25ea11b003a694e371c2be1cf5db5b7fba278f6968f54c5fb6677987bbb6b55dd9072e8325b365c25262c5024f68b2e5b", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "23104806dbd85f71d8fc38101b0cd0bbcd60331d8f74869f0643116ac362b5e933db8743ff80dfcc2df5cbcbf027185e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004276a5a274b46a0a36f811cf64bc7a644d5ad9c124be002a6fdd1cc111880655c8d2987674ea49e7d70d2a0ae820d1a7d4ec3bae2dd1d77af082fabcd68ac20f209e8fa446478794223be1d63d71987e964e45f0bcf6a2ea0a12c633445285a46", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "283502355b21189f7361e89457550974f86ae2b66d025506899c15b390da248e14fd1b4f25c8584d1a71e7f8c93fa976", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000498fee314cfb3c01cc2d9fd7c2568336027840008bcfbfc8292421ed6b0727fa20b7002a5726a685d44963ad8f74c695da25a542b8e0bb9a4858be64f70800da93af6776bb795bb169f4c9d151795f3a5a37a3c82264cf6870c4ded684a71269b", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "9044be70566664ed91dab85aa5ff644d7a346810d2678d27751917c3820c4c825034b78a957b8fd1d47e86e67e5ba9f8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004d16d0b11d0a326bb2725b3c9cd598746af11924f6172ce53b19a942b965562c2a2875fd15ce1f4869156d5cf08780c74d4c4927ca175b5327c9f321cd2a7b1acb58fce351160daea5d5c64d76d38d3ab17f7c1432093ad4d620053f6f675864a", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "1fa4c8e6dec89088a8fe725530f5c154672e84488baaf70a08b2e96565962653577402161424294b7f377208fc936139", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000410526e3b097a99ea507ba6795ea1f77718690460117bfac9ed95bee311db5f8a1a2767c134b19db3c387a1fb45be7029312c75d7bbeeee48bc15b55dfb716511c5634d719d26903bcace1c60a8e030496156d9ccac97cac724e093574ae4bc83", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "04f4029d372332b4b226c9f32521ea39a58b655d24e35190ce04d58f0c04814be7f6ffcb8a4a15134224134f029eda9f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 145, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e632cb201288b643f235533c44846b11a28740ee4137a22cff7f542054d6337f46363849c8310e20d8b29baddb3109ff948d42ae959c3ae143d4f02d268726bc2b66bafed7657b1a53e23eed48094c5ca8d28d16121aa6237d8150ad6c326655", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "f41f912165827cea27ab8147a46abeb30c1bc73cfe0520d7d8698df8f9529afe26eac707340f38b49ec5e741d646b9a7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 146, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004088330380613adb0b8e531649809fbea340edbdf598af028e74ba0b4f18e2d50118531b9a92b07753b2c13ceb87d3c8e38e625b500f4b9bd2dc781892fff96d89271909d3e561a63e415467d6d455d0a4c19c36f16dcc2417a3425c2adda9034", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "6e437e26316eb2596400d8fdda5be90caa94d62c425f27df5ca67898a8ffdf3cde577c4d2d66f6522498f0b295d77a2e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 147, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004d9a9d1e0aacaef4aecf241d690ee4101df74d7a37f18ce3181128f8d4255cd34702b17f116b2506cb8f577d9357e3629966e62e6f95c9eb7833ccc1f22956a1e2599a875f8139d9a2b31e2000611b4d6db1d23e7f0db5b5c17bb44e150ea2695", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "854772b9b77d4687571f1934061dbce0016d47b90a8b5d38229475c213cd5df25f960b775ae72909cccc5ba14dd03448", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 148, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004535d22f39c8a5591e7a1deef7a6c34965fb5d1e616f14bb12a7e6310d520350f2f75836f9c8189ec4503ef74a0b850d4abb05ab1e5c6061884d1eff3d2be78c76759b986dde70552aa1e97bc014f333c0d5af8b46d61e1ae06774e2f86267312", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "037d459a54fe6b69d893f4d3094a5e0a93251d5254cef5b022e7065fdf52e3be8127f2ae2e336e261a71f6e41aacb2e1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 149, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b810400220362000489402a143d57ec585aee1243d3a7adfa87eb80c60bd09cbb56b64eb0a1b7f5927318d8573c6239c6feeaa58dc2ae2e40d605189ac4a66bd6b9e708bdbccc4647543c0dd1d3c64a2c160c32f729f2b15dd95852c9b207508651d7746395a5a490", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "e8d03dffead2e40ea915db4c9c67abb45aa60992422b70374239caf58b96f86716600c1cc4449362dc56ca057bfc5e5e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 150, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004c2a9c52a5936910c05c4144315127bf662c292b8f0681811c2bf8f4f9cc5bd7ab693f7cbddb5724e7e29dd023d155ffd335e8b872ae1b7a91293ae9cc8f654f05ff4767db208b76c73b6b34c5626512e6ba92bcc937c9bcca9447dbec22ff106", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "e820f997928a71186ce09b96923c317cc128cb761c87e97073a851610ca12f219937938789bd227a8d72b2b406c471fd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 151, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "3076301006072a8648ce3d020106052b8104002203620004dcd0224ad2219dc3af05eea5d27974a75fb1960d0d721c39f107bf45346220994e520ca5a646701e9319ceb08017a302e0b1bee292cd1cb99f145ead3d12285903b1e549fcce7591a101a1675fb9b6e30e678037f4d58d220c1e36a4e79f883c", + "private" : "00c1781d86cac2c052b7e4f48cef415c5c133052f4e504397e75e4d7cd0ca149da0b4988b8a6ded5ceae4b580691376187", + "shared" : "0aed8ac7d04af070b73a03f37ef711296db8ac64bab13e15418df6373aad81d8e0fa789b9292933d7f11b8614076e074", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 152, + "comment" : "edge case private key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "03", + "shared" : "455aea9924330bd6d2d6403478327900e172e93598e254cf6d8eb13f0a3d21be51a46107333844e61dfa3d80df6928e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 153, + "comment" : "edge case private key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "db1d8ef1117282870db8113aa4f58723c756ce598686eb8ea531aa4d39abb1b982b1e7bb2648a6c268d2d351204db8d5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 154, + "comment" : "edge case private key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "e98062df47ef884c9411e16466af84ad271d586008b1fbc50aeb3b36836a35a770dd42e0db84d39b26f4dcd2dc03d90b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 155, + "comment" : "edge case private key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "898aae0ebf1cb49fb6b1234d60f59006325421049a8a320820e1ad6af6593cdc2229a08c500aa55ca05999d12829db9c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 156, + "comment" : "edge case private key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "00800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "83f862f496ab8af12b82a8a0c047d836bdfa36281324b3a1eb2e9c1d46699d81cb125cbe4b93939fd84e1ae86d8a83cb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 157, + "comment" : "edge case private key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "00ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a779ecec196accc52973", + "shared" : "9a26894887a0342ca559a74a4d4a8e1d6b2084f02e1c65b3097121a9a9af047d8810fb945dc25bbf02222b3b625f1e0a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 158, + "comment" : "edge case private key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "00ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecdc196accc52973", + "shared" : "8a8d9dc194a26910cbdae7908d185b6ad04b620c94c5ee331e584ed804e495bebc2290a2d7006a06e65b9bcace86c6f6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 159, + "comment" : "edge case private key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "00ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aece4196accc52973", + "shared" : "d57f6aa12d3f07e8958499f249e52cfbe5be58482e146c5414dbbf984fc5333710350e2ce96b33beb7678381f40f1dcb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 160, + "comment" : "edge case private key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "00ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec1969ccc52973", + "shared" : "188e8041d9a5f0b6cfdad315ada4823beda0146774fad65b500e6ef94376ebf8af7a40ff6f6b45019a09dde7d7fb5552", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 161, + "comment" : "edge case private key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "00ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52959", + "shared" : "2ecf9dc47e8b07ae61ddbd1680ead02698e9e8469f78d5a28328e48d0c9d7a2ac787e50cba58cc44a32fb1235d2d7027", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 162, + "comment" : "edge case private key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "00ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52969", + "shared" : "06ee9f55079d3d3c18c683ba33e0d2521be97c4fbf7917bf3b6287d58ffcde2df88842e3f5530b39549ac20974b1b60e", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 163, + "comment" : "edge case private key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "00ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970", + "shared" : "455aea9924330bd6d2d6403478327900e172e93598e254cf6d8eb13f0a3d21be51a46107333844e61dfa3d80df6928e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 164, + "comment" : "edge case private key", + "public" : "3076301006072a8648ce3d020106052b8104002203620004e9dfaaab808b3aac1ccca7cc6242a7ee583249afe8ee8f66b904cc8eec34ad334456e00f33a94de8b5169cf0199550c020156e9651734ff999c5f3ea62b83d0083a6093f234457251ecf72c41e4df7cea2420b5454a7f690034380bac981e92e", + "private" : "00ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971", + "shared" : "024c5281487216058270cd1cfe259e948310e4adc263a9edaa4da0bc3f5f8ce8ffc88ae41b2c050bf6dd9c8c66857237", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 165, + "comment" : "point is not on curve", + "public" : "3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 166, + "comment" : "point is not on curve", + "public" : "3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 167, + "comment" : "point is not on curve", + "public" : "3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 168, + "comment" : "point is not on curve", + "public" : "3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 169, + "comment" : "point is not on curve", + "public" : "3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 170, + "comment" : "point is not on curve", + "public" : "3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 171, + "comment" : "point is not on curve", + "public" : "3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 172, + "comment" : "point is not on curve", + "public" : "3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 173, + "comment" : "point is not on curve", + "public" : "3076301006072a8648ce3d020106052b8104002203620004fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 174, + "comment" : "point is not on curve", + "public" : "3076301006072a8648ce3d020106052b8104002203620004fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 175, + "comment" : "point is not on curve", + "public" : "3076301006072a8648ce3d020106052b8104002203620004fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 176, + "comment" : "point is not on curve", + "public" : "3076301006072a8648ce3d020106052b8104002203620004fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffefffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 177, + "comment" : "point is not on curve", + "public" : "3076301006072a8648ce3d020106052b8104002203620004fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 178, + "comment" : "point is not on curve", + "public" : "3076301006072a8648ce3d020106052b8104002203620004fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 179, + "comment" : "point is not on curve", + "public" : "3076301006072a8648ce3d020106052b8104002203620004fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 180, + "comment" : "point is not on curve", + "public" : "3076301006072a8648ce3d020106052b8104002203620004fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 181, + "comment" : "", + "public" : "3015301006072a8648ce3d020106052b81040022030100", + "private" : "00c6cafb74e2a50c82c7a63d13294bfea13d0bc504ba2b08a392c9081bf3815d9e44d969ed7f05ffd1d8594355053c6147", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 182, + "comment" : "public point not on curve", + "public" : "3076301006072a8648ce3d020106052b81040022036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c8", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 183, + "comment" : "public point = (0,0)", + "public" : "3076301006072a8648ce3d020106052b8104002203620004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 184, + "comment" : "order = -39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f0231ff000000000000000000000000000000000000000000000000389cb27e0bc8d220a7e5f24db74f58851313e695333ad68d020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 185, + "comment" : "order = 0", + "public" : "308201853082011d06072a8648ce3d020130820110020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f020100020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 186, + "comment" : "order = 1", + "public" : "308201853082011d06072a8648ce3d020130820110020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f020101020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 187, + "comment" : "order = 9173994463960286046443283581208347763186259956673124494950032159599396260248791326163093631191247821216106", + "public" : "308201b13082014906072a8648ce3d02013082013c020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f022d00ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196a020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 188, + "comment" : "generator = (0,0)", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 189, + "comment" : "generator not on curve", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e61023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 190, + "comment" : "cofactor = -1", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529730201ff036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "invalid", + "flags" : [ + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 191, + "comment" : "cofactor = 0", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020100036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "invalid", + "flags" : [ + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 192, + "comment" : "cofactor = 2", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020102036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 193, + "comment" : "cofactor = 39402006196394479212279040100143613805079739270465446667946905279627659399113263569398956308152294913554433653942643", + "public" : "308201e53082017d06072a8648ce3d020130820170020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "invalid", + "flags" : [ + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 194, + "comment" : "cofactor = None", + "public" : "308201b23082014a06072a8648ce3d02013082013d020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff30640430fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffc0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef046104aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 195, + "comment" : "modified prime", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100f47e533e4e43e4bf04e901db0eea6efba14bbcdc3b1c5753a7c141487e4f43784e57a72310202323361f44760c8368bf306404300b81acc1b1bc1b40fb16fe24f11591045eb44323c4e3a8ac583ebeb781b0bc86b1a858dbefdfdcdcc9e0bb8af37c973d0430b3312fa7e23ee7e4988e056be3f82d19181d9c6efe8141120314088f5013875ac656398d8a2ed19d2a85c8edd3ec2aef04610400000000000000000000000000000000fffffffffffd38000000000000000000000000000000000000000000000001cf3646298bba2f24e84189cf0d1e75188fc4fcf5b0844281822e789e3d534b159f4c419342260197625ad924a2c72c4d0f023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529730201010362000400000000000000000000000000000000fffffffffffd38000000000000000000000000000000000000000000000001cf3646298bba2f24e84189cf0d1e75188fc4fcf5b0844281822e789e3d534b159f4c419342260197625ad924a2c72c4d0f", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "5df0762488bc0a7be1121508949382861f781c331676048c2d45d245be6f476c872113e6710bc746c3d06970510193ce", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 196, + "comment" : "using secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 197, + "comment" : "using secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 198, + "comment" : "using secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 199, + "comment" : "a = 0", + "public" : "308201863082011e06072a8648ce3d020130820111020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff303504010004304fcc45ccf5e23ee407b9291d2e85523962a2a79a50da3facca04b7267ad316db202cb07c24905740d201ded3028881090461042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101036200042121a348f9743855859c496f91d0f39fe728fc46e48d007713051b22f1c0257fe20dd85b21df7e1ec82bf8b39b2138a2ae74f80e6257778f8cca9f279b57d25eeeb155960642972f0567e204514f0ac1eb1e27db5115053211914961d09644c6", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "455cf3c0b0090688599825522ef3312878201514f6330ccc7f42ec1945204adfe419b2dbbfb942dc98b16d8323150cf6", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 200, + "comment" : "public key of order 3", + "public" : "308201b53082014d06072a8648ce3d020130820140020101303c06072a8648ce3d0101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff3064043074a89c1d95030a24dddf35deb3d490665cab6a0e72741abb05f3fb7e34ec8b432b39fc1ba64285f407856ca80690f125043054e7a558b35bb0e9af4a419ec6635f3c0d34ae013cde6debef47514bcb980ad547c9aa5834be44eaa02e93bf851344e8046104c98adce2b5ef154f90d7d6f0c2ec6c526a9f214cce85ee84290e45fd6e5e88f82dfe994c0050d838789744af8b8d9505f29cbb59d91d1908faaab1cd17b7e0736df1e09a4fc42366abb339565086f7d872c779af84980f9fd725446ff0e2dde5023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc5297302010103620004c98adce2b5ef154f90d7d6f0c2ec6c526a9f214cce85ee84290e45fd6e5e88f82dfe994c0050d838789744af8b8d95050d6344a626e2e6f705554e32e8481f8c920e1f65b03bdc99544cc6a9af7908268d38864f7b67f06028dabb910f1d221a", + "private" : "00de44e63fd924f177340d780af6aaaea271f52d2cb9a5c519b6020e06c3cf0baafbc0b801c6508c2e1483b15cfef7afc2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 201, + "comment" : "Public key uses wrong curve: secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a00040710b0c6f4675459f3df2bdf7ca02819f8086198d15c69b8abda37639e6031caca8a0121894d2491d8b3dce093703c70705bc5dbc8fa17c8", + "private" : "00d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 202, + "comment" : "Public key uses wrong curve: secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045fa4fa0b235c21e5c9f3baea9303bf86eccb7d31d0b998e141bc54b5dc43b23eef7fc5cf56308ed595eee99ade6aaf74d591c3d00aa1b438abc59c9607c22c36", + "private" : "00d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 203, + "comment" : "Public key uses wrong curve: secp521r1", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004005bce61fe27c440fedbad47d88bccf645db9c1d30daa086e592e8b6a0a173b87991b619801907b420fa558c7953ab97badd9c6c1d85859d9ebef7441a088ff57ed5008d7638de703faabeb5a78e83e8fcd4eb786144a75d79bd4cc8cfa8be66612d756c7b65c67f72c6acbade6f0d59e9752e845205b2a560d4f8d6a9e84bf812f94d18", + "private" : "00d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 204, + "comment" : "Public key uses wrong curve: secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a69ced11a8bf7a907bfa47cba3368f2498b465a2407c90649c8da224d2a85bf445ad2df3d0113e72aedccf92ba6b8529ed6faa154bc27aba25f49371981e3b38", + "private" : "00d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 205, + "comment" : "Public key uses wrong curve: secp224k1", + "public" : "304e301006072a8648ce3d020106052b81040020033a0004fef61198c88514f19fe00b2def1bd6073f5c50eb572ae806c0b657ff8ba79186771e73f598036e5dca1a1ddc899a56ea8663c10f212e452a", + "private" : "00d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 206, + "comment" : "Public key uses wrong curve: brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004a9b0f90e49a57fbe508847bf16e4a7b565dfe870a50164bc2862fe6e4d54bd8b109939f7dbbf800522722b9c0b309ace3884abb69c927ad0", + "private" : "00d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 207, + "comment" : "Public key uses wrong curve: brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b240303020801010703420004512fe17172db1125a49f9dbb85e387869adf015e4899c06f66ef870d72092d4d195e1d21b4a4647bf734468bee802ddad5449202eba1041df2fd8cde04697237", + "private" : "00d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 208, + "comment" : "Public key uses wrong curve: brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b240303020801010903520004c391dc7a817d47a3961ea1857895e101c0f5a8767d3a9c7cad49f7af8029f24c67309373cedd0831ccc0a0f45d344f3ab5923d2452507a980301a283848ae31574a57db51ce5e61d35aee483f1bb8e66", + "private" : "00d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 209, + "comment" : "Public key uses wrong curve: brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b0362000419d3c811c04c5c0990d0258386195b2e29fdaba58d3f12b0bac8d3d53828c66c7a35e3d1eb0bdf2c08f23d0e4ab6a3246e456bf0fb863d03423dbe431baf799657c7816a619662fe5b900b754107ba5cc06b1d62c9a927891efee1a1fd404d7e", + "private" : "00d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 210, + "comment" : "Public key uses wrong curve: brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004216eb619457f1168ac873f5b560a75df80749f2bdf9abac31d6580e521ad70368013c3db74f663263b61eb12d4dcd597ad6c77cef6a5d6d2240b1e244d76403f693fb317ffc602a7ac313991b0a62f7bf469bbc95b3ff35003d972eb8ebcc8d4833e6c24ad52d49c1ce6244c7889ab67a8818232e192944542763fc667e5799d", + "private" : "00d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 211, + "comment" : "Public key uses wrong curve: brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a0004691b24004380a599770214d0c60ab37cfc804cfaa7aedd11cbf0a05467ebec5e33322cda707b848086fd740244f62cdeb867fc057207fde2", + "private" : "00d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 212, + "comment" : "Public key uses wrong curve: brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b24030302080101080342000422bf69f3a81dfa1ed8a97301943626e20377b78f7e7d714b880deb5a4a9c63a11591c2e47b777488990771855768b9a4050d61bf02d84cc6aa40447a07507285", + "private" : "00d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 213, + "comment" : "Public key uses wrong curve: brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a0352000476568300e2b4c68861589b4966e67bc414811e4011260cb8be5f884869fa179ca8af40f80009e0a58b17ac3e551a772e76683c32e6e09112572542d7c1fe3d49abb56da56d669186e2623dc797129dc0", + "private" : "00d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 214, + "comment" : "Public key uses wrong curve: brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200043345dffded3c33f7dcc19bb8997a39f2d6230abcb765d6142c30bf320c1fadff535feafd8505eb3e614db71826c1e258077a1e6057add7474f6d35dce68417812e7b919b1c673032b28c45d0a9251c43a2a73ab152f64ff8eba4eab312fa73bd", + "private" : "00d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 215, + "comment" : "Public key uses wrong curve: brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e0381820004a3677c646cd887685940c28076f55cda7469032845f2cb2af51c61492dc435aaa5b771d8e1528417cdeb89b5f629e06b234e21236b9edf46c7025177ee65a8e940f670d10c722cea355bd3a5c8847a38324b9a06a50a95da4e70bb492cd00194a8830975dd1e115e19315575ff841b30fd4a3f8a44725dfe280d0af57fc80cc3", + "private" : "00d6331a5a968e4d3bd7336a423b41055b68edd100b8b998d00eb9ed93881c21e3912bb2ee08e71327be205898675ef7a4", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 216, + "comment" : "invalid public key", + "public" : "3046301006072a8648ce3d020106052b81040022033200024424530ea70bace90601f8d5869e4179a6cd689b6a18fdfec50cecf17cb836d24820211ada67815b42c2c2606303f69e", + "private" : "2b9e57572da6cf4fb58cb94eab8df19383a136f219f2a515776a8bf48e1538dd1d811946c16d9f0184c9ce5cdf1dac51", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 217, + "comment" : "long form encoding of length of sequence", + "public" : "308176301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 218, + "comment" : "long form encoding of length of sequence", + "public" : "307730811006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 219, + "comment" : "length of sequence contains leading 0", + "public" : "30820076301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 220, + "comment" : "length of sequence contains leading 0", + "public" : "30783082001006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 221, + "comment" : "wrong length of sequence", + "public" : "3077301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 222, + "comment" : "wrong length of sequence", + "public" : "3075301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 223, + "comment" : "wrong length of sequence", + "public" : "3076301106072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 224, + "comment" : "wrong length of sequence", + "public" : "3076300f06072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 225, + "comment" : "uint32 overflow in length of sequence", + "public" : "30850100000076301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 226, + "comment" : "uint32 overflow in length of sequence", + "public" : "307b3085010000001006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 227, + "comment" : "uint64 overflow in length of sequence", + "public" : "3089010000000000000076301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 228, + "comment" : "uint64 overflow in length of sequence", + "public" : "307f308901000000000000001006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 229, + "comment" : "length of sequence = 2**31 - 1", + "public" : "30847fffffff301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 230, + "comment" : "length of sequence = 2**31 - 1", + "public" : "307a30847fffffff06072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 231, + "comment" : "length of sequence = 2**32 - 1", + "public" : "3084ffffffff301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 232, + "comment" : "length of sequence = 2**32 - 1", + "public" : "307a3084ffffffff06072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 233, + "comment" : "length of sequence = 2**40 - 1", + "public" : "3085ffffffffff301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 234, + "comment" : "length of sequence = 2**40 - 1", + "public" : "307b3085ffffffffff06072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 235, + "comment" : "length of sequence = 2**64 - 1", + "public" : "3088ffffffffffffffff301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 236, + "comment" : "length of sequence = 2**64 - 1", + "public" : "307e3088ffffffffffffffff06072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 237, + "comment" : "incorrect length of sequence", + "public" : "30ff301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 238, + "comment" : "incorrect length of sequence", + "public" : "307630ff06072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 239, + "comment" : "indefinite length without termination", + "public" : "3080301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 240, + "comment" : "indefinite length without termination", + "public" : "3076308006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 241, + "comment" : "indefinite length without termination", + "public" : "3076301006802a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 242, + "comment" : "indefinite length without termination", + "public" : "3076301006072a8648ce3d020106802b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 243, + "comment" : "indefinite length without termination", + "public" : "3076301006072a8648ce3d020106052b8104002203800004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 244, + "comment" : "removing sequence", + "public" : "", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 245, + "comment" : "removing sequence", + "public" : "306403620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 246, + "comment" : "lonely sequence tag", + "public" : "30", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 247, + "comment" : "lonely sequence tag", + "public" : "30653003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 248, + "comment" : "appending 0's to sequence", + "public" : "3078301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed0312510000", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 249, + "comment" : "appending 0's to sequence", + "public" : "3078301206072a8648ce3d020106052b81040022000003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 250, + "comment" : "prepending 0's to sequence", + "public" : "30780000301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 251, + "comment" : "prepending 0's to sequence", + "public" : "30783012000006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 252, + "comment" : "appending unused 0's to sequence", + "public" : "3076301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed0312510000", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 253, + "comment" : "appending unused 0's to sequence", + "public" : "3078301006072a8648ce3d020106052b81040022000003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 254, + "comment" : "appending null value to sequence", + "public" : "3078301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed0312510500", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 255, + "comment" : "appending null value to sequence", + "public" : "3078301206072a8648ce3d020106052b81040022050003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 256, + "comment" : "including garbage", + "public" : "307b4981773076301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 257, + "comment" : "including garbage", + "public" : "307a25003076301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 258, + "comment" : "including garbage", + "public" : "30783076301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed0312510004deadbeef", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 259, + "comment" : "including garbage", + "public" : "307b3015498177301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 260, + "comment" : "including garbage", + "public" : "307a30142500301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 261, + "comment" : "including garbage", + "public" : "307e3012301006072a8648ce3d020106052b810400220004deadbeef03620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 262, + "comment" : "including garbage", + "public" : "307b3015260c49817706072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 263, + "comment" : "including garbage", + "public" : "307a3014260b250006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 264, + "comment" : "including garbage", + "public" : "307e3018260906072a8648ce3d02010004deadbeef06052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 265, + "comment" : "including garbage", + "public" : "307b301506072a8648ce3d0201260a49817706052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 266, + "comment" : "including garbage", + "public" : "307a301406072a8648ce3d02012609250006052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 267, + "comment" : "including garbage", + "public" : "307e301806072a8648ce3d0201260706052b810400220004deadbeef03620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 268, + "comment" : "including garbage", + "public" : "307b301006072a8648ce3d020106052b81040022236749817703620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 269, + "comment" : "including garbage", + "public" : "307a301006072a8648ce3d020106052b810400222366250003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 270, + "comment" : "including garbage", + "public" : "307e301006072a8648ce3d020106052b81040022236403620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed0312510004deadbeef", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 271, + "comment" : "including undefined tags", + "public" : "307eaa00bb00cd003076301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 272, + "comment" : "including undefined tags", + "public" : "307caa02aabb3076301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 273, + "comment" : "including undefined tags", + "public" : "307e3018aa00bb00cd00301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 274, + "comment" : "including undefined tags", + "public" : "307c3016aa02aabb301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 275, + "comment" : "including undefined tags", + "public" : "307e3018260faa00bb00cd0006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 276, + "comment" : "including undefined tags", + "public" : "307c3016260daa02aabb06072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 277, + "comment" : "including undefined tags", + "public" : "307e301806072a8648ce3d0201260daa00bb00cd0006052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 278, + "comment" : "including undefined tags", + "public" : "307c301606072a8648ce3d0201260baa02aabb06052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 279, + "comment" : "including undefined tags", + "public" : "307e301006072a8648ce3d020106052b81040022236aaa00bb00cd0003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 280, + "comment" : "including undefined tags", + "public" : "307c301006072a8648ce3d020106052b810400222368aa02aabb03620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 281, + "comment" : "truncated length of sequence", + "public" : "3081", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 282, + "comment" : "truncated length of sequence", + "public" : "3066308103620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 283, + "comment" : "Replacing sequence with NULL", + "public" : "0500", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 284, + "comment" : "Replacing sequence with NULL", + "public" : "3066050003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 285, + "comment" : "changing tag value of sequence", + "public" : "2e76301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 286, + "comment" : "changing tag value of sequence", + "public" : "2f76301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 287, + "comment" : "changing tag value of sequence", + "public" : "3176301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 288, + "comment" : "changing tag value of sequence", + "public" : "3276301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 289, + "comment" : "changing tag value of sequence", + "public" : "ff76301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 290, + "comment" : "changing tag value of sequence", + "public" : "30762e1006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 291, + "comment" : "changing tag value of sequence", + "public" : "30762f1006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 292, + "comment" : "changing tag value of sequence", + "public" : "3076311006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 293, + "comment" : "changing tag value of sequence", + "public" : "3076321006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 294, + "comment" : "changing tag value of sequence", + "public" : "3076ff1006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 295, + "comment" : "dropping value of sequence", + "public" : "3000", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 296, + "comment" : "dropping value of sequence", + "public" : "3066300003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 297, + "comment" : "truncated sequence", + "public" : "3075301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed0312", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 298, + "comment" : "truncated sequence", + "public" : "30751006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 299, + "comment" : "truncated sequence", + "public" : "3075300f06072a8648ce3d020106052b81040003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 300, + "comment" : "truncated sequence", + "public" : "3075300f072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 301, + "comment" : "indefinite length", + "public" : "3080301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed0312510000", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 302, + "comment" : "indefinite length", + "public" : "3078308006072a8648ce3d020106052b81040022000003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 303, + "comment" : "indefinite length with truncated delimiter", + "public" : "3080301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed03125100", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 304, + "comment" : "indefinite length with truncated delimiter", + "public" : "3077308006072a8648ce3d020106052b810400220003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 305, + "comment" : "indefinite length with additional element", + "public" : "3080301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed03125105000000", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 306, + "comment" : "indefinite length with additional element", + "public" : "307a308006072a8648ce3d020106052b810400220500000003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 307, + "comment" : "indefinite length with truncated element", + "public" : "3080301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251060811220000", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 308, + "comment" : "indefinite length with truncated element", + "public" : "307c308006072a8648ce3d020106052b8104002206081122000003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 309, + "comment" : "indefinite length with garbage", + "public" : "3080301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed0312510000fe02beef", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 310, + "comment" : "indefinite length with garbage", + "public" : "307c308006072a8648ce3d020106052b810400220000fe02beef03620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 311, + "comment" : "indefinite length with nonempty EOC", + "public" : "3080301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed0312510002beef", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 312, + "comment" : "indefinite length with nonempty EOC", + "public" : "307a308006072a8648ce3d020106052b810400220002beef03620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 313, + "comment" : "prepend empty sequence", + "public" : "30783000301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 314, + "comment" : "prepend empty sequence", + "public" : "30783012300006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 315, + "comment" : "append empty sequence", + "public" : "3078301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed0312513000", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 316, + "comment" : "append empty sequence", + "public" : "3078301206072a8648ce3d020106052b81040022300003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 317, + "comment" : "append garbage with high tag number", + "public" : "3079301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251bf7f00", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 318, + "comment" : "append garbage with high tag number", + "public" : "3079301306072a8648ce3d020106052b81040022bf7f0003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 319, + "comment" : "sequence of sequence", + "public" : "30783076301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 320, + "comment" : "sequence of sequence", + "public" : "30783012301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 321, + "comment" : "truncated sequence: removed last 1 elements", + "public" : "3012301006072a8648ce3d020106052b81040022", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 322, + "comment" : "truncated sequence: removed last 1 elements", + "public" : "306f300906072a8648ce3d020103620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 323, + "comment" : "repeating element in sequence", + "public" : "3081da301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed03125103620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 324, + "comment" : "repeating element in sequence", + "public" : "307d301706072a8648ce3d020106052b8104002206052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 325, + "comment" : "long form encoding of length of oid", + "public" : "307730110681072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 326, + "comment" : "long form encoding of length of oid", + "public" : "3077301106072a8648ce3d02010681052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 327, + "comment" : "length of oid contains leading 0", + "public" : "30783012068200072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 328, + "comment" : "length of oid contains leading 0", + "public" : "3078301206072a8648ce3d0201068200052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 329, + "comment" : "wrong length of oid", + "public" : "3076301006082a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 330, + "comment" : "wrong length of oid", + "public" : "3076301006062a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 331, + "comment" : "wrong length of oid", + "public" : "3076301006072a8648ce3d020106062b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 332, + "comment" : "wrong length of oid", + "public" : "3076301006072a8648ce3d020106042b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 333, + "comment" : "uint32 overflow in length of oid", + "public" : "307b3015068501000000072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 334, + "comment" : "uint32 overflow in length of oid", + "public" : "307b301506072a8648ce3d0201068501000000052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 335, + "comment" : "uint64 overflow in length of oid", + "public" : "307f301906890100000000000000072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 336, + "comment" : "uint64 overflow in length of oid", + "public" : "307f301906072a8648ce3d020106890100000000000000052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 337, + "comment" : "length of oid = 2**31 - 1", + "public" : "307a301406847fffffff2a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 338, + "comment" : "length of oid = 2**31 - 1", + "public" : "307a301406072a8648ce3d020106847fffffff2b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 339, + "comment" : "length of oid = 2**32 - 1", + "public" : "307a30140684ffffffff2a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 340, + "comment" : "length of oid = 2**32 - 1", + "public" : "307a301406072a8648ce3d02010684ffffffff2b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 341, + "comment" : "length of oid = 2**40 - 1", + "public" : "307b30150685ffffffffff2a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 342, + "comment" : "length of oid = 2**40 - 1", + "public" : "307b301506072a8648ce3d02010685ffffffffff2b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 343, + "comment" : "length of oid = 2**64 - 1", + "public" : "307e30180688ffffffffffffffff2a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 344, + "comment" : "length of oid = 2**64 - 1", + "public" : "307e301806072a8648ce3d02010688ffffffffffffffff2b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 345, + "comment" : "incorrect length of oid", + "public" : "3076301006ff2a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 346, + "comment" : "incorrect length of oid", + "public" : "3076301006072a8648ce3d020106ff2b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 347, + "comment" : "removing oid", + "public" : "306d300706052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 348, + "comment" : "lonely oid tag", + "public" : "306e30080606052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 349, + "comment" : "lonely oid tag", + "public" : "3070300a06072a8648ce3d02010603620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 350, + "comment" : "appending 0's to oid", + "public" : "3078301206092a8648ce3d0201000006052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 351, + "comment" : "appending 0's to oid", + "public" : "3078301206072a8648ce3d020106072b81040022000003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 352, + "comment" : "prepending 0's to oid", + "public" : "30783012060900002a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 353, + "comment" : "prepending 0's to oid", + "public" : "3078301206072a8648ce3d0201060700002b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 354, + "comment" : "appending unused 0's to oid", + "public" : "3078301206072a8648ce3d0201000006052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 355, + "comment" : "appending null value to oid", + "public" : "3078301206092a8648ce3d0201050006052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 356, + "comment" : "appending null value to oid", + "public" : "3078301206072a8648ce3d020106072b81040022050003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 357, + "comment" : "truncated length of oid", + "public" : "306f3009068106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 358, + "comment" : "truncated length of oid", + "public" : "3071300b06072a8648ce3d0201068103620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 359, + "comment" : "Replacing oid with NULL", + "public" : "306f3009050006052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 360, + "comment" : "Replacing oid with NULL", + "public" : "3071300b06072a8648ce3d0201050003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 361, + "comment" : "changing tag value of oid", + "public" : "3076301004072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 362, + "comment" : "changing tag value of oid", + "public" : "3076301005072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 363, + "comment" : "changing tag value of oid", + "public" : "3076301007072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 364, + "comment" : "changing tag value of oid", + "public" : "3076301008072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 365, + "comment" : "changing tag value of oid", + "public" : "30763010ff072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 366, + "comment" : "changing tag value of oid", + "public" : "3076301006072a8648ce3d020104052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 367, + "comment" : "changing tag value of oid", + "public" : "3076301006072a8648ce3d020105052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 368, + "comment" : "changing tag value of oid", + "public" : "3076301006072a8648ce3d020107052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 369, + "comment" : "changing tag value of oid", + "public" : "3076301006072a8648ce3d020108052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 370, + "comment" : "changing tag value of oid", + "public" : "3076301006072a8648ce3d0201ff052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 371, + "comment" : "dropping value of oid", + "public" : "306f3009060006052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 372, + "comment" : "dropping value of oid", + "public" : "3071300b06072a8648ce3d0201060003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 373, + "comment" : "modify first byte of oid", + "public" : "307630100607288648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 374, + "comment" : "modify first byte of oid", + "public" : "3076301006072a8648ce3d02010605298104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 375, + "comment" : "modify last byte of oid", + "public" : "3076301006072a8648ce3d028106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 376, + "comment" : "modify last byte of oid", + "public" : "3076301006072a8648ce3d020106052b810400a203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 377, + "comment" : "truncated oid", + "public" : "3075300f06062a8648ce3d0206052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 378, + "comment" : "truncated oid", + "public" : "3075300f06068648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 379, + "comment" : "truncated oid", + "public" : "3075300f06072a8648ce3d020106042b81040003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 380, + "comment" : "truncated oid", + "public" : "3075300f06072a8648ce3d020106048104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 381, + "comment" : "wrong oid", + "public" : "3074300e06052b0e03021a06052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 382, + "comment" : "wrong oid", + "public" : "30783012060960864801650304020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 383, + "comment" : "wrong oid", + "public" : "3076301006072a8648ce3d020106052b0e03021a03620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 384, + "comment" : "wrong oid", + "public" : "307a301406072a8648ce3d0201060960864801650304020103620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 385, + "comment" : "longer oid", + "public" : "3077301106082a8648ce3d02010106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 386, + "comment" : "longer oid", + "public" : "3077301106072a8648ce3d020106062b810400220103620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 387, + "comment" : "oid with modified node", + "public" : "3076301006072a8648ce3d021106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 388, + "comment" : "oid with modified node", + "public" : "307a3014060b2a8648ce3d02888080800106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 389, + "comment" : "oid with modified node", + "public" : "3076301006072a8648ce3d020106052b8104003203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 390, + "comment" : "oid with modified node", + "public" : "307a301406072a8648ce3d020106092b810400888080802203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 391, + "comment" : "large integer in oid", + "public" : "307f301906102a8648ce3d028280808080808080800106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 392, + "comment" : "large integer in oid", + "public" : "307f301906072a8648ce3d0201060e2b8104008280808080808080802203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 393, + "comment" : "oid with invalid node", + "public" : "3077301106082a8648ce3d0201e006052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 394, + "comment" : "oid with invalid node", + "public" : "3077301106082a808648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 395, + "comment" : "oid with invalid node", + "public" : "3077301106072a8648ce3d020106062b81040022e003620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 396, + "comment" : "oid with invalid node", + "public" : "3077301106072a8648ce3d020106062b808104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 397, + "comment" : "long form encoding of length of bit string", + "public" : "3077301006072a8648ce3d020106052b810400220381620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 398, + "comment" : "length of bit string contains leading 0", + "public" : "3078301006072a8648ce3d020106052b81040022038200620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 399, + "comment" : "wrong length of bit string", + "public" : "3076301006072a8648ce3d020106052b8104002203630004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 400, + "comment" : "wrong length of bit string", + "public" : "3076301006072a8648ce3d020106052b8104002203610004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 401, + "comment" : "uint32 overflow in length of bit string", + "public" : "307b301006072a8648ce3d020106052b81040022038501000000620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 402, + "comment" : "uint64 overflow in length of bit string", + "public" : "307f301006072a8648ce3d020106052b8104002203890100000000000000620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 403, + "comment" : "length of bit string = 2**31 - 1", + "public" : "307a301006072a8648ce3d020106052b8104002203847fffffff0004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 404, + "comment" : "length of bit string = 2**32 - 1", + "public" : "307a301006072a8648ce3d020106052b810400220384ffffffff0004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 405, + "comment" : "length of bit string = 2**40 - 1", + "public" : "307b301006072a8648ce3d020106052b810400220385ffffffffff0004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 406, + "comment" : "length of bit string = 2**64 - 1", + "public" : "307e301006072a8648ce3d020106052b810400220388ffffffffffffffff0004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 407, + "comment" : "incorrect length of bit string", + "public" : "3076301006072a8648ce3d020106052b8104002203ff0004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 408, + "comment" : "lonely bit string tag", + "public" : "3013301006072a8648ce3d020106052b8104002203", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 409, + "comment" : "appending 0's to bit string", + "public" : "3078301006072a8648ce3d020106052b8104002203640004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed0312510000", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 410, + "comment" : "prepending 0's to bit string", + "public" : "3078301006072a8648ce3d020106052b81040022036400000004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 411, + "comment" : "appending null value to bit string", + "public" : "3078301006072a8648ce3d020106052b8104002203640004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed0312510500", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 412, + "comment" : "truncated length of bit string", + "public" : "3014301006072a8648ce3d020106052b810400220381", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 413, + "comment" : "Replacing bit string with NULL", + "public" : "3014301006072a8648ce3d020106052b810400220500", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 414, + "comment" : "changing tag value of bit string", + "public" : "3076301006072a8648ce3d020106052b8104002201620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 415, + "comment" : "changing tag value of bit string", + "public" : "3076301006072a8648ce3d020106052b8104002202620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 416, + "comment" : "changing tag value of bit string", + "public" : "3076301006072a8648ce3d020106052b8104002204620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 417, + "comment" : "changing tag value of bit string", + "public" : "3076301006072a8648ce3d020106052b8104002205620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 418, + "comment" : "changing tag value of bit string", + "public" : "3076301006072a8648ce3d020106052b81040022ff620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 419, + "comment" : "dropping value of bit string", + "public" : "3014301006072a8648ce3d020106052b810400220300", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 420, + "comment" : "modify first byte of bit string", + "public" : "3076301006072a8648ce3d020106052b8104002203620204c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 421, + "comment" : "modify last byte of bit string", + "public" : "3076301006072a8648ce3d020106052b8104002203620004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed0312d1", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 422, + "comment" : "truncated bit string", + "public" : "3075301006072a8648ce3d020106052b8104002203610004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed0312", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 423, + "comment" : "truncated bit string", + "public" : "3075301006072a8648ce3d020106052b81040022036104c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 424, + "comment" : "declaring bits as unused in bit string", + "public" : "3076301006072a8648ce3d020106052b8104002203620104c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 425, + "comment" : "unused bits in bit string", + "public" : "307a301006072a8648ce3d020106052b8104002203662004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed03125101020304", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 426, + "comment" : "unused bits in empty bit-string", + "public" : "3015301006072a8648ce3d020106052b81040022030103", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 427, + "comment" : "128 unused bits", + "public" : "3076301006072a8648ce3d020106052b8104002203628004c2bed48c5e15e8208411b1a14c77c440b9a8c3b6b2af6eef05e4fbae13cfe7ba5e9af208c54e3035e3b4559f97b0f2798dbe522a47ee950419b5faa273d24ff2748a8349c591cc80871acf3c6702cce129c68351a713207a69f02b5bed031251", + "private" : "4b065d2dbbad95d7eebed00a3e79f772ccddfd93101c1b1f393e8adc465d94bc21346d8f341907a3c27a2562dcb49a3a", + "shared" : "40c344fb1185a5a97dd00b114f1b9c5ce4009f90c593f236fe465518f9ff27326a421e05b5bc1bfe3768d5becb9ec797", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + } + ] + } + ] +} diff --git a/tests/ecdh_secp521r1_test.json b/tests/ecdh_secp521r1_test.json new file mode 100644 index 00000000..b22adefc --- /dev/null +++ b/tests/ecdh_secp521r1_test.json @@ -0,0 +1,4868 @@ +{ + "algorithm" : "ECDH", + "generatorVersion" : "0.8r12", + "numberOfTests" : 480, + "header" : [ + "Test vectors of type EcdhTest are intended for", + "testing an ECDH implementations using X509 encoded", + "public keys and integers for private keys.", + "Test vectors of this format are useful for testing", + "Java providers." + ], + "notes" : { + "AddSubChain" : "The private key has a special value. Implementations using addition subtraction chains for the point multiplication may get the point at infinity as an intermediate result. See CVE_2017_10176", + "CVE_2017_10176" : "This test vector leads to an EC point multiplication where an intermediate result can be the point at infinity, if addition-subtraction chains are used to speed up the point multiplication.", + "CompressedPoint" : "The point in the public key is compressed. Not every library supports points in compressed format.", + "InvalidAsn" : "The public key in this test uses an invalid ASN encoding. Some cases where the ASN parser is not strictly checking the ASN format are benign as long as the ECDH computation still returns the correct shared value.", + "InvalidPublic" : "The public key has been modified and is invalid. An implementation should always check whether the public key is valid and on the same curve as the private key. The test vector includes the shared secret computed with the original public key if the public point is on the curve of the private key. Generating a shared secret other than the one with the original key likely indicates that the bug is exploitable.", + "ModifiedPrime" : "The modulus of the public key has been modified. The public point of the public key has been chosen so that it is both a point on both the curve of the modified public key and the private key.", + "UnnamedCurve" : "The public key does not use a named curve. RFC 3279 allows to encode such curves by explicitly encoding, the parameters of the curve equation, modulus, generator, order and cofactor. However, many crypto libraries only support named curves. Modifying some of the EC parameters and encoding the corresponding public key as an unnamed curve is a potential attack vector.", + "UnusedParam" : "A parameter that is typically not used for ECDH has been modified. Sometimes libraries ignore small differences between public and private key. For example, a library might ignore an incorrect cofactor in the public key. We consider ignoring such changes as acceptable as long as these differences do not change the outcome of the ECDH computation, i.e. as long as the computation is done on the curve from the private key.", + "WeakPublicKey" : "The vector contains a weak public key. The curve is not a named curve, the public key point has order 3 and has been chosen to be on the same curve as the private key. This test vector is used to check ECC implementations for missing steps in the verification of the public key.", + "WrongOrder" : "The order of the public key has been modified. If this order is used in a cryptographic primitive instead of the correct order then private keys may leak. E.g. ECDHC in BC 1.52 suffered from this." + }, + "schema" : "ecdh_test_schema.json", + "testGroups" : [ + { + "curve" : "secp521r1", + "encoding" : "asn", + "type" : "EcdhTest", + "tests" : [ + { + "tcId" : 1, + "comment" : "normal case", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040064da3e94733db536a74a0d8a5cb2265a31c54a1da6529a198377fbd38575d9d79769ca2bdf2d4c972642926d444891a652e7f492337251adf1613cf3077999b5ce00e04ad19cf9fd4722b0c824c069f70c3c0e7ebc5288940dfa92422152ae4a4f79183ced375afb54db1409ddf338b85bb6dbfc5950163346bb63a90a70c5aba098f7", + "private" : "01939982b529596ce77a94bc6efd03e92c21a849eb4f87b8f619d506efc9bb22e7c61640c90d598f795b64566dc6df43992ae34a1341d458574440a7371f611c7dcd", + "shared" : "01f1e410f2c6262bce6879a3f46dfb7dd11d30eeee9ab49852102e1892201dd10f27266c2cf7cbccc7f6885099043dad80ff57f0df96acf283fb090de53df95f7d87", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "compressed public key", + "public" : "3058301006072a8648ce3d020106052b81040023034400030064da3e94733db536a74a0d8a5cb2265a31c54a1da6529a198377fbd38575d9d79769ca2bdf2d4c972642926d444891a652e7f492337251adf1613cf3077999b5ce", + "private" : "01939982b529596ce77a94bc6efd03e92c21a849eb4f87b8f619d506efc9bb22e7c61640c90d598f795b64566dc6df43992ae34a1341d458574440a7371f611c7dcd", + "shared" : "01f1e410f2c6262bce6879a3f46dfb7dd11d30eeee9ab49852102e1892201dd10f27266c2cf7cbccc7f6885099043dad80ff57f0df96acf283fb090de53df95f7d87", + "result" : "acceptable", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 3, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004014c643329691ba27459a40dfe7c4ce17b3ea14d0cd7aa47b01f1315404db51436fbbfe6de0842e0f7e1265f6ff3aca28750677d3370b2fb2a6ef497356f4b95811201051b14178639a09a41465c72d3743436ee1c191ff7388a40140b34d5317de5911ea03cdbb0329fdeb446695a3b92d437271a9f3c318b02dec4d473908158140e97", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040029cd32125c23a41af24fd4b729da0faacbc35516ef0ba59096602571693cd282e26d67e18ef4643d0f6f158d7370d3394ca9a8de7938032ac178c6fd34e3702b8d008649834e2b41be3a8b7510bfe570f4c67075943cd0cbb9d9e1d1da52618b5b96d6aec9b650daf1ca6624c13e5116302b9c79c8c4d3d351915d1e8e1ab6ad76098e", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040032c6f06ce6a15ea064464d35aa368d299c9a9e1e368f694aefb603876248f898f223ce0217bef37d61eb09b27c93187cf8e61ba7b14e3c9bee692b06ac6d95f836019fd19f8480e21c63211d48d45f96f6365cf55f958e1a0fe7ea6b6b9ff230a87b70bb1b14d3a5fb6669a91641c6acf4570c1d3a9e709913b7fe6b35ff81c394d6a7", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401f7eb96e64b1a62daf9e0801bfd96a0b15b68e5f5cb3e90b434495a473907338e53098e1c2e493335d09c6aae6fdda0345b98aaed588f2abe82910713fb6c20252901396b17cf250bc018f4cead097e7e09863f14cf1239b065e57d884949eee141926f7e7c9f7f34cf0536368767bc0e1ab5142877293a4c722693a73fe14a5390af93", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004006ddf9b10965d5fc129e96f7a37667ccf66cc44384772906fedb21f9de4629e01aaa09ac7c9866112064bbc9bd58ebc123ab2fe19d8fed1a056d27bfef0630509c7001c441311ef20a16346332ea42d5c65788d68f6817b0267fcab11ea9c948ed108115dda8e823a380b601460742d3772d6424c67b240da24772ff0d2ccd9a1e0cea6", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff0000000000000100000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004007a8c547268c948b626da636cf54428ea2ab23861d499a84ad7be1cf691b92872a06e26c6dba08ca9ed386f83d396156d5fa023f57d5ea6440ec7401dad2c08ad70018c3815b1b9a2e42555419a6c19043fa2b0ddcc4b5a6e372fee9fcb227d85bad704687e7e1a818b612d5c046cd75972f7a2dd5c9a200ac5582cd59fec47ac525ecf", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "00003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040029153cf062f88f303e5d6f9aac968bd901076d5994ea7f831833b1e69b67e9e9fe20cf9c5623e00e0b9e3592fca2a03324b5df7c93186aff697aca864600d44ecc002801a62e2f4106f34106da23dc93d50e3e975a1d47510021835290649b7a4125109f656b6b0b5bd00b24d84ea1ba4e1ed49e61c526fb1011005131caee7ee0501e", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400a61eb994e28722c59b3c6007dfdf8b37893f6350f461b26a00e1a45104314aae9989da87e4facb2c4ef721185b7d96d9a45a28a102756501a1acc5d329a21bbf73010e8d0e12f5a9a40e0d59c90ce73043d39730aeadd3788e31d7c2bb62a1166161994664afa658ce2e60a13f45f27f914307c8d6f8d4ed16ab041b8f69908a62782f", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "010000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004011dd497b30c73709906b164a9a79dc7f2a98c0148ed63016bb95243834fbcdf8eb74b0ff652d54f59f31aef51da6e8974d363655b1da138dc4de0f2a8d800f475ae0057bd4b84607400d863ffbf45a3cf58999ee24ba05e93eca7b0e4ae760eb1733559a45d15579d3370d716ffa3ec4bfdae418e32fb06138dfca213720a938577610e", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01ff00000000000000000000000000000000ffffffffffffffffffffffffffffffff0000000000000000000000000000000100000000000000000000000000000000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401283eb93fa369fe7012b647d21e0a97cf9950e5fbed819ef56158f20c8a9473a418eccbca4dc2b47f4cb6d322f917005859bf221e84ac9827cab82a801c627fb1ec0075c480cbafb352fcaf93baf23a1405fd81febe09729a908d1077e177dd8993d94b251a0d52652da3edb6fdf864e80cd51540e73d0b5107e3433576dcaa4e18db43", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01ff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400173beefe35ee868d497ff6601628f65ce18a1591f7e4a3a406622f3f508e2da68f101ed02febc38418c6ddfc26a5ec9848c42792463b1e945f9e167db34bdf2d660053070647aba7cd60eb295ab81a268a3903f393c5d28bbc5e022351c377cd84f02c19deb36442372cae1332e92f95ba60b6c852e0de0718e89d24e43cd479c9fb11", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01ff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004009829cd5432687739ab6ae10af8ea73d2cb53b81ebb06b5961b7badc1676b3ef7b00454f7cde56774a01312d574a9193c1a5fe5336fbe62623ad9bf81143789f9f90012f955697ed578207197bf9aac3896521615dbacc8dc665d4f1715b08439f49c2aa6ed337023ffccc5075a85944936826db92f919737ca3afeadba1847084bdef7", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01ff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040126e3c959cd41120bb83693b1d6a034b385137c1bb3213b776122fed96056e329885718a73bee639c0ba4b68818682f498ce5496925002bd7652516405fcc4fecad0073a9c6e3b0c694bf7cc8ccbbd09800e81e3548ba44a0c2381cef0b07bf702a19054bb5d717a1b79294609cbdafd4e2018064f7b2c4c204d818eb7ce521c3268ce5", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01ffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000004000001", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040153dc481ab3c5dc8decd24ceaee1bec77f59f21f7f31c19538af047d281ac9e2567933fd3d21096b185d4098919571931bb9b0be7197995e2fbaf21c8a10007ade001ad69f08fcae164390be826256b50fae47502ce0e9ca46af0c490cb4033c886f88661a99ff2bd3c9c8e7da30faf2b4c769edc5831810ac05054c97e41063f496e1f", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401f586611c87150288c3e86116c5db94a26718978829d701ddac05e9b0ce22dee4b18e95f60cba783ed3384da373deaefc57b8265d3a34eeb458bf24b9d82be32819008456e0f1d80492ef0078cc246d32fc7c7fb6720b4d458b51b2098d35746752b0ef0345bd0d342dfee6dd2f12ed12b34bd95d058c2811fd479d2dde32180e6c9ef2", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01ffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc000000080000002", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004015edc87fd499a73eabffd14d2b6a70a8fb69b6a39d0d9c4dda2337b53cc72e49a9e3d5a2d9e8930cfa11852dac33443227fba6684bd74732e6879884b6ef9dae98f010eeb8d2e3360ea9726628085268af3f2a05ad41235d0a892098bd661b636f7ef0a820282906eda3f1ff1980b98fb5937228e9edcd6332e3641216c7307e7f3f452", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "edge case for shared secret", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040131b43002f7e687eec1ecf6a253c2ccc9e48f04d86fccd18fee0d2d22191f1ea539c40d521970b4709dc03986f647e0e8bb3340cf8a3e643a3541035437cf25f01500b27a55ac45f0296f8c9656bcfd52b5cea9f4115c06e4c64319609847d45e92418400e7868672c0d3e6e5e6e004a7190476ed77cfc33ad19a4bd2c615ad9950f374", + "private" : "00a2b6442a37f8a3759d2cb91df5eca75af6b89e27baf2f6cbf971dee5058ffa9d8dac805c7bc72f3718489d6a9cb2787af8c93a17ddeb1a19211ab23604d47b7646", + "shared" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d20ec9fea6b577c10d26ca1bb446f40b299e648b1ad508aad068896fee3f8e614bc63054d5772bf01a65d412e0bcaa8e965d2f5d332d7f39f846d440ae001f4f87", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "0053bf137fee8922769f8d0fe279caa4dac9c6054ad0460995588a845d0a959e24bc0fc2391a2b92f7bd400f50a11a9db37f07bef7fa8dad2a903fcf534abc8736f7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010010e59be93c4f269c0269c79e2afd65d6aeaa9b701eacc194fb3ee03df47849bf550ec636ebee0ddd4a16f1cd9406605af38f584567770e3f272d688c832e843564", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "01c95ac417c90a520149b29105cdab36f528a23efb5621520dbdafea95a7d43499c4c8be02cd1c2de000da18104fa84a1e9ece6386f0e0efa5234a24595d7c4c96f4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200d9254fdf800496acb33790b103c5ee9fac12832fe546c632225b0f7fce3da4574b1a879b623d722fa8fc34d5fc2a8731aad691a9a8bb8b554c95a051d6aa505acf", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "01b47ec41e3a5abd9dd9808fc04d9078cbed72b9eba98d3c1ded70a29938f0efd5a27a7113ff721f122cb17411de307a355c685074f5766b6d1a033d2fa188c945b6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000005f880f50ec94bfac6658fa2fce05945c6a36b266407b6fbd5437a83e2f2f9b9c50a734872e48e70df65457f13e47d06c6b8b29f4735acf105ea63e051904d18aea", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "013aefe3245728a08c904fe7d61cd9c2fdac63f29cf664d8f161bebacb93f8a710e9692f9689480ad498de00f00061e40e46e76e4754c1130ef4217a58933e0b1dc6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff00000000000000ffffffffffffff000000000000010000000000000000f33ffc45da3eac1baab727ab8fd355cfa134c42047d55262651654fb50df7e9a5a75f179c8c86c4388213b5687dc43dfebb37f30128703c44ccd5c3284833b8717", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "0168df272d53e3161926168c4aeab5f355b8d2a6689cfd567f2b6eb2011a18c775ac2a21f8dd497f6957217020b3b1afcb7021f24fccc2523be76a2bff44596e5a14", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00000003fffffff00cd2839d857b4699f5c8e8a0194786e26a862f086b4ba80746ae5225ed3aa68f96b7aaec55225830bb98f52d75221141897ba49d7a31ebbf0b6d7d31352e5266190", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "013db1b9241b23d33860d32dec37a79e4546a41afdfdd9c438d04e1f8b566ac8d9d3f572c293e96943722a4ee290e113fffaa82a61867d9ca28d349982354c9b256f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000813d9829119f42ffa95fea8ba9e81e4cd6a6ca97fb0778e12e5f5dfe35201dd4cca8eca0d2e395555997041381e6ac1f18ddf4c74e0b6e9041cfdca1d1c103091", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "01d2bbe9f754584ebbc7c7ad74136d1c8a144948948aa8be49989dd9b4c514db2e2ab1e0713ad1699f632dd2cea53da218ed549f030a113e282fd9e3be462d9aba84", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004010000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff0000003ffffff00878ad597d290db2cf660594aeed0f9b7c8dd68451d2d1b2cbc816b1ec4f35465b3964aff2edf1255163f5fca580132f85cade2887a017e7cd0b37196ad85221107", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "000f37a2e2caef54fff4126c0fa96e7c47f0cad74626ef91e589e12d2e1e8c221be7295be9dc2712b87bb0aa0f5880b738bc1242f2ba773bf9eb2a54e3c1ca4758d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ff00000000000000000000000000000000ffffffffffffffffffffffffffffffff000000000000000000000000000000010000000000000000000000000000000000b5e1191b449fa1ebdbd677daa48f90e2d1d6c058c877087cafd9364d99dbb283c68402e6e6c5f5411b2ed42824d8b280ceb910aba6847883a7e3780e2132af41c1", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "017aeb254d9c8c8ee06215ff33811357da73bf7f6dd6d7f8f176d62c065a88a9005f680c630e9f2763585ea2ee76b6e4ab45e673f814ebfa95947c0c63fb24fa6e9b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff0000000000000000ffffffffffffffff00207513d615656a1cc7505c18aa21b08e2b1d5a841de0816cc29c004efdb2d902ac1a7bb05e20722b576b64a3ddf4d2486421ac706bf4a424f252386368a5340fb6", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "0061bed42248a37b4625ef04c4f9c7ef69ee3c6f9503378351fcab1b8ce1343206997eec1b88449eb6f7355711ea1a818a486ee30a24126241a7e2289267cf5dd61f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff00000000ffffffff001fe800c50e54012b75a33e4be7d07c8d60f29680a395e951a6a31c5096b0ea928fc2cbf327dd784dc0a7ca46ea73992b758b5641364b4aba39e93798a4d925a008", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "001067d9104e296ef42b944587de11b10df05d2d959ed44cac9e7ef1c7a05d90819c43bc79c7397918f957cc98db931763bbeb1bdfc35865e8a359a013f13d60c433", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff00010000008dd18a1f5e482140be79bb65a21ad60c8987e532c84345f0135affd46ec71ef02b1ca3ad56f301d955fa306c122d441d6fedcf8b855ef256350bf69d23a7207ad9", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "00b779d83035cf7bb0bb04c7b2f46d08f6791f0d1542c9bcce7250e772b12ad8e38fce1d2b063a06f0fa3a1b072dd976f5f8542979903075162f1f5c6ba3b76cc45d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff8000003ffffff0000007fffffe000000ffffffc000001ffffff800000400000100566203dd325a081c4441f001f780365874fd3d0c9bc47227481afe76a93ae1bfde63af972203abfe22c63b80e83f7cc2184c3cb8cfd0152c54324c4759fd1f9a50", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "01afe5d23733728b79c743933b9ba7dfec5ed19b7737e393908a1d000918aa795d1ce0ad533983d018f927b35d2af6463356573f387febd75911a49486202ca69d3a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff0001fffc0007fff00b11c668fbd549f36889f7b63434051da26f15705839136b1b14a09152d7a182ea7806c35478a32d3aa3c9c1627a61519ebec71b36fa77449025b8829e27f307834", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "019612aeb386febb1a28096fe5b2f682dead02389785225b80a27df439510d08349a193839525f248b7f9bcabfd3dc8da8cc1724022299b7b5e72399d89464b82e44", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000007fffffff00000001fffffffc00000008000000200aa75efc0a8daac1d73f32c9c552414bccf44af8e74331b47439e7dcc49a135b3ee61e9f69717d89b4bba3567a195aeda13fbec634bf2984b5ec6b6f80f5978ed5a", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "00570673f87adcef49c1f011e8b9f1e11f7fd3b3c93114d08d3f515aa4a895a6c701c523063bdc13ad1db0a54f6e7b476fe10db2070441befc58c8cff3c08ef76e59", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0010e59be93c4f269c0269c79e2afd65d6aeaa9b701eacc194fb3ee03df47849bf550ec636ebee0ddd4a16f1cd9406605af38f584567770e3f272d688c832e843564", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "0016aaf228b0aec190d4e4e5b8138ff9cc46d705da1bf002901c6ab420f59314d5b641712b14ef3e4fb125652c47888676804fb5575b741a8408c5625bfccff4fdda", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "edge cases for ephemeral key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00d9254fdf800496acb33790b103c5ee9fac12832fe546c632225b0f7fce3da4574b1a879b623d722fa8fc34d5fc2a8731aad691a9a8bb8b554c95a051d6aa505acf", + "private" : "012bc15cf3981eab6102c39f9a925aa130763d01ed6edaf14306eb0a14dd75dff504070def7b88d8b165082f69992de0ffa5ee922cb3ab39917da8524cac73f0a09c", + "shared" : "00a5d6dfda2b269f4ab895a41c3b71b6ba10d5c9f0d9b3e730275345e4721594abfd39464c227716ded8ef3e60bb1ca0b551716e3f6eebb48d5ce8e0ab58cb1b73c9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "edge case for Jacobian and projective coordinates", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010010e59be93c4f269c0269c79e2afd65d6aeaa9b701eacc194fb3ee03df47849bf550ec636ebee0ddd4a16f1cd9406605af38f584567770e3f272d688c832e843564", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "008f61e15e8c8545dcdab188f10ba9111b6345d529d9c5470677342df7ef54c56a1fb9fbe8dea76afbe8f2dd4c3cfb4d5b749d743944c96d74fb47bc4bf601e5dc7e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "edge case for Jacobian and projective coordinates", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004004dc16cafca9833eeb97c136c154f3ae390830f26d300edef06f867efab1c4214f563c25e1c81e16a86eaac8272892d1b65b2ee7fb2b69ba1110b083bbeb6b8873a010dbb701266a8df32d17bd58bea365c2637d686272900a5ea7a19ff98db3bf92425a483c70fdd9db25b6ee69981cb69dcc9c418c32989e73f0a5fd7f3c3ba44b051", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "017e7eecdb0f52e3b8aedd0f5550f26cd5e27e711d6860c54f88cfd3ff075df8d363ee3be4dac2f42d036b7c64e2b50d90764ab4eef0b9d68c29682b9707d45ec283", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "edge case for Jacobian and projective coordinates", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004018255c014f2533ad930e4320216496a3f4e0d78b50fa27d42209e270e39baf480a987a2c84098eee53889ea8b6cc9036ddeebefc00b5542d2425fafd5e1babae84101db817b332b297a003cffc4251b58d9c7ce0b90301ef5c65e8ac0f82517fd1730a167d83af50d92f7e25e08787130618920345c435337ef45eb2e9b1ace530d0eaf", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "0115ba7fc1ef5d1547bb259d7302cf84400160a599a3fd1d368e4d8f136848bc32b345a7926b95140c319db39d3d89479d44aeacc05c8af37d55450c1ae114beb583", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "edge case for Jacobian and projective coordinates", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00d9254fdf800496acb33790b103c5ee9fac12832fe546c632225b0f7fce3da4574b1a879b623d722fa8fc34d5fc2a8731aad691a9a8bb8b554c95a051d6aa505acf", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01d63965c150dcc6c834dd2a9446a9006e011affb8241a38e3409752b7f478d32c6d461f978296a57339ff4ab1a308f8fd0330a932979b3fc2363d04538e72510176", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "edge case for Jacobian and projective coordinates", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040173de990978da53a05c463a567304727bbc9dbed8d5dab3bad11d1804dea864fbed5bbec807c13e4128749cf8c11727a4c528f91ff0217f953a3048de5ba7a2b9ad00f0213d032cc674e1029c71d10cb3f91de53753a01d6ddc41064036a43d613f2bb83fb999874a0fadcf8a6d40b91713cc9114bd44c0f1333ef98f0efb6372a9a453", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00815a61f2c7622d1b9e3310104a41c576835a29cf3a875e3b1062e4588716d25777f0a90fa6a99a95226320ba225b8965d0ef5af674fba69a8acb850b7773be0c82", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "edge case for Jacobian and projective coordinates", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004010f43662f4bad6187ad22a41dfc831dcba255af6c4b5f1c14b2ed5447f88b65d690b875848ea7a0c4efe55b821488d1b0f85cda6e7173d87e0d76441aaf60e960d10017fa4b51097c5ef9cb66d6c3eb851e1a8a41102452bd3f8902f17ee72ab0772241510144674686419c7cd55a930951165ba07d34c2c20c421069c1fe3d976737a4", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0110ea8af76567351766d7ddcb7343ee04edd95035f727e6bae0d89d5017019a3df79554d1d0e84fe339a7c0fd79829cdae1372e5d9900a0dc8bac63ae33066d3f11", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004012183fff5777e319e8cd23ab5392baa9d4b1d43c7f8b01f78f295c0c37d4a3a122f88c163a8f9648d9da23b389ba56e8e9ca022c2fe9c273f2585429a2de43295b901e18e9eaaf8a406f10b1dcbaa684743a43d203f6cddd8709db90f43fe7b8b3815ead2046b6b37239e065da62d797cd0a73122ee9bf1bd00b0d801297a3d2bcefd0d", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "01f3c9b44faf754be250c2ed756541c261cb53795a555e924782dc4f2c1dd4a3855c823f33bdfcb0f0503ea3f9a911e24235375a69da21a9ae4c647738b7e5c52909", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040096068a512e317ec63588ff28d380a8d7c91e3a59279c85f5416e8ed321747b05d537d19d797364afce0e548bfb758e33cc6d751b5c217972de2ec4ff000cc15dee0085aff0f0252ab46ff80d849e14943de8145dbb307b4bc45c9eede78c040a0836d80406770c7c9459c065c53367e683128e8fc1dd89190e747893d9f27e49610bfb", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "01f567d01152c90644be34fc7f4dcdacda02e1e14d80cdb377611a8c9a7a4d0fa5413b9d415410c9ac6ff1467cf37235e588d114a54e6f9e0a65b6d02cdb82889814", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401bfd8c3e346ef884b4b1c01fd273e982fed38b5c8046165cc1e0de876787690c19c4ec24606bc8e1ed83a4ce10b7a42e6db19c7aa5e9971654e57842d41e70985a300b357351499600560bafaa25e243aff7b33602cf41d3518499e1b43ba1e814a0b45ec01fe694789e0157a3c281d17fa00e7019f47ae7a10ce40ed0cb7ca56b41e26", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "01819cd3a3b36883c480c270db139a94d7f94afd8879b34ef65a304d0b9a6201a1dbcfcb8ee5c4e66698d98dd0e8bdd53e563628b15afe05f48230fa1c52952d8989", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004000cc8c84d1db71fb91595f00703df257f2a03057847b4b9506d3b2615a8b724062d93a62954219df9ec986261fb7708eaa13954182e105e8e93c111c0d2a8bdc51d00e20cc6488c7761f31a3e762698553e5f2bf49b41a3a95ac5b4823c29759c738151c3019ce9d3d9ee7411a4106d5810c8b8aafd37f544f1caf37f6f5fad592e59bd", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "0080859c07cae1911b753964ee175c8884bd19abad666e2e472ed6329e71f951534227b2742805c6e6310f6ea3230bd403c2260e97b0d7f1274027f7e69fc7b81273", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004005494023709ee6ae39d0c5b67d959f5f8cbd1bea96442933a8929e332b704f7146ecc689b7fdb85c83f3a60846e692dde0c2748cd7becbb0d6b4c7c0c0f793f3ade01a77d75c2600687241843e2eb6ac81ab19d0f8a9747988c03f2c770593dfa48048f2816e3856c5f11ce3cdcca3ae0e1f13718c2c5db2c1c859f7caeffffdfd629fc", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "009d532af8d99dfc0ce93e2b63305b1f055c42afff3fa90111b071341ccad45ba63ad9ed3a141e95c0cd0d70e78a7ebd82c22e68fac46aa5c9335a955631f9b7c66a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400912809b73f50475a3b97e9602b757eb2e94fd245e483040e167b833840a62df27912a9c2e0317dbfe58dc43ba2053deede5eca2b22bd06792001dbcaa7ea6b700000438e5bb84f3ef7865152b2317d8df0c691c3d2bed2467d5e7507268a7ba98cab4e4608cea0f5fbf50fd0a487d005b381905c95aaf6a18cd1a2dbd6742b5b05ba71", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "001b018fecf2c07811a54b43a0b284c996eecc7742210269373c39dba299d1ab91c778b0df40aaa52530766650ff1178de05b69c3bc46b29d1af193433fa125eb900", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040043cfe2c30d3f9f0ff96e0e37f61eb2dea3816999c91c5b77957ef92b0ecde092c7504ba57406eadd744381906337cd13ae4555e50a9eb257168c2140e828a46ad30005c129fa9725a82d3e6da721ec0d1412ff6d6a2d8f75bfc7b2b6aadc5fad86fc1a8a67cd7e6b7aab42a546179c6e0560554db5f6138a7ef2dc79d2be385356c9ea", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "001450d8402f269dfb636499f1645445106c3d95f93080c994726db7e43fb68488f7430f6d171543a127038c930264e60dbf0f48d332af210ecd32320b1cb90acf60", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004012eda9020c665ae69a506ac6b3287465e0fc0137b21075cfb6c69963d9acb39a26ca940c3a39e0d94c054672ffc1761e56ded3c180f006857d131dc34a5ace7fd5001709e8a2cd99e1e2016c24f1c5485e3c47947bcc6efbebd2211c0d529a83d097ac611aa50d7879979f4be2d9cecc16360fe4b949ea9970f1075cbf957f031ccfdb2", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "007846a20b43a498277904686f3766b9a3ad994dc61329db3ae9d97618b8130c2bbece0da7e2c79dbd0e1dc8303ae5f9903d97157d0a74db7f465abe9965cfa83eee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400084ba1cb8f33cfba89d1c14ed2b50da737a05ae0a4ca35fede3b26324d3be74f5e3320a90bf388bcf8bbcc4c3c1c88ed52103cc7c5ca2b59ccd3e7dfab6d2f4bdc01a3f175c3c8a89d4fda95d47b2d4f3047aebc75ca7ea416ed76d8e689d7ebe7e977737bc6eff9733e6a6c0593486e62834ff46121b72fde5b3359fa707fba6d67cc", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "018e645fbedd9f12d4474db1206aa67057e08df567c1eecbda395edb2049f770908e3515cce779e37169ebc026eb5c353040058da85fbabd674c8d52a78a39723196", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ea36ce4e51bbb333ea942a5325e1410896e73652c2833b462262da5d791b1835538b06cd9d7b9741f3414d520da87f8be0be218043b05cad61b93b0bc0484e0b2801ece28df4d9ca3ffb23d69c36966cc26b492f7010dfaca67b4bded71cf74c2b0a86e61bc77903397eb8a4362379f09492aa63d9c9f5ff30d105b530c01f46cd7cdc", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "01912aa177ea8f8878447b4a19da17d482357a272dea19b542398a6bb48b80598754ae27c73958046aaa1c69951302727dddaaf966f03ff5b723acb7db7fccf3a6e4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004009c96024fac77e64b846f141cd1011f2ad52e3aa551103b96e35b439cf89c0304293f1bfb522f981fbb56921db87151e797d07f1127a01c3f3de56dd499656c103b0177b67fb2678b720d08ed05a5c06bcf88134201c192997fc6dc15f820b60bcc0f777d0661bd8f81cfed59deec33cd696e1c1ef72c7666cd5aed49eb325714739bed", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "006a5b0c09a7bdef316d25f39579279e286b781c2e430f201c54cfc9e154a38ec31eee9d09f6d5aed45056c5b7bb44213c6357c7492d1fd9b1c7dba116fa51d21cfa", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004008d4d677aaaef3925a1d41fce4d30543a1fa33a2b3051b367cfdf1b8da7cd1ab67ce9bb255e60475684443cf19ea2e1f01e58fd79f47725661be208767cb2a17530010be175e24d3bbf27dcad2596b8090c7f2e005901038657284a80ff77d3894a29ee2d7daa5880b3ba052261e4796f132db9e8a9781facb32bd8a09babd9e0cba918", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "00652fbaa411ad316dea40a37d3798d0c03ca7ca590d8eeaee454c7d24ff1c4ec7dffd5ef3e90762d5539c5a57e745b9c0f88e18fff6f737729e67606ddfe3a77519", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004009b76bfa396b3706381552ad08fb3b9f92b492c43d6102b7c02cca4017718e0643478c0d73765c27958138c7f6d23b4e83baaf27eaf217ed565e6602b4d080200b1017ba7aefc45677b8c4d4ca468e8a9f5a2fc411a4af4ff4593a9b781f1357aae46988642a1254d6cf588708efe60b2dfab15d371ba4f4d9e09e61f06d4d243e5ec57", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "00b1ae05c2a91f7e1e9d626b1a46bed2009dd6662e712416e19c1be9e5e512ec734127adafe6129a83d74ba7a797f41afc4b1145a16f6e389169c8b6592bf628f747", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004010089190e9b63f5a29e41b5a1837d9bf41c0b2ca107d6d088f4c1d468773150d7d145cce70a240827268371144e4acdda79d09a51b31ca20bac1197e619d1a84f4d0122c638c06912586580c7a7dee429b1ba000f6285b7fda441388c323c0895ff90443f0615011caa332622e67ede867a8c445335444ea112e80532d5f6df1408e72b", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "00037d3e4359c326f74a8cdcc4bb82090e93bd48757b6caf749fb39a83f992a7fa9676ad466c8d7193902214dabcfc104bc8664eb934a2df648b2e1f401d745e16b3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040070550537e385e4601490ac5a78348ef26678a4ab3a7469f299dc493bd2976416f649ee3e3cdd77191d8f8f9d600e8cb9fde3afe635e224635b70fa79eb1053744f000a546959ae4abcda827429a47a8cbc6afe42fa0f8391293da778be296c722e02c7ff55e20c119531d211173f02eb108fe1b8bb10d465c7158dd3cb2d9f320d1711", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "018e22a63dfeb14f28d4f338b78455877851e95b349796245effa830e29ea1978499f07ad9704b352746dac30bfbb827e1f00b979f642bb886f156b538ac6be91746", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040001b66958931ef30c54f83195cc40530c0e44baa223d28d8bfaabf10d16302f3a19601fb74efcbefc1b71d1e81ae4f60b3f8d7c21de1dfafd5cf19c94b396410c39008f13c42ff46d1a18f3d975fdbc0bbb43c31da9423fa935f4c211435518a01437bfaeb6aaf031f92b0c37d76290ff682378c2651cd975eac192cd6582dbbec09974", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "0032284ed3e15d5e9deda53ceaf5aff21c230e6038e6d7e5caae2a715a5288bcb8469ce2befaaf3b4184eab34869144095661788d3fdf41ac61ef1256890dc7a0beb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040050571167dc9f3b1f4ae301dd1fac47002d901398823f2e3dea4338288de8a8fb432a683bd52bfa380700b27a904ad60a5a4d363951ffe74540d54de8e7d48ea16c0085f6a7a743969ae27e9a96bc6037039a87d97c696aed99a39f6e2d56ace558074d49546e417d791aa5ff049c9d30c30502f40020ae41e7a512671cdcc49b6079b5", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "01dfb46afe0bf064dff0b4177f7fd27fa2ee0832af7cdc921f66c0e5be30c80630c41e09202ea2f370f5bbd02ed298b08820ce86e2cb724a1962c6e7b1062f5032dd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004017e4f402b1ce209f673ddf50ae87b9ef61d814d51e14f43da3c23f40fac422f1058fd8930dfaf11710c41a7f6b79255e1c2cfbad69d257a0ecc102f5e38e1407f9d00e10a67d175b399bf1941bd0fc13127f7eb112e1a8681acc2cfae0dc2959e8237488146281ca3df2b1e6056ee932feb1ac6e6e9df3f7a6ee6021578a0ffdb50eca2", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "0017b99fab0ee0d7f93f7309ffdc9149ba3cb683042fb3d02bd5319eb42678ac7ac7de214e5c0f8473627ef15112c0d1a3194284b6fcccf561d0d252ad25fcc93953", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040004cd97e12d062b7490be45d85e85bd401c1791fbb44e74a45438a8317c7ec9f025b34c595b4769c7b37f44296b4b8f73d5641da281fe35508a23ad503da91ee7db017c4ed0d84b401dab7488da839b20b57809fe7127fa66ef94dc029e44b250857b309a11c91f736a76f3c89d9aded97f5b0beec93a7b6d7882e428befcc20d90df15", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "01b66a065e62ca0ea49c25fe2a37799b46867e274f8b853a534dd6cd1ad81cc13d27f279d1ee5bc2d96d0b7701abb2d213fa37836bbcd2d1d8937b6d20dcb35b53e0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401b23c60eefdbde07ce9751d9f9939bf75458e6f2af0afa3d90fa1762d01a6d6e3fa4082c37ad6bf03ba8ff17919e8b9625b5a909c925d9feb7c3ee19a0425385cea000df68406c674be5e1f42d14bf50c19460aeebdde379ad3130a332e8fbeea1569d314d507b37f1dcd283b1c1715852bd39b81c4edcae0f2e1ce5358c6598b8c970a", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "0059a320501bde6b9b268236f966ac881dede98ce6356a7a900a452c59cbf8d8d20630321625c689c79dffffae7f870a7fbf298695896cacdd2d0e13b702f22e7e43", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004006836154477db9db03bb8a404c5942d32e1cdea20354eda9693c3333914b5190c9d63a0433a43062b8860d5e59c0f27ac633038491d46b91fc11ecef8326e75b50e014178e1bbf08473ee5ba856856416e6326cafe6f74227768e835c25c520bae05d1d451f639158dccaa293642a572ac7612d60e96df4c673ab8f2a4ed82e5e2af30b", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "00204ccc5356219beef3b6d90ea2ef3785f76f14aa3b84ca04f6b2a5e90700596431546e104e7788307147312ca890984f76b53c489de04cc728ef003d246fddb360", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004019c26d815bbe92358e1ecd02145a5f45e1f8f46cb90bae131ee589e51bb093d8410206585c03ed7c5b3975445ba07fb7dd668a8e58c27e01dd00b08fe409b4440e7009fe859e9d22bb1652e384d5ae579e44a0f8c5c82e59b4639d42a9b27cb140599c1236e932338dce03de46a60fbece61fd34b8ece7da937b5cc1e3e7cebcce339ee", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "017a82403f78f8a51729e8bc63c5de9b67c572d41f2aac28bdd95792e658338f19bddc45a6a1cb1bb275f8a910fa64daae2502600aa97b71f49b28981b718f6ae066", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401dd2ae95764078496804529a5eed0da6182be0f085c95789a2634a9569f0080861b183cefd1a1489d0f90465353b972c8450c2aeb5fd80be64f15a719d0873e0a1600e1098dd4b30f78e3fe6c1aaf0048b15b1d0f98ff0744c1c888641d17ac216329376be7113e9321ca7f9f7e1935dff661bce9ffbe86aedbc933f2438fc482c462bf", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "0088797d31f9b66faee97eeb9a695cf668c7960f49bdce051b2fc273d5ea6d86c78688ee3ef4be14eab0659c57ccecb2bdb190e50be04f65079950c5eb90d676ee57", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004007124ed9d261bc3e5d29947ff49cc4420db90d3afac7eb6ab91bbab090bd84ffcc3ef33e963bcc05685910ee63b063bb9adae7fcea41199619988d34d6477d11ea90039738ed5529f31a557970f89e6c927fe0bdd6413dc31237e75270fee8e3ba6f3a24ee56516ece117733c385a8bb759e57ee79533f3c857327b7542677d834b8dfb", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "002ba25d016989ea24d55fcdd9dae69bc767a4f3281935f5066203812977737b6a256ae839cde9b273281672d7d85dfb40ca895fc1449ce4283f7416cd913a56d8e0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004004220b1642db63810f96cf54f93ba6c3c9b16baa8ab42ecacc281a2fca368be876024b6ae18a8aaf9e433799fb43c0fa175d4ca4a5e121739c7249e9a26fc9044d701b06ae58dc3f7b773013e2dc800e001220bad2e68115ca67516e9c81763d17eadfad2c6d38226f66623a2d5c11786e07face42d7b0a1df96d095bbbedfcd348e4d6", + "private" : "018f3dbe37135cd8c8c04182952f6e6f9bfdbb6af4c98f31ba30abc68d88e1ea980d4edcdb5b19f0610082194137ebb019e7a664b522189a186cbe5a03376c0713fb", + "shared" : "01f5646e724f637e1d4ea8997cc67268da3f741b9af6d21f30775a9a9b0977ed75bfa0ca5a80db2d44822de494d15c87d392cff4acecfb50609b43d7845928286541", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004006db3dbd1af249980effd624e9f500e4d9fa446c9be94e39b4860767b55b1310889e178caf6c859f60ffb0d87612c5790833cad160a5b23f741221a123e36f0eeb7002ce839f2ba3072919297ee5a6829b8746af39fbce9fa70dbbf59bd209bb500d6129419ba96020a2550be0a19426ee9e111e6987af0c326e1ae1da4365d15a7bbf5", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0177701749c0c54bd6d54ada39aa2222e5b4d32273ea165941d1a9a6114d2cbe609ee62c2306bc5c1ababe082272157fdac8dda39c7b452820c943db4267fed8c2eb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004000d2fcab62b467f978a0267ff3598e6fdff087d3237f8fb00c17d0f5accbb4eded3c4c4858d4553033e59946030c6f5223779a21205ba2a49b4545be596b76f91b20057c975da0520e1dcaa518951db057864966c818e4e64fa910a0c0c7f9b894c06461fed9b44f7ec43b70e3339da0f566aac07fde501bbf22871452dba5c93e5d623", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00f524b1726e889d14d5fd70bbfc76fb2eb32dc2425f112a5fca5203305416b85609f337cf87ef878e64e375fa29eb32f9f139bf775c0d3229a72c2e880979f822bf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 70, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004002cca1f37dd94a0a47c8168acea473fb057652713015e585743c9d33f5b7d01d638bc0d039147581a5f3096139e5ee8ed38bdcb72cde493924776579bcbb2522961015bd4859c2015c081696ab105b8922c1f81ce4a6104e5b56b3cd99ccc3c5066cbc339ae685a904df5dd15485cc3ca72d2c84f15f625397f4605905b361701e00d2b", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01ca20d556bf1baf10153e2c1d99b58fa8d8f21cd7eef30afc94efb47d38bb364abdb59a326dffc41fc056efb714384b5d3f09270b4806fcb0e271383cdaec023baf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401b5386fc61597307632b3f2c984fe0ee8e22c5fd904b1d14b3568e9eb76500379d917f2430b7f2f55e0bac356e74672a23df2a5ddd46fc0a58f9f5407093726c25d009cbf983303fcbe0b5a926e28c0654ed457437e4010ccc1d1e02e28688c9f210c76af02ed0df6b727fb18b938718e9dcc2c2421a639d732a61711a5a45faa1ba144", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01206d9bc747f0e7591dbe7a88950a78db2770cebac4e91f71b3052a336bd19f0f906b7298eb92790be7bda33c28216b2816b100fe31ba8a7489a9eca3ba82b9d198", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040012d9ebd3feb543b43cf38f7baba9c20fcd5fe2dee9049ca8854184a2ead64aa5405e169ae827413725958307939ee2440c21b8da58b3ff516ae569953cf48737ee00cd5bec6cf728632d31e3a199a298240dded0ab5d2b3513bcb2d114c6b8f279a075ff0c56a3ee9e4058acec8936bf86bb2844ba1307a434fb43d289746662a83dd5", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0128dde1341ca17b37efb34b30ee479b763e878dc8006c8cee435c0bd21073c5bb3df52865bd4131f5cec41588ef778ef14af4ca47dc49a16d5b7008ede0b6e6b1b6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400f3aa49feaf686fcffe3a0a360692ef02feb14de6e0fd8dc922857b29d6837a59ce4013bee99bf87f8323c3ab7f57e02e7b0a0dfaa072bf1ada4836be4908ddae49006af81ab3e305fbe5ce8a819f8168a8b44e40b16eae8268a60ea5d66c0f284365e609a19123370beee420d0f019a1984156ce29ade49510e7a3163705333b858914", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0058bd4d206df1cfb3fe349cda27b013d59dd6f507c066c0b6cf458aa54a1c13832554c66ff27f6175f1bf4058378c9f7c7a9d8b810e40a3a8af19fe0e48c7284ed3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040054682c186f9b80c4c76d7050f6a180fad9fc8519419574bfafca9678c59ca95e2253348e0b157949461e9551ca7ddfb9fae8fd7fd23a8855d9962913c66f2fce5400f405297310ed41239c565c044cfc4cad2868126d444b373d52e0518245600a99c40f1bfa5cca7d1f397c18ead33c4d3fd4d431ef84f1129238e296e3ed7be0f99e", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01612ebacb6c31af2008aa264c45d1cee7aa533d78e1fcf480a3118d23418e23621f0ce9c7509f7182bf23a02a6530659ba62c5f16f8634a4f74d4c32b26c6eecc27", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401eabf319253f883417a0ce265d3142396a75f830f33589486889bbd4e2091b827fef6090ab65768a38ffb3a9c97796464634d070622adbc3e9af198efb9d729d7ca0002fa30581a7b2681f7e224ead135ec7a6163af4f40aa333043a2badeceac1353ab5ffbeef929609137cd437e8accc0b02411603959d61c7a70f1391a7a992327a7", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "006a3235df6b85343eab82350620889feba273604e59eb98d78fe63bd441ce39411ead8402e2507fe10a03fad9562c3be4488378cf2a1f4c42785e7d93218d99fe8e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401d36e696aadbbc409b4733fc3c86dcb2e980a1b7d0158f82a27e5b1337fd2272e52a27fe67cc5872b5b46040d88325b2b524a2d5b873bc54ff051c1d16c99d9bc81003e3f6b1a737da16802430f809e084cd8b3420019c2f9f1b978a1128ffcb900b9c4faf177a7877e4a8384728a1c309d2bcfb412fa983982ae6b459fe07eb9c79edd", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0009ca929a3ad9525d0ae19d36b40dc543d2348f8b0d95c59c4207f86a898849858e939b4458b568f57c054ee9d95632aa24c5d5f1d4eaa89faf8fac4d11da28dde9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401061aa89a317c63b824f7ebfc8bd9534e297df9bacf80b8350cbd94cdc4d3d8127a80db9555b77d50ea82c99e667f6fe5379a77c9078bf9c7cc049abe9eac7f174c00a9abfc2a892f104e30cb20cc2bfba6b948c6637ac062e83ae478f096869f17dc1bb4eaf52f7d63518031edecb220ec14b0652e6c96e023490d5ed08fb4259da9fa", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "013950ddb6b915454125e37a03845794fe32037eddc04143d91cbf2ab842495012896460d3824374b214ece10f39d2ac606bb4b2f9b27548e21720ae13266d14beb0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400df58f193b6d4fdba1d61a4e073a305c95dba4ca0fdd58f86ee32a9304a62097ac3c0d1fae32cf2e4e65ba4efc6d0408725f57274f9bc2289ed426ec27079ae0b6e01f07d98e2aba8d38e6d54b1496d68251004547f50789754c4097662827bc83f2cf59192eb9e09011b30c54cad9f9241c092415a366ffe5b6bdb4cfcbcdc46edcc12", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01a1bc2b5e8e0a6210ef8a514ded99eee30ac8e9aa7758adecc4910301fc626a5666e4541cea03a90f1e59fd82b8cd87086f261052124cd43b1c89fd048dad5f2911", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040073b917a356c0de8fef14593f66d5dab1f0d56b042ba65d203ec139c6cb71d90bb7dc0444d0e3b01bed97a5c69f27549c92e95bbc7e8e0ce932e6c43a75550e86ec009f2014e29acb2b255bf6ec9118bebe7325e1f11ff7885d1a2e142945cb741e26b4ffc6de72b715a148b840df549b49c9a05f8827f3ef05db98a4f664f6dd8478f0", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00f34f3b8ae2f0fec368396633f581b93c38e329770085a51a93457087f8116386d58dea54b99ce56a80896aad40c2dfe69b2dfe126be17bf15ab7f19ce667bff4f7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401d860abb5c65f6d1791bc3fd626e3da1ce890514417d67b407168dc7fc96641fda56fb1830f3695ab0171d7866730747b3dce3de61ce70f831af85e5c6eae0b7c7701b1eba92b65ba7ee9691d908a14ad0a116a4e09b40c9ea4197e60c0b54f948422baa97d80b4ccaf7b35be681ded0aecdd8bdd3059054af838057888489c00a3b759", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01203df60db39732207bd8db87501bcd8481664a9111c8c65b46f002b0b83159960e4710eba548f0039db24f66190c56053370b3c9884d445971a1296da4d656f9c3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401b341a7b58122c70b72e70b051a335186c89fe47b8f68c35d099b7759fb6208718875d8cd8c45d1151a370201a1b047002f619b05cafe39d494b6a69a52b42653330127e70b8fc840891395afd3b03732d0a52f4777651c3d8a8579d6658510d868b69f143c7eecd2be412e0ad2b2d7aef0717796f3f8480fa924b09df90188debe51bb", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00b22d94b53fb00d48e12f12560eafcdec7ea157c9b042436fc66681de96af98ba98adb7faf79d12b399e901ec7bc9d5117883da205ac26b38f788a7885d434b6e18", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040001ff249aaba806d838c1a1d00d9d2259e60ea1e8eec6686405462ab22a32a5b673932bbf63fd74eab3f63348a6c22e0d6e594b253f01ea211bb76f0b9dce66d671005052c1f44d17c334e522a0d8e3d99ae32fa48df6fb9117bee431b7a37440310985e5fdd82170817b0f68c0bb7300d217854e45fb694b46f5f50300627390900087", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00e17a9ebd3ce6a19e5eaaf889b120ac1e38778e1c1129c383fec2bf9780d1c412ebc8fbc29b0646d77b84e45493376e991d5954ce3b3caf479cf8f701d88351aed1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400d2cb243bdfc5ffb2bacbf437161f02cf22971d8b7f9cd0e65c174989f5ed7c9cc752a0c6a7719dc1bf3cbb67af5cd6025e313a4b0c46429eac1320a6ceb279dac2018093c8ffb1767b2b50109e40f18dbe748a357de1e284664aa7b10a8df3092a81edc1889d153965eb2e4f7b314827512b018baaf392581e2a49941f606135648f8c", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00ff5caf7fd6da41a1a8bb47de3a083883e2e382477c1ff1d6ecaa44a163e7bd375b67d7013763a776df38e79662310a74873a4ce6126d2ec6f68263f24879699700", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401da72330fd00ebaf4e6ff8a303d25c2527dff19d10d8e8aad05fd759d98073f262e693ce2fc49747aed29e27e323e535d469f0fcd1a8a1d08604fafe00d1badc4b300b7de13e7dcedb7376004a9f589922f187bd1be72e2de7893873d2392bbb84aa871100f8b95548f5df89662e98b631c4ee4d0558096d4170be0c1e21cc05955823b", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01a64da0503e2df5d383837d05cd436ea627381e48e3695891175ac8ede9169ddf573b66726c28132277beda84bb47f2792b41113a0d2aca71084618f55daae55f79", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040077fe7958119535ca6c1a7c87bb4dc9b936678ab3b757e7816938bc857643606e61647d231b9dad3e03fc4dd29ace5fc823e15f3464d8e236d5862b1f6280c836920061ba736c11ffa6d0fae6bc8f3e66babd3c6d79b89ee639459ec65a71f12eabcdaca447a993121dc63dde6ae0ccebe415f4bfe60fe3fec3d2f48a084b759f078ac4", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0140952c273ab512e3a58934e3754f272463407e6189b9c1e259c27f6d433c4827532df627745acda64fd17993508bfdef54711f575cffad61c729e8d6dd8784204f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004011d3ff14f8906db60c7bc09c786be6847768b8684957bf3928c556bf5ce7a8cc82f9ab0e63b4bd7eb87767b3db2624957c3f103e87b5c197dc8c6d2507333ea569d004ab9eeeeab950086e030fc60b6b2e47973582a282e3b019e62744f19c60ca0208e3a537d6ca3532c59a77c540bce03999887483ddddfd524b6f9d7bfb6b1139bba", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "001a3a4343a4295b07d4b28f71697caf7e363e2f3ca205ebb828c44deb2f5bb3d95116f36e25e90eb00424c9880b4553554ff01f38b52cb34da643207d6f29312f94", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004009c9eb4cc6bed689da815f05e3ccd2675473c427d31158f1210fd8a6afcfb272971ef0a0696e48fc01ed9d82c9b1d4be086fa5a1363702780838da4fbd6481536d300b387bdba82a5fe57732ebed26a487d031572c223403c063039617f8e5c2702f602e4b87524f298392ae1d5862fa0ff992e51fce7f1457a0991bf25f66cf845639e", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00103eda707b4d5e9a4adc17b88cc341966798b64c242cd13abdf319b77cb9ef2f06816ee820898235198f62071ee8b5c1735e288dd75bb0e5d5479287a02d21e833", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401993d74f0a4a12d2804bf9e25752fab9dc0ae60abc6772dfe10afb056b3261f14fc51584baf256340b3652120f24fac700b729dedec97b421a1e931c17c528d5a4300903f97782ec1c5aacd7c3ab02082d7a2f631d9944dc52c9ad4e0258a899efb33bd81068ad43d7dc643b4d7f239a7ac42a26f4d2780215a68495f79eda81e8ead64", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01087ad97d7121928c8e35e2fe915f8c90f3450dee09d3f6761c290426c74318e88fd04464c0fcc0432171667b571d834ae77ecca8a410379685d30b8cd28dc04bd7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040107d8b63bc0958510eddab9f11fa35ae4e5d97c92304038d8ec27f6e97005d0143e969c5419e82eba509336e23498c5b73e8f0b21e3d9f5cb561609669ef678c7d40196c535b623be6efa504e969ea71cb925287608740d04acb342b4135882783db8d255a6d556ffc16524babeee06d1f280ab8171848e7db54b76a3b31e4157219614", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0074c332bec2028372dac82bb74c3f3b4bd0f0a6521dfdf0cce877b1a99e506ef0e4fd9bcefd3365428f257ed1595dcedbefe99928e7fa7af891fdc1b6ff9de12536", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401d3f5704dbc67fe3e9ec3a02612edf04a82fcf9d5a41c5a330f4dc65b7c1e8a927fedf31a52b28bfe2b84e08f9dd98a2689440553dd8919fddd56ed736b9d064cc3000179aada2320049f18430d32a65889ab5a9840ff43388f7e2253be3e0ea41d6abe9e33b0c8a805c80c52fa66dab45f7ed2043900e3ada8d025648c4822743b5194", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "018d9f7f732023d2f87097c6f58afc7cee91c67b3df3b318517bbb402664f5829408d911b0a9b41cb2f7dcb96d4fba36d90f0275e0bf6b1253d17ce3f267a7b56bff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400d3dc62a070af81ad1dbe02ff075868aa35e3c3b555f58da4485e15bde789b6802b579887d753aa13589167dd26b12489734e80a34941c638c102fa5c199e4d11180190a3534120b8ff4cf7a9386185cd2c7aee6667f130cff1b060242d340029c15eb7d521e1f6a9663f19b2fe740b4384bf3480e76cbdee1da77b8f1c45b9e926884f", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "016f129531c671388010d41c934a2592d57de3376de7abfd32db1b42b34fdb13e5c8371db8c36101ea35e26d04e19ba891b0816a821c5103a1f68c9dc399b1e4ed50", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "edge case for Jacobian and projective coordinates in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400d51e31634926269b2a0885c828a5ab76b1fe4e5e3d941d9678e4bb079002bd3c8e6c1f157e63c275731d57379142a8df9587d10b75ffe62eb4530e75d7634026d7000780e8bcea8d1399943f5bd0f4fd1837db2f9be7fc4669d0422c428c223da53b9566ef0d27bb64cae01d9f949d1a744e8b0e792780d1a243a079395418166d176b", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00f55504f1714e07702acb1c594dd246603fb71f11e49de5906acf6dc3bef6a2402e1c5dad8831aa18894531cae087a2dda40fe2db582d3c20d602af62dc12b7e295", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004019d7770d5d9dbe50786ec909d071f12d0b6d10c8b1ddbf546d0e6f4a3ff7e0476f04472eee33d8775586504f005e82329cd6b6cae3f63012a37ab16c47f27ceb36c009d6b670eb33fefcafa11857f5c3bab4fbe41c174650e25e49c65ac63cdd2c2a8f8f605d7e267ec2023f39996b8e825dd0431822108e2c01ff07757d2495805b44b", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01b63a08a8fea820ed8c01f0b8482549a13606bd95a7f3689fdfca6c3f4e3d349c7d41847f134d06fabc012bffe98cc6e16ef573b534b3d64792d12d0cd3f1ccf1af", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401f383ca1fa8fba4ec0131927e6688a374f1fbf04f2e793b6b0631d19c24ec6cd75c52d0b19ec27c377a4ac4834bc99001624204552154bea298566300643c63287c00bd95617d1655dccc5b8ad50fe7b1c00bd5111b00338d6e5987a0742f608b74a93502b1260fd193b3bd3a90c843c1344af1638773189036637c3d7504d50e806555", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "015353c08ca7c484e27a3e04c1d8dfeeecac173c2b6e2a5dbcb0da5223e634bd2d527d8b34ba0e592caf9d6234fc54452c5fb505833a97708ccb8debc4df5dcacbb3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004005d11ffc03c08ae323cb938fb6f2a33efbcbd61a65840c33b207265ec8add0764d59e5840a85a062bfb1f705559c1954aee96e23c888e0ab6704f362bf5c58882f7013d7a4af3b3a58ad19612a1c371234388d8c06f53f03b39e84c22557cc6641a5580687bb08632eed31e0cc114d179da6865376a9d9b0eec67c1c598ee972b771b6e", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01740f76c8d2bbd7179fbed614123fe2fdbb85fe8220300b40cbbb539d4754c5ef63f7b2bc27e129478e7aceec834713ceba27e2f6795344372d3c4d935a9c9e4696", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401e9e395fe1b0b1662256a4b5953e98971dceee098b34f9faa87c07a15e2d9618e713f98cc4f8e89d66e06bf7f6b5b2e012491851b11d71141385fa9b43347c4823f008205a391bb03750c7951f410691dd42cf3d71df5f76b98c0d082460c21f96361013952224dda7463cde16f242c34c62673d9156aed7260e7b01757eee6bea60ee5", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01734253e8d5e9308cd51bf04104ee08d163acb590b1a955896447b8a255fcd3c1256b4e86b9f316eff4d7613b3829f5785961eda4ee9eddeda4db4d60af19e31973", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040164016e2bc36fa9ef56713da89acf0b048082dc631156740ec8ecd22c1238488371284345a96ecef6dcdda2e13b4f2b9491c386274897fa13c6b2313c500041975501c90a405431005532377c204bac9a0d9d226542584fbe3c89f785c708a23399a1bd14daa3e68cc76aed9f5fd4bfbe4eecab4a7ad2a00170dad37e6fe56e925e6bfe", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "009c6234171b4c43f79ff0ad95812e36b0784ad59253d20ea0cb98633fb063ffd8aa22a2dcba29d4116cd70737c1b1f6ebab4731c5b8a455788597a607b5a45bd547", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401d36d2b3ec425a6c2507c4ddfb5b4a10ec4d4a150c5c2b80a263baddebd3198797e97ed7d0cca818cf4ddd47f6134b7a6d2b0a15ee60973f9d7da220f62800c5467011bbb5f8e9df65b9b2c105e4d8f6dbdc4f23f256b53b47bc2892c295e7cbdb4aae81858ba66443255659beaa308aea4c509c99d578fdfb873f51ff53681aea622e0", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01cec1f027a10de4a6905ea32f534851a2f23ddc9e7ecd3d24b8b88be01f7639cac7847c9abdbe746c171a913d6719d7c2a0c0359c4036360be1e75e8b2f7aaa678e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400db63bd5aee53bd63fce054063dc364aae4f320f7ad2df294140431ad1550c7eab371a13d4dbb78f63d7188e61dc8e268888d9319906a28f360bf7ce868eb67d0c7007d66371152954f48581db91c1533ddf3b148b7e96a5e9964f706cb3f6ee805793fd7c5767e79f426233308c8effc1da71ec73744a49a69fb5f662407ff54d94879", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "005f900efbbad497ee904b80fce07029ad3f979cb3423dc7d16c9cf0853f89a487dfdc5cc34530afa8ccdf5a0e376e278a091bd4f6077c941ded6f1b0fc8840100a3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004015681f7786b77079c6aa9ccdaa58f39e9ec4e14e24d1bb3f0d6cb56bf7b78761c3bf58c7fb76a22943bb25db80eb0af7410d607154ef927152a8921fdefe7288dba01e5b19c827b288558da2df5f9fca3137ed0694078d3f600aa7a495fe28f418d458bc55276bf7d2969ac2429e2af8d05d4112edbe93b041f2d5d56a4fee5fb918b69", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0124c23c00d30329065611075b02e55c3c667bbe3d65160fa189128af455240eb677a1ee07ca8789be7a8ed074ce17504a5903d9a752681afe6342b054866cbbf199", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400b3e7c9774c523bbef857d59f8ccecd067fd18c7d7777c82c68146b338e14c5d0998b3b962354d9b107337afd4137233047adb352b8b1e215fcac25f1e3395940770148e5ced58410183d15c719f8ae4c19d95f910f3583de6e0b63b938e2d5ec670755dc24cbf08f9340f914c5534bf7f1483947b6b40626f1c7fe0e4d8ed843027b14", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "017a940dca15b1db9a1e3f54c0aa8eb072dce11650ed920a2931c68b930c34b5811d076c0a3d10397a18bd0a7a87faa78a6d984fb48b3ee53d20bcda84cb2ea7baad", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400aff0e5216ee7cd115cc630909d20fd3c382357f0744480d86b177af4ff9471a1e360532a92a58252d93d1ea16ab47f4c090b6aefdc6a7a3778d15c68a866758b9a0098e23c4372372a527be2c6c3117380b4836d5ebd0807b80cd9c6efd96a7cf0757c2a635b9ad6dfe01157ff92ded313a78cad968082af33d136873f808d8e491626", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01b98447f0c3a57def592cc0599ce7406f148186f94cd307bf87e4ab273d3a9b5ae6369b26692cab5c24bce59c13959844077783ecfeb777fcf3ce998f656a2382f7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad13af79e8bda33120a2a924b481001117479c8fbeccd0a6af4f50edbf7df8e395e32ff6a1e5b2c1b874336c44c65e1eed209e547b3c5761cab96f56daf17bc69300286bd6b0206cbcc7a99e7807f15df0ff83cc17e4474f1769c473e7141c384b8a39f5b5abcdcfc70497057ae7e09b707ac3a71b824a55d4d8648c5a95d63bd82241", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00a3cd900b9885629ae8d83fd8143e7d8a291cd933163bc658f37913511837355082d5f39425ea322b19d61db3dda05f255e140eec4e98a7a10121eb2918dcf126a6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "edge case for Jacobian and projective coordinates in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400d4d76b40d97046ccf02d5bd131a5452d91195a13204b6eb4f71a5da9dc9156f619af8bfae8fbaced475c27ca89456f35e547688a6d0d9948fea49ef4b75b5e839c01738db8b3d3fffb1ab697fbc8146a70cdd657d307a6e6ca8a338661a08131e05c680ee9da4c88a90fde96c5630227c2fd4323f302d53a0b5121163ccc40befaf533", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00931d8aa38c530db8d5e77daa406d166169c9ceb74ccf7020965673d09133253ca230287ec9997447f1ccbbbbe868cb73ea0e28f4b67ed49132995e75f417838d57", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "edge case for Jacobian and projective coordinates in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040103f36ec425dd88e5d82d1f8d747c93eecc4b46ac98cd364fc678bc0d6c79f8bf1fe0bd28235ee43fbd0dc237332cc2ed6eba8c7a5610b5651c9e0f2644587ca3bc014dde8fbe83b569739b860d7b1edadc7bf73f7f0e7a8702eb488d230da284322ce020e9c8831298da14180ab008465e6ded1f1ebaf65640d92ccf29abb6751a6f6c", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01270cfe9b869d88e7dff6d45fc752a4ac72ccde73cf12ec227c274328b001a9f24d92b00ca0326fe19d69573d5b3e35f822ccbf4c83a3b3bf6e3153f0984281b3b6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "edge case for Jacobian and projective coordinates in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004013f8cc5569346bf3325d8405fdde9fde71dd1e953c10ed6215b4f4010f5bbe173718a8e2e6d9f802726cd916e16ea1cd3148c879f0acebd8db2628f589c19aaa5be01595d669cfa786bfeb9dcdacedf563d04059867898f42e8a157c91133c952a97d90389891b3647875c822eb48f761930afef9b068853efec0d260d8e51dbcb6d24b", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "014df04e39e8bf5f6c34472f94f6f428962ac8a39d273377d0007231fa7f5f79ed896269f65bf84eca44e0739cd8b99f2e67977eefd768553d464c79e7d4d90a0ce8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "edge case for Jacobian and projective coordinates in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401375cc4e1a928513598081ac4e4c0632c24bd1997e4850d1472507bc71422fccb64cd823d3365c06e3f08c9fd6e6e476a68120f203ef69ca11c70889e3809eb75dc00d1ed8d7ab74a72462367cb93e843c60389bfceeb2f869aa33491961c4b8389238f5db1f78b39fc0923a54d9a7e0be8edcb9572b2dbff0a729585382bffa6901925", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01d3772b252c9ba35ff3472b280a7635ca04513ed02e4d8c25596c900c37994d26ea774737d9a9a8f8618a6ef0c1019344cb3f9656a6369dfb1d8f2a3f28b4f059cc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "edge case for Jacobian and projective coordinates in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004006b6c4149ce3b4fa619e360f0979427d2c6bfeb3fa41205a0ced3a437287c711cc6e5875992cea313ae3d2ec0df6e4217c8c42bbcffa732c403e7b4471d0cf3953300ad7f74c69b7308b78747f73b4e3e66e33bfe4b21d45ac82a0b293b0f635addbee42a718b726aeeb9df1355700497900d9cdd0a42e0228cd1794f767d3bffb1c7a7", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01c548cbdfdb40541dab744cbe5c45d96a4f0d1cf2e537d33a9fb4e4675c1ef54582c19294fd17c5fae2c51a9b18c37195e0eac0d9b5ff47a643df375a708dec71a1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "edge case for Jacobian and projective coordinates in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401a7bae08725b97e8ad3d91843a4714d9205000dedea86076105330730bd8b6e5a683049496cd9f08b321cb2f3f8a05badf2370bb90ea1a49236e3fefd91b9c3d76c008c50244040c65bcb86cdbe193eaf6daaae2ba3a328adebc6b72c12736608abaf9c1de7e7b351c8e75d4ab801ffdd6e84b7e46b50976247c32515bf91cea3348906", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0052c6c1b82b8e26f7ede705a8b484068b501a8da469caa5c203be018143618d984fa9421b135e1ae2212a27cbbbce3a745780d1847059d56c3c3dda474862a7904a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "edge case for Jacobian and projective coordinates in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040090f74a2c8a5d2a990cdf38b185c7176b37ee50b70559ed85daff2fd45b94b7f9df34ce57eea654427bfad8991f6a5d385342af3a5688b1f8c724fb7e78dc18f20e016141f2b7bc942286dbe8344b68e0f9a2d0950da65191f47eba738abef20b9d107cc0cccf60bc9299b75f0d14147a6c7a7d5ae67a0087eb1f4b48a2780ec086428b", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0113de20aea691f5d38b80bad93c80d92377ebb7302014f64ccd893fa9e67d384a4ed1a5e3fce2c84ba5fc379a0a6bdacdb6176594df876d3d13fdf1dc824da825a5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "edge case for Jacobian and projective coordinates in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401f7be229dcb35e444d3d891bb04ff5aaf270e8f8d90afd65afb1c56f8c77eab3d32e55daa31da9aebda76fb67298e3a1bb71505d3a5b6c5af37366c88041090e96e00cf3e132fd88384fae8753ae32ba669e96793b69d6a815365387cd9d4d21ad2862e4b2ffca1fa8ea05e34275fea95ff1dccab750bc742de12611cc3a135a9daf9c0", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "012090847293ba80dc7a8a4d5038ad6f3ed436b5a82e7a4a6d7cfaea1c19d6c74d3f707fa0ffc9f15a8c95c3e040b4f1b5d2b5ee08b9436410e36fda203fd6c5fc7f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "edge case for Jacobian and projective coordinates in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401d8578b222092103bb17764fda334974b121305c4c1cfaee7d86e814dee33057a03bea234546605cf7fba50d2d57abd0808760a4f8d23f724c00f9f5dd4b026f62801923325a37b0314c7a1d185173b48c14051bc0efc9bf3e57ae778ba537e90c82cc0d42dd98e9ff5a8235ede5c42867e961def8f9f66a631168c2e3a1099c9c2de06", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0199aaaf777a6c29b85e0ec9902f4f8d004a297b4570dd4677622305f4339ec726afb98b554175b99b8b3243f12a60b79ffe259471053e14c768a18cbf9ae59e149b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "edge case for Jacobian and projective coordinates in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401badf6a411a405652d3e54b8fb2c5aaed8eb9ada9f06effc2e65299053b8a3216e0b5ee7b256561dfa1779970547b1072424b86bb6ef408cef575bdb02b79de35d4014ef3a47c25265b1cb2f28d5963f533f7acfbde34d45fa1ae5fae77b4c4e0c894280247664aad91c31a011fba50eb6e34bdfdf28f3e406a602c5071eebb632cdbe5", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "016b74ca4a588fa48cc5fe738aa84952e7d4908ef9fb69a4bc470eb72ed86b1c6bca0b6314939c311b0e3dae7fedd8daf96a37b7420dc556ac2bbcbd0dfdda281748", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "edge case for Jacobian and projective coordinates in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004018b9237723c029c551b1e14492460e7d2e4957dceee536dec92bb35fe8ede36e6b1cce155b69a0d7212c2b4f0ba89d3f6fc0e7f6777ff5c2eed8c71eff3c44da8480125bee78039fbd3c339a58bbf625e50346a3e8a9c73460ec68fb028fd4d14cd6315310e0311a0ec4f39fb3408519377dd4ea9d57779003862c312bfd09a9a1f9659", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01d81c812e14804d562e4a89e9eea7d26302cfd755fe9221fca577e32fd5bc534e3fb2d81b1701afa0b4d9f25bbd1b2d7ec984da404014b5c23d8b2958aed864db7f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "point with coordinate x = 0", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d20ec9fea6b577c10d26ca1bb446f40b299e648b1ad508aad068896fee3f8e614bc63054d5772bf01a65d412e0bcaa8e965d2f5d332d7f39f846d440ae001f4f87", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "017fdede9470801568298e0a94cd49a0e81702b6f4ef916983ff89e4f01ade2ee13001c6eaa677499a9de7a48b7c7956faac580e63933853134dc96852264fb23f2c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "point with coordinate x = 0", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040199ff89acaa60d0e479c8168736a7795ee0c1b5c0b21f6cbf90e30682cf4464df9232343c91f3650cf01f7bc2b148d8f3b707fd2e3dff502bca0c03941a9afe631c0084e27155c0903dfe65d7b5d8b1bdec2456ca50c977a43f44e4fc4dd70d94b29c4469655981af4f0c2181f19dc4481307e69e206d4e0a59d48e43f55809139ada7c", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "005ff9d0e33b19a1ed65408254957a43c0050b195dfd8feb56472d3fefc463d95910862f9bb0a32d98053763333f92332637dabe2a4f9eebcf48a4630ec50bbf132d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "point with coordinate x = 0", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004014369b6e6717e0854380833d974beea9cccc01d7fbcc39245bc1427104c214326809fd1a678f89612d087df5e3d5ab1855178e01fbc6712482b3443cdbbfec3c77a007e5a8786aacae75f9f7e59b3b00cf136acdac42ff0da06a0de82d5e3c4169a9b5d63cd7c0c68308585f6f31a300d33c010042b44cdd0e6a811ad614ef18b6d4e06", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00014a36b98ab57d1d599351272b3131fd12e18cb0f665cc9805b2402c670ee309a85b6e0c2a9cca28d5a4583ccccde7b8d5aaf30c6780cedf8a0b9a4f6a49e9c1e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400b08df0612ddbbd8abe1cadf654f7b1500942971cb17fb63936750308bdf3e91daba0e2005575de7e7038f8379e997596d6696e5722489f7fd5f41a85f9b27b206e006d4f3558ec858e8b7b8f31af480a80484223a6f3652868a36d8aa0412e79d57c5d32297d80b508bf5a1bb52fb439163acc26b473033dc24834e0a44dfa43480a9e", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "015415d54abdb8536e1ae2ac00051e2af3c042a821530165d1febb6ebdd74781ebd3387f9dd8845d31a0331e4eb542085b61f0f9f408ba5b4635dd24dabadaef4701", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400b574f6df47932a1827e36c9441e9a61670969817735632f1ec8fcde60509f6cc99a5c6530a96003d033f4ab63836ca292652b860641a2b98df83ceff2bf2419f7d016c80742e0392dde7016b106e3fb976bd5d8f46a8f0e74b900a8d26f6928b02d4fc1a97d84844c2380f6fd6249bebbba6e5f87fc5ea2edc1362d77e1c246651a56c", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00e5a33aa0d346ba57866741f99011f145adbf2dfcc10cbc988c86e8a26e977b419ac748b106f14ff2fdee5a326616ab53ccbe2d80e809811377fe9af2032ca18464", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004003174c3d34077f946f8986af218ca01f31efe57a236718eb88df26a3cccb24b30f1f8e9d4fbba2b953e161bd19447039dbaf1bce04c3460e1e3a2170e267302d2df0010cfe18ae6cb536ac3e14b3e60ccbe52b29a1952a47b5b3b1f4c2637ada534b61a5d94f658fc386beed612467f3dd1cbd8e4d6d154566ab994328d2a58e69ca7a8", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "018779cbba1718bd2b7fc2ac5cb471308576250ad412a5f98e28d14d76dafecb8455603bb24591b8e83e8a5c2c5505609445bf7a019a229861351d165801285b19e8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400f87bb74f77e9bb4611af79dc582e368a51f45e6ba1e0f3a56ff25a600a5afe0a20edf6496204fbd2e73a9a54d9c8807fc0b95301df19ca7d67299f44b280bc69630144cd54358b301bf341e7b0db7efff4b0010f179262e5fa181b30d19139129f42464b71ea2e0688ba3244d4f7cbe2f7a8c2a2b379c64a72d6bfbf87f6f1a87bc06b", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01f455816acb59e6189e6c14dad7a779958b9b60a9549728d628b0af1a38bee029a717b311fb2b6cea5ff3c8aea096236c67c6a3ace04264ac7ed1beea2a4f5e9044", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004005820a12b529aa3906afb061203c124d3b81f399b67f48f5cc3b5fd45907051ce0536dbdeeb4b3e4ea3e2c37991bf68be9a1a1c609a2ec7b4ab55dc006eae440dda01cb77d7df78b9874470c3dd268e9199f98f832953aeb7b07449d37904054c9dd217daf2f0ae6db058975123c9eaf9d886d5c3d6036907a5cff3c71c7a7a85f62f0b", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "002007fd98b4e334d9dd7686ae5da379c3c3a0512232844fa00ece76ea9421178b9c154942c0981ca2b8187161d59ad36ab2daf1753e3b59d8fa5b4c9bf224a7377d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040058e0d20d8a188d48ca57d4b73ea4e9f453a389d5d8fb948737ef55eec30ab60fad580d9e12bb840f82e74950da3d12be7266457bbdd943b831f8ad0d3b57e6243400d70c27ab9cb29f9d753967ffafd27551c78a1bae47441ad38204134f83495deb198247d875f19af99322c2937390340b327d9e6a58b41c76a326c6efbec02c9956", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00199e65e06f7c56f3c47aaf9fb6651f5d2fce23fa4b93a21dbbff96559b491bb4a60cb2b9f35b7b45c3a838828a53c547543656c657c916597ac04cc005b0205bce", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040014251e9b87ce81f7f149770c007f1d6320b2d813d27545773ccff4ce7484354fdfd19f9380de8cce76ceabd6530a0c812a34e4404bd82269cd012e1a17c71c9d6600fbcd443052cfaf03760bd5366378308fdd6bf29379f9b6b677c9e88b036ef26a3a276b64a7519e0d019a00760fef387dd483d0d58ab3d30158cd18b260e5041589", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "002ee30bb081a04b7c585d12cf2e0dcce94938deb0b72a5fba80160863854cbf7495fc4e8399ad06aa6ea05957b76281057f0701196b983371aeec0e4e31f6b42b6c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401f51838aee36d1dfbb000c0a3dd84755a87d6dcc5ee5c78c88b30d3fe1549a8918204afbb742acd9b5120f109dbfdf9e16f0eae84bc82caf41349252fa9812a944101e0b3a7669bb3aee54e64bb03b68a622831150719a21d4328f732a649666a2598d5ad0f62b00a265a9e08f5ec0b7b6f9e1f8cada04378580b4a287a3af4ae395315", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0189786700902cf0c1f5479d839ee4e2401bd249f413c04aa3018732fc5ff9c46a637479f93427e030fa474660e18b2cab46f6ae78f331c5bd351cbf32ea6791fed8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400a8bb7b5f4257a3319c6dcb1df58988cdf60453e439d230f4251632ff92b2424b147ca40824b25e6ec5f71599ccfd13ea62139e0eadf250c0d0da626f4f1ef0ccbe00494fa65939d5f5d144cea542dea27d7b26dcb5d5d6e813bc5307753b618410465b1b96bed79c98b6a60b58a0bdf83608c81a9ed362b66a4c61323b34d2a6416c83", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "007068311b5c58397c1637bd9af38b6ba87f10851eee675cbadc27860e78d448abf33dec174d982dab6d100d315c557872bc8f7aff2ba0ffd5082ee203840a7d64c7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ec49de21d692fcd7084280460dc1410b5ce14855f530214447b6f53d03b019b8e1fa7a862eae55fa9018fc93579936747c96592c98eec62571572e4b40ac8165e1014573cee65cae4d54389e8d74e120b308298f15b075a44ed0f50ecf3e4ab081aca152c614c51a7b312117df7fc607a861d2dad102379bbabb8d72fc836ec2c8230c", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "004e26f46b5204c8ea45f80115741ac6b0ad0fbc34ae30d89b85c1a390ca28b6b83dcd7448cd413a0057283dae285625bec2932e933ff348099821587beed65d37d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400558582568ff68175cecaa0652bef373d6875a196a30d77715638cd45059e9c207595f92ba5a02990a9b7a05fc8649365518cefea24601ec1187a9b6a6fd37d3e82002c2524983d5c3d4c093599f00f96a7a388e2dcd18ddd24923ab6f8236dfcd544721fd22cdaf20fa51e1bf9f9a9e998f34154f26624827cd2cfa1b0e634c83056d9", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0159f2d6523ed3f373f2f955bb302bb94efb742c39fc081da1b96b36ce5f3fe07bff07fbd225dba9ea2a82c3bff8939b3cffecb5844be0ece9abe5c51dbf0212647f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040188dcd8cdf3855cf7cf7f622511c649aa96824bdcfe318485970ab2eeb2428e49ae46e279e3b02110839d5a4471f6a236adee760361043b3106488488ccbd2cafb8004b584ac1d3223c7a01a725c38c182b4ca92858dd2e769f83051db953e20c63d45d6972c6659fca664d9708b6973905e7304c396c5f739a0fc66813acaac1ec1b0c", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "015b29e33f7959e2ca91f58a7e9e4b132a0989687f5a39f8bd61f7f42275cc256059a04f05a5a7a386edf071f7c981235c3d052ff733843bc9738fa104b9deb9245e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040113c71cb3b6b32f6d2087978f3f0aee36ea8cb1f028d2d98161f7758bbbeeb3b96588af97bcb4f3fffc457b90b51739e7894f238116e985caacff3e751b56518b3b005b71f5230598689e6254788b894003dc91ebd953a2fedbed23a068b9f943798bfe4d045f7b0bad536727a73a66f250136f8f5006753ff04b00a148afbe70efc143", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0039cf5009c6411a5b71b0453f85b41f506b72dccb33f344ad257244dcf9c524caa8fdd376b523480ba22531904215d26c8a818b8f80a4aa1dd111acd8ee84cd453d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004017575a3f85834ca4832bf64c59df1bf30ac8304291c815397dd9d90c02ae055964110814b158f029d40b36b2a85a9568679fb56a5ab4973068d9edd80edb7a6a76a00efa3ca3101158694ba599d27b4ed0c439977d2855dd57dd4bd311acc3882b09967af64fa34ab08caf24d2acaaf32d93cac8839d391aac51e2cd067f4046b5f87d3", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01ba069254a951a961aade066ff04797bfc9cdfebf2a19e4f4b724024e316e8afd9ed48b636a4a0d78cc4d37d9402ad1c981640f90d28f4e566ceac9b66c4000d3ef", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004006dd0ee8e43f615e30b63dc455701661c9dec69dfde65ab7cf9721039e3e5d3cc5c12f8e4c0b6a3422bf13d32e4108255290f9cc9d6e4cfb9c9ea165f9345e1759c004649f03b78e5dffabba70e74e96c5362fa83186bdc44820bb0eaf1bbd1a51976cbbcfc03a986bddf93996d960fa77aac46f9b7a5c32c62c3402c400b3165c1ba21", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "016c4bfe17c91c3ab2c60e5c9c2fac1be4893f80fca05647c34c82ee8ee5e3b3c89c6e87bc3af444dfdd1d692a3da45a45975bd50774471313d5b7d149a5395ba7ed", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401a6d5d068b1908177a1b18fe078df8f89945870ca8811695b4470048ce0c34443b9a7f95f8af9fb6a4ca0285d1791ce975ad5a65a5c9f6b3df805cc69b3984efed401025339e40a26a3f6f4fe54101706b7f6d475b90f58f7ca5817ab5c3df4d83844f42979dcc88dab0785ea242643159529bd1ceed9be4eeeb2302facc6b440b58264", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "005191849104cde5be2563c0133065ffcbf4bf411af32e09865989b394ec75e82b4e4649d33125034f2b8cae1c29592aaa9e50700da74c088318d720a68f58653e12", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401bd7d67379b3096728a366796f7014977d11eff92f1fd30983c7452b82fea61f77ae4a431873e2c5588951b663504610d1391b8f9122fd7896ed45b27d2320382a3019547260a021bd86bb149032bad3c6ae194445899573c4007f44cec88e232e43d027a362cf59cf128367cdd595360e0bbc2a25aca863b097757167de4410d261b16", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "001f8e925d5b2d22f7d1d7fddaa3575fa32d446f99e774db282c93d00beecabda9aacfc644b9cecd76e7f122515b6ebef3b56075f7a2101f9c492e83e62147d09b46", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004009143dcc8d445d7f664481fbace68900453949537fad73756d818561e59448ffb49022b737fc3e725d6c1c45bb0b068809228b0fd8961eef220612be05040c5402e01f8bd056f5f9fb3083e9083374864731d75441a1dc52b41904d6b2eaab805030b04cda6fb42eaccc7c9d50656f0a85225120a0671b1892f2c118e7b538e5c55aa64", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0072a7f99e291a15c45bc78c484e4fe94903a958048126f3c2405c5ff8bac7dd07dd96d450b017f6cbf6acf69fe113fb7a6766de8a956ec06f772c15c84de9f4d462", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040080faa5685c19f085101f010e83b2f0100962a18478c9b51aa0d752bd0e439537892a107c34a553c18db4f7515f2ef38caf8253ad2af8c59d84b7f79172cf2eb4cb01e9c0328270b761a0c915a6ed29ee223133eb466efe2317c6f8ad2b3c8d88794e4aba3f966b4aca5594c9a74b37b4503ee5a0794d59c108666897f5ec9bc7bbcbd1", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00fe7b90eda1f723c5e442017dadde8affe3ca80afc9f4703267626f4774f06e2c21a5d9c6472882ea8806a9139c4a740f2654d10caa5e3d7bbb7e59713fa032b9fd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004014d6f8fa157eebea8bc272862d9f8fbee63da5be953e333d06b7443cbb96d0c464a171943b82565ea710c126498aeb7979823b2eb1e81bed3ffdd6e40f4521e6cb900701bcf9e45d6ae4899d96ed59a8015c454735f9efddb47598fbe047e8c4021d786db3539da79760358c0f928b2b72cb936cb66e4fc81ff079ecde8e18989e87950", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "014063b3dce4c99f5f53e5f360875c02bd4534a83bbb779be9eb05e670595e57a708691c5df0a0062b43d0fa349db201d6279c131d84e9662cf82fbeeab6ea0294b6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004016361d19207fad3b9cf68a0d7cb224744daf5c18c0d79f060ab1369d7f026c21da2dea098739fc79e664bceed06bd8b8f29471907754319cefd9f216f3226a4a87b00b7007b2df9a123dd81df4f5d5213580c174fd68aa5de23e5386c1f76bc6711babfab72cf9bfa328e97fbe9a3b79ad0d39a778e3c64b74a34319aea0423fa270067", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00765188ff6d0db190914b3ee9cbf633e9e5c2607b7323e70e76c3cf3e2b3f1cdceda62b5075a8d43b306fc83e5e4394cba6be0098877b2000385508d0942cdba46a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401123d8bb17d84760ceb4e3ec98387478f9587dcc05b4720d8834ffcd82c06f59aba278365e834bca2736ed6333757f57920256bd9e1b1bf3d43b620896dbfd877a3012135f587ed6a6bd6b095d41c7abc2a70c9d49461d3ed7cf4e781c8200583a0e8e94ab8a00b52a7d0bbf182cb3bc0832fe82cca18e53e78b049bf9ea6ac6017e3d8", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01b1c9e8a4748e6e1aea3dabf37ae74baf2861e482af32309dc93e7c7eaceaa584416445a1ec4f0f24b3938e118191a5bf9e72885bba5c282275c49f5e4bd82e2567", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040061aa4aa680e5a327ee0495beff81c9a9601a4a42a830725538f9940d234f8fec38ffd21537094492b58ecc4102eddfe18ee8f5947c4736dc60066fa8d9b8230f4001730296bd1d13ab65e85adc69c0822e20e7dd739755bc28d7231e79ba1c31250c1972252c280896f30a26c880a348041b0958ee0443c2e403eb9828599cda90f7a8", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0153a4709fc474476e76948b04d430c2ed708ab697bb54589d35a7c96d33632072b4a37deea3428d8d0a933c7bffed068d92a9061f0fa39e62e7d552b31e4a150509", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040086b5bcf4bbd05a5b5651bca9791e550fec3e9b2ff0d6bb255b2d9190f5946439b53f9513a122e5ca0a9ff12e3386b7524e46d7f56167ca6127ce83e67bf5dce6ce00865b2083d5c0200285ee7ff4950922a8abd4eef93d8ded25b53cf9af327e6e4c30c4438ed2c40c67e87835518361c98fd743d859f6c173a951a95a99409e831959", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0167d0da4c5dadd25f8787a84a96445c254d8e17feeeb7d21af6712e307cd7351ebe185c0a527402a5fedaa1b26ace5549ab13b208156d14389fd8133c6f4fe31e2d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "point with coordinate x = 0 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401a09aca765c949b656abdb5968055316384245ab775e8584119405c85ab79fdc7ef1e079a35bd299ae149d65f15ab0d64912c5c9a62bca41bdb586782e8eb0cff9600258a50f1bb542dd164b8943bde1f2078ea7d3e89181efab242da30b1a12562184104449e4d759dae9cb9d075c30456b1a4e48740dccad7b59b17dc1c81d517f2cd", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01528f5ab758d9b6112f19e1021f5089d526cc50911026e27d44ca6d77220c816b2326a2dd6b9152408813bf8d399906cb1ae33a52cf67e74709d796c70701710457", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400a6e216a09b636032f39eea552192c242be7ff5478f7f7f9b0caa25b8aeedeaded33ba66b5feec7e75b0de3e7fee142f250e6cb4c7b09a1686ca0bd9cf2d2d48bae00fcfafca2391a55ade0a77fb9a381cb0af16253cd3bc58723f8527670b59567698e7fc3a17e6d26b3a8a4a617e2b12e6d60391f503117fea2ddb46978b6d2d30a26", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01d937db2fcaae795f4aec6365be81a514939c548357c6140075db4a076be8c0d3a6126b720b105b3d9cf6a8307346cb832fbe3a936017a6e62059bab6723e885176", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040050b862a82a0ba92ab45b396c51aa519aa44d117f55760e5a4f1f177dfb5bcdf0d54fb99565e9f7d6757c04f49456aea87075560b1dc5145bfa4068684b04178a8501e1c68a57b38e2281806f3db7b0af0e3c2b5e52d5d5d4890c5b9f5d737df9a706e631e4453f6e79cbc28d57bdc604aea8010eb491f5c09feb20e3bc0c0ed4ae44bf", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00cbeb5c9df0bb30a8b45bc17a5bd255e2c8249dbf9133705bf1e502d4e730edd3131c8d370aa7fc78d46b2291181bb40ca85e7a0ac6077cf4367927d8c5b6744306", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 145, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040057f27cc7400b6f9bb3a0f723bc0670938ff888f87917100a932115b12753a1fbb086e5b225209b4f70703aba374443f11fcbcf8779491e2297fbae7f18be2d4f230006a7f04e4de374149dcf596d94a6d7ef8d30d9888bc7500226ed7bc8560729b7c4b4bf28f4f92d7f3b25a5ace886e8be3ed01af02169caea765dc763d0da9495c7", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01a26aa99222e44ea4d6dcee229f21f40f723b5cbbe92d56561252e7b09f96eb271ad92b3e16464608745615182fbb7050e2991b0afc040f27ca74e358346466cb8a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 146, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400e04a04d1e2bfa1a5f6f37867ec251450d46e6bd28067cb99a612f6efabf1f72c70eaf72d70daab53890d54806c46047766293de085f0f40462b2f56ac4fc6811bb00a20fa00fe8ccd8b007efdd6dafbdaf91b10924c0b8d583ce829202c8533e9815451719f12cafefc3d3bdca5d510247d59ffd20d539e22165f11b5d10e912f1f9e4", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "009a6c017dae44957db6ab3476a9dbeb660ea54e20ab785d5a341e0e0265050fde217900718908e1763eeb66530475fc0d0a1346c6c3bc2952da7cf034df18650645", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 147, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004008d3e0c9820d2b49711780849ab9349de295851b69ac0ff6b2eda1fddc17e97c7ac2695f28ef6ddc1e16062ee48295fff5711cd871992a8a184b8e5b49d7178b5ff01709e435ee6c7ccfe6692c7f169ae357e94feebcad5d6ff0da7ff55a19d1409006aa6083f897824de4c0c59bc80d40607a9bcfdf666b9aa388fa3b865d76c492916", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01efd3feffad8d28373dffc0e3a9cd544085ffc28f5bb80697801db4ccb983fa2328222a429e7d6367ddd4a40811ac2adc8fbd8ea06ea408809d5b82fbed3c8a95cb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 148, + "comment" : "point with coordinate x = 0 in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401c02ebd54765a3825d7bfad5635a98d97f73cfb57da9c42c1f464205fac01cd899f7e095a1039b47e0fcbebd65b6ea2c486a7bde4900e9548d8a64a0e6f39d61c9501f5eb9d2491b42e3d02c20ff853080aa2db823f6091a62a2a6bb52d09d3c162a3ad02e0242d243a61ce0063ff8f8e93ec21aeca4ae2b152b8f68d40dd876f80e7c3", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01424784d1fca3b4c7811083855fbf8662e1f0ee52b5ffaaa0cf890bb904150512a75a1077ead39ae37ec67d5a3c03d2fcb5f9f695f9918cf4872c5b4a757d1d0fe2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 149, + "comment" : "point with coordinate x = 0 in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004004b04d3d1c6c47069c0bd44973e75ac753c9f284b0b1d52308bcdd9a1e06307a8ce7af09362f8cc6a2b5b4b2349e2830956abb1191c7e84582db1228c2ec25021cc00c2af05e5c310388c8a16835d06042e490a9ea8c4c9bc532c2e7d46f200107a97e0fbc5d9faca9dcb2249510e199896ac36e0399b0f17650485eb748e1fff9c77fa", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0132b97632e57be55586e887d26dad41e500bffcfa96368484557f347c4be821302de8f3f72b9865834d579cf696406145eab512e2f96d2aa589748f64420869121d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 150, + "comment" : "point with coordinate x = 0 in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400cda2db7fc4f9d4c1ce36ba82a184b2fbfee206d9a5d050d2bf1b2fc92c0d0b78eca3b51d724aa5fa48f666972b473accedc49724ac2b3e779d4c894198d9ab937c00cd13857d84871837f77a54f0ba9d18f6e942d1d6d2e7167fb53e3585b249438289abc68927ac8c29d65377cc73f85d113511f2622bff697465294f5cd1a3772839", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01baeff727530ded5f903b2090f922b479c4631afced97ef1780984d9d98fe06a47ef0714ee4f2a32f08afac5a583a516229539c2c4c82f361b6f159222d5c1376b0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 151, + "comment" : "point with coordinate x = 0 in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004003ab4db21d5645f42bbf1622e26cfe7603bf222af84549dd484a62e98ffef26c13da61aeb5157a91d70a828e96873e25f06c45d652509307b0c998391f951d611dd014e599e94f3275ce60190aa63bd8c8b6edd7ed11eeb1385d0d1137168624eb6d8125ae9b85461187201988cc11bc557680d5bbbb4f54c27b4549831b7b6f1e59e93", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01855a6685db05fee3eec9dd11750d31449e40696e8e1c6a5e63343de2dae83147fad337ad9020ea131fab8c4ca30f4a03e0bc628a4a5ab78a09e071fead711543be", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 152, + "comment" : "point with coordinate x = 0 in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400bcaf9df5986efa542d7ce9eea05e557c393a3a3e3ddfabeb47549ef9a2924ebff58f7fb5989d404258791659cf421cd9d2eb1ef6cf21fe428182acb72aadb3fdc0003d638efe16363a8af869ee85dad1c6f003d4f4f827a7a18c75bd7feb330133e5bd297abf56159c50c0d04aa2e3b0194d8de2e7d0fe4d6d7a8901fd362e310ed4e6", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00a57bfff03140611be23ad52b3f0d525abc854f830d3e4835d801fa9754e1cfc12a4e6018958b44ba828087ecfab3ae917aba090be1464154ace55d4c481ad83145", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 153, + "comment" : "point with coordinate x = 0 in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400118c04c32a75b07702323ca226a4ace054424b1a6e6edcd4011a035f4bc0789f6151ff849eff8949554fe4d542af1f03c79b369ff4c38d1d29b4a3bc41d5e05bb2010f4b8d511ac5b1a6534aac9dd2486b8cd07cf3d5babc24f74f537b04115a0a8f6d797798fc807fb002746b27892ae30f751034b680b1723c2ee859bdaed0540e77", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01519ba4179ef85a4b51b30db2f6e9e2f3d49b1f3e8611c9ba3286d78ca645d29d7a163055fe44accfc724091d0842081a0fc39f0ff7b7d742346ef293e51a1d7107", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 154, + "comment" : "point with coordinate y = 1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400d9cb7a32dab342f863edb340f3ea61ddf833e755ce66bb1a918a42714ba05bcdf4ff10994f616a9d80cd0b48b326e3a8a2a8f5634d824875b6e71fb7cddd7b5018000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01b43cd9280faff242c6eb21243f54477a0dd91ff1b0b1a31d6011acb9211bd7c4e7602e488d4cd384face2aa243db2cf8c8220c566dcf9511feade8fc26b07b1d73", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 155, + "comment" : "point with coordinate y = 1", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400703dde202ea03d1d673735002cc62cc740536104d81fc9fd8ebdb7dfa908f599d8fea46debc190a5b2ef5f4493f9b5ecd8da9407bf4fc8e1732803a74ee65f747b017c9b038d86afc941403facaa1e2a6376dec075c035ab2c1f42db5fcda3ad3fec67bcf22baf6c81b4241b4a9257f8c2126880e1d6a69a3e5ac7e98710fb24d505df", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01b248dbd8dfa667a10ab32af68fa8967c69496ebf80c11fd0efb769ea93f84f5a2968b7ed81b2fd9aa913accec701ddce0d1f8b43b1c671f547822f796efb12d559", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 156, + "comment" : "point with coordinate y = 1", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040004fabe53e63193571d44521d36c4b646e299b390efe50e5fa1a738e700586fe41bf543b07fe4fafcb724301246e8c096c499b8a5d063233aa748db9d2163d1000400928a59f3e4bec0464f021c5ad086456231a4e44f162fe6aefa7a2caef9031ba83768b54762ef90b1e508eddbef69e53f3f9ae215d4a0612f737d16096ddda322aa", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01081c5a3289354db20a929fa3d9607c2ac58cab7b1ffb2802e6a778af1b79ca7a68c7bc1bd37a05772ef8c28f4609557f43387b271fb5a274ae3e8814c7505444c4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 157, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400b108b6cb1e04341473646c80f8c9c51014cec7f079f968110ab35c0f05b24ea7722327b5eb5bca748c35c771aba67b232c820ed544f9d4efd43d37ec49960db2d700ac758a1e225e3db19a1f3ea9583ad9ea6e994568f6ddc124b8dab49bae8357b3c70537404ed4d02370e1637ed5916b43334859ece3dbe6dd26065c24df11b8f281", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "010e64a6dd87610bfb99a134039b518c8cc87019ed5a2fa0b3f98be8fb3b2d900381a50755739bff483e400e5ad92c016ee3174df8d528fdc08a176d6080c183e094", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 158, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040124508b182dccea6ace2136e53a2d9b6149dd0ae450830666f0a9c844918f0fb3eb87f7f3f7707addd77bb12cd1e552ef12105c6867a4fe81cd1f6a4001c3fe6e0801576d60d07c02b2559cd189abaa703e36e29c66d3da18d34926ae821bd21694e15319093db25f620b6480e04a4c6c53b1fa388f959b65fbf8a8829b3b262f55e4f2", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "004af556f09b9d7a024c4dc941931d655d2231932ea045a7faf322b14f97341999a5a5605c7d31b2e93d56f9d8136306a899d82bbe2b61b36af2336a0ede70dcd392", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 159, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400e2b5d2bcd2b483871b7d83c2db0e957ef223f65b30f45d4ada33725373785c0d664a8ca2c35bc35a952fd822b0072a960c60e319f4e06de6c785fd8ddcbbea18d200300234471a92ac2c5f778cba8a97f3b3c45cc8eac1d815b45dc02f9b74079ac56649093d43613005867b38f3f6695d50273ea2f68ffa81000c7895e91ec53856e3", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0184771f10891b6dab953663dc41600bb7b2bcd0cc6bd319795bc89ce2cca1883cf92fd6fa7b16fb39c3737454bd3c22f4fb2c2e86914db418b653a9e0dce3be5ebf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 160, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400aee0e3097441d50138803ff9b17806bfca1064feec209fd0b5ae57c6d87d9e5eb32cb0670f12fbde06c3f3ed8b1861b6d18f6bc6a2552266a240686c529f044f570100898b3c6501ebaa81e69ee019b879d6ee3715d5096df83961e10bc805d5c674caa98a1ba29ed004808931a9615dfeda8673cf39f0ce4a618d181c04a866189037", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0024f79251c86e06ac18e6404cd303c2fabcaa9564218c160c1fb7a99fb2c699b3ae65ca2da8f66ad9d75cee42f19f1d77f194fdf2ad7854186b977ba26c0e87cdab", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 161, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040047ad264a373c4994f942ad0942dae8b23a329fb7a46e987cb921c28bcaed4aed60e5ea6fcced4b3ece4ab7d91b349e3e45abce93e9765ee2fe9f13d5f230715a230059654010a57f0e9d1ed46afac4aaf5b3228763ed2cb2b4d78a131636bd1333f12799779a9f0fec3ef24452c51e8e4f31ef6dc1129a454f079258eac10adf8879af", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01646e6ed95c47f60851b16b8da121b7a027ae9b05facb08bf52ef17e67a0efb1c49ef903de89082d3b34acacc5cfb63eb6a620d0e1498720e04559ee476bb9a75d5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 162, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400075daa66c8b4298a8a8cd395022bf2f27e52830868b13b1760f22bc29c99666f392385805b9490eca476defdf7df0d6b49181c3723770933c82761a2f7d3cea39a01bd89c2ffbbfb461f212d16e9a9047253cdcdf179ce763fd49172f8bfeeb68d1c1fd6e2fd6e6416a8b015513222734360f51280cef5f39ec5ffdc756e44a5942764", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0129e92c8bcf5e735732a7f876321aeb2655e8d226c228e51d5ab6fc7c05b63ca9400a0c25bfa12b0a7ebc84efd62f695da7cd44c1ced1ed5cb788c4de12a517f1b7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 163, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004004abcd8469f194d0ccc0db46492cddfb0552bc13062b7487acc38f59a074f682001db1addef6b28c5479eaf5d6b95b37c394eb91ecfe02f0087fc639700b490eddf0121398673af0d639191e3122dec7b58526df7054627f696a569892851f904382dbff7b61ed4ab1953910d27aa356095a2ca45956456c8d4e1ac56b1ffec95fbe8cf", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00cee0328e75f016d056986b4c7fceee7610237f69dc2cbbb6266659535541269f851e36e0888d635b506b8c00a8dee7d987745d8d06519d15bc752bd5756fe327aa", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 164, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401bd163989c407d5f8f9fd2e087b1473710c4bc2d6a97d281984c12cbb0615be9ac806c292c9d90cf35ffec665760193b1d7681c47f8bdae37ac50d8a40760a047fc0167cce4dc54e67ebf56407aec33a5aa20ba867c856f929fad778b39b0dc51249d24e390d7e33c72382c4a1d02bf73d605948a73a481bdf329ef7b7f04cf3a333c76", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "001e872a534bd079550d50a2def1d439083bb3423a58a923ded2ed7de768022981b7cfc75c970caa2cbbf2c4c7cfd9cf9846844e9c5400356700080a7097f00e1548", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 165, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401f3d659378997a75e456f770f34bfac638f1d38777cd0a77207cbc42b540c1fcbad583b93873163426eb91699f8c0834b13695400de49796788c592410c520e859f01946225c71e241a3a785d26d121d56145ea8f9768f3a009a2e3c54f9c876b899e81ab1261b2bd5ef99f54f44535f9cc76bf0f44e91a5f139e9927b88d16dccc4b39", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01f9717e8a71cfa94b943d41bf12c70bcf51437419b2da0b6e160d06a3187d781769c75d2a9f97a8499e396069a059725f47a10103b78e568e0768499112f2f16b79", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 166, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004000520d4f93ad15bd8399697da58b203a581a3868c55c8ad9af9aef613e214046e56f2a82382fd9eafb1f5281e6f6e9f0bcbb4386ffd8cdf5dce09257cadab97a010011b425853ccf7987de724596be0c23f1d5e1c7d0932d2fe72c5f223b9d03a78b88cb09eba6c4245240f8549c7216e53a879c96668cddc01d51c7a52db201ab77b89", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0191c0565fdd561298755620d9a7693cfce185c57b6391e4f9b90f7b22288b4f3ea3d95dd4d91b731615646aa9cf66db8aa0c302ff0703026c303a8c3b1f3e15ecad", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 167, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400568a78ce5d2d030ff850879ee03c201e4dc64c58588d2c8feb3ba9b2d03857af3c29cfbd789b797f8dba4b7470f0c84121231f356b63e613d0fff5f8aaea8c86f9003d67dd0bbb1d8588f18ccf31cbe5cd286422b708c386c1f81008647c824f694c1153553009773c657b2b84cdae98e52fb6240872a31bfb0fee3f2d8a94e5319e49", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01f86b35038af9371a8412d75e5d46a4fa76eda9d7be740b14e8cf19416fd5df2a4ced3064fc3846ae99542488d69e3879619fa9078cb987dd0d14860b724da9339f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 168, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400d724ed03cea80c5794c0f077b8060662dd744e4e8d4190f7f313c40597fe94bd2aa70b20f73ac4dcef99313608c2031c73f13ed1f5d9ace837c580fd02a4f2d6d50155ff556f046657ee5f50757b9078c5467fec8a0f7566ac15db168afecb7f514541d2d1ff87c5f67c511a4f61a91c579991489ad5a1c8c0c554d9b36d1486b27e72", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01d1047bf7e622cd428e1c76aa2c044a2058a2d9f4b5c179cf9c9d4607008181b159c156473e7d25fe49dd63ad150073cbc2de2fa9cad50dbad9a08d56eb22d8d341", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 169, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004009339ef1c1f93ca5fedec1ff5fe30334eb123c30e6a17c7b65f3ac8461fb779075fe69889a42837b01eaf44bb7ff8984c0beda0e1b5278a62c07ec128caaf52d8bd0019c095ffad69ed800e223a8bfa55d21f588dc7f9f41b9d75dc010792b6fe243d2308f12dfcd312729ebef9cc407443c04b0cdbe57714615241dab8745cf6487bc9", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "003eef535275e15f779ec13e5cc7ff939c3dc152e79aad0c32a03b8cb9f8c449b4d9469b362e959887c5a6f20962783c667b32b3791fa701ed52e82d1e3d2229733b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 170, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400c25a9065377d2d84372580a2687667cdcecea580be1a5e72e1fd2adb42ebda8d6a70ac053e49da485732bf13430282fa4cedac64e1b0693051d1354d8d6efcec1201e2d2bfb7b44f535b87312ae67bea3d62800b69d43422fcd3689a1bceca6fcfe4399b7c318a5688d0b4d2333922d595cf8142584fa898c69426f4bc478576edc8bf", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "019034896afa681fdcfb11ee0c03e5c588a65239be8e555a89280b7a9814174254fdb496ec0faeb2a1d6816d276aceaa98a53e09efe84a752c09c501b2bacaba69b8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 171, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401c2402f341b4e1c9755b3e102223c80563c61c41a64cb119958c41bec2dd9519a475ab84baafb708397000b80b9d275c13d7cdb49127e1eb29a65d2d374904d090b019e06c3da4e884d6ed935c4b92c84bc63e91cbd665cee86cc151344a3a363fa75ad56a9b804b4651ed85663114188e63cebb2c1887f96994db9703c1d0643812cd6", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "002865551ba95fccdb0c814b145b5a57c808b47d5b08259ee41174770a7302d74a2cc78c7822a6edfa19b22e8a0d616260f1851e0d5dba50a9188e45afcb7dbbab40", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 172, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040083f99cf2767ce0cc8898e461f9104060a9c9ea1342a2aff705610469286592aa41f319c50c83524881fc42169d072550825cf92e5ad110abd77e8ecdd8ca09f95e0037af6a24d6dbc9c85dfaada6c5a945dd6349b9f1d1ee10f25f8dfcf0522f3623337bfcba204e7e8e08c25564b4fe933cb6fc145ffef82baa2fd03a89678ffb7585", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01b384b48405396fdcb2c57f680be52f91b7c885225ecfb4f786ce6c1490162b3c15ebd8e6755e469a7ffcb91cfd7406cf0ab934a4645c3a039941e7d8cdc07ddace", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 173, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400d7fb4d5592e7cf724e57e6ab95e158d818f197f74031318dc83d3c2bec5cd8486481fac97ad6b481e837abbf352b992c2264b16f563f8442526bc6dd05a6374df80161dd90c908f5524ee6b157a86f6734a25e140638bdd839276fb09b3fad93e7ba899d6b6b3ed24fff8d499ad98cc45a35d62b8c461f7cc25699723a033e5b1dbb03", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "008b00b65cbd72a51c279d1b59628d4e7a1a847277f6d8bd5311e5eae945c887e4c8024dc412eb4205c76103ea493e25df4cdf0011619e3efb290d1cea8c290581a5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 174, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040058499315bb2297d78f8e74d3634bbf83bdc10eae306d8260ad0c62a41cbf78929144bbb69371ac9218d18eee59fe8200c10173d380cd7843808eb16b2c4cdc56dc004ecdecafe59b4aeed084d2d73af0911a7d54474874689bd6f7716c16ee5f4f293f72ba7d26989e551adac0568cd345c5c948231d5e49bc26290115186b185b5ded", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "007df53f8d32a1ea1f5734b59456564cac461f1c3a949d4fedff5ea96928e7f2b4753520334760f14ede15eaa964f6a0e520346c4f6b3b401ba6e301b581dd49bd21", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 175, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004011d2660b0f8fa5bbaaeb0e1d9e2a9642558969f13cd08c51c5725b19f18481af2be6edf0bc2ce59065bbed4b1f383f32f52fc559174f2a402275ee951adea00091d005a3426945e6cb706b8e42010a69a47c09948fec3f2c55f8da5cef5ecbf3f0ea3dc2cde92cbe2eeb76dc7fd33825435ee5457beb7a6069e3e348d26ed33e07dcdb8", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00725e7b5b8f0d7eb2d4fc6045d61b5b8505a156fef8fa4b1a2e351760b2f635a1837f23a4c6b724df076b2187b7e213da636b06250c66193a235a4e3c90ed86eb5b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 176, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004009c93065d67cd839187233fbfb33f808f7a6cd444924ee4ea0fd4bb9b3dbc8b4affa7d3c8e3ac2abf82449d7cf4166c6c181b4f609fe09e3ff7a2b6640f8163b08100b5f44a947b7d9bc78069d15d5049ac1ee9da21e78131523eba4d9c9ee6726d32bd4ad849dbd71270710cccb3cb88d243188fd04ac394c125dcb62735570e123890", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00718e900a7ef993d671ab0dc5417c98f61f6eb0731641e552ff48fa4f93318b8bfffaff2a1cfa4b759d351e56036a61dd1061d85c3d144b8a882f469810c58e0646", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 177, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004003c1f1be461d3cf4302cf1fa8eb921e5c2806fe5673f27f6da3a5bc2b3d78a8aae7ba410236dd9e650942ccdb110423abf53c5d13167638ff8162b4b931a0bcbba900608d6517009d99fc3bf1165e8199221a7989f2ebda3b739a748cc938d2db3e697c5f75c32dd5bcc5578e549e429f454a039579ea1e796851e7578efd280858cc96", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0161c84c64cbd65e718abfab1f827af33064e7029ae6feeb11e057181b4b7ff3dbce4d856862b49abbc0b923164361728f6274d890603b7ce187d7ccfc3ff157b42a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 178, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004010b7b6fada1f602c9e97da4acd7ebfd2f9f8e30e0b30b77fb3954deaafaa2ae2628ba042b9257a0b611df770a7ad70da7b9a20bf4d6f80512cee74ba214c61c6d66002061f890cd81b9b49c91007a325ddb67c46062bb64266d3e72934249cb7262b8b92a737234f6e85b74f818b954abbc3529da116c0321f82e21dd25e53c073abbe1", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0172bdb24ac7ef741a94c15acc7e208d8d01183be1c45f5e510da1c0809102a9603fe30dcbb03325086aed94ba23422be9404287cdeae4a288afddc2aaa0e8cbc415", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 179, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004011d28b1a95fbf27a4ad21ef4613e1983cce354c018aa757330fe13572f848abfa255898d1398f13ceb06b3b53292d000e87dd20dd1954763a94fdceb128fe63af1b0111ffc1b26866dcff9e42104a121a24ef5a15d78141cc93c26167398975916eafc8ad8baae13f59df23fe79aafb6e2078ba465c6b14e44c060eeaaa1ae6f4c7c979", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0124eacfd598b6fc20b9f01873ed3c55b0dbb3f9dbc18a05233e59a4ec7270d012b790840d22051c4f1c55a252e8adb10dae855599e22abcb3e23904aa0767e3cc84", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 180, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040187b3111a718b18077d9789125ebdb6fdec77890875440d36692e30159b4cfbde1807b3ebb1b1a8c7db00c1fa66cf32c5f9ae0f5941e32d7c7d2af0fa98832f01ba008f7def2063a7797625236797fbeaf8d07d74e07d139e6d73583d2d450a7794a8f712ff7852aaa23da6ee8142d9b697568f7f4a63a87f97d6354fc469596406926c", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "012fdcff44a9af94f18b50f49c19a1e0e6f999964d5ca4327f280b2edbabf8235d2e2ba2e101b391d0dc1aa067d3593cafb3c5a99c053165fa28d677990ea886fc7a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 181, + "comment" : "point with coordinate y = 1 in left to right addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004009a64ba8c6662bb51553f85608aa2e522bbffd1b44ef646de0938f6267990dd9d7f52505136b67620afc1f6d25acf6d1dc3972c3a88493ae3927230225c03a8135d008952c15dc94461873c232a2fbeb4a7a4687e641d10b3348d17a31ea3fbf17ced9065bfcddfd92ac742cee61d5bf582b958d253e939ce5cf92ce79615433d069d8d", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01cdf3f0c813badf7454de520d1248b298502194504afd5904080941cb85a371562848e4756011713593af46145d0652b2edce18d5c9e4a4cd55370bcd6083990628", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 182, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400393bd8fe3c49f7885efbcab87962ef12458c18f255f01a24a1ab795cbfe2b4ddf6e8ac253e4fd9484377f59ddc7c087996386ed9a165cca81f853c918be1c9d399007c47aca4aee1795d414c4334ce4bfecafabf3c3391a02e9332d7f17ec1b5c542009f980fbaf3eadcc192f400b9ad2400220c090a758784dba66de40600c626e4a1", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01d10825bb71d094ea2b01855583a8226871ebe7d6bcae064227bdd841788d1c489b94db20c39562450db84735f9285259b34c5d3b43a487f0708632b75de2ebe104", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 183, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401b4b19a125bc0cbd0606064a051af4ab17f791880475f00a1fbcd4a797b401bda390ef7826fa01682651d72cb1353704d7a18027c4d609334b2e8c5d4def86ea0e40190e4cd6a4e0ba9ea45d3b7144f74aaf1986462558c8b3a10501882c2669ec265efc152f5510f3e990d67218471cafc66c845cf69e5eff6e0308cc59ac59a407667", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "0031eb146616d7bc61ffb553b7ca8522a5b6088d23d5ca6e30b201b86da2375d1f6cc48e88a24b52b0e22045ca7c506c206930619c289fc4a688432adee4702880d3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 184, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400e7fa4ac2365af9378dd2c81f32f9ef55d4d341ac324eb46923ec7f15448c37ef607c975c352754f472873e469f8d37d38d97d161a7b9b1dae2e965fdcc959747ba01e6c09639729499b607330d7daba2b5c1efae4f121e540bf7e691809a055542284cb5ee87475589cec663b53f21b91231a638d8402e358fd169953491ab3953122a", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "00a8f2dad749ea1e15673586bb67b5c85ff8f45c72ef8447efef3efc626a6a10ca88451643b434a25176cbae77899a3e32a4484781b700e03857bdd158ad3cfbf200", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 185, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040104f43ffbb37ce5d0ea956171c070d6147acfa9519b887995832a0eb801e0dbc66896dfaff94409b497f4a416ccd82750da47a520b870dfe6cd3764f0e3c0f1bc3b00a5f3db9939c21147ab4488c8128ba0564f192f2788560145d2b14a852816b4851ef69a462c9854bace720e4629ed55af9d2c7da74cd309fc5566e11630746a3522", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01ee85a3b6d35d0df6a445593c94609932530e25ee71909c5681ae398a38309e8699e94e0f23f56c64a0d04fc10e2896c50f213f12c685151fa40f18ac6d8ed85906", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 186, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401250ecad894d3fdffb580099c2c305bd5d903fedd2e532ea58d29d63c3281b39e6f47a11b3be97c1c04e042d3f19bd0cbe0ef4121a257279bbd76c66a05e8d222d001a2b3ce41ca09b5b6287b4c328a315dca243c726e8616629d2b37506b7eb31eb76f513decb0ab20a52c0c260a920e92ae1a629fb817df5ad6d7e62367ac5e8ee5f0", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "011e7d529dc9615209162401ab2bb717378109d87a1ac86b98b7954ea91b960b08fa9374ea72703519c39c69797240c977817e2b34b5322665dd518251bcc1fa970b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 187, + "comment" : "point with coordinate y = 1 in precomputation or right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040019f6ffd81d012b70804c308594b47066516bbb339b44abadb4da194399d1b4d5fc98dd9d0dc363a9bcb14396327ffadb39f9b357b7e631a84b23039396f1cc96f101a6a8c0af8e083a9f8c19cb0fbae7b4523c4c54fc9ffefb735113f528f7a3e9662571060861dd6c9c71b33d99b53d716c36a8a902bca64c46c7e34a2e88dbc96b6d", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "006b46bbda9f37961aec9efcd6fcbaf4e25b6674ea37f8d82ca2edcc06353e24d09ea5d86136fedee34e0c391b859072ab91918b51d0800ab20255f438c660882e91", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 188, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b8104002303818600040077d897cff6a2a3446fb38528ad80cf3cc503ad93da06c7c5a525cf9a7bba33d79d686a0c53290a4594240540a02a85cf14336a23da56efdb562b0656800ff396a40120779ae0df7c1d928ca18d63fcabf0d21bd437c86e40966bae8c9fef2ac72738a75be49938ab9917034a2536c023695e821f70b458339bd8de218a5cf741e55a7d", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01109989b62a379397232c238cf57d81884babb39b041fbf0f0b48bb7d794944f9a302de0eccaa9a5625b222c6692d24077654f19836b8f14d8622ba14eeace274c9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 189, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401a02719244df807864707fbc6c5285da784301dabffb85853daf946f8d71598fa95f7c90a3d5f06e45051799c16f9af0afe275ff4f51e83e1bfabc18176f2bc4a740154de99c74dd263456034abdf5b2a173e318442d13200f4090aaa2714524c43a85ec5f607d5f355205fef0f4aa3b41b2ff79eca361fc28878fd4e26bcc57ac014d8", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01054b6191cb257e0f18d09cf454fca4c45716ea00f167b2fbd2d028b66c903b5e751a6caaccf4ed18e28635d8454ed3811e1c4b3638eb420ad21ea4fdbdbadae866", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 190, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004018a82cb60812fd36cccb29e4747d20579ac9ac6b5ef6490326b30c5f077e9d7841ed189ad172140055d7ee6b015e02b1ebb9fc17d6acd8bb4c08d2ddb4541bb88f4007750fe2640e590f15426d64e2334cb2ad597340c445a42379fc194ef74d7e06a220aadb8e69e361b4960dde70f085e924319dea0df1d4c12c41519535702670ea8", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "007113f5f3c547a2bdee4af7625bf161ad9840e83f2c3b871b18be0c9db5686cafd3948c831a251a4649999193852650e6dc8a9f82cc696ad57c7181ac9a9ec220ec", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 191, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400273b9bf3818c129cc272270b5bb0b8b7e557ca8c548a6f3205e37b611962b14d9be317dc44fe82b2d2504984db98a902e7ea2a5afe584dc2b2990e5a790fd55b1900b9211fbfa221e3c24bc3de2f70e8f0e84f4b05c2d2bc5e98da3e379e80becd53d221136ad740b2732ecbc3c7e06c07e064d5de69e6a6d567713f644e8ac25a1d93", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "019188478c62349299ba2f12aec3c7ef65858f50395380ed0e7e70e731d7c47885cfb183ecca22fc71f0afd0621243750786969a0097b36a521ef41df9f08f9a4558", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 192, + "comment" : "point with coordinate y = 1 in right to left addition chain", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400b9d403df5b1dacbef2baece88a0b10fabc5d729753f4e936015afb96b929392a9eeb03460968ed18868714caac2dc16c07245a9ef4832ac418e3290d1f8d0d102e008494f4442d00fdca67d31b3eb656c8a06bd521046c1af075b0ed26c26d5bdd8b800493c68cf493516027ede771aee3ed8b5fb947e9d600cc0a82c3f2076d96aac0", + "private" : "01781d86cac2c052b7e4f48cef415c5c1319e07db70db92a497c2ac764e9509ac0b07322801f5ae1f28c9d7db71f79e5f51bf646790af988d62339a6d1543192e327", + "shared" : "01adf724cf47ae319791a3dbe336b2f54a4d74bc28ff8a23c2f333e2a5a36bbe73dd6c9de72616ad5b779e51636d08f7cec58ff18b7127e396856bc13d39094410af", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 193, + "comment" : "edge case private key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "03", + "shared" : "00f2246431b597930f2eae61e9aabbd39f8f6ae97c3cf2521a6aeecedda10b5ef5f3b2eb3a8906d02f51d244710aa9e19cc0be21db920132be1c91deb85e466c28df", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 194, + "comment" : "edge case private key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "00347c51f587c726070bdeb9173d0a547427ead3f2c8de62d9ecc3013285f645d220931520bcef85d08cfb6786045745fbfbfb1924c44a89d06676131a965677272a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 195, + "comment" : "edge case private key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "0200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "01c41dc4437c2f2b94a940711b3a691723397a1f83d6bc0c67ddc7a657160925c7f85bb4eb3842b60b2610ddb7c0b8676267710e58359a8750843c6d8e25d48d1cd9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 196, + "comment" : "edge case private key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "00ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "shared" : "006a239cdb7a783840658d5f314bfe5c51e806a4bf1236f8421265bcc503c673eb16c5c2b38b5717fa04ee7dbcdeb15c871711507abb7557a8a8c7b3250141e854d5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 197, + "comment" : "edge case private key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "shared" : "0112dbf9713aadd478e4f2ebcb058f05b512b1959c7da1994f851f373ce8c341d39c6843373f6fe559905953e1147640159437953c571961c09bad157a8e1a5bf476", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 198, + "comment" : "edge case private key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47adbb6fb71e91386409", + "shared" : "003eca2210c8623105085aa284d119f3d716730595c6291aa89bf32a95e8a5fdc64f3d76e92494a43a9dced12d05b6dca4ffe649b32ac12cb0202e702dc83a2cb277", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 199, + "comment" : "edge case private key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb5fb71e91386409", + "shared" : "01c4cae9fbfdd45de51d8525e8447a7553c35cf358f1346f1d79666887bb749a3ba0de62e1866b47a447d53b6f1ca5a33ec94507e2cfb65544f5a1195fc6b4dc5810", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 200, + "comment" : "edge case private key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb67b71e91386409", + "shared" : "008073b4796e748f3d0de5e85b22aed463f1a6aecdb336bc287b50d139e3591ef5f86b78c3f6051467755f059f295d758075347d657aaae02383838bb96071eacbd4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 201, + "comment" : "edge case private key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71d91386409", + "shared" : "01f11ff8983792d4a790d0de4b56d078b9033ad6318a440e8119342937cc48a39375150ab2cf98273b0fe35d5a3af5d84322a685e89f2cb378a99b9b7bac87e44952", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 202, + "comment" : "edge case private key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138631b", + "shared" : "00286cefaaf38ca4c6657eb9b187d8614d51775fd71c1a79b4c0ef1a0d4ce72b6f5b2bc854a4e78283530942a3f4fd2a8586d5ea51513c89d3d29de5de06321e118e", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 203, + "comment" : "edge case private key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138639b", + "shared" : "014790de14c481f1336fcb7d33a8bf8e23eb594cc48608e9edfe0e326e106b67e7eaa3f04ec9985599178f632a5ee6419e11217060e9fcd5958a43882bf8cd3be6ba", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 204, + "comment" : "edge case private key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863db", + "shared" : "01ae775dbc4096a3aea7977b1a0af4b2830ecf9ca927a6247fba4cccb46b3f71d0e7abb8dda72d1c1ee7bb5b875b4773cc8df40f732819c4147da330775d1742ea35", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 205, + "comment" : "edge case private key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863fb", + "shared" : "01979fb05e068a12a3f20cfdfb9eaee9f22b356edcc7655383ed38124b86814f86a6f2216a34f3fc2299d403ee42408f95d08c5c6cd11db72cbf299a4a3c2545be25", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 206, + "comment" : "edge case private key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386403", + "shared" : "0197ebe26798bf67f06ff0282773af75115531f41d94c093d87481b76bef707bc222f2d6672f84a00fa20c5ed27027ab4006b68d93ee2151016c9ddbe014346272e2", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 207, + "comment" : "edge case private key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", + "shared" : "00f2246431b597930f2eae61e9aabbd39f8f6ae97c3cf2521a6aeecedda10b5ef5f3b2eb3a8906d02f51d244710aa9e19cc0be21db920132be1c91deb85e466c28df", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 208, + "comment" : "edge case private key", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ad5043591dbe81657fe3d1c3d7a516606ad9d320a35fce8aaec8a950fb53f95388f3fc48be998e99334ad9e9234cded14471fe86caccaa07d058ee8771733ac3b900854de36366590b9ee4d0370ea6b00f7ebd8156ccf14e99f1a5344a9b4964fbb8348b081a8840c6b64be77997ad8bebfea5e7d9f7a6a7fa6d7655c50b2b7835f314", + "private" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386407", + "shared" : "01c168314cdc85757ade34a52a9e5379ffa5968f084b7e404939a8033a0fc698e26211754b9b2c04cf8a1420abe6e986ef1a238bbb91dd402b72e0ed50a876f1a83e", + "result" : "valid", + "flags" : [ + "AddSubChain" + ] + }, + { + "tcId" : 209, + "comment" : "CVE-2017-10176: Issue with elliptic curve addition", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", + "private" : "01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913863f7", + "shared" : "01bc33425e72a12779eacb2edcc5b63d1281f7e86dbc7bf99a7abd0cfe367de4666d6edbb8525bffe5222f0702c3096dec0884ce572f5a15c423fdf44d01dd99c61d", + "result" : "valid", + "flags" : [ + "CVE_2017_10176" + ] + }, + { + "tcId" : 210, + "comment" : "point is not on curve", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 211, + "comment" : "point is not on curve", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 212, + "comment" : "point is not on curve", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 213, + "comment" : "point is not on curve", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 214, + "comment" : "point is not on curve", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 215, + "comment" : "point is not on curve", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 216, + "comment" : "point is not on curve", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 217, + "comment" : "point is not on curve", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 218, + "comment" : "point is not on curve", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 219, + "comment" : "point is not on curve", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 220, + "comment" : "point is not on curve", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 221, + "comment" : "point is not on curve", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 222, + "comment" : "point is not on curve", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 223, + "comment" : "point is not on curve", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 224, + "comment" : "point is not on curve", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 225, + "comment" : "point is not on curve", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000401ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 226, + "comment" : "", + "public" : "3015301006072a8648ce3d020106052b81040023030100", + "private" : "01c6cafb74e2a50c82c7a63d13294bfea113f271e01ae305f79af43203cd32115ecdf2fee5fedba2ad3126783db0c3c4d3029a14369e8f80dbd15d512f13e51c503c", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 227, + "comment" : "public point not on curve", + "public" : "30819b301006072a8648ce3d020106052b81040023038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fe1", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 228, + "comment" : "public point = (0,0)", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 229, + "comment" : "order = -6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449", + "public" : "30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd166500242fe000000000000000000000000000000000000000000000000000000000000000005ae79787c40d069948033feb708f65a2fc44a36477663b851449048e16ec79bf7020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 230, + "comment" : "order = 0", + "public" : "308202043082017706072a8648ce3d02013082016a020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650020100020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "invalid", + "flags" : [ + "WrongOrder", + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 231, + "comment" : "order = 1", + "public" : "308202043082017706072a8648ce3d02013082016a020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650020101020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 232, + "comment" : "order = 1598335257761788022467377781654101148543282249044465229239888363328190330275719844327554513312228302828260696579553960150541916632196023208175974174", + "public" : "30820241308201b406072a8648ce3d0201308201a7020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650023e01fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "acceptable", + "flags" : [ + "WrongOrder", + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 233, + "comment" : "generator = (0,0)", + "public" : "30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f0004818504000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 234, + "comment" : "generator not on curve", + "public" : "30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16652024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 235, + "comment" : "cofactor = -1", + "public" : "30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090201ff038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "invalid", + "flags" : [ + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 236, + "comment" : "cofactor = 0", + "public" : "30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020100038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "invalid", + "flags" : [ + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 237, + "comment" : "cofactor = 2", + "public" : "30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020102038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 238, + "comment" : "cofactor = 6864797660130609714981900799081393217269435300143305409394463459185543183397655394245057746333217197532963996371363321113864768612440380340372808892707005449", + "public" : "30820286308201f906072a8648ce3d0201308201ec020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "invalid", + "flags" : [ + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 239, + "comment" : "cofactor = None", + "public" : "30820242308201b506072a8648ce3d0201308201a8020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f000481850400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 240, + "comment" : "modified prime", + "public" : "30820244308201b706072a8648ce3d0201308201aa020101304d06072a8648ce3d0101024201e99d17d498f3c68ed8e50430ec4f36c14dbeeaf7652e985636bf0548ffb981e9e011607fd0059cd4fe51e882f19a3839ebe7f1d7376cb761431b214ed76970cc0130818604411662e82b670c3971271afbcf13b0c93eb24115089ad167a9c940fab700467e161fee9f802ffa632b01ae177d0e65c7c614180e28c893489ebce4deb128968f33fb044151953eb9618e1c9a1f929a21a0b68540eea2da725b99b315f3b8b489918ef109e156193951ec7e937b1652c0bd3bb1bf073573df883d2c34f1ef451fd46b503f0004818504000000000000000000000000000000000000000000000a14517cc6b91f8000000000000000000000000000000000000000000000000000000000000000000000032c006b0f530bec5bed532357d436727699f0e3c5b9366f1a435be640b97cd43d937655b1f157c7d0c7df25011fef7c3ab7d8e556e6125b59b847fcdd89a4051796a797024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090201010381860004000000000000000000000000000000000000000000000a14517cc6b91f8000000000000000000000000000000000000000000000000000000000000000000000032c006b0f530bec5bed532357d436727699f0e3c5b9366f1a435be640b97cd43d937655b1f157c7d0c7df25011fef7c3ab7d8e556e6125b59b847fcdd89a4051796a797", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00ebef6771455911ee573c183e990f7086650f9bafdb722c896751bd2c0f87959c78a39382d10fdfb46fd3515c8feb590943dd79778b13adbc7f670ba2a009753483", + "result" : "invalid", + "flags" : [ + "ModifiedPrime", + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 241, + "comment" : "using secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004074f56dc2ea648ef89c3b72e23bbd2da36f60243e4d2067b70604af1c2165cec2f86603d60c8a611d5b84ba3d91dfe1a480825bcc4af3bcf", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 242, + "comment" : "using secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbf6606595a3ee50f9fceaa2798c2740c82540516b4e5a7d361ff24e9dd15364e5408b2e679f9d5310d1f6893b36ce16b4a507509175fcb52aea53b781556b39", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 243, + "comment" : "using secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a03420004a1263e75b87ae0937060ff1472f330ee55cdf8f4329d6284a9ebfbcc856c11684225e72cbebff41e54fb6f00e11afe53a17937bedbf2df787f8ef9584f775838", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "", + "result" : "invalid", + "flags" : [ + "InvalidPublic" + ] + }, + { + "tcId" : 244, + "comment" : "a = 0", + "public" : "308202033082017606072a8648ce3d020130820169020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3046040100044109a88e6f050cfefa0b49fac45689b6b93ad4fa3b65db7d2f4cb31b67fe056a100066dd80dc5f785d27f82e3369eb22ab2c5729a9e5d9906a1dc31e02f84026484a0481850400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101038186000400c2a43ac3742b09e006c2dfc9c36444d7e699f567a73f674ce257330b312dd7a8a04fbe92d1d9acbcc65f6184711ada5bf39f6e11e0cbde98f1640d099eb90dfce701802d7755c2fe3180848d4a70b170096ec64eba99b478ba7f6fc129b0566279b8e1ab7962fa912fc4ae53b5202a03520617843dc63e5cb5f956ec7f1453d0865fdf", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "00fb8542487cbd45e609632f681db6b48fdabed9b97a2467a34205eadadad9dedb54a2a647d23dca68e929a2041888b091f4bb4023a0517be669a6c9f9c847ef89de", + "result" : "acceptable", + "flags" : [ + "UnusedParam", + "UnnamedCurve" + ] + }, + { + "tcId" : 245, + "comment" : "public key of order 3", + "public" : "30820245308201b806072a8648ce3d0201308201ab020101304d06072a8648ce3d0101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff308187044122cf9f56681fb138292f337d49937d24268b13b89617117fc35c880de0b3d4185ea9bef6e077a3bef09e0835c68dd301f5eafd873361149e8bdc295050f43c22f20442011f108b762c3e4b4945577057a910ca94481d69f8abc3239c36ad492af73bb8e81c8a8f9cf658165b32914a4a4fff8c3aec5982f734de122cf65610a139592496a70481850401c70f1e46f736e8ee0c78ec2253266bc62da9bbec44fe109321c9bab98a441b4a94840e85546e895f50d7331adc8a48275204ee12d6865597a521efcf01f4839d840000576bfe88eca0e48ab49df0e823e24a7d0b32b5b9ac1ac46819f4c51e801675e16872395c9eca3ffb5e2b7d4763d6858882b94b5bb6764c00e0b57891ee995cd1024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101038186000401c70f1e46f736e8ee0c78ec2253266bc62da9bbec44fe109321c9bab98a441b4a94840e85546e895f50d7331adc8a48275204ee12d6865597a521efcf01f4839d8401ffa8940177135f1b754b620f17dc1db582f4cd4a4653e53b97e60b3ae17fe98a1e978dc6a36135c004a1d482b89c297a777d46b4a44989b3ff1f4a876e1166a32e", + "private" : "01396a99a337821d8c92d75f562793c70afa4074ae5e6dad2bd2cc6aea8f36f6c45ddde73931440d229f340093ab8c6fb3f20d20999a37371fe92104692136d019b7", + "shared" : "", + "result" : "invalid", + "flags" : [ + "WeakPublicKey", + "InvalidPublic", + "UnnamedCurve" + ] + }, + { + "tcId" : 246, + "comment" : "Public key uses wrong curve: secp224r1", + "public" : "304e301006072a8648ce3d020106052b81040021033a0004af6dd5b71a8c1cf921e36854ae091aaa589d337e740e8579f816eb9e36b03eec5cf956d0fdd2fc1687335507fc1c4a5717d3b5b8ea8340d1", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 247, + "comment" : "Public key uses wrong curve: secp256r1", + "public" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000453366db79b320781936df61bb55d4499949d813ee5abaa5dda70da4f97f68228ccc69d7cd0b7266cfc28d0dcafdf3e83738cc611acb08f8b896c4ecf82dd65ae", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 248, + "comment" : "Public key uses wrong curve: secp384r1", + "public" : "3076301006072a8648ce3d020106052b8104002203620004aa45c13ce3cfea8538422712903edc0ce56df74ede0776e843555a786f9738de1943dffd729addfd4772169751d7765a45b5bb540a47d198f4c8c7c21e67560c1e12f70b64520109bb8858a3f8d6bb4012003431db0778633313fdb9464c47ec", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 249, + "comment" : "Public key uses wrong curve: secp256k1", + "public" : "3056301006072a8648ce3d020106052b8104000a0342000475e01a1555380be188d69aac340a4675e4a6f73d63976a1075249827d8ecc2a31e65ed1eb591954e33a38f68ef8aa6c930229d8755e53257602b3eaa87de6f02", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 250, + "comment" : "Public key uses wrong curve: secp224k1", + "public" : "304e301006072a8648ce3d020106052b81040020033a00041acbc8b814bcbb1e233ff7fb8a0c2c699d0cc59ac28678dd3f2f9502699b6518a221ff5f1d9de4555226e5bba0ae0586af95701d0fa5ba51", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 251, + "comment" : "Public key uses wrong curve: brainpoolP224r1", + "public" : "3052301406072a8648ce3d020106092b2403030208010105033a0004905a06d5bc093697155aaff67305976a769b904d8db9573c4be361626def2ffe1d5ec14462c02e5ffb24fb3edb2b6c77a5cfee2492db757b", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 252, + "comment" : "Public key uses wrong curve: brainpoolP256r1", + "public" : "305a301406072a8648ce3d020106092b2403030208010107034200042b87df1b6a5cbc4c4a184b7eec9b6c0483f7b80e6477b29649630c37481876bb0e3423f7a00d469320b7e60c88370979064efb9ceb8b387aa87a7c6941ccd9ed", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 253, + "comment" : "Public key uses wrong curve: brainpoolP320r1", + "public" : "306a301406072a8648ce3d020106092b24030302080101090352000470df62394ee036eefbc8ef11a9a5f3a8af659016f29e7125e52cfda0a74e52c7b21d18ac4375f5e4164c5338fa2f545a3fb2022f0e0686d5b4882958f72b1bb626e37093e3f19673968c237823327fd6", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 254, + "comment" : "Public key uses wrong curve: brainpoolP384r1", + "public" : "307a301406072a8648ce3d020106092b240303020801010b03620004808dc7b1c6d3ec470a7fe5d6144c9c3a8c92b116103aa2edbfce0b2c827312eebcd1350d09a739eac901af341487861b195270f671e0a758deb23222db4fe7983d42a785b35fd158344cd6483c4da5b409e77d0a284dfa9c3e0d91a4d275fce9", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 255, + "comment" : "Public key uses wrong curve: brainpoolP512r1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010d0381820004aa11b560dc1e572f2374e5869210304d66d95b1d8ce40940157f5f5b4a7dc8a340f7c305d6bea289f5c430eb888e2a03528336aaf4680d9d153cd162e2229df330425025df2625b147568927f6acf704e4936f8989ff9d44f33ee22196e70dfd8711e8934d8d42abb4b67afcfee213c3ad5e5c83fcf4283d253d6c5c0e581970", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 256, + "comment" : "Public key uses wrong curve: brainpoolP224t1", + "public" : "3052301406072a8648ce3d020106092b2403030208010106033a00048d7a746de095728a8d83219e587040cb6e794d088ab6eab426638202579850b0f235edcf4eb8adcb51bf41878f6b71a1f2d4101022964340", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 257, + "comment" : "Public key uses wrong curve: brainpoolP256t1", + "public" : "305a301406072a8648ce3d020106092b24030302080101080342000424ad316bf41e4102dd7ae16311b64464df2d13ea68a11dd27a4445ed900962180ff8c627ed73f0c667863ee3a671e6ed1fa2781b51a229ee2cd21fbf69437d60", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 258, + "comment" : "Public key uses wrong curve: brainpoolP320t1", + "public" : "306a301406072a8648ce3d020106092b240303020801010a03520004548ce4997cc618800d3834dd4b3346e4559be066ab5d0cecd7123c4de940c168fecd3bae067fe3fc7aee875c9da0a86932f0779f42344470860c22dbc6f305eab792fc0874157e175c7d3c4d3bf54c4b", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 259, + "comment" : "Public key uses wrong curve: brainpoolP384t1", + "public" : "307a301406072a8648ce3d020106092b240303020801010c036200044fc2b35e3019a57a8ca6efe2ec1f72072c599a78c2725f7cfc2d9edf220b5f6abdb0c0d8d160182de451e26bcbb4e8c18726263e21ce56fb4bafaa1f186c745e2c8392ef8c5a1c03f5462ebbbcde0ffcc31e9a0b3e898ddb9c1c79e420fd7a35", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 260, + "comment" : "Public key uses wrong curve: brainpoolP512t1", + "public" : "30819b301406072a8648ce3d020106092b240303020801010e03818200047122f743122681ac73b0d611af86847d8bec654cf99e7eaf5d4f684e4078a8e61dc6d07e831ad02cd40d41dbdb6b0e877d960b78a5ac34c1e6ce7c483503d6de2eaddeffbfb3f144d29d13535a05815934186707146e45f64476bbdbc8645be973270a4c5e35d70ffd5eab2f08d1fb04762bc8aa80e999da14f744be9ff8c923", + "private" : "2b0d77cd5c47890a52612fc9b38d804266b9784abca2b94de99bdc67475aecc2abc31e72a6dada0cf1d4d776b002c8d2dbd601ab8a0cae4157370846b20e8dd657", + "shared" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 261, + "comment" : "invalid public key", + "public" : "3058301006072a8648ce3d020106052b810400230344000200429cb431c18f5f4e4e502f74214e6ac5ec2c3f86b830bac24de95feae142ca7d9aa8aa5b34f55af4b2848f2e6ba6df4c3ecd401a1d7b2a8287a332b202196fadbb", + "private" : "01c1fb2cac9087a3397814b198a80e2ea5b437aac1b41e8a2bd8fef8700e4812aa817320e6e1e3865bd2cf75e43a78be5c27ff1c4b5f5019333cb37d0c9c4ff3ec61", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 262, + "comment" : "public key is a low order point on twist", + "public" : "3058301006072a8648ce3d020106052b81040023034400020108cbf3c9bf8e42135d87127556831076d84d5e549e645afda8a099249231b59b6c508dee4e91c9a543e90ebc82613f86cb1290e29102a0f2fdeb57bf4193fb4639", + "private" : "6619644155c449758f65e2dfe7ba89dee1e090c1d68b6342f43cb1ac000090a7f0408138c1de217990bb015cd1d95f1d884cf659f7324f2fe21eeba63ea988aacd", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 263, + "comment" : "public key is a low order point on twist", + "public" : "3058301006072a8648ce3d020106052b8104002303440003011f2dca6b686e2141c11822e2d5439261583ce98cd6c4041c6d1be9e17dee33ea4a65c3e8cca6de50a30a39c788a585f1188bef0680a9c0264b3c8dcf494d0eb948", + "private" : "00a257d97aa4e5195e2919c147c1639bb0da0cce479a036489006b7b8e7e885096066e5adc8fe7c45940c5a6b94d5065b966a45f099a0cecfe9cce1b3e99dca479f2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 264, + "comment" : "public key is a low order point on twist", + "public" : "3058301006072a8648ce3d020106052b8104002303440002011f2dca6b686e2141c11822e2d5439261583ce98cd6c4041c6d1be9e17dee33ea4a65c3e8cca6de50a30a39c788a585f1188bef0680a9c0264b3c8dcf494d0eb948", + "private" : "00a257d97aa4e5195e2919c147c1639bb0da0cce479a036489006b7b8e7e885096066e5adc8fe7c45940c5a6b94d5065b966a45f099a0cecfe9cce1b3e99dca479f3", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 265, + "comment" : "public key is a low order point on twist", + "public" : "3058301006072a8648ce3d020106052b81040023034400030108cbf3c9bf8e42135d87127556831076d84d5e549e645afda8a099249231b59b6c508dee4e91c9a543e90ebc82613f86cb1290e29102a0f2fdeb57bf4193fb4639", + "private" : "6619644155c449758f65e2dfe7ba89dee1e090c1d68b6342f43cb1ac000090a7f0408138c1de217990bb015cd1d95f1d884cf659f7324f2fe21eeba63ea988aacc", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 266, + "comment" : "public key is a low order point on twist", + "public" : "3058301006072a8648ce3d020106052b81040023034400020009cc73141cf1843d2b2c95dc5cbc4d615c6da4814c1c7208615d8e78c7a8666aba1852faaa45a45d32bd0fde6ea78f262a96bf1e02949cea48c33c695103683048", + "private" : "2a35258787f91ad0bd3432c3022e4d3ed349c8768a7e7caa1836022fc0c89a9073f6ce14d0990d5b7bb413061c7160e7bd566a5c89f14901b2cc19f1ad531f41e2", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 267, + "comment" : "public key is a low order point on twist", + "public" : "3058301006072a8648ce3d020106052b81040023034400030047b9cf28e04b38796858545d60d6133fbdc20ede086e5d95111c982b8c276628235e536c075637a97c0a6c30d02b83b19e578203473eea16dfdeaeccb1dc0d9b19", + "private" : "01afe5c77a626161fb2c25964c7895b9fff787099db83f077f05a4bfa320fb61f9315bb44d3fb9dd72225d9d993a18df82ac53fb4a5f86b23cb650e5e4778066f677", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 268, + "comment" : "public key is a low order point on twist", + "public" : "3058301006072a8648ce3d020106052b810400230344000300c18410f5727ee0101a52ef95c0ac455cbc65bf9967f0a2c419aa0a291cabad569f2337e102d0a9128f4212dbf9fa9e5a8f14ca7f28e82977281facdd9ca7a92c78", + "private" : "24ae709e1644e3087b52470c565268becbdbf97de59916763507d109c2e5b7c21727c64e9b560aa248d7bc9fe0ac95720d507263b7b2859b056ea165301cd599d5", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 269, + "comment" : "public key is a low order point on twist", + "public" : "3058301006072a8648ce3d020106052b810400230344000200c18410f5727ee0101a52ef95c0ac455cbc65bf9967f0a2c419aa0a291cabad569f2337e102d0a9128f4212dbf9fa9e5a8f14ca7f28e82977281facdd9ca7a92c78", + "private" : "24ae709e1644e3087b52470c565268becbdbf97de59916763507d109c2e5b7c21727c64e9b560aa248d7bc9fe0ac95720d507263b7b2859b056ea165301cd599d6", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 270, + "comment" : "public key is a low order point on twist", + "public" : "3058301006072a8648ce3d020106052b81040023034400020047b9cf28e04b38796858545d60d6133fbdc20ede086e5d95111c982b8c276628235e536c075637a97c0a6c30d02b83b19e578203473eea16dfdeaeccb1dc0d9b19", + "private" : "01afe5c77a626161fb2c25964c7895b9fff787099db83f077f05a4bfa320fb61f9315bb44d3fb9dd72225d9d993a18df82ac53fb4a5f86b23cb650e5e4778066f678", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 271, + "comment" : "public key is a low order point on twist", + "public" : "3058301006072a8648ce3d020106052b81040023034400030009cc73141cf1843d2b2c95dc5cbc4d615c6da4814c1c7208615d8e78c7a8666aba1852faaa45a45d32bd0fde6ea78f262a96bf1e02949cea48c33c695103683048", + "private" : "2a35258787f91ad0bd3432c3022e4d3ed349c8768a7e7caa1836022fc0c89a9073f6ce14d0990d5b7bb413061c7160e7bd566a5c89f14901b2cc19f1ad531f41e1", + "shared" : "", + "result" : "invalid", + "flags" : [ + "CompressedPoint" + ] + }, + { + "tcId" : 272, + "comment" : "length of sequence contains leading 0", + "public" : "3082009b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 273, + "comment" : "length of sequence contains leading 0", + "public" : "30819d3082001006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 274, + "comment" : "wrong length of sequence", + "public" : "309c301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 275, + "comment" : "wrong length of sequence", + "public" : "309a301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 276, + "comment" : "wrong length of sequence", + "public" : "30819b301106072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 277, + "comment" : "wrong length of sequence", + "public" : "30819b300f06072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 278, + "comment" : "uint32 overflow in length of sequence", + "public" : "3085010000009b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 279, + "comment" : "uint32 overflow in length of sequence", + "public" : "3081a03085010000001006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 280, + "comment" : "uint64 overflow in length of sequence", + "public" : "308901000000000000009b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 281, + "comment" : "uint64 overflow in length of sequence", + "public" : "3081a4308901000000000000001006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 282, + "comment" : "length of sequence = 2**31 - 1", + "public" : "30847fffffff301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 283, + "comment" : "length of sequence = 2**31 - 1", + "public" : "30819f30847fffffff06072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 284, + "comment" : "length of sequence = 2**32 - 1", + "public" : "3084ffffffff301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 285, + "comment" : "length of sequence = 2**32 - 1", + "public" : "30819f3084ffffffff06072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 286, + "comment" : "length of sequence = 2**40 - 1", + "public" : "3085ffffffffff301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 287, + "comment" : "length of sequence = 2**40 - 1", + "public" : "3081a03085ffffffffff06072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 288, + "comment" : "length of sequence = 2**64 - 1", + "public" : "3088ffffffffffffffff301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 289, + "comment" : "length of sequence = 2**64 - 1", + "public" : "3081a33088ffffffffffffffff06072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 290, + "comment" : "incorrect length of sequence", + "public" : "30ff301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 291, + "comment" : "incorrect length of sequence", + "public" : "30819b30ff06072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 292, + "comment" : "indefinite length without termination", + "public" : "3080301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 293, + "comment" : "indefinite length without termination", + "public" : "30819b308006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 294, + "comment" : "indefinite length without termination", + "public" : "30819b301006802a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 295, + "comment" : "indefinite length without termination", + "public" : "30819b301006072a8648ce3d020106802b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 296, + "comment" : "indefinite length without termination", + "public" : "30819a301006072a8648ce3d020106052b8104002303800004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 297, + "comment" : "removing sequence", + "public" : "", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 298, + "comment" : "removing sequence", + "public" : "3081890381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 299, + "comment" : "lonely sequence tag", + "public" : "30", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 300, + "comment" : "lonely sequence tag", + "public" : "30818a300381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 301, + "comment" : "appending 0's to sequence", + "public" : "30819d301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d500000", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 302, + "comment" : "appending 0's to sequence", + "public" : "30819d301206072a8648ce3d020106052b8104002300000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 303, + "comment" : "prepending 0's to sequence", + "public" : "30819d0000301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 304, + "comment" : "prepending 0's to sequence", + "public" : "30819d3012000006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 305, + "comment" : "appending unused 0's to sequence", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d500000", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 306, + "comment" : "appending unused 0's to sequence", + "public" : "30819d301006072a8648ce3d020106052b8104002300000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 307, + "comment" : "appending null value to sequence", + "public" : "30819d301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d500500", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 308, + "comment" : "appending null value to sequence", + "public" : "30819d301206072a8648ce3d020106052b8104002305000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 309, + "comment" : "including garbage", + "public" : "3081a149817730819b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 310, + "comment" : "including garbage", + "public" : "3081a0250030819b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 311, + "comment" : "including garbage", + "public" : "30819e30819b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d500004deadbeef", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 312, + "comment" : "including garbage", + "public" : "3081a03015498177301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 313, + "comment" : "including garbage", + "public" : "30819f30142500301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 314, + "comment" : "including garbage", + "public" : "3081a33012301006072a8648ce3d020106052b810400230004deadbeef0381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 315, + "comment" : "including garbage", + "public" : "3081a03015260c49817706072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 316, + "comment" : "including garbage", + "public" : "30819f3014260b250006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 317, + "comment" : "including garbage", + "public" : "3081a33018260906072a8648ce3d02010004deadbeef06052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 318, + "comment" : "including garbage", + "public" : "3081a0301506072a8648ce3d0201260a49817706052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 319, + "comment" : "including garbage", + "public" : "30819f301406072a8648ce3d02012609250006052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 320, + "comment" : "including garbage", + "public" : "3081a3301806072a8648ce3d0201260706052b810400230004deadbeef0381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 321, + "comment" : "including garbage", + "public" : "3081a1301006072a8648ce3d020106052b8104002323818c4981770381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 322, + "comment" : "including garbage", + "public" : "3081a0301006072a8648ce3d020106052b8104002323818b25000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 323, + "comment" : "including garbage", + "public" : "3081a4301006072a8648ce3d020106052b810400232381890381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d500004deadbeef", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 324, + "comment" : "including undefined tags", + "public" : "3081a4aa00bb00cd0030819b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 325, + "comment" : "including undefined tags", + "public" : "3081a2aa02aabb30819b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 326, + "comment" : "including undefined tags", + "public" : "3081a33018aa00bb00cd00301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 327, + "comment" : "including undefined tags", + "public" : "3081a13016aa02aabb301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 328, + "comment" : "including undefined tags", + "public" : "3081a33018260faa00bb00cd0006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 329, + "comment" : "including undefined tags", + "public" : "3081a13016260daa02aabb06072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 330, + "comment" : "including undefined tags", + "public" : "3081a3301806072a8648ce3d0201260daa00bb00cd0006052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 331, + "comment" : "including undefined tags", + "public" : "3081a1301606072a8648ce3d0201260baa02aabb06052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 332, + "comment" : "including undefined tags", + "public" : "3081a4301006072a8648ce3d020106052b8104002323818faa00bb00cd000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 333, + "comment" : "including undefined tags", + "public" : "3081a2301006072a8648ce3d020106052b8104002323818daa02aabb0381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 334, + "comment" : "truncated length of sequence", + "public" : "3081", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 335, + "comment" : "truncated length of sequence", + "public" : "30818b30810381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 336, + "comment" : "Replacing sequence with NULL", + "public" : "0500", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 337, + "comment" : "Replacing sequence with NULL", + "public" : "30818b05000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 338, + "comment" : "changing tag value of sequence", + "public" : "2e819b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 339, + "comment" : "changing tag value of sequence", + "public" : "2f819b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 340, + "comment" : "changing tag value of sequence", + "public" : "31819b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 341, + "comment" : "changing tag value of sequence", + "public" : "32819b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 342, + "comment" : "changing tag value of sequence", + "public" : "ff819b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 343, + "comment" : "changing tag value of sequence", + "public" : "30819b2e1006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 344, + "comment" : "changing tag value of sequence", + "public" : "30819b2f1006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 345, + "comment" : "changing tag value of sequence", + "public" : "30819b311006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 346, + "comment" : "changing tag value of sequence", + "public" : "30819b321006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 347, + "comment" : "changing tag value of sequence", + "public" : "30819bff1006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 348, + "comment" : "dropping value of sequence", + "public" : "3000", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 349, + "comment" : "dropping value of sequence", + "public" : "30818b30000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 350, + "comment" : "truncated sequence", + "public" : "30819a301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 351, + "comment" : "truncated sequence", + "public" : "30819a1006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 352, + "comment" : "truncated sequence", + "public" : "30819a300f06072a8648ce3d020106052b8104000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 353, + "comment" : "truncated sequence", + "public" : "30819a300f072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 354, + "comment" : "indefinite length", + "public" : "3080301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d500000", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 355, + "comment" : "indefinite length", + "public" : "30819d308006072a8648ce3d020106052b8104002300000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 356, + "comment" : "indefinite length with truncated delimiter", + "public" : "3080301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d5000", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 357, + "comment" : "indefinite length with truncated delimiter", + "public" : "30819c308006072a8648ce3d020106052b81040023000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 358, + "comment" : "indefinite length with additional element", + "public" : "3080301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d5005000000", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 359, + "comment" : "indefinite length with additional element", + "public" : "30819f308006072a8648ce3d020106052b81040023050000000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 360, + "comment" : "indefinite length with truncated element", + "public" : "3080301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50060811220000", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 361, + "comment" : "indefinite length with truncated element", + "public" : "3081a1308006072a8648ce3d020106052b810400230608112200000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 362, + "comment" : "indefinite length with garbage", + "public" : "3080301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d500000fe02beef", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 363, + "comment" : "indefinite length with garbage", + "public" : "3081a1308006072a8648ce3d020106052b810400230000fe02beef0381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 364, + "comment" : "indefinite length with nonempty EOC", + "public" : "3080301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d500002beef", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 365, + "comment" : "indefinite length with nonempty EOC", + "public" : "30819f308006072a8648ce3d020106052b810400230002beef0381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 366, + "comment" : "prepend empty sequence", + "public" : "30819d3000301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 367, + "comment" : "prepend empty sequence", + "public" : "30819d3012300006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 368, + "comment" : "append empty sequence", + "public" : "30819d301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d503000", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 369, + "comment" : "append empty sequence", + "public" : "30819d301206072a8648ce3d020106052b8104002330000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 370, + "comment" : "append garbage with high tag number", + "public" : "30819e301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50bf7f00", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 371, + "comment" : "append garbage with high tag number", + "public" : "30819e301306072a8648ce3d020106052b81040023bf7f000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 372, + "comment" : "sequence of sequence", + "public" : "30819e30819b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 373, + "comment" : "sequence of sequence", + "public" : "30819d3012301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 374, + "comment" : "truncated sequence: removed last 1 elements", + "public" : "3012301006072a8648ce3d020106052b81040023", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 375, + "comment" : "truncated sequence: removed last 1 elements", + "public" : "308194300906072a8648ce3d02010381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 376, + "comment" : "repeating element in sequence", + "public" : "30820124301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d500381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 377, + "comment" : "repeating element in sequence", + "public" : "3081a2301706072a8648ce3d020106052b8104002306052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 378, + "comment" : "long form encoding of length of sequence", + "public" : "30819c30811006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 379, + "comment" : "long form encoding of length of oid", + "public" : "30819c30110681072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 380, + "comment" : "long form encoding of length of oid", + "public" : "30819c301106072a8648ce3d02010681052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 381, + "comment" : "length of oid contains leading 0", + "public" : "30819d3012068200072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 382, + "comment" : "length of oid contains leading 0", + "public" : "30819d301206072a8648ce3d0201068200052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 383, + "comment" : "wrong length of oid", + "public" : "30819b301006082a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 384, + "comment" : "wrong length of oid", + "public" : "30819b301006062a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 385, + "comment" : "wrong length of oid", + "public" : "30819b301006072a8648ce3d020106062b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 386, + "comment" : "wrong length of oid", + "public" : "30819b301006072a8648ce3d020106042b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 387, + "comment" : "uint32 overflow in length of oid", + "public" : "3081a03015068501000000072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 388, + "comment" : "uint32 overflow in length of oid", + "public" : "3081a0301506072a8648ce3d0201068501000000052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 389, + "comment" : "uint64 overflow in length of oid", + "public" : "3081a4301906890100000000000000072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 390, + "comment" : "uint64 overflow in length of oid", + "public" : "3081a4301906072a8648ce3d020106890100000000000000052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 391, + "comment" : "length of oid = 2**31 - 1", + "public" : "30819f301406847fffffff2a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 392, + "comment" : "length of oid = 2**31 - 1", + "public" : "30819f301406072a8648ce3d020106847fffffff2b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 393, + "comment" : "length of oid = 2**32 - 1", + "public" : "30819f30140684ffffffff2a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 394, + "comment" : "length of oid = 2**32 - 1", + "public" : "30819f301406072a8648ce3d02010684ffffffff2b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 395, + "comment" : "length of oid = 2**40 - 1", + "public" : "3081a030150685ffffffffff2a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 396, + "comment" : "length of oid = 2**40 - 1", + "public" : "3081a0301506072a8648ce3d02010685ffffffffff2b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 397, + "comment" : "length of oid = 2**64 - 1", + "public" : "3081a330180688ffffffffffffffff2a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 398, + "comment" : "length of oid = 2**64 - 1", + "public" : "3081a3301806072a8648ce3d02010688ffffffffffffffff2b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 399, + "comment" : "incorrect length of oid", + "public" : "30819b301006ff2a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 400, + "comment" : "incorrect length of oid", + "public" : "30819b301006072a8648ce3d020106ff2b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 401, + "comment" : "removing oid", + "public" : "308192300706052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 402, + "comment" : "lonely oid tag", + "public" : "30819330080606052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 403, + "comment" : "lonely oid tag", + "public" : "308195300a06072a8648ce3d0201060381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 404, + "comment" : "appending 0's to oid", + "public" : "30819d301206092a8648ce3d0201000006052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 405, + "comment" : "appending 0's to oid", + "public" : "30819d301206072a8648ce3d020106072b8104002300000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 406, + "comment" : "prepending 0's to oid", + "public" : "30819d3012060900002a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 407, + "comment" : "prepending 0's to oid", + "public" : "30819d301206072a8648ce3d0201060700002b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 408, + "comment" : "appending unused 0's to oid", + "public" : "30819d301206072a8648ce3d0201000006052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 409, + "comment" : "appending null value to oid", + "public" : "30819d301206092a8648ce3d0201050006052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 410, + "comment" : "appending null value to oid", + "public" : "30819d301206072a8648ce3d020106072b8104002305000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 411, + "comment" : "truncated length of oid", + "public" : "3081943009068106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 412, + "comment" : "truncated length of oid", + "public" : "308196300b06072a8648ce3d020106810381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 413, + "comment" : "Replacing oid with NULL", + "public" : "3081943009050006052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 414, + "comment" : "Replacing oid with NULL", + "public" : "308196300b06072a8648ce3d020105000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 415, + "comment" : "changing tag value of oid", + "public" : "30819b301004072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 416, + "comment" : "changing tag value of oid", + "public" : "30819b301005072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 417, + "comment" : "changing tag value of oid", + "public" : "30819b301007072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 418, + "comment" : "changing tag value of oid", + "public" : "30819b301008072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 419, + "comment" : "changing tag value of oid", + "public" : "30819b3010ff072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 420, + "comment" : "changing tag value of oid", + "public" : "30819b301006072a8648ce3d020104052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 421, + "comment" : "changing tag value of oid", + "public" : "30819b301006072a8648ce3d020105052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 422, + "comment" : "changing tag value of oid", + "public" : "30819b301006072a8648ce3d020107052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 423, + "comment" : "changing tag value of oid", + "public" : "30819b301006072a8648ce3d020108052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 424, + "comment" : "changing tag value of oid", + "public" : "30819b301006072a8648ce3d0201ff052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 425, + "comment" : "dropping value of oid", + "public" : "3081943009060006052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 426, + "comment" : "dropping value of oid", + "public" : "308196300b06072a8648ce3d020106000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 427, + "comment" : "modify first byte of oid", + "public" : "30819b30100607288648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 428, + "comment" : "modify first byte of oid", + "public" : "30819b301006072a8648ce3d0201060529810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 429, + "comment" : "modify last byte of oid", + "public" : "30819b301006072a8648ce3d028106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 430, + "comment" : "modify last byte of oid", + "public" : "30819b301006072a8648ce3d020106052b810400a30381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 431, + "comment" : "truncated oid", + "public" : "30819a300f06062a8648ce3d0206052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 432, + "comment" : "truncated oid", + "public" : "30819a300f06068648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 433, + "comment" : "truncated oid", + "public" : "30819a300f06072a8648ce3d020106042b8104000381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 434, + "comment" : "truncated oid", + "public" : "30819a300f06072a8648ce3d02010604810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 435, + "comment" : "wrong oid", + "public" : "308199300e06052b0e03021a06052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 436, + "comment" : "wrong oid", + "public" : "30819d3012060960864801650304020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 437, + "comment" : "wrong oid", + "public" : "30819b301006072a8648ce3d020106052b0e03021a0381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 438, + "comment" : "wrong oid", + "public" : "30819f301406072a8648ce3d020106096086480165030402010381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 439, + "comment" : "longer oid", + "public" : "30819c301106082a8648ce3d02010106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 440, + "comment" : "longer oid", + "public" : "30819c301106072a8648ce3d020106062b81040023010381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 441, + "comment" : "oid with modified node", + "public" : "30819b301006072a8648ce3d021106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 442, + "comment" : "oid with modified node", + "public" : "30819f3014060b2a8648ce3d02888080800106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 443, + "comment" : "oid with modified node", + "public" : "30819b301006072a8648ce3d020106052b810400330381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 444, + "comment" : "oid with modified node", + "public" : "30819f301406072a8648ce3d020106092b81040088808080230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 445, + "comment" : "large integer in oid", + "public" : "3081a4301906102a8648ce3d028280808080808080800106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 446, + "comment" : "large integer in oid", + "public" : "3081a4301906072a8648ce3d0201060e2b810400828080808080808080230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 447, + "comment" : "oid with invalid node", + "public" : "30819c301106082a8648ce3d0201e006052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 448, + "comment" : "oid with invalid node", + "public" : "30819c301106082a808648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 449, + "comment" : "oid with invalid node", + "public" : "30819c301106072a8648ce3d020106062b81040023e00381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 450, + "comment" : "oid with invalid node", + "public" : "30819c301106072a8648ce3d020106062b80810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 451, + "comment" : "length of bit string contains leading 0", + "public" : "30819c301006072a8648ce3d020106052b81040023038200860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 452, + "comment" : "wrong length of bit string", + "public" : "30819a301006072a8648ce3d020106052b8104002303870004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 453, + "comment" : "wrong length of bit string", + "public" : "30819a301006072a8648ce3d020106052b8104002303850004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 454, + "comment" : "uint32 overflow in length of bit string", + "public" : "30819f301006072a8648ce3d020106052b81040023038501000000860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 455, + "comment" : "uint64 overflow in length of bit string", + "public" : "3081a3301006072a8648ce3d020106052b8104002303890100000000000000860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 456, + "comment" : "length of bit string = 2**31 - 1", + "public" : "30819e301006072a8648ce3d020106052b8104002303847fffffff0004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 457, + "comment" : "length of bit string = 2**32 - 1", + "public" : "30819e301006072a8648ce3d020106052b810400230384ffffffff0004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 458, + "comment" : "length of bit string = 2**40 - 1", + "public" : "30819f301006072a8648ce3d020106052b810400230385ffffffffff0004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 459, + "comment" : "length of bit string = 2**64 - 1", + "public" : "3081a2301006072a8648ce3d020106052b810400230388ffffffffffffffff0004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 460, + "comment" : "incorrect length of bit string", + "public" : "30819a301006072a8648ce3d020106052b8104002303ff0004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 461, + "comment" : "lonely bit string tag", + "public" : "3013301006072a8648ce3d020106052b8104002303", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 462, + "comment" : "appending 0's to bit string", + "public" : "30819d301006072a8648ce3d020106052b810400230381880004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d500000", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 463, + "comment" : "prepending 0's to bit string", + "public" : "30819d301006072a8648ce3d020106052b8104002303818800000004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 464, + "comment" : "appending null value to bit string", + "public" : "30819d301006072a8648ce3d020106052b810400230381880004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d500500", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 465, + "comment" : "truncated length of bit string", + "public" : "3014301006072a8648ce3d020106052b810400230381", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 466, + "comment" : "Replacing bit string with NULL", + "public" : "3014301006072a8648ce3d020106052b810400230500", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 467, + "comment" : "changing tag value of bit string", + "public" : "30819b301006072a8648ce3d020106052b810400230181860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 468, + "comment" : "changing tag value of bit string", + "public" : "30819b301006072a8648ce3d020106052b810400230281860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 469, + "comment" : "changing tag value of bit string", + "public" : "30819b301006072a8648ce3d020106052b810400230481860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 470, + "comment" : "changing tag value of bit string", + "public" : "30819b301006072a8648ce3d020106052b810400230581860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 471, + "comment" : "changing tag value of bit string", + "public" : "30819b301006072a8648ce3d020106052b81040023ff81860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 472, + "comment" : "dropping value of bit string", + "public" : "3014301006072a8648ce3d020106052b810400230300", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 473, + "comment" : "modify first byte of bit string", + "public" : "30819b301006072a8648ce3d020106052b810400230381860204017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 474, + "comment" : "modify last byte of bit string", + "public" : "30819b301006072a8648ce3d020106052b810400230381860004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32dd0", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 475, + "comment" : "truncated bit string", + "public" : "30819a301006072a8648ce3d020106052b810400230381850004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 476, + "comment" : "truncated bit string", + "public" : "30819a301006072a8648ce3d020106052b8104002303818504017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 477, + "comment" : "declaring bits as unused in bit string", + "public" : "30819b301006072a8648ce3d020106052b810400230381860104017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 478, + "comment" : "unused bits in bit string", + "public" : "30819f301006072a8648ce3d020106052b8104002303818a2004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d5001020304", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 479, + "comment" : "unused bits in empty bit-string", + "public" : "3015301006072a8648ce3d020106052b81040023030103", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + }, + { + "tcId" : 480, + "comment" : "128 unused bits", + "public" : "30819b301006072a8648ce3d020106052b810400230381868004017ee16985c3678234d272913682a7c122b35c1c5011d1933bb7b08c8b883afcf469453079e2ef02a724a6ddbe25ee3b2e63007dd2838c5bb00fa1ff8fd18cf81eaa01116ce049d63f22f71c7d11c0acd67cacd1b4ea0125bd48e872dc5cc9fc4073b7c844c4b42223483b4aa8402b198d981dc8b7aba048749b4a0496e2537d3cc32d50", + "private" : "018c3c384368133e46c99ad2421ff44eed459b5d209cb2aa70b09bd7d38cc6225164a9815dff6d69afbf49f80da22f6ea33454b6544b69b3330008c6a22259f9f9e5", + "shared" : "00d397252813d37329b9e277823e2dfccdd1ee519f0c32ccbb3f5fc62062e8c07dbf3fb86085736115b70f86f44ad852f3488ecbb5e7ec31e961e869b40b6add05f5", + "result" : "acceptable", + "flags" : [ + "InvalidAsn" + ] + } + ] + } + ] +} diff --git a/tests/ecdsa_secp224r1_sha224_test.json b/tests/ecdsa_secp224r1_sha224_test.json new file mode 100644 index 00000000..b0007352 --- /dev/null +++ b/tests/ecdsa_secp224r1_sha224_test.json @@ -0,0 +1,4218 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.8r12", + "numberOfTests" : 356, + "header" : [ + "Test vectors of type EcdsaVerify are meant for the verification", + "of ASN encoded ECDSA signatures." + ], + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "schema" : "ecdsa_verify_schema.json", + "testGroups" : [ + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5", + "wx" : "00eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7", + "wy" : "00eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE6tqTvhCyRJ4ei7WDBdUgCAE8VxB8GiCj\nF6bLp+ymcjQMA9HS4JZjKGaR31UGn6JUkMndn5wLsrU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c2840bf24f6f66be287066b7cbf38788e1b7770b18fd1aa6a26d7c6dc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "Legacy:ASN encoding of s misses leading 0", + "msg" : "313233343030", + "sig" : "303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021cd7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 3, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "long form encoding of length of sequence", + "msg" : "313233343030", + "sig" : "30813d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 5, + "comment" : "length of sequence contains leading 0", + "msg" : "313233343030", + "sig" : "3082003d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 6, + "comment" : "wrong length of sequence", + "msg" : "313233343030", + "sig" : "303e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "wrong length of sequence", + "msg" : "313233343030", + "sig" : "303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "uint32 overflow in length of sequence", + "msg" : "313233343030", + "sig" : "3085010000003d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "uint64 overflow in length of sequence", + "msg" : "313233343030", + "sig" : "308901000000000000003d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "length of sequence = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "length of sequence = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length of sequence = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length of sequence = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "incorrect length of sequence", + "msg" : "313233343030", + "sig" : "30ff021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "303d028070049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a028000d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "lonely sequence tag", + "msg" : "313233343030", + "sig" : "30", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "303f0000021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "appending unused 0's to sequence", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "appending null value to sequence", + "msg" : "313233343030", + "sig" : "303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3042498177303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30412500303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "303f303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30422221498177021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304122202500021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3045221e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0004deadbeef021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3042021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2222498177021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a22212500021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3045021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a221f021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3045aa00bb00cd00303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3043aa02aabb303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30452224aa00bb00cd00021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30432222aa02aabb021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3045021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2225aa00bb00cd00021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3043021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2223aa02aabb021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "truncated length of sequence", + "msg" : "313233343030", + "sig" : "3081", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3080303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30412280021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2280021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3080313d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30412280031c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2280031d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "2e3d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "2f3d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "313d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "323d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "ff3d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "using composition for sequence", + "msg" : "313233343030", + "sig" : "3041300102303c1c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "303c1c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 57, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb3584636100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb3584636105000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "3080021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "303f3000021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463613000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "append garbage with high tag number", + "msg" : "313233343030", + "sig" : "3040021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361bf7f00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "303f303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "truncated sequence: removed last 1 elements", + "msg" : "313233343030", + "sig" : "301e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "repeating element in sequence", + "msg" : "313233343030", + "sig" : "305c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "long form encoding of length of integer", + "msg" : "313233343030", + "sig" : "303e02811c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 69, + "comment" : "long form encoding of length of integer", + "msg" : "313233343030", + "sig" : "303e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02811d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 70, + "comment" : "length of integer contains leading 0", + "msg" : "313233343030", + "sig" : "303f0282001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 71, + "comment" : "length of integer contains leading 0", + "msg" : "313233343030", + "sig" : "303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0282001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 72, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "303d021d70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "303d021b70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021e00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "uint32 overflow in length of integer", + "msg" : "313233343030", + "sig" : "30420285010000001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "uint32 overflow in length of integer", + "msg" : "313233343030", + "sig" : "3042021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0285010000001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "uint64 overflow in length of integer", + "msg" : "313233343030", + "sig" : "3046028901000000000000001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "uint64 overflow in length of integer", + "msg" : "313233343030", + "sig" : "3046021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a028901000000000000001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "length of integer = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304102847fffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "length of integer = 2**31 - 1", + "msg" : "313233343030", + "sig" : "3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02847fffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "length of integer = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30410284ffffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "length of integer = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0284ffffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "length of integer = 2**40 - 1", + "msg" : "313233343030", + "sig" : "30420285ffffffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "length of integer = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3042021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0285ffffffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "length of integer = 2**64 - 1", + "msg" : "313233343030", + "sig" : "30450288ffffffffffffffff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "length of integer = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3045021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0288ffffffffffffffff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "incorrect length of integer", + "msg" : "313233343030", + "sig" : "303d02ff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "incorrect length of integer", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02ff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "301f021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "lonely integer tag", + "msg" : "313233343030", + "sig" : "302002021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "lonely integer tag", + "msg" : "313233343030", + "sig" : "301f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a02", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "303f021e70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021f00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "303f021e000070049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 96, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021f000000d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 97, + "comment" : "appending unused 0's to integer", + "msg" : "313233343030", + "sig" : "303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0000021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "appending null value to integer", + "msg" : "313233343030", + "sig" : "303f021e70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0500021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "appending null value to integer", + "msg" : "313233343030", + "sig" : "303f021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021f00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463610500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "truncated length of integer", + "msg" : "313233343030", + "sig" : "30210281021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "truncated length of integer", + "msg" : "313233343030", + "sig" : "3020021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0281", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "30210500021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3020021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d001c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d011c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d031c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d041c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303dff1c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a001d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a011d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a031d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a041d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480aff1d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "30210200021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3020021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a0200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "using composition for integer", + "msg" : "313233343030", + "sig" : "30412220020170021b049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "using composition for integer", + "msg" : "313233343030", + "sig" : "3041021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a2221020100021cd7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "303d021c72049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d02d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a488a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463e1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "303c021b70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a48021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "303c021b049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb358463", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "303e021dff70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "303e021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021eff00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "replaced integer by infinity", + "msg" : "313233343030", + "sig" : "3022090180021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "replaced integer by infinity", + "msg" : "313233343030", + "sig" : "3021021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "replacing integer with zero", + "msg" : "313233343030", + "sig" : "3022020100021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "replacing integer with zero", + "msg" : "313233343030", + "sig" : "3021021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a020100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d0170049af31f8348673d56cece2b26fc2a84bbe2e2a2e84aeced767247021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021dff70049af31f8348673d56cece2b28cee4c34a02667b2df86234be1dcd021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c8ffb650ce07cb798c2a93131d4d81a785bfd0d5b70f4de586ee5b7f6021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d008ffb650ce07cb798c2a93131d4d7311b3cb5fd9984d2079dcb41e233021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021dfe8ffb650ce07cb798c2a93131d4d903d57b441d1d5d17b51312898db9021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d0170049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d008ffb650ce07cb798c2a93131d4d81a785bfd0d5b70f4de586ee5b7f6021d00d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d01d7bf40db0909941d78f9948340c5b4b7a5fa6fca97e8a82091e08d9e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021cd7bf40db0909941d78f9948340c78771e4888f4e702e5595d9283924", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021dff2840bf24f6f66be287066b7cbf3961eb3abe80737bf48124ca7b9c9f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021dfe2840bf24f6f66be287066b7cbf3a4b485a059035681757df6e1f7262", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021d01d7bf40db0909941d78f9948340c69e14c5417f8c840b7edb35846361", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303c021c70049af31f8348673d56cece2b27e587a402f2a48f0b21a7911a480a021c2840bf24f6f66be287066b7cbf3961eb3abe80737bf48124ca7b9c9f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffffffff000000000000000000000001090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 214, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 215, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 216, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000020201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 217, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 218, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 219, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 220, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 221, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 222, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffffffff000000000000000000000002090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 223, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 224, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30060201010c0130", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 225, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30050201010c00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 226, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30090c0225730c03732573", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 227, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30080201013003020100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 228, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "3003020101", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 229, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "3006020101010100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 230, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3137353738", + "sig" : "303c021c326bc06353f7f9c9f77b8f4b55464e8619944e7879402cca572e041a021c3116e1a38e4ab2008eca032fb2d185e5c21a232eaf4507ae56177fd2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "special case hash", + "msg" : "32323534363238393834", + "sig" : "303d021d008ce2afe20b684576fdd91b4b34168c9c011996af5b0eb85fa929f381021c662af5ca651bffbc623c3a3b372779bd09e1948cd19188f5339a979d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 232, + "comment" : "special case hash", + "msg" : "31383237383738363130", + "sig" : "303e021d00da573cf73aed174710c232155735248f8ebef696374647527da52258021d00b251856b66a83c32bf0b7b81a01f1db4507e622125f301bd832a5ccc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 233, + "comment" : "special case hash", + "msg" : "31353138383631373039", + "sig" : "303e021d00c368da86582b2c82b696b2f7c79027968f3fd25cbba9688cdc67b17a021d00aba8e3c2ff1af9bb9c66ca88a3825a19ce17206e7a658ff47025891e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 234, + "comment" : "special case hash", + "msg" : "32313239323333343232", + "sig" : "303d021d00ffcefcb57190d0b87efb789fb53407fd2c65c5ae3551da3eccf8ddd5021c05c89b41238f1e1def8fbe8d4afebf20be077e82972f91297487e118", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 235, + "comment" : "special case hash", + "msg" : "31323231393739303539", + "sig" : "303c021c2b98c67ebf6597b08bc7f1b73ff8662cf125e9700ec973ece9c6ff48021c2e3f72a8f76e12c8cdf4487e0956c1ef4578e1da4d29d8db824d415b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 236, + "comment" : "special case hash", + "msg" : "32333032353637363131", + "sig" : "303d021c5794d70440f166904d24d0b910cd127c63a9eddca45a4d9032db47e8021d008ba5d290834d9a0963122d928da902f7b03467396072180bb1801b43", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 237, + "comment" : "special case hash", + "msg" : "31313035383638343732", + "sig" : "303e021d00c29c70b0b21782d1c727f4907aef5641b6d6c6e7b2a1ebfa57794223021d00aac2d3a02592f298dd3198e388425ec7a91d7e6be48248a64773614c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 238, + "comment" : "special case hash", + "msg" : "31343636363134343432", + "sig" : "303d021c5c3ef3778c811e69ef0b0e370e45ec0d7eb88505c3e8ffb8c50b9993021d00e06b5c6e47dc4da9e64fd21bc3e1da13cf7c264fa64ccb89da87387c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 239, + "comment" : "special case hash", + "msg" : "343431393536343230", + "sig" : "303e021d00ed8f586563232cf15ebd014bd4f99727e337cfe4ce48694fe6748ec2021d00fff779a3eca9513522908e252a2b4aab2060608e6cd2d4f1b8c696cd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 240, + "comment" : "special case hash", + "msg" : "31393639343836303634", + "sig" : "303c021c64c084f6b775bbf7915c1964a68b0259629328598f13557872867830021c2a6f3b289d130ec3d99e4caaf601497895a069c1a5a75b559ad28444", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 241, + "comment" : "special case hash", + "msg" : "32323335363732383833", + "sig" : "303d021c2b514e9b0e0eb68adc01915abbee9fa21f3034be5581dedaa6b15982021d00b8f71c5fdc68d698716bfc623b278216c0fcc0298497fc9c03db44e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 242, + "comment" : "special case hash", + "msg" : "32323537383433373033", + "sig" : "303e021d00e4103f4a8a814485b6b406fe8dd72206bad6a50e7126bc655c3d2285021d009bcb99693284cac26e6641a861dbec24f9cc5dd7bb535339d09ac984", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 243, + "comment" : "special case hash", + "msg" : "393434353030393436", + "sig" : "303d021d009edfb833446ec8b6fc84eea34ee40a85b732e5c99da8abc8bafcc515021c5052b40f9d407ae90003299cabe3e1a587b0558127cafb31de6b2638", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 244, + "comment" : "special case hash", + "msg" : "31363837373839343130", + "sig" : "303d021d00ad2647c8ff377798a6aeaed436d30c7b25fb52428829ce6424dd34e8021c28f58671d77c86da302418c51e5ab86d137ba6ef4389722bc79b8751", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 245, + "comment" : "special case hash", + "msg" : "333933323631323238", + "sig" : "303c021c5dfc6fad385bdb24b2b70a64fd4253405c0028bb36f4793aa3bd31fe021c1c210b74924171378992b03bb1bd78c5cfcfc879d2e5c736d35516c3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 246, + "comment" : "special case hash", + "msg" : "31303733353731303935", + "sig" : "303d021c766bef46229695e6829dd12cd558369ec34519ba4a72dcaf6f73f7b0021d00fc015ccdd1e943b910101607d81ff1398ca6a4d70c25832b02b221e4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 247, + "comment" : "special case hash", + "msg" : "3630383837343734", + "sig" : "303c021c120055f90ad1290c4c5fc5faf69b215139182c770d2b55e95712442f021c01ac47f7446543d4003b039d9f54daa9d0799f98291a32df4fcd472a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 248, + "comment" : "special case hash", + "msg" : "31313932353639393632", + "sig" : "303d021d00f480591f6f40a25b37a035fd91954145ec342e593d09e142f25da408021c5c6ba44ff52f52c51490743d9b650916be58d06d7c1fd99dfa2eab58", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 249, + "comment" : "special case hash", + "msg" : "3930303736303933", + "sig" : "303c021c57daddb0cb6af939b1ea1aaf4bc72e56150c0c46a581827193e65d17021c3bc37bde4e60b789ba86a054d37f1191e0814926c1a0100168d16c17", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 250, + "comment" : "special case hash", + "msg" : "31363032383336313337", + "sig" : "303c021c3a74102bd1fc617018efc4fbc042e719a81b55830aac1f1dcdedec65021c4bb9fe90015a45f31c8c95dda24f54fcdb64682c13f68d4da3d1abe0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 251, + "comment" : "special case hash", + "msg" : "32303830323435363734", + "sig" : "303e021d00e3b6bb1b5beed048e0177e3e310fa14eb923a1e3274c0946f9275454021d00e044e0494ff46573c37007e3efa3233588f1d103ced1823c7e87e7c8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 252, + "comment" : "special case hash", + "msg" : "31373938323734363539", + "sig" : "303c021c3c212b5a7e65d9af44643bd62fa42a9b9cffe6bdb623e9b9e4337156021c29c8121a12427a324e5d551ff5a83d3c252e32257af2800d080817d2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 253, + "comment" : "special case hash", + "msg" : "31313535353737373230", + "sig" : "303c021c1630554989fffd0e35f2d9105623d73a543634c48000484c422272ca021c214da487d5e51f73814dff80a08c77bd8a83a9889a1b26a5578ba954", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 254, + "comment" : "special case hash", + "msg" : "32343332343734363634", + "sig" : "303d021c0a4609242f2193b94bc54f49bcf532a576e035cec50e043668574bef021d00aa68bd67624d8812002bbb3a5f530594451372d4ab36896a2929c3df", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 255, + "comment" : "special case hash", + "msg" : "32343137323832323737", + "sig" : "303e021d00ef9ff446e8eef3e948f4129fe8804f81f5b7f116a5383f9e8bc359e4021d00f4c7055bd98f4a7ea49d9574160eac167809f6a78b9dd220958dd0f3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 256, + "comment" : "special case hash", + "msg" : "3737383734373731", + "sig" : "303d021c1a6c59d85d5b3120b28c0d30bc058a92dc725d8ef450c198cc3ca522021d008b17fefc8ab1ff0bb37a93446453d40f65bc2cb9636b11207f5c90a1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "048bf7e792f7c86877f1fd0552e42d80653b59e3a29e762a22810daac7eec615bbad04b58dc2a7956090b8040bb5055325bba0aa8b3a5caa6f", + "wx" : "008bf7e792f7c86877f1fd0552e42d80653b59e3a29e762a22810daac7", + "wy" : "00eec615bbad04b58dc2a7956090b8040bb5055325bba0aa8b3a5caa6f" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048bf7e792f7c86877f1fd0552e42d80653b59e3a29e762a22810daac7eec615bbad04b58dc2a7956090b8040bb5055325bba0aa8b3a5caa6f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEi/fnkvfIaHfx/QVS5C2AZTtZ46Kedioi\ngQ2qx+7GFbutBLWNwqeVYJC4BAu1BVMlu6Cqizpcqm8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 257, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "3030020f00e95c1f470fc1ec22d6baa3a3d5c1021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 258, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "303e021d00fffffffffffffffffffffffffffffffefffffffffffffffffffffffe021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "042646ff36d9697aaaed0d641117f94f60e138bab8e9912b558ae0a818ca48e45a33550c1b5bd20a00e4d9df3033c03222e87bd96a8197f2dd", + "wx" : "2646ff36d9697aaaed0d641117f94f60e138bab8e9912b558ae0a818", + "wy" : "00ca48e45a33550c1b5bd20a00e4d9df3033c03222e87bd96a8197f2dd" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00042646ff36d9697aaaed0d641117f94f60e138bab8e9912b558ae0a818ca48e45a33550c1b5bd20a00e4d9df3033c03222e87bd96a8197f2dd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEJkb/NtlpeqrtDWQRF/lPYOE4urjpkStV\niuCoGMpI5FozVQwbW9IKAOTZ3zAzwDIi6HvZaoGX8t0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 259, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04ea3ea2873b6fc099bfd779b0a2c23c2c4354e2fec4536f3b8e420988f97e1c7646b4eb3de616752f415ab3a6f696d1d674fb4b6732252382", + "wx" : "00ea3ea2873b6fc099bfd779b0a2c23c2c4354e2fec4536f3b8e420988", + "wy" : "00f97e1c7646b4eb3de616752f415ab3a6f696d1d674fb4b6732252382" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004ea3ea2873b6fc099bfd779b0a2c23c2c4354e2fec4536f3b8e420988f97e1c7646b4eb3de616752f415ab3a6f696d1d674fb4b6732252382", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE6j6ihztvwJm/13mwosI8LENU4v7EU287\njkIJiPl+HHZGtOs95hZ1L0Fas6b2ltHWdPtLZzIlI4I=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 260, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021c3d5052691b8dc89debad360466f2a39e82e8ae2aefb77c3c92ad7cd1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0492ae54e38b4e9c6ae9943193747c4c8acc6c96f422515288e9698a13e8f3a759a1a8273c53f4b4b18bfcf78d9bb988adb3b005002dbe434c", + "wx" : "0092ae54e38b4e9c6ae9943193747c4c8acc6c96f422515288e9698a13", + "wy" : "00e8f3a759a1a8273c53f4b4b18bfcf78d9bb988adb3b005002dbe434c" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000492ae54e38b4e9c6ae9943193747c4c8acc6c96f422515288e9698a13e8f3a759a1a8273c53f4b4b18bfcf78d9bb988adb3b005002dbe434c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEkq5U44tOnGrplDGTdHxMisxslvQiUVKI\n6WmKE+jzp1mhqCc8U/S0sYv8942buYits7AFAC2+Q0w=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 261, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "303d021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021d00bf19ab4d3ebf5a1a49d765909308daa88c2b7be3969db552ea30562b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b157315cc1aaeae64eb5b38452884195fdfe8a15fb5618284f48afe5e1fbbaad729477a45f3752b7f72ad2f9cd7dce4158a8e21b8127e8a7", + "wx" : "00b157315cc1aaeae64eb5b38452884195fdfe8a15fb5618284f48afe5", + "wy" : "00e1fbbaad729477a45f3752b7f72ad2f9cd7dce4158a8e21b8127e8a7" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b157315cc1aaeae64eb5b38452884195fdfe8a15fb5618284f48afe5e1fbbaad729477a45f3752b7f72ad2f9cd7dce4158a8e21b8127e8a7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEsVcxXMGq6uZOtbOEUohBlf3+ihX7Vhgo\nT0iv5eH7uq1ylHekXzdSt/cq0vnNfc5BWKjiG4En6Kc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 262, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0487d9d964044b5b16801f32de9f3f9066194e8bf80affa3cb0d4ddb1db5eb9b6594e6d1bcacd0fd9d67c408f789dfb95feb79a6e2fb9c4cee", + "wx" : "0087d9d964044b5b16801f32de9f3f9066194e8bf80affa3cb0d4ddb1d", + "wy" : "00b5eb9b6594e6d1bcacd0fd9d67c408f789dfb95feb79a6e2fb9c4cee" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000487d9d964044b5b16801f32de9f3f9066194e8bf80affa3cb0d4ddb1db5eb9b6594e6d1bcacd0fd9d67c408f789dfb95feb79a6e2fb9c4cee", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEh9nZZARLWxaAHzLenz+QZhlOi/gK/6PL\nDU3bHbXrm2WU5tG8rND9nWfECPeJ37lf63mm4vucTO4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 263, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020103", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04461b435af09ede35e74dac21f9af7b1b9998213039f8785d4a4905f518b89bde69de34a482638461d09386e7193ca90ca5b3038e2a3885d1", + "wx" : "461b435af09ede35e74dac21f9af7b1b9998213039f8785d4a4905f5", + "wy" : "18b89bde69de34a482638461d09386e7193ca90ca5b3038e2a3885d1" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004461b435af09ede35e74dac21f9af7b1b9998213039f8785d4a4905f518b89bde69de34a482638461d09386e7193ca90ca5b3038e2a3885d1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAERhtDWvCe3jXnTawh+a97G5mYITA5+Hhd\nSkkF9Ri4m95p3jSkgmOEYdCThucZPKkMpbMDjio4hdE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 264, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020104", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 265, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a40020104", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "048093af8db04b3dd2e7c3c59bb64a832c2fb8e8e141bae7ba1534950a10c5e87aecbd1fcdfc36cd18d41b3238b2ac613eb7c9de988d881816", + "wx" : "008093af8db04b3dd2e7c3c59bb64a832c2fb8e8e141bae7ba1534950a", + "wy" : "10c5e87aecbd1fcdfc36cd18d41b3238b2ac613eb7c9de988d881816" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048093af8db04b3dd2e7c3c59bb64a832c2fb8e8e141bae7ba1534950a10c5e87aecbd1fcdfc36cd18d41b3238b2ac613eb7c9de988d881816", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEgJOvjbBLPdLnw8WbtkqDLC+46OFBuue6\nFTSVChDF6HrsvR/N/DbNGNQbMjiyrGE+t8nemI2IGBY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 266, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3022020103021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c6f00c4", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04c6d71f4ba0933f1269f7d6df83fd0c9c67254f101dcc126dc15faa3e3c45dc9fedc71c9f2b0dd1b12b656241f5e335066f3f925bdbcfe98f", + "wx" : "00c6d71f4ba0933f1269f7d6df83fd0c9c67254f101dcc126dc15faa3e", + "wy" : "3c45dc9fedc71c9f2b0dd1b12b656241f5e335066f3f925bdbcfe98f" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c6d71f4ba0933f1269f7d6df83fd0c9c67254f101dcc126dc15faa3e3c45dc9fedc71c9f2b0dd1b12b656241f5e335066f3f925bdbcfe98f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAExtcfS6CTPxJp99bfg/0MnGclTxAdzBJt\nwV+qPjxF3J/txxyfKw3RsStlYkH14zUGbz+SW9vP6Y8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 267, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "302302020100021d00c993264c993264c993264c99326411d2e55b3214a8d67528812a55ab", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04beb9d8dcba48146b9032688ecea947a231e7d0e6ce17d76b56ed634835503f3b4af414870ef03383784b1d846b3e07b8e9fc2d6190a3bfda", + "wx" : "00beb9d8dcba48146b9032688ecea947a231e7d0e6ce17d76b56ed6348", + "wy" : "35503f3b4af414870ef03383784b1d846b3e07b8e9fc2d6190a3bfda" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004beb9d8dcba48146b9032688ecea947a231e7d0e6ce17d76b56ed634835503f3b4af414870ef03383784b1d846b3e07b8e9fc2d6190a3bfda", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEvrnY3LpIFGuQMmiOzqlHojHn0ObOF9dr\nVu1jSDVQPztK9BSHDvAzg3hLHYRrPge46fwtYZCjv9o=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 268, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "302702072d9b4d347952cc021c3e85d56474b5c55fbe86608442a84b2bf093b7d75f53a47250e1c70c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "041955ba3f90e7a739471a5d182b594c9747eb49d5356203f3bb8b939c807d88ce3a0885bfa5b5b7f6e9beb18285e7130524b6c1498b3269ee", + "wx" : "1955ba3f90e7a739471a5d182b594c9747eb49d5356203f3bb8b939c", + "wy" : "00807d88ce3a0885bfa5b5b7f6e9beb18285e7130524b6c1498b3269ee" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00041955ba3f90e7a739471a5d182b594c9747eb49d5356203f3bb8b939c807d88ce3a0885bfa5b5b7f6e9beb18285e7130524b6c1498b3269ee", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEGVW6P5DnpzlHGl0YK1lMl0frSdU1YgPz\nu4uTnIB9iM46CIW/pbW39um+sYKF5xMFJLbBSYsyae4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 269, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "302d020d1033e67e37b32b445580bf4efb021c02fd02fd02fd02fd02fd02fd02fd0043a4fd2da317247308c74dc6b8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "045cb9e5a5071f2b37aa3a5e5f389f54f996b0bc8a132ecb6885318fbf4ec5f8b93d8bf2a3b64fa7cac316392562c46567963c43a69f7a37fd", + "wx" : "5cb9e5a5071f2b37aa3a5e5f389f54f996b0bc8a132ecb6885318fbf", + "wy" : "4ec5f8b93d8bf2a3b64fa7cac316392562c46567963c43a69f7a37fd" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00045cb9e5a5071f2b37aa3a5e5f389f54f996b0bc8a132ecb6885318fbf4ec5f8b93d8bf2a3b64fa7cac316392562c46567963c43a69f7a37fd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEXLnlpQcfKzeqOl5fOJ9U+ZawvIoTLsto\nhTGPv07F+Lk9i/Kjtk+nysMWOSVixGVnljxDpp96N/0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 270, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "302302020100021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "047b34ef8723a4309c0fa8a7ec3a783477652a82892370f6763314fe7bdee663853071e35fd3c76f991d7843c5e168ca659b93bd6015518fba", + "wx" : "7b34ef8723a4309c0fa8a7ec3a783477652a82892370f6763314fe7b", + "wy" : "00dee663853071e35fd3c76f991d7843c5e168ca659b93bd6015518fba" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00047b34ef8723a4309c0fa8a7ec3a783477652a82892370f6763314fe7bdee663853071e35fd3c76f991d7843c5e168ca659b93bd6015518fba", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEezTvhyOkMJwPqKfsOng0d2UqgokjcPZ2\nMxT+e97mY4UwceNf08dvmR14Q8XhaMplm5O9YBVRj7o=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 271, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "302e020d062522bbd3ecbe7c39e93e7c24021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0403f26a9c13979cf5d090ea25dc966398022ceec31504abc4b10f76767d577dcf47e10e384c6b9a229a455a9fd33e54fe7960b8b0160aef16", + "wx" : "03f26a9c13979cf5d090ea25dc966398022ceec31504abc4b10f7676", + "wy" : "7d577dcf47e10e384c6b9a229a455a9fd33e54fe7960b8b0160aef16" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000403f26a9c13979cf5d090ea25dc966398022ceec31504abc4b10f76767d577dcf47e10e384c6b9a229a455a9fd33e54fe7960b8b0160aef16", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEA/JqnBOXnPXQkOol3JZjmAIs7sMVBKvE\nsQ92dn1Xfc9H4Q44TGuaIppFWp/TPlT+eWC4sBYK7xY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 272, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "303d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29bd021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b671296dd5f690502e4b1500e4acb4c82d3aa8dfbc5868a643f86a3ca46ba8c3a7b823259522291e2416232276cca8503cc8dbf941f1d93d", + "wx" : "00b671296dd5f690502e4b1500e4acb4c82d3aa8dfbc5868a643f86a3c", + "wy" : "00a46ba8c3a7b823259522291e2416232276cca8503cc8dbf941f1d93d" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b671296dd5f690502e4b1500e4acb4c82d3aa8dfbc5868a643f86a3ca46ba8c3a7b823259522291e2416232276cca8503cc8dbf941f1d93d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtnEpbdX2kFAuSxUA5Ky0yC06qN+8WGim\nQ/hqPKRrqMOnuCMllSIpHiQWIyJ2zKhQPMjb+UHx2T0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 273, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0476e34b57a8c61df59cb0b7921cec6e5422344033f7accb7b3179e682cefd0a848309d1decf98a3b9e333691b95c17821cb681137630c02e2", + "wx" : "76e34b57a8c61df59cb0b7921cec6e5422344033f7accb7b3179e682", + "wy" : "00cefd0a848309d1decf98a3b9e333691b95c17821cb681137630c02e2" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000476e34b57a8c61df59cb0b7921cec6e5422344033f7accb7b3179e682cefd0a848309d1decf98a3b9e333691b95c17821cb681137630c02e2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEduNLV6jGHfWcsLeSHOxuVCI0QDP3rMt7\nMXnmgs79CoSDCdHez5ijueMzaRuVwXghy2gRN2MMAuI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 275, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151e021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0451839e545c872f4a381f278ed5b4c24cf38aac77b02953405618bf27394e41226594c499db6a7dd7a6901bda5e6474b1ffa10a6567210010", + "wx" : "51839e545c872f4a381f278ed5b4c24cf38aac77b02953405618bf27", + "wy" : "394e41226594c499db6a7dd7a6901bda5e6474b1ffa10a6567210010" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000451839e545c872f4a381f278ed5b4c24cf38aac77b02953405618bf27394e41226594c499db6a7dd7a6901bda5e6474b1ffa10a6567210010", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEUYOeVFyHL0o4HyeO1bTCTPOKrHewKVNA\nVhi/JzlOQSJllMSZ22p916aQG9peZHSx/6EKZWchABA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 276, + "comment" : "edge case for signature malleability", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151f021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04a3ec90053d1e100815d1becfe96c9b3646e52df794f6b03b766a7574c3b7e17e73acc8cefe71b6eb13d4f1c94c57e58bee43c69d9d41a964", + "wx" : "00a3ec90053d1e100815d1becfe96c9b3646e52df794f6b03b766a7574", + "wy" : "00c3b7e17e73acc8cefe71b6eb13d4f1c94c57e58bee43c69d9d41a964" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a3ec90053d1e100815d1becfe96c9b3646e52df794f6b03b766a7574c3b7e17e73acc8cefe71b6eb13d4f1c94c57e58bee43c69d9d41a964", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEo+yQBT0eEAgV0b7P6WybNkblLfeU9rA7\ndmp1dMO34X5zrMjO/nG26xPU8clMV+WL7kPGnZ1BqWQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 277, + "comment" : "edge case for signature malleability", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151f021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b5c09b4851a67371eee7bbf02451e5208c40de61bc1a33df2710b384dcce4e5b83c32a800e8de28fa936d582cdcad185e894caac797f1d14", + "wx" : "00b5c09b4851a67371eee7bbf02451e5208c40de61bc1a33df2710b384", + "wy" : "00dcce4e5b83c32a800e8de28fa936d582cdcad185e894caac797f1d14" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b5c09b4851a67371eee7bbf02451e5208c40de61bc1a33df2710b384dcce4e5b83c32a800e8de28fa936d582cdcad185e894caac797f1d14", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtcCbSFGmc3Hu57vwJFHlIIxA3mG8GjPf\nJxCzhNzOTluDwyqADo3ij6k21YLNytGF6JTKrHl/HRQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 278, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c753bb40078934081d7bd113ec49b19ef09d1ba33498690516d4d122c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04941e283be31300bfd4f6a12b876fd3267352551cc49e9eef73f76538c115e5fe3b92f643c6cef1c58f3f8657574d1f64957d4880995cde83", + "wx" : "00941e283be31300bfd4f6a12b876fd3267352551cc49e9eef73f76538", + "wy" : "00c115e5fe3b92f643c6cef1c58f3f8657574d1f64957d4880995cde83" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004941e283be31300bfd4f6a12b876fd3267352551cc49e9eef73f76538c115e5fe3b92f643c6cef1c58f3f8657574d1f64957d4880995cde83", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAElB4oO+MTAL/U9qErh2/TJnNSVRzEnp7v\nc/dlOMEV5f47kvZDxs7xxY8/hldXTR9klX1IgJlc3oM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 279, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d008ac44bff876cbf7e2842eec13b63fcb3d6e7360aca5698f3ef0f1811", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0443c9ccd08a80bca18022722b0bdcd790d82a3ef8b65c3f34204bb4729ee1c1f00598130b2313a3e38a3798d03dac665cff20f36ce8a2024a", + "wx" : "43c9ccd08a80bca18022722b0bdcd790d82a3ef8b65c3f34204bb472", + "wy" : "009ee1c1f00598130b2313a3e38a3798d03dac665cff20f36ce8a2024a" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000443c9ccd08a80bca18022722b0bdcd790d82a3ef8b65c3f34204bb4729ee1c1f00598130b2313a3e38a3798d03dac665cff20f36ce8a2024a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEQ8nM0IqAvKGAInIrC9zXkNgqPvi2XD80\nIEu0cp7hwfAFmBMLIxOj44o3mNA9rGZc/yDzbOiiAko=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 280, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04d958e418fad1c5ea5c923e6185e03ed5539d3f5f58dfac8bb9f104596997e408c97be5fdc037a5c004389d4b97eb1f54635e985853c1f082", + "wx" : "00d958e418fad1c5ea5c923e6185e03ed5539d3f5f58dfac8bb9f10459", + "wy" : "6997e408c97be5fdc037a5c004389d4b97eb1f54635e985853c1f082" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d958e418fad1c5ea5c923e6185e03ed5539d3f5f58dfac8bb9f104596997e408c97be5fdc037a5c004389d4b97eb1f54635e985853c1f082", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE2VjkGPrRxepckj5hheA+1VOdP19Y36yL\nufEEWWmX5AjJe+X9wDelwAQ4nUuX6x9UY16YWFPB8II=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 281, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d00aaaaaaaaaaaaaaaaaaaaaaaaaaaa0f17407b4ad40d3e1b8392e81c29", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04d629b434c9b5d157bd72e114fd839553f7f0e94600934a0a49e59aa4713a13c01775e75e2ebae75d9e29d2506184177b7dd0868693873596", + "wx" : "00d629b434c9b5d157bd72e114fd839553f7f0e94600934a0a49e59aa4", + "wy" : "713a13c01775e75e2ebae75d9e29d2506184177b7dd0868693873596" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d629b434c9b5d157bd72e114fd839553f7f0e94600934a0a49e59aa4713a13c01775e75e2ebae75d9e29d2506184177b7dd0868693873596", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE1im0NMm10Ve9cuEU/YOVU/fw6UYAk0oK\nSeWapHE6E8AXdedeLrrnXZ4p0lBhhBd7fdCGhpOHNZY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 282, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d1be91557d866ad5f2945b14ec3317bc43c1338fd06af6496201cce2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "043d2e9bb9a712bf3ad42ac30659fdbda9be9956537f9f37cd05f0ff377d5982d6d9266d774942c44d9eb3501051d3b9688610131e7856ef36", + "wx" : "3d2e9bb9a712bf3ad42ac30659fdbda9be9956537f9f37cd05f0ff37", + "wy" : "7d5982d6d9266d774942c44d9eb3501051d3b9688610131e7856ef36" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00043d2e9bb9a712bf3ad42ac30659fdbda9be9956537f9f37cd05f0ff377d5982d6d9266d774942c44d9eb3501051d3b9688610131e7856ef36", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEPS6buacSvzrUKsMGWf29qb6ZVlN/nzfN\nBfD/N31ZgtbZJm13SULETZ6zUBBR07lohhATHnhW7zY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 283, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7ac54a381d9bd3f2698359d6f658b5e4167d15a75b576e82d2efbd37", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04a0be2f10144b9b42b016f1bd9fca30e4c24aae4775596c7cdb07ae60d60ff3a70f1541631f6087d3f3b3fe376d2305b50b94821106412479", + "wx" : "00a0be2f10144b9b42b016f1bd9fca30e4c24aae4775596c7cdb07ae60", + "wy" : "00d60ff3a70f1541631f6087d3f3b3fe376d2305b50b94821106412479" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a0be2f10144b9b42b016f1bd9fca30e4c24aae4775596c7cdb07ae60d60ff3a70f1541631f6087d3f3b3fe376d2305b50b94821106412479", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEoL4vEBRLm0KwFvG9n8ow5MJKrkd1WWx8\n2weuYNYP86cPFUFjH2CH0/Oz/jdtIwW1C5SCEQZBJHk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 284, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c4fbb063e82402e16fe14edda4d7986b0b88344a1f53b0e2684ee7e31", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "044d74397a586c8ac5e326bed03720bde7037e4a07aee7209f70493cab106778bfd081d17ab6dcb8fd8a454962941c26ecc19cda9fb77719db", + "wx" : "4d74397a586c8ac5e326bed03720bde7037e4a07aee7209f70493cab", + "wy" : "106778bfd081d17ab6dcb8fd8a454962941c26ecc19cda9fb77719db" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00044d74397a586c8ac5e326bed03720bde7037e4a07aee7209f70493cab106778bfd081d17ab6dcb8fd8a454962941c26ecc19cda9fb77719db", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAETXQ5elhsisXjJr7QNyC95wN+Sgeu5yCf\ncEk8qxBneL/QgdF6tty4/YpFSWKUHCbswZzan7d3Gds=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 285, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d3be5f50d726f99b8ac44bff876bfe78dd7ae630d227ef0ba87ae39b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "048c2f149b1738243f81a6f12135395a2ba2718863622e66e33efc241f5638cf6ae9cfb39578cf3a719702052e5e9e940216c5136dcb6ef085", + "wx" : "008c2f149b1738243f81a6f12135395a2ba2718863622e66e33efc241f", + "wy" : "5638cf6ae9cfb39578cf3a719702052e5e9e940216c5136dcb6ef085" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048c2f149b1738243f81a6f12135395a2ba2718863622e66e33efc241f5638cf6ae9cfb39578cf3a719702052e5e9e940216c5136dcb6ef085", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEjC8Umxc4JD+BpvEhNTlaK6JxiGNiLmbj\nPvwkH1Y4z2rpz7OVeM86cZcCBS5enpQCFsUTbctu8IU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 286, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00e5f50d726f99b8ac44bff876cbf710e47f9087d1afdfb1dab6d6daf1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04ad5227e48afaa165e7b97ef8210687556e10643fda8a377aaf4f5bf412e86d4ae55f4460aba6a932f307ee78efdc136e9a3df6313100bf4f", + "wx" : "00ad5227e48afaa165e7b97ef8210687556e10643fda8a377aaf4f5bf4", + "wy" : "12e86d4ae55f4460aba6a932f307ee78efdc136e9a3df6313100bf4f" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004ad5227e48afaa165e7b97ef8210687556e10643fda8a377aaf4f5bf412e86d4ae55f4460aba6a932f307ee78efdc136e9a3df6313100bf4f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAErVIn5Ir6oWXnuX74IQaHVW4QZD/aijd6\nr09b9BLobUrlX0Rgq6apMvMH7njv3BNumj32MTEAv08=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 287, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00cbea1ae4df337158897ff0ed97ef0b261e681f654be23a7011518ba5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "043fb94a3165ecdef43fa27907ed075caf52c25420ac7bc7bb90408992023c4d7b4775b591ae223dd4da9ceaabd73b9743ddab8b40576e393f", + "wx" : "3fb94a3165ecdef43fa27907ed075caf52c25420ac7bc7bb90408992", + "wy" : "023c4d7b4775b591ae223dd4da9ceaabd73b9743ddab8b40576e393f" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00043fb94a3165ecdef43fa27907ed075caf52c25420ac7bc7bb90408992023c4d7b4775b591ae223dd4da9ceaabd73b9743ddab8b40576e393f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEP7lKMWXs3vQ/onkH7Qdcr1LCVCCse8e7\nkECJkgI8TXtHdbWRriI91Nqc6qvXO5dD3auLQFduOT8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 288, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d726f99b8ac44bff876cbf7e28422aa07ec3cb1d9472bd704f4029f0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04e45fcf0a7f4dc2a308dc7868251423fbf71a205a9546850a01a732fc9a73ca4d41175076f2f362b276ecb0ccdb6e0bb30c4a1b35c2e3ed82", + "wx" : "00e45fcf0a7f4dc2a308dc7868251423fbf71a205a9546850a01a732fc", + "wy" : "009a73ca4d41175076f2f362b276ecb0ccdb6e0bb30c4a1b35c2e3ed82" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004e45fcf0a7f4dc2a308dc7868251423fbf71a205a9546850a01a732fc9a73ca4d41175076f2f362b276ecb0ccdb6e0bb30c4a1b35c2e3ed82", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE5F/PCn9NwqMI3HhoJRQj+/caIFqVRoUK\nAacy/Jpzyk1BF1B28vNisnbssMzbbguzDEobNcLj7YI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 289, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d009720b755413cca9506b5d27589e58ac4bed856762ba7ae20ab5b43cc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "043c59e13982fd9c1a45991b1e9d79e939a52a62ca479764f1477e28131b004c9bffd7f00c05e3168c625cc93ab7a0f1ba8d6fa26a4d5162cb", + "wx" : "3c59e13982fd9c1a45991b1e9d79e939a52a62ca479764f1477e2813", + "wy" : "1b004c9bffd7f00c05e3168c625cc93ab7a0f1ba8d6fa26a4d5162cb" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00043c59e13982fd9c1a45991b1e9d79e939a52a62ca479764f1477e28131b004c9bffd7f00c05e3168c625cc93ab7a0f1ba8d6fa26a4d5162cb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEPFnhOYL9nBpFmRsenXnpOaUqYspHl2Tx\nR34oExsATJv/1/AMBeMWjGJcyTq3oPG6jW+iak1RYss=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 290, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c2e416eaa8279952a0d6ba4eb13cbfee69cf7bcae437232fbfa5a5d5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04c6b8ff152d7a1b7a99ce3483bdeaaf5bd2ce64dc6b0f89cf3544b87c053ab6cf9cb510dc1440ab4e412a167f4c69365fcfc97f31d5ba4581", + "wx" : "00c6b8ff152d7a1b7a99ce3483bdeaaf5bd2ce64dc6b0f89cf3544b87c", + "wy" : "053ab6cf9cb510dc1440ab4e412a167f4c69365fcfc97f31d5ba4581" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c6b8ff152d7a1b7a99ce3483bdeaaf5bd2ce64dc6b0f89cf3544b87c053ab6cf9cb510dc1440ab4e412a167f4c69365fcfc97f31d5ba4581", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAExrj/FS16G3qZzjSDveqvW9LOZNxrD4nP\nNUS4fAU6ts+ctRDcFECrTkEqFn9MaTZfz8l/MdW6RYE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 291, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00c56225ffc3b65fbf142177609db189ab5bd013246f19e11ca5b5a127", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "047c0772fb6553c0ec0dd1f73b5db380764d9f2f7afb4eac1e774dacd56e2e5de0db63bf03cf9675eae6d2dfe5424e79ab394951c9b60ad5df", + "wx" : "7c0772fb6553c0ec0dd1f73b5db380764d9f2f7afb4eac1e774dacd5", + "wy" : "6e2e5de0db63bf03cf9675eae6d2dfe5424e79ab394951c9b60ad5df" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00047c0772fb6553c0ec0dd1f73b5db380764d9f2f7afb4eac1e774dacd56e2e5de0db63bf03cf9675eae6d2dfe5424e79ab394951c9b60ad5df", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEfAdy+2VTwOwN0fc7XbOAdk2fL3r7Tqwe\nd02s1W4uXeDbY78Dz5Z16ubS3+VCTnmrOUlRybYK1d8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 292, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00a7dd831f4120170b7f0a76ed26bc4ea9cc9e1a70048c1bb5f0a55437", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "044108e0ccd47cba09fb7ed4d9f3455823780965157861c1bf8f93d34b46d6fdb71e9e89adaae71376b13fd17644b11eed00d498783da0ba1a", + "wx" : "4108e0ccd47cba09fb7ed4d9f3455823780965157861c1bf8f93d34b", + "wy" : "46d6fdb71e9e89adaae71376b13fd17644b11eed00d498783da0ba1a" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00044108e0ccd47cba09fb7ed4d9f3455823780965157861c1bf8f93d34b46d6fdb71e9e89adaae71376b13fd17644b11eed00d498783da0ba1a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEQQjgzNR8ugn7ftTZ80VYI3gJZRV4YcG/\nj5PTS0bW/bcenomtqucTdrE/0XZEsR7tANSYeD2guho=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 293, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffffb2364ae85014b149b86c741eb8be", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "042f2da40a1b72f67ba63613a243119c41c7252839cf106e86b5d8e6e35a1e0e2fc49b4f316f0c0e7236785749eb34ce923c23aef330af8733", + "wx" : "2f2da40a1b72f67ba63613a243119c41c7252839cf106e86b5d8e6e3", + "wy" : "5a1e0e2fc49b4f316f0c0e7236785749eb34ce923c23aef330af8733" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00042f2da40a1b72f67ba63613a243119c41c7252839cf106e86b5d8e6e35a1e0e2fc49b4f316f0c0e7236785749eb34ce923c23aef330af8733", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAELy2kChty9numNhOiQxGcQcclKDnPEG6G\ntdjm41oeDi/Em08xbwwOcjZ4V0nrNM6SPCOu8zCvhzM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 294, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00855f5b2dc8e46ec428a593f73219cf65dae793e8346e30cc3701309c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "047dc09710f4f586af05b08f0c9dcd48b1308733c97767fc286d1c72834353a704c7950b8f4a11394bc8db06adccf19d8ed95c7f214a173137", + "wx" : "7dc09710f4f586af05b08f0c9dcd48b1308733c97767fc286d1c7283", + "wy" : "4353a704c7950b8f4a11394bc8db06adccf19d8ed95c7f214a173137" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00047dc09710f4f586af05b08f0c9dcd48b1308733c97767fc286d1c72834353a704c7950b8f4a11394bc8db06adccf19d8ed95c7f214a173137", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEfcCXEPT1hq8FsI8Mnc1IsTCHM8l3Z/wo\nbRxyg0NTpwTHlQuPShE5S8jbBq3M8Z2O2Vx/IUoXMTc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 295, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c2db5f61aea817276af2064e104c7a30e32034cb526dd0aacfa56566f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04dbb439e2c3e9d1822b94ccc7d98c9fcb668e65dd6a759ad2dfdcd32882663234e6da512d7d7d5fe79156ad0e19ffc62d618e3cf48276106d", + "wx" : "00dbb439e2c3e9d1822b94ccc7d98c9fcb668e65dd6a759ad2dfdcd328", + "wy" : "0082663234e6da512d7d7d5fe79156ad0e19ffc62d618e3cf48276106d" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004dbb439e2c3e9d1822b94ccc7d98c9fcb668e65dd6a759ad2dfdcd32882663234e6da512d7d7d5fe79156ad0e19ffc62d618e3cf48276106d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE27Q54sPp0YIrlMzH2Yyfy2aOZd1qdZrS\n39zTKIJmMjTm2lEtfX1f55FWrQ4Z/8YtYY489IJ2EG0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 296, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0084a6c7513e5f48c07fffffffffff8713f3cba1293e4f3e95597fe6bd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04e012dc20cca5bd2adfaa27f57419596ce09ed0f18a9148e30a0f6ed255beca1b5e3e2485ef9537ae48a67b72dbcf6d7b33372023a5c443e8", + "wx" : "00e012dc20cca5bd2adfaa27f57419596ce09ed0f18a9148e30a0f6ed2", + "wy" : "55beca1b5e3e2485ef9537ae48a67b72dbcf6d7b33372023a5c443e8" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004e012dc20cca5bd2adfaa27f57419596ce09ed0f18a9148e30a0f6ed255beca1b5e3e2485ef9537ae48a67b72dbcf6d7b33372023a5c443e8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE4BLcIMylvSrfqif1dBlZbOCe0PGKkUjj\nCg9u0lW+yhtePiSF75U3rkime3Lbz217MzcgI6XEQ+g=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 297, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c6c7513e5f48c07ffffffffffffff9d21fd1b31544cb13ca86a75b25e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04c510ab34abd4855c54d62407abe6ca090c73ba49aca9de9bf117bca242b3b00c272c22681af7c255120fac148ad73c81b47846e4ad2f5627", + "wx" : "00c510ab34abd4855c54d62407abe6ca090c73ba49aca9de9bf117bca2", + "wy" : "42b3b00c272c22681af7c255120fac148ad73c81b47846e4ad2f5627" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c510ab34abd4855c54d62407abe6ca090c73ba49aca9de9bf117bca242b3b00c272c22681af7c255120fac148ad73c81b47846e4ad2f5627", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAExRCrNKvUhVxU1iQHq+bKCQxzukmsqd6b\n8Re8okKzsAwnLCJoGvfCVRIPrBSK1zyBtHhG5K0vVic=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 298, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d8ea27cbe9180fffffffffffffff3a43fa3662a899627950d4eb64bc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0408a6e167536a47aaa224fec21ce077642efdb97d93ae16b9672279f433fb9f1abb25f2c0c3e6008ac857ede4a89ca8d9d08b8996614969ac", + "wx" : "08a6e167536a47aaa224fec21ce077642efdb97d93ae16b9672279f4", + "wy" : "33fb9f1abb25f2c0c3e6008ac857ede4a89ca8d9d08b8996614969ac" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000408a6e167536a47aaa224fec21ce077642efdb97d93ae16b9672279f433fb9f1abb25f2c0c3e6008ac857ede4a89ca8d9d08b8996614969ac", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAECKbhZ1NqR6qiJP7CHOB3ZC79uX2Trha5\nZyJ59DP7nxq7JfLAw+YAishX7eSonKjZ0IuJlmFJaaw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 299, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3e5f48c07fffffffffffffffffffc724968c0ecf9ed783744a7337b3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "041a83e185fcf30e6c69cf292e497d63cc04e6fd07cb9365a74be3c39c6b2d56247df49cf94176c4e8efc84ec710cd0d614dd066c16f6ad3e0", + "wx" : "1a83e185fcf30e6c69cf292e497d63cc04e6fd07cb9365a74be3c39c", + "wy" : "6b2d56247df49cf94176c4e8efc84ec710cd0d614dd066c16f6ad3e0" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00041a83e185fcf30e6c69cf292e497d63cc04e6fd07cb9365a74be3c39c6b2d56247df49cf94176c4e8efc84ec710cd0d614dd066c16f6ad3e0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEGoPhhfzzDmxpzykuSX1jzATm/QfLk2Wn\nS+PDnGstViR99Jz5QXbE6O/ITscQzQ1hTdBmwW9q0+A=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 300, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00bfffffffffffffffffffffffffff3d87bb44c833bb384d0f224ccdde", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "042d59efd841a44b83fd42e6a2984a53fa93ad242c11678f92202cccfb95bcaf0b2f6eb0e6d4d83e3260e037d3dc0e48ab6c4141ce6b56cad0", + "wx" : "2d59efd841a44b83fd42e6a2984a53fa93ad242c11678f92202cccfb", + "wy" : "0095bcaf0b2f6eb0e6d4d83e3260e037d3dc0e48ab6c4141ce6b56cad0" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00042d59efd841a44b83fd42e6a2984a53fa93ad242c11678f92202cccfb95bcaf0b2f6eb0e6d4d83e3260e037d3dc0e48ab6c4141ce6b56cad0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAELVnv2EGkS4P9QuaimEpT+pOtJCwRZ4+S\nICzM+5W8rwsvbrDm1Ng+MmDgN9PcDkirbEFBzmtWytA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 301, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffff646c95d0a029629370d8e83d717f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "041161c7add6f67f995b93e19eb18bd5e73fd71d6bb10dceef0b792e9c08c44cef9826b4ed67508c09d07ec857a0ea49ed1a7f1fa2c74cb838", + "wx" : "1161c7add6f67f995b93e19eb18bd5e73fd71d6bb10dceef0b792e9c", + "wy" : "08c44cef9826b4ed67508c09d07ec857a0ea49ed1a7f1fa2c74cb838" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00041161c7add6f67f995b93e19eb18bd5e73fd71d6bb10dceef0b792e9c08c44cef9826b4ed67508c09d07ec857a0ea49ed1a7f1fa2c74cb838", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEEWHHrdb2f5lbk+GesYvV5z/XHWuxDc7v\nC3kunAjETO+YJrTtZ1CMCdB+yFeg6kntGn8fosdMuDg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 302, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e1520", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0484dc3d2ebfcf3480713baeff30ad0781bc8c4d06ab6ddd4f7f1045af7570537c5d71a78b1a041aca0fe35f642824abda8c3ff2e9fcf5c8cb", + "wx" : "0084dc3d2ebfcf3480713baeff30ad0781bc8c4d06ab6ddd4f7f1045af", + "wy" : "7570537c5d71a78b1a041aca0fe35f642824abda8c3ff2e9fcf5c8cb" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000484dc3d2ebfcf3480713baeff30ad0781bc8c4d06ab6ddd4f7f1045af7570537c5d71a78b1a041aca0fe35f642824abda8c3ff2e9fcf5c8cb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEhNw9Lr/PNIBxO67/MK0HgbyMTQarbd1P\nfxBFr3VwU3xdcaeLGgQayg/jX2QoJKvajD/y6fz1yMs=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 303, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0096dafb0d7540b93b5790327082635cd8895e1e799d5d19f92b594056", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "041767574e645c550ef3d353f76d4428f9616ac288b36378857de332629fe09825a57f3a0ec11189f4560272297ab6d5e095401febb60d0dc9", + "wx" : "1767574e645c550ef3d353f76d4428f9616ac288b36378857de33262", + "wy" : "009fe09825a57f3a0ec11189f4560272297ab6d5e095401febb60d0dc9" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00041767574e645c550ef3d353f76d4428f9616ac288b36378857de332629fe09825a57f3a0ec11189f4560272297ab6d5e095401febb60d0dc9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEF2dXTmRcVQ7z01P3bUQo+WFqwoizY3iF\nfeMyYp/gmCWlfzoOwRGJ9FYCcil6ttXglUAf67YNDck=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 304, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c1ef359e4bd146f63d8155c5c2523fa3353c9820f84f28150bad3819a", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "041767574e645c550ef3d353f76d4428f9616ac288b36378857de33262601f67da5a80c5f13eee760ba9fd8dd585492a1f6abfe01449f2f238", + "wx" : "1767574e645c550ef3d353f76d4428f9616ac288b36378857de33262", + "wy" : "601f67da5a80c5f13eee760ba9fd8dd585492a1f6abfe01449f2f238" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00041767574e645c550ef3d353f76d4428f9616ac288b36378857de33262601f67da5a80c5f13eee760ba9fd8dd585492a1f6abfe01449f2f238", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEF2dXTmRcVQ7z01P3bUQo+WFqwoizY3iF\nfeMyYmAfZ9pagMXxPu52C6n9jdWFSSofar/gFEny8jg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 305, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c1ef359e4bd146f63d8155c5c2523fa3353c9820f84f28150bad3819a", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04e2ef8c8ccb58eba287d9279b349e7652cca3e7cda188a5f179d77142f87594f3664c0faf7b59670e353a370d1d68ad89d6a1e246b4d03bee", + "wx" : "00e2ef8c8ccb58eba287d9279b349e7652cca3e7cda188a5f179d77142", + "wy" : "00f87594f3664c0faf7b59670e353a370d1d68ad89d6a1e246b4d03bee" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004e2ef8c8ccb58eba287d9279b349e7652cca3e7cda188a5f179d77142f87594f3664c0faf7b59670e353a370d1d68ad89d6a1e246b4d03bee", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE4u+MjMtY66KH2SebNJ52Usyj582hiKXx\neddxQvh1lPNmTA+ve1lnDjU6Nw0daK2J1qHiRrTQO+4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 306, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c33333333333333333333333333330486f9be9672d0c5d50ddf45a20c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b8bf3ef9646abfffb84220104ec996a92cef33f9328ec4cb1ea699484fea51a0de9e9d801babd42ca0924b36498bc5900fbeb9cbd5ad9c1a", + "wx" : "00b8bf3ef9646abfffb84220104ec996a92cef33f9328ec4cb1ea69948", + "wy" : "4fea51a0de9e9d801babd42ca0924b36498bc5900fbeb9cbd5ad9c1a" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b8bf3ef9646abfffb84220104ec996a92cef33f9328ec4cb1ea699484fea51a0de9e9d801babd42ca0924b36498bc5900fbeb9cbd5ad9c1a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEuL8++WRqv/+4QiAQTsmWqSzvM/kyjsTL\nHqaZSE/qUaDenp2AG6vULKCSSzZJi8WQD765y9WtnBo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 307, + "comment" : "extreme value for k and edgecase s", + "msg" : "313233343030", + "sig" : "303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04286e80429c8796dcd885d95f960d209fed19f87e2ce423d166c8e2202e30882c09970d5dd58b67e5bb80affec74248a9cb4a783384c8b6a0", + "wx" : "286e80429c8796dcd885d95f960d209fed19f87e2ce423d166c8e220", + "wy" : "2e30882c09970d5dd58b67e5bb80affec74248a9cb4a783384c8b6a0" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004286e80429c8796dcd885d95f960d209fed19f87e2ce423d166c8e2202e30882c09970d5dd58b67e5bb80affec74248a9cb4a783384c8b6a0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEKG6AQpyHltzYhdlflg0gn+0Z+H4s5CPR\nZsjiIC4wiCwJlw1d1Ytn5buAr/7HQkipy0p4M4TItqA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 308, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303d021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021d00db6db6db6db6db6db6db6db6db6ceed4c09e84c77ebd9116e17391eb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "045599a3faf96aba7302bd3d98cfde69525b7292762383f4a0b5c310393faa45feb6c35d2b7bf25ffc633c420ebfc4e715765302c5a11ac793", + "wx" : "5599a3faf96aba7302bd3d98cfde69525b7292762383f4a0b5c31039", + "wy" : "3faa45feb6c35d2b7bf25ffc633c420ebfc4e715765302c5a11ac793" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00045599a3faf96aba7302bd3d98cfde69525b7292762383f4a0b5c310393faa45feb6c35d2b7bf25ffc633c420ebfc4e715765302c5a11ac793", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEVZmj+vlqunMCvT2Yz95pUltyknYjg/Sg\ntcMQOT+qRf62w10re/Jf/GM8Qg6/xOcVdlMCxaEax5M=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 309, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c33333333333333333333333333330486f9be9672d0c5d50ddf45a20c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "045b5234b8db6bbd396eae7d1ca4e6d877824c98cde9fbfab34b6b8ccb1f38ae9f87adc3e6d2474eb5e3cd9aeff0927320214be550f5e62ed4", + "wx" : "5b5234b8db6bbd396eae7d1ca4e6d877824c98cde9fbfab34b6b8ccb", + "wy" : "1f38ae9f87adc3e6d2474eb5e3cd9aeff0927320214be550f5e62ed4" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00045b5234b8db6bbd396eae7d1ca4e6d877824c98cde9fbfab34b6b8ccb1f38ae9f87adc3e6d2474eb5e3cd9aeff0927320214be550f5e62ed4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEW1I0uNtrvTlurn0cpObYd4JMmM3p+/qz\nS2uMyx84rp+HrcPm0kdOtePNmu/wknMgIUvlUPXmLtQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 310, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303d021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021d00cccccccccccccccccccccccccccc121be6fa59cb431754377d168831", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04aced4ea8949e5ae37ef2f5eb5e00675d08e17c34be6677b0f269b6725e3ad0af49ebfff415ee4f2a838ead1f84cafaa652c17acc26130725", + "wx" : "00aced4ea8949e5ae37ef2f5eb5e00675d08e17c34be6677b0f269b672", + "wy" : "5e3ad0af49ebfff415ee4f2a838ead1f84cafaa652c17acc26130725" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004aced4ea8949e5ae37ef2f5eb5e00675d08e17c34be6677b0f269b6725e3ad0af49ebfff415ee4f2a838ead1f84cafaa652c17acc26130725", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAErO1OqJSeWuN+8vXrXgBnXQjhfDS+Znew\n8mm2cl460K9J6//0Fe5PKoOOrR+EyvqmUsF6zCYTByU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 311, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c249249249249249249249249249227ce201a6b76951f982e7ae89852", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "043e8c1bcc16195e8769e25d4c859807dffe178bed5bca9db06efa15324e3b53b3048b8ccd8cdc1265be240c8ee204060486a99ad31eaad3a4", + "wx" : "3e8c1bcc16195e8769e25d4c859807dffe178bed5bca9db06efa1532", + "wy" : "4e3b53b3048b8ccd8cdc1265be240c8ee204060486a99ad31eaad3a4" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00043e8c1bcc16195e8769e25d4c859807dffe178bed5bca9db06efa15324e3b53b3048b8ccd8cdc1265be240c8ee204060486a99ad31eaad3a4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEPowbzBYZXodp4l1MhZgH3/4Xi+1byp2w\nbvoVMk47U7MEi4zNjNwSZb4kDI7iBAYEhqma0x6q06Q=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 312, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c0eb10e5ab95facded4061029d63a46f46f12947411f2ea561a592057", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0424819323b7be8ab0910f7f33bd2f7669c44b13f09479965e95287d13b0592345beafbfdb8cf3629269bdd817728d5d5cd3c28bc6c6414a70", + "wx" : "24819323b7be8ab0910f7f33bd2f7669c44b13f09479965e95287d13", + "wy" : "00b0592345beafbfdb8cf3629269bdd817728d5d5cd3c28bc6c6414a70" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000424819323b7be8ab0910f7f33bd2f7669c44b13f09479965e95287d13b0592345beafbfdb8cf3629269bdd817728d5d5cd3c28bc6c6414a70", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEJIGTI7e+irCRD38zvS92acRLE/CUeZZe\nlSh9E7BZI0W+r7/bjPNikmm92BdyjV1c08KLxsZBSnA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 313, + "comment" : "extreme value for k and edgecase s", + "msg" : "313233343030", + "sig" : "303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0444cf57bac30a83da39f90bf3faacd52211a70fb92547db7778ea6c812b3fd1bf14688d2770c50cd5a890a3807ba0e8612136a1b11e030f82", + "wx" : "44cf57bac30a83da39f90bf3faacd52211a70fb92547db7778ea6c81", + "wy" : "2b3fd1bf14688d2770c50cd5a890a3807ba0e8612136a1b11e030f82" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000444cf57bac30a83da39f90bf3faacd52211a70fb92547db7778ea6c812b3fd1bf14688d2770c50cd5a890a3807ba0e8612136a1b11e030f82", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAERM9XusMKg9o5+Qvz+qzVIhGnD7klR9t3\neOpsgSs/0b8UaI0ncMUM1aiQo4B7oOhhITahsR4DD4I=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 314, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303e021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021d00db6db6db6db6db6db6db6db6db6ceed4c09e84c77ebd9116e17391eb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04dc17f1001d326127f7375cffa70b7530bca4da1040dc43d0044aaca07a146f04c5294cfe7e1ed587da55bae70b7fa8e32f6aa800314d01dd", + "wx" : "00dc17f1001d326127f7375cffa70b7530bca4da1040dc43d0044aaca0", + "wy" : "7a146f04c5294cfe7e1ed587da55bae70b7fa8e32f6aa800314d01dd" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004dc17f1001d326127f7375cffa70b7530bca4da1040dc43d0044aaca07a146f04c5294cfe7e1ed587da55bae70b7fa8e32f6aa800314d01dd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE3BfxAB0yYSf3N1z/pwt1MLyk2hBA3EPQ\nBEqsoHoUbwTFKUz+fh7Vh9pVuucLf6jjL2qoADFNAd0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 315, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c33333333333333333333333333330486f9be9672d0c5d50ddf45a20c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0468e2d7088eac18ba775bf68c5c509e86afd6f93451b4e4ee1d73e277e24ff4e27ef6c519db676d822c5db040482888013c8f3881bc9ac65a", + "wx" : "68e2d7088eac18ba775bf68c5c509e86afd6f93451b4e4ee1d73e277", + "wy" : "00e24ff4e27ef6c519db676d822c5db040482888013c8f3881bc9ac65a" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000468e2d7088eac18ba775bf68c5c509e86afd6f93451b4e4ee1d73e277e24ff4e27ef6c519db676d822c5db040482888013c8f3881bc9ac65a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEaOLXCI6sGLp3W/aMXFCehq/W+TRRtOTu\nHXPid+JP9OJ+9sUZ22dtgixdsEBIKIgBPI84gbyaxlo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 316, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303e021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021d00cccccccccccccccccccccccccccc121be6fa59cb431754377d168831", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04cd4171adcb8be75e7734061a048b2bf228d167c2742d27f854392046865eb958ebd320ba87662ad3ac7af568c6be0f09be090bcfe083b3e5", + "wx" : "00cd4171adcb8be75e7734061a048b2bf228d167c2742d27f854392046", + "wy" : "00865eb958ebd320ba87662ad3ac7af568c6be0f09be090bcfe083b3e5" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004cd4171adcb8be75e7734061a048b2bf228d167c2742d27f854392046865eb958ebd320ba87662ad3ac7af568c6be0f09be090bcfe083b3e5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEzUFxrcuL5153NAYaBIsr8ijRZ8J0LSf4\nVDkgRoZeuVjr0yC6h2Yq06x69WjGvg8JvgkLz+CDs+U=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 317, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c249249249249249249249249249227ce201a6b76951f982e7ae89852", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04eefdf99ab69d1888772cabe21d406045e1beab82761a7040beeb7ed359718c889af80f22f320fbe662d5ea0f65dfb4a5589c294ce5b73359", + "wx" : "00eefdf99ab69d1888772cabe21d406045e1beab82761a7040beeb7ed3", + "wy" : "59718c889af80f22f320fbe662d5ea0f65dfb4a5589c294ce5b73359" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004eefdf99ab69d1888772cabe21d406045e1beab82761a7040beeb7ed359718c889af80f22f320fbe662d5ea0f65dfb4a5589c294ce5b73359", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE7v35mradGIh3LKviHUBgReG+q4J2GnBA\nvut+01lxjIia+A8i8yD75mLV6g9l37SlWJwpTOW3M1k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 318, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c0eb10e5ab95facded4061029d63a46f46f12947411f2ea561a592057", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34", + "wx" : "00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", + "wy" : "00bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtw4MvWu0v38yE5C5SgPB01bCESI0MoDW\nEVwdIb03Y4i19yP7TCLf5s1DdaBaB0dkRNWBmYUAfjQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 319, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303c021c753bb40078934081d7bd113ec49b19ef09d1ba33498690516d4d122c021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 320, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303d021d008ac44bff876cbf7e2842eec13b63fcb3d6e7360aca5698f3ef0f1811021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d2142c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd", + "wx" : "00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", + "wy" : "42c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d2142c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtw4MvWu0v38yE5C5SgPB01bCESI0MoDW\nEVwdIULInHdKCNwEs90gGTK8il6l+Libuyp+Znr/gc0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 321, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303c021c753bb40078934081d7bd113ec49b19ef09d1ba33498690516d4d122c021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 322, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303d021d008ac44bff876cbf7e2842eec13b63fcb3d6e7360aca5698f3ef0f1811021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "044c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176", + "wx" : "4c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466", + "wy" : "00ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00044c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAETCRmcGWKHUH113vOJGy+OGrCKEjiabnU\nzWfEZt3ZRxU9ObLUJTOkYN7yaIBAjK8t091I/oiM0XY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 323, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021c2770403d42b7b45e553308d1f6a480640b61cac0ae36665d6f14d34e021d0085506b0404265ededf9a89fc7c9c7a55c16c5b0d781f774de8f46fa1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 324, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021d00b68da722bbba7f6a58417bb5d0dd88f40316fc628b0edfcb0f02b062021c5c742e330b6febadf9a12d58ba2a7199629457ef2e9e4cecd2f09f50", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 325, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303c021c01ec1ff15c8a55d697a5424d674753f82f711593828368d2fbb41a17021c20d9089db7baf46b8135e17e01645e732d22d5adb20e3772da740eee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 326, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303c021c3e46e9ba4dc089ff30fa8c0209c31b11ff49dbeec090f9f53c000c75021c6f2e3b36369416602bca83206809ed898fcf158a56c25a5474143f68", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf8a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000", + "wx" : "00aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf", + "wy" : "008a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf8a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAErtb8rSQAxNlOVdu2sBLOPUwrRoQ/vpnU\nKJ5uz4okqJ5xND19FR0ljSy2kDScLVazZt0QpgAAAAA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 327, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021c77b38da37079d27b837613ac3e8248d66eabd5d637076c8e62c7991e021d00d40cd9f81efc52db4429c0c1af7c1d8a22b6c7babbe7fbd8b5b3f02f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 328, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021d008c03b32c166c0c8b99d7f876acd109447efb13f6b82945e78d51a269021c657568f1a0a8bd7df5ffa43097ebb2b64435c8e3335bcaafc63f9ed5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 329, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021d00d199a375253d30f1d2b4493542e9934f9f1f8b0680117679f5bc4ad2021c11419ddbf02c8ad5f518f8dac33f86a85e777af51a034132e2767a6d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f173d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff", + "wx" : "00bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f1", + "wy" : "73d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f173d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEvxns/kP/4on2mfR5MWFFuaf3Nwuezlqx\nISF08XPVKJSa6RQvgYut5xqWBAeWO+C2SCpqYP////8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 330, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021d008ff82699e2e82870be9cfdd8a408bb34f8f38a83a4ac8370f18f2bc8021c7e5008fab6a0d4159200077ef9918dad6592cd8359838852c636ac05", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 331, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021c3f3b60b529ae0f950c517264adf2e481616bc47416742d5103589660021d00f731ebe98e58384b3a64b4696d4cc9619828ad51d7c39980749709a6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 332, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021d00dc11ffdc6b78754a335f168c4033916a2158d125a3f4fed9dc736661021c6dd84364717d9f4b0790f2b282f9245ecb316874eac025600397f109", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0426e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0", + "wx" : "26e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000", + "wy" : "00eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000426e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEJuWr8TXLVOqqFraeSwspInU0Toignfbf\ngAAAAOq4kd5U4/Jv9Qq5ifMz2sVRWD1GiuYjxZZDSvA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 333, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303e021d00a59b25b786d55f26b04dfe90ee02a6bde64ed6e431dc9fbdc3ab360e021d00fc14b5ad20f39da9900e35437936c8626fccf6632e7a3d9e587e3311", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 334, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021c2eda1f96c1a6e3ad8a3321ce82cbb13a5b935b501abf6c06f7fd2b3f021d00e81050c3e5f53a3c7b9d0bdb9ed92a326dfeac44791ba1abe4d6e973", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 335, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021c60f5e093fda08fc14ac99d820a18ad1370c58150bea0aca24fc6db9d021d00c2220a0ebbf4896e68fdb5bd824f88291c1c862b916f9c4af87f8f5f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd", + "wx" : "00ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff", + "wy" : "41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE7GJ/NFVF0D+Mbb0I5XVScRZWf+N1+eyq\n/////0G/cFaX1fcWvPeHGNU5O2OphpH0ofJCRjdVOP0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 336, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021c2ead37846a5e36a490b75140bdc7b636c6e9f6d8f980f6fadb08f769021d00e1fe130ae1798c196d7be62c7a5ddb3168cf4b8d48b6b6b4dc94ab3b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 337, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021d00a8a4c9416d72c860573d073281cb08c86ad65313f06b15a329e82eb2021c5a6edd2f0816b7263d915d72c67d50a854e3abee5cde1b679a0cef09", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 338, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303c021c576bb86c517bfecdc930a4c8501725548d425afbb96d93f5c1e2a0e1021c77248c5ecd620c431438c50e6bee6858091b54a87f8548ae35c21027", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5", + "wx" : "15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a", + "wy" : "762d28f1fdc219184f81681fbff566d465b5f1f31e872df5" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEFQFuUrNkctU2R3YF+4Bd05AwgqBi0eow\nr55VWgAAAAB2LSjx/cIZGE+BaB+/9WbUZbXx8x6HLfU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 339, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021c34e41cba628fd8787ba1a528f6015d2cae015c1c9a866e08a7133801021d0083d422ffdd99cc3c6d7096ef927f0b11988d1824e6e93840ff666ccd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 340, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303c021c2558a42e79689244bccd5e855f6a1e42b4ff726873f30b532b89ef53021c07f9bd947785187175d848b6e2d79f7ab3bbc1087b42590b0cfb256a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 341, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00d5fe7dd5fb4fd1ea5ce66c0824f53f96ce47fd9b6c63b4d57827fd17021d00bce5bc3af705afaacb81bfa6d552d6198962fece9fba41546c602ddc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c", + "wx" : "15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a", + "wy" : "00ffffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEFQFuUrNkctU2R3YF+4Bd05AwgqBi0eow\nr55VWv////+J0tcOAj3m57B+l99ACpkrmkoODOF40gw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 342, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021d008c1da2f07cdcbce4db8067b863468cfc728df52980229028689e57b6021c32175c1390a4b2cab6359bab9f854957d4fd7976c9c6d920c871c051", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 343, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303e021d00e46d4f11b86b5a12f6fe781d1f934ef2b30e78f6f9cc86a9996e20c0021d008351974b965526034a0ccef0e7d3bc13d91798151488c91533143f7b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 344, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303c021c305ccf0b5d0cf33dc745bb7c7964c233f6cfd8892a1c1ae9f50b2f3f021c785f6e85f5e652587c6e15d0c45c427278cf65bb1429a57d8826ca39", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1", + "wx" : "00f7e4713d085112112c37cdf4601ff688da796016b71a727a", + "wy" : "00de5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEAAAAAPfkcT0IURIRLDfN9GAf9ojaeWAW\ntxpyet5ansFlBUzJh/nch+mZG5Lk+mScplXurp8qMOE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 345, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021c0e4fde0ac8d37536505f7b8bdc2d22c5c334b064ac5ed27bea9c179e021d00c4d6bf829dd547000d6f70b9ad9e9c1503bebcf1d95c2608942ca19d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 346, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00818afcaf491da9d08a7cc29318d5e85dce568dcca7018059f44e9b7e021d00bf32a233d5fc6ed8e2d9270b1bdad4bbd2a0f2c293d289bd91ffbcf3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 347, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303c021c0e05ed675c673e5e70a4fdd5a47b114c5d542d4f6d7a367597d713ea021c26d70d65c48430373363987810bdcc556e02718eab214403ae008db4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e", + "wx" : "00ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f725", + "wy" : "0086c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE/////+rffO6NNNBM8iyPfeNWdPsvUB0k\nKnb3JYbECTCdOY5gzh4KTJ4FqdMmJ1d+jOLMfzr6LD4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 348, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303e021d00ab7a19eecf63e9668278963b65236b2768e57cae0e268cb86a0ddda1021d008829f5d3a3394f9467ba62e66ef1768e3e54f93ed23ec962bc443c2e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 349, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c17111a77cf79bead456ed86a7d8a935531440281eb8b15a885e341c0021d00fdc3958d04f037b1d4bb2cee307b5201be062e0d4e089df1c1917668", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 350, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021d00acafa1e33345eeba0c338c2204b4cd8ba21de7ec3e1213317038e968021c0b42fbbaeda98a35da0de4c79546f3a0f7d9dec275d2cd671f93c874", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc", + "wx" : "00b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1", + "wy" : "0e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEsAE8b7/28J/s2hwmPvZTmdTPmJyl/E+P\n/w/p4QAAAAAOKrDoSV6FnrKvsAdp1uf+YmoRkWfAtrw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 351, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021d00a3fe71a2a56f554e98fd10a8098c2a543c98bc6b3602ef39f2412308021c5d1d68f9a870ef2bc87484b3386549fae95811ab72bc0e3a514720da", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 352, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021c132f7625704756c13f2bfa449e60952f836f4904660b5b1da07e5a9f021d0082b4abafc40e8fd19b0c967f02fff152737ce01153658df445c4d7b7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 353, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00f36a8347c6fe0397a1161a364cbc4bdfb4d8b7894cbaa6edc55a4ff7021d009c9c90515da5e602d62e99f48eac414e913dd0b7cbf680c1a5399952", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945", + "wx" : "00b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1", + "wy" : "00fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEsAE8b7/28J/s2hwmPvZTmdTPmJyl/E+P\n/w/p4f/////x1U8XtqF6YU1QT/eWKRgBnZXubpg/SUU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-224", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 354, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c2125ecc08e52e9e39e590117de2145bd879626cb87180e52e9d3ce03021d008f7e838d0e8fb80005fe3c72fca1b7cc08ed321a34487896b0c90b04", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 355, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303e021d00e485747ac2f3d045e010cdadab4fd5dbd5556c0008445fb73e07cd90021d00e2133a7906aeac504852e09e6d057f29ab21368cfc4e2394be565e68", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 356, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021d00a4de0d931ddab90e667ebc0ad800ce49e971c60543abdc46cefff926021c550816170bd87593b9fb8ad5ed9ab4ddb12403ff6fe032252833bac4", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/tests/ecdsa_secp224r1_sha256_test.json b/tests/ecdsa_secp224r1_sha256_test.json new file mode 100644 index 00000000..a8037fa7 --- /dev/null +++ b/tests/ecdsa_secp224r1_sha256_test.json @@ -0,0 +1,4447 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.8r12", + "numberOfTests" : 385, + "header" : [ + "Test vectors of type EcdsaVerify are meant for the verification", + "of ASN encoded ECDSA signatures." + ], + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "schema" : "ecdsa_verify_schema.json", + "testGroups" : [ + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5", + "wx" : "00eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7", + "wy" : "00eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE6tqTvhCyRJ4ei7WDBdUgCAE8VxB8GiCj\nF6bLp+ymcjQMA9HS4JZjKGaR31UGn6JUkMndn5wLsrU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d009e82950ebe102f37ff3645cc7d3c1bab8864e5e03a5011eeba8150bc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "long form encoding of length of sequence", + "msg" : "313233343030", + "sig" : "30813c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 4, + "comment" : "length of sequence contains leading 0", + "msg" : "313233343030", + "sig" : "3082003c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 5, + "comment" : "wrong length of sequence", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "wrong length of sequence", + "msg" : "313233343030", + "sig" : "303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "uint32 overflow in length of sequence", + "msg" : "313233343030", + "sig" : "3085010000003c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "uint64 overflow in length of sequence", + "msg" : "313233343030", + "sig" : "308901000000000000003c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "length of sequence = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "length of sequence = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "length of sequence = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length of sequence = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "incorrect length of sequence", + "msg" : "313233343030", + "sig" : "30ff021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "303c02803ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040280617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "lonely sequence tag", + "msg" : "313233343030", + "sig" : "30", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "303e0000021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "appending unused 0's to sequence", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "appending null value to sequence", + "msg" : "313233343030", + "sig" : "303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3041498177303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30402500303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "303e303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30412221498177021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304022202500021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3044221e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040004deadbeef021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3041021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042221498177021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0422202500021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3044021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04221e021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3044aa00bb00cd00303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3042aa02aabb303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30442224aa00bb00cd00021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30422222aa02aabb021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3044021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042224aa00bb00cd00021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3042021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042222aa02aabb021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "truncated length of sequence", + "msg" : "313233343030", + "sig" : "3081", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3080303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30402280021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042280021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3080313c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30402280031c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042280031c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "2e3c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "2f3c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "313c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "323c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "ff3c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "using composition for sequence", + "msg" : "313233343030", + "sig" : "3040300102303b1c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "303b1c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 56, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad98100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad98105000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "3080021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "303e3000021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9813000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "append garbage with high tag number", + "msg" : "313233343030", + "sig" : "303f021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981bf7f00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "303e303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "truncated sequence: removed last 1 elements", + "msg" : "313233343030", + "sig" : "301e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "repeating element in sequence", + "msg" : "313233343030", + "sig" : "305a021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "long form encoding of length of integer", + "msg" : "313233343030", + "sig" : "303d02811c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 68, + "comment" : "long form encoding of length of integer", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402811c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 69, + "comment" : "length of integer contains leading 0", + "msg" : "313233343030", + "sig" : "303e0282001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 70, + "comment" : "length of integer contains leading 0", + "msg" : "313233343030", + "sig" : "303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040282001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 71, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "303c021d3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "303c021b3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021b617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "uint32 overflow in length of integer", + "msg" : "313233343030", + "sig" : "30410285010000001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "uint32 overflow in length of integer", + "msg" : "313233343030", + "sig" : "3041021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040285010000001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "uint64 overflow in length of integer", + "msg" : "313233343030", + "sig" : "3045028901000000000000001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "uint64 overflow in length of integer", + "msg" : "313233343030", + "sig" : "3045021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04028901000000000000001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "length of integer = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304002847fffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "length of integer = 2**31 - 1", + "msg" : "313233343030", + "sig" : "3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402847fffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "length of integer = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30400284ffffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "length of integer = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040284ffffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "length of integer = 2**40 - 1", + "msg" : "313233343030", + "sig" : "30410285ffffffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "length of integer = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3041021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040285ffffffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "length of integer = 2**64 - 1", + "msg" : "313233343030", + "sig" : "30440288ffffffffffffffff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "length of integer = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3044021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040288ffffffffffffffff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "incorrect length of integer", + "msg" : "313233343030", + "sig" : "303c02ff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "incorrect length of integer", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402ff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "301e021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "lonely integer tag", + "msg" : "313233343030", + "sig" : "301f02021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "lonely integer tag", + "msg" : "313233343030", + "sig" : "301f021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a0402", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "303e021e3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021e617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "303e021e00003ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 95, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021e0000617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 96, + "comment" : "appending unused 0's to integer", + "msg" : "313233343030", + "sig" : "303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040000021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "appending null value to integer", + "msg" : "313233343030", + "sig" : "303e021e3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040500021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "appending null value to integer", + "msg" : "313233343030", + "sig" : "303e021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021e617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9810500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "truncated length of integer", + "msg" : "313233343030", + "sig" : "30200281021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "truncated length of integer", + "msg" : "313233343030", + "sig" : "3020021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040281", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "30200500021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3020021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303c001c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303c011c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303c031c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303c041c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303cff1c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04001c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04011c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04031c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04041c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04ff1c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "30200200021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3020021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a040200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "using composition for integer", + "msg" : "313233343030", + "sig" : "3040222002013a021bde5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "using composition for integer", + "msg" : "313233343030", + "sig" : "3040021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a042220020161021b7d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "303c021c38de5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c637d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a84021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad901", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "303b021b3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "303b021bde5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021b617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad9", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "303b021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021b7d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "303d021dff3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021dff617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "replaced integer by infinity", + "msg" : "313233343030", + "sig" : "3021090180021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "replaced integer by infinity", + "msg" : "313233343030", + "sig" : "3021021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "replacing integer with zero", + "msg" : "313233343030", + "sig" : "3021020100021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "replacing integer with zero", + "msg" : "313233343030", + "sig" : "3021021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04020100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021d013ade5c0624a5677ed7b6450d941fd283098d8a004fc718e2e7e6b441021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021dff3ade5c0624a5677ed7b6450d9421a53d481ba984280cc6582f2e5fc7021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303c021cc521a3f9db5a98812849baf26bdf441fd72b663dc4161062747575fc021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021d00c521a3f9db5a98812849baf26bde5ac2b7e4567bd7f339a7d0d1a039021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021dfec521a3f9db5a98812849baf26be02d7cf67275ffb038e71d18194bbf021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021d013ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021d00c521a3f9db5a98812849baf26bdf441fd72b663dc4161062747575fc021c617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d01617d6af141efd0c800c9ba3382c2119a390cfa9bed6a409bfe3703be", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021dff617d6af141efd0c800c9ba3382c3e454779b1a1fc5afee11457eaf44", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303c021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021c9e82950ebe102f37ff3645cc7d3d0508a7abf5a22672e8a95e25267f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021dfe9e82950ebe102f37ff3645cc7d3dee65c6f305641295bf6401c8fc42", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d01617d6af141efd0c800c9ba3382c2faf758540a5dd98d1756a1dad981", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c3ade5c0624a5677ed7b6450d9420bbe028d499c23be9ef9d8b8a8a04021d009e82950ebe102f37ff3645cc7d3d0508a7abf5a22672e8a95e25267f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffffffff000000000000000000000001090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 214, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 215, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 216, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000020201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 217, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 218, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 219, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 220, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 221, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 222, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffffffff000000000000000000000002090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 223, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 224, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30060201010c0130", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 225, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30050201010c00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 226, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30090c0225730c03732573", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 227, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30080201013003020100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 228, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "3003020101", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 229, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "3006020101010100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 230, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3839313737", + "sig" : "303d021c326bc06353f7f9c9f77b8f4b55464e8619944e7879402cca572e041a021d0096ad91f02a3bc40c118abd416ed5c6203ed7ced0330860d7b88c10ab", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "special case hash", + "msg" : "343236343739373234", + "sig" : "303d021d00bcca2365cebdcf7c6cda1ee7b27c7fe79e371537b01869c715eabb1e021c3ae76f9bbfe519d778816dc8fe10635ee7576b6b7916f0c21df320c0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 232, + "comment" : "special case hash", + "msg" : "37313338363834383931", + "sig" : "303c021c59a9f83289ef6995d5d5592e80ab4f6a81123f69d385d3cfb152faf2021c3a97d5be190d5819241067e2be56375ab84155baab8fc7aeb7f8cb3d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 233, + "comment" : "special case hash", + "msg" : "3130333539333331363638", + "sig" : "303e021d00b54bac9be2beaaa09456a3968a1faf27c9d96bd5f6738fec6066d31e021d00d72c22129344a96d52fda60b264cf5e6fae45fd2c1b1b78bcba30070", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 234, + "comment" : "special case hash", + "msg" : "33393439343031323135", + "sig" : "303d021c323dbdecd40910c6fa7a5691846fa7769113d1f2ba64ef0dc97d2ddb021d00ca9e73a4587af042f8ba924bb61829c5e24046f9803eb76ab80ef327", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 235, + "comment" : "special case hash", + "msg" : "31333434323933303739", + "sig" : "303d021d00a55dccc27d287f15960ed79908a3edb6bb31aff07c8caa0e65fc0785021c559cb51aa5f2b9066610199dd01291a47729a6189a622ae9e7af7621", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 236, + "comment" : "special case hash", + "msg" : "33373036323131373132", + "sig" : "303d021c137ed6105148d6f5b84e87735d57955f81c5914a6e69f55347ade074021d00dfa5d56b1a12567efacb348a133b79d48da7aac78d78ee589c2ec027", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 237, + "comment" : "special case hash", + "msg" : "333433363838373132", + "sig" : "303e021d00856ff63d779163e78fed8c48330b48f08bf953a95266b3857eee91aa021d00f4aa917cd37f556c6df9d0960c2f7daa7ea118e5c30cc40ca1eed418", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 238, + "comment" : "special case hash", + "msg" : "31333531353330333730", + "sig" : "303d021d00a9d7716f04c5ce247f6b8c608b37db55f68e2ff94a5883863e867708021c61bc093faa6fb25cd240aea4b56fed728f7b3669b4dc84c449d38c5d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 239, + "comment" : "special case hash", + "msg" : "36353533323033313236", + "sig" : "303d021d00f6d088fd3b9c981ac491c62030643bbd82d4f4588e8517de5884e73d021c773eee477980763b1ea27ae998bda0244cb67b07aa6779a38cd2ba3f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 240, + "comment" : "special case hash", + "msg" : "31353634333436363033", + "sig" : "303e021d00eacb55588e446bbf3687089ba8ba3b05cfef7458bb81b4277f90a853021d008039e8944cc3df7f4ce5badc349975d471a81dea14e9bcae3065d410", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 241, + "comment" : "special case hash", + "msg" : "34343239353339313137", + "sig" : "303c021c5984af8c89fb9d596a1f28fd3d41e46f7205fe12fa63437ac79e7e81021c33b16b742d45f18f88de2713078384e6150f06b8b99f36ab2ce3dd49", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 242, + "comment" : "special case hash", + "msg" : "3130393533323631333531", + "sig" : "303d021c3cda62d84711c262f782d5c3a79b567485227b34afb821f5241b1961021d00b615cef399706ff758f072931852b717ec898e9a1e6339d0ee81b8da", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 243, + "comment" : "special case hash", + "msg" : "35393837333530303431", + "sig" : "303d021d00e1db7304609191ea1ac91183ffb31df51b5b3fdc6b1a1129d85818d6021c441886d003ae80fbe7139e1d02845cd1bd959f0df1468f5836dd6ea5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 244, + "comment" : "special case hash", + "msg" : "33343633303036383738", + "sig" : "303d021c3545dc4a4ef84bbb3a526ff929c91ad234516a9e95455ac8db4012b1021d00af49926f693a7cf11f71e199f382a8d640c0c85e46d94ee26e384344", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 245, + "comment" : "special case hash", + "msg" : "39383137333230323837", + "sig" : "303d021c0ccafdeae4582c9de6795b2d09a7fc3848c75904fa960989156cbbb9021d00af1f994da3e7d89cc8aaa44616cb77e3be7a83ccecc965775194e502", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 246, + "comment" : "special case hash", + "msg" : "33323232303431303436", + "sig" : "303e021d00a3b2145d8c669027532501eea1913abb22a78a827fdd82fe9d6d3757021d009b2f1ae84f5606d68653065f74e9d089886694c739fbe3fd4a1b2b4a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 247, + "comment" : "special case hash", + "msg" : "36363636333037313034", + "sig" : "303e021d009aac3a7e3d142344991bf177b4f4dbfa074148ad9e20f27555b547d9021d00f830a3c7fdf251d79d41977d28e6d9a72a36df11b86e17c8dc3acae0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 248, + "comment" : "special case hash", + "msg" : "31303335393531383938", + "sig" : "303c021c4769fba554fd436051c285bdadfa33a443d4f7084dd598ce3b98b8fb021c0c014c87cb14113d75864f74905f75b34f9970ba58b5d0676021826d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 249, + "comment" : "special case hash", + "msg" : "31383436353937313935", + "sig" : "303d021d008b91fc5054a75c34a508624b85708b3d25fa74328c68741c3aeb92d9021c155e3e46b1209583135a9fef15abe325b25bd19285ee6b5b4549629f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 250, + "comment" : "special case hash", + "msg" : "33313336303436313839", + "sig" : "303d021d00a4a2a85fbb8bb26c4d845cfac191f89d65b00d3f1b9450d177f78890021c6605a460e60402685c7a5accd2615e9232e51937bd83dfa3065eabf7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 251, + "comment" : "special case hash", + "msg" : "32363633373834323534", + "sig" : "303d021d00a89d333ae34187855cf7fa435ff39be6b7bb39b2d0ce682133ad9646021c483dcc89a3b43be250f5c3f78f78418e7b8341a8bcfb93dfd58e46d8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 252, + "comment" : "special case hash", + "msg" : "31363532313030353234", + "sig" : "303d021c2d0f99c71933c82ded544ef4faac9d669e437dea13b57186f4c20a0e021d00d9682b9f3a05d7832947bc45eadbc742d96e7ab1124832ddb7a8c65b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 253, + "comment" : "special case hash", + "msg" : "35373438303831363936", + "sig" : "303d021d00840208f7c41b1fbadcc701fb3a1d0f98a3e2a75235e695bfd378f8b4021c44c8daad4efc03e1753803c362b409c3ca6e0f21e538fe3a364c0e53", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 254, + "comment" : "special case hash", + "msg" : "36333433393133343638", + "sig" : "303e021d0087cc582cb10602110566fcb10a233aede993fae5fb3f81b0bbff94ca021d00c971c05bd51d9685825b2cfc0a2596c7f80d9f9dc68c28c159aa395a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 255, + "comment" : "special case hash", + "msg" : "31353431313033353938", + "sig" : "303d021c50d73d949b3adcd3e8fa94dafefaf9d263ebc702128d891afac47ea7021d00f8423c378f0190574925142eb5b97c612abfa048fa3ab5375ec795a1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 256, + "comment" : "special case hash", + "msg" : "3130343738353830313238", + "sig" : "303e021d00d608915dfcd5d3c63ed10d0d9b614f7a866f8858a6e59dc03eb0a8ee021d008e701aa0bab491430f6e4da92244b0bb174957ee6f495bc5d15fabb1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 257, + "comment" : "special case hash", + "msg" : "3130353336323835353638", + "sig" : "303e021d00c87b0ab842c4769ed94b910bd7719691f9991bc5a347889608f07034021d00d083111048d6e019771fc2669c55156a3d09615a6b2d9cae52ddabee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 258, + "comment" : "special case hash", + "msg" : "393533393034313035", + "sig" : "303c021c0a1c2c2478e244464226c660edf724db1213f4923eb725d611d976fd021c764e55186a76f734891d05fb57af2727fab8fbea684ca4321d5de540", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 259, + "comment" : "special case hash", + "msg" : "393738383438303339", + "sig" : "303e021d008a2747c5dd9ef5298b8aeabd2fb3a2beb16158fb2cc62be9e51b2152021d00f96251bc048bcad832e6cbc09c9c2e585ab7543dc552eaa5125be0d3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 260, + "comment" : "special case hash", + "msg" : "33363130363732343432", + "sig" : "303e021d00d9eac32a734f3a3e5b5a2905bed8164ef4c6cd24d5c0fc54cc83f3cc021d00a784930d16c3b753bb3ed9151d583c50ff97bc976274bde482fb9644", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 261, + "comment" : "special case hash", + "msg" : "31303534323430373035", + "sig" : "303d021c6c40c6b15ae573f77b677cd878cc5e4da8171cf50d79974fde374e00021d00c88c9828037bf7013a1415537ca074d6c8a553bdb4b26b14a7e88d93", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 262, + "comment" : "special case hash", + "msg" : "35313734343438313937", + "sig" : "303d021d00dca0aaa0a395393142b323edced09372760350f2ab261ce3339b114d021c0983bf6e510ce7f0a7520f2b7c60cd68a4912b78162c7ac33789e0c6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 263, + "comment" : "special case hash", + "msg" : "31393637353631323531", + "sig" : "303d021d00a0526ed47e2607e6bae6dcf3b8f54f4e0638023673a38cad4569c3ba021c61516f55746b379d11cbaa02cef35311d7771a47d1e127cff46dcfd6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 264, + "comment" : "special case hash", + "msg" : "33343437323533333433", + "sig" : "303d021c5c00db60178c8361092bdfb47fc9a47b33363d7e0d76e32520f79657021d00e1baf7ae7d81045793c73173f49d60bdfc8779942795d9d082b3ca11", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 265, + "comment" : "special case hash", + "msg" : "333638323634333138", + "sig" : "303d021c46f69b6a99717949eee74092a0c1438a290a2cd82fe1e10d8f37e88b021d0099a5f59f09bd980a066233523397846987a8a1bfdde355062d140a4b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 266, + "comment" : "special case hash", + "msg" : "33323631313938363038", + "sig" : "303e021d00e643d8085a22706fa0e6540f3d5e169ad8cc49b4bfe98e325321c705021d00f95bd423f9cafe0cedfec6fd97871536d71b2ac58dfb2f7ab8952d4b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 267, + "comment" : "special case hash", + "msg" : "39363738373831303934", + "sig" : "303e021d00e65fb9bcdd791f141ccff2b3cfbf45d84f8c6272021a68dde8c36bc8021d00df6e08c74b5e36b7772658f02515ae0ea813b64df24f3522ea15fb15", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 268, + "comment" : "special case hash", + "msg" : "34393538383233383233", + "sig" : "303e021d00a476d468221ef55611e8a724c9b4cd79c34f6940d5f665e3335f6231021d00bfddc18e7a008bc206c8e1ca6c878363e4138508e0c3a84a27eabe35", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "special case hash", + "msg" : "383234363337383337", + "sig" : "303c021c1b393477941879271873a8c043a77caadb9957fcdd263a6ac978e4ba021c270060d5f356ebb6d185772baa78b878af6807378e0d5c532da0a4a7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "special case hash", + "msg" : "3131303230383333373736", + "sig" : "303e021d00b2eda8c969d4b1bdd31867fd1f92d547b406840c257f2f80dfbdc4e3021d00e6297b059ce64ef04de9715a8f686a9f73980865066a94975b7f8117", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "special case hash", + "msg" : "313333383731363438", + "sig" : "303d021d00938189a18a4bff5712ac99c2b8e92c218af3e4d4e3a84b906b0f704e021c7bb3e538f0b70664dad462ab14b0ed416c86ac6e9060fe760dabb715", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "special case hash", + "msg" : "333232313434313632", + "sig" : "303e021d00bb7c1d8120d2aa7765b16eeac44282de605fb2a1665657dea4492935021d00e0a8adb3a143883f981ea1323fa6f1d347845be2b8dcc6cd5cc93ee5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "special case hash", + "msg" : "3130363836363535353436", + "sig" : "303c021c74a4c51dd60c7118467be29652060f39af94f8c0eb7f15c64771010c021c6102ec0c9257e607af3f3ff7490b54e78111f422bec11ba01277171f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "special case hash", + "msg" : "3632313535323436", + "sig" : "303d021c625da18d676f02fae9dbcb3092265909488fb95d662569d7746b9687021d00c4f1ec831e36604d604b630fd0b1999cd09960862294251d85e5873d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "special case hash", + "msg" : "37303330383138373734", + "sig" : "303d021d008ee0d4a31fd1c4d854d75c14151926899dde1c7332fd4769443d213d021c4b8278b89ba4f8fbd7dcc6affe4c12156f7409909416989685dd5a39", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "special case hash", + "msg" : "35393234353233373434", + "sig" : "303e021d00bdde45fc9ebb3749c9fb2c25bf02e2a217ccc112f8e65499eeffb6a1021d00becd6b88ef2bee872ebc0e2b805a56066e19179fce9f0dc0df3f6378", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "special case hash", + "msg" : "31343935353836363231", + "sig" : "303d021c50186e023a1f5053fcb4d0473039b1b2cdeba569719a4ebabdd675c8021d00f8fb893c1b6b5b827b5f3f4bb5eab75b6212bb56a5a39bb35c127a1c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "special case hash", + "msg" : "34303035333134343036", + "sig" : "303e021d00d3b454639b0fb3da93b20d55be8609e40902cb4a608f3b9064c0deb7021d00ec7aa9637fd71b543e5243faab4c7a2edc2c48e982c5ac017807f19a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "special case hash", + "msg" : "33303936343537353132", + "sig" : "303d021d00c202abbd98e03809de842bdef268a1c616a7306da69a87abaf03169c021c7e7e04823af8ed6836fd2ac011e47de8e1bef91ed1da5144893fc259", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "special case hash", + "msg" : "32373834303235363230", + "sig" : "303d021c2e4b76638816cce057a4a27a49258dcb5437ae97739f27ebc0973c0b021d00e9f6c0b64e764ad39dd92b576e11c23e5994b02095cb2a4720c8662c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "special case hash", + "msg" : "32363138373837343138", + "sig" : "303c021c7e0f48761089aa4c7ecd5a7ac5380836b1e5d381d3400174d15df98b021c0c3df50060e3a6714aa565a33d784e7b16ac87bebfb3c2255cfd832c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "special case hash", + "msg" : "31363432363235323632", + "sig" : "303c021c4d6f7408508eb0814dcd48007f0efd9e2b91cdac4030540cc678de19021c1e74f8dc34d13613ef42462fe88981cbe2489be10e4cdae975a1b38e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "special case hash", + "msg" : "36383234313839343336", + "sig" : "303d021d00967f2c5d304c7932eaaa1682197945e66cc912b703824776ef16ad7a021c73957001d9037c63d6471c809a2388383ad695137c622cd5f5584414", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "special case hash", + "msg" : "343834323435343235", + "sig" : "303d021c49260804bb2ceae4b9cee63b02ea60173ec3f4f90167627c0bb39888021d00c9eb022f96db3e90fe0ff617730a629f342e02fb208d6836cbbdc7d3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "Signature generated without truncating the hash", + "msg" : "313233343030", + "sig" : "303d021d00f3e712597a4b22632c5f8eb9f2845882bb03a139735f80af8826fc56021c62865bd91c0903511a481d607eb6b5fe28f6f6c89295681a3e8d55d8", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0493b4c28f032d00f80e77491edc158359909ee9e30a7327b74219e5e2482c19ae35cb28afc9b95ca1ed7ad91c812d5fcceb4beddbf1a16d92", + "wx" : "0093b4c28f032d00f80e77491edc158359909ee9e30a7327b74219e5e2", + "wy" : "482c19ae35cb28afc9b95ca1ed7ad91c812d5fcceb4beddbf1a16d92" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000493b4c28f032d00f80e77491edc158359909ee9e30a7327b74219e5e2482c19ae35cb28afc9b95ca1ed7ad91c812d5fcceb4beddbf1a16d92", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEk7TCjwMtAPgOd0ke3BWDWZCe6eMKcye3\nQhnl4kgsGa41yyivyblcoe162RyBLV/M60vt2/GhbZI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 286, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "3030020f00e95c1f470fc1ec22d6baa3a3d5c1021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "303e021d00fffffffffffffffffffffffffffffffefffffffffffffffffffffffe021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04da927f4ba88b639bf5334221d2f54d8ef9ccc1a1125fad18c7bfb789ac51ae53de6d834a9db3947b8dd4c6ac2b084b85496bfa72d86b6948", + "wx" : "00da927f4ba88b639bf5334221d2f54d8ef9ccc1a1125fad18c7bfb789", + "wy" : "00ac51ae53de6d834a9db3947b8dd4c6ac2b084b85496bfa72d86b6948" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004da927f4ba88b639bf5334221d2f54d8ef9ccc1a1125fad18c7bfb789ac51ae53de6d834a9db3947b8dd4c6ac2b084b85496bfa72d86b6948", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE2pJ/S6iLY5v1M0Ih0vVNjvnMwaESX60Y\nx7+3iaxRrlPebYNKnbOUe43UxqwrCEuFSWv6cthraUg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 288, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0420888e1c0f5694c4c0363b36482beb6e1e6649b3d3b26f127febb6fcde00c2f3d8e4a7e8a0bafd417c96d3e81c975946a2f3686aa39d35f1", + "wx" : "20888e1c0f5694c4c0363b36482beb6e1e6649b3d3b26f127febb6fc", + "wy" : "00de00c2f3d8e4a7e8a0bafd417c96d3e81c975946a2f3686aa39d35f1" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000420888e1c0f5694c4c0363b36482beb6e1e6649b3d3b26f127febb6fcde00c2f3d8e4a7e8a0bafd417c96d3e81c975946a2f3686aa39d35f1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEIIiOHA9WlMTANjs2SCvrbh5mSbPTsm8S\nf+u2/N4AwvPY5KfooLr9QXyW0+gcl1lGovNoaqOdNfE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 289, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021c3d5052691b8dc89debad360466f2a39e82e8ae2aefb77c3c92ad7cd1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "049545c86f032c5df255a4490bb0b83eca201181792ad74246874db229405264c283063327b70f4c2be5ab4d2e9407b866e121d6145d124c04", + "wx" : "009545c86f032c5df255a4490bb0b83eca201181792ad74246874db229", + "wy" : "405264c283063327b70f4c2be5ab4d2e9407b866e121d6145d124c04" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00049545c86f032c5df255a4490bb0b83eca201181792ad74246874db229405264c283063327b70f4c2be5ab4d2e9407b866e121d6145d124c04", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAElUXIbwMsXfJVpEkLsLg+yiARgXkq10JG\nh02yKUBSZMKDBjMntw9MK+WrTS6UB7hm4SHWFF0STAQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 290, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "303d021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021d00bf19ab4d3ebf5a1a49d765909308daa88c2b7be3969db552ea30562b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04579d53f39d5109bd440e3e3e7efd603740963348ff9c72c03b0fe6b8df02f133ecd60b072a0812adc752708f2be9d8c9ad5953d8c7bf3965", + "wx" : "579d53f39d5109bd440e3e3e7efd603740963348ff9c72c03b0fe6b8", + "wy" : "00df02f133ecd60b072a0812adc752708f2be9d8c9ad5953d8c7bf3965" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004579d53f39d5109bd440e3e3e7efd603740963348ff9c72c03b0fe6b8df02f133ecd60b072a0812adc752708f2be9d8c9ad5953d8c7bf3965", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEV51T851RCb1EDj4+fv1gN0CWM0j/nHLA\nOw/muN8C8TPs1gsHKggSrcdScI8r6djJrVlT2Me/OWU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 291, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04d2a14c8106d89f3536faebdafcd4680f65ab4bf2243164ca1464b628acaf2bee52e6231d3c980f52f8e189a41c3e3a05e591195ec864217a", + "wx" : "00d2a14c8106d89f3536faebdafcd4680f65ab4bf2243164ca1464b628", + "wy" : "00acaf2bee52e6231d3c980f52f8e189a41c3e3a05e591195ec864217a" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d2a14c8106d89f3536faebdafcd4680f65ab4bf2243164ca1464b628acaf2bee52e6231d3c980f52f8e189a41c3e3a05e591195ec864217a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE0qFMgQbYnzU2+uva/NRoD2WrS/IkMWTK\nFGS2KKyvK+5S5iMdPJgPUvjhiaQcPjoF5ZEZXshkIXo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 292, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020103", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04e892479153ad13ea5ca45d4c323ebf1fc3cd0cdf787c34306a3f79a4326ca9645f2b517608dc1f08b7a84cfc61e6ff68d14f27d2043c7ef5", + "wx" : "00e892479153ad13ea5ca45d4c323ebf1fc3cd0cdf787c34306a3f79a4", + "wy" : "326ca9645f2b517608dc1f08b7a84cfc61e6ff68d14f27d2043c7ef5" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004e892479153ad13ea5ca45d4c323ebf1fc3cd0cdf787c34306a3f79a4326ca9645f2b517608dc1f08b7a84cfc61e6ff68d14f27d2043c7ef5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE6JJHkVOtE+pcpF1MMj6/H8PNDN94fDQw\naj95pDJsqWRfK1F2CNwfCLeoTPxh5v9o0U8n0gQ8fvU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 293, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020104", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a40020104", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "042b0eac35c0b294f6d435dcaffa8633b0123005465c30080adbcc103ad465a63bfb71d4aee09328697fe1088753646d8369b8dc103217c219", + "wx" : "2b0eac35c0b294f6d435dcaffa8633b0123005465c30080adbcc103a", + "wy" : "00d465a63bfb71d4aee09328697fe1088753646d8369b8dc103217c219" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00042b0eac35c0b294f6d435dcaffa8633b0123005465c30080adbcc103ad465a63bfb71d4aee09328697fe1088753646d8369b8dc103217c219", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEKw6sNcCylPbUNdyv+oYzsBIwBUZcMAgK\n28wQOtRlpjv7cdSu4JMoaX/hCIdTZG2DabjcEDIXwhk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 295, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3022020103021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c6f00c4", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04d156e01e33becede8f4fb4ae9521d751e7f8eb795ca00857db2fd7afd73a450ec60e6a9218a8431870687e0968944f6dc5ffeb30e4693b7c", + "wx" : "00d156e01e33becede8f4fb4ae9521d751e7f8eb795ca00857db2fd7af", + "wy" : "00d73a450ec60e6a9218a8431870687e0968944f6dc5ffeb30e4693b7c" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d156e01e33becede8f4fb4ae9521d751e7f8eb795ca00857db2fd7afd73a450ec60e6a9218a8431870687e0968944f6dc5ffeb30e4693b7c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE0VbgHjO+zt6PT7SulSHXUef463lcoAhX\n2y/Xr9c6RQ7GDmqSGKhDGHBofglolE9txf/rMORpO3w=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 296, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "302302020100021d00c993264c993264c993264c99326411d2e55b3214a8d67528812a55ab", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04f293a8a2b4aff0bed95c663b364afe69778d38dd7e7a304f7d3c74e617dfd09e7803c4439a6c075cb579cde652d03f7559ff58846312fa4c", + "wx" : "00f293a8a2b4aff0bed95c663b364afe69778d38dd7e7a304f7d3c74e6", + "wy" : "17dfd09e7803c4439a6c075cb579cde652d03f7559ff58846312fa4c" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004f293a8a2b4aff0bed95c663b364afe69778d38dd7e7a304f7d3c74e617dfd09e7803c4439a6c075cb579cde652d03f7559ff58846312fa4c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE8pOoorSv8L7ZXGY7Nkr+aXeNON1+ejBP\nfTx05hff0J54A8RDmmwHXLV5zeZS0D91Wf9YhGMS+kw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 297, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "302702072d9b4d347952cc021c3e85d56474b5c55fbe86608442a84b2bf093b7d75f53a47250e1c70c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04d4ddf003b298cbaa7d2edc584b28b474a76162ed4b5b0f6222c54317d4e4fe030f178fb4aa4a6d7f61265ecd7ef13c313606b8d341a8b954", + "wx" : "00d4ddf003b298cbaa7d2edc584b28b474a76162ed4b5b0f6222c54317", + "wy" : "00d4e4fe030f178fb4aa4a6d7f61265ecd7ef13c313606b8d341a8b954" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d4ddf003b298cbaa7d2edc584b28b474a76162ed4b5b0f6222c54317d4e4fe030f178fb4aa4a6d7f61265ecd7ef13c313606b8d341a8b954", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE1N3wA7KYy6p9LtxYSyi0dKdhYu1LWw9i\nIsVDF9Tk/gMPF4+0qkptf2EmXs1+8TwxNga400GouVQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 298, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "302d020d1033e67e37b32b445580bf4efb021c02fd02fd02fd02fd02fd02fd02fd0043a4fd2da317247308c74dc6b8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "048a5bf0028f1e3eb6841dee7b8f873f68b0c560e592e3182074f51ce89668c32224b65b6849713d35e3acf1786862e65b5a664b47a098caa0", + "wx" : "008a5bf0028f1e3eb6841dee7b8f873f68b0c560e592e3182074f51ce8", + "wy" : "009668c32224b65b6849713d35e3acf1786862e65b5a664b47a098caa0" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048a5bf0028f1e3eb6841dee7b8f873f68b0c560e592e3182074f51ce89668c32224b65b6849713d35e3acf1786862e65b5a664b47a098caa0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEilvwAo8ePraEHe57j4c/aLDFYOWS4xgg\ndPUc6JZowyIktltoSXE9NeOs8XhoYuZbWmZLR6CYyqA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 299, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "302302020100021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b53e569b18e9361567e5713ee69ecbe7949911b0257546a24c3dd137f29a83334cff1c44d8c0c33b6dadb8568c024fa1fbb694cd9e705f5a", + "wx" : "00b53e569b18e9361567e5713ee69ecbe7949911b0257546a24c3dd137", + "wy" : "00f29a83334cff1c44d8c0c33b6dadb8568c024fa1fbb694cd9e705f5a" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b53e569b18e9361567e5713ee69ecbe7949911b0257546a24c3dd137f29a83334cff1c44d8c0c33b6dadb8568c024fa1fbb694cd9e705f5a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtT5WmxjpNhVn5XE+5p7L55SZEbAldUai\nTD3RN/KagzNM/xxE2MDDO22tuFaMAk+h+7aUzZ5wX1o=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 300, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "302e020d062522bbd3ecbe7c39e93e7c24021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0477f3ebf52725c809acbb19adf093126a2a3a065ca654c22099c978129f1948d23c5158ec2adff455eb2fedf1075d4ec22d660977424a10f7", + "wx" : "77f3ebf52725c809acbb19adf093126a2a3a065ca654c22099c97812", + "wy" : "009f1948d23c5158ec2adff455eb2fedf1075d4ec22d660977424a10f7" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000477f3ebf52725c809acbb19adf093126a2a3a065ca654c22099c978129f1948d23c5158ec2adff455eb2fedf1075d4ec22d660977424a10f7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEd/Pr9SclyAmsuxmt8JMSaio6BlymVMIg\nmcl4Ep8ZSNI8UVjsKt/0Vesv7fEHXU7CLWYJd0JKEPc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 301, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "303d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29bd021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04a7f7b99e5cdc6fec8928eff773ccdf3b68b19d43cdb41809e19c60f31736b7a0c12a9c2d706671912915142b3e05c89ef3ad497bd6c34699", + "wx" : "00a7f7b99e5cdc6fec8928eff773ccdf3b68b19d43cdb41809e19c60f3", + "wy" : "1736b7a0c12a9c2d706671912915142b3e05c89ef3ad497bd6c34699" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a7f7b99e5cdc6fec8928eff773ccdf3b68b19d43cdb41809e19c60f31736b7a0c12a9c2d706671912915142b3e05c89ef3ad497bd6c34699", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEp/e5nlzcb+yJKO/3c8zfO2ixnUPNtBgJ\n4Zxg8xc2t6DBKpwtcGZxkSkVFCs+Bcie861Je9bDRpk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 302, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "049cf00010b4ad86636f6cc70fb58c3b995c0d12e46fc58e24b0d28f6921c8a8a320cc450ccb15ebd71617f4ed25db4d3413fbdf157d31dbb6", + "wx" : "009cf00010b4ad86636f6cc70fb58c3b995c0d12e46fc58e24b0d28f69", + "wy" : "21c8a8a320cc450ccb15ebd71617f4ed25db4d3413fbdf157d31dbb6" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00049cf00010b4ad86636f6cc70fb58c3b995c0d12e46fc58e24b0d28f6921c8a8a320cc450ccb15ebd71617f4ed25db4d3413fbdf157d31dbb6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEnPAAELSthmNvbMcPtYw7mVwNEuRvxY4k\nsNKPaSHIqKMgzEUMyxXr1xYX9O0l2000E/vfFX0x27Y=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 304, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151e021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04ae9b3636b8547232df438559b5a109e0238a73a76afc25d070ea27427210a69de44ad645b1b03845040f46fce238e92c131a71e4b184c01f", + "wx" : "00ae9b3636b8547232df438559b5a109e0238a73a76afc25d070ea2742", + "wy" : "7210a69de44ad645b1b03845040f46fce238e92c131a71e4b184c01f" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004ae9b3636b8547232df438559b5a109e0238a73a76afc25d070ea27427210a69de44ad645b1b03845040f46fce238e92c131a71e4b184c01f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAErps2NrhUcjLfQ4VZtaEJ4COKc6dq/CXQ\ncOonQnIQpp3kStZFsbA4RQQPRvziOOksExpx5LGEwB8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 305, + "comment" : "edge case for signature malleability", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151f021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "048d57d4fce62757791888c1938076fd766daeb2ec9f1bda8ad5df4809aade924d7ea3ae5abbd0719a7d4865759da654cf76cf7ec031277108", + "wx" : "008d57d4fce62757791888c1938076fd766daeb2ec9f1bda8ad5df4809", + "wy" : "00aade924d7ea3ae5abbd0719a7d4865759da654cf76cf7ec031277108" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048d57d4fce62757791888c1938076fd766daeb2ec9f1bda8ad5df4809aade924d7ea3ae5abbd0719a7d4865759da654cf76cf7ec031277108", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEjVfU/OYnV3kYiMGTgHb9dm2usuyfG9qK\n1d9ICarekk1+o65au9Bxmn1IZXWdplTPds9+wDEncQg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 306, + "comment" : "edge case for signature malleability", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151f021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0410518eb7a926b5f7b65be801ec9b2abf76adce25c6152e452a3512c83f322b9ab57ea8352ad29beb99ef356b713432fcc4aef31f903045d9", + "wx" : "10518eb7a926b5f7b65be801ec9b2abf76adce25c6152e452a3512c8", + "wy" : "3f322b9ab57ea8352ad29beb99ef356b713432fcc4aef31f903045d9" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000410518eb7a926b5f7b65be801ec9b2abf76adce25c6152e452a3512c83f322b9ab57ea8352ad29beb99ef356b713432fcc4aef31f903045d9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEEFGOt6kmtfe2W+gB7Jsqv3atziXGFS5F\nKjUSyD8yK5q1fqg1KtKb65nvNWtxNDL8xK7zH5AwRdk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 307, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d00bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419fe", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "048a5dfedc9dd1cb9a439c88b3dd472b2e66173f7866855db6bb6c12fd3badfbb8a4c6fd80e66510957927c78a2aa02ecef62816d0356b49c3", + "wx" : "008a5dfedc9dd1cb9a439c88b3dd472b2e66173f7866855db6bb6c12fd", + "wy" : "3badfbb8a4c6fd80e66510957927c78a2aa02ecef62816d0356b49c3" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048a5dfedc9dd1cb9a439c88b3dd472b2e66173f7866855db6bb6c12fd3badfbb8a4c6fd80e66510957927c78a2aa02ecef62816d0356b49c3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEil3+3J3Ry5pDnIiz3UcrLmYXP3hmhV22\nu2wS/Tut+7ikxv2A5mUQlXknx4oqoC7O9igW0DVrScM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 308, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c44a5ad0bd0636d9e12bc9e0a6bdc74bfe082087ae8b61cbd54b8103f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0483a59fc3df295e84c290b32d0b550a06f99456fc2298e4a68c4f2bff1b34f483db30db3a51d8288732c107d8b1a858cd54c3936e1b5c11a4", + "wx" : "0083a59fc3df295e84c290b32d0b550a06f99456fc2298e4a68c4f2bff", + "wy" : "1b34f483db30db3a51d8288732c107d8b1a858cd54c3936e1b5c11a4" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000483a59fc3df295e84c290b32d0b550a06f99456fc2298e4a68c4f2bff1b34f483db30db3a51d8288732c107d8b1a858cd54c3936e1b5c11a4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEg6Wfw98pXoTCkLMtC1UKBvmUVvwimOSm\njE8r/xs09IPbMNs6UdgohzLBB9ixqFjNVMOTbhtcEaQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 309, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0458bada578a205d6e170722c8ed6c7715011fe33d7eba869ed1d448a75be4730c1d2d2ef881e02f028a241b7d7d3b0d0b4a9c0565fcb49977", + "wx" : "58bada578a205d6e170722c8ed6c7715011fe33d7eba869ed1d448a7", + "wy" : "5be4730c1d2d2ef881e02f028a241b7d7d3b0d0b4a9c0565fcb49977" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000458bada578a205d6e170722c8ed6c7715011fe33d7eba869ed1d448a75be4730c1d2d2ef881e02f028a241b7d7d3b0d0b4a9c0565fcb49977", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEWLraV4ogXW4XByLI7Wx3FQEf4z1+uoae\n0dRIp1vkcwwdLS74geAvAookG319Ow0LSpwFZfy0mXc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 310, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d00aaaaaaaaaaaaaaaaaaaaaaaaaaaa0f17407b4ad40d3e1b8392e81c29", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "047fcc799b919fe9789ce01dd9202731cb7d815158bc6cb8468760247c0f9d2957e0dd5e4c40124bd5e0dd1be41c038fce2cd1dc814e0af37d", + "wx" : "7fcc799b919fe9789ce01dd9202731cb7d815158bc6cb8468760247c", + "wy" : "0f9d2957e0dd5e4c40124bd5e0dd1be41c038fce2cd1dc814e0af37d" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00047fcc799b919fe9789ce01dd9202731cb7d815158bc6cb8468760247c0f9d2957e0dd5e4c40124bd5e0dd1be41c038fce2cd1dc814e0af37d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEf8x5m5Gf6Xic4B3ZICcxy32BUVi8bLhG\nh2AkfA+dKVfg3V5MQBJL1eDdG+QcA4/OLNHcgU4K830=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 311, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0093c8c651653430cb4f1675fc86b5e82ca04ff2ab1501674476aac169", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "043ddd68f69d0bfd47ad19370fa3dc72eb258268c2b5f3768852151674fbe0e155d94d2373a01a5e70f1a105259e7b8b1d2fdf4dba3cf4c780", + "wx" : "3ddd68f69d0bfd47ad19370fa3dc72eb258268c2b5f3768852151674", + "wy" : "00fbe0e155d94d2373a01a5e70f1a105259e7b8b1d2fdf4dba3cf4c780" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00043ddd68f69d0bfd47ad19370fa3dc72eb258268c2b5f3768852151674fbe0e155d94d2373a01a5e70f1a105259e7b8b1d2fdf4dba3cf4c780", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEPd1o9p0L/UetGTcPo9xy6yWCaMK183aI\nUhUWdPvg4VXZTSNzoBpecPGhBSWee4sdL99Nujz0x4A=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 312, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d009df50acc33b3625a2d5940dd13dbb97d1f7dd56afff8b7de7545127c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "041cb1f564c29ebf60a342b3bc33c8945cb279c6c1a012255c874e1c37b75191ab3b2bb730914ebfa14080410970b71eaf4fe01e2d48be9891", + "wx" : "1cb1f564c29ebf60a342b3bc33c8945cb279c6c1a012255c874e1c37", + "wy" : "00b75191ab3b2bb730914ebfa14080410970b71eaf4fe01e2d48be9891" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00041cb1f564c29ebf60a342b3bc33c8945cb279c6c1a012255c874e1c37b75191ab3b2bb730914ebfa14080410970b71eaf4fe01e2d48be9891", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEHLH1ZMKev2CjQrO8M8iUXLJ5xsGgEiVc\nh04cN7dRkas7K7cwkU6/oUCAQQlwtx6vT+AeLUi+mJE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 313, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00dce8c223f235699d1f5d2dcde4809d013390b59129f783239525c08f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0444e309eb686e7af7f1e2cc17fd56542b38910b3b7908ea54fb038d36477e829d4c8332e5b29f344ad27a21c18dab24a31ce7985b63a21304", + "wx" : "44e309eb686e7af7f1e2cc17fd56542b38910b3b7908ea54fb038d36", + "wy" : "477e829d4c8332e5b29f344ad27a21c18dab24a31ce7985b63a21304" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000444e309eb686e7af7f1e2cc17fd56542b38910b3b7908ea54fb038d36477e829d4c8332e5b29f344ad27a21c18dab24a31ce7985b63a21304", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEROMJ62huevfx4swX/VZUKziRCzt5COpU\n+wONNkd+gp1MgzLlsp80StJ6IcGNqySjHOeYW2OiEwQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 314, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c074aae944ee7a7d544a5ad0bd06366f872d2250ba3018a63d2a7f2e6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04c728064542cb5142f5eefe638124dcd7a1ad0b3555842a47dd5108e110129dd878ebd47313276cec86f521ea9585cd105b3dc421141993b8", + "wx" : "00c728064542cb5142f5eefe638124dcd7a1ad0b3555842a47dd5108e1", + "wy" : "10129dd878ebd47313276cec86f521ea9585cd105b3dc421141993b8" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c728064542cb5142f5eefe638124dcd7a1ad0b3555842a47dd5108e110129dd878ebd47313276cec86f521ea9585cd105b3dc421141993b8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAExygGRULLUUL17v5jgSTc16GtCzVVhCpH\n3VEI4RASndh469RzEyds7Ib1IeqVhc0QWz3EIRQZk7g=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 315, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00aae944ee7a7d544a5ad0bd0636d9455f4e83de0f186f89bca56b3c5c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04c46c1ad3d3d0df8e9c0f525c21ce8d81ef9d66297f442d63099667220cfa2253aa31a98d8966b85969bf9c819c019292ef6a53ac1db2a108", + "wx" : "00c46c1ad3d3d0df8e9c0f525c21ce8d81ef9d66297f442d6309966722", + "wy" : "0cfa2253aa31a98d8966b85969bf9c819c019292ef6a53ac1db2a108" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c46c1ad3d3d0df8e9c0f525c21ce8d81ef9d66297f442d63099667220cfa2253aa31a98d8966b85969bf9c819c019292ef6a53ac1db2a108", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAExGwa09PQ346cD1JcIc6Nge+dZil/RC1j\nCZZnIgz6IlOqMamNiWa4WWm/nIGcAZKS72pTrB2yoQg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 316, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c55d289dcf4faa894b5a17a0c6db3741bbc4ecbe01d01ea33ee7a4e7b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b7b2e48c1e60e20925f4d9b6be600dd83786a936c9bfab00639c33caa967cbc65070739a3379da80d54843a18d9c11a29a32234a0b303c12", + "wx" : "00b7b2e48c1e60e20925f4d9b6be600dd83786a936c9bfab00639c33ca", + "wy" : "00a967cbc65070739a3379da80d54843a18d9c11a29a32234a0b303c12" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b7b2e48c1e60e20925f4d9b6be600dd83786a936c9bfab00639c33caa967cbc65070739a3379da80d54843a18d9c11a29a32234a0b303c12", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEt7LkjB5g4gkl9Nm2vmAN2DeGqTbJv6sA\nY5wzyqlny8ZQcHOaM3nagNVIQ6GNnBGimjIjSgswPBI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 317, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c4ee7a7d544a5ad0bd0636d9e12bc561ce04faaf1312bba3a15601ebc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04f4a3d4598875af7f2741bbd67b1733b6541bc5325b3bcb4d3267c27ec30bf322f58a45c6c2aa2ced55f175d1cbf72a7c5bfc464d74f666c0", + "wx" : "00f4a3d4598875af7f2741bbd67b1733b6541bc5325b3bcb4d3267c27e", + "wy" : "00c30bf322f58a45c6c2aa2ced55f175d1cbf72a7c5bfc464d74f666c0" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004f4a3d4598875af7f2741bbd67b1733b6541bc5325b3bcb4d3267c27ec30bf322f58a45c6c2aa2ced55f175d1cbf72a7c5bfc464d74f666c0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE9KPUWYh1r38nQbvWexcztlQbxTJbO8tN\nMmfCfsML8yL1ikXGwqos7VXxddHL9yp8W/xGTXT2ZsA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 318, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c361b9cd74d65e79a5874c501bca4973b20347ec97f6de10072d8b46a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0456d1e5c1d664f6ce2fc1fcb937a7ce231a29486abf36c73f77a2bd116cb282c9d7c6fc05f399c183e880ea362edf043cd28ffac9f94f2141", + "wx" : "56d1e5c1d664f6ce2fc1fcb937a7ce231a29486abf36c73f77a2bd11", + "wy" : "6cb282c9d7c6fc05f399c183e880ea362edf043cd28ffac9f94f2141" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000456d1e5c1d664f6ce2fc1fcb937a7ce231a29486abf36c73f77a2bd116cb282c9d7c6fc05f399c183e880ea362edf043cd28ffac9f94f2141", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEVtHlwdZk9s4vwfy5N6fOIxopSGq/Nsc/\nd6K9EWyygsnXxvwF85nBg+iA6jYu3wQ80o/6yflPIUE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 319, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c6c3739ae9acbcf34b0e98a0379492e764068fd92fedbc200e5b168d4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0430bce8c6b7f1bbba040b8d121d85d55167ac99b2e2cf1cfac8b018b5f1c384c35be0ae309a5cb55aba982343d2125f2d4a559d8c545359cd", + "wx" : "30bce8c6b7f1bbba040b8d121d85d55167ac99b2e2cf1cfac8b018b5", + "wy" : "00f1c384c35be0ae309a5cb55aba982343d2125f2d4a559d8c545359cd" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000430bce8c6b7f1bbba040b8d121d85d55167ac99b2e2cf1cfac8b018b5f1c384c35be0ae309a5cb55aba982343d2125f2d4a559d8c545359cd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEMLzoxrfxu7oEC40SHYXVUWesmbLizxz6\nyLAYtfHDhMNb4K4wmly1WrqYI0PSEl8tSlWdjFRTWc0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 320, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00a252d685e831b6cf095e4f0535edc5b1609d7c5c7e49a301588a1d3e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04e87e538a978cf187908beb27a4a247d496a8421dab1fe79f8744d2b5539b9f8fe8bddcf7c97c44c55a4fc22f4d78f6a961447a5b613b5c49", + "wx" : "00e87e538a978cf187908beb27a4a247d496a8421dab1fe79f8744d2b5", + "wy" : "539b9f8fe8bddcf7c97c44c55a4fc22f4d78f6a961447a5b613b5c49" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004e87e538a978cf187908beb27a4a247d496a8421dab1fe79f8744d2b5539b9f8fe8bddcf7c97c44c55a4fc22f4d78f6a961447a5b613b5c49", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE6H5TipeM8YeQi+snpKJH1JaoQh2rH+ef\nh0TStVObn4/ovdz3yXxExVpPwi9NePapYUR6W2E7XEk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 321, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00ee746111f91ab4ce8fae96e6f23fd9d20a24d2e79eea563478c0f566", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04113a2cc57c8ee7de11bc45e14546c72a29725b9a7218114ac31f02816c765b9a46b0215312a3292f5979c98d37b35883baa156281b1bae8c", + "wx" : "113a2cc57c8ee7de11bc45e14546c72a29725b9a7218114ac31f0281", + "wy" : "6c765b9a46b0215312a3292f5979c98d37b35883baa156281b1bae8c" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004113a2cc57c8ee7de11bc45e14546c72a29725b9a7218114ac31f02816c765b9a46b0215312a3292f5979c98d37b35883baa156281b1bae8c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEETosxXyO594RvEXhRUbHKilyW5pyGBFK\nwx8CgWx2W5pGsCFTEqMpL1l5yY03s1iDuqFWKBsbrow=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 322, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffffb2364ae85014b149b86c741eb8be", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0423dd9c3f1a4b478b01fa2c5e997d0482073b32918de44be583dcf74ad661a5ed579a2f09d2ff56d6b80f26568d93a237ca6444b0cadc7951", + "wx" : "23dd9c3f1a4b478b01fa2c5e997d0482073b32918de44be583dcf74a", + "wy" : "00d661a5ed579a2f09d2ff56d6b80f26568d93a237ca6444b0cadc7951" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000423dd9c3f1a4b478b01fa2c5e997d0482073b32918de44be583dcf74ad661a5ed579a2f09d2ff56d6b80f26568d93a237ca6444b0cadc7951", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEI92cPxpLR4sB+ixemX0Eggc7MpGN5Evl\ng9z3StZhpe1Xmi8J0v9W1rgPJlaNk6I3ymREsMrceVE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 323, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00855f5b2dc8e46ec428a593f73219cf65dae793e8346e30cc3701309c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04bbce4b17d45d24a1c80bc8eca98c359d5e1e458058a00b950643256dfe09e092318e39303dca03688e4ecf300300784312d617e5088c584c", + "wx" : "00bbce4b17d45d24a1c80bc8eca98c359d5e1e458058a00b950643256d", + "wy" : "00fe09e092318e39303dca03688e4ecf300300784312d617e5088c584c" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004bbce4b17d45d24a1c80bc8eca98c359d5e1e458058a00b950643256dfe09e092318e39303dca03688e4ecf300300784312d617e5088c584c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEu85LF9RdJKHIC8jsqYw1nV4eRYBYoAuV\nBkMlbf4J4JIxjjkwPcoDaI5OzzADAHhDEtYX5QiMWEw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 324, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c2db5f61aea817276af2064e104c7a30e32034cb526dd0aacfa56566f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04035f58446c1bdbeaa56660a897ebf965f2d18820c7cd0630f04a495347bdfaea60091f405e09929cb2c0e2f6eed53e0871b7fe0cd5a15d85", + "wx" : "035f58446c1bdbeaa56660a897ebf965f2d18820c7cd0630f04a4953", + "wy" : "47bdfaea60091f405e09929cb2c0e2f6eed53e0871b7fe0cd5a15d85" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004035f58446c1bdbeaa56660a897ebf965f2d18820c7cd0630f04a495347bdfaea60091f405e09929cb2c0e2f6eed53e0871b7fe0cd5a15d85", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEA19YRGwb2+qlZmCol+v5ZfLRiCDHzQYw\n8EpJU0e9+upgCR9AXgmSnLLA4vbu1T4Icbf+DNWhXYU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 325, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0084a6c7513e5f48c07fffffffffff8713f3cba1293e4f3e95597fe6bd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04911c0033eac46332691cb7920c4950eed57354761e1081a1ea9f1279508ebf7cfd3eab5dabdee1be14ce8296b1fc20acfaac16f7824c6002", + "wx" : "00911c0033eac46332691cb7920c4950eed57354761e1081a1ea9f1279", + "wy" : "508ebf7cfd3eab5dabdee1be14ce8296b1fc20acfaac16f7824c6002" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004911c0033eac46332691cb7920c4950eed57354761e1081a1ea9f1279508ebf7cfd3eab5dabdee1be14ce8296b1fc20acfaac16f7824c6002", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEkRwAM+rEYzJpHLeSDElQ7tVzVHYeEIGh\n6p8SeVCOv3z9Pqtdq97hvhTOgpax/CCs+qwW94JMYAI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 326, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c6c7513e5f48c07ffffffffffffff9d21fd1b31544cb13ca86a75b25e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0462b2abb70bb9c7efdfb57181f433b64751f108130dce180d6992e7d3124b3aa8a53e5eedf72aa67e6edcc71f19e36e6ad1d099a59ffd9555", + "wx" : "62b2abb70bb9c7efdfb57181f433b64751f108130dce180d6992e7d3", + "wy" : "124b3aa8a53e5eedf72aa67e6edcc71f19e36e6ad1d099a59ffd9555" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000462b2abb70bb9c7efdfb57181f433b64751f108130dce180d6992e7d3124b3aa8a53e5eedf72aa67e6edcc71f19e36e6ad1d099a59ffd9555", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEYrKrtwu5x+/ftXGB9DO2R1HxCBMNzhgN\naZLn0xJLOqilPl7t9yqmfm7cxx8Z425q0dCZpZ/9lVU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 327, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d8ea27cbe9180fffffffffffffff3a43fa3662a899627950d4eb64bc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "040f759330e7992752aae6a85f7bb0599784bea53e288ff7ee8d53d5e6defe617362380e92f9a23c4fdcc34e09713aab9cc44119418f6f2fd1", + "wx" : "0f759330e7992752aae6a85f7bb0599784bea53e288ff7ee8d53d5e6", + "wy" : "00defe617362380e92f9a23c4fdcc34e09713aab9cc44119418f6f2fd1" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00040f759330e7992752aae6a85f7bb0599784bea53e288ff7ee8d53d5e6defe617362380e92f9a23c4fdcc34e09713aab9cc44119418f6f2fd1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAED3WTMOeZJ1Kq5qhfe7BZl4S+pT4oj/fu\njVPV5t7+YXNiOA6S+aI8T9zDTglxOqucxEEZQY9vL9E=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 328, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3e5f48c07fffffffffffffffffffc724968c0ecf9ed783744a7337b3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "048f2eda42742ab31f5d4cf666892d1d623efd3b26f7df9aa70296e80d3beaf235cfea41fadb98c533a8fdeb5841d69ee65f6e71914711f138", + "wx" : "008f2eda42742ab31f5d4cf666892d1d623efd3b26f7df9aa70296e80d", + "wy" : "3beaf235cfea41fadb98c533a8fdeb5841d69ee65f6e71914711f138" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048f2eda42742ab31f5d4cf666892d1d623efd3b26f7df9aa70296e80d3beaf235cfea41fadb98c533a8fdeb5841d69ee65f6e71914711f138", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEjy7aQnQqsx9dTPZmiS0dYj79Oyb335qn\nApboDTvq8jXP6kH625jFM6j961hB1p7mX25xkUcR8Tg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 329, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00bfffffffffffffffffffffffffff3d87bb44c833bb384d0f224ccdde", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "042bcf4371b319a691ed0e2e0c4a55a8a9b987dec86b863621e97b9c095b8660a74cc964a6af0311edc6b1cd980f9c7bf3a6c9b7f9132a0b2f", + "wx" : "2bcf4371b319a691ed0e2e0c4a55a8a9b987dec86b863621e97b9c09", + "wy" : "5b8660a74cc964a6af0311edc6b1cd980f9c7bf3a6c9b7f9132a0b2f" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00042bcf4371b319a691ed0e2e0c4a55a8a9b987dec86b863621e97b9c095b8660a74cc964a6af0311edc6b1cd980f9c7bf3a6c9b7f9132a0b2f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEK89DcbMZppHtDi4MSlWoqbmH3shrhjYh\n6XucCVuGYKdMyWSmrwMR7caxzZgPnHvzpsm3+RMqCy8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 330, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffff646c95d0a029629370d8e83d717f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04a6f252568f6fbd1ae045e602344359c0c216911723748f9a3e7fadec3b76efc75ba030bfe7de2ded686991e6183d40241a05b479693c7015", + "wx" : "00a6f252568f6fbd1ae045e602344359c0c216911723748f9a3e7fadec", + "wy" : "3b76efc75ba030bfe7de2ded686991e6183d40241a05b479693c7015" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a6f252568f6fbd1ae045e602344359c0c216911723748f9a3e7fadec3b76efc75ba030bfe7de2ded686991e6183d40241a05b479693c7015", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEpvJSVo9vvRrgReYCNENZwMIWkRcjdI+a\nPn+t7Dt278dboDC/594t7WhpkeYYPUAkGgW0eWk8cBU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 331, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e1520", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04a74c1c3a31c7d493ab2c0af89cf5e688621ca9466d2ba1d8761c3fe82ba0d08f4c9f76856c2b7138c8f1e780b6959992b16ccdfd925f4b3a", + "wx" : "00a74c1c3a31c7d493ab2c0af89cf5e688621ca9466d2ba1d8761c3fe8", + "wy" : "2ba0d08f4c9f76856c2b7138c8f1e780b6959992b16ccdfd925f4b3a" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a74c1c3a31c7d493ab2c0af89cf5e688621ca9466d2ba1d8761c3fe82ba0d08f4c9f76856c2b7138c8f1e780b6959992b16ccdfd925f4b3a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEp0wcOjHH1JOrLAr4nPXmiGIcqUZtK6HY\ndhw/6Cug0I9Mn3aFbCtxOMjx54C2lZmSsWzN/ZJfSzo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 332, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0096dafb0d7540b93b5790327082635cd8895e1e799d5d19f92b594056", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04034ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f280562acc9b49f2d7fcc89421d2a5db2ea8dd0361fb48d897d4612627", + "wx" : "034ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f2", + "wy" : "0080562acc9b49f2d7fcc89421d2a5db2ea8dd0361fb48d897d4612627" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004034ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f280562acc9b49f2d7fcc89421d2a5db2ea8dd0361fb48d897d4612627", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEA06nJ5glfzPyT2TElDj8Q+j2fdxxcP0S\nfixD8oBWKsybSfLX/MiUIdKl2y6o3QNh+0jYl9RhJic=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 333, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c3f552f1c2b01651edf5902650fe9ab046f71999ac928edc0087bdb13", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04034ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f27fa9d53364b60d2803376bde2d5a24d05722fc9e04b727682b9ed9da", + "wx" : "034ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f2", + "wy" : "7fa9d53364b60d2803376bde2d5a24d05722fc9e04b727682b9ed9da" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004034ea72798257f33f24f64c49438fc43e8f67ddc7170fd127e2c43f27fa9d53364b60d2803376bde2d5a24d05722fc9e04b727682b9ed9da", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEA06nJ5glfzPyT2TElDj8Q+j2fdxxcP0S\nfixD8n+p1TNktg0oAzdr3i1aJNBXIvyeBLcnaCue2do=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 334, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "303d021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021c3f552f1c2b01651edf5902650fe9ab046f71999ac928edc0087bdb13", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "043672ba9718e60d00eab4295c819ea366a778dd6fd621fa9665259cb67ae5e847eeaea674beeb636379e968f79265502e414a1d444f04ae79", + "wx" : "3672ba9718e60d00eab4295c819ea366a778dd6fd621fa9665259cb6", + "wy" : "7ae5e847eeaea674beeb636379e968f79265502e414a1d444f04ae79" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00043672ba9718e60d00eab4295c819ea366a778dd6fd621fa9665259cb67ae5e847eeaea674beeb636379e968f79265502e414a1d444f04ae79", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAENnK6lxjmDQDqtClcgZ6jZqd43W/WIfqW\nZSWctnrl6EfurqZ0vutjY3npaPeSZVAuQUodRE8Ernk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 335, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c33333333333333333333333333330486f9be9672d0c5d50ddf45a20c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0433eeefbfc77229136e56b575144863ed90b4c0f8a9e315816d6de648051749dd11480c141fb5a1946313163c0141265b68a26216bcb9936a", + "wx" : "33eeefbfc77229136e56b575144863ed90b4c0f8a9e315816d6de648", + "wy" : "051749dd11480c141fb5a1946313163c0141265b68a26216bcb9936a" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000433eeefbfc77229136e56b575144863ed90b4c0f8a9e315816d6de648051749dd11480c141fb5a1946313163c0141265b68a26216bcb9936a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEM+7vv8dyKRNuVrV1FEhj7ZC0wPip4xWB\nbW3mSAUXSd0RSAwUH7WhlGMTFjwBQSZbaKJiFry5k2o=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 336, + "comment" : "extreme value for k and edgecase s", + "msg" : "313233343030", + "sig" : "303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04bda03b24b62243c61e288b6ea1e99a2886f700944eb1b8f0466cffd61c712a3aaace69331989b707e69e8de39d7cd1aeb65d97ad1800bf7f", + "wx" : "00bda03b24b62243c61e288b6ea1e99a2886f700944eb1b8f0466cffd6", + "wy" : "1c712a3aaace69331989b707e69e8de39d7cd1aeb65d97ad1800bf7f" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004bda03b24b62243c61e288b6ea1e99a2886f700944eb1b8f0466cffd61c712a3aaace69331989b707e69e8de39d7cd1aeb65d97ad1800bf7f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEvaA7JLYiQ8YeKItuoemaKIb3AJROsbjw\nRmz/1hxxKjqqzmkzGYm3B+aejeOdfNGutl2XrRgAv38=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 337, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303d021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021d00db6db6db6db6db6db6db6db6db6ceed4c09e84c77ebd9116e17391eb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "047abba0cbff134ddcf54d04846f954b882ca9faefdfe818898bfb378b792f10b57970ae57bb4fb01c08886848855aeb1984d3d6fcb2b412df", + "wx" : "7abba0cbff134ddcf54d04846f954b882ca9faefdfe818898bfb378b", + "wy" : "792f10b57970ae57bb4fb01c08886848855aeb1984d3d6fcb2b412df" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00047abba0cbff134ddcf54d04846f954b882ca9faefdfe818898bfb378b792f10b57970ae57bb4fb01c08886848855aeb1984d3d6fcb2b412df", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEerugy/8TTdz1TQSEb5VLiCyp+u/f6BiJ\ni/s3i3kvELV5cK5Xu0+wHAiIaEiFWusZhNPW/LK0Et8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 338, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c33333333333333333333333333330486f9be9672d0c5d50ddf45a20c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04f68d99e28653b9ba3e7cedb3b78165f5a54fbe90d4b9f88497977e16234da3eaa0178a51b5b0c208ef0818df6f6578793c1af1787026b8da", + "wx" : "00f68d99e28653b9ba3e7cedb3b78165f5a54fbe90d4b9f88497977e16", + "wy" : "234da3eaa0178a51b5b0c208ef0818df6f6578793c1af1787026b8da" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004f68d99e28653b9ba3e7cedb3b78165f5a54fbe90d4b9f88497977e16234da3eaa0178a51b5b0c208ef0818df6f6578793c1af1787026b8da", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE9o2Z4oZTubo+fO2zt4Fl9aVPvpDUufiE\nl5d+FiNNo+qgF4pRtbDCCO8IGN9vZXh5PBrxeHAmuNo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 339, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303d021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021d00cccccccccccccccccccccccccccc121be6fa59cb431754377d168831", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04065d9ef133ce81c2d6b66e928360f9527f8f36b5badd35b5f10934272004852755f77440a0b08b9f165489c0696e8b4981d6d04a285b0fd1", + "wx" : "065d9ef133ce81c2d6b66e928360f9527f8f36b5badd35b5f1093427", + "wy" : "2004852755f77440a0b08b9f165489c0696e8b4981d6d04a285b0fd1" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004065d9ef133ce81c2d6b66e928360f9527f8f36b5badd35b5f10934272004852755f77440a0b08b9f165489c0696e8b4981d6d04a285b0fd1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEBl2e8TPOgcLWtm6Sg2D5Un+PNrW63TW1\n8Qk0JyAEhSdV93RAoLCLnxZUicBpbotJgdbQSihbD9E=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 340, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c249249249249249249249249249227ce201a6b76951f982e7ae89852", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04d6cea09472ede574ce1e0546c9acd0e1cd8cba9b121df29e89d5092e83904ebfb902ea61c987dc0508e0c9a7e563e2609feaf79140ab91d6", + "wx" : "00d6cea09472ede574ce1e0546c9acd0e1cd8cba9b121df29e89d5092e", + "wy" : "0083904ebfb902ea61c987dc0508e0c9a7e563e2609feaf79140ab91d6" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d6cea09472ede574ce1e0546c9acd0e1cd8cba9b121df29e89d5092e83904ebfb902ea61c987dc0508e0c9a7e563e2609feaf79140ab91d6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE1s6glHLt5XTOHgVGyazQ4c2MupsSHfKe\nidUJLoOQTr+5AuphyYfcBQjgyaflY+Jgn+r3kUCrkdY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 341, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c0eb10e5ab95facded4061029d63a46f46f12947411f2ea561a592057", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04c520b18003b356094147ee2f9df1178572bed837bd89443b25ebceb80e2e93a998fbbabe82192ea4c85651cf09a95ab0dc2e3d975ee7be98", + "wx" : "00c520b18003b356094147ee2f9df1178572bed837bd89443b25ebceb8", + "wy" : "0e2e93a998fbbabe82192ea4c85651cf09a95ab0dc2e3d975ee7be98" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c520b18003b356094147ee2f9df1178572bed837bd89443b25ebceb80e2e93a998fbbabe82192ea4c85651cf09a95ab0dc2e3d975ee7be98", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAExSCxgAOzVglBR+4vnfEXhXK+2De9iUQ7\nJevOuA4uk6mY+7q+ghkupMhWUc8JqVqw3C49l17nvpg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 342, + "comment" : "extreme value for k and edgecase s", + "msg" : "313233343030", + "sig" : "303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "049dd0b99bb7a830bcc7d55abac42912d525b063c50cf377ca5771a26ca141fccf0793c2ba2469a946c2d4ed26344052c63a6d7e7797ce96c3", + "wx" : "009dd0b99bb7a830bcc7d55abac42912d525b063c50cf377ca5771a26c", + "wy" : "00a141fccf0793c2ba2469a946c2d4ed26344052c63a6d7e7797ce96c3" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00049dd0b99bb7a830bcc7d55abac42912d525b063c50cf377ca5771a26ca141fccf0793c2ba2469a946c2d4ed26344052c63a6d7e7797ce96c3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEndC5m7eoMLzH1Vq6xCkS1SWwY8UM83fK\nV3GibKFB/M8Hk8K6JGmpRsLU7SY0QFLGOm1+d5fOlsM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 343, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303e021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021d00db6db6db6db6db6db6db6db6db6ceed4c09e84c77ebd9116e17391eb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "043dab9f1b19e715d174a7360920375d569a181f055e66f01391871b6f47a6d87c23a5b6a1e3d0a9721302cc02cce35f35dea08e22619be521", + "wx" : "3dab9f1b19e715d174a7360920375d569a181f055e66f01391871b6f", + "wy" : "47a6d87c23a5b6a1e3d0a9721302cc02cce35f35dea08e22619be521" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00043dab9f1b19e715d174a7360920375d569a181f055e66f01391871b6f47a6d87c23a5b6a1e3d0a9721302cc02cce35f35dea08e22619be521", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEPaufGxnnFdF0pzYJIDddVpoYHwVeZvAT\nkYcbb0em2Hwjpbah49CpchMCzALM41813qCOImGb5SE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 344, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c33333333333333333333333333330486f9be9672d0c5d50ddf45a20c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0456dde1ba58ea31053b2535c66623344c24c72d214af5be6982e89100e771084806143e86f2b31bdaf62280f5b311d0d2bdbb385b20fc6c87", + "wx" : "56dde1ba58ea31053b2535c66623344c24c72d214af5be6982e89100", + "wy" : "00e771084806143e86f2b31bdaf62280f5b311d0d2bdbb385b20fc6c87" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000456dde1ba58ea31053b2535c66623344c24c72d214af5be6982e89100e771084806143e86f2b31bdaf62280f5b311d0d2bdbb385b20fc6c87", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEVt3huljqMQU7JTXGZiM0TCTHLSFK9b5p\nguiRAOdxCEgGFD6G8rMb2vYigPWzEdDSvbs4WyD8bIc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 345, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303e021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021d00cccccccccccccccccccccccccccc121be6fa59cb431754377d168831", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0494efe1387fc0447d7dbcb53739a0e4e0ddec181d382caea645b1a6124414a6b1c78908d0fa206f8f2de950ad4a14d1ce94d9cddbe32e4601", + "wx" : "0094efe1387fc0447d7dbcb53739a0e4e0ddec181d382caea645b1a612", + "wy" : "4414a6b1c78908d0fa206f8f2de950ad4a14d1ce94d9cddbe32e4601" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000494efe1387fc0447d7dbcb53739a0e4e0ddec181d382caea645b1a6124414a6b1c78908d0fa206f8f2de950ad4a14d1ce94d9cddbe32e4601", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAElO/hOH/ARH19vLU3OaDk4N3sGB04LK6m\nRbGmEkQUprHHiQjQ+iBvjy3pUK1KFNHOlNnN2+MuRgE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 346, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c249249249249249249249249249227ce201a6b76951f982e7ae89852", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "046286803b952976ee1897013695d3ef2cbb6f977142a042b236572577722a6ce9ad3e3fd28e451833496c63b8ab70538877215f204942bf59", + "wx" : "6286803b952976ee1897013695d3ef2cbb6f977142a042b236572577", + "wy" : "722a6ce9ad3e3fd28e451833496c63b8ab70538877215f204942bf59" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00046286803b952976ee1897013695d3ef2cbb6f977142a042b236572577722a6ce9ad3e3fd28e451833496c63b8ab70538877215f204942bf59", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEYoaAO5Updu4YlwE2ldPvLLtvl3FCoEKy\nNlcld3IqbOmtPj/SjkUYM0lsY7ircFOIdyFfIElCv1k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 347, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c0eb10e5ab95facded4061029d63a46f46f12947411f2ea561a592057", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34", + "wx" : "00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", + "wy" : "00bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtw4MvWu0v38yE5C5SgPB01bCESI0MoDW\nEVwdIb03Y4i19yP7TCLf5s1DdaBaB0dkRNWBmYUAfjQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 348, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303d021d00bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419fe021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 349, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303c021c44a5ad0bd0636d9e12bc9e0a6bdc74bfe082087ae8b61cbd54b8103f021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d2142c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd", + "wx" : "00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", + "wy" : "42c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d2142c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtw4MvWu0v38yE5C5SgPB01bCESI0MoDW\nEVwdIULInHdKCNwEs90gGTK8il6l+Libuyp+Znr/gc0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 350, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303d021d00bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419fe021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 351, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303c021c44a5ad0bd0636d9e12bc9e0a6bdc74bfe082087ae8b61cbd54b8103f021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "044c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176", + "wx" : "4c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466", + "wy" : "00ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00044c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAETCRmcGWKHUH113vOJGy+OGrCKEjiabnU\nzWfEZt3ZRxU9ObLUJTOkYN7yaIBAjK8t091I/oiM0XY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 352, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303d021c0364e7d96832614a80216e730c353534d4bffd2c26649c0b4b0e2628021d008f40064b412fe38c5ba9cf664e6172ed48e6e79f0fe5e31a54985dfc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 353, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303d021d00f4b68df62b9238363ccc1bbee00deb3fb2693f7894178e14eeac596a021c7f51c9451adacd2bcbc721f7df0643d7cd18a6b52064b507e1912f23", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 354, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303d021d00b2970cdec29c70294a18bbc49985efa33acc0af509c326a3977a35e8021c0cea3ed8ebaaf6ee6aef6049a23cbc39f61fcf8fc6be4bab13385579", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 355, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021c7e7b0eb7da8c68a7072b11404ee95a5c407fbfe3d69646802e28ae77021d00d409a2f6bbaae59bb60fc0a092b12fa4e67dc8d088cf19a833322fd6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf8a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000", + "wx" : "00aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf", + "wy" : "008a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf8a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAErtb8rSQAxNlOVdu2sBLOPUwrRoQ/vpnU\nKJ5uz4okqJ5xND19FR0ljSy2kDScLVazZt0QpgAAAAA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 356, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303c021c519bf185ff4635271961fa491be257231deeea9c53a6ede3b4a89ed1021c486bdad484a6a3134e1471cf56a9df0fac50f773b3e37d6f327617d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 357, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021c09fd644898b7cb5d018b52234e7b4ef2b54789afd0ce9c434e9e5515021d00f19309532164ea2053cae55df7bdcbab536c83ea7bfe6fe10d60c1ab", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 358, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021d00ec919d4e283ccf1f71a9e3c0f781a36758d3f38b1b78a87a74288e80021c4c4663044a73c79bd88f0dc245ab1a32f89f06f40a704b31e9fabc51", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f173d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff", + "wx" : "00bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f1", + "wy" : "73d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f173d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEvxns/kP/4on2mfR5MWFFuaf3Nwuezlqx\nISF08XPVKJSa6RQvgYut5xqWBAeWO+C2SCpqYP////8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 359, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303e021d00c51760478447217597ecc6f4001bd45088d53c90f53103608bf88aea021d00a201253aa903f9781e8992101d7171d2dd3a5d48c44d8e1d544cd6d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 360, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303c021c76be0112674ec29128823e1af7512e6143872fef30a64e2f1799bd56021c187e503e1a48c27b549fe0a4ce5e581e242c8663fc9efb02d6f2b193", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 361, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303c021c36245ef126b5b51e459f84eaaad5a495061f0471dc8c23f1c5f16282021c39e31d72a06ba8e14fcf95778e07bc16a2628e39449da8857d506edc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0426e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0", + "wx" : "26e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000", + "wy" : "00eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000426e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEJuWr8TXLVOqqFraeSwspInU0Toignfbf\ngAAAAOq4kd5U4/Jv9Qq5ifMz2sVRWD1GiuYjxZZDSvA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 362, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303c021c258682975df8bca7f203f771ebeb478ef637360c860fc386cfb21745021c7663e70188047e41469a2a35c8c330dd900f2340ba82aafd22962a96", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 363, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303e021d0085c98614f36c0d66f8d87834cae978611b7b4eebf59a46bea1b89ae9021d00d1a18e378dda840e06b60f6279bf0a2231d9fa2d8d2c31e88bc1bdd7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 364, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303e021d00ca7b7432ba41ff2112e1116fffde89bbd68f5ce67fe5513d16c8e6f7021d00e421b7599e0180798acc2006451603cda2db1d582741116e6033ce5f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd", + "wx" : "00ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff", + "wy" : "41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE7GJ/NFVF0D+Mbb0I5XVScRZWf+N1+eyq\n/////0G/cFaX1fcWvPeHGNU5O2OphpH0ofJCRjdVOP0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 365, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303c021c19397fe5d3ecabf80fc624c1bf379564387517c185087dc97d605069021c33b5773e9aaf6c34cb612cfc81efd3bf9c22224e8c4fa1bfccf5c501", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 366, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021c70f24f5c164164bfbb8459aa12a981aa312dbcf00204326ebaaabdc8021d00f5cebee8caedae8662c43501665084b45d2f494fb70d603043543dc4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 367, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021c0bf2d86ecaa8b56aca5e8f8ebcb45081d078a14555b75f5be8e9b132021d009a55b3ce4734849966b5034ccd9b19f76407ee0241c3f58e7b8fc89a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5", + "wx" : "15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a", + "wy" : "762d28f1fdc219184f81681fbff566d465b5f1f31e872df5" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEFQFuUrNkctU2R3YF+4Bd05AwgqBi0eow\nr55VWgAAAAB2LSjx/cIZGE+BaB+/9WbUZbXx8x6HLfU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 368, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00bfc5dc4434cd09369610687d38d2d418b63fd475dea246a456b25a3a021d00b171dfa6cf722f20816370a868785da842b37bac31d7b78e6751fc50", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 369, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d008fdbe8da646c5642d767c7dbeb3872b1edab6e37365805f0e94ce0a9021d00bcf35ab81222883dd3526cb0cf93138f4687cd0b10c2b0a126385161", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 370, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021d00e23a11275848fd4f8b6f4ac4fc305eae981d3b7dc453e5a980c46422021c1a875693f24a03ea1614c4c3bbd0dd7221429f22b337ea7d98348ca4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c", + "wx" : "15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a", + "wy" : "00ffffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEFQFuUrNkctU2R3YF+4Bd05AwgqBi0eow\nr55VWv////+J0tcOAj3m57B+l99ACpkrmkoODOF40gw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 371, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c76645164ff9af3a1a9205fda2eef326d2bffc795dcc4829547fe01dd021d00b65bba503719314b27734dd06b1395d540af8396029b78b84e0149eb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 372, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303c021c32fa0ca7e07f1f86ac350734994e1f31b6da9c82f93dced2b983c29c021c7b7891282206a45711bdfcb2a102b5d289df84ff5778548603574004", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 373, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c2d5492478ca64e5111dfd8521867b6477b7e78227849ad090b855694021d00a532f5a2fa3594af81cd5928b81b4057da717be5fb42a3a86c68190d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1", + "wx" : "00f7e4713d085112112c37cdf4601ff688da796016b71a727a", + "wy" : "00de5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEAAAAAPfkcT0IURIRLDfN9GAf9ojaeWAW\ntxpyet5ansFlBUzJh/nch+mZG5Lk+mScplXurp8qMOE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 374, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021c191eee5daf55cd499e8539cb2cff797cfec5d566d2027bf9f8d64693021d00dadfeae8131f64d96b94fd340197caa2bc04818554812feef3343070", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 375, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00e0e2c08180b8a207ee9105a7d379fa112368e8370fa09dfde4a45c45021d00c717bc0860e016e7ce48f8fe6a299b36906a6055adad93b416ce8838", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 376, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021c1b919ef93532292743bb2e1b7b4894fd847c6e5de52a08e1b0f2dcfb021d00c2d30d6b7594d8dbd261491ae1d58779505b075b64e5564dc97a418b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e", + "wx" : "00ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f725", + "wy" : "0086c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE/////+rffO6NNNBM8iyPfeNWdPsvUB0k\nKnb3JYbECTCdOY5gzh4KTJ4FqdMmJ1d+jOLMfzr6LD4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 377, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021d00e75db49ed33ff2885ea6100cc95b8fe1b9242ea4248db07bcac2e020021c796c866142ae8eb75bb0499c668c6fe45497692fbcc66b37c2e4624f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 378, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303c021c1f81cd924362ec825890307b9b3936e0d8f728a7c84bdb43c5cf0433021c39d3e46a03040ad41ac026b18e0629f6145e3dc8d1e6bbe200c8482b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 379, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303c021c00fda613aa67ca42673ad4309f3f0f05b2569f3dee63f4aa9cc54cf3021c1e5a64b68a37e5b201c918303dc7a40439aaeacf019c5892a8f6d0ce", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc", + "wx" : "00b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1", + "wy" : "0e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEsAE8b7/28J/s2hwmPvZTmdTPmJyl/E+P\n/w/p4QAAAAAOKrDoSV6FnrKvsAdp1uf+YmoRkWfAtrw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 380, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00b932b3f7e6467e1ec7a561f31160248c7f224550a8508788634b53ce021d00a0c5312acf9e801aff6d6fc98550cfa712bbf65937165a36f2c32dc9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 381, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021d00e509593fb09245ee8226ce72786b0cc352be555a7486be628f4fd00c021c0b7abde0061b1e07bf13319150a4ff6a464abab636ab4e297b0d7633", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 382, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303c021c6e54f941204d4639b863c98a65b7bee318d51ab1900a8f345eac6f07021c0da5054829214ecde5e10579b36a2fe6426c24b064ed77c38590f25c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945", + "wx" : "00b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1", + "wy" : "00fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEsAE8b7/28J/s2hwmPvZTmdTPmJyl/E+P\n/w/p4f/////x1U8XtqF6YU1QT/eWKRgBnZXubpg/SUU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 383, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021d0085ea4ab3ffdc992330c0ca8152faf991386bce82877dbb239ba654f6021c0806c6baf0ebea4c1aaa190e7d4325d46d1f7789d550632b70b5fc9b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 384, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c44d53debb646b73485402eab2d099081b97b1243c025b624f0dd67ea021d00e5de789a7d4b77eac6d7bba41658e6e4dc347dabed2f9680c04a6f55", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 385, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303c021c1526eb2f657ebea9af4ca184b975c02372c88e24e835f3f5774c0e12021c1f1ecce38ee52372cb201907794de17b6d6c1afa13c316c51cb07bc7", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/tests/ecdsa_secp224r1_sha512_test.json b/tests/ecdsa_secp224r1_sha512_test.json new file mode 100644 index 00000000..313a6b36 --- /dev/null +++ b/tests/ecdsa_secp224r1_sha512_test.json @@ -0,0 +1,5002 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.8r12", + "numberOfTests" : 454, + "header" : [ + "Test vectors of type EcdsaVerify are meant for the verification", + "of ASN encoded ECDSA signatures." + ], + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "schema" : "ecdsa_verify_schema.json", + "testGroups" : [ + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5", + "wx" : "00eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7", + "wy" : "00eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004eada93be10b2449e1e8bb58305d52008013c57107c1a20a317a6cba7eca672340c03d1d2e09663286691df55069fa25490c9dd9f9c0bb2b5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE6tqTvhCyRJ4ei7WDBdUgCAE8VxB8GiCj\nF6bLp+ymcjQMA9HS4JZjKGaR31UGn6JUkMndn5wLsrU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "303c021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021c394766fb67a65fe0af6c154f7cbd285ea180b4c6150cdafafb0f6f0f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "Legacy:ASN encoding of s misses leading 0", + "msg" : "313233343030", + "sig" : "303c021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021cc6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 3, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "long form encoding of length of sequence", + "msg" : "313233343030", + "sig" : "30813d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 5, + "comment" : "length of sequence contains leading 0", + "msg" : "313233343030", + "sig" : "3082003d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 6, + "comment" : "wrong length of sequence", + "msg" : "313233343030", + "sig" : "303e021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "wrong length of sequence", + "msg" : "313233343030", + "sig" : "303c021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "uint32 overflow in length of sequence", + "msg" : "313233343030", + "sig" : "3085010000003d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "uint64 overflow in length of sequence", + "msg" : "313233343030", + "sig" : "308901000000000000003d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "length of sequence = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "length of sequence = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length of sequence = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length of sequence = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "incorrect length of sequence", + "msg" : "313233343030", + "sig" : "30ff021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3080021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "303d0280691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab028000c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "lonely sequence tag", + "msg" : "313233343030", + "sig" : "30", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "303f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "303f0000021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "appending unused 0's to sequence", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "appending null value to sequence", + "msg" : "313233343030", + "sig" : "303f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3042498177303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30412500303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "303f303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30422221498177021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304122202500021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3045221e021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0004deadbeef021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3042021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab2222498177021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3041021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab22212500021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3045021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab221f021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3045aa00bb00cd00303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3043aa02aabb303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30452224aa00bb00cd00021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30432222aa02aabb021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3045021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab2225aa00bb00cd00021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "3043021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab2223aa02aabb021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "truncated length of sequence", + "msg" : "313233343030", + "sig" : "3081", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3080303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30412280021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0000021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3041021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab2280021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3080313d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30412280031c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0000021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3041021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab2280031d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "2e3d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "2f3d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "313d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "323d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "ff3d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "using composition for sequence", + "msg" : "313233343030", + "sig" : "3041300102303c1c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "303c021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "303c1c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "3080021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 57, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "3080021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "3080021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e05000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "3080021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "3080021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "3080021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "303f3000021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "303f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "append garbage with high tag number", + "msg" : "313233343030", + "sig" : "3040021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2ebf7f00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "303f303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "truncated sequence: removed last 1 elements", + "msg" : "313233343030", + "sig" : "301e021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "repeating element in sequence", + "msg" : "313233343030", + "sig" : "305c021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "long form encoding of length of integer", + "msg" : "313233343030", + "sig" : "303e02811c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 69, + "comment" : "long form encoding of length of integer", + "msg" : "313233343030", + "sig" : "303e021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab02811d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 70, + "comment" : "length of integer contains leading 0", + "msg" : "313233343030", + "sig" : "303f0282001c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 71, + "comment" : "length of integer contains leading 0", + "msg" : "313233343030", + "sig" : "303f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0282001d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 72, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "303d021d691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "303d021b691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021e00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021c00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "uint32 overflow in length of integer", + "msg" : "313233343030", + "sig" : "30420285010000001c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "uint32 overflow in length of integer", + "msg" : "313233343030", + "sig" : "3042021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0285010000001d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "uint64 overflow in length of integer", + "msg" : "313233343030", + "sig" : "3046028901000000000000001c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "uint64 overflow in length of integer", + "msg" : "313233343030", + "sig" : "3046021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab028901000000000000001d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "length of integer = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304102847fffffff691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "length of integer = 2**31 - 1", + "msg" : "313233343030", + "sig" : "3041021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab02847fffffff00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "length of integer = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30410284ffffffff691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "length of integer = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3041021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0284ffffffff00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "length of integer = 2**40 - 1", + "msg" : "313233343030", + "sig" : "30420285ffffffffff691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "length of integer = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3042021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0285ffffffffff00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "length of integer = 2**64 - 1", + "msg" : "313233343030", + "sig" : "30450288ffffffffffffffff691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "length of integer = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3045021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0288ffffffffffffffff00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "incorrect length of integer", + "msg" : "313233343030", + "sig" : "303d02ff691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "incorrect length of integer", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab02ff00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "301f021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "lonely integer tag", + "msg" : "313233343030", + "sig" : "302002021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "lonely integer tag", + "msg" : "313233343030", + "sig" : "301f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab02", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "303f021e691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0000021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "303f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021f00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "303f021e0000691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 96, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "303f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021f000000c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 97, + "comment" : "appending unused 0's to integer", + "msg" : "313233343030", + "sig" : "303f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0000021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "appending null value to integer", + "msg" : "313233343030", + "sig" : "303f021e691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0500021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "appending null value to integer", + "msg" : "313233343030", + "sig" : "303f021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021f00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "truncated length of integer", + "msg" : "313233343030", + "sig" : "30210281021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "truncated length of integer", + "msg" : "313233343030", + "sig" : "3020021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0281", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "30210500021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3020021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d001c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d011c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d031c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d041c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303dff1c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab001d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab011d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab031d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab041d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92abff1d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "30210200021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3020021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab0200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "using composition for integer", + "msg" : "313233343030", + "sig" : "30412220020169021b1c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "using composition for integer", + "msg" : "313233343030", + "sig" : "3041021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab2221020100021cc6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "303d021c6b1c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d02c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf922b021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbbae", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "303c021b691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "303c021b1c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "303c021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021c00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "303e021dff691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "303e021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021eff00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "replaced integer by infinity", + "msg" : "313233343030", + "sig" : "3022090180021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "replaced integer by infinity", + "msg" : "313233343030", + "sig" : "3021021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "replacing integer with zero", + "msg" : "313233343030", + "sig" : "3022020100021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "replacing integer with zero", + "msg" : "313233343030", + "sig" : "3021021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab020100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d01691c723dd6a7f5d11b8c8e8bd08173428bc48a2c3f031caaec3bbce8021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021dff691c723dd6a7f5d11b8c8e8bd08345fcca52a9b01748ca203383686e021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c96e38dc229580a2ee47371742f7da36054f46611d4da0c9a70206d55021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d0096e38dc229580a2ee47371742f7cba0335ad564fe8b735dfcc7c9792021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021dfe96e38dc229580a2ee47371742f7e8cbd743b75d3c0fce35513c44318021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d01691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303e021d0096e38dc229580a2ee47371742f7da36054f46611d4da0c9a70206d55021d00c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d01c6b899049859a01f5093eab0834104e71ff12bb612ad778fbda8e56b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303c021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021cc6b899049859a01f5093eab08342d7a15e7f4b39eaf3250504f090f1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021dff394766fb67a65fe0af6c154f7cbe11bbc0c7c488012fb1b59eb344d2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021dfe394766fb67a65fe0af6c154f7cbefb18e00ed449ed52887042571a95", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303d021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021d01c6b899049859a01f5093eab08341ee443f383b77fed04e4a614cbb2e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "303c021c691c723dd6a7f5d11b8c8e8bd0825c9fab0b99ee2b25f3658fdf92ab021c394766fb67a65fe0af6c154f7cbe11bbc0c7c488012fb1b59eb344d2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020100021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022020101021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30220201ff021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000001021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffffffff000000000000000000000001090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000001090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 214, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 215, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 216, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff0000000000000000000000020201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 217, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3d", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 218, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 219, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3e", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 220, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000001", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 221, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffffffff000000000000000000000002021d00ffffffffffffffffffffffffffffffff000000000000000000000002", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 222, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3024021d00ffffffffffffffffffffffffffffffff000000000000000000000002090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 223, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffffffff000000000000000000000002090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 224, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30060201010c0130", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 225, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30050201010c00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 226, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30090c0225730c03732573", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 227, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30080201013003020100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 228, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "3003020101", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 229, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "3006020101010100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 230, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3639313930", + "sig" : "303c021c326bc06353f7f9c9f77b8f4b55464e8619944e7879402cca572e041a021c221a25eb9cc8dd66fdf156b2f6ab601ab6d9c509247f8de5d2671a96", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "special case hash", + "msg" : "33393439313934313732", + "sig" : "303c021c3b3008ed596b7fa276498def40d96b1eb2ffb731a44050ffb732e4e6021c6dbb08c56db737e9392ff4f3a54d8b806d70af226ecf413b3465de55", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 232, + "comment" : "special case hash", + "msg" : "35333637363431383737", + "sig" : "303d021d00d1fe269c3061e4b94604e8d612d70887068cc7d5232cd5a9b72923a1021c3c1cbc027d33fb2451d52dce3a828a8c7ecc490a28a94e5e5bb2c4d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 233, + "comment" : "special case hash", + "msg" : "35363731343831303935", + "sig" : "303d021c04586134cc679295dd93499311c4a8af37cb94dadbae18d8ee279b9b021d00bf9170a1b65b665664cf567d40a995ce252a23d6a9f962b05e364486", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 234, + "comment" : "special case hash", + "msg" : "3131323037313732393039", + "sig" : "303d021d00c1f51009b935b4773374364ec3eed72a24b70926e0349c77862f3475021c46df3d98f104ba6602f8041a5bf5495fb240e103d1bd17f2fa878923", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 235, + "comment" : "special case hash", + "msg" : "3131323938303334323336", + "sig" : "303e021d00e822242872f1ecf338a4f773df87b67e9b21bb283acac7d66b26551e021d0094d4e0fc3c6359994a6eaedddd1533f490f72ef85139f8d3b39cf07b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 236, + "comment" : "special case hash", + "msg" : "39383736303239363833", + "sig" : "303c021c7fd45528eb7bfc3710e273c4468f0b50ebf93f94cd0e7a602a4929a6021c46613dd1ffd85df8d71f3498001721fda4982c27a1c291359b05b1b8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 237, + "comment" : "special case hash", + "msg" : "3230323034323936353139", + "sig" : "303d021c36d137b69171a486933b50138d1db1842724766afd25c85b0032daf5021d008e700de21f2fc350a34c7cc19054cf371ecab6f7331ccecf68fca0f4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 238, + "comment" : "special case hash", + "msg" : "31343531363639313830", + "sig" : "303e021d00da3b436908f5a82f26bc17a8577ad2a782946e3a7587b01d253b1dd0021d00a6544e38f24e8117370c049b5d1f6712ea14337a94511224df4496a3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 239, + "comment" : "special case hash", + "msg" : "31303933363835393531", + "sig" : "303c021c4314a2bd139d47be3d9fd9ebdd72a06a220219c7596b944178ee6f5f021c0e6f1d2f57c699654e9c705d7b8fa3c1ccb0f939f6368bed246b2e10", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 240, + "comment" : "special case hash", + "msg" : "36323139353630323031", + "sig" : "303d021c6a25643464682679d84970c603927f4a8ca83e7ef9715dd1ed84c28f021d00932b78d165c225a5253e6201c0b1ded0898ba24de44b23233eb78054", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 241, + "comment" : "special case hash", + "msg" : "35363832343734333033", + "sig" : "303c021c476aaa58677d9e60477cffd026c43248e2cf3cc21e8fdccb75ceefad021c7799fc7af8f9b929203faf899bb5ca1aecf2492555157282dfde790d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 242, + "comment" : "special case hash", + "msg" : "33373336353331373836", + "sig" : "303d021c63a98614a1421e2ebb278de53b61618bafc757122647affd358c667a021d008edba806e0a7e438ca35f98405a8ad2d5c3e8cc2d5c4384233aef0a5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 243, + "comment" : "special case hash", + "msg" : "34373935393033373932", + "sig" : "303e021d00880b5238a014f8b44655b83c175880eb1e8307899a824ea3e07dbd6d021d00a4724c8649fd74e5bc8d7fe6a9067a1376fb8e08dbdaed68980b0f50", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 244, + "comment" : "special case hash", + "msg" : "39333939363131303037", + "sig" : "303e021d00f8743588234634dd9891f4f2f40f4e46b77f97b82dc5dbe234aa6b5d021d0080656e5262bc25e158f3b78f51ae0d6a41cc8cca1aa457221b2eb7fb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 245, + "comment" : "special case hash", + "msg" : "31303837343931313835", + "sig" : "303d021c2a2357e3d8fe34434582be4dabd58b77b388d1d52adcc664f45dece4021d0094be3a369b7c2788df4587ec5bd4163c4cbc40b77de1a85e8bcfb251", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 246, + "comment" : "special case hash", + "msg" : "33323336363738353030", + "sig" : "303d021d00b6b0c0aba6c611300ecad8816242c415f183a2bd4d46cd7769033d9b021c7750b24be02f22dc0b656fe4af377413f9453dff99226915dbb6e08f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 247, + "comment" : "special case hash", + "msg" : "31343438393937373033", + "sig" : "303d021d00a5c1a75c2779f3eb83a65e295927cce4288e9d5c2132a4c7ca92526e021c10fe30f0be33a785385137b57d806140a402b9bd3c1df1b57de6da63", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 248, + "comment" : "special case hash", + "msg" : "35373134363332383037", + "sig" : "303d021d00b92b5521d1a7abe77e8524dbd3001121cf83c08017e3917bc58b5d1c021c224b113779017f6a522171edf930f1b5d4f5e7dedc6d2d514fd7883c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 249, + "comment" : "special case hash", + "msg" : "323236343837343932", + "sig" : "303e021d00ebd3ecf3aa64cdcdd171585a141a4a673a8d5de0ca087dfcdf62432e021d00e0f1a0f7b8f5ac4a42632f87156ad1094079393b03f2051a9fd60249", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 250, + "comment" : "special case hash", + "msg" : "35333533343439343739", + "sig" : "303d021c6c3854297e1f267b64a28e0cd6148e0fadcf85bc8d5c23947543bcb8021d00aa0594ee11312f5d4767d296e5ca83df68072811f81a8d27e178ca5d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 251, + "comment" : "special case hash", + "msg" : "34373837333033383830", + "sig" : "303c021c785ac8c956d7797ae67498775b3c446c41735eb15f3430b49f6a09f2021c5710879ab83994e809c8d2cbd6f2ac5c205b4b8d6226e98be03e7967", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 252, + "comment" : "special case hash", + "msg" : "32323332313935383233", + "sig" : "303e021d00f1f3d016693125ba73981c8f9a1748e5dce1d9634355f26fa536190e021d00b574e97def60dcd0e9177106483791b2edb4ab0342b9f5ebb957d5b0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 253, + "comment" : "special case hash", + "msg" : "3130373339333931393137", + "sig" : "303e021d00e64f3371522cb1a5f0d1511b152b20e01deca0b3284786853cac279a021d00c9a2e5f4ffde22b9d4ed0179ce74fff408ea918dda7685c7980ae61a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 254, + "comment" : "special case hash", + "msg" : "31383831303237333135", + "sig" : "303d021c1f99dd6ef72feeeda6c123baa4fabb126d7dedb64130fae3f4230797021d00e441ec51dca6271b043e95753c4043d7cb4e76fdc13d6aea45fbf243", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 255, + "comment" : "special case hash", + "msg" : "36303631363933393037", + "sig" : "303d021d008637a09627c52766bf96f0b6cea6f2ac3eb303001c5f6fe6d628e4ba021c10b66c599455d40077bb865ed43e2c2cc403473baa6d63b16be48c84", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 256, + "comment" : "special case hash", + "msg" : "38383935323237303934", + "sig" : "303c021c52a010a23e4f9ebb459bbe9f3057e6c19761fb99d25c9b16b8f007d8021c526dc1f34444de00447ba23c76950f2c159579d548b6335d127ea321", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 257, + "comment" : "special case hash", + "msg" : "31353830323334303934", + "sig" : "303d021d00fc49caaada528f3357e5a264f2e7f970ca1b15ca5fee28741d1202ac021c175e884d10d0bfd20b39311ce2c53083da167d1f3dfeb990e59ed628", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 258, + "comment" : "special case hash", + "msg" : "33393635393931353132", + "sig" : "303d021d00d95d539a85c9edacd4e02ede27b0e0b737099612d166c637c83a9f34021c59936a2b90b7f3f3da83f64dec8e347a3bfa57baadf9acea18c071d8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 259, + "comment" : "special case hash", + "msg" : "32323838373332313938", + "sig" : "303c021c1895e65593d71e5635cce022dda19bd155bb9a7f2e307e5ce9127ade021c121b487c320c544dcdd471d46fcde2ce5dc9d17fda70544c4eab50a2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 260, + "comment" : "special case hash", + "msg" : "32323330383837333139", + "sig" : "303d021d00b5f4c85b13b51a5da81a236f1105937f3d98856d2aeb57101b6b499c021c3be74ae770fa6467f76a742eb9e504a815a4a60e74b38bcaa89f9b06", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 261, + "comment" : "special case hash", + "msg" : "313239303536393337", + "sig" : "303c021c07a57197667a0c40423d4811ff96384c9330467e8a28eaa4c0d519f4021c011062c8694494baaed24ff610e1e4227efb59a163c33fafd40100f9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 262, + "comment" : "special case hash", + "msg" : "32373438363536343338", + "sig" : "303c021b7f718615ba1d0a9d27a8c5a678a6225ffe1233ed8b417c9343b310021d00cf6a87e4496725c6a2612f4034ddf4b31c7435e2fc3a163e92d463ba", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 263, + "comment" : "special case hash", + "msg" : "37353833353032363034", + "sig" : "303e021d00ba8f95a4363c493a9f78bb61dbefaa9587d028bb8344420de2b0cf21021d00b3798c2d6e27a2591c2edc18320b78bf11df194b11b3fb498c595232", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 264, + "comment" : "special case hash", + "msg" : "32333237373534323739", + "sig" : "303c021c596b74077801db2e889d3b2aaa3990fe180abc152d48528385ca955d021c38bffd416f779843fad389750003eb0708112a4834c554f476a3e0d1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 265, + "comment" : "special case hash", + "msg" : "373735353038353834", + "sig" : "303d021d008547f62967523a06c9690e5ff66c3f2254cda28f09ffccc222433d39021c3d9ebf664ee551bb7b33157d6c6c5fd456bda3d4ae460215ec1a5f94", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 266, + "comment" : "special case hash", + "msg" : "3137393832363438333832", + "sig" : "303d021d0090ee3fab9c6ce373a1b35fc135fe878280ee25e58a4bd7529e91b4f0021c6451e7526505b44e88472b46eda3fd2679824dcdfc445e67f35ea382", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 267, + "comment" : "special case hash", + "msg" : "32333936373737333635", + "sig" : "303c021c0a530530b6a9238d2d1a3cf468986c87f3b208f61ea0486d53140c17021c5f027a73f31a5cc2bee81ff0019477c542fd782ecde0e551fcd37e93", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 268, + "comment" : "special case hash", + "msg" : "35393938313035383031", + "sig" : "303e021d00beab4abd23df5e2acfff07c82e245dfa7d587d0238c2c9ab9c88a96a021d0098c6507635536840edf604f9baae6408ce4d3fbee694db3abd825011", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "special case hash", + "msg" : "3136363737383237303537", + "sig" : "303d021c3ec8c36335cb98fa07b983c35b7fc256f44a5aa192d6087595145a15021d00c32b7a47ac6271f4593562bbbf91f9e07395a5e4d46970495cf29f05", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "special case hash", + "msg" : "323036323134333632", + "sig" : "303d021d00bd635a741f1f2a1d9ac1698baf5cfc491d5e3f8e15f1cacbe4ffe4dc021c4bb606cf7cc11d0d7d96b83966f42276095ccc445882ed5afddabf1e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "special case hash", + "msg" : "36383432343936303435", + "sig" : "303d021d00812c08622c0a09d949b7628585c4f4f2db4c5591b5da148ff46d5cd4021c2104f9bc9d0079acb3077d2db58f388119500c5322cb9b5389b5c5d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "special case hash", + "msg" : "33323639383937333231", + "sig" : "303e021d00fa4e1c8b0006f269c855eb495fa3a113f643fa8b1fef2b08ab145994021d00fe85b8b522c7f9e8943e0f62643395bd1fcdabc892c315d108b75f65", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "special case hash", + "msg" : "31333837333234363932", + "sig" : "303e021d008c1d9b7911bacb6b4a09582648b992d46a1832eb006178c0c77fcb10021d00becbe12b99f243766da5bdad07461b9226a8298672b4f1adb35357ef", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "special case hash", + "msg" : "34313138383837353336", + "sig" : "303c021c78850a40530aa258e478e7c547d3a5e4944d3524f1676443e4dfb37d021c687058e1ca478f52a30c9a3f8e2eea9d8c40599cd47ef66b9430d17d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "special case hash", + "msg" : "393838363036353435", + "sig" : "303c021c066e7268a6abefe1b4b916ca51c3e958e40dc78c3661313e0ed2e77d021c6404d8a332a837f2ab6bd13e3ee4aad1e9307d449e7f9b7d6332030c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "special case hash", + "msg" : "32343739313135383435", + "sig" : "303c021c4eca73709a67c41603ca5af494c8132483ffc2e0bf171b52de5a5e81021c2c79137cd2add3ce3a76792270e347221a3ad786eafc2682b39bcf95", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "special case hash", + "msg" : "35303736383837333637", + "sig" : "303d021c0178512f8844984222393a63263e0a009601869e632f07eb7470aa05021d00e32657cded1122cee0a4f66ff50a32da1f05de4c5e217acdf5eb6fe2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "special case hash", + "msg" : "393838353036393637", + "sig" : "303d021d00e2c7bf1222ca23a56492873c2d3fa6c7030cc166d693142dcea272b6021c715a4c82fda4404217dea6c0bbf3ac24f8faa2b435fbc6d51a32c4a8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "special case hash", + "msg" : "32373231333036313331", + "sig" : "303c021c49886a8c26c91d649cbfecda6ce8d1441e764c66f5d81dceedb6c5ba021c4370d8bcd4f052fac9491d62850b6a6a85d5acc44d9248c3dff30bf2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "special case hash", + "msg" : "33323034313031363535", + "sig" : "303e021d00e1ae225e1aeca40747ff3e7ad1f75eb9bc90d637160a7f58ce12e591021d00b97cbea3a9323110315760b7e2ede496514b30f0eec521ffeb07a634", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "special case hash", + "msg" : "33313530363830393530", + "sig" : "303d021d008a93b87b46512544fb9a7af5c41e3aa72e40235ef87ccb7108daae48021c157db617ac697df407af7a11626c52a1af7ef189514da39918c43010", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "special case hash", + "msg" : "31373237343630313033", + "sig" : "303e021d00ebdebe6388b9f460fce6d84faa67ded1e864ef09e77ea3ce58a5deff021d00be5052033eb40380c2b1325fe97dcc55841e147a89f02a296b4505ef", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "special case hash", + "msg" : "3134353731343631323235", + "sig" : "303e021d00e85d0667972d003c82afb9e18b702357119b4f38401a5ebdfcbea88c021d00eb7b3e5268a4ce6280f72d7e9a3d74e5cac50b1c3a5296cdb5a49d82", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "special case hash", + "msg" : "34313739353136303930", + "sig" : "303c021c3d243581c0874fd4eb4d80f896c5067429ad455314881951ab5ec6e3021c0ec47aba08ccba88c1a6ddc289f595bda08dc2dd34d12dcefb68094d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "special case hash", + "msg" : "35383932373133303534", + "sig" : "303d021c75c966bbdcef9157d47a134231229f9f5ee8ce458775fc747d4509bd021d00e344fa716e2088d95a55d02a978a416da10f22a5cccf35a2863227cf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "special case hash", + "msg" : "33383936313832323937", + "sig" : "303e021d00cfdf599e986d770b73784d97149f9945fd16d22c302bb796156e7fb4021d00c6409785047b0083f008771b40db8502583208b61c8984671acb0929", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "special case hash", + "msg" : "38323833333436373332", + "sig" : "303e021d00c53c4aeec8f2e7a5cc0e885a6031aa1a6c1b7b7fec83b5084cbe291f021d00b0e6d10a8fd86f958c3b0f4662ed8ca0d6eadbc892aac4200fcf8315", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "special case hash", + "msg" : "33333636393734383931", + "sig" : "303d021c2386550d6e75350bcc32507bfc9beb9c26d72ff82f671c1f5282e98b021d00a55b8de808c4359fb529b80a80d9fc6eddb5ce08082c3b677c689991", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "special case hash", + "msg" : "32313939313533323239", + "sig" : "303d021c1fbd192d955ce02b64a3be5bb21bef22b53a6c6f9576d8f889b09e4e021d00f5a9b673a4ee5aabf1ca8e8289f25b62a3e08b956f7418c03e2d3031", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "special case hash", + "msg" : "35363030333136383232", + "sig" : "303d021d00b80ffba451db9fc2194e450bdd43bc0f53a7d0f4a78900c09fb8d9bc021c0124eeeab9035b6c845959e70b04d1e187d554807d6751afabcc1802", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "special case hash", + "msg" : "383639363531363935", + "sig" : "303c021c187fb026ade3ad16dd4b2813e8ebda433cb6cc3af1615bedf486a9e2021c6fbee53fa884d296f34f7719f74919434d1b7090c485eeed2fb8fd6c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "special case hash", + "msg" : "36353833393236333732", + "sig" : "303d021d00e598a16fe12da79e9814f6985c9a9334010f287dc9e38de857ca5fc0021c19e0ed54f0e08ad091a163b4c7b86d0634da2c86a7a8991f5d8706d8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "special case hash", + "msg" : "3133323035303135373235", + "sig" : "303d021d00b31a10480e397c8aa46f52a0f2fb5c22ebc0534fba156718b50cf6ea021c602004df4b47a2065130ca3b05f1eb02d0b37b79b04b1eb799408346", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "special case hash", + "msg" : "35303835333330373931", + "sig" : "303e021d00bc47e242d19dcc6321913980d73923e430bc6623d219529d586619b6021d0081397dd2f52811b534ed754a937d904f04a7de278fa3bc8926de6946", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "special case hash", + "msg" : "37383636383133313139", + "sig" : "303c021c5be0e0dfb26b1caa88f866504aa8e76f035a82abe00028d962bcfafa021c3c3c1df06026123471bed324ca79c51b28b3d10b1ce877cef21b852d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "special case hash", + "msg" : "32303832353339343239", + "sig" : "303e021d00fe79d0cfe455724792cb5ab0580ad4f2918c1403ec12f0bdd2ce6528021d00f1357cd4afc402994ab868b0163f41701e0f00e561fdd97e0db6f7b9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "special case hash", + "msg" : "3130303635393536363937", + "sig" : "303d021c1858c5d857124cd703e7c2f5e99d5025d6d979539c6f50b1d00fbd34021d00d94a5adb6d9c5001162620415541d49334fb929bc86a350ca4591195", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "special case hash", + "msg" : "33303234313831363034", + "sig" : "303e021d00e6b2ec967cfa25f57234b9ef1d87c5945502cbbd5831c862f00774d1021d00caea26368bffc8e562b2bd03aa6c9dc41c529659fefe6597fce9cd9c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "special case hash", + "msg" : "37373637383532383734", + "sig" : "303d021d00a59b438b2472074a93a289b33f5b13e604977dd3ab4d744d08e1061b021c699574a17dc8c7298c9321ca78552e5128ea801d056f387ba42f7a09", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "special case hash", + "msg" : "353434313939393734", + "sig" : "303d021c748481709c6882c4a130193834a57f4bc714906211ec6cc12c400dff021d00eec6c9d5a06786f821a8117eec3dc025ed3ac74e39e98a16a4aa285c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "special case hash", + "msg" : "35383433343830333931", + "sig" : "303e021d00bc8991b506997403e123136a9c140a4336364733b0815f40d1dbd5fe021d00819503ea3b4c07fc157f948f6949705d560a881fc1c6af4b7391765c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "special case hash", + "msg" : "373138383932363239", + "sig" : "303c021c1caece75c8e31bb0c5cceb0842f23683b8557a97036574ea88ceeabd021c645ad3276aaee22b693647f00dce5f91a03b678b789b667cd3b8e751", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "special case hash", + "msg" : "31373433323233343433", + "sig" : "303c021c3a7d582068aaecaba945203bc445b3312e5cb40886522987aced68d0021c39b3c612b6743a13bb2ffb83514d690cfcb9a7055e3a993cb0863938", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "special case hash", + "msg" : "32343036303035393336", + "sig" : "303e021d00f773c49fd0645716d16e559e22c39101df266cdfa7cb61ce46f85280021d00df6109fd77a241031cf03b376e001d8a3cd2a6b646edbf9e578133f1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "special case hash", + "msg" : "31363134303336393838", + "sig" : "303c021c79cf893f66f7faa5ca08553ea03456107e7bb391a5e51260cedaea84021c32e8e3509468da7216c59975d4f3d5493848a03f864b2332044e68d1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "special case hash", + "msg" : "32303935343235363835", + "sig" : "303d021c025ecd1a7ab765fbfd25a6d7cd3c461e17f465e6958bce9f492b7a5a021d00a1ca95038603d302761e416935acbd6b716a316c9b79c57d4053cb79", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "special case hash", + "msg" : "31303038303938393833", + "sig" : "303d021c3d14a4c21ba4dbd338fdd8b15fcdd0a9228f157cfaf2b09dd4f2aa67021d00e1640e8bd2a6110dc18d6f290b7325814710c0dc88b76f127c5e9e21", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "special case hash", + "msg" : "31353734313437393237", + "sig" : "303c021c258dce916ef78b9d8a87beaf6edd35bcccc08c5de488586e1b7b749a021c4ff500db4d665c7062179c099b2985a814f99fbfa44a3a709024d589", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "special case hash", + "msg" : "32383636373731353232", + "sig" : "303e021d00cecf0aec5357749f357c459575298a3384dc4ac381438ff99acd9993021d00da7adb092a6890e0918c235a62d4a949b0cae5e57856975108fb2b91", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "special case hash", + "msg" : "31363934323830373837", + "sig" : "303d021d00d77f2e547fd68d5db314901da1ff7ecaf3d0c17ec047a974a7cec33e021c443a97afdf882272bf0233c8c4a8d23c9352ad89b1770c26240f6650", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "special case hash", + "msg" : "39393231363932353638", + "sig" : "303e021d00d5dcf93e6e1b93323ea2642d3405a7423cb04f59c03420193f394886021d00ddd5842e4928ee4b5d77d43d4a4bfc7f991c899727b75fc941b52995", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "special case hash", + "msg" : "3131363039343339373938", + "sig" : "303d021d00a9bc3ebc6ee34421326711ce29518d02bd403ead806a3e4502efa0ce021c12610b89a61689a8eb6e062d2524278155fe499ffecc0e0d940d48a7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "special case hash", + "msg" : "37313836313632313030", + "sig" : "303e021d00c703c508784ef71b596dcd61c5b01b45c6c69d2b36a5a3b7701e5976021d00f05444a777204118f3ac2afc92d0212831bf7002158e7c656f4c07db", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "special case hash", + "msg" : "33323934333437313737", + "sig" : "303e021d0080674b740b64d383677c049a6f4baeb214f4a6b5933033853e634578021d009b3a804c75ed790e31966bc25730b7428af8c73c65fb503c06c597eb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 315, + "comment" : "special case hash", + "msg" : "3138353134343535313230", + "sig" : "303c021c7ed658c30f4a0dcc894c39f9320f59a185509ffee45eac6023577c7c021c47ac94a501806d5adffea9fcf3ccd8cf79f3cc47eca9fe38fc4886b4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 316, + "comment" : "special case hash", + "msg" : "343736303433393330", + "sig" : "303d021c397f669cc399a91da96c16efd233f6fe60d1b7caa397cc257843b30b021d00f19375fe66eae4738ec9dc5b7ef51cb33d4cb258f36944d37dd245cb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 317, + "comment" : "special case hash", + "msg" : "32353637333738373431", + "sig" : "303c021c537ec369b3f0d891e166f6c74e5d73dd2c4822210c5fe5f978c34072021c0b183c48b5f6e69245cb76e1e2c39663eedfb74ba9538739ac495ff5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 318, + "comment" : "special case hash", + "msg" : "35373339393334393935", + "sig" : "303d021d00d0ed7159cc3a79988f3c279287ca8ed10bb8f02c8b5a6204aead1223021c75ee1e5c00e81899bfa8545edcc64fdf707dae1f61d976d2f0883777", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 319, + "comment" : "special case hash", + "msg" : "33343738333636313339", + "sig" : "303e021d00cf43329a9781db8044a920758e58399866fe7748c0f5d6a3bcdcbcbd021d00d9740d2dd716290ad4160345bcd4af03af01c44b610b1e5953199075", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 320, + "comment" : "special case hash", + "msg" : "363439303532363032", + "sig" : "303e021d008ab2e92c8c9143f9d8da3bdb1d935cce3ab60ae99b3ccfe863b15d14021d0088c89302e8a9c591c6ed16b1ae46f966004d0b2685449842e291d742", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 321, + "comment" : "special case hash", + "msg" : "34373633383837343936", + "sig" : "303d021c04f60f8450b448198cf7981116de06d4c4888cd26be3a5947092238f021d00cb23fcb33c14f089c2ae030146d68fa65eb9b086fa792f95be8ecf35", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 322, + "comment" : "special case hash", + "msg" : "353739303230303830", + "sig" : "303e021d00f270f7a70a96a0f916c7530c6dea7178e6c087ddbcc60aacd8a7c553021d008b2c378554121365a180ad4edf1a12e566ba55eeabf525356783e603", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 323, + "comment" : "special case hash", + "msg" : "35333434373837383438", + "sig" : "303e021d0085ad01b236ca4a5451969242e16165d322428235a2af8fdcd6c4c7b9021d008eb2998c5e0aaf279793caff59a266ca2068d94ebf77bae81fd0fb6a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 324, + "comment" : "special case hash", + "msg" : "3139323636343130393230", + "sig" : "303d021d00cffdb8d64b5b84b490ff73d77e51cc7797bf67c5ee0a4999def17230021c3baf4b34e1a35e9606a460b395063a554264a9c43cc302ab5abf473e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 325, + "comment" : "special case hash", + "msg" : "33373033393135373035", + "sig" : "303c021c66cda58a5a6ddb9476e36dbad5df542be88d7e447bdc3dfe1d9e8b2c021c0d99d387486a964ebab4e29bad583e46a5a200391d1065768a4e35fd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 326, + "comment" : "special case hash", + "msg" : "3831353435373730", + "sig" : "303c021c3200761902825bd353908accd2be6b482645646971f96dc490706a37021c3ed77899efdbe418370fa7998df3b7c924bed6864535277f805c894f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 327, + "comment" : "special case hash", + "msg" : "313935353330333737", + "sig" : "303e021d00ba0eff0ee46aa9fca5ab8ad64aee4037931d3ad0b953d404ef9f7bdc021d00afdf21df0dcbe39c2f5fa9ef7e1a2bca87d1213d1eca438929ad8982", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 328, + "comment" : "special case hash", + "msg" : "31323637383130393033", + "sig" : "303e021d00a20c6883fc6ec1ca4bb378ac88ed670a742a6284113d5fa3182a1858021d00e0a73b913b94163175d264224cc70736f2fb8e8d58e914b18c921323", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 329, + "comment" : "special case hash", + "msg" : "3131313830373230383135", + "sig" : "303e021d00f2f4af956b0c5409949d377e9bc68e4f1abef7969b518f8beacf27db021d00df3a7b5993d2393ade70a2cfc1e8671a78ca4fecb56425a661a2d2fc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 330, + "comment" : "special case hash", + "msg" : "38333831383639323930", + "sig" : "303c021c331a1a553494f8524adb4e8a722d558965fb703ae432bf3cbdb255c2021c5ab6e3dee6a2516fc4e0ac88e6dfc81d2bc37c98949cc03e521d389d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 331, + "comment" : "special case hash", + "msg" : "33313331323837323737", + "sig" : "303e021d00867135558e06e19796ebce8e3555c607a6607d46f7c8da6b8552ffc1021d008e827e8b9a4f74efeec7d7ba5c23428fde0227df55a1efc179a353b1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 332, + "comment" : "special case hash", + "msg" : "3134333331393236353338", + "sig" : "303d021c6746903ca095bfd3f6378a70092723483ca190b2392d8b1ad337969f021d00f33bfae0835c23a80ec9f33ce9a9035c192836a0b2fadd347d803f96", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 333, + "comment" : "special case hash", + "msg" : "333434393038323336", + "sig" : "303d021c7fc0d8739ecfe349e506e71203a6e60e628a1bb0c67d5e574cb8831c021d00cf8bb1557152c57550a0fde6571456fa752782f7f92f7bb235dde39f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 334, + "comment" : "special case hash", + "msg" : "36383239383335393239", + "sig" : "303e021d00b4486e3139e0b1542892db3d3f51b0524894e19cb00cd07b03ee9c97021d00ad9728d77a8b7b4fa435b3345847860c332d65d8152aa6503ab18755", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 335, + "comment" : "special case hash", + "msg" : "33343435313538303233", + "sig" : "303e021d00afbbdc8e50e801ecbd2e3705079717f4f9d69f3b3d85215aeecb4fbc021d00eceadd4e2cc9cea10b56d16a03fa551fec3eb808bd8d9f0926d14ed3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 336, + "comment" : "special case hash", + "msg" : "3132363937393837363434", + "sig" : "303d021c4a762f7d146f9eafff5ad11a6978260c818b801c3488dd60411f5cf6021d009ea77512585620ef2cfae8b8c9d8171229a32197e1949561bb75a049", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 337, + "comment" : "special case hash", + "msg" : "333939323432353533", + "sig" : "303d021c227fe52b579833feee16c287d29273e2256df68aff0b94d2752d877b021d00bd79935e5faa8e9356622fea0135ecf796daf60333d5ab125f71e512", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 338, + "comment" : "special case hash", + "msg" : "31363031393737393737", + "sig" : "303e021d00cd5365983eb165db39ba0c66c3a45b2ce1370c9ad14a9aa76dd4633a021d00a8c77ce42ab1c888a6b5d04b71139fd882328622e15e80252e5cf7da", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 339, + "comment" : "special case hash", + "msg" : "3130383738373535313435", + "sig" : "303c021c54d6d44373f7dfc98455a22cd39a0b320fabc33215216b37365b5a16021c29cc690f2467c02e07bc416ad47204975af8c5c3346973f2b03ded3d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 340, + "comment" : "special case hash", + "msg" : "37303034323532393939", + "sig" : "303c021c2f5048c9ef9f30da7cb3fe4624552200f9e57a46d79db0484a0d9cf2021c06dad3a4682725852869a1a459bec865661e1a38a9e546eeaac7cb84", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 341, + "comment" : "special case hash", + "msg" : "31353635333235323833", + "sig" : "303e021d00abbf0a02332fbea779899d31d3abd2d22c9c02d4058ced639bf06c45021d00cce0570f3812e5cfcb23376c554c7fc35dbcfeb623a7958c664ac6a4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 342, + "comment" : "special case hash", + "msg" : "3233383236333432333530", + "sig" : "303d021c1c30cb8bc21087b77eb1216ee8629e3676d925f1ae15077cc631da4f021d00ee998157bdefb77d1044e983a6afec7d91a23d95c937fc5c6548c989", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 343, + "comment" : "special case hash", + "msg" : "31343437383437303635", + "sig" : "303c021c43ee11a7ab62e2125e765c2ce5d4f84704183539810512268d87f195021c65897e54025777659ee802b39c6bfd5ccc5706a9d1b38f95c078abaf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 344, + "comment" : "special case hash", + "msg" : "3134323630323035353434", + "sig" : "303e021d00a1fe3f4d3f43aaa3dcafa79ed99fbc045c11c352caacd89f0f63847e021d00ca2e37bd2c13b9fb3f8a55b7a67eb034240395abd39fecde75141336", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 345, + "comment" : "special case hash", + "msg" : "31393933383335323835", + "sig" : "303e021d00bd290286ca08485ea4137010c67203c2455e7b669d153c6be40087c7021d0097dd7502ba3637f33baea5b2398647ad24c0fe35072bd963149b5aa0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 346, + "comment" : "special case hash", + "msg" : "34323932313533353233", + "sig" : "303e021d00c917269a5a4ce80b7fe54a8bed49326b50527a4d2fb0a3093182b5a5021d00a195ec0e69e3172e854e87dd651b44433fcd7dcbb7bd59515d2afe8e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 347, + "comment" : "special case hash", + "msg" : "34343539393031343936", + "sig" : "303c021c0b7b5aab8364dd4b11001a0b986d5aa4fb61ee720237417a7f63722f021c7f13b411e645e819fed1b925ebe807d9560b44d0ba1b75bd2fbd1294", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 348, + "comment" : "special case hash", + "msg" : "31333933393731313731", + "sig" : "303c021c505b974f8ecf07b60ffdbd2b2df9324de92b39476eb763a4c25f126a021c1c36ed1dee772c724205f717c383f49a87a5bc3caa0ef81360f9d800", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 349, + "comment" : "special case hash", + "msg" : "32333930363936343935", + "sig" : "303d021c24219e49b98a9b64e56d21c908c870eb88b447d9f1ddb735083d6df2021d00bc4d7644faeff1e134443b2bb3bb2a20e2a4a7c193180626127ce937", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 350, + "comment" : "special case hash", + "msg" : "3131343436303536323634", + "sig" : "303d021c083246081cf2f8c5e1cd42b60450fc6cac3b0ab03d38bdd271cd7370021d008d117ec32dbf939394499f7dbc2ab77290e9222d6d60ea02ce45c58a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 351, + "comment" : "special case hash", + "msg" : "363835303034373530", + "sig" : "303c021c24916961dd0d168c2878ca4fd065b81311c03b7f23f8416f4a23b14b021c1e37e3c03b2333b33bbb2ebe05b031042af19315adfdccdfc8d078ee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 352, + "comment" : "special case hash", + "msg" : "3232323035333630363139", + "sig" : "303e021d008df5468b123b92477a5c57ea86c54c5c9e41d119370dc18922aa8303021d0086bdf06b75f4d49d02c5806926f5d01b1a4f6a8146664a03fa820772", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 353, + "comment" : "special case hash", + "msg" : "36323135363635313234", + "sig" : "303d021d00f65bf16f7ced97b0cdc22b08c62ef811306813134b001bc51140e828021c3a9b7c008cdaf803368df9ee50e274c7a9f9369344d9918e0c08dba9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 354, + "comment" : "Signature generated without truncating the hash", + "msg" : "313233343030", + "sig" : "303c021c6239877430e268f1a3ada2c90357247c6ca6687f49023bed0fb5b597021c355c60c09f0dacb9d74b7ccde71806c50fda8750c6ecb7abba910ac7", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "044408e5c95e332ab6c2823a63959391d60a6d69c59eb1f7bd272206b9f5278e901fb4773aeeb2d8255ba4df3cf3db7e0557dbc6134c55f3a6", + "wx" : "4408e5c95e332ab6c2823a63959391d60a6d69c59eb1f7bd272206b9", + "wy" : "00f5278e901fb4773aeeb2d8255ba4df3cf3db7e0557dbc6134c55f3a6" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00044408e5c95e332ab6c2823a63959391d60a6d69c59eb1f7bd272206b9f5278e901fb4773aeeb2d8255ba4df3cf3db7e0557dbc6134c55f3a6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAERAjlyV4zKrbCgjpjlZOR1gptacWesfe9\nJyIGufUnjpAftHc67rLYJVuk3zzz234FV9vGE0xV86Y=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 355, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "3030020f00e95c1f470fc1ec22d6baa3a3d5c1021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 356, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "303e021d00fffffffffffffffffffffffffffffffefffffffffffffffffffffffe021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3a", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04315a83008dba00b351c3f9fca0811c3ae1884fa9a2a75e6d5e71f269504bbe6a25be253b582efab4b8b9e61372767a7a3a423c0943127296", + "wx" : "315a83008dba00b351c3f9fca0811c3ae1884fa9a2a75e6d5e71f269", + "wy" : "504bbe6a25be253b582efab4b8b9e61372767a7a3a423c0943127296" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004315a83008dba00b351c3f9fca0811c3ae1884fa9a2a75e6d5e71f269504bbe6a25be253b582efab4b8b9e61372767a7a3a423c0943127296", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEMVqDAI26ALNRw/n8oIEcOuGIT6mip15t\nXnHyaVBLvmolviU7WC76tLi55hNydnp6OkI8CUMScpY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 357, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "303e021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3c021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a3b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "042f6983b6e9f8ef96c2d981f69be54b06591ed73fe40c8a546b936a7971bf57726c26c811d7625a9d851951c1fffe236b0eb3b896bc4c98ef", + "wx" : "2f6983b6e9f8ef96c2d981f69be54b06591ed73fe40c8a546b936a79", + "wy" : "71bf57726c26c811d7625a9d851951c1fffe236b0eb3b896bc4c98ef" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00042f6983b6e9f8ef96c2d981f69be54b06591ed73fe40c8a546b936a7971bf57726c26c811d7625a9d851951c1fffe236b0eb3b896bc4c98ef", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEL2mDtun475bC2YH2m+VLBlke1z/kDIpU\na5NqeXG/V3JsJsgR12JanYUZUcH//iNrDrO4lrxMmO8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 358, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021c3d5052691b8dc89debad360466f2a39e82e8ae2aefb77c3c92ad7cd1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04d1f515971cc9391153569c2befa1f915e2931110757760ebd7e61f8641c3db8beea20b13205389dcc4ba8a6af4d6da2604cacd7184ec9dbc", + "wx" : "00d1f515971cc9391153569c2befa1f915e2931110757760ebd7e61f86", + "wy" : "41c3db8beea20b13205389dcc4ba8a6af4d6da2604cacd7184ec9dbc" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d1f515971cc9391153569c2befa1f915e2931110757760ebd7e61f8641c3db8beea20b13205389dcc4ba8a6af4d6da2604cacd7184ec9dbc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE0fUVlxzJORFTVpwr76H5FeKTERB1d2Dr\n1+YfhkHD24vuogsTIFOJ3MS6imr01tomBMrNcYTsnbw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 359, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "303d021c7fffffffffffffffffffffffffffffffffffffffffffffffffffffff021d00bf19ab4d3ebf5a1a49d765909308daa88c2b7be3969db552ea30562b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04e8f90a717714f0158d9521f18c14ae8c83bf1eeba115c46cbdabb20b66f50ac13461c02da02edfe4296a1f543dde7b4359f905e04193d3cf", + "wx" : "00e8f90a717714f0158d9521f18c14ae8c83bf1eeba115c46cbdabb20b", + "wy" : "66f50ac13461c02da02edfe4296a1f543dde7b4359f905e04193d3cf" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004e8f90a717714f0158d9521f18c14ae8c83bf1eeba115c46cbdabb20b66f50ac13461c02da02edfe4296a1f543dde7b4359f905e04193d3cf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE6PkKcXcU8BWNlSHxjBSujIO/HuuhFcRs\nvauyC2b1CsE0YcAtoC7f5ClqH1Q93ntDWfkF4EGT088=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 360, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04723bc0c9b7ce6ea784ec075036cede90452c76576bd8fb5be4dc0fb1cf405820d92f48552b551c7b11f49406dc892fd659971ae7f9e74b59", + "wx" : "723bc0c9b7ce6ea784ec075036cede90452c76576bd8fb5be4dc0fb1", + "wy" : "00cf405820d92f48552b551c7b11f49406dc892fd659971ae7f9e74b59" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004723bc0c9b7ce6ea784ec075036cede90452c76576bd8fb5be4dc0fb1cf405820d92f48552b551c7b11f49406dc892fd659971ae7f9e74b59", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEcjvAybfObqeE7AdQNs7ekEUsdldr2Ptb\n5NwPsc9AWCDZL0hVK1UcexH0lAbciS/WWZca5/nnS1k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 361, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020103", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04a0dcce127084f955a4e49a7c86b9b91b05ae7afd6eb07225a6541d88f10a1d4fef93934967bb6c5d8792bbd47ab3abb406899a00b1c91b4a", + "wx" : "00a0dcce127084f955a4e49a7c86b9b91b05ae7afd6eb07225a6541d88", + "wy" : "00f10a1d4fef93934967bb6c5d8792bbd47ab3abb406899a00b1c91b4a" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a0dcce127084f955a4e49a7c86b9b91b05ae7afd6eb07225a6541d88f10a1d4fef93934967bb6c5d8792bbd47ab3abb406899a00b1c91b4a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEoNzOEnCE+VWk5Jp8hrm5GwWuev1usHIl\nplQdiPEKHU/vk5NJZ7tsXYeSu9R6s6u0BomaALHJG0o=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 362, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020103020104", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 363, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3022021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c2a40020104", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04e10abc9fe15bcc63f009e161aaee26602415bcb45bc6c99ce7ab2b10fbebff4e4de0dfaaf04594dd603cee80b5d9ab78b6707608a95e574d", + "wx" : "00e10abc9fe15bcc63f009e161aaee26602415bcb45bc6c99ce7ab2b10", + "wy" : "00fbebff4e4de0dfaaf04594dd603cee80b5d9ab78b6707608a95e574d" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004e10abc9fe15bcc63f009e161aaee26602415bcb45bc6c99ce7ab2b10fbebff4e4de0dfaaf04594dd603cee80b5d9ab78b6707608a95e574d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE4Qq8n+FbzGPwCeFhqu4mYCQVvLRbxsmc\n56srEPvr/05N4N+q8EWU3WA87oC12at4tnB2CKleV00=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 364, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3022020103021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c6f00c4", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04fbfabe6c640856ae5dcdc9e4b706fb3db23ddca46b80b9057ab9e44f6b62d4697977ffe19bf3185083b1ede2161aa5725401a8f57851fc82", + "wx" : "00fbfabe6c640856ae5dcdc9e4b706fb3db23ddca46b80b9057ab9e44f", + "wy" : "6b62d4697977ffe19bf3185083b1ede2161aa5725401a8f57851fc82" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004fbfabe6c640856ae5dcdc9e4b706fb3db23ddca46b80b9057ab9e44f6b62d4697977ffe19bf3185083b1ede2161aa5725401a8f57851fc82", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE+/q+bGQIVq5dzcnktwb7PbI93KRrgLkF\nernkT2ti1Gl5d//hm/MYUIOx7eIWGqVyVAGo9XhR/II=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 365, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "302302020100021d00c993264c993264c993264c99326411d2e55b3214a8d67528812a55ab", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0491a85b3c5e90b409f6b8d3bca9117a54a40f4162b388bb9367fd6439f1cedf20ab52eb7154b7ea1f2934a9c8292906e18a0e572002cd2f7c", + "wx" : "0091a85b3c5e90b409f6b8d3bca9117a54a40f4162b388bb9367fd6439", + "wy" : "00f1cedf20ab52eb7154b7ea1f2934a9c8292906e18a0e572002cd2f7c" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000491a85b3c5e90b409f6b8d3bca9117a54a40f4162b388bb9367fd6439f1cedf20ab52eb7154b7ea1f2934a9c8292906e18a0e572002cd2f7c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEkahbPF6QtAn2uNO8qRF6VKQPQWKziLuT\nZ/1kOfHO3yCrUutxVLfqHyk0qcgpKQbhig5XIALNL3w=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 366, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "302702072d9b4d347952cc021c3e85d56474b5c55fbe86608442a84b2bf093b7d75f53a47250e1c70c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04d1ca7a5c1aa086b2951c1ac14e005f0072fb28383973a05117f9652cce523c05ebe94991c47fecd241d0a07e86c88ab3c620eae792aba3d1", + "wx" : "00d1ca7a5c1aa086b2951c1ac14e005f0072fb28383973a05117f9652c", + "wy" : "00ce523c05ebe94991c47fecd241d0a07e86c88ab3c620eae792aba3d1" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d1ca7a5c1aa086b2951c1ac14e005f0072fb28383973a05117f9652cce523c05ebe94991c47fecd241d0a07e86c88ab3c620eae792aba3d1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE0cp6XBqghrKVHBrBTgBfAHL7KDg5c6BR\nF/llLM5SPAXr6UmRxH/s0kHQoH6GyIqzxiDq55Kro9E=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 367, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "302d020d1033e67e37b32b445580bf4efb021c02fd02fd02fd02fd02fd02fd02fd0043a4fd2da317247308c74dc6b8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "043565af2a481f9390e71d7642717d0427e02e5e7de8a3c0c1ffd5f33e9474547e0d54dcaae85494c74faa23394a056e41c2839638b8523b72", + "wx" : "3565af2a481f9390e71d7642717d0427e02e5e7de8a3c0c1ffd5f33e", + "wy" : "009474547e0d54dcaae85494c74faa23394a056e41c2839638b8523b72" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00043565af2a481f9390e71d7642717d0427e02e5e7de8a3c0c1ffd5f33e9474547e0d54dcaae85494c74faa23394a056e41c2839638b8523b72", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAENWWvKkgfk5DnHXZCcX0EJ+AuXn3oo8DB\n/9XzPpR0VH4NVNyq6FSUx0+qIzlKBW5BwoOWOLhSO3I=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 368, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "302302020100021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0429c694790fbd23777cfde434badcb061a326a5534264bcfe193c716c178a943f7bd4fb132565ba602358b13433a5217ac04cc035566c73f8", + "wx" : "29c694790fbd23777cfde434badcb061a326a5534264bcfe193c716c", + "wy" : "178a943f7bd4fb132565ba602358b13433a5217ac04cc035566c73f8" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000429c694790fbd23777cfde434badcb061a326a5534264bcfe193c716c178a943f7bd4fb132565ba602358b13433a5217ac04cc035566c73f8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEKcaUeQ+9I3d8/eQ0utywYaMmpVNCZLz+\nGTxxbBeKlD971PsTJWW6YCNYsTQzpSF6wEzANVZsc/g=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 369, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "302e020d062522bbd3ecbe7c39e93e7c24021d00d05434abacd859ed74185e75b751c6d9f60c7921dacfbb8e19cdba8e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "048fd43aac8556f4665fd4c13f4e151140f42a395763c5da247a398f979687d24a9fcd6b20a59451c348a6364d0ffaf0ecfe164313db6594ab", + "wx" : "008fd43aac8556f4665fd4c13f4e151140f42a395763c5da247a398f97", + "wy" : "009687d24a9fcd6b20a59451c348a6364d0ffaf0ecfe164313db6594ab" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048fd43aac8556f4665fd4c13f4e151140f42a395763c5da247a398f979687d24a9fcd6b20a59451c348a6364d0ffaf0ecfe164313db6594ab", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEj9Q6rIVW9GZf1ME/ThURQPQqOVdjxdok\nejmPl5aH0kqfzWsgpZRRw0imNk0P+vDs/hZDE9tllKs=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 370, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "303d021d00ffffffffffffffffffffffffffff16a2e0b8f03e13dd29455c5c29bd021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04c2ae0e357a43f97549a725ae3704449051c96bf3633355c35b6eb7e96a84dfb6d4517d1de46b18786a506178724bf4ae4f9e418c75ab17ef", + "wx" : "00c2ae0e357a43f97549a725ae3704449051c96bf3633355c35b6eb7e9", + "wy" : "6a84dfb6d4517d1de46b18786a506178724bf4ae4f9e418c75ab17ef" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c2ae0e357a43f97549a725ae3704449051c96bf3633355c35b6eb7e96a84dfb6d4517d1de46b18786a506178724bf4ae4f9e418c75ab17ef", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEwq4ONXpD+XVJpyWuNwREkFHJa/NjM1XD\nW2636WqE37bUUX0d5GsYeGpQYXhyS/SuT55BjHWrF+8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 371, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 372, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3021021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04961617d9855f202fd600b584abe94a46674927cfdc6333c5be56ce7b89b4150d9ccdfbd77e7682ca862c0c3e96d89c918b7d3b7bbb92ff43", + "wx" : "00961617d9855f202fd600b584abe94a46674927cfdc6333c5be56ce7b", + "wy" : "0089b4150d9ccdfbd77e7682ca862c0c3e96d89c918b7d3b7bbb92ff43" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004961617d9855f202fd600b584abe94a46674927cfdc6333c5be56ce7b89b4150d9ccdfbd77e7682ca862c0c3e96d89c918b7d3b7bbb92ff43", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAElhYX2YVfIC/WALWEq+lKRmdJJ8/cYzPF\nvlbOe4m0FQ2czfvXfnaCyoYsDD6W2JyRi307e7uS/0M=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 373, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151e021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "048db53fe4168df43ee538bc9d758b8c26fa433fb0101bcbad039585de2310dfc20835379ea406993036fd4bb0f67d14760e1eb414c32dd1f3", + "wx" : "008db53fe4168df43ee538bc9d758b8c26fa433fb0101bcbad039585de", + "wy" : "2310dfc20835379ea406993036fd4bb0f67d14760e1eb414c32dd1f3" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048db53fe4168df43ee538bc9d758b8c26fa433fb0101bcbad039585de2310dfc20835379ea406993036fd4bb0f67d14760e1eb414c32dd1f3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEjbU/5BaN9D7lOLyddYuMJvpDP7AQG8ut\nA5WF3iMQ38IINTeepAaZMDb9S7D2fRR2Dh60FMMt0fM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 374, + "comment" : "edge case for signature malleability", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151f021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "040b7fa61983e7a227f738847d457f3e8cf0a4085c312fb6dcec822570ee7434ce2ff3fbcc1d0960379876e9dd5bed28aad576eea233a44b0d", + "wx" : "0b7fa61983e7a227f738847d457f3e8cf0a4085c312fb6dcec822570", + "wy" : "00ee7434ce2ff3fbcc1d0960379876e9dd5bed28aad576eea233a44b0d" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00040b7fa61983e7a227f738847d457f3e8cf0a4085c312fb6dcec822570ee7434ce2ff3fbcc1d0960379876e9dd5bed28aad576eea233a44b0d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEC3+mGYPnoif3OIR9RX8+jPCkCFwxL7bc\n7IIlcO50NM4v8/vMHQlgN5h26d1b7Siq1XbuojOkSw0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 375, + "comment" : "edge case for signature malleability", + "msg" : "313233343030", + "sig" : "303c021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151f021c7fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e151f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0455b212919cd6886b13cd7a2556430ce442e86942f1bf6e4618ae363e795c664ae960ee1106308b7dba91240ab0c3ef8beb7d0a4d7a102a7f", + "wx" : "55b212919cd6886b13cd7a2556430ce442e86942f1bf6e4618ae363e", + "wy" : "795c664ae960ee1106308b7dba91240ab0c3ef8beb7d0a4d7a102a7f" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000455b212919cd6886b13cd7a2556430ce442e86942f1bf6e4618ae363e795c664ae960ee1106308b7dba91240ab0c3ef8beb7d0a4d7a102a7f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEVbISkZzWiGsTzXolVkMM5ELoaULxv25G\nGK42PnlcZkrpYO4RBjCLfbqRJAqww++L630KTXoQKn8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 376, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c43f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04c0288a63ce32263f3651198dab801c896fb9308362fc40e35959e14010d00bd1c228cfb6a5faa647387804e34fa1a7f9fcc472c05ea2eeda", + "wx" : "00c0288a63ce32263f3651198dab801c896fb9308362fc40e35959e140", + "wy" : "10d00bd1c228cfb6a5faa647387804e34fa1a7f9fcc472c05ea2eeda" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c0288a63ce32263f3651198dab801c896fb9308362fc40e35959e14010d00bd1c228cfb6a5faa647387804e34fa1a7f9fcc472c05ea2eeda", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEwCiKY84yJj82URmNq4AciW+5MINi/EDj\nWVnhQBDQC9HCKM+2pfqmRzh4BONPoaf5/MRywF6i7to=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 377, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d00bc07ff041506dc73a75086a4325211e696eb6b31da8ff5c2c728d38d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "040c8e2cb5f6a903e1cccf3ac2d465f1d0dc3452237fd9e8a4df5d5341d044ca8ceecb54a1b951270971e5ab4eb226116c48c553499d1a4899", + "wx" : "0c8e2cb5f6a903e1cccf3ac2d465f1d0dc3452237fd9e8a4df5d5341", + "wy" : "00d044ca8ceecb54a1b951270971e5ab4eb226116c48c553499d1a4899" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00040c8e2cb5f6a903e1cccf3ac2d465f1d0dc3452237fd9e8a4df5d5341d044ca8ceecb54a1b951270971e5ab4eb226116c48c553499d1a4899", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEDI4stfapA+HMzzrC1GXx0Nw0UiN/2eik\n311TQdBEyozuy1ShuVEnCXHlq06yJhFsSMVTSZ0aSJk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 378, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "041ff6b9901784d88b25527b3702622a2734b83d8a0fed0f740bb784e20e83ee0aa82933dcdc637a3760606a04974c2dc75f12095f8fdaf003", + "wx" : "1ff6b9901784d88b25527b3702622a2734b83d8a0fed0f740bb784e2", + "wy" : "0e83ee0aa82933dcdc637a3760606a04974c2dc75f12095f8fdaf003" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00041ff6b9901784d88b25527b3702622a2734b83d8a0fed0f740bb784e20e83ee0aa82933dcdc637a3760606a04974c2dc75f12095f8fdaf003", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEH/a5kBeE2IslUns3AmIqJzS4PYoP7Q90\nC7eE4g6D7gqoKTPc3GN6N2BgagSXTC3HXxIJX4/a8AM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 379, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "303d021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021d00aaaaaaaaaaaaaaaaaaaaaaaaaaaa0f17407b4ad40d3e1b8392e81c29", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b21faca17b68058752d943a81f853b800562df8b2172e150953c624201c2c0f5ed3b342956cacd26f9097562d0fb0a3ddab91c5ae7e90c01", + "wx" : "00b21faca17b68058752d943a81f853b800562df8b2172e150953c6242", + "wy" : "01c2c0f5ed3b342956cacd26f9097562d0fb0a3ddab91c5ae7e90c01" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b21faca17b68058752d943a81f853b800562df8b2172e150953c624201c2c0f5ed3b342956cacd26f9097562d0fb0a3ddab91c5ae7e90c01", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEsh+soXtoBYdS2UOoH4U7gAVi34shcuFQ\nlTxiQgHCwPXtOzQpVsrNJvkJdWLQ+wo92rkcWufpDAE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 380, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00c152aafea3a8612ec83a7dc9448e6600ae6a772d75ad2caf19f9390e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04f49278419e4f506889b0168b1fce1f87ee5b61efa0e73c7833eeb29cb1b334f81be8f05f3b2e98d38b030cff57947b96135ec4465c5e53f3", + "wx" : "00f49278419e4f506889b0168b1fce1f87ee5b61efa0e73c7833eeb29c", + "wy" : "00b1b334f81be8f05f3b2e98d38b030cff57947b96135ec4465c5e53f3" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004f49278419e4f506889b0168b1fce1f87ee5b61efa0e73c7833eeb29cb1b334f81be8f05f3b2e98d38b030cff57947b96135ec4465c5e53f3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE9JJ4QZ5PUGiJsBaLH84fh+5bYe+g5zx4\nM+6ynLGzNPgb6PBfOy6Y04sDDP9XlHuWE17ERlxeU/M=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 381, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c4e158ef86cc53054f1635c74e65508206048929315e097a59f1519e2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0475c6a886e22bc04b996d4a19575ce0c6686b449b6e05ef1301bd8ba233ab29f65df2d4144da2b21e90359a064765c95e325bb7e54ca28e40", + "wx" : "75c6a886e22bc04b996d4a19575ce0c6686b449b6e05ef1301bd8ba2", + "wy" : "33ab29f65df2d4144da2b21e90359a064765c95e325bb7e54ca28e40" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000475c6a886e22bc04b996d4a19575ce0c6686b449b6e05ef1301bd8ba233ab29f65df2d4144da2b21e90359a064765c95e325bb7e54ca28e40", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEdcaohuIrwEuZbUoZV1zgxmhrRJtuBe8T\nAb2LojOrKfZd8tQUTaKyHpA1mgZHZcleMlu35UyijkA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 382, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00e2ac0b24512e84f6fb015620d689d30d14736cf00c18838753c3814f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04f554014cc14f319c18f5fa6cd739249075ff35ba3b2afdab5329ef0fd2c501f25a704addbd85c0e022748956e5998d99c387fbfd343c89e0", + "wx" : "00f554014cc14f319c18f5fa6cd739249075ff35ba3b2afdab5329ef0f", + "wy" : "00d2c501f25a704addbd85c0e022748956e5998d99c387fbfd343c89e0" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004f554014cc14f319c18f5fa6cd739249075ff35ba3b2afdab5329ef0fd2c501f25a704addbd85c0e022748956e5998d99c387fbfd343c89e0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE9VQBTMFPMZwY9fps1zkkkHX/Nbo7Kv2r\nUynvD9LFAfJacErdvYXA4CJ0iVblmY2Zw4f7/TQ8ieA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 383, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c6c5221f3c2de0c6fbc07ff04150679b57f57512b814f413aebafe731", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04bcfa8db704aca56feb23bd4b4049213233aa652045a0a81a2e0da64c091b359f7be7ae00a0e9777d9510f847430b5dfda878e66d4fb0d62f", + "wx" : "00bcfa8db704aca56feb23bd4b4049213233aa652045a0a81a2e0da64c", + "wy" : "091b359f7be7ae00a0e9777d9510f847430b5dfda878e66d4fb0d62f" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004bcfa8db704aca56feb23bd4b4049213233aa652045a0a81a2e0da64c091b359f7be7ae00a0e9777d9510f847430b5dfda878e66d4fb0d62f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEvPqNtwSspW/rI71LQEkhMjOqZSBFoKga\nLg2mTAkbNZ97564AoOl3fZUQ+EdDC139qHjmbU+w1i8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 384, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c221f3c2de0c6fbc07ff041506dc71b5a312063d87beb4c30c289210f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "049fd4d828ae98056be58fa69eaf9cde98ca0ed9b415d6463fa1864d9fb2a5e41f10e8789450217daafd259f204aed87b0e26100f43f7c5bad", + "wx" : "009fd4d828ae98056be58fa69eaf9cde98ca0ed9b415d6463fa1864d9f", + "wy" : "00b2a5e41f10e8789450217daafd259f204aed87b0e26100f43f7c5bad" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00049fd4d828ae98056be58fa69eaf9cde98ca0ed9b415d6463fa1864d9fb2a5e41f10e8789450217daafd259f204aed87b0e26100f43f7c5bad", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEn9TYKK6YBWvlj6aer5zemMoO2bQV1kY/\noYZNn7Kl5B8Q6HiUUCF9qv0lnyBK7Yew4mEA9D98W60=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 385, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c443e785bc18df780ffe082a0db8e36b46240c7b0f7d698618512421e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "046123a33969f2e036fc27885f55755d391cb0c2d3fafb0c4056c1995da03bb490047e88fe7e608912a6205b65f950a8a0a360362d3339e62c", + "wx" : "6123a33969f2e036fc27885f55755d391cb0c2d3fafb0c4056c1995d", + "wy" : "00a03bb490047e88fe7e608912a6205b65f950a8a0a360362d3339e62c" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00046123a33969f2e036fc27885f55755d391cb0c2d3fafb0c4056c1995da03bb490047e88fe7e608912a6205b65f950a8a0a360362d3339e62c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEYSOjOWny4Db8J4hfVXVdORywwtP6+wxA\nVsGZXaA7tJAEfoj+fmCJEqYgW2X5UKigo2A2LTM55iw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 386, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00c2de0c6fbc07ff041506dc73a74fd50136878b7e1341521b2f880b19", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04a10b7aa7785b2f2791b1d4c43e127aab5669612d740b38abaa0d306ec178f216fad379ad80baa0eac57bf9a56d446d685576371b74762382", + "wx" : "00a10b7aa7785b2f2791b1d4c43e127aab5669612d740b38abaa0d306e", + "wy" : "00c178f216fad379ad80baa0eac57bf9a56d446d685576371b74762382" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004a10b7aa7785b2f2791b1d4c43e127aab5669612d740b38abaa0d306ec178f216fad379ad80baa0eac57bf9a56d446d685576371b74762382", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEoQt6p3hbLyeRsdTEPhJ6q1ZpYS10Czir\nqg0wbsF48hb603mtgLqg6sV7+aVtRG1oVXY3G3R2I4I=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 387, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d009f56aa80ae2bcf689be2c11b5db7e3a28983b4a7590692edcf5f8db6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04e012c23c6867e9553313d0179e9db953de7c368cdb59abe05f1c52bad352a57bb59c45159352c114eeb696ec3b79caa835ef5c2ae71ddcfa", + "wx" : "00e012c23c6867e9553313d0179e9db953de7c368cdb59abe05f1c52ba", + "wy" : "00d352a57bb59c45159352c114eeb696ec3b79caa835ef5c2ae71ddcfa" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004e012c23c6867e9553313d0179e9db953de7c368cdb59abe05f1c52bad352a57bb59c45159352c114eeb696ec3b79caa835ef5c2ae71ddcfa", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE4BLCPGhn6VUzE9AXnp25U958NozbWavg\nXxxSutNSpXu1nEUVk1LBFO62luw7ecqoNe9cKucd3Po=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 388, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3ead55015c579ed137c58236bb70b0a2324e79109e2ffc964262f12f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b9ccd7f0f3594954aa729bda4be883e107e7f1226465b64c2ca7105789829d787016c5c118d3ba3317a2da0a0daaf56d3004c10962333a9f", + "wx" : "00b9ccd7f0f3594954aa729bda4be883e107e7f1226465b64c2ca71057", + "wy" : "0089829d787016c5c118d3ba3317a2da0a0daaf56d3004c10962333a9f" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b9ccd7f0f3594954aa729bda4be883e107e7f1226465b64c2ca7105789829d787016c5c118d3ba3317a2da0a0daaf56d3004c10962333a9f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEuczX8PNZSVSqcpvaS+iD4Qfn8SJkZbZM\nLKcQV4mCnXhwFsXBGNO6Mxei2goNqvVtMATBCWIzOp8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 389, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00de03ff820a836e39d3a8435219289444bbd22db7f7368f8411c27ee5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04321a17de024fe89c1864e128b9e0af3e6b48800a70d6e802b8b6dffeb1a8ae96911ddbdeb83948a992b1b0fe316679c64814b6a45ec56fe9", + "wx" : "321a17de024fe89c1864e128b9e0af3e6b48800a70d6e802b8b6dffe", + "wy" : "00b1a8ae96911ddbdeb83948a992b1b0fe316679c64814b6a45ec56fe9" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004321a17de024fe89c1864e128b9e0af3e6b48800a70d6e802b8b6dffeb1a8ae96911ddbdeb83948a992b1b0fe316679c64814b6a45ec56fe9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEMhoX3gJP6JwYZOEoueCvPmtIgApw1ugC\nuLbf/rGorpaRHdveuDlIqZKxsP4xZnnGSBS2pF7Fb+k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 390, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00f15605922897427b7d80ab106b4474d7fa962e970ffad666580fd5c6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0408842f19b114d16be27bb4b6971377ed6b1d0915e133a9ebf01674ee4c97738b6912ff71553c4a747c782eddd9d2a20fbeae38864d217859", + "wx" : "08842f19b114d16be27bb4b6971377ed6b1d0915e133a9ebf01674ee", + "wy" : "4c97738b6912ff71553c4a747c782eddd9d2a20fbeae38864d217859" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000408842f19b114d16be27bb4b6971377ed6b1d0915e133a9ebf01674ee4c97738b6912ff71553c4a747c782eddd9d2a20fbeae38864d217859", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAECIQvGbEU0Wvie7S2lxN37WsdCRXhM6nr\n8BZ07kyXc4tpEv9xVTxKdHx4Lt3Z0qIPvq44hk0heFk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 391, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffffb2364ae85014b149b86c741eb8be", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0484d651596fd2348f1bb5c8ae9d22c8b21c4f7509240b609abad5cc243196b67b4cfaffaf0dce25ab00bfeaa1a64821332efa6dedd87cc9e7", + "wx" : "0084d651596fd2348f1bb5c8ae9d22c8b21c4f7509240b609abad5cc24", + "wy" : "3196b67b4cfaffaf0dce25ab00bfeaa1a64821332efa6dedd87cc9e7" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000484d651596fd2348f1bb5c8ae9d22c8b21c4f7509240b609abad5cc243196b67b4cfaffaf0dce25ab00bfeaa1a64821332efa6dedd87cc9e7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEhNZRWW/SNI8btciunSLIshxPdQkkC2Ca\nutXMJDGWtntM+v+vDc4lqwC/6qGmSCEzLvpt7dh8yec=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 392, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00855f5b2dc8e46ec428a593f73219cf65dae793e8346e30cc3701309c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "048fbe39e75bc4fd8a15e4b52e4bbebe2047d54385a7117e17a4d0b2b207abdb40824538e5787c718d6548583f523f6b5bbfa239a7f622c8a0", + "wx" : "008fbe39e75bc4fd8a15e4b52e4bbebe2047d54385a7117e17a4d0b2b2", + "wy" : "07abdb40824538e5787c718d6548583f523f6b5bbfa239a7f622c8a0" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048fbe39e75bc4fd8a15e4b52e4bbebe2047d54385a7117e17a4d0b2b207abdb40824538e5787c718d6548583f523f6b5bbfa239a7f622c8a0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEj74551vE/YoV5LUuS76+IEfVQ4WnEX4X\npNCysger20CCRTjleHxxjWVIWD9SP2tbv6I5p/YiyKA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 393, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c2db5f61aea817276af2064e104c7a30e32034cb526dd0aacfa56566f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04c336b340bc99d46c2c52df5428b6a0c4eb2da76c423530f767cc7652f3ab9981bd05d2955123935a379cbb2d4361a17d19878673e1e17dcc", + "wx" : "00c336b340bc99d46c2c52df5428b6a0c4eb2da76c423530f767cc7652", + "wy" : "00f3ab9981bd05d2955123935a379cbb2d4361a17d19878673e1e17dcc" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c336b340bc99d46c2c52df5428b6a0c4eb2da76c423530f767cc7652f3ab9981bd05d2955123935a379cbb2d4361a17d19878673e1e17dcc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEwzazQLyZ1GwsUt9UKLagxOstp2xCNTD3\nZ8x2UvOrmYG9BdKVUSOTWjecuy1DYaF9GYeGc+Hhfcw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 394, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0084a6c7513e5f48c07fffffffffff8713f3cba1293e4f3e95597fe6bd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04816fdcf370827e3f7771564e1aa73ed73e62556deadad89711cef663edcda0ea42235f4c9a8c13f787351ffe5ceb32f15fc0ccb24e0a409c", + "wx" : "00816fdcf370827e3f7771564e1aa73ed73e62556deadad89711cef663", + "wy" : "00edcda0ea42235f4c9a8c13f787351ffe5ceb32f15fc0ccb24e0a409c" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004816fdcf370827e3f7771564e1aa73ed73e62556deadad89711cef663edcda0ea42235f4c9a8c13f787351ffe5ceb32f15fc0ccb24e0a409c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEgW/c83CCfj93cVZOGqc+1z5iVW3q2tiX\nEc72Y+3NoOpCI19MmowT94c1H/5c6zLxX8DMsk4KQJw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 395, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c6c7513e5f48c07ffffffffffffff9d21fd1b31544cb13ca86a75b25e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "046429d2b7b07ab0d5ea352902df0efc036d7270a0a6ed39f635d04f394f7932883bc45394151324aab26ae29bbd7385fa6a42c3db84432897", + "wx" : "6429d2b7b07ab0d5ea352902df0efc036d7270a0a6ed39f635d04f39", + "wy" : "4f7932883bc45394151324aab26ae29bbd7385fa6a42c3db84432897" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00046429d2b7b07ab0d5ea352902df0efc036d7270a0a6ed39f635d04f394f7932883bc45394151324aab26ae29bbd7385fa6a42c3db84432897", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEZCnSt7B6sNXqNSkC3w78A21ycKCm7Tn2\nNdBPOU95Mog7xFOUFRMkqrJq4pu9c4X6akLD24RDKJc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 396, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00d8ea27cbe9180fffffffffffffff3a43fa3662a899627950d4eb64bc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04288f38fd77dd1603ff0275cb11cba280ae3408affa6a760f396f1a1ec84ca6fd772c6ac6cc523cc72c2e7e95eb6a36a66b5cca5a58ba078a", + "wx" : "288f38fd77dd1603ff0275cb11cba280ae3408affa6a760f396f1a1e", + "wy" : "00c84ca6fd772c6ac6cc523cc72c2e7e95eb6a36a66b5cca5a58ba078a" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004288f38fd77dd1603ff0275cb11cba280ae3408affa6a760f396f1a1ec84ca6fd772c6ac6cc523cc72c2e7e95eb6a36a66b5cca5a58ba078a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEKI84/XfdFgP/AnXLEcuigK40CK/6anYP\nOW8aHshMpv13LGrGzFI8xywufpXrajama1zKWli6B4o=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 397, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3e5f48c07fffffffffffffffffffc724968c0ecf9ed783744a7337b3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04c769c138f9d71ffff113273b71a4afde4f9996a1c4be658a3903cf7f430e512b868b37bb96bc17a09b0ab01b262f2e23f34f00418f6b63d6", + "wx" : "00c769c138f9d71ffff113273b71a4afde4f9996a1c4be658a3903cf7f", + "wy" : "430e512b868b37bb96bc17a09b0ab01b262f2e23f34f00418f6b63d6" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c769c138f9d71ffff113273b71a4afde4f9996a1c4be658a3903cf7f430e512b868b37bb96bc17a09b0ab01b262f2e23f34f00418f6b63d6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEx2nBOPnXH//xEyc7caSv3k+ZlqHEvmWK\nOQPPf0MOUSuGize7lrwXoJsKsBsmLy4j808AQY9rY9Y=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 398, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d00bfffffffffffffffffffffffffff3d87bb44c833bb384d0f224ccdde", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0475f007c11b93e6f46e9a815cb765990a8305d3ad8d22c76fe6b257cc71b5c1951b5d464c66df7c290cf0a4f156bbf52f1e41a79dc63abce5", + "wx" : "75f007c11b93e6f46e9a815cb765990a8305d3ad8d22c76fe6b257cc", + "wy" : "71b5c1951b5d464c66df7c290cf0a4f156bbf52f1e41a79dc63abce5" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000475f007c11b93e6f46e9a815cb765990a8305d3ad8d22c76fe6b257cc71b5c1951b5d464c66df7c290cf0a4f156bbf52f1e41a79dc63abce5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEdfAHwRuT5vRumoFct2WZCoMF062NIsdv\n5rJXzHG1wZUbXUZMZt98KQzwpPFWu/UvHkGnncY6vOU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 399, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c7fffffffffffffffffffffffffff646c95d0a029629370d8e83d717f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "041255fb94a0f20e6faa2505c394cc3c39f07def4107127dffc4dacb6eea73c1044544a1496560bd1b049ff615e68ae0d483220327569884e1", + "wx" : "1255fb94a0f20e6faa2505c394cc3c39f07def4107127dffc4dacb6e", + "wy" : "00ea73c1044544a1496560bd1b049ff615e68ae0d483220327569884e1" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00041255fb94a0f20e6faa2505c394cc3c39f07def4107127dffc4dacb6eea73c1044544a1496560bd1b049ff615e68ae0d483220327569884e1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEElX7lKDyDm+qJQXDlMw8OfB970EHEn3/\nxNrLbupzwQRFRKFJZWC9GwSf9hXmiuDUgyIDJ1aYhOE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 400, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303c021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021c3fffffffffffffffffffffffffff8b51705c781f09ee94a2ae2e1520", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04f656a632a0804cf688446b261208f793373c5ff4454bd1e0a882113f30a25d6f586e02dd4dcbf73d96af3e483b7acb5f8f4c06450dec1982", + "wx" : "00f656a632a0804cf688446b261208f793373c5ff4454bd1e0a882113f", + "wy" : "30a25d6f586e02dd4dcbf73d96af3e483b7acb5f8f4c06450dec1982" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004f656a632a0804cf688446b261208f793373c5ff4454bd1e0a882113f30a25d6f586e02dd4dcbf73d96af3e483b7acb5f8f4c06450dec1982", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE9lamMqCATPaIRGsmEgj3kzc8X/RFS9Hg\nqIIRPzCiXW9YbgLdTcv3PZavPkg7estfj0wGRQ3sGYI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 401, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "303d021c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffd021d0096dafb0d7540b93b5790327082635cd8895e1e799d5d19f92b594056", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "048fb572de4daf76702624ce4ed819d026762224e8a54215bf81b202a3f074d20e1da7232d279461732bc1bae0c5416ab9d696308622e7ffe8", + "wx" : "008fb572de4daf76702624ce4ed819d026762224e8a54215bf81b202a3", + "wy" : "00f074d20e1da7232d279461732bc1bae0c5416ab9d696308622e7ffe8" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048fb572de4daf76702624ce4ed819d026762224e8a54215bf81b202a3f074d20e1da7232d279461732bc1bae0c5416ab9d696308622e7ffe8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEj7Vy3k2vdnAmJM5O2BnQJnYiJOilQhW/\ngbICo/B00g4dpyMtJ5RhcyvBuuDFQWq51pYwhiLn/+g=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 402, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "303e021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021d00ec0ce3fa725c1027475a5f5bf4ee980de61c3b4875afe8b654b24ee2", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "048fb572de4daf76702624ce4ed819d026762224e8a54215bf81b202a30f8b2df1e258dcd2d86b9e8cd43e451e3abe95462969cf79dd180019", + "wx" : "008fb572de4daf76702624ce4ed819d026762224e8a54215bf81b202a3", + "wy" : "0f8b2df1e258dcd2d86b9e8cd43e451e3abe95462969cf79dd180019" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00048fb572de4daf76702624ce4ed819d026762224e8a54215bf81b202a30f8b2df1e258dcd2d86b9e8cd43e451e3abe95462969cf79dd180019", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEj7Vy3k2vdnAmJM5O2BnQJnYiJOilQhW/\ngbICow+LLfHiWNzS2GuejNQ+RR46vpVGKWnPed0YABk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 403, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "303e021d00c44503dae85dd5210780f02928b3d927171c578f8603d16b240663c7021d00ec0ce3fa725c1027475a5f5bf4ee980de61c3b4875afe8b654b24ee2", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04e5462d3a838d4a14de96a7b0b1071eb622ae6e71ede8f95ff01c2121368e3a90d8584e194616d3211a7541f6a0960339cab28e8bfd6b1dfd", + "wx" : "00e5462d3a838d4a14de96a7b0b1071eb622ae6e71ede8f95ff01c2121", + "wy" : "368e3a90d8584e194616d3211a7541f6a0960339cab28e8bfd6b1dfd" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004e5462d3a838d4a14de96a7b0b1071eb622ae6e71ede8f95ff01c2121368e3a90d8584e194616d3211a7541f6a0960339cab28e8bfd6b1dfd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE5UYtOoONShTelqewsQcetiKubnHt6Plf\n8BwhITaOOpDYWE4ZRhbTIRp1QfaglgM5yrKOi/1rHf0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 404, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "303c021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14021c33333333333333333333333333330486f9be9672d0c5d50ddf45a20c", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "045d97670c1f121f7f1ba541505609f20143b312a7bb49d376690e1831c1b4567141a7b534e21bd2f706ae034169ab9c3f8536147904de8c5f", + "wx" : "5d97670c1f121f7f1ba541505609f20143b312a7bb49d376690e1831", + "wy" : "00c1b4567141a7b534e21bd2f706ae034169ab9c3f8536147904de8c5f" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00045d97670c1f121f7f1ba541505609f20143b312a7bb49d376690e1831c1b4567141a7b534e21bd2f706ae034169ab9c3f8536147904de8c5f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEXZdnDB8SH38bpUFQVgnyAUOzEqe7SdN2\naQ4YMcG0VnFBp7U04hvS9wauA0Fpq5w/hTYUeQTejF8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 405, + "comment" : "extreme value for k and edgecase s", + "msg" : "313233343030", + "sig" : "303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04d2675278da2d7daa8373dd63b7aa46cb14766571c2d8098b83a102a5699b572d4b951497418a376930022d48fe59966b158fa08340e24b98", + "wx" : "00d2675278da2d7daa8373dd63b7aa46cb14766571c2d8098b83a102a5", + "wy" : "699b572d4b951497418a376930022d48fe59966b158fa08340e24b98" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d2675278da2d7daa8373dd63b7aa46cb14766571c2d8098b83a102a5699b572d4b951497418a376930022d48fe59966b158fa08340e24b98", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE0mdSeNotfaqDc91jt6pGyxR2ZXHC2AmL\ng6ECpWmbVy1LlRSXQYo3aTACLUj+WZZrFY+gg0DiS5g=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 406, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303d021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021d00db6db6db6db6db6db6db6db6db6ceed4c09e84c77ebd9116e17391eb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "045a5cd1162388348734dae20e2235ae2c464adef0a196f9aaf02482ca2ae94e8b9a024375036429b632ab485e02c5a9665b289b8a47bade8f", + "wx" : "5a5cd1162388348734dae20e2235ae2c464adef0a196f9aaf02482ca", + "wy" : "2ae94e8b9a024375036429b632ab485e02c5a9665b289b8a47bade8f" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00045a5cd1162388348734dae20e2235ae2c464adef0a196f9aaf02482ca2ae94e8b9a024375036429b632ab485e02c5a9665b289b8a47bade8f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEWlzRFiOINIc02uIOIjWuLEZK3vChlvmq\n8CSCyirpTouaAkN1A2QptjKrSF4CxalmWyibike63o8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 407, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c33333333333333333333333333330486f9be9672d0c5d50ddf45a20c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04cacd93eb11a821de3d882bab7411e7c77f23c08da174189cc987dc41716fe378ab842161bc16def6e037d4ba9d30d8cb41ad30cf0656e50b", + "wx" : "00cacd93eb11a821de3d882bab7411e7c77f23c08da174189cc987dc41", + "wy" : "716fe378ab842161bc16def6e037d4ba9d30d8cb41ad30cf0656e50b" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004cacd93eb11a821de3d882bab7411e7c77f23c08da174189cc987dc41716fe378ab842161bc16def6e037d4ba9d30d8cb41ad30cf0656e50b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEys2T6xGoId49iCurdBHnx38jwI2hdBic\nyYfcQXFv43irhCFhvBbe9uA31LqdMNjLQa0wzwZW5Qs=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 408, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303d021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021d00cccccccccccccccccccccccccccc121be6fa59cb431754377d168831", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04cf46960060453e55577f1bee6a9c4709e7cdcba45ca8020bb3536931ea4ec33309213864a1318aee0a86d8b6f0c1b9741cd6bd5dea4f4066", + "wx" : "00cf46960060453e55577f1bee6a9c4709e7cdcba45ca8020bb3536931", + "wy" : "00ea4ec33309213864a1318aee0a86d8b6f0c1b9741cd6bd5dea4f4066" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004cf46960060453e55577f1bee6a9c4709e7cdcba45ca8020bb3536931ea4ec33309213864a1318aee0a86d8b6f0c1b9741cd6bd5dea4f4066", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEz0aWAGBFPlVXfxvuapxHCefNy6RcqAIL\ns1NpMepOwzMJIThkoTGK7gqG2Lbwwbl0HNa9XepPQGY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 409, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c249249249249249249249249249227ce201a6b76951f982e7ae89852", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0462f4eaf3797bdc3d5d8cfaa07b5af7060e131b183ca4eded4819e561bff3eadd7b55db2dc01bd20569e6c47c9212f9b2d6793795b51e4f6c", + "wx" : "62f4eaf3797bdc3d5d8cfaa07b5af7060e131b183ca4eded4819e561", + "wy" : "00bff3eadd7b55db2dc01bd20569e6c47c9212f9b2d6793795b51e4f6c" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000462f4eaf3797bdc3d5d8cfaa07b5af7060e131b183ca4eded4819e561bff3eadd7b55db2dc01bd20569e6c47c9212f9b2d6793795b51e4f6c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEYvTq83l73D1djPqge1r3Bg4TGxg8pO3t\nSBnlYb/z6t17VdstwBvSBWnmxHySEvmy1nk3lbUeT2w=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 410, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "303c021c706a46dc76dcb76798e60e6d89474788d16dc18032d268fd1a704fa6021c0eb10e5ab95facded4061029d63a46f46f12947411f2ea561a592057", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04c4a4bf5ae0138587f50ab7a2c336a430527a86f59f9765c2f3f5488df9419bf9df5f121de3a32db17b49c72b606b2be5ce56acb565cc12b7", + "wx" : "00c4a4bf5ae0138587f50ab7a2c336a430527a86f59f9765c2f3f5488d", + "wy" : "00f9419bf9df5f121de3a32db17b49c72b606b2be5ce56acb565cc12b7" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004c4a4bf5ae0138587f50ab7a2c336a430527a86f59f9765c2f3f5488df9419bf9df5f121de3a32db17b49c72b606b2be5ce56acb565cc12b7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAExKS/WuAThYf1CreiwzakMFJ6hvWfl2XC\n8/VIjflBm/nfXxId46MtsXtJxytgayvlzlastWXMErc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 411, + "comment" : "extreme value for k and edgecase s", + "msg" : "313233343030", + "sig" : "303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c5555555555555555555555555555078ba03da56a069f0dc1c9740e14", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04e7cb5ae54dbe619ab5069f14566236b3c6b0b44f1c4c531e66d89b3e64be7fdc18789629dfddf7158f8ff27abd553bfac3f7c874bccdc31b", + "wx" : "00e7cb5ae54dbe619ab5069f14566236b3c6b0b44f1c4c531e66d89b3e", + "wy" : "64be7fdc18789629dfddf7158f8ff27abd553bfac3f7c874bccdc31b" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004e7cb5ae54dbe619ab5069f14566236b3c6b0b44f1c4c531e66d89b3e64be7fdc18789629dfddf7158f8ff27abd553bfac3f7c874bccdc31b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE58ta5U2+YZq1Bp8UVmI2s8awtE8cTFMe\nZtibPmS+f9wYeJYp3933FY+P8nq9VTv6w/fIdLzNwxs=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 412, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303e021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021d00db6db6db6db6db6db6db6db6db6ceed4c09e84c77ebd9116e17391eb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0430db5d8279319cf5a3b6768a0c5e5c84752f6314f735d63f6c5650cdd32fb54f74d4a5088e6774a13201683642790d2e69e55e4f47612934", + "wx" : "30db5d8279319cf5a3b6768a0c5e5c84752f6314f735d63f6c5650cd", + "wy" : "00d32fb54f74d4a5088e6774a13201683642790d2e69e55e4f47612934" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000430db5d8279319cf5a3b6768a0c5e5c84752f6314f735d63f6c5650cdd32fb54f74d4a5088e6774a13201683642790d2e69e55e4f47612934", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEMNtdgnkxnPWjtnaKDF5chHUvYxT3NdY/\nbFZQzdMvtU901KUIjmd0oTIBaDZCeQ0uaeVeT0dhKTQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 413, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c33333333333333333333333333330486f9be9672d0c5d50ddf45a20c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "047db27da4d67a2de0c78815809719bdf6976332c67ef0f3827df4adc22ab37aec2eed0d5e67acfd6a195f21032d9af71ce73e120fdda29f1a", + "wx" : "7db27da4d67a2de0c78815809719bdf6976332c67ef0f3827df4adc2", + "wy" : "2ab37aec2eed0d5e67acfd6a195f21032d9af71ce73e120fdda29f1a" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00047db27da4d67a2de0c78815809719bdf6976332c67ef0f3827df4adc22ab37aec2eed0d5e67acfd6a195f21032d9af71ce73e120fdda29f1a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEfbJ9pNZ6LeDHiBWAlxm99pdjMsZ+8POC\nffStwiqzeuwu7Q1eZ6z9ahlfIQMtmvcc5z4SD92inxo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 414, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303e021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021d00cccccccccccccccccccccccccccc121be6fa59cb431754377d168831", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04d1c19d46b517bb3bd7bdf074ff975c0dbd2bde10d1ad217e58ebc8c55ac898c040a185804ddb032b48103d6c8d12043d3a4fec93aba7a6d7", + "wx" : "00d1c19d46b517bb3bd7bdf074ff975c0dbd2bde10d1ad217e58ebc8c5", + "wy" : "5ac898c040a185804ddb032b48103d6c8d12043d3a4fec93aba7a6d7" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d1c19d46b517bb3bd7bdf074ff975c0dbd2bde10d1ad217e58ebc8c55ac898c040a185804ddb032b48103d6c8d12043d3a4fec93aba7a6d7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE0cGdRrUXuzvXvfB0/5dcDb0r3hDRrSF+\nWOvIxVrImMBAoYWATdsDK0gQPWyNEgQ9Ok/sk6unptc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 415, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c249249249249249249249249249227ce201a6b76951f982e7ae89852", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04d95ac96ae9dbfb80911862e00a4cadbcb2359f499b53be007f0711c093d3da931acbb9242800dc521695b4f19ff2dffc3613f40bdb15c3cd", + "wx" : "00d95ac96ae9dbfb80911862e00a4cadbcb2359f499b53be007f0711c0", + "wy" : "0093d3da931acbb9242800dc521695b4f19ff2dffc3613f40bdb15c3cd" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004d95ac96ae9dbfb80911862e00a4cadbcb2359f499b53be007f0711c093d3da931acbb9242800dc521695b4f19ff2dffc3613f40bdb15c3cd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE2VrJaunb+4CRGGLgCkytvLI1n0mbU74A\nfwcRwJPT2pMay7kkKADcUhaVtPGf8t/8NhP0C9sVw80=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 416, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "303d021d00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21021c0eb10e5ab95facded4061029d63a46f46f12947411f2ea561a592057", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34", + "wx" : "00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", + "wy" : "00bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21bd376388b5f723fb4c22dfe6cd4375a05a07476444d5819985007e34", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtw4MvWu0v38yE5C5SgPB01bCESI0MoDW\nEVwdIb03Y4i19yP7TCLf5s1DdaBaB0dkRNWBmYUAfjQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 417, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303c021c43f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b0021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 418, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303d021d00bc07ff041506dc73a75086a4325211e696eb6b31da8ff5c2c728d38d021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d2142c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd", + "wx" : "00b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d21", + "wy" : "42c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b70e0cbd6bb4bf7f321390b94a03c1d356c21122343280d6115c1d2142c89c774a08dc04b3dd201932bc8a5ea5f8b89bbb2a7e667aff81cd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEtw4MvWu0v38yE5C5SgPB01bCESI0MoDW\nEVwdIULInHdKCNwEs90gGTK8il6l+Libuyp+Znr/gc0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 419, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303c021c43f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b0021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 420, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "303d021d00bc07ff041506dc73a75086a4325211e696eb6b31da8ff5c2c728d38d021c249249249249249249249249249227ce201a6b76951f982e7ae89851", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "044c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176", + "wx" : "4c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466", + "wy" : "00ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a00044c246670658a1d41f5d77bce246cbe386ac22848e269b9d4cd67c466ddd947153d39b2d42533a460def26880408caf2dd3dd48fe888cd176", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAETCRmcGWKHUH113vOJGy+OGrCKEjiabnU\nzWfEZt3ZRxU9ObLUJTOkYN7yaIBAjK8t091I/oiM0XY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 421, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "303e021d00f72915d6d916014279616186869a01228fcd9f1b4078353018b399ab021d00b67f2b91eeeb910381f5b461a4a39c642aea4792013d4eb63da1832b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 422, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "303e021d00a5d179c336ccdc760dfddd913cdf8ea468d0f4686f7b2d3825698ed7021d00a77f12060a4d1b94b0d1c443eae3ad6e21b7eacfdf6fbf39a2b29658", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 423, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "303e021d00b7c65dce56abe24fb4592ece5ac1e6ee8353431f7452409add736884021d00e5fe5db7988931026b937dc4ef983fe446ca134d29b94ac777cde317", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 424, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "303d021c05c563d3a4bad874e4610adfa57777a59f995bfa06ef97bf125a4988021d0097ed68f546cf4bb4998524c18356f3af162d2bf2744be93357bc4b4b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf8a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000", + "wx" : "00aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf", + "wy" : "008a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004aed6fcad2400c4d94e55dbb6b012ce3d4c2b46843fbe99d4289e6ecf8a24a89e71343d7d151d258d2cb690349c2d56b366dd10a600000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAErtb8rSQAxNlOVdu2sBLOPUwrRoQ/vpnU\nKJ5uz4okqJ5xND19FR0ljSy2kDScLVazZt0QpgAAAAA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 425, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303e021d00c7a6f358b7d93815189ae5d2c3ab4d4e05f43176a52dd4fc5b48a34a021d00a2458512bb8dbe6f1bd6eb01d2d77d5624e8547bf87d85fc731c0c86", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 426, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021c5f56ca587d16664a20dad13df85a475978e5cee81a8d0f49faaf6158021d00b64ef59d79461fe1a09a5864907435f70bd75f183afb11903f560b7c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 427, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303e021d00dd94f5b56e9947d007e7c8efd894a5c882f1d0b5dd56c32b5b266521021d00fbc883741bd27c59958ae17ba6e4a41ad1edeca9a3ba31c8f233b5ac", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f173d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff", + "wx" : "00bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f1", + "wy" : "73d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004bf19ecfe43ffe289f699f479316145b9a7f7370b9ece5ab1212174f173d528949ae9142f818bade71a960407963be0b6482a6a60ffffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEvxns/kP/4on2mfR5MWFFuaf3Nwuezlqx\nISF08XPVKJSa6RQvgYut5xqWBAeWO+C2SCpqYP////8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 428, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303e021d008071e6682c6e8a32706dc7e411503946546b31fff27dcce188ae389f021d00dc396c797d44edf794432d1da091f8c762974d8ce1f06e08ca013622", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 429, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303c021c791624e5f234b8950d509d0b456ef6fa778b19dccd609d496b62a211021c6c51e846fa53d03d42f798e6bb90954f9a48c1794b47e84ac97b460a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 430, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303c021b34befa1d25b756ce76b383a6e8753741c12a59266c2c7921ff6e8b021d00bc44e3823e4d807cbc92fa786a89e62a4b217b5fb0c0f1865d4a7e43", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0426e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0", + "wx" : "26e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000", + "wy" : "00eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000426e5abf135cb54eaaa16b69e4b0b292275344e88a09df6df80000000eab891de54e3f26ff50ab989f333dac551583d468ae623c596434af0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEJuWr8TXLVOqqFraeSwspInU0Toignfbf\ngAAAAOq4kd5U4/Jv9Qq5ifMz2sVRWD1GiuYjxZZDSvA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 431, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303c021c224a38e733ebd3fac274ecc50ecef2e7c3189be2b9d093a8dcc6fa3a021c134fa5a4f923d296b3c6dd4683d249ccf0ad272890e4149c9a0d7415", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 432, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303d021c338d07d990879ad844e24c1788e362269d8aca70500357d385768227021d00f745cc4ebaaf1cd42830026a66e5b95564cdbee5edf853bb2cc91259", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 433, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "303c021c689fce4b33d8212a663640a1ae0efaa7a7d7711beba719374fe634ee021c04bd9981fa52293063076f0fd70fc31875d580ef94f020d2f95440e0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd", + "wx" : "00ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff", + "wy" : "41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004ec627f345545d03f8c6dbd08e575527116567fe375f9ecaaffffffff41bf705697d5f716bcf78718d5393b63a98691f4a1f24246375538fd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE7GJ/NFVF0D+Mbb0I5XVScRZWf+N1+eyq\n/////0G/cFaX1fcWvPeHGNU5O2OphpH0ofJCRjdVOP0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 434, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303c021c2a4287e01510e7fb5fed2e1ccc3f2a6929cf7d03850e49d7ae8a504a021c355c3915f3fa9637dc8001438a8c04e15d14934cabd430feb0cb5ba5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 435, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021d00b5bf795a38adb052b401468ffcab81103d2d9fca2e15b8d08ab98ce8021c5ec0d2c6aec71888c941af324c7272bec192abb292f9df82a24e8a41", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 436, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "303d021c100ed07f467133bf10917f7a15ab2bfda519bdbc2653b95955e22211021d00b38a081f7c2e2b775d1da868d0381c09ba1559c9613b5be7159363ad", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5", + "wx" : "15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a", + "wy" : "762d28f1fdc219184f81681fbff566d465b5f1f31e872df5" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a00000000762d28f1fdc219184f81681fbff566d465b5f1f31e872df5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEFQFuUrNkctU2R3YF+4Bd05AwgqBi0eow\nr55VWgAAAAB2LSjx/cIZGE+BaB+/9WbUZbXx8x6HLfU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 437, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303c021c54e6add8ac910e52c6228fe3980d8f586218334d8d859ba9a3329917021c5836cc79ec88519eab4a6b2614c501628c9fee32fbafd93e32158409", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 438, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303c021c1230d5409f379584b4d548b7bccba64baf81d512a9f2e6398c4e3a66021c1937a298f8cbdfa85b8e6fcf0a12be4966d80270cade85a0c37ee6f3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 439, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00862f43b044fb32adb45e00378ba083ae761c84452054f17b1341bf5b021d0095d8d8e5e3a6cc2b0a06c792252ca11a642257721831578520f96b9e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c", + "wx" : "15016e52b36472d536477605fb805dd3903082a062d1ea30af9e555a", + "wy" : "00ffffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000415016e52b36472d536477605fb805dd3903082a062d1ea30af9e555affffffff89d2d70e023de6e7b07e97df400a992b9a4a0e0ce178d20c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEFQFuUrNkctU2R3YF+4Bd05AwgqBi0eow\nr55VWv////+J0tcOAj3m57B+l99ACpkrmkoODOF40gw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 440, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021d00cb5cabb1ca01b847a6bc70558d1e5d3a204d1741bbe800f4b159af35021c3580cc85f218394130bddf1c4eac04fe96f59f14fb436686950398be", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 441, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021d00c9d83dc04cf4ee89c405045d0fd1d704f627ca5bbe350f40b826bbc1021c74fedc9e55045e9759f2124460fdfb991dc620cfee6effc0b4adaa9e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 442, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c46dd65b6e7f10c0841841b01033a5befd3a0e78c85f1f390bb3cdf25021d00f33acea3d47cf0dd5273735b004104f6512ed641052509422c0325a7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "0400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1", + "wx" : "00f7e4713d085112112c37cdf4601ff688da796016b71a727a", + "wy" : "00de5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a000400000000f7e4713d085112112c37cdf4601ff688da796016b71a727ade5a9ec165054cc987f9dc87e9991b92e4fa649ca655eeae9f2a30e1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEAAAAAPfkcT0IURIRLDfN9GAf9ojaeWAW\ntxpyet5ansFlBUzJh/nch+mZG5Lk+mScplXurp8qMOE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 443, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00ddb4a7e400a1e98118f474722da3f421f65a76eec61f4f7b699faf07021d00db80cba199859cdfe916d6ab3deb91d76aaf0ed554c8f9ed7e5aa59d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 444, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021c4c260b546280604e4c80384721c9e803ef704e7fb70168e6730fc1f3021d00a8aceae219ac25c9f04231b4e0c171413db1d26df1c1e8430062eb2b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 445, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00f4098d2c0240e78fceabb0183df0b39e7ad3e7f5d6da1587fa09853c021d00d42412b2abaa614c95eb11f9b9346282ce3a1c93aac35ce7aa372f4a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e", + "wx" : "00ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f725", + "wy" : "0086c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004ffffffffeadf7cee8d34d04cf22c8f7de35674fb2f501d242a76f72586c409309d398e60ce1e0a4c9e05a9d32627577e8ce2cc7f3afa2c3e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAE/////+rffO6NNNBM8iyPfeNWdPsvUB0k\nKnb3JYbECTCdOY5gzh4KTJ4FqdMmJ1d+jOLMfzr6LD4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 446, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c48ddc497f9a4732c677e46c0e2bdabec54fc9d27e46ab595056db4d9021d00b8219ebbfaebc2fe4311efab0c35d4392751351bcc1971e8d01941e4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 447, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021d00e1abaf51d27a6d7d4c9b28078325cac2d7ce3d5403916c68903760b7021c2c45a99e2770f782fee5ca1d713eaecf07e62d53c64b7cf93de9900d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 448, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021d00868cd127c99e1149f7fc8d878cdfa986b62e99addea281149611ff15021c16e5953820135b7d462ce5434ef85920e973eec9e4d14d7cb3cc2a3f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc", + "wx" : "00b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1", + "wy" : "0e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1000000000e2ab0e8495e859eb2afb00769d6e7fe626a119167c0b6bc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEsAE8b7/28J/s2hwmPvZTmdTPmJyl/E+P\n/w/p4QAAAAAOKrDoSV6FnrKvsAdp1uf+YmoRkWfAtrw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 449, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303e021d00a375929718ec4e6ada9c9370c51df6bdaee7ebab2a70675d42a0b6b3021d009eaf4802efaf7ca082ffbf5ed774af43792d9b3fd711c6b1c36112ff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 450, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021d00d97b32f3bf8bc11ec2672dd6320418beeed99527a63fe4c52199ec61021c68dd9006b03319ccbe651d0bdaf84c63356f03cb007a6865ee3e0206", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 451, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "303d021d008ee5794dc2e66f2584910ea1d8361e5b53db535adcf5c1c35e128309021c5d1d8b9b996c0a488e05af14421b86e9841f0cba706027fc827d4d95", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp224r1", + "keySize" : 224, + "type" : "EcPublicKey", + "uncompressed" : "04b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945", + "wx" : "00b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1", + "wy" : "00fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945" + }, + "keyDer" : "304e301006072a8648ce3d020106052b81040021033a0004b0013c6fbff6f09fecda1c263ef65399d4cf989ca5fc4f8fff0fe9e1fffffffff1d54f17b6a17a614d504ff7962918019d95ee6e983f4945", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nME4wEAYHKoZIzj0CAQYFK4EEACEDOgAEsAE8b7/28J/s2hwmPvZTmdTPmJyl/E+P\n/w/p4f/////x1U8XtqF6YU1QT/eWKRgBnZXubpg/SUU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 452, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c7999727c0cc02d88ef274012a762afcbb19e7fce19091a02acd00564021d00dbfacf67999f22c499d48a60a6fe4bbb746199c29957a1ec7a0900e0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 453, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303c021c5797c21c0162e42f69693c6c0244dfdf9218c01e9235760177b61a54021c5452c887b27fb342a8a00d27579c7195dddb73df399233ed0dea567b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 454, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "303d021c0eb9dc5d67bb0d4009544f8654977907dfe770e7fae4571d31d7b4fa021d00ab5cda53e868bff5198be4be3681b186cb0c1396d272c71f093f8b12", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/tests/ecdsa_secp256r1_sha256_test.json b/tests/ecdsa_secp256r1_sha256_test.json new file mode 100644 index 00000000..0b8ab9f5 --- /dev/null +++ b/tests/ecdsa_secp256r1_sha256_test.json @@ -0,0 +1,4578 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.8r12", + "numberOfTests" : 387, + "header" : [ + "Test vectors of type EcdsaVerify are meant for the verification", + "of ASN encoded ECDSA signatures." + ], + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "schema" : "ecdsa_verify_schema.json", + "testGroups" : [ + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "wx" : "2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838", + "wy" : "00c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKSexBRK64+3c/kZ4KBKLrSkDJpkZ\n9whgacjE32xzKDjHeHlk6qwA5ZIfsUmKYPRgZ2az2WhQAVWNGpdOc0FRPg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802204cd60b855d442f5b3c7b11eb6c4e0ae7525fe710fab9aa7c77a67f79e6fadd76", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "Legacy:ASN encoding of s misses leading 0", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180220b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 3, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "long form encoding of length of sequence", + "msg" : "313233343030", + "sig" : "30814502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 5, + "comment" : "length of sequence contains leading 0", + "msg" : "313233343030", + "sig" : "3082004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 6, + "comment" : "wrong length of sequence", + "msg" : "313233343030", + "sig" : "304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "wrong length of sequence", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "uint32 overflow in length of sequence", + "msg" : "313233343030", + "sig" : "3085010000004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "uint64 overflow in length of sequence", + "msg" : "313233343030", + "sig" : "308901000000000000004502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "length of sequence = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "length of sequence = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length of sequence = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length of sequence = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "incorrect length of sequence", + "msg" : "313233343030", + "sig" : "30ff02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "304502802ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18028000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "lonely sequence tag", + "msg" : "313233343030", + "sig" : "30", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "3047000002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "appending unused 0's to sequence", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "appending null value to sequence", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a498177304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30492500304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3047304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a222549817702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30492224250002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304d222202202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180004deadbeef022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182226498177022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1822252500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182223022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304daa00bb00cd00304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304baa02aabb304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304d2228aa00bb00cd0002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304b2226aa02aabb02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182229aa00bb00cd00022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304b02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182227aa02aabb022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "truncated length of sequence", + "msg" : "313233343030", + "sig" : "3081", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3080304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3049228002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182280022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3080314502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3049228003202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e182280032100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "2e4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "2f4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "314502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "324502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "ff4502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "using composition for sequence", + "msg" : "313233343030", + "sig" : "30493001023044202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "3044202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 57, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db05000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "308002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "3047300002202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "append garbage with high tag number", + "msg" : "313233343030", + "sig" : "304802202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847dbbf7f00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "3047304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "truncated sequence: removed last 1 elements", + "msg" : "313233343030", + "sig" : "302202202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "repeating element in sequence", + "msg" : "313233343030", + "sig" : "306802202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "long form encoding of length of integer", + "msg" : "313233343030", + "sig" : "30460281202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 69, + "comment" : "long form encoding of length of integer", + "msg" : "313233343030", + "sig" : "304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802812100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 70, + "comment" : "length of integer contains leading 0", + "msg" : "313233343030", + "sig" : "3047028200202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 71, + "comment" : "length of integer contains leading 0", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180282002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 72, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "304502212ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "3045021f2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022200b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "uint32 overflow in length of integer", + "msg" : "313233343030", + "sig" : "304a028501000000202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "uint32 overflow in length of integer", + "msg" : "313233343030", + "sig" : "304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180285010000002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "uint64 overflow in length of integer", + "msg" : "313233343030", + "sig" : "304e02890100000000000000202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "uint64 overflow in length of integer", + "msg" : "313233343030", + "sig" : "304e02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18028901000000000000002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "length of integer = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304902847fffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "length of integer = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802847fffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "length of integer = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30490284ffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "length of integer = 2**32 - 1", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180284ffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "length of integer = 2**40 - 1", + "msg" : "313233343030", + "sig" : "304a0285ffffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "length of integer = 2**40 - 1", + "msg" : "313233343030", + "sig" : "304a02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180285ffffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "length of integer = 2**64 - 1", + "msg" : "313233343030", + "sig" : "304d0288ffffffffffffffff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "length of integer = 2**64 - 1", + "msg" : "313233343030", + "sig" : "304d02202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180288ffffffffffffffff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "incorrect length of integer", + "msg" : "313233343030", + "sig" : "304502ff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "incorrect length of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802ff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "3023022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "lonely integer tag", + "msg" : "313233343030", + "sig" : "302402022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "lonely integer tag", + "msg" : "313233343030", + "sig" : "302302202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "304702222ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022300b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "3047022200002ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 96, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180223000000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 97, + "comment" : "appending unused 0's to integer", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180000022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "appending null value to integer", + "msg" : "313233343030", + "sig" : "304702222ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "appending null value to integer", + "msg" : "313233343030", + "sig" : "304702202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022300b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "truncated length of integer", + "msg" : "313233343030", + "sig" : "30250281022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "truncated length of integer", + "msg" : "313233343030", + "sig" : "302402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180281", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "30250500022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "302402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304500202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304501202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304503202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304504202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3045ff202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18002100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18012100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18032100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18042100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18ff2100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "30250200022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "302402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "using composition for integer", + "msg" : "313233343030", + "sig" : "3049222402012b021fa3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "using composition for integer", + "msg" : "313233343030", + "sig" : "304902202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1822250201000220b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "3045022029a3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022102b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e98022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b491568475b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "3044021f2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "3044021fa3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022000b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "30460221ff2ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "304602202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180222ff00b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "replaced integer by infinity", + "msg" : "313233343030", + "sig" : "3026090180022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "replaced integer by infinity", + "msg" : "313233343030", + "sig" : "302502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "replacing integer with zero", + "msg" : "313233343030", + "sig" : "3026020100022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "replacing integer with zero", + "msg" : "313233343030", + "sig" : "302502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18020100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30460221012ba3a8bd6b94d5ed80a6d9d1190a436ebccc0833490686deac8635bcb9bf5369022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30460221ff2ba3a8bf6b94d5eb80a6d9d1190a436f42fe12d7fad749d4c512a036c0f908c7022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30450220d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100d45c5740946b2a147f59262ee6f5bc90bd01ed280528b62b3aed5fc93f06f739022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30460221fed45c5742946b2a127f59262ee6f5bc914333f7ccb6f979215379ca434640ac97022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30460221012ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100d45c5741946b2a137f59262ee6f5bc91001af27a5e1117a64733950642a3d1e8022100b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022101b329f478a2bbd0a6c384ee1493b1f518276e0e4a5375928d6fcd160c11cb6d2c", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180220b329f47aa2bbd0a4c384ee1493b1f518ada018ef05465583885980861905228a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180221ff4cd60b865d442f5a3c7b11eb6c4e0ae79578ec6353a20bf783ecb4b6ea97b825", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e180221fe4cd60b875d442f593c7b11eb6c4e0ae7d891f1b5ac8a6d729032e9f3ee3492d4", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e18022101b329f479a2bbd0a5c384ee1493b1f5186a87139cac5df4087c134b49156847db", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304402202ba3a8be6b94d5ec80a6d9d1190a436effe50d85a1eee859b8cc6af9bd5c2e1802204cd60b865d442f5a3c7b11eb6c4e0ae79578ec6353a20bf783ecb4b6ea97b825", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325500201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325520201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 214, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000001000000000000000000000000020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 215, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000001000000000000000000000000020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 216, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff000000010000000000000000000000010000000000000000000000000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 217, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 218, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 219, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 220, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 221, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 222, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000001000000000000000000000001000000000000000000000000090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 223, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000001000000000000000000000000090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 224, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30060201010c0130", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 225, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30050201010c00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 226, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30090c0225730c03732573", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 227, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30080201013003020100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 228, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "3003020101", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 229, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "3006020101010100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 230, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3639383139", + "sig" : "3044022064a1aab5000d0e804f3e2fc02bdee9be8ff312334e2ba16d11547c97711c898e02206af015971cc30be6d1a206d4e013e0997772a2f91d73286ffd683b9bb2cf4f1b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "special case hash", + "msg" : "343236343739373234", + "sig" : "3044022016aea964a2f6506d6f78c81c91fc7e8bded7d397738448de1e19a0ec580bf2660220252cd762130c6667cfe8b7bc47d27d78391e8e80c578d1cd38c3ff033be928e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 232, + "comment" : "special case hash", + "msg" : "37313338363834383931", + "sig" : "30450221009cc98be2347d469bf476dfc26b9b733df2d26d6ef524af917c665baccb23c8820220093496459effe2d8d70727b82462f61d0ec1b7847929d10ea631dacb16b56c32", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 233, + "comment" : "special case hash", + "msg" : "3130333539333331363638", + "sig" : "3044022073b3c90ecd390028058164524dde892703dce3dea0d53fa8093999f07ab8aa4302202f67b0b8e20636695bb7d8bf0a651c802ed25a395387b5f4188c0c4075c88634", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 234, + "comment" : "special case hash", + "msg" : "33393439343031323135", + "sig" : "3046022100bfab3098252847b328fadf2f89b95c851a7f0eb390763378f37e90119d5ba3dd022100bdd64e234e832b1067c2d058ccb44d978195ccebb65c2aaf1e2da9b8b4987e3b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 235, + "comment" : "special case hash", + "msg" : "31333434323933303739", + "sig" : "30440220204a9784074b246d8bf8bf04a4ceb1c1f1c9aaab168b1596d17093c5cd21d2cd022051cce41670636783dc06a759c8847868a406c2506fe17975582fe648d1d88b52", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 236, + "comment" : "special case hash", + "msg" : "33373036323131373132", + "sig" : "3046022100ed66dc34f551ac82f63d4aa4f81fe2cb0031a91d1314f835027bca0f1ceeaa0302210099ca123aa09b13cd194a422e18d5fda167623c3f6e5d4d6abb8953d67c0c48c7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 237, + "comment" : "special case hash", + "msg" : "333433363838373132", + "sig" : "30450220060b700bef665c68899d44f2356a578d126b062023ccc3c056bf0f60a237012b0221008d186c027832965f4fcc78a3366ca95dedbb410cbef3f26d6be5d581c11d3610", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 238, + "comment" : "special case hash", + "msg" : "31333531353330333730", + "sig" : "30460221009f6adfe8d5eb5b2c24d7aa7934b6cf29c93ea76cd313c9132bb0c8e38c96831d022100b26a9c9e40e55ee0890c944cf271756c906a33e66b5bd15e051593883b5e9902", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 239, + "comment" : "special case hash", + "msg" : "36353533323033313236", + "sig" : "3045022100a1af03ca91677b673ad2f33615e56174a1abf6da168cebfa8868f4ba273f16b7022020aa73ffe48afa6435cd258b173d0c2377d69022e7d098d75caf24c8c5e06b1c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 240, + "comment" : "special case hash", + "msg" : "31353634333436363033", + "sig" : "3045022100fdc70602766f8eed11a6c99a71c973d5659355507b843da6e327a28c11893db902203df5349688a085b137b1eacf456a9e9e0f6d15ec0078ca60a7f83f2b10d21350", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 241, + "comment" : "special case hash", + "msg" : "34343239353339313137", + "sig" : "3046022100b516a314f2fce530d6537f6a6c49966c23456f63c643cf8e0dc738f7b876e675022100d39ffd033c92b6d717dd536fbc5efdf1967c4bd80954479ba66b0120cd16fff2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 242, + "comment" : "special case hash", + "msg" : "3130393533323631333531", + "sig" : "304402203b2cbf046eac45842ecb7984d475831582717bebb6492fd0a485c101e29ff0a802204c9b7b47a98b0f82de512bc9313aaf51701099cac5f76e68c8595fc1c1d99258", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 243, + "comment" : "special case hash", + "msg" : "35393837333530303431", + "sig" : "3044022030c87d35e636f540841f14af54e2f9edd79d0312cfa1ab656c3fb15bfde48dcf022047c15a5a82d24b75c85a692bd6ecafeb71409ede23efd08e0db9abf6340677ed", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 244, + "comment" : "special case hash", + "msg" : "33343633303036383738", + "sig" : "3044022038686ff0fda2cef6bc43b58cfe6647b9e2e8176d168dec3c68ff262113760f520220067ec3b651f422669601662167fa8717e976e2db5e6a4cf7c2ddabb3fde9d67d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 245, + "comment" : "special case hash", + "msg" : "39383137333230323837", + "sig" : "3044022044a3e23bf314f2b344fc25c7f2de8b6af3e17d27f5ee844b225985ab6e2775cf02202d48e223205e98041ddc87be532abed584f0411f5729500493c9cc3f4dd15e86", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 246, + "comment" : "special case hash", + "msg" : "33323232303431303436", + "sig" : "304402202ded5b7ec8e90e7bf11f967a3d95110c41b99db3b5aa8d330eb9d638781688e902207d5792c53628155e1bfc46fb1a67e3088de049c328ae1f44ec69238a009808f9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 247, + "comment" : "special case hash", + "msg" : "36363636333037313034", + "sig" : "3046022100bdae7bcb580bf335efd3bc3d31870f923eaccafcd40ec2f605976f15137d8b8f022100f6dfa12f19e525270b0106eecfe257499f373a4fb318994f24838122ce7ec3c7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 248, + "comment" : "special case hash", + "msg" : "31303335393531383938", + "sig" : "3045022050f9c4f0cd6940e162720957ffff513799209b78596956d21ece251c2401f1c6022100d7033a0a787d338e889defaaabb106b95a4355e411a59c32aa5167dfab244726", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 249, + "comment" : "special case hash", + "msg" : "31383436353937313935", + "sig" : "3045022100f612820687604fa01906066a378d67540982e29575d019aabe90924ead5c860d02203f9367702dd7dd4f75ea98afd20e328a1a99f4857b316525328230ce294b0fef", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 250, + "comment" : "special case hash", + "msg" : "33313336303436313839", + "sig" : "30460221009505e407657d6e8bc93db5da7aa6f5081f61980c1949f56b0f2f507da5782a7a022100c60d31904e3669738ffbeccab6c3656c08e0ed5cb92b3cfa5e7f71784f9c5021", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 251, + "comment" : "special case hash", + "msg" : "32363633373834323534", + "sig" : "3046022100bbd16fbbb656b6d0d83e6a7787cd691b08735aed371732723e1c68a40404517d0221009d8e35dba96028b7787d91315be675877d2d097be5e8ee34560e3e7fd25c0f00", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 252, + "comment" : "special case hash", + "msg" : "31363532313030353234", + "sig" : "304402202ec9760122db98fd06ea76848d35a6da442d2ceef7559a30cf57c61e92df327e02207ab271da90859479701fccf86e462ee3393fb6814c27b760c4963625c0a19878", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 253, + "comment" : "special case hash", + "msg" : "35373438303831363936", + "sig" : "3044022054e76b7683b6650baa6a7fc49b1c51eed9ba9dd463221f7a4f1005a89fe00c5902202ea076886c773eb937ec1cc8374b7915cfd11b1c1ae1166152f2f7806a31c8fd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 254, + "comment" : "special case hash", + "msg" : "36333433393133343638", + "sig" : "304402205291deaf24659ffbbce6e3c26f6021097a74abdbb69be4fb10419c0c496c9466022065d6fcf336d27cc7cdb982bb4e4ecef5827f84742f29f10abf83469270a03dc3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 255, + "comment" : "special case hash", + "msg" : "31353431313033353938", + "sig" : "30450220207a3241812d75d947419dc58efb05e8003b33fc17eb50f9d15166a88479f107022100cdee749f2e492b213ce80b32d0574f62f1c5d70793cf55e382d5caadf7592767", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 256, + "comment" : "special case hash", + "msg" : "3130343738353830313238", + "sig" : "304502206554e49f82a855204328ac94913bf01bbe84437a355a0a37c0dee3cf81aa7728022100aea00de2507ddaf5c94e1e126980d3df16250a2eaebc8be486effe7f22b4f929", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 257, + "comment" : "special case hash", + "msg" : "3130353336323835353638", + "sig" : "3046022100a54c5062648339d2bff06f71c88216c26c6e19b4d80a8c602990ac82707efdfc022100e99bbe7fcfafae3e69fd016777517aa01056317f467ad09aff09be73c9731b0d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 258, + "comment" : "special case hash", + "msg" : "393533393034313035", + "sig" : "3045022100975bd7157a8d363b309f1f444012b1a1d23096593133e71b4ca8b059cff37eaf02207faa7a28b1c822baa241793f2abc930bd4c69840fe090f2aacc46786bf919622", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 259, + "comment" : "special case hash", + "msg" : "393738383438303339", + "sig" : "304402205694a6f84b8f875c276afd2ebcfe4d61de9ec90305afb1357b95b3e0da43885e02200dffad9ffd0b757d8051dec02ebdf70d8ee2dc5c7870c0823b6ccc7c679cbaa4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 260, + "comment" : "special case hash", + "msg" : "33363130363732343432", + "sig" : "3045022100a0c30e8026fdb2b4b4968a27d16a6d08f7098f1a98d21620d7454ba9790f1ba602205e470453a8a399f15baf463f9deceb53acc5ca64459149688bd2760c65424339", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 261, + "comment" : "special case hash", + "msg" : "31303534323430373035", + "sig" : "30440220614ea84acf736527dd73602cd4bb4eea1dfebebd5ad8aca52aa0228cf7b99a880220737cc85f5f2d2f60d1b8183f3ed490e4de14368e96a9482c2a4dd193195c902f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 262, + "comment" : "special case hash", + "msg" : "35313734343438313937", + "sig" : "3045022100bead6734ebe44b810d3fb2ea00b1732945377338febfd439a8d74dfbd0f942fa02206bb18eae36616a7d3cad35919fd21a8af4bbe7a10f73b3e036a46b103ef56e2a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 263, + "comment" : "special case hash", + "msg" : "31393637353631323531", + "sig" : "30440220499625479e161dacd4db9d9ce64854c98d922cbf212703e9654fae182df9bad2022042c177cf37b8193a0131108d97819edd9439936028864ac195b64fca76d9d693", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 264, + "comment" : "special case hash", + "msg" : "33343437323533333433", + "sig" : "3045022008f16b8093a8fb4d66a2c8065b541b3d31e3bfe694f6b89c50fb1aaa6ff6c9b20221009d6455e2d5d1779748573b611cb95d4a21f967410399b39b535ba3e5af81ca2e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 265, + "comment" : "special case hash", + "msg" : "333638323634333138", + "sig" : "3046022100be26231b6191658a19dd72ddb99ed8f8c579b6938d19bce8eed8dc2b338cb5f8022100e1d9a32ee56cffed37f0f22b2dcb57d5c943c14f79694a03b9c5e96952575c89", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 266, + "comment" : "special case hash", + "msg" : "33323631313938363038", + "sig" : "3045022015e76880898316b16204ac920a02d58045f36a229d4aa4f812638c455abe0443022100e74d357d3fcb5c8c5337bd6aba4178b455ca10e226e13f9638196506a1939123", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 267, + "comment" : "special case hash", + "msg" : "39363738373831303934", + "sig" : "30440220352ecb53f8df2c503a45f9846fc28d1d31e6307d3ddbffc1132315cc07f16dad02201348dfa9c482c558e1d05c5242ca1c39436726ecd28258b1899792887dd0a3c6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 268, + "comment" : "special case hash", + "msg" : "34393538383233383233", + "sig" : "304402204a40801a7e606ba78a0da9882ab23c7677b8642349ed3d652c5bfa5f2a9558fb02203a49b64848d682ef7f605f2832f7384bdc24ed2925825bf8ea77dc5981725782", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "special case hash", + "msg" : "383234363337383337", + "sig" : "3045022100eacc5e1a8304a74d2be412b078924b3bb3511bac855c05c9e5e9e44df3d61e9602207451cd8e18d6ed1885dd827714847f96ec4bb0ed4c36ce9808db8f714204f6d1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "special case hash", + "msg" : "3131303230383333373736", + "sig" : "304502202f7a5e9e5771d424f30f67fdab61e8ce4f8cd1214882adb65f7de94c31577052022100ac4e69808345809b44acb0b2bd889175fb75dd050c5a449ab9528f8f78daa10c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "special case hash", + "msg" : "313333383731363438", + "sig" : "3045022100ffcda40f792ce4d93e7e0f0e95e1a2147dddd7f6487621c30a03d710b3300219022079938b55f8a17f7ed7ba9ade8f2065a1fa77618f0b67add8d58c422c2453a49a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "special case hash", + "msg" : "333232313434313632", + "sig" : "304602210081f2359c4faba6b53d3e8c8c3fcc16a948350f7ab3a588b28c17603a431e39a8022100cd6f6a5cc3b55ead0ff695d06c6860b509e46d99fccefb9f7f9e101857f74300", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "special case hash", + "msg" : "3130363836363535353436", + "sig" : "3045022100dfc8bf520445cbb8ee1596fb073ea283ea130251a6fdffa5c3f5f2aaf75ca8080220048e33efce147c9dd92823640e338e68bfd7d0dc7a4905b3a7ac711e577e90e7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "special case hash", + "msg" : "3632313535323436", + "sig" : "3046022100ad019f74c6941d20efda70b46c53db166503a0e393e932f688227688ba6a576202210093320eb7ca0710255346bdbb3102cdcf7964ef2e0988e712bc05efe16c199345", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "special case hash", + "msg" : "37303330383138373734", + "sig" : "3046022100ac8096842e8add68c34e78ce11dd71e4b54316bd3ebf7fffdeb7bd5a3ebc1883022100f5ca2f4f23d674502d4caf85d187215d36e3ce9f0ce219709f21a3aac003b7a8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "special case hash", + "msg" : "35393234353233373434", + "sig" : "30440220677b2d3a59b18a5ff939b70ea002250889ddcd7b7b9d776854b4943693fb92f702206b4ba856ade7677bf30307b21f3ccda35d2f63aee81efd0bab6972cc0795db55", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "special case hash", + "msg" : "31343935353836363231", + "sig" : "30450220479e1ded14bcaed0379ba8e1b73d3115d84d31d4b7c30e1f05e1fc0d5957cfb0022100918f79e35b3d89487cf634a4f05b2e0c30857ca879f97c771e877027355b2443", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "special case hash", + "msg" : "34303035333134343036", + "sig" : "3044022043dfccd0edb9e280d9a58f01164d55c3d711e14b12ac5cf3b64840ead512a0a302201dbe33fa8ba84533cd5c4934365b3442ca1174899b78ef9a3199f49584389772", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "special case hash", + "msg" : "33303936343537353132", + "sig" : "304402205b09ab637bd4caf0f4c7c7e4bca592fea20e9087c259d26a38bb4085f0bbff11022045b7eb467b6748af618e9d80d6fdcd6aa24964e5a13f885bca8101de08eb0d75", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "special case hash", + "msg" : "32373834303235363230", + "sig" : "304502205e9b1c5a028070df5728c5c8af9b74e0667afa570a6cfa0114a5039ed15ee06f022100b1360907e2d9785ead362bb8d7bd661b6c29eeffd3c5037744edaeb9ad990c20", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "special case hash", + "msg" : "32363138373837343138", + "sig" : "304502200671a0a85c2b72d54a2fb0990e34538b4890050f5a5712f6d1a7a5fb8578f32e022100db1846bab6b7361479ab9c3285ca41291808f27fd5bd4fdac720e5854713694c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "special case hash", + "msg" : "31363432363235323632", + "sig" : "304402207673f8526748446477dbbb0590a45492c5d7d69859d301abbaedb35b2095103a02203dc70ddf9c6b524d886bed9e6af02e0e4dec0d417a414fed3807ef4422913d7c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "special case hash", + "msg" : "36383234313839343336", + "sig" : "304402207f085441070ecd2bb21285089ebb1aa6450d1a06c36d3ff39dfd657a796d12b50220249712012029870a2459d18d47da9aa492a5e6cb4b2d8dafa9e4c5c54a2b9a8b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "special case hash", + "msg" : "343834323435343235", + "sig" : "3046022100914c67fb61dd1e27c867398ea7322d5ab76df04bc5aa6683a8e0f30a5d287348022100fa07474031481dda4953e3ac1959ee8cea7e66ec412b38d6c96d28f6d37304ea", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "040ad99500288d466940031d72a9f5445a4d43784640855bf0a69874d2de5fe103c5011e6ef2c42dcd50d5d3d29f99ae6eba2c80c9244f4c5422f0979ff0c3ba5e", + "wx" : "0ad99500288d466940031d72a9f5445a4d43784640855bf0a69874d2de5fe103", + "wy" : "00c5011e6ef2c42dcd50d5d3d29f99ae6eba2c80c9244f4c5422f0979ff0c3ba5e" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040ad99500288d466940031d72a9f5445a4d43784640855bf0a69874d2de5fe103c5011e6ef2c42dcd50d5d3d29f99ae6eba2c80c9244f4c5422f0979ff0c3ba5e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECtmVACiNRmlAAx1yqfVEWk1DeEZA\nhVvwpph00t5f4QPFAR5u8sQtzVDV09Kfma5uuiyAySRPTFQi8Jef8MO6Xg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 285, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "303502104319055358e8617b0c46353d039cdaab022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000fffffffffffffffffffffffc022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04ab05fd9d0de26b9ce6f4819652d9fc69193d0aa398f0fba8013e09c58220455419235271228c786759095d12b75af0692dd4103f19f6a8c32f49435a1e9b8d45", + "wx" : "00ab05fd9d0de26b9ce6f4819652d9fc69193d0aa398f0fba8013e09c582204554", + "wy" : "19235271228c786759095d12b75af0692dd4103f19f6a8c32f49435a1e9b8d45" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ab05fd9d0de26b9ce6f4819652d9fc69193d0aa398f0fba8013e09c58220455419235271228c786759095d12b75af0692dd4103f19f6a8c32f49435a1e9b8d45", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqwX9nQ3ia5zm9IGWUtn8aRk9CqOY\n8PuoAT4JxYIgRVQZI1JxIox4Z1kJXRK3WvBpLdQQPxn2qMMvSUNaHpuNRQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 287, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0480984f39a1ff38a86a68aa4201b6be5dfbfecf876219710b07badf6fdd4c6c5611feb97390d9826e7a06dfb41871c940d74415ed3cac2089f1445019bb55ed95", + "wx" : "0080984f39a1ff38a86a68aa4201b6be5dfbfecf876219710b07badf6fdd4c6c56", + "wy" : "11feb97390d9826e7a06dfb41871c940d74415ed3cac2089f1445019bb55ed95" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000480984f39a1ff38a86a68aa4201b6be5dfbfecf876219710b07badf6fdd4c6c5611feb97390d9826e7a06dfb41871c940d74415ed3cac2089f1445019bb55ed95", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEgJhPOaH/OKhqaKpCAba+Xfv+z4di\nGXELB7rfb91MbFYR/rlzkNmCbnoG37QYcclA10QV7TysIInxRFAZu1XtlQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 288, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100909135bdb6799286170f5ead2de4f6511453fe50914f3df2de54a36383df8dd4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "044201b4272944201c3294f5baa9a3232b6dd687495fcc19a70a95bc602b4f7c0595c37eba9ee8171c1bb5ac6feaf753bc36f463e3aef16629572c0c0a8fb0800e", + "wx" : "4201b4272944201c3294f5baa9a3232b6dd687495fcc19a70a95bc602b4f7c05", + "wy" : "0095c37eba9ee8171c1bb5ac6feaf753bc36f463e3aef16629572c0c0a8fb0800e" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044201b4272944201c3294f5baa9a3232b6dd687495fcc19a70a95bc602b4f7c0595c37eba9ee8171c1bb5ac6feaf753bc36f463e3aef16629572c0c0a8fb0800e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQgG0JylEIBwylPW6qaMjK23Wh0lf\nzBmnCpW8YCtPfAWVw366nugXHBu1rG/q91O8NvRj467xZilXLAwKj7CADg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 289, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022027b4577ca009376f71303fd5dd227dcef5deb773ad5f5a84360644669ca249a5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04a71af64de5126a4a4e02b7922d66ce9415ce88a4c9d25514d91082c8725ac9575d47723c8fbe580bb369fec9c2665d8e30a435b9932645482e7c9f11e872296b", + "wx" : "00a71af64de5126a4a4e02b7922d66ce9415ce88a4c9d25514d91082c8725ac957", + "wy" : "5d47723c8fbe580bb369fec9c2665d8e30a435b9932645482e7c9f11e872296b" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a71af64de5126a4a4e02b7922d66ce9415ce88a4c9d25514d91082c8725ac9575d47723c8fbe580bb369fec9c2665d8e30a435b9932645482e7c9f11e872296b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEpxr2TeUSakpOAreSLWbOlBXOiKTJ\n0lUU2RCCyHJayVddR3I8j75YC7Np/snCZl2OMKQ1uZMmRUgufJ8R6HIpaw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 290, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020105020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "046627cec4f0731ea23fc2931f90ebe5b7572f597d20df08fc2b31ee8ef16b15726170ed77d8d0a14fc5c9c3c4c9be7f0d3ee18f709bb275eaf2073e258fe694a5", + "wx" : "6627cec4f0731ea23fc2931f90ebe5b7572f597d20df08fc2b31ee8ef16b1572", + "wy" : "6170ed77d8d0a14fc5c9c3c4c9be7f0d3ee18f709bb275eaf2073e258fe694a5" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046627cec4f0731ea23fc2931f90ebe5b7572f597d20df08fc2b31ee8ef16b15726170ed77d8d0a14fc5c9c3c4c9be7f0d3ee18f709bb275eaf2073e258fe694a5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZifOxPBzHqI/wpMfkOvlt1cvWX0g\n3wj8KzHujvFrFXJhcO132NChT8XJw8TJvn8NPuGPcJuyderyBz4lj+aUpQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 291, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020105020103", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "045a7c8825e85691cce1f5e7544c54e73f14afc010cb731343262ca7ec5a77f5bfef6edf62a4497c1bd7b147fb6c3d22af3c39bfce95f30e13a16d3d7b2812f813", + "wx" : "5a7c8825e85691cce1f5e7544c54e73f14afc010cb731343262ca7ec5a77f5bf", + "wy" : "00ef6edf62a4497c1bd7b147fb6c3d22af3c39bfce95f30e13a16d3d7b2812f813" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045a7c8825e85691cce1f5e7544c54e73f14afc010cb731343262ca7ec5a77f5bfef6edf62a4497c1bd7b147fb6c3d22af3c39bfce95f30e13a16d3d7b2812f813", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWnyIJehWkczh9edUTFTnPxSvwBDL\ncxNDJiyn7Fp39b/vbt9ipEl8G9exR/tsPSKvPDm/zpXzDhOhbT17KBL4Ew==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 292, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020105020105", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04cbe0c29132cd738364fedd603152990c048e5e2fff996d883fa6caca7978c73770af6a8ce44cb41224b2603606f4c04d188e80bff7cc31ad5189d4ab0d70e8c1", + "wx" : "00cbe0c29132cd738364fedd603152990c048e5e2fff996d883fa6caca7978c737", + "wy" : "70af6a8ce44cb41224b2603606f4c04d188e80bff7cc31ad5189d4ab0d70e8c1" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cbe0c29132cd738364fedd603152990c048e5e2fff996d883fa6caca7978c73770af6a8ce44cb41224b2603606f4c04d188e80bff7cc31ad5189d4ab0d70e8c1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEy+DCkTLNc4Nk/t1gMVKZDASOXi//\nmW2IP6bKynl4xzdwr2qM5Ey0EiSyYDYG9MBNGI6Av/fMMa1RidSrDXDowQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 293, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020105020106", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632556020106", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "044be4178097002f0deab68f0d9a130e0ed33a6795d02a20796db83444b037e13920f13051e0eecdcfce4dacea0f50d1f247caa669f193c1b4075b51ae296d2d56", + "wx" : "4be4178097002f0deab68f0d9a130e0ed33a6795d02a20796db83444b037e139", + "wy" : "20f13051e0eecdcfce4dacea0f50d1f247caa669f193c1b4075b51ae296d2d56" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044be4178097002f0deab68f0d9a130e0ed33a6795d02a20796db83444b037e13920f13051e0eecdcfce4dacea0f50d1f247caa669f193c1b4075b51ae296d2d56", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAES+QXgJcALw3qto8NmhMODtM6Z5XQ\nKiB5bbg0RLA34Tkg8TBR4O7Nz85NrOoPUNHyR8qmafGTwbQHW1GuKW0tVg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 295, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3026020105022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc75fbd8", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04d0f73792203716afd4be4329faa48d269f15313ebbba379d7783c97bf3e890d9971f4a3206605bec21782bf5e275c714417e8f566549e6bc68690d2363c89cc1", + "wx" : "00d0f73792203716afd4be4329faa48d269f15313ebbba379d7783c97bf3e890d9", + "wy" : "00971f4a3206605bec21782bf5e275c714417e8f566549e6bc68690d2363c89cc1" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d0f73792203716afd4be4329faa48d269f15313ebbba379d7783c97bf3e890d9971f4a3206605bec21782bf5e275c714417e8f566549e6bc68690d2363c89cc1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0Pc3kiA3Fq/UvkMp+qSNJp8VMT67\nujedd4PJe/PokNmXH0oyBmBb7CF4K/XidccUQX6PVmVJ5rxoaQ0jY8icwQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 296, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "3027020201000221008f1e3c7862c58b16bb76eddbb76eddbb516af4f63f2d74d76e0d28c9bb75ea88", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "044838b2be35a6276a80ef9e228140f9d9b96ce83b7a254f71ccdebbb8054ce05ffa9cbc123c919b19e00238198d04069043bd660a828814051fcb8aac738a6c6b", + "wx" : "4838b2be35a6276a80ef9e228140f9d9b96ce83b7a254f71ccdebbb8054ce05f", + "wy" : "00fa9cbc123c919b19e00238198d04069043bd660a828814051fcb8aac738a6c6b" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044838b2be35a6276a80ef9e228140f9d9b96ce83b7a254f71ccdebbb8054ce05ffa9cbc123c919b19e00238198d04069043bd660a828814051fcb8aac738a6c6b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAESDiyvjWmJ2qA754igUD52bls6Dt6\nJU9xzN67uAVM4F/6nLwSPJGbGeACOBmNBAaQQ71mCoKIFAUfy4qsc4psaw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 297, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "302c02072d9b4d347952d6022100ef3043e7329581dbb3974497710ab11505ee1c87ff907beebadd195a0ffe6d7a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "047393983ca30a520bbc4783dc9960746aab444ef520c0a8e771119aa4e74b0f64e9d7be1ab01a0bf626e709863e6a486dbaf32793afccf774e2c6cd27b1857526", + "wx" : "7393983ca30a520bbc4783dc9960746aab444ef520c0a8e771119aa4e74b0f64", + "wy" : "00e9d7be1ab01a0bf626e709863e6a486dbaf32793afccf774e2c6cd27b1857526" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047393983ca30a520bbc4783dc9960746aab444ef520c0a8e771119aa4e74b0f64e9d7be1ab01a0bf626e709863e6a486dbaf32793afccf774e2c6cd27b1857526", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEc5OYPKMKUgu8R4PcmWB0aqtETvUg\nwKjncRGapOdLD2Tp174asBoL9ibnCYY+akhtuvMnk6/M93Tixs0nsYV1Jg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 298, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3032020d1033e67e37b32b445580bf4eff0221008b748b74000000008b748b748b748b7466e769ad4a16d3dcd87129b8e91d1b4d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "045ac331a1103fe966697379f356a937f350588a05477e308851b8a502d5dfcdc5fe9993df4b57939b2b8da095bf6d794265204cfe03be995a02e65d408c871c0b", + "wx" : "5ac331a1103fe966697379f356a937f350588a05477e308851b8a502d5dfcdc5", + "wy" : "00fe9993df4b57939b2b8da095bf6d794265204cfe03be995a02e65d408c871c0b" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045ac331a1103fe966697379f356a937f350588a05477e308851b8a502d5dfcdc5fe9993df4b57939b2b8da095bf6d794265204cfe03be995a02e65d408c871c0b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEWsMxoRA/6WZpc3nzVqk381BYigVH\nfjCIUbilAtXfzcX+mZPfS1eTmyuNoJW/bXlCZSBM/gO+mVoC5l1AjIccCw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 299, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "302702020100022100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "041d209be8de2de877095a399d3904c74cc458d926e27bb8e58e5eae5767c41509dd59e04c214f7b18dce351fc2a549893a6860e80163f38cc60a4f2c9d040d8c9", + "wx" : "1d209be8de2de877095a399d3904c74cc458d926e27bb8e58e5eae5767c41509", + "wy" : "00dd59e04c214f7b18dce351fc2a549893a6860e80163f38cc60a4f2c9d040d8c9" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200041d209be8de2de877095a399d3904c74cc458d926e27bb8e58e5eae5767c41509dd59e04c214f7b18dce351fc2a549893a6860e80163f38cc60a4f2c9d040d8c9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHSCb6N4t6HcJWjmdOQTHTMRY2Sbi\ne7jljl6uV2fEFQndWeBMIU97GNzjUfwqVJiTpoYOgBY/OMxgpPLJ0EDYyQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 300, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "3032020d062522bbd3ecbe7c39e93e7c25022100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04083539fbee44625e3acaafa2fcb41349392cef0633a1b8fabecee0c133b10e99915c1ebe7bf00df8535196770a58047ae2a402f26326bb7d41d4d7616337911e", + "wx" : "083539fbee44625e3acaafa2fcb41349392cef0633a1b8fabecee0c133b10e99", + "wy" : "00915c1ebe7bf00df8535196770a58047ae2a402f26326bb7d41d4d7616337911e" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004083539fbee44625e3acaafa2fcb41349392cef0633a1b8fabecee0c133b10e99915c1ebe7bf00df8535196770a58047ae2a402f26326bb7d41d4d7616337911e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECDU5++5EYl46yq+i/LQTSTks7wYz\nobj6vs7gwTOxDpmRXB6+e/AN+FNRlncKWAR64qQC8mMmu31B1NdhYzeRHg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 301, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "3045022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d50220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "048aeb368a7027a4d64abdea37390c0c1d6a26f399e2d9734de1eb3d0e1937387405bd13834715e1dbae9b875cf07bd55e1b6691c7f7536aef3b19bf7a4adf576d", + "wx" : "008aeb368a7027a4d64abdea37390c0c1d6a26f399e2d9734de1eb3d0e19373874", + "wy" : "05bd13834715e1dbae9b875cf07bd55e1b6691c7f7536aef3b19bf7a4adf576d" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048aeb368a7027a4d64abdea37390c0c1d6a26f399e2d9734de1eb3d0e1937387405bd13834715e1dbae9b875cf07bd55e1b6691c7f7536aef3b19bf7a4adf576d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEius2inAnpNZKveo3OQwMHWom85ni\n2XNN4es9Dhk3OHQFvRODRxXh266bh1zwe9VeG2aRx/dTau87Gb96St9XbQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 302, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "30250220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "30250220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04b533d4695dd5b8c5e07757e55e6e516f7e2c88fa0239e23f60e8ec07dd70f2871b134ee58cc583278456863f33c3a85d881f7d4a39850143e29d4eaf009afe47", + "wx" : "00b533d4695dd5b8c5e07757e55e6e516f7e2c88fa0239e23f60e8ec07dd70f287", + "wy" : "1b134ee58cc583278456863f33c3a85d881f7d4a39850143e29d4eaf009afe47" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b533d4695dd5b8c5e07757e55e6e516f7e2c88fa0239e23f60e8ec07dd70f2871b134ee58cc583278456863f33c3a85d881f7d4a39850143e29d4eaf009afe47", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEtTPUaV3VuMXgd1flXm5Rb34siPoC\nOeI/YOjsB91w8ocbE07ljMWDJ4RWhj8zw6hdiB99SjmFAUPinU6vAJr+Rw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 304, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "304402207fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a80220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04f50d371b91bfb1d7d14e1323523bc3aa8cbf2c57f9e284de628c8b4536787b86f94ad887ac94d527247cd2e7d0c8b1291c553c9730405380b14cbb209f5fa2dd", + "wx" : "00f50d371b91bfb1d7d14e1323523bc3aa8cbf2c57f9e284de628c8b4536787b86", + "wy" : "00f94ad887ac94d527247cd2e7d0c8b1291c553c9730405380b14cbb209f5fa2dd" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f50d371b91bfb1d7d14e1323523bc3aa8cbf2c57f9e284de628c8b4536787b86f94ad887ac94d527247cd2e7d0c8b1291c553c9730405380b14cbb209f5fa2dd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9Q03G5G/sdfRThMjUjvDqoy/LFf5\n4oTeYoyLRTZ4e4b5StiHrJTVJyR80ufQyLEpHFU8lzBAU4CxTLsgn1+i3Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 305, + "comment" : "edge case for signature malleability", + "msg" : "313233343030", + "sig" : "304402207fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a902207fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0468ec6e298eafe16539156ce57a14b04a7047c221bafc3a582eaeb0d857c4d94697bed1af17850117fdb39b2324f220a5698ed16c426a27335bb385ac8ca6fb30", + "wx" : "68ec6e298eafe16539156ce57a14b04a7047c221bafc3a582eaeb0d857c4d946", + "wy" : "0097bed1af17850117fdb39b2324f220a5698ed16c426a27335bb385ac8ca6fb30" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000468ec6e298eafe16539156ce57a14b04a7047c221bafc3a582eaeb0d857c4d94697bed1af17850117fdb39b2324f220a5698ed16c426a27335bb385ac8ca6fb30", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaOxuKY6v4WU5FWzlehSwSnBHwiG6\n/DpYLq6w2FfE2UaXvtGvF4UBF/2zmyMk8iClaY7RbEJqJzNbs4WsjKb7MA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 306, + "comment" : "edge case for signature malleability", + "msg" : "313233343030", + "sig" : "304402207fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a902207fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0469da0364734d2e530fece94019265fefb781a0f1b08f6c8897bdf6557927c8b866d2d3c7dcd518b23d726960f069ad71a933d86ef8abbcce8b20f71e2a847002", + "wx" : "69da0364734d2e530fece94019265fefb781a0f1b08f6c8897bdf6557927c8b8", + "wy" : "66d2d3c7dcd518b23d726960f069ad71a933d86ef8abbcce8b20f71e2a847002" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000469da0364734d2e530fece94019265fefb781a0f1b08f6c8897bdf6557927c8b866d2d3c7dcd518b23d726960f069ad71a933d86ef8abbcce8b20f71e2a847002", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEadoDZHNNLlMP7OlAGSZf77eBoPGw\nj2yIl732VXknyLhm0tPH3NUYsj1yaWDwaa1xqTPYbvirvM6LIPceKoRwAg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 307, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "30450220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca605023", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04d8adc00023a8edc02576e2b63e3e30621a471e2b2320620187bf067a1ac1ff3233e2b50ec09807accb36131fff95ed12a09a86b4ea9690aa32861576ba2362e1", + "wx" : "00d8adc00023a8edc02576e2b63e3e30621a471e2b2320620187bf067a1ac1ff32", + "wy" : "33e2b50ec09807accb36131fff95ed12a09a86b4ea9690aa32861576ba2362e1" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d8adc00023a8edc02576e2b63e3e30621a471e2b2320620187bf067a1ac1ff3233e2b50ec09807accb36131fff95ed12a09a86b4ea9690aa32861576ba2362e1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2K3AACOo7cAlduK2Pj4wYhpHHisj\nIGIBh78GehrB/zIz4rUOwJgHrMs2Ex//le0SoJqGtOqWkKoyhhV2uiNi4Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 308, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022044a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "043623ac973ced0a56fa6d882f03a7d5c7edca02cfc7b2401fab3690dbe75ab7858db06908e64b28613da7257e737f39793da8e713ba0643b92e9bb3252be7f8fe", + "wx" : "3623ac973ced0a56fa6d882f03a7d5c7edca02cfc7b2401fab3690dbe75ab785", + "wy" : "008db06908e64b28613da7257e737f39793da8e713ba0643b92e9bb3252be7f8fe" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043623ac973ced0a56fa6d882f03a7d5c7edca02cfc7b2401fab3690dbe75ab7858db06908e64b28613da7257e737f39793da8e713ba0643b92e9bb3252be7f8fe", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENiOslzztClb6bYgvA6fVx+3KAs/H\nskAfqzaQ2+dat4WNsGkI5ksoYT2nJX5zfzl5PajnE7oGQ7kum7MlK+f4/g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 309, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c700220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04cf04ea77e9622523d894b93ff52dc3027b31959503b6fa3890e5e04263f922f1e8528fb7c006b3983c8b8400e57b4ed71740c2f3975438821199bedeaecab2e9", + "wx" : "00cf04ea77e9622523d894b93ff52dc3027b31959503b6fa3890e5e04263f922f1", + "wy" : "00e8528fb7c006b3983c8b8400e57b4ed71740c2f3975438821199bedeaecab2e9" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cf04ea77e9622523d894b93ff52dc3027b31959503b6fa3890e5e04263f922f1e8528fb7c006b3983c8b8400e57b4ed71740c2f3975438821199bedeaecab2e9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzwTqd+liJSPYlLk/9S3DAnsxlZUD\ntvo4kOXgQmP5IvHoUo+3wAazmDyLhADle07XF0DC85dUOIIRmb7ersqy6Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 310, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "30450220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022100aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04db7a2c8a1ab573e5929dc24077b508d7e683d49227996bda3e9f78dbeff773504f417f3bc9a88075c2e0aadd5a13311730cf7cc76a82f11a36eaf08a6c99a206", + "wx" : "00db7a2c8a1ab573e5929dc24077b508d7e683d49227996bda3e9f78dbeff77350", + "wy" : "4f417f3bc9a88075c2e0aadd5a13311730cf7cc76a82f11a36eaf08a6c99a206" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004db7a2c8a1ab573e5929dc24077b508d7e683d49227996bda3e9f78dbeff773504f417f3bc9a88075c2e0aadd5a13311730cf7cc76a82f11a36eaf08a6c99a206", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE23osihq1c+WSncJAd7UI1+aD1JIn\nmWvaPp942+/3c1BPQX87yaiAdcLgqt1aEzEXMM98x2qC8Ro26vCKbJmiBg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 311, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100e91e1ba60fdedb76a46bcb51dc0b8b4b7e019f0a28721885fa5d3a8196623397", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04dead11c7a5b396862f21974dc4752fadeff994efe9bbd05ab413765ea80b6e1f1de3f0640e8ac6edcf89cff53c40e265bb94078a343736df07aa0318fc7fe1ff", + "wx" : "00dead11c7a5b396862f21974dc4752fadeff994efe9bbd05ab413765ea80b6e1f", + "wy" : "1de3f0640e8ac6edcf89cff53c40e265bb94078a343736df07aa0318fc7fe1ff" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004dead11c7a5b396862f21974dc4752fadeff994efe9bbd05ab413765ea80b6e1f1de3f0640e8ac6edcf89cff53c40e265bb94078a343736df07aa0318fc7fe1ff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3q0Rx6WzloYvIZdNxHUvre/5lO/p\nu9BatBN2XqgLbh8d4/BkDorG7c+Jz/U8QOJlu5QHijQ3Nt8HqgMY/H/h/w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 312, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100fdea5843ffeb73af94313ba4831b53fe24f799e525b1e8e8c87b59b95b430ad9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04d0bc472e0d7c81ebaed3a6ef96c18613bb1fea6f994326fbe80e00dfde67c7e9986c723ea4843d48389b946f64ad56c83ad70ff17ba85335667d1bb9fa619efd", + "wx" : "00d0bc472e0d7c81ebaed3a6ef96c18613bb1fea6f994326fbe80e00dfde67c7e9", + "wy" : "00986c723ea4843d48389b946f64ad56c83ad70ff17ba85335667d1bb9fa619efd" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d0bc472e0d7c81ebaed3a6ef96c18613bb1fea6f994326fbe80e00dfde67c7e9986c723ea4843d48389b946f64ad56c83ad70ff17ba85335667d1bb9fa619efd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0LxHLg18geuu06bvlsGGE7sf6m+Z\nQyb76A4A395nx+mYbHI+pIQ9SDiblG9krVbIOtcP8XuoUzVmfRu5+mGe/Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 313, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022003ffcabf2f1b4d2a65190db1680d62bb994e41c5251cd73b3c3dfc5e5bafc035", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04a0a44ca947d66a2acb736008b9c08d1ab2ad03776e02640f78495d458dd51c326337fe5cf8c4604b1f1c409dc2d872d4294a4762420df43a30a2392e40426add", + "wx" : "00a0a44ca947d66a2acb736008b9c08d1ab2ad03776e02640f78495d458dd51c32", + "wy" : "6337fe5cf8c4604b1f1c409dc2d872d4294a4762420df43a30a2392e40426add" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a0a44ca947d66a2acb736008b9c08d1ab2ad03776e02640f78495d458dd51c326337fe5cf8c4604b1f1c409dc2d872d4294a4762420df43a30a2392e40426add", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEoKRMqUfWairLc2AIucCNGrKtA3du\nAmQPeEldRY3VHDJjN/5c+MRgSx8cQJ3C2HLUKUpHYkIN9DowojkuQEJq3Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 314, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02204dfbc401f971cd304b33dfdb17d0fed0fe4c1a88ae648e0d2847f74977534989", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04c9c2115290d008b45fb65fad0f602389298c25420b775019d42b62c3ce8a96b73877d25a8080dc02d987ca730f0405c2c9dbefac46f9e601cc3f06e9713973fd", + "wx" : "00c9c2115290d008b45fb65fad0f602389298c25420b775019d42b62c3ce8a96b7", + "wy" : "3877d25a8080dc02d987ca730f0405c2c9dbefac46f9e601cc3f06e9713973fd" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004c9c2115290d008b45fb65fad0f602389298c25420b775019d42b62c3ce8a96b73877d25a8080dc02d987ca730f0405c2c9dbefac46f9e601cc3f06e9713973fd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEycIRUpDQCLRftl+tD2AjiSmMJUIL\nd1AZ1Ctiw86Klrc4d9JagIDcAtmHynMPBAXCydvvrEb55gHMPwbpcTlz/Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 315, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bc4024761cd2ffd43dfdb17d0fed112b988977055cd3a8e54971eba9cda5ca71", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "045eca1ef4c287dddc66b8bccf1b88e8a24c0018962f3c5e7efa83bc1a5ff6033e5e79c4cb2c245b8c45abdce8a8e4da758d92a607c32cd407ecaef22f1c934a71", + "wx" : "5eca1ef4c287dddc66b8bccf1b88e8a24c0018962f3c5e7efa83bc1a5ff6033e", + "wy" : "5e79c4cb2c245b8c45abdce8a8e4da758d92a607c32cd407ecaef22f1c934a71" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045eca1ef4c287dddc66b8bccf1b88e8a24c0018962f3c5e7efa83bc1a5ff6033e5e79c4cb2c245b8c45abdce8a8e4da758d92a607c32cd407ecaef22f1c934a71", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXsoe9MKH3dxmuLzPG4jookwAGJYv\nPF5++oO8Gl/2Az5eecTLLCRbjEWr3Oio5Np1jZKmB8Ms1AfsrvIvHJNKcQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 316, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220788048ed39a5ffa77bfb62fa1fda2257742bf35d128fb3459f2a0c909ee86f91", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "045caaa030e7fdf0e4936bc7ab5a96353e0a01e4130c3f8bf22d473e317029a47adeb6adc462f7058f2a20d371e9702254e9b201642005b3ceda926b42b178bef9", + "wx" : "5caaa030e7fdf0e4936bc7ab5a96353e0a01e4130c3f8bf22d473e317029a47a", + "wy" : "00deb6adc462f7058f2a20d371e9702254e9b201642005b3ceda926b42b178bef9" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045caaa030e7fdf0e4936bc7ab5a96353e0a01e4130c3f8bf22d473e317029a47adeb6adc462f7058f2a20d371e9702254e9b201642005b3ceda926b42b178bef9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXKqgMOf98OSTa8erWpY1PgoB5BMM\nP4vyLUc+MXAppHretq3EYvcFjyog03HpcCJU6bIBZCAFs87akmtCsXi++Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 317, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220476d9131fd381bd917d0fed112bc9e0a5924b5ed5b11167edd8b23582b3cb15e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04c2fd20bac06e555bb8ac0ce69eb1ea20f83a1fc3501c8a66469b1a31f619b0986237050779f52b615bd7b8d76a25fc95ca2ed32525c75f27ffc87ac397e6cbaf", + "wx" : "00c2fd20bac06e555bb8ac0ce69eb1ea20f83a1fc3501c8a66469b1a31f619b098", + "wy" : "6237050779f52b615bd7b8d76a25fc95ca2ed32525c75f27ffc87ac397e6cbaf" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004c2fd20bac06e555bb8ac0ce69eb1ea20f83a1fc3501c8a66469b1a31f619b0986237050779f52b615bd7b8d76a25fc95ca2ed32525c75f27ffc87ac397e6cbaf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEwv0gusBuVVu4rAzmnrHqIPg6H8NQ\nHIpmRpsaMfYZsJhiNwUHefUrYVvXuNdqJfyVyi7TJSXHXyf/yHrDl+bLrw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 318, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0221008374253e3e21bd154448d0a8f640fe46fafa8b19ce78d538f6cc0a19662d3601", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "043fd6a1ca7f77fb3b0bbe726c372010068426e11ea6ae78ce17bedae4bba86ced03ce5516406bf8cfaab8745eac1cd69018ad6f50b5461872ddfc56e0db3c8ff4", + "wx" : "3fd6a1ca7f77fb3b0bbe726c372010068426e11ea6ae78ce17bedae4bba86ced", + "wy" : "03ce5516406bf8cfaab8745eac1cd69018ad6f50b5461872ddfc56e0db3c8ff4" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043fd6a1ca7f77fb3b0bbe726c372010068426e11ea6ae78ce17bedae4bba86ced03ce5516406bf8cfaab8745eac1cd69018ad6f50b5461872ddfc56e0db3c8ff4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEP9ahyn93+zsLvnJsNyAQBoQm4R6m\nrnjOF77a5LuobO0DzlUWQGv4z6q4dF6sHNaQGK1vULVGGHLd/Fbg2zyP9A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 319, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220357cfd3be4d01d413c5b9ede36cba5452c11ee7fe14879e749ae6a2d897a52d6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "049cb8e51e27a5ae3b624a60d6dc32734e4989db20e9bca3ede1edf7b086911114b4c104ab3c677e4b36d6556e8ad5f523410a19f2e277aa895fc57322b4427544", + "wx" : "009cb8e51e27a5ae3b624a60d6dc32734e4989db20e9bca3ede1edf7b086911114", + "wy" : "00b4c104ab3c677e4b36d6556e8ad5f523410a19f2e277aa895fc57322b4427544" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200049cb8e51e27a5ae3b624a60d6dc32734e4989db20e9bca3ede1edf7b086911114b4c104ab3c677e4b36d6556e8ad5f523410a19f2e277aa895fc57322b4427544", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnLjlHielrjtiSmDW3DJzTkmJ2yDp\nvKPt4e33sIaRERS0wQSrPGd+SzbWVW6K1fUjQQoZ8uJ3qolfxXMitEJ1RA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 320, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022029798c5c0ee287d4a5e8e6b799fd86b8df5225298e6ffc807cd2f2bc27a0a6d8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04a3e52c156dcaf10502620b7955bc2b40bc78ef3d569e1223c262512d8f49602a4a2039f31c1097024ad3cc86e57321de032355463486164cf192944977df147f", + "wx" : "00a3e52c156dcaf10502620b7955bc2b40bc78ef3d569e1223c262512d8f49602a", + "wy" : "4a2039f31c1097024ad3cc86e57321de032355463486164cf192944977df147f" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a3e52c156dcaf10502620b7955bc2b40bc78ef3d569e1223c262512d8f49602a4a2039f31c1097024ad3cc86e57321de032355463486164cf192944977df147f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEo+UsFW3K8QUCYgt5VbwrQLx47z1W\nnhIjwmJRLY9JYCpKIDnzHBCXAkrTzIblcyHeAyNVRjSGFkzxkpRJd98Ufw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 321, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02200b70f22c781092452dca1a5711fa3a5a1f72add1bf52c2ff7cae4820b30078dd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04f19b78928720d5bee8e670fb90010fb15c37bf91b58a5157c3f3c059b2655e88cf701ec962fb4a11dcf273f5dc357e58468560c7cfeb942d074abd4329260509", + "wx" : "00f19b78928720d5bee8e670fb90010fb15c37bf91b58a5157c3f3c059b2655e88", + "wy" : "00cf701ec962fb4a11dcf273f5dc357e58468560c7cfeb942d074abd4329260509" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f19b78928720d5bee8e670fb90010fb15c37bf91b58a5157c3f3c059b2655e88cf701ec962fb4a11dcf273f5dc357e58468560c7cfeb942d074abd4329260509", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8Zt4kocg1b7o5nD7kAEPsVw3v5G1\nilFXw/PAWbJlXojPcB7JYvtKEdzyc/XcNX5YRoVgx8/rlC0HSr1DKSYFCQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 322, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022016e1e458f021248a5b9434ae23f474b43ee55ba37ea585fef95c90416600f1ba", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0483a744459ecdfb01a5cf52b27a05bb7337482d242f235d7b4cb89345545c90a8c05d49337b9649813287de9ffe90355fd905df5f3c32945828121f37cc50de6e", + "wx" : "0083a744459ecdfb01a5cf52b27a05bb7337482d242f235d7b4cb89345545c90a8", + "wy" : "00c05d49337b9649813287de9ffe90355fd905df5f3c32945828121f37cc50de6e" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000483a744459ecdfb01a5cf52b27a05bb7337482d242f235d7b4cb89345545c90a8c05d49337b9649813287de9ffe90355fd905df5f3c32945828121f37cc50de6e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEg6dERZ7N+wGlz1KyegW7czdILSQv\nI117TLiTRVRckKjAXUkze5ZJgTKH3p/+kDVf2QXfXzwylFgoEh83zFDebg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 323, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02202252d6856831b6cf895e4f0535eeaf0e5e5809753df848fe760ad86219016a97", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04dd13c6b34c56982ddae124f039dfd23f4b19bbe88cee8e528ae51e5d6f3a21d7bfad4c2e6f263fe5eb59ca974d039fc0e4c3345692fb5320bdae4bd3b42a45ff", + "wx" : "00dd13c6b34c56982ddae124f039dfd23f4b19bbe88cee8e528ae51e5d6f3a21d7", + "wy" : "00bfad4c2e6f263fe5eb59ca974d039fc0e4c3345692fb5320bdae4bd3b42a45ff" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004dd13c6b34c56982ddae124f039dfd23f4b19bbe88cee8e528ae51e5d6f3a21d7bfad4c2e6f263fe5eb59ca974d039fc0e4c3345692fb5320bdae4bd3b42a45ff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3RPGs0xWmC3a4STwOd/SP0sZu+iM\n7o5SiuUeXW86Ide/rUwubyY/5etZypdNA5/A5MM0VpL7UyC9rkvTtCpF/w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 324, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02210081ffe55f178da695b28c86d8b406b15dab1a9e39661a3ae017fbe390ac0972c3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0467e6f659cdde869a2f65f094e94e5b4dfad636bbf95192feeed01b0f3deb7460a37e0a51f258b7aeb51dfe592f5cfd5685bbe58712c8d9233c62886437c38ba0", + "wx" : "67e6f659cdde869a2f65f094e94e5b4dfad636bbf95192feeed01b0f3deb7460", + "wy" : "00a37e0a51f258b7aeb51dfe592f5cfd5685bbe58712c8d9233c62886437c38ba0" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000467e6f659cdde869a2f65f094e94e5b4dfad636bbf95192feeed01b0f3deb7460a37e0a51f258b7aeb51dfe592f5cfd5685bbe58712c8d9233c62886437c38ba0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEZ+b2Wc3ehpovZfCU6U5bTfrWNrv5\nUZL+7tAbDz3rdGCjfgpR8li3rrUd/lkvXP1WhbvlhxLI2SM8YohkN8OLoA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 325, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02207fffffffaaaaaaaaffffffffffffffffe9a2538f37b28a2c513dee40fecbb71a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "042eb6412505aec05c6545f029932087e490d05511e8ec1f599617bb367f9ecaaf805f51efcc4803403f9b1ae0124890f06a43fedcddb31830f6669af292895cb0", + "wx" : "2eb6412505aec05c6545f029932087e490d05511e8ec1f599617bb367f9ecaaf", + "wy" : "00805f51efcc4803403f9b1ae0124890f06a43fedcddb31830f6669af292895cb0" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042eb6412505aec05c6545f029932087e490d05511e8ec1f599617bb367f9ecaaf805f51efcc4803403f9b1ae0124890f06a43fedcddb31830f6669af292895cb0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAELrZBJQWuwFxlRfApkyCH5JDQVRHo\n7B9Zlhe7Nn+eyq+AX1HvzEgDQD+bGuASSJDwakP+3N2zGDD2ZprykolcsA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 326, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100b62f26b5f2a2b26f6de86d42ad8a13da3ab3cccd0459b201de009e526adf21f2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0484db645868eab35e3a9fd80e056e2e855435e3a6b68d75a50a854625fe0d7f356d2589ac655edc9a11ef3e075eddda9abf92e72171570ef7bf43a2ee39338cfe", + "wx" : "0084db645868eab35e3a9fd80e056e2e855435e3a6b68d75a50a854625fe0d7f35", + "wy" : "6d2589ac655edc9a11ef3e075eddda9abf92e72171570ef7bf43a2ee39338cfe" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000484db645868eab35e3a9fd80e056e2e855435e3a6b68d75a50a854625fe0d7f356d2589ac655edc9a11ef3e075eddda9abf92e72171570ef7bf43a2ee39338cfe", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhNtkWGjqs146n9gOBW4uhVQ146a2\njXWlCoVGJf4NfzVtJYmsZV7cmhHvPgde3dqav5LnIXFXDve/Q6LuOTOM/g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 327, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bb1d9ac949dd748cd02bbbe749bd351cd57b38bb61403d700686aa7b4c90851e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0491b9e47c56278662d75c0983b22ca8ea6aa5059b7a2ff7637eb2975e386ad66349aa8ff283d0f77c18d6d11dc062165fd13c3c0310679c1408302a16854ecfbd", + "wx" : "0091b9e47c56278662d75c0983b22ca8ea6aa5059b7a2ff7637eb2975e386ad663", + "wy" : "49aa8ff283d0f77c18d6d11dc062165fd13c3c0310679c1408302a16854ecfbd" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000491b9e47c56278662d75c0983b22ca8ea6aa5059b7a2ff7637eb2975e386ad66349aa8ff283d0f77c18d6d11dc062165fd13c3c0310679c1408302a16854ecfbd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkbnkfFYnhmLXXAmDsiyo6mqlBZt6\nL/djfrKXXjhq1mNJqo/yg9D3fBjW0R3AYhZf0Tw8AxBnnBQIMCoWhU7PvQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 328, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022066755a00638cdaec1c732513ca0234ece52545dac11f816e818f725b4f60aaf2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04f3ec2f13caf04d0192b47fb4c5311fb6d4dc6b0a9e802e5327f7ec5ee8e4834df97e3e468b7d0db867d6ecfe81e2b0f9531df87efdb47c1338ac321fefe5a432", + "wx" : "00f3ec2f13caf04d0192b47fb4c5311fb6d4dc6b0a9e802e5327f7ec5ee8e4834d", + "wy" : "00f97e3e468b7d0db867d6ecfe81e2b0f9531df87efdb47c1338ac321fefe5a432" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f3ec2f13caf04d0192b47fb4c5311fb6d4dc6b0a9e802e5327f7ec5ee8e4834df97e3e468b7d0db867d6ecfe81e2b0f9531df87efdb47c1338ac321fefe5a432", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE8+wvE8rwTQGStH+0xTEfttTcawqe\ngC5TJ/fsXujkg035fj5Gi30NuGfW7P6B4rD5Ux34fv20fBM4rDIf7+WkMg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 329, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022055a00c9fcdaebb6032513ca0234ecfffe98ebe492fdf02e48ca48e982beb3669", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04d92b200aefcab6ac7dafd9acaf2fa10b3180235b8f46b4503e4693c670fccc885ef2f3aebf5b317475336256768f7c19efb7352d27e4cccadc85b6b8ab922c72", + "wx" : "00d92b200aefcab6ac7dafd9acaf2fa10b3180235b8f46b4503e4693c670fccc88", + "wy" : "5ef2f3aebf5b317475336256768f7c19efb7352d27e4cccadc85b6b8ab922c72" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d92b200aefcab6ac7dafd9acaf2fa10b3180235b8f46b4503e4693c670fccc885ef2f3aebf5b317475336256768f7c19efb7352d27e4cccadc85b6b8ab922c72", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2SsgCu/Ktqx9r9msry+hCzGAI1uP\nRrRQPkaTxnD8zIhe8vOuv1sxdHUzYlZ2j3wZ77c1LSfkzMrchba4q5Iscg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 330, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100ab40193f9b5d76c064a27940469d9fffd31d7c925fbe05c919491d3057d66cd2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "040a88361eb92ecca2625b38e5f98bbabb96bf179b3d76fc48140a3bcd881523cde6bdf56033f84a5054035597375d90866aa2c96b86a41ccf6edebf47298ad489", + "wx" : "0a88361eb92ecca2625b38e5f98bbabb96bf179b3d76fc48140a3bcd881523cd", + "wy" : "00e6bdf56033f84a5054035597375d90866aa2c96b86a41ccf6edebf47298ad489" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040a88361eb92ecca2625b38e5f98bbabb96bf179b3d76fc48140a3bcd881523cde6bdf56033f84a5054035597375d90866aa2c96b86a41ccf6edebf47298ad489", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECog2HrkuzKJiWzjl+Yu6u5a/F5s9\ndvxIFAo7zYgVI83mvfVgM/hKUFQDVZc3XZCGaqLJa4akHM9u3r9HKYrUiQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 331, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100ca0234ebb5fdcb13ca0234ecffffffffcb0dadbbc7f549f8a26b4408d0dc8600", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04d0fb17ccd8fafe827e0c1afc5d8d80366e2b20e7f14a563a2ba50469d84375e868612569d39e2bb9f554355564646de99ac602cc6349cf8c1e236a7de7637d93", + "wx" : "00d0fb17ccd8fafe827e0c1afc5d8d80366e2b20e7f14a563a2ba50469d84375e8", + "wy" : "68612569d39e2bb9f554355564646de99ac602cc6349cf8c1e236a7de7637d93" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d0fb17ccd8fafe827e0c1afc5d8d80366e2b20e7f14a563a2ba50469d84375e868612569d39e2bb9f554355564646de99ac602cc6349cf8c1e236a7de7637d93", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE0PsXzNj6/oJ+DBr8XY2ANm4rIOfx\nSlY6K6UEadhDdehoYSVp054rufVUNVVkZG3pmsYCzGNJz4weI2p952N9kw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 332, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff3ea3677e082b9310572620ae19933a9e65b285598711c77298815ad3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04836f33bbc1dc0d3d3abbcef0d91f11e2ac4181076c9af0a22b1e4309d3edb2769ab443ff6f901e30c773867582997c2bec2b0cb8120d760236f3a95bbe881f75", + "wx" : "00836f33bbc1dc0d3d3abbcef0d91f11e2ac4181076c9af0a22b1e4309d3edb276", + "wy" : "009ab443ff6f901e30c773867582997c2bec2b0cb8120d760236f3a95bbe881f75" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004836f33bbc1dc0d3d3abbcef0d91f11e2ac4181076c9af0a22b1e4309d3edb2769ab443ff6f901e30c773867582997c2bec2b0cb8120d760236f3a95bbe881f75", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEg28zu8HcDT06u87w2R8R4qxBgQds\nmvCiKx5DCdPtsnaatEP/b5AeMMdzhnWCmXwr7CsMuBINdgI286lbvogfdQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 333, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220266666663bbbbbbbe6666666666666665b37902e023fab7c8f055d86e5cc41f4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0492f99fbe973ed4a299719baee4b432741237034dec8d72ba5103cb33e55feeb8033dd0e91134c734174889f3ebcf1b7a1ac05767289280ee7a794cebd6e69697", + "wx" : "0092f99fbe973ed4a299719baee4b432741237034dec8d72ba5103cb33e55feeb8", + "wy" : "033dd0e91134c734174889f3ebcf1b7a1ac05767289280ee7a794cebd6e69697" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000492f99fbe973ed4a299719baee4b432741237034dec8d72ba5103cb33e55feeb8033dd0e91134c734174889f3ebcf1b7a1ac05767289280ee7a794cebd6e69697", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkvmfvpc+1KKZcZuu5LQydBI3A03s\njXK6UQPLM+Vf7rgDPdDpETTHNBdIifPrzxt6GsBXZyiSgO56eUzr1uaWlw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 334, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff36db6db7a492492492492492146c573f4c6dfc8d08a443e258970b09", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04d35ba58da30197d378e618ec0fa7e2e2d12cffd73ebbb2049d130bba434af09eff83986e6875e41ea432b7585a49b3a6c77cbb3c47919f8e82874c794635c1d2", + "wx" : "00d35ba58da30197d378e618ec0fa7e2e2d12cffd73ebbb2049d130bba434af09e", + "wy" : "00ff83986e6875e41ea432b7585a49b3a6c77cbb3c47919f8e82874c794635c1d2" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d35ba58da30197d378e618ec0fa7e2e2d12cffd73ebbb2049d130bba434af09eff83986e6875e41ea432b7585a49b3a6c77cbb3c47919f8e82874c794635c1d2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE01uljaMBl9N45hjsD6fi4tEs/9c+\nu7IEnRMLukNK8J7/g5huaHXkHqQyt1haSbOmx3y7PEeRn46Ch0x5RjXB0g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 335, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff2aaaaaab7fffffffffffffffc815d0e60b3e596ecb1ad3a27cfd49c4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "048651ce490f1b46d73f3ff475149be29136697334a519d7ddab0725c8d0793224e11c65bd8ca92dc8bc9ae82911f0b52751ce21dd9003ae60900bd825f590cc28", + "wx" : "008651ce490f1b46d73f3ff475149be29136697334a519d7ddab0725c8d0793224", + "wy" : "00e11c65bd8ca92dc8bc9ae82911f0b52751ce21dd9003ae60900bd825f590cc28" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048651ce490f1b46d73f3ff475149be29136697334a519d7ddab0725c8d0793224e11c65bd8ca92dc8bc9ae82911f0b52751ce21dd9003ae60900bd825f590cc28", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhlHOSQ8bRtc/P/R1FJvikTZpczSl\nGdfdqwclyNB5MiThHGW9jKktyLya6CkR8LUnUc4h3ZADrmCQC9gl9ZDMKA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 336, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02207fffffff55555555ffffffffffffffffd344a71e6f651458a27bdc81fd976e37", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "046d8e1b12c831a0da8795650ff95f101ed921d9e2f72b15b1cdaca9826b9cfc6def6d63e2bc5c089570394a4bc9f892d5e6c7a6a637b20469a58c106ad486bf37", + "wx" : "6d8e1b12c831a0da8795650ff95f101ed921d9e2f72b15b1cdaca9826b9cfc6d", + "wy" : "00ef6d63e2bc5c089570394a4bc9f892d5e6c7a6a637b20469a58c106ad486bf37" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046d8e1b12c831a0da8795650ff95f101ed921d9e2f72b15b1cdaca9826b9cfc6def6d63e2bc5c089570394a4bc9f892d5e6c7a6a637b20469a58c106ad486bf37", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEbY4bEsgxoNqHlWUP+V8QHtkh2eL3\nKxWxzaypgmuc/G3vbWPivFwIlXA5SkvJ+JLV5sempjeyBGmljBBq1Ia/Nw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 337, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02203fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192aa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "040ae580bae933b4ef2997cbdbb0922328ca9a410f627a0f7dff24cb4d920e15428911e7f8cc365a8a88eb81421a361ccc2b99e309d8dcd9a98ba83c3949d893e3", + "wx" : "0ae580bae933b4ef2997cbdbb0922328ca9a410f627a0f7dff24cb4d920e1542", + "wy" : "008911e7f8cc365a8a88eb81421a361ccc2b99e309d8dcd9a98ba83c3949d893e3" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040ae580bae933b4ef2997cbdbb0922328ca9a410f627a0f7dff24cb4d920e15428911e7f8cc365a8a88eb81421a361ccc2b99e309d8dcd9a98ba83c3949d893e3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECuWAuukztO8pl8vbsJIjKMqaQQ9i\neg99/yTLTZIOFUKJEef4zDZaiojrgUIaNhzMK5njCdjc2amLqDw5SdiT4w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 338, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02205d8ecd64a4eeba466815ddf3a4de9a8e6abd9c5db0a01eb80343553da648428f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "045b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc46963838a40f2a36092e9004e92d8d940cf5638550ce672ce8b8d4e15eba5499249e9", + "wx" : "5b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc46963", + "wy" : "00838a40f2a36092e9004e92d8d940cf5638550ce672ce8b8d4e15eba5499249e9" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc46963838a40f2a36092e9004e92d8d940cf5638550ce672ce8b8d4e15eba5499249e9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEW4Ev1SGq+mmDWoSczm+962mDtELS\nRE/nDhNMAn/EaWODikDyo2CS6QBOktjZQM9WOFUM5nLOi41OFeulSZJJ6Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 339, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "304502206f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569022100bb726660235793aa9957a61e76e00c2c435109cf9a15dd624d53f4301047856b", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "045b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc469637c75bf0c5c9f6d17ffb16d2726bf30a9c7aaf31a8d317472b1ea145ab66db616", + "wx" : "5b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc46963", + "wy" : "7c75bf0c5c9f6d17ffb16d2726bf30a9c7aaf31a8d317472b1ea145ab66db616" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045b812fd521aafa69835a849cce6fbdeb6983b442d2444fe70e134c027fc469637c75bf0c5c9f6d17ffb16d2726bf30a9c7aaf31a8d317472b1ea145ab66db616", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEW4Ev1SGq+mmDWoSczm+962mDtELS\nRE/nDhNMAn/EaWN8db8MXJ9tF/+xbScmvzCpx6rzGo0xdHKx6hRatm22Fg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 340, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "304502206f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569022100bb726660235793aa9957a61e76e00c2c435109cf9a15dd624d53f4301047856b", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "046adda82b90261b0f319faa0d878665a6b6da497f09c903176222c34acfef72a647e6f50dcc40ad5d9b59f7602bb222fad71a41bf5e1f9df4959a364c62e488d9", + "wx" : "6adda82b90261b0f319faa0d878665a6b6da497f09c903176222c34acfef72a6", + "wy" : "47e6f50dcc40ad5d9b59f7602bb222fad71a41bf5e1f9df4959a364c62e488d9" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046adda82b90261b0f319faa0d878665a6b6da497f09c903176222c34acfef72a647e6f50dcc40ad5d9b59f7602bb222fad71a41bf5e1f9df4959a364c62e488d9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEat2oK5AmGw8xn6oNh4ZlprbaSX8J\nyQMXYiLDSs/vcqZH5vUNzECtXZtZ92ArsiL61xpBv14fnfSVmjZMYuSI2Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 341, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "30250201010220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "042fca0d0a47914de77ed56e7eccc3276a601120c6df0069c825c8f6a01c9f382065f3450a1d17c6b24989a39beb1c7decfca8384fbdc294418e5d807b3c6ed7de", + "wx" : "2fca0d0a47914de77ed56e7eccc3276a601120c6df0069c825c8f6a01c9f3820", + "wy" : "65f3450a1d17c6b24989a39beb1c7decfca8384fbdc294418e5d807b3c6ed7de" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042fca0d0a47914de77ed56e7eccc3276a601120c6df0069c825c8f6a01c9f382065f3450a1d17c6b24989a39beb1c7decfca8384fbdc294418e5d807b3c6ed7de", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEL8oNCkeRTed+1W5+zMMnamARIMbf\nAGnIJcj2oByfOCBl80UKHRfGskmJo5vrHH3s/Kg4T73ClEGOXYB7PG7X3g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 342, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3045022101000000000000000000000000000000000000000000000000000000000000000002203333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04dd86d3b5f4a13e8511083b78002081c53ff467f11ebd98a51a633db76665d25045d5c8200c89f2fa10d849349226d21d8dfaed6ff8d5cb3e1b7e17474ebc18f7", + "wx" : "00dd86d3b5f4a13e8511083b78002081c53ff467f11ebd98a51a633db76665d250", + "wy" : "45d5c8200c89f2fa10d849349226d21d8dfaed6ff8d5cb3e1b7e17474ebc18f7" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004dd86d3b5f4a13e8511083b78002081c53ff467f11ebd98a51a633db76665d25045d5c8200c89f2fa10d849349226d21d8dfaed6ff8d5cb3e1b7e17474ebc18f7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3YbTtfShPoURCDt4ACCBxT/0Z/Ee\nvZilGmM9t2Zl0lBF1cggDIny+hDYSTSSJtIdjfrtb/jVyz4bfhdHTrwY9w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 343, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c7002203333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "044fea55b32cb32aca0c12c4cd0abfb4e64b0f5a516e578c016591a93f5a0fbcc5d7d3fd10b2be668c547b212f6bb14c88f0fecd38a8a4b2c785ed3be62ce4b280", + "wx" : "4fea55b32cb32aca0c12c4cd0abfb4e64b0f5a516e578c016591a93f5a0fbcc5", + "wy" : "00d7d3fd10b2be668c547b212f6bb14c88f0fecd38a8a4b2c785ed3be62ce4b280" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044fea55b32cb32aca0c12c4cd0abfb4e64b0f5a516e578c016591a93f5a0fbcc5d7d3fd10b2be668c547b212f6bb14c88f0fecd38a8a4b2c785ed3be62ce4b280", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAET+pVsyyzKsoMEsTNCr+05ksPWlFu\nV4wBZZGpP1oPvMXX0/0Qsr5mjFR7IS9rsUyI8P7NOKiksseF7TvmLOSygA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 344, + "comment" : "extreme value for k and edgecase s", + "msg" : "313233343030", + "sig" : "304402207cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699780220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04c6a771527024227792170a6f8eee735bf32b7f98af669ead299802e32d7c3107bc3b4b5e65ab887bbd343572b3e5619261fe3a073e2ffd78412f726867db589e", + "wx" : "00c6a771527024227792170a6f8eee735bf32b7f98af669ead299802e32d7c3107", + "wy" : "00bc3b4b5e65ab887bbd343572b3e5619261fe3a073e2ffd78412f726867db589e" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004c6a771527024227792170a6f8eee735bf32b7f98af669ead299802e32d7c3107bc3b4b5e65ab887bbd343572b3e5619261fe3a073e2ffd78412f726867db589e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAExqdxUnAkIneSFwpvju5zW/Mrf5iv\nZp6tKZgC4y18MQe8O0teZauIe700NXKz5WGSYf46Bz4v/XhBL3JoZ9tYng==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 345, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "304502207cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978022100b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63cc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04851c2bbad08e54ec7a9af99f49f03644d6ec6d59b207fec98de85a7d15b956efcee9960283045075684b410be8d0f7494b91aa2379f60727319f10ddeb0fe9d6", + "wx" : "00851c2bbad08e54ec7a9af99f49f03644d6ec6d59b207fec98de85a7d15b956ef", + "wy" : "00cee9960283045075684b410be8d0f7494b91aa2379f60727319f10ddeb0fe9d6" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004851c2bbad08e54ec7a9af99f49f03644d6ec6d59b207fec98de85a7d15b956efcee9960283045075684b410be8d0f7494b91aa2379f60727319f10ddeb0fe9d6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEhRwrutCOVOx6mvmfSfA2RNbsbVmy\nB/7JjehafRW5Vu/O6ZYCgwRQdWhLQQvo0PdJS5GqI3n2BycxnxDd6w/p1g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 346, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "304502207cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978022100cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04f6417c8a670584e388676949e53da7fc55911ff68318d1bf3061205acb19c48f8f2b743df34ad0f72674acb7505929784779cd9ac916c3669ead43026ab6d43f", + "wx" : "00f6417c8a670584e388676949e53da7fc55911ff68318d1bf3061205acb19c48f", + "wy" : "008f2b743df34ad0f72674acb7505929784779cd9ac916c3669ead43026ab6d43f" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f6417c8a670584e388676949e53da7fc55911ff68318d1bf3061205acb19c48f8f2b743df34ad0f72674acb7505929784779cd9ac916c3669ead43026ab6d43f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9kF8imcFhOOIZ2lJ5T2n/FWRH/aD\nGNG/MGEgWssZxI+PK3Q980rQ9yZ0rLdQWSl4R3nNmskWw2aerUMCarbUPw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 347, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "304402207cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997802203333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04501421277be45a5eefec6c639930d636032565af420cf3373f557faa7f8a06438673d6cb6076e1cfcdc7dfe7384c8e5cac08d74501f2ae6e89cad195d0aa1371", + "wx" : "501421277be45a5eefec6c639930d636032565af420cf3373f557faa7f8a0643", + "wy" : "008673d6cb6076e1cfcdc7dfe7384c8e5cac08d74501f2ae6e89cad195d0aa1371" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004501421277be45a5eefec6c639930d636032565af420cf3373f557faa7f8a06438673d6cb6076e1cfcdc7dfe7384c8e5cac08d74501f2ae6e89cad195d0aa1371", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEUBQhJ3vkWl7v7GxjmTDWNgMlZa9C\nDPM3P1V/qn+KBkOGc9bLYHbhz83H3+c4TI5crAjXRQHyrm6JytGV0KoTcQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 348, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "304402207cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978022049249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "040d935bf9ffc115a527735f729ca8a4ca23ee01a4894adf0e3415ac84e808bb343195a3762fea29ed38912bd9ea6c4fde70c3050893a4375850ce61d82eba33c5", + "wx" : "0d935bf9ffc115a527735f729ca8a4ca23ee01a4894adf0e3415ac84e808bb34", + "wy" : "3195a3762fea29ed38912bd9ea6c4fde70c3050893a4375850ce61d82eba33c5" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040d935bf9ffc115a527735f729ca8a4ca23ee01a4894adf0e3415ac84e808bb343195a3762fea29ed38912bd9ea6c4fde70c3050893a4375850ce61d82eba33c5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEDZNb+f/BFaUnc19ynKikyiPuAaSJ\nSt8ONBWshOgIuzQxlaN2L+op7TiRK9nqbE/ecMMFCJOkN1hQzmHYLrozxQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 349, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "304402207cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978022016a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "045e59f50708646be8a589355014308e60b668fb670196206c41e748e64e4dca215de37fee5c97bcaf7144d5b459982f52eeeafbdf03aacbafef38e213624a01de", + "wx" : "5e59f50708646be8a589355014308e60b668fb670196206c41e748e64e4dca21", + "wy" : "5de37fee5c97bcaf7144d5b459982f52eeeafbdf03aacbafef38e213624a01de" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045e59f50708646be8a589355014308e60b668fb670196206c41e748e64e4dca215de37fee5c97bcaf7144d5b459982f52eeeafbdf03aacbafef38e213624a01de", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXln1Bwhka+iliTVQFDCOYLZo+2cB\nliBsQedI5k5NyiFd43/uXJe8r3FE1bRZmC9S7ur73wOqy6/vOOITYkoB3g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 350, + "comment" : "extreme value for k and edgecase s", + "msg" : "313233343030", + "sig" : "304402206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2960220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04169fb797325843faff2f7a5b5445da9e2fd6226f7ef90ef0bfe924104b02db8e7bbb8de662c7b9b1cf9b22f7a2e582bd46d581d68878efb2b861b131d8a1d667", + "wx" : "169fb797325843faff2f7a5b5445da9e2fd6226f7ef90ef0bfe924104b02db8e", + "wy" : "7bbb8de662c7b9b1cf9b22f7a2e582bd46d581d68878efb2b861b131d8a1d667" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004169fb797325843faff2f7a5b5445da9e2fd6226f7ef90ef0bfe924104b02db8e7bbb8de662c7b9b1cf9b22f7a2e582bd46d581d68878efb2b861b131d8a1d667", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFp+3lzJYQ/r/L3pbVEXani/WIm9+\n+Q7wv+kkEEsC2457u43mYse5sc+bIvei5YK9RtWB1oh477K4YbEx2KHWZw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 351, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "304502206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296022100b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63cc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04271cd89c000143096b62d4e9e4ca885aef2f7023d18affdaf8b7b548981487540a1c6e954e32108435b55fa385b0f76481a609b9149ccb4b02b2ca47fe8e4da5", + "wx" : "271cd89c000143096b62d4e9e4ca885aef2f7023d18affdaf8b7b54898148754", + "wy" : "0a1c6e954e32108435b55fa385b0f76481a609b9149ccb4b02b2ca47fe8e4da5" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004271cd89c000143096b62d4e9e4ca885aef2f7023d18affdaf8b7b548981487540a1c6e954e32108435b55fa385b0f76481a609b9149ccb4b02b2ca47fe8e4da5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJxzYnAABQwlrYtTp5MqIWu8vcCPR\niv/a+Le1SJgUh1QKHG6VTjIQhDW1X6OFsPdkgaYJuRScy0sCsspH/o5NpQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 352, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "304502206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296022100cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "043d0bc7ed8f09d2cb7ddb46ebc1ed799ab1563a9ab84bf524587a220afe499c12e22dc3b3c103824a4f378d96adb0a408abf19ce7d68aa6244f78cb216fa3f8df", + "wx" : "3d0bc7ed8f09d2cb7ddb46ebc1ed799ab1563a9ab84bf524587a220afe499c12", + "wy" : "00e22dc3b3c103824a4f378d96adb0a408abf19ce7d68aa6244f78cb216fa3f8df" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043d0bc7ed8f09d2cb7ddb46ebc1ed799ab1563a9ab84bf524587a220afe499c12e22dc3b3c103824a4f378d96adb0a408abf19ce7d68aa6244f78cb216fa3f8df", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPQvH7Y8J0st920brwe15mrFWOpq4\nS/UkWHoiCv5JnBLiLcOzwQOCSk83jZatsKQIq/Gc59aKpiRPeMshb6P43w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 353, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "304402206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29602203333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04a6c885ade1a4c566f9bb010d066974abb281797fa701288c721bcbd23663a9b72e424b690957168d193a6096fc77a2b004a9c7d467e007e1f2058458f98af316", + "wx" : "00a6c885ade1a4c566f9bb010d066974abb281797fa701288c721bcbd23663a9b7", + "wy" : "2e424b690957168d193a6096fc77a2b004a9c7d467e007e1f2058458f98af316" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a6c885ade1a4c566f9bb010d066974abb281797fa701288c721bcbd23663a9b72e424b690957168d193a6096fc77a2b004a9c7d467e007e1f2058458f98af316", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEpsiFreGkxWb5uwENBml0q7KBeX+n\nASiMchvL0jZjqbcuQktpCVcWjRk6YJb8d6KwBKnH1GfgB+HyBYRY+YrzFg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 354, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "304402206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296022049249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "048d3c2c2c3b765ba8289e6ac3812572a25bf75df62d87ab7330c3bdbad9ebfa5c4c6845442d66935b238578d43aec54f7caa1621d1af241d4632e0b780c423f5d", + "wx" : "008d3c2c2c3b765ba8289e6ac3812572a25bf75df62d87ab7330c3bdbad9ebfa5c", + "wy" : "4c6845442d66935b238578d43aec54f7caa1621d1af241d4632e0b780c423f5d" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048d3c2c2c3b765ba8289e6ac3812572a25bf75df62d87ab7330c3bdbad9ebfa5c4c6845442d66935b238578d43aec54f7caa1621d1af241d4632e0b780c423f5d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEjTwsLDt2W6gonmrDgSVyolv3XfYt\nh6tzMMO9utnr+lxMaEVELWaTWyOFeNQ67FT3yqFiHRryQdRjLgt4DEI/XQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 355, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "304402206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296022016a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "wx" : "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "wy" : "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaxfR8uEsQkf4vOblY6RA8ncDfYEt\n6zOg9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 356, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3045022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 357, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3044022044a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e0220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", + "wx" : "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "wy" : "00b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaxfR8uEsQkf4vOblY6RA8ncDfYEt\n6zOg9KE5RdiYwpawHL0cAeWAZXEYFLWD8GHp1DHMqZTOoTE0Sb+XyECuCg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 358, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3045022100bb5a52f42f9c9261ed4361f59422a1e30036e7c32b270c8807a419feca6050230220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 359, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3044022044a5ad0ad0636d9f12bc9e0a6bdd5e1cbcb012ea7bf091fcec15b0c43202d52e0220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0404aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "wx" : "04aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad5", + "wy" : "0087d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000404aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEBKrsc2NXJvIT+4qeZNo7hjLkFJWp\nRNAEW1IuunJA+tWH2TFXmKqjpboBd1eHztBeqve04J/IHW0apUboNl1SXQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 360, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3045022100b292a619339f6e567a305c951c0dcbcc42d16e47f219f9e98e76e09d8770b34a02200177e60492c5a8242f76f07bfe3661bde59ec2a17ce5bd2dab2abebdf89a62e2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 361, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30450220530bd6b0c9af2d69ba897f6b5fb59695cfbf33afe66dbadcf5b8d2a2a6538e23022100d85e489cb7a161fd55ededcedbf4cc0c0987e3e3f0f242cae934c72caa3f43e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 362, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3046022100a8ea150cb80125d7381c4c1f1da8e9de2711f9917060406a73d7904519e51388022100f3ab9fa68bd47973a73b2d40480c2ba50c22c9d76ec217257288293285449b86", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 363, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "3045022100986e65933ef2ed4ee5aada139f52b70539aaf63f00a91f29c69178490d57fb7102203dafedfb8da6189d372308cbf1489bbbdabf0c0217d1c0ff0f701aaa7a694b9c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "044f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "wx" : "4f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000", + "wy" : "00ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETzN8z9Z3JqgF5PFgCuKEnfOAfsoR\nc4Ajn72BaQAAAADtneoSTMjDlkFkEemIww9CfrUEr0OjFGzV336mBmbWhQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 364, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3046022100d434e262a49eab7781e353a3565e482550dd0fd5defa013c7f29745eff3569f10221009b0c0a93f267fb6052fd8077be769c2b98953195d7bc10de844218305c6ba17a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 365, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "304402200fe774355c04d060f76d79fd7a772e421463489221bf0a33add0be9b1979110b0220500dcba1c69a8fbd43fa4f57f743ce124ca8b91a1f325f3fac6181175df55737", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 366, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3045022100bb40bf217bed3fb3950c7d39f03d36dc8e3b2cd79693f125bfd06595ee1135e30220541bf3532351ebb032710bdb6a1bf1bfc89a1e291ac692b3fa4780745bb55677", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "wx" : "3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935", + "wy" : "0084fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPPA9YU2JOc/UmaB4c/rCgWGPBrj/\nh+gBXD9JcmUASTWE+hdNeRxyvyzjiAqJYN0qfHoTOKgvhanlnNvegAAAAA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 367, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "30440220664eb7ee6db84a34df3c86ea31389a5405badd5ca99231ff556d3e75a233e73a022059f3c752e52eca46137642490a51560ce0badc678754b8f72e51a2901426a1bd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 368, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "304502204cd0429bbabd2827009d6fcd843d4ce39c3e42e2d1631fd001985a79d1fd8b430221009638bf12dd682f60be7ef1d0e0d98f08b7bca77a1a2b869ae466189d2acdabe3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 369, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3046022100e56c6ea2d1b017091c44d8b6cb62b9f460e3ce9aed5e5fd41e8added97c56c04022100a308ec31f281e955be20b457e463440b4fcf2b80258078207fc1378180f89b55", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "wx" : "3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935", + "wy" : "7b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPPA9YU2JOc/UmaB4c/rCgWGPBrj/\nh+gBXD9JcmUASTV7BeixhuONQdMcd/V2nyLVg4XsyFfQelYaYyQhf////w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 370, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "304402201158a08d291500b4cabed3346d891eee57c176356a2624fb011f8fbbf34668300220228a8c486a736006e082325b85290c5bc91f378b75d487dda46798c18f285519", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 371, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3045022100b1db9289649f59410ea36b0c0fc8d6aa2687b29176939dd23e0dde56d309fa9d02203e1535e4280559015b0dbd987366dcf43a6d1af5c23c7d584e1c3f48a1251336", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 372, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3046022100b7b16e762286cb96446aa8d4e6e7578b0a341a79f2dd1a220ac6f0ca4e24ed86022100ddc60a700a139b04661c547d07bbb0721780146df799ccf55e55234ecb8f12bc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "042829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "wx" : "2829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffff", + "wy" : "00a01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKCnDH6ouQA40TtlLyj/NBUWVbrz+\nitD236X/jv////+gGq+vAA5SWFhVr6dnat4oQRMJkFLfV+frO9N+vrkiLg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 373, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3045022100d82a7c2717261187c8e00d8df963ff35d796edad36bc6e6bd1c91c670d9105b402203dcabddaf8fcaa61f4603e7cbac0f3c0351ecd5988efb23f680d07debd139929", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 374, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "304402205eb9c8845de68eb13d5befe719f462d77787802baff30ce96a5cba063254af7802202c026ae9be2e2a5e7ca0ff9bbd92fb6e44972186228ee9a62b87ddbe2ef66fb5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 375, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "304602210096843dd03c22abd2f3b782b170239f90f277921becc117d0404a8e4e36230c28022100f2be378f526f74a543f67165976de9ed9a31214eb4d7e6db19e1ede123dd991d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "wx" : "00fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f5", + "wy" : "5a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE////+UgIHmoEWN2PnnOPJmX/kFmt\naqwHCDGMTKmnpPVairy6LdqEdDEe5UFJuXPK4MD7iVV60L945lKaFmO9cw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 376, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30440220766456dce1857c906f9996af729339464d27e9d98edc2d0e3b760297067421f60220402385ecadae0d8081dccaf5d19037ec4e55376eced699e93646bfbbf19d0b41", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 377, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3046022100c605c4b2edeab20419e6518a11b2dbc2b97ed8b07cced0b19c34f777de7b9fd9022100edf0f612c5f46e03c719647bc8af1b29b2cde2eda700fb1cff5e159d47326dba", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 378, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3046022100d48b68e6cabfe03cf6141c9ac54141f210e64485d9929ad7b732bfe3b7eb8a84022100feedae50c61bd00e19dc26f9b7e2265e4508c389109ad2f208f0772315b6c941", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0400000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "wx" : "03fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e", + "wy" : "1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAAAAA/oV+WOUnV8DpvXH+G+eABXu\nsjrrv/EXOTe6dI4QmYcgcOjofFVfoTZZzKXX+tz8sAI+qIlUjKSK8rp+cQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 379, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3046022100b7c81457d4aeb6aa65957098569f0479710ad7f6595d5874c35a93d12a5dd4c7022100b7961a0b652878c2d568069a432ca18a1a9199f2ca574dad4b9e3a05c0a1cdb3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 380, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304402206b01332ddb6edfa9a30a1321d5858e1ee3cf97e263e669f8de5e9652e76ff3f702205939545fced457309a6a04ace2bd0f70139c8f7d86b02cb1cc58f9e69e96cd5a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 381, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3046022100efdb884720eaeadc349f9fc356b6c0344101cd2fd8436b7d0e6a4fb93f106361022100f24bee6ad5dc05f7613975473aadf3aacba9e77de7d69b6ce48cb60d8113385d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "wx" : "00bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015", + "wy" : "1352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEvLspFMefBF6qbsu8YSgWs75dLWeW\ncH2BJen4UcGK8BUAAAAAE1K7Sg+i6kzOuatj3WhK3loRJ7zzAKaYpxk7wg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 382, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3044022031230428405560dcb88fb5a646836aea9b23a23dd973dcbe8014c87b8b20eb0702200f9344d6e812ce166646747694a41b0aaf97374e19f3c5fb8bd7ae3d9bd0beff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 383, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3046022100caa797da65b320ab0d5c470cda0b36b294359c7db9841d679174db34c4855743022100cf543a62f23e212745391aaf7505f345123d2685ee3b941d3de6d9b36242e5a0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 384, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304502207e5f0ab5d900d3d3d7867657e5d6d36519bc54084536e7d21c336ed8001859450221009450c07f201faec94b82dfb322e5ac676688294aad35aa72e727ff0b19b646aa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "wx" : "00bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015", + "wy" : "00fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEvLspFMefBF6qbsu8YSgWs75dLWeW\ncH2BJen4UcGK8BX////+7K1EtvBdFbMxRlScIpe1IqXu2EMM/1lnWObEPQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-256", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 385, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3046022100d7d70c581ae9e3f66dc6a480bf037ae23f8a1e4a2136fe4b03aa69f0ca25b35602210089c460f8a5a5c2bbba962c8a3ee833a413e85658e62a59e2af41d9127cc47224", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 386, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30440220341c1b9ff3c83dd5e0dfa0bf68bcdf4bb7aa20c625975e5eeee34bb396266b34022072b69f061b750fd5121b22b11366fad549c634e77765a017902a67099e0a4469", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 387, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3045022070bebe684cdcb5ca72a42f0d873879359bd1781a591809947628d313a3814f67022100aec03aca8f5587a4d535fa31027bbe9cc0e464b1c3577f4c2dcde6b2094798a9", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/tests/ecdsa_secp256r1_sha512_test.json b/tests/ecdsa_secp256r1_sha512_test.json new file mode 100644 index 00000000..1094133e --- /dev/null +++ b/tests/ecdsa_secp256r1_sha512_test.json @@ -0,0 +1,5138 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.8r12", + "numberOfTests" : 457, + "header" : [ + "Test vectors of type EcdsaVerify are meant for the verification", + "of ASN encoded ECDSA signatures." + ], + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "schema" : "ecdsa_verify_schema.json", + "testGroups" : [ + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "wx" : "2927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838", + "wy" : "00c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042927b10512bae3eddcfe467828128bad2903269919f7086069c8c4df6c732838c7787964eaac00e5921fb1498a60f4606766b3d9685001558d1a974e7341513e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKSexBRK64+3c/kZ4KBKLrSkDJpkZ\n9whgacjE32xzKDjHeHlk6qwA5ZIfsUmKYPRgZ2az2WhQAVWNGpdOc0FRPg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "304402202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c002205f85a63a5be977ad714cea16b10035f07cadf7513ae8cca86f35b7692aafd69f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "Legacy:ASN encoding of s misses leading 0", + "msg" : "313233343030", + "sig" : "304402202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00220a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 3, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "long form encoding of length of sequence", + "msg" : "313233343030", + "sig" : "30814502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 5, + "comment" : "length of sequence contains leading 0", + "msg" : "313233343030", + "sig" : "3082004502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 6, + "comment" : "wrong length of sequence", + "msg" : "313233343030", + "sig" : "304602202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "wrong length of sequence", + "msg" : "313233343030", + "sig" : "304402202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "uint32 overflow in length of sequence", + "msg" : "313233343030", + "sig" : "3085010000004502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "uint64 overflow in length of sequence", + "msg" : "313233343030", + "sig" : "308901000000000000004502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "length of sequence = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "length of sequence = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length of sequence = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length of sequence = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "incorrect length of sequence", + "msg" : "313233343030", + "sig" : "30ff02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "308002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "304502802478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0028000a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "lonely sequence tag", + "msg" : "313233343030", + "sig" : "30", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "304702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "3047000002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "appending unused 0's to sequence", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "appending null value to sequence", + "msg" : "313233343030", + "sig" : "304702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a498177304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30492500304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3047304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a222549817702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30492224250002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304d222202202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00004deadbeef022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304a02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c02226498177022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304902202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c022252500022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "304d02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c02223022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304daa00bb00cd00304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304baa02aabb304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304d2228aa00bb00cd0002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304b2226aa02aabb02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304d02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c02229aa00bb00cd00022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "304b02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c02227aa02aabb022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "truncated length of sequence", + "msg" : "313233343030", + "sig" : "3081", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3080304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3049228002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00000022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "304902202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c02280022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3080314502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3049228003202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00000022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "304902202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c02280032100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "2e4502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "2f4502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "314502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "324502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "ff4502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "using composition for sequence", + "msg" : "313233343030", + "sig" : "30493001023044202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "304402202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "3044202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "308002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 57, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "308002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "308002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb205000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "308002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "308002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "308002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "3047300002202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "304702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb23000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "append garbage with high tag number", + "msg" : "313233343030", + "sig" : "304802202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2bf7f00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "3047304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "truncated sequence: removed last 1 elements", + "msg" : "313233343030", + "sig" : "302202202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "repeating element in sequence", + "msg" : "313233343030", + "sig" : "306802202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "long form encoding of length of integer", + "msg" : "313233343030", + "sig" : "30460281202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 69, + "comment" : "long form encoding of length of integer", + "msg" : "313233343030", + "sig" : "304602202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c002812100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 70, + "comment" : "length of integer contains leading 0", + "msg" : "313233343030", + "sig" : "3047028200202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 71, + "comment" : "length of integer contains leading 0", + "msg" : "313233343030", + "sig" : "304702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00282002100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 72, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "304502212478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "3045021f2478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022200a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022000a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "uint32 overflow in length of integer", + "msg" : "313233343030", + "sig" : "304a028501000000202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "uint32 overflow in length of integer", + "msg" : "313233343030", + "sig" : "304a02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00285010000002100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "uint64 overflow in length of integer", + "msg" : "313233343030", + "sig" : "304e02890100000000000000202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "uint64 overflow in length of integer", + "msg" : "313233343030", + "sig" : "304e02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0028901000000000000002100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "length of integer = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304902847fffffff2478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "length of integer = 2**31 - 1", + "msg" : "313233343030", + "sig" : "304902202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c002847fffffff00a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "length of integer = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30490284ffffffff2478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "length of integer = 2**32 - 1", + "msg" : "313233343030", + "sig" : "304902202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00284ffffffff00a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "length of integer = 2**40 - 1", + "msg" : "313233343030", + "sig" : "304a0285ffffffffff2478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "length of integer = 2**40 - 1", + "msg" : "313233343030", + "sig" : "304a02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00285ffffffffff00a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "length of integer = 2**64 - 1", + "msg" : "313233343030", + "sig" : "304d0288ffffffffffffffff2478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "length of integer = 2**64 - 1", + "msg" : "313233343030", + "sig" : "304d02202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00288ffffffffffffffff00a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "incorrect length of integer", + "msg" : "313233343030", + "sig" : "304502ff2478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "incorrect length of integer", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c002ff00a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "3023022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "lonely integer tag", + "msg" : "313233343030", + "sig" : "302402022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "lonely integer tag", + "msg" : "313233343030", + "sig" : "302302202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c002", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "304702222478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00000022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "304702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022300a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "3047022200002478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 96, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "304702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00223000000a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 97, + "comment" : "appending unused 0's to integer", + "msg" : "313233343030", + "sig" : "304702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00000022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "appending null value to integer", + "msg" : "313233343030", + "sig" : "304702222478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00500022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "appending null value to integer", + "msg" : "313233343030", + "sig" : "304702202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022300a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb20500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "truncated length of integer", + "msg" : "313233343030", + "sig" : "30250281022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "truncated length of integer", + "msg" : "313233343030", + "sig" : "302402202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00281", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "30250500022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "302402202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304500202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304501202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304503202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304504202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3045ff202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0002100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0012100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0032100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0042100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0ff2100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "30250200022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "302402202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "using composition for integer", + "msg" : "313233343030", + "sig" : "30492224020124021f78f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "using composition for integer", + "msg" : "313233343030", + "sig" : "304902202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c022250201000220a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "304502202678f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022102a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f98140022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34e32", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "3044021f2478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "3044021f78f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "304402202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022000a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "30460221ff2478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "304602202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00222ff00a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "replaced integer by infinity", + "msg" : "313233343030", + "sig" : "3026090180022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "replaced integer by infinity", + "msg" : "313233343030", + "sig" : "302502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "replacing integer with zero", + "msg" : "313233343030", + "sig" : "3026020100022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "replacing integer with zero", + "msg" : "313233343030", + "sig" : "302502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0020100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30460221012478f1cf49f6d858ac900a7af177222661ac95e206d32ee63020beee955ca711022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30460221ff2478f1d149f6d856ac900a7af1772226e7dea086b8a3f1dc48ad29689c965c6f022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30450220db870e2fb60927a8536ff5850e88ddd95b3a64cba0446f9ec3990bd467067e40022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100db870e2eb60927a9536ff5850e88ddd918215f79475c0e23b752d6976369a391022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30460221fedb870e30b60927a7536ff5850e88ddd99e536a1df92cd119cfdf41116aa358ef022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30460221012478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3046022100db870e2fb60927a8536ff5850e88ddd95b3a64cba0446f9ec3990bd467067e40022100a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022101a07a59c3a41688548eb315e94effca0efd1ffe0a13467061783dde1cce167403", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304402202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00220a07a59c5a41688528eb315e94effca0f835208aec517335790ca4896d5502961", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00221ff5f85a63b5be977ac714cea16b10035f0bfc6fca393d12e237b7beca62e4cb14e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c00221fe5f85a63c5be977ab714cea16b10035f102e001f5ecb98f9e87c221e331e98bfd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304502202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c0022101a07a59c4a41688538eb315e94effca0f4039035c6c2ed1dc84841359d1b34eb2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "304402202478f1d049f6d857ac900a7af1772226a4c59b345fbb90613c66f42b98f981c002205f85a63b5be977ac714cea16b10035f0bfc6fca393d12e237b7beca62e4cb14e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020100022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026020101022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30260201ff022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325510201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325500201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6325520201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 214, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000001000000000000000000000000020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 215, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000001000000000000000000000000020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 216, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff000000010000000000000000000000010000000000000000000000000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 217, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 218, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632550", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 219, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632552", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 220, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000001000000000000000000000000ffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 221, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000001000000000000000000000000022100ffffffff00000001000000000000000000000001000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 222, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3028022100ffffffff00000001000000000000000000000001000000000000000000000000090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 223, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000001000000000000000000000001000000000000000000000000090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 224, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30060201010c0130", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 225, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30050201010c00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 226, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30090c0225730c03732573", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 227, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30080201013003020100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 228, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "3003020101", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 229, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "3006020101010100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 230, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3932323038", + "sig" : "3044022064a1aab5000d0e804f3e2fc02bdee9be8ff312334e2ba16d11547c97711c898e02203c623e7f7598376825fa8bc09e727c75794cbb4ee8716ae15c31cd1cbe9ca3ee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "special case hash", + "msg" : "33393439313934313732", + "sig" : "304402203a4f61f7f8c4546e3580f7848411786fee1229a07a6ecf5fb84870869188215d022018c5ce44354e2274eadb8fea319f8d6f60944532dbaae86bfd8105f253041bcb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 232, + "comment" : "special case hash", + "msg" : "35333637363431383737", + "sig" : "304502203fa9975fb2b08b7b6e33f3843099da3f43f1dcfe9b171a60cafd5489ca9c5328022100985a86825a0cc728f5d9dac2a513b49127a06100f0fc4b8b1f200903e0df9ed2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 233, + "comment" : "special case hash", + "msg" : "35363731343831303935", + "sig" : "304402204d66e7ee5edd02ab96db25954050079ef8de1d0f02f34d4d75112eaf3f73124002206292d1563140013c589be40e599862bdd6bda2103809928928a119b43851a2ce", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 234, + "comment" : "special case hash", + "msg" : "3131323037313732393039", + "sig" : "3046022100a9228305f7b486f568eb65d44e49ba007e3f14b8f23c689c952e4ced1e6cf91e022100b73c74d28bd1268002bed784a6b06c40a90ee5938ea6d08f272d027e0f96a72c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 235, + "comment" : "special case hash", + "msg" : "3131323938303334323336", + "sig" : "304402203fa39842bfab6c38afa7963c60beb09484d4579fc75ef09efff44e91bc62ca8302205612add1924f0285ace5b158828e2b32ab2b6e7f10ee68dca1cc54591fee1fec", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 236, + "comment" : "special case hash", + "msg" : "39383736303239363833", + "sig" : "3045022006c04b02edfeecd8620f035ea4f449bd924593e86e5288a6f22d1923b0e2e8a9022100f666718e6fefb515bb9339d29cc0e58cfba89d605ca0066bca87f6a3f08ebcfa", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 237, + "comment" : "special case hash", + "msg" : "3230323034323936353139", + "sig" : "304402201ddd953c32a5f84109cd4d9ec8c364dd318376ff5d228211a367483077d638800220563dba4845de762baf04910618d587e0dd0c97dd1c9785c24ffdf2f8a660abf2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 238, + "comment" : "special case hash", + "msg" : "31343531363639313830", + "sig" : "30460221009fe4ec4831ef4945f100d5d35a2e6312411ca5df6c900ca60690f2985d553482022100c674ad5e1bead2f767c9248e444452a4a8530dd47246cbbc968da865bdf212b6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 239, + "comment" : "special case hash", + "msg" : "31303933363835393531", + "sig" : "3046022100e8703d6b16a79fc2ab3653cece29d06f65dd6f2c230cb08ee30c5517407d75db0221008cfeb87b8e95ddacd638b37d315393c5005f3ab8bba0cc1cd1a050829b775bfb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 240, + "comment" : "special case hash", + "msg" : "36323139353630323031", + "sig" : "3046022100def608caf1f277d71403009f209c1d7eef11aaa7920397fbf429b8146181aece022100f3b8f2aa5b3df9a8b37313ea66ad5b74673f3e8614ff471b1eb6773217511fb0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 241, + "comment" : "special case hash", + "msg" : "35363832343734333033", + "sig" : "304402204f5d08e8d936ce831d02d6b23fb8fce0e0750101af3ab9c3b28636b95a5e24ad02206f034480553bcecac221f8be8288163c55492e2e56a88f4d0341b61436a0a6c0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 242, + "comment" : "special case hash", + "msg" : "33373336353331373836", + "sig" : "3045022100bdd822bfe3733d9f4b88764fe091db2e8f8af366e4c44d876bf82e62bd48c7ee02207fbf7750c5dc849a2c55dbdd067806f869652a7b3a57baa4733781d3128f02de", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 243, + "comment" : "special case hash", + "msg" : "34373935393033373932", + "sig" : "304402201c4fc02961b7f4245566b410bf08f447502ea4f75b15690344681efa2edf7b4b02207d63eef119dc88bc4a1b2c43ac21cd53892443661f8c3a97d558bf888c29f769", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 244, + "comment" : "special case hash", + "msg" : "39333939363131303037", + "sig" : "304402206406f2d249ab1264e175476ca3300efd049fcad569dff40b922082b41cc7b7ce0220461872b803383f785077714a9566c4d652e87b2cad90dd4f4cc84bc55004c530", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 245, + "comment" : "special case hash", + "msg" : "31303837343931313835", + "sig" : "30450220415c924b9ba1902b340058117d90623602d48b8280583fb231dc93823b83a153022100f18be8cdc2063a26ab030504d3397dc6e9c6b6c56f4e3a59832c0e4643c0263c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 246, + "comment" : "special case hash", + "msg" : "33323336363738353030", + "sig" : "3045022100d12e96c7d2f177b7cf6d8a1ede060a2b174dc993d43f5fe60f75604824b64fef02200c97d87035fcca0a5f47fe6461bb30cbaf05b37e4211ec3fcd51fc71a12239ca", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 247, + "comment" : "special case hash", + "msg" : "31343438393937373033", + "sig" : "304502207df72a64c7e982c88f83b3a22802690098147e0e42ef4371ef069910858c0646022100adbaa7b10c6a3f995ed5f83d7bda4ba626b355f34a72bf92ff788300b70e72d0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 248, + "comment" : "special case hash", + "msg" : "35373134363332383037", + "sig" : "30440220047c4306f8d30e425ae70e0bee9e0b94faa4ef18a9c6d7f2c95de0fe6e2a323702207a4d0d0a596bd9ea3fe9850e9c8c77322594344623c0b46ac2a8c95948aefd98", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 249, + "comment" : "special case hash", + "msg" : "323236343837343932", + "sig" : "3044022057d603a367e23af39c95dd418c0176da8b211d50b1be82bf5ef621a2640204f702205dc3f285ad015c4d71157bd11e5b8df6a89e4b267393b08b5ad5013bdae544b1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 250, + "comment" : "special case hash", + "msg" : "35333533343439343739", + "sig" : "3044022011df6741021ec8cc567584aea16817c540859c4e5011551c00b097fcfc2337e50220668551919d43206ac0571fc5ad3ac0efb489bea599e7bf99fe4c7468d6c2c5e0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 251, + "comment" : "special case hash", + "msg" : "34373837333033383830", + "sig" : "304402207451ffede471bd370406533436fc42a89daa0af4903d087cbc062fe7e54dbf700220590895398f22b48ce72cbf7c3d3ee1dd7fb0ee645edb0b1b1de35f370e5bf5ee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 252, + "comment" : "special case hash", + "msg" : "32323332313935383233", + "sig" : "3045022100fc4c4d81da6f687a6426263193c1a680b67734a1b180647b8c76407cc4f0a9c6022056f775d372c9bee685374085be676c9cf31cf1f978a5e6ccb04e4a0761159cc7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 253, + "comment" : "special case hash", + "msg" : "3130373339333931393137", + "sig" : "3045022100feb978ca33c46ffba47eb63bb40de7833e43d5654575b54de1fea3d1de3c8ad50220108078ba997bfa064521baf342c97b0c64bd25240c8fd0fd7533ae2d03081b70", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 254, + "comment" : "special case hash", + "msg" : "31383831303237333135", + "sig" : "3046022100cc61729698467ba53da199ff481fe7433f194fc96367907e8dc5e1d9f42b1e2102210083dd9ef156e7c1f9c09b3bf86a4f1c88e5dd20cd74d997858e600797dbe74ad2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 255, + "comment" : "special case hash", + "msg" : "36303631363933393037", + "sig" : "3045022100d47f616303ff0eb813eac32e760ba30ad445e0af7dc57e70756104823f6a895f0220047f2217b399c46a426b936a124980a6011f0896f51dbe07632828a72d7173f1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 256, + "comment" : "special case hash", + "msg" : "38383935323237303934", + "sig" : "3046022100cff73dfa2bac67ce1340b25c885abb3e7979ef7f840f15d5f19e86640cdd40a3022100c7d1210802796c4f251049ee08a2c29f5c71064033d17010c65bf2e94499381e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 257, + "comment" : "special case hash", + "msg" : "31353830323334303934", + "sig" : "3044022010acaf9c485ab1220355b95be269f124e12eb252f2224b0fc50785eb2ee3df45022032443b557efc6896347fa778e1fcf33cbb769c9a7da896b20d93fea7c2791ea4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 258, + "comment" : "special case hash", + "msg" : "33393635393931353132", + "sig" : "3046022100f919da0651abc2bff994a879d2778fa5195d57400e003e8dd6adb3fc7a0cc4cc0221009b945d06bd119665b278a59bd24fdd2350817d0be87997bee57b70c479d64a2d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 259, + "comment" : "special case hash", + "msg" : "32323838373332313938", + "sig" : "3045022100cc38e7a018f6d70b2d9b49120cc9b4a169f2f72238821a86b81f553b6225d24e0220276efd8bf06ccce07c7aae35eaac3bd1c374dcf0cf0588d5e0e4171936688636", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 260, + "comment" : "special case hash", + "msg" : "32323330383837333139", + "sig" : "3045022100ff85ad66621991c318b85cef73c576cb2a8d43c568c1aafc85b40ef2a9a6b41c0220732a79e6837ebf8434fea6e7fefa948f506ae455c1a3eb36a030185a23037d96", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 261, + "comment" : "special case hash", + "msg" : "313239303536393337", + "sig" : "3044022033f016e51eef9b1136380cb8b84c6b38b107e24c6731bd07cb1c7f4a29f33a83022036b177bb8be94c8be67ff3a41fcc4d22b5c9eb377da713eb014ae01c64ca6dd7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 262, + "comment" : "special case hash", + "msg" : "32373438363536343338", + "sig" : "3045022100929413ee91f27454d74e91370a10a86fc98ac7305c8ab4ca59752bda3a7bfc370220483b47a26a0d7d2e6bd37d351d9ee37c5ec2a4686d884d78b6beb7f6b08c50f9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 263, + "comment" : "special case hash", + "msg" : "37353833353032363034", + "sig" : "30450220578202c7d0abac93ca43dde3cb44414e5601c1eb557604cb9adb4bde0a12633b022100fb9a7412e307aee95ef4b53540571a21559414e5306794ab5182cfb229dab3e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 264, + "comment" : "special case hash", + "msg" : "32333237373534323739", + "sig" : "3045022046d45ad0bb75b8639d0e91d8450fc31887c211328a5784fc83b4cb7f5b962c1b022100d6751d13ede2079b7aa1d822bdb32d7f3cf00273a1ff03df90c0ec7c62a47568", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 265, + "comment" : "special case hash", + "msg" : "373735353038353834", + "sig" : "3046022100abe84c941783d5ced284fea56341ecc68d6bdd3196d318fbd074641f8c885bd5022100bdea3c44d48e01aa40935c1c9723ff733199563440f26b4ecf0b444b0418d9f5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 266, + "comment" : "special case hash", + "msg" : "3137393832363438333832", + "sig" : "3045022005277cdbf491e336fe81be24e393a161a4fb89112c9ffed1ee6649c406713408022100ab6934332e68e108bb0484d21c457dcf381a620c3a4712fdbfeb658a3fafd60c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 267, + "comment" : "special case hash", + "msg" : "32333936373737333635", + "sig" : "30450220293825737c8c14430ed10dbadd7da337275f9b61d1d26377f778ffaa00c139de022100cdddec267a8678c96829bf6c1d6f38322e119937cfd2fee01e9dc9525f43ed6b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 268, + "comment" : "special case hash", + "msg" : "35393938313035383031", + "sig" : "304402202041fdd6111c45dfd29e750e082dcdadc9a584a8a2be46580fb0ba3b3dc658620220421824fe987e4172a0f8bbcb7bcd9e1b073b7742ed9f9df98f2a1a37cd374ce3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "special case hash", + "msg" : "3136363737383237303537", + "sig" : "30450220267941db660e046ab14e795669e002b852f7788447c53ebef46a2056978b5574022100d00183bcaf75bc11e37653f952f6a6537151c3aa0a1b9e4e41b004a29185395b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "special case hash", + "msg" : "323036323134333632", + "sig" : "304402205dcd7f6814739d47f80a363b9414e6cbfb5f0846223888510abd5b3903d7ae09022043418f138bb3c857c0ad750ca8389ebcf3719cb389634ac54a91de9f18fd7238", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "special case hash", + "msg" : "36383432343936303435", + "sig" : "304502205e0e8cc0280409a0ce252da02b2424d2de3a52b406c3778932dbc60cb86c356702210093d25e929c5b00e950d89585ec6c01b6589ae0ec0af8a79c04df9e5b27b58bc5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "special case hash", + "msg" : "33323639383937333231", + "sig" : "304502204fcf9c9d9ffbf4e0b98268c087071bffe0673bb8dcb32aa667f8a639c364ea47022100820db0730bee8227fc831643fcb8e2ef9c0f7059ce42da45cf74828effa8d772", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "special case hash", + "msg" : "31333837333234363932", + "sig" : "3046022100c60cd2e08248d58d1639b123633643c63f89aff611f998937ccb08c9113bcdca022100ac4bb470ce0164616dada7a173364ed3f9d16fd32c686136f904c99266fda17e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "special case hash", + "msg" : "34313138383837353336", + "sig" : "304502207cfdaf6f22c1c7668d7b6f56f8a7be3fdeeb17a7863539555bbfa899dd70c5f1022100cee151adc71e68483b95a7857a862ae0c5a6eee478d93d40ccc7d40a31dcbd90", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "special case hash", + "msg" : "393838363036353435", + "sig" : "304402202270be7ee033a706b59746eab34816be7e15c8784061d5281060707a0abe0a7d022056a163341ee95e7e3c04294a57f5f7d24bf3c3c6f13ef2f161077c47bd27665d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "special case hash", + "msg" : "32343739313135383435", + "sig" : "3044022016b5d2bfcaba21167a69f7433d0c476b21ded37d84dc74ca401a3ecddb2752a8022062852cf97d89adfb0ebbe6f398ee641bfea8a2271580aac8a3d8326d8c6e0ef9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "special case hash", + "msg" : "35303736383837333637", + "sig" : "3046022100d907eefa664115848b90c3d5baa0236f08eafaf81c0d52bb9d0f8acb57490847022100fd91bc45a76e31cdc58c4bfb3df27f6470d20b19f0fba6a77b6c8846650ed8a6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "special case hash", + "msg" : "393838353036393637", + "sig" : "30450220048337b34f427e8774b3bf7c8ff4b1ae65d132ac8af94829bb2d32944579bb31022100bd6f8eab82213ccf80764644204bb6bf16c668729cdd31dd8596286c15686e8e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "special case hash", + "msg" : "32373231333036313331", + "sig" : "3046022100b2bc46b7c44293557ab7ebeb0264924277193f87a25d94c924df1518ba7c7260022100abf1f6238ff696aaafaf4f0cbbe152c3d771c5bfc43f36d7e5f5235819d02c1a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "special case hash", + "msg" : "33323034313031363535", + "sig" : "3045022040d4b38a61232e654ffd08b91e18609851f4189f7bf8a425ad59d9cbb1b54c990221009e775a7bd0d934c3ed886037f5d3b356f60eda41191690566e99677d7aaf64f3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "special case hash", + "msg" : "33313530363830393530", + "sig" : "3046022100ac8f64d7df8d9fea005744e3ac4af70aa3a38e5a0f3d069d85806a4f29710339022100c014e96decfef3857cc174f2c46ad0882bef0c4c8a17ce09441961e4ae8d2df3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "special case hash", + "msg" : "31373237343630313033", + "sig" : "3044022041b3766f41a673a01e2c0cab5ceedbcec8d82530a393f884d72aa4e6685dea0a0220073a55dca2da577cafb40e12dd20bf8529a13a6acdf9a1c7d4b2048d60876cb3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "special case hash", + "msg" : "3134353731343631323235", + "sig" : "304502201942755aa8128382cd8e35a4350c22cc45ba5704d99e8a240970df11956ad866022100f64cf1e0816cf7ac5044f73ba938e142ef3305cb09becb80a0a5b9ad7ba3eb07", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "special case hash", + "msg" : "34313739353136303930", + "sig" : "3045022051aba4ff1c7ddf17e0632ab71684d8de6dc700219ef346cb28ce9dafc3565b3b022100b6aaebe1af0ad01f07a68bf1cf57f9d6040b43c14b7eb8238542760e32ce3b0c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "special case hash", + "msg" : "35383932373133303534", + "sig" : "304502210091efbfcc731650e9f004c38b71db146c17bf871c82c4e87716f7ff2f7f9e51d00220089ea631a7c5f05311c521d21ba798b5174881f0fd8095fb3a77515913efb6e0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "special case hash", + "msg" : "33383936313832323937", + "sig" : "304502204a7e47bd281ea09b9e3a32934c7a969e1f788f978b41585989f4689e804663fb022100e65f6bd702403cbbed7f8ad0045f331d4a96fbf8c43f71f11615b7d1b9153b7f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "special case hash", + "msg" : "38323833333436373332", + "sig" : "3046022100c795f5da86e10a604d4f94bf7cac381c73edad1461d66929e53aa57ca294e89f022100bae784ab6c7b58332ee05e7d54169edf55ce45f030e71ae8df63969fb327a10c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "special case hash", + "msg" : "33333636393734383931", + "sig" : "3046022100ea68b24843b225f505e01c0e608b20b4d93e8faf6b9cf70cf8f9134a80e7b668022100a3abc044b4728f80fe414bdc66f032b262356720547bec7729fad94151c6adc7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "special case hash", + "msg" : "32313939313533323239", + "sig" : "3046022100bfe7502140c57a24a77edc3d9b3c4bc11d21bdb0b196977b7f2b13ac973ad697022100947a01da9731849d72b67ef7bc40b012480fd389895aad1f6b1cdbeab3b93b8d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "special case hash", + "msg" : "35363030333136383232", + "sig" : "304402203434ee1142740a0ab8623b97fc8dc2567eda45dadf6039b45c448819e840cf3002203c0fac0487841997202c29f3bf2df540b115b29dc619160d52203d4a1fd4b9f7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "special case hash", + "msg" : "383639363531363935", + "sig" : "304502205338500e23ba96a0adc6ef84932e25fbad7435d9f70eb7f476c6912de12e33c8022100a002f5583ea8c0d7fb17136d0ee0415acf629879ce6b01ac52e3ecd7772a3704", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "special case hash", + "msg" : "36353833393236333732", + "sig" : "304402204ff2d4e31f4180de6901d2d20341d12387c9c55f4cf003a742f049b84af6fe0502200312f38771414555fa5ed2817dcc629a8c7cf69d306300e87bc167278ec3ef37", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "special case hash", + "msg" : "3133323035303135373235", + "sig" : "3044022051d665bad5f2d6306c6bbfe1f27555887670061d4df36ec9f4ce6cdfaf9ea7ac02202905e43f6207ee93df35a2e9fb9bc8098c448ae98a14e4ad1ebaea5d56b6e493", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "special case hash", + "msg" : "35303835333330373931", + "sig" : "3046022100b804e0235f135aba7b7531b6831f26cc9fb77d3f83854957431be20706b813690221009d317fd08e4e0467617db819cde1d7d4d74da489b2bce4db055ea01eccfafcf2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "special case hash", + "msg" : "37383636383133313139", + "sig" : "30450221008ab50ef3660ccb6af34c78e795ded6b256ffca5c94f249f3d907fb65235ef680022049d5aaeae5a6d0c15b286e428b5e720cf37a822ede445baa143ffae69aba91b8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "special case hash", + "msg" : "32303832353339343239", + "sig" : "30440220571b9c46a47c5cc53a574c196c3fb07f3510c0f4443b9f2fe781252c24d343de022068a9aebd50ff165c89b5b9cb6c1754191958f360b4d2851a481a3e1106ee7809", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "special case hash", + "msg" : "3130303635393536363937", + "sig" : "304502204cb7817b04dc73be60d3711803bc10687a6e3f4ab79c4c1a4e9d63a73174d4eb022100ce398d2d6602d2af58a64042f830bf774aee18209d6fb5c743b6a6e437826b98", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "special case hash", + "msg" : "33303234313831363034", + "sig" : "30450220684399c6cd6ebb1c5d5efb0d78dce40ebd48d9d944eb6548c9ce68d7fdc82229022100cf25c8e427fae359bfe60fa02964f4c9b8d6db54612e05c78c341f0a8c52d0b5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "special case hash", + "msg" : "37373637383532383734", + "sig" : "3045022020b7b36d5bc76fa182ca27152a99a956e6a0880000694296e31af98a7312d04b022100eeeabc5521f9856e920eb7d29ed7e4042f178ff706dff8eeb24b429e3b63402a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "special case hash", + "msg" : "353434313939393734", + "sig" : "304402206b65c95e8e121d2e6ee506cfd62cb88e0bfb3589da40876898ef66c43982aca9022009642c05ad619b4402fd297eb57e29cca5c2eb6823931ba82de32d7c652ba73e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "special case hash", + "msg" : "35383433343830333931", + "sig" : "3044022067c74cbf5ea4b777bf521ace099f4f094d8f58900e15e67e1b4bd399056629ed02203d2884655c49b8b5f64e802a054e7bf09b0fc80ca18ebf927b82e58bb4a00400", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "special case hash", + "msg" : "373138383932363239", + "sig" : "3045022079a5e40da5cf34c4c39adf7dfc5d454995a250314ebd212b5c8e3f4e6f875feb022100b268920e403ba17828ff271938a6558a5b2dd000229f8edb4a9d9f9b6ac1b472", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "special case hash", + "msg" : "31373433323233343433", + "sig" : "3045022100c8b13006c3a51a322fff9321761b01de134f526be582b22e19693c443fc9fe46022034e7f60179c6162ab980fcd58f173b0e6c30b524d35c67921677522dcef843a1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "special case hash", + "msg" : "32343036303035393336", + "sig" : "304502203513db745489a487c88a6cedf8795b640f8f71578397bdabd6cc586c25bd66ad02210099a72cd3f0ca6c799149283ca0af37f86b88200d0c905bd3c9f1b859e55b1659", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "special case hash", + "msg" : "31363134303336393838", + "sig" : "304402203a6386afb08f7ff8140b5a270f764e8706ef2830fb177446f7b4eeb8a25aac6402204b70854b38c29245b2b980eba10ea936c68a38c1da5255ce2386db23afc7c06a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "special case hash", + "msg" : "32303935343235363835", + "sig" : "3046022100b8fc54a8a6be3c55e99c06f99ccdcce7af5c18a3c5829726a870cc1068458f64022100cc7237c39c8e6a4a1c8c62f5f88636549c7410798b89684c502c3adfe5fb7ad2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "special case hash", + "msg" : "31303038303938393833", + "sig" : "3045022047b460851e5607f2021626635c565a63f78f558795e1b330d09115970dbbb8ab022100a6a9f4f213e08d3c736d3e1c44a35140cb107619f265a5b13608ed729fd6d894", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "special case hash", + "msg" : "31353734313437393237", + "sig" : "30450221008cfda4f7a65864ebbea3144863da9b075c07b5b42cb4569643ddfd70dd753b190220595784b1ab217874b82b9585521f8090b9f6322884ab7a620464f51cf846c5b7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "special case hash", + "msg" : "32383636373731353232", + "sig" : "304402204cd6a45bd7c8bf0edbdf073dbf1f746234cbbca31ec20b526b077c9f480096e702207cf97ae0d33f50b73a5d7adf8aa4eeeb6ff10f89a8794efe1d874e23299c1b3d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "special case hash", + "msg" : "31363934323830373837", + "sig" : "304402202e233f4df8ffebeaec64842b23cce161c80d303b016eca562429b227ae2b58ec022046b6b56adec82f82b54daa6a5fca286740a1704828052072a5f0bc8c7b884242", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "special case hash", + "msg" : "39393231363932353638", + "sig" : "30440220549f658d4a3f98233a2c93bd5b1a52d64af10815ae60becb4139cac822b579c3022027bdddf0dbcf374a2aec8accc47a8ac897f8d1823dda8eb2052590970b39ce2a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "special case hash", + "msg" : "3131363039343339373938", + "sig" : "30450221009fabcc1e5fd965226902f594559e231369e584453974e74f49d7d762e134fb9d0220293cccc510793bac45ce5da2bb6c9e906437f59435ca206655f74b625df07c7c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "special case hash", + "msg" : "37313836313632313030", + "sig" : "304502202e5c140fd6f5f823addc8088ffaae967e7f4897274316769561dfb31435825d9022100eda47327d7cfae1daa344ff5582a467bd18eb9f01caeab9c6da3c0cc89df6713", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "special case hash", + "msg" : "33323934333437313737", + "sig" : "304402204c11e3b7efbe3908ad2118e54d7d34d6c6eb4570bf7fdb11a7679fe93afa254c0220712e90f421836e542dac49d10bb39db4a98b2735b6336d8a3c392f3b90e60bbe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 315, + "comment" : "special case hash", + "msg" : "3138353134343535313230", + "sig" : "3045022100dfb4619303f4ff689563d2275069fac44d63ea3c3b18f4fb1ac805d7df3d12ec022068e37b846583901db256329f9cf64f40c416fba50dcb9be333a3e29c76ae32db", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 316, + "comment" : "special case hash", + "msg" : "343736303433393330", + "sig" : "3045022100e70e8e17bd758ff0c48f91cb2c53d293f0f5ae82eb9dfe76ab98f9b064278635022021dde32cb0389cad7bdf676d9b9b7d25bb034ad25a55ea71ee7ee26a18359dd2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 317, + "comment" : "special case hash", + "msg" : "32353637333738373431", + "sig" : "30440220421397ecae30617a5a6081ad1badf6ce9d9d4cb2afdabf1f900e7fdb7fb0af5a022057ca89dc22801c75fdbefdaeca65c675625f94de7d635062b08ed308df5762cc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 318, + "comment" : "special case hash", + "msg" : "35373339393334393935", + "sig" : "304502200610c08076909bb722fba105c23eac8f66b4db1d58f66a882fc90d59acdec8e0022100af59e8d570761cac589d49f11c884007f7ac1eea1a44c6f3fdad1d542187d25e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 319, + "comment" : "special case hash", + "msg" : "33343738333636313339", + "sig" : "3045022059a1181cab0ee8ce94ab2b5ab4f4b13a422e38efe69f634bf947485a5b9ea49c0221009b3c913d98a4ab15f6a39f1802b8f2d28559aa1f8d03a3a88df00c89dc293a97", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 320, + "comment" : "special case hash", + "msg" : "363439303532363032", + "sig" : "30460221008cae6c4dfbf901bd66ab82541011fa15c8e90e2c18c01bd881acaa2b63cb587b022100a86acf943f29cef91d1b66a7de5547df6cdfc45dd7bef816dcb8de9f5a425d2d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 321, + "comment" : "special case hash", + "msg" : "34373633383837343936", + "sig" : "30450221008b00c74b86474d782eac9974aea606d8f7ee78c79597e15687021f5991e86acd0220309dfe3686648eae104e87b3e9b5616a3ad479ca4f0b558ae4f1e5ab3115346a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 322, + "comment" : "special case hash", + "msg" : "353739303230303830", + "sig" : "30450220433a915504c977809634a36fcf4480e4c8069fc127d201d30dfdb1f423c95fd4022100bcb1b89aafd50a1766b09741fc6a9a96e744ae9826d839bf85ffb50a91981773", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 323, + "comment" : "special case hash", + "msg" : "35333434373837383438", + "sig" : "304502204b69abd2b39840a545cdd4a72d384234580e2fd938b7091d0ecdb562780857db022100fdab9957119e0a4092af82f6cc29f3c8a692671ec86efb0a03c1112a0a1e0467", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 324, + "comment" : "special case hash", + "msg" : "3139323636343130393230", + "sig" : "3045022100dab9d3686c28363ad017b4a2b36d35bf2eb80633613d44deb9501d42a3efbd3802201392a562d79f9ab19014e4f7e2f2668259f3720a76c120d4a3c3964e880f7679", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 325, + "comment" : "special case hash", + "msg" : "33373033393135373035", + "sig" : "3045022023f94e47b440ce379b74c9311232b19a64e3e7c9b90da34b0c1c3f3d7af28105022100e1425903b1479c2ce18b108a6d1ec8b7a4f0f657dedb00de3a3ceea7fdeee9be", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 326, + "comment" : "special case hash", + "msg" : "3831353435373730", + "sig" : "30450221009d706a8fa85d15bd0c3492c6672dfe529f4073b217b3947b5b2cfd61f87ccb7102206aaaaf369f82a0e542f72ded7d7eb90c8314ffa613a0ea81da1c8393dbae2bac", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 327, + "comment" : "special case hash", + "msg" : "313935353330333737", + "sig" : "3046022100ac77918c4085c8a7ce5020b00c315629aee053a445cb4661eb50f6b62a47da29022100df2aea2b9c11a6ce39d3cd9e1faf4a53057e0b1b2e48a324be9e773203fe9fbb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 328, + "comment" : "special case hash", + "msg" : "31323637383130393033", + "sig" : "30460221009db2dbd2935f147fae7f6a95c8e2307bd8537c3d96eb732ad6d5ebdd89bc754e02210093a9ab99d2de9d08fe0a61e26c8fe1ebbf88726e4b69d551b57d15f0ae16df5a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 329, + "comment" : "special case hash", + "msg" : "3131313830373230383135", + "sig" : "30440220769f70093939afbd1fa15873decfa803ca523ace8040280ba78cf833497722bc0220369875aba5e1ced5a4ca8444ec9399a38038b00e153a0ae34d9b3c9781447eea", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 330, + "comment" : "special case hash", + "msg" : "38333831383639323930", + "sig" : "3045022026e5182b9822550ad52f46ad80781d6bef3d110a204db5e58a0746f796982200022100a9418e76029ced0cf78a571a9e59ad04086e91f70e6813981bb33c1dee891165", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 331, + "comment" : "special case hash", + "msg" : "33313331323837323737", + "sig" : "3046022100e7bd6aefcf7b27e1f3fadbe713f9adb3d23398e88200cd2e94989c9d12e921770221009583e0de3b76f8d4b1e634a81cbc34af54e2f8599f3684ce48d372760c8204c4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 332, + "comment" : "special case hash", + "msg" : "3134333331393236353338", + "sig" : "30450221008638ed7eaa83609a01a6af9c52ec9bfddda90442b1e6031d61cfa22e48b2e1e2022020c284d596f71c6c8df732f5a5a2006302301e1a792e2b39663d93a9760762d2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 333, + "comment" : "special case hash", + "msg" : "333434393038323336", + "sig" : "3044022061d924307a96180b06383608ba91674e15c3ea06ff2534412b93a587dde649c1022059b84aa2115b2547edac88088ca6313e9fbe1ca6a361c7e57938f9dde3f4349c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 334, + "comment" : "special case hash", + "msg" : "36383239383335393239", + "sig" : "30450220424fcfc3fd63d128c2eb125e88c7fe5d283b63470a786b82783edbb8a0b7a6d7022100b11548c2cd7fce9d44e795ca51af0b2f6a5180e9c9be0314007ed9e7f4bbe5e9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 335, + "comment" : "special case hash", + "msg" : "33343435313538303233", + "sig" : "3045022100a5f747ae6290fa9582c6ce8d5608621d495f061551bc4531bacba586a563b184022062faf8f92291e12812835b3f1d43c967bceb885b110bd06e5a68e2d74781ae2b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 336, + "comment" : "special case hash", + "msg" : "3132363937393837363434", + "sig" : "3045022100b731dc0d92c2cc7a605d78233f7814699bdf1cab2df297b6844eec4015af8ea0022039b1a0cc88eb85bcdc356b3620c51f1298c60aec5306b107e900ffdba049dd6f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 337, + "comment" : "special case hash", + "msg" : "333939323432353533", + "sig" : "3046022100ef73c4fa322da39fb6503bab6b66b64d241056afbcd6908f84b61ccbbe890433022100f1ef85413e5764aa58a3128ccfcf388324fe5340e5edf8d0135ae76786ce415b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 338, + "comment" : "special case hash", + "msg" : "31363031393737393737", + "sig" : "30450220694cd30e2ad0182579331474b271ee2d48723bc8415dc6513873586ce705b76b022100c5ac0c0ed5a4017d110cb45d63aa955dc7dc5ce23e7965c5397c3ff46a884636", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 339, + "comment" : "special case hash", + "msg" : "3130383738373535313435", + "sig" : "3046022100f38b2236be3024e10b894ffb1cc68d0bb8d4cf0fcd2cfc1779f8883765d3cd96022100da69cd0b74c25566d60a486edd559fc39d569fb2751445a4798df8a36891802c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 340, + "comment" : "special case hash", + "msg" : "37303034323532393939", + "sig" : "3046022100a881732c205a0b4b95669c00756fd91973450109a46f17d5a9d971b5e92b9aa40221008acefdca4e06c16b47ccad1c57c05912637e107096ba230c92b97187db79e19e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 341, + "comment" : "special case hash", + "msg" : "31353635333235323833", + "sig" : "3044022004452f554bae819b42effb84ef44a9f1cb7e2d75b4ba9ff9b9cfffaddde3fd1b022061a3fbc5e73c350f2e3d85a7452cd231a3f3375fc11f5fe153b185f53b09c1d0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 342, + "comment" : "special case hash", + "msg" : "3233383236333432333530", + "sig" : "3045022005814f57f58efc7cb490119e584e635e6f0ad1c19fb5dc2edafda075bb55f98e0221009dd5c6e39009d67d965903ecffe08a851775cc1248cc19c0b77798282131b8f6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 343, + "comment" : "special case hash", + "msg" : "31343437383437303635", + "sig" : "3045022100dc1c4a46085e198843b1f01980cd5e4a1ff6f8e8ff7014397f0afd5b247fb0a0022038a13dc723ed90b30251d742b14733a03292ff26530a1ebcaf3d10862a6eff82", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 344, + "comment" : "special case hash", + "msg" : "3134323630323035353434", + "sig" : "304502201067667bf525734ca7f2510e36348fd9c2c9bccf032dfd571de6d45abd49361a022100fa762568d3a19e5a1d8ea65e00202a5b16f9afae56733a01f86e35378c558da4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 345, + "comment" : "special case hash", + "msg" : "31393933383335323835", + "sig" : "3046022100e58d69dc56bc1031644847e3e046e2ea845a515d969d07ea1aa53aea5bd92fa1022100bfe50b80f7c512f5ab521fe7e1a131045fde78d4de826c91573baaba1e35ca97", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 346, + "comment" : "special case hash", + "msg" : "34323932313533353233", + "sig" : "3046022100fe79c6b8c14d0f23d426e3d157f1b541f6bb91bf29957ef97c55949c9ba48a350221009da112c4a4cf4b1ff490c426f6c8ff122183964a0de56f7336ab382dc9d10285", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 347, + "comment" : "special case hash", + "msg" : "34343539393031343936", + "sig" : "3045022045d4ed7e9edacb5a730944ab0037fba0a136ed9d0d26b2f4d4058554f148fa6f022100f136f15fd30cfe5e5548b3f4965c16a66a7c12904686abe12da777619212ae8c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 348, + "comment" : "special case hash", + "msg" : "31333933393731313731", + "sig" : "304402204fb7c1727e40bae272f6143a50001b54b536f90233157896dbf845e263f2486302206fea5c924dca17519f6e502ef67efa08d39eb5cc3381266f0216864d2bd00a62", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 349, + "comment" : "special case hash", + "msg" : "32333930363936343935", + "sig" : "30450220779aac665dd988054b04f2e9d483ca79179b3372b58ca00fe43520f44fcb4c32022100b4eca1182cd51f0abd3ea2268dcda49a807ad4116a583102047498aa863653f5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 350, + "comment" : "special case hash", + "msg" : "3131343436303536323634", + "sig" : "3046022100db7ac6f65fb1c38d80064fd11861631237a09924b4eeca4e1569fa4b7d80ad24022100a38d178d37e13e1afa07a9d03da025d594461938a62a6c6744f5c8f7d7b7bb81", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 351, + "comment" : "special case hash", + "msg" : "363835303034373530", + "sig" : "3046022100c90043b4aadf795d870ac223f33acdbd1948c31afff059054dc99528c6503fa6022100829f67b312bb134f6954a23c611a7f7b5b2a69efced9c48db589ac0b4d3da827", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 352, + "comment" : "special case hash", + "msg" : "3232323035333630363139", + "sig" : "3045022100fa16c0125b6615b90e81f7499804308a90179bf3fcff6a4b2695271c68b23ded02200d6cda5ce041dc5a5f319ad9c0de4927d0cf5e89e37b79216194413d42976d54", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 353, + "comment" : "special case hash", + "msg" : "36323135363635313234", + "sig" : "304502201a4b5bd0f806549f46a3e71bfe412d6d89206017640ded66f3d0b2d9b26bec45022100aac5f74e3130264e01428570ee82ee47e245d160ed812ae252dedffd82e1ec2c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 354, + "comment" : "Signature generated without truncating the hash", + "msg" : "313233343030", + "sig" : "3045022100f8e272234b51475ec4c6f327562a6e5c9080a96225e88b2e5f72a8eecbd41ab40220516b91617fc39e3141b3bc769f6a3b2e468e687f50bdc29e19088af62d203f4b", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04b6e08b1bcc89e7fb0b84d7497e310553495be4877eccc4b3d6d79f7c68a0573431760fa1bcea4972759174ac1103bc6011985ccee251918d0573fbcb78969116", + "wx" : "00b6e08b1bcc89e7fb0b84d7497e310553495be4877eccc4b3d6d79f7c68a05734", + "wy" : "31760fa1bcea4972759174ac1103bc6011985ccee251918d0573fbcb78969116" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b6e08b1bcc89e7fb0b84d7497e310553495be4877eccc4b3d6d79f7c68a0573431760fa1bcea4972759174ac1103bc6011985ccee251918d0573fbcb78969116", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEtuCLG8yJ5/sLhNdJfjEFU0lb5Id+\nzMSz1teffGigVzQxdg+hvOpJcnWRdKwRA7xgEZhczuJRkY0Fc/vLeJaRFg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 355, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "303502104319055358e8617b0c46353d039cdaab022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 356, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000001000000000000000000000000fffffffffffffffffffffffc022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "043590c6a10353d669bc94d8e2ff9e14bbeed4a7f45b887255ab7e37b676387bb615fc6f97ce39a3874c2b34cc571889abfa0a706c2cfb0e5a4750cc25690696f8", + "wx" : "3590c6a10353d669bc94d8e2ff9e14bbeed4a7f45b887255ab7e37b676387bb6", + "wy" : "15fc6f97ce39a3874c2b34cc571889abfa0a706c2cfb0e5a4750cc25690696f8" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043590c6a10353d669bc94d8e2ff9e14bbeed4a7f45b887255ab7e37b676387bb615fc6f97ce39a3874c2b34cc571889abfa0a706c2cfb0e5a4750cc25690696f8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENZDGoQNT1mm8lNji/54Uu+7Up/Rb\niHJVq343tnY4e7YV/G+Xzjmjh0wrNMxXGImr+gpwbCz7DlpHUMwlaQaW+A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 357, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "3046022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254f022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc63254e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04369e96402f2cfd1a37b3acbdecfc562862dbca944a0f12d7aaacb8d325d7650aa723621922be2bdac9186290fdcdda028d94437966507d93f2fc1f5c887fdedb", + "wx" : "369e96402f2cfd1a37b3acbdecfc562862dbca944a0f12d7aaacb8d325d7650a", + "wy" : "00a723621922be2bdac9186290fdcdda028d94437966507d93f2fc1f5c887fdedb" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004369e96402f2cfd1a37b3acbdecfc562862dbca944a0f12d7aaacb8d325d7650aa723621922be2bdac9186290fdcdda028d94437966507d93f2fc1f5c887fdedb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENp6WQC8s/Ro3s6y97PxWKGLbypRK\nDxLXqqy40yXXZQqnI2IZIr4r2skYYpD9zdoCjZRDeWZQfZPy/B9ciH/e2w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 358, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100909135bdb6799286170f5ead2de4f6511453fe50914f3df2de54a36383df8dd4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0427a0a80ea2e1aa798ea9bcc3aedbf01ab78e49c9ec2ad0e08a0429a0e1db4d0d32a8ee7bee9d0a40014e484f34a92bd6f33fe63624ea9579657441ac79666e7f", + "wx" : "27a0a80ea2e1aa798ea9bcc3aedbf01ab78e49c9ec2ad0e08a0429a0e1db4d0d", + "wy" : "32a8ee7bee9d0a40014e484f34a92bd6f33fe63624ea9579657441ac79666e7f" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000427a0a80ea2e1aa798ea9bcc3aedbf01ab78e49c9ec2ad0e08a0429a0e1db4d0d32a8ee7bee9d0a40014e484f34a92bd6f33fe63624ea9579657441ac79666e7f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJ6CoDqLhqnmOqbzDrtvwGreOScns\nKtDgigQpoOHbTQ0yqO577p0KQAFOSE80qSvW8z/mNiTqlXlldEGseWZufw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 359, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022027b4577ca009376f71303fd5dd227dcef5deb773ad5f5a84360644669ca249a5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "049cff61712d4bc5b3638341e6e0a576a8098c9c6d3f198d389c4669f398dc0867f3b9e09f567f3dfd9c4d2c1163e82beadf16c76e8f9d7a64673800ea76fa1e59", + "wx" : "009cff61712d4bc5b3638341e6e0a576a8098c9c6d3f198d389c4669f398dc0867", + "wy" : "00f3b9e09f567f3dfd9c4d2c1163e82beadf16c76e8f9d7a64673800ea76fa1e59" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200049cff61712d4bc5b3638341e6e0a576a8098c9c6d3f198d389c4669f398dc0867f3b9e09f567f3dfd9c4d2c1163e82beadf16c76e8f9d7a64673800ea76fa1e59", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEnP9hcS1LxbNjg0Hm4KV2qAmMnG0/\nGY04nEZp85jcCGfzueCfVn89/ZxNLBFj6Cvq3xbHbo+demRnOADqdvoeWQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 360, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020105020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04d9117cae81295e82682fa387991e668e1570e0e90100bf4e63964822460561bc19f96b1787ed15769929978ba3dd7f68c97adf5c16f671e756cd8f08c49456ca", + "wx" : "00d9117cae81295e82682fa387991e668e1570e0e90100bf4e63964822460561bc", + "wy" : "19f96b1787ed15769929978ba3dd7f68c97adf5c16f671e756cd8f08c49456ca" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d9117cae81295e82682fa387991e668e1570e0e90100bf4e63964822460561bc19f96b1787ed15769929978ba3dd7f68c97adf5c16f671e756cd8f08c49456ca", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE2RF8roEpXoJoL6OHmR5mjhVw4OkB\nAL9OY5ZIIkYFYbwZ+WsXh+0Vdpkpl4uj3X9oyXrfXBb2cedWzY8IxJRWyg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 361, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020105020103", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "048cfcbad3524c22b992529f943e3ce0b2d126085501d6e3edd4f1dbf74bdca21eafb259b1ba179cac09e8e43a88c8a09e7339910a7c941932e44b8be56f1fccde", + "wx" : "008cfcbad3524c22b992529f943e3ce0b2d126085501d6e3edd4f1dbf74bdca21e", + "wy" : "00afb259b1ba179cac09e8e43a88c8a09e7339910a7c941932e44b8be56f1fccde" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200048cfcbad3524c22b992529f943e3ce0b2d126085501d6e3edd4f1dbf74bdca21eafb259b1ba179cac09e8e43a88c8a09e7339910a7c941932e44b8be56f1fccde", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEjPy601JMIrmSUp+UPjzgstEmCFUB\n1uPt1PHb90vcoh6vslmxuhecrAno5DqIyKCeczmRCnyUGTLkS4vlbx/M3g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 362, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020105020105", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04fbb51127e1f1b6a38e9fe9a2544614edb8e43ad7cd8c56f14b3235dda3bc11179abd9753a9e647e9340c395fb2b91384d6d33fcb6456214350b6f3fa00f4364c", + "wx" : "00fbb51127e1f1b6a38e9fe9a2544614edb8e43ad7cd8c56f14b3235dda3bc1117", + "wy" : "009abd9753a9e647e9340c395fb2b91384d6d33fcb6456214350b6f3fa00f4364c" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004fbb51127e1f1b6a38e9fe9a2544614edb8e43ad7cd8c56f14b3235dda3bc11179abd9753a9e647e9340c395fb2b91384d6d33fcb6456214350b6f3fa00f4364c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+7URJ+HxtqOOn+miVEYU7bjkOtfN\njFbxSzI13aO8EReavZdTqeZH6TQMOV+yuROE1tM/y2RWIUNQtvP6APQ2TA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 363, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020105020106", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 364, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3026022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632556020106", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04dc80905500d7d74ed47de5224d8734545f22b776ae086cabfffe6ce58d5ef994dc3067ce7d2cdfa9f4d5ace296b752814acc69c19a932d8b14077927901de3bf", + "wx" : "00dc80905500d7d74ed47de5224d8734545f22b776ae086cabfffe6ce58d5ef994", + "wy" : "00dc3067ce7d2cdfa9f4d5ace296b752814acc69c19a932d8b14077927901de3bf" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004dc80905500d7d74ed47de5224d8734545f22b776ae086cabfffe6ce58d5ef994dc3067ce7d2cdfa9f4d5ace296b752814acc69c19a932d8b14077927901de3bf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3ICQVQDX107UfeUiTYc0VF8it3au\nCGyr//5s5Y1e+ZTcMGfOfSzfqfTVrOKWt1KBSsxpwZqTLYsUB3knkB3jvw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 365, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3026020105022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc75fbd8", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "041b824a11eed94fbcd9b722d06613bbcf7eca00b9136f2652642178f37b1a920ee900de495d9ef56fa6d19f3dd1e0edb23d23835ac8c2d3d13c0227e852e503eb", + "wx" : "1b824a11eed94fbcd9b722d06613bbcf7eca00b9136f2652642178f37b1a920e", + "wy" : "00e900de495d9ef56fa6d19f3dd1e0edb23d23835ac8c2d3d13c0227e852e503eb" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200041b824a11eed94fbcd9b722d06613bbcf7eca00b9136f2652642178f37b1a920ee900de495d9ef56fa6d19f3dd1e0edb23d23835ac8c2d3d13c0227e852e503eb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEG4JKEe7ZT7zZtyLQZhO7z37KALkT\nbyZSZCF483sakg7pAN5JXZ71b6bRnz3R4O2yPSODWsjC09E8AifoUuUD6w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 366, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "3027020201000221008f1e3c7862c58b16bb76eddbb76eddbb516af4f63f2d74d76e0d28c9bb75ea88", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "042914b30c4c784696ffc3dddcec05f36cb1488bc342b9f529d5387acb9e48cb8d3dbd30d0d5d6d6a39108863c2d6a6e8571cd3261fb9eb98ce46125bd8f139136", + "wx" : "2914b30c4c784696ffc3dddcec05f36cb1488bc342b9f529d5387acb9e48cb8d", + "wy" : "3dbd30d0d5d6d6a39108863c2d6a6e8571cd3261fb9eb98ce46125bd8f139136" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042914b30c4c784696ffc3dddcec05f36cb1488bc342b9f529d5387acb9e48cb8d3dbd30d0d5d6d6a39108863c2d6a6e8571cd3261fb9eb98ce46125bd8f139136", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKRSzDEx4Rpb/w93c7AXzbLFIi8NC\nufUp1Th6y55Iy409vTDQ1dbWo5EIhjwtam6Fcc0yYfueuYzkYSW9jxORNg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 367, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "302c02072d9b4d347952d6022100ef3043e7329581dbb3974497710ab11505ee1c87ff907beebadd195a0ffe6d7a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "042579f546fe2f2aeb5f822feb28f2f8371618d04815455a7e903c10024a17da415528e951147f76bee1314e65a49c6ec70686e62d38fbc23472f96e3d3b33fd1f", + "wx" : "2579f546fe2f2aeb5f822feb28f2f8371618d04815455a7e903c10024a17da41", + "wy" : "5528e951147f76bee1314e65a49c6ec70686e62d38fbc23472f96e3d3b33fd1f" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042579f546fe2f2aeb5f822feb28f2f8371618d04815455a7e903c10024a17da415528e951147f76bee1314e65a49c6ec70686e62d38fbc23472f96e3d3b33fd1f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJXn1Rv4vKutfgi/rKPL4NxYY0EgV\nRVp+kDwQAkoX2kFVKOlRFH92vuExTmWknG7HBobmLTj7wjRy+W49OzP9Hw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 368, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3032020d1033e67e37b32b445580bf4eff0221008b748b74000000008b748b748b748b7466e769ad4a16d3dcd87129b8e91d1b4d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04b102196bf455ee5aafc6f895504d3c3b6b2d37c35f8669bd0f0b694795fbd992f777b6f829b9628ac35db0ef43f6a89f0a42812614e4c15924d8d47ebe45bae5", + "wx" : "00b102196bf455ee5aafc6f895504d3c3b6b2d37c35f8669bd0f0b694795fbd992", + "wy" : "00f777b6f829b9628ac35db0ef43f6a89f0a42812614e4c15924d8d47ebe45bae5" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b102196bf455ee5aafc6f895504d3c3b6b2d37c35f8669bd0f0b694795fbd992f777b6f829b9628ac35db0ef43f6a89f0a42812614e4c15924d8d47ebe45bae5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsQIZa/RV7lqvxviVUE08O2stN8Nf\nhmm9DwtpR5X72ZL3d7b4KbliisNdsO9D9qifCkKBJhTkwVkk2NR+vkW65Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 369, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "302702020100022100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "044d056ab2ff57662fd6eebbe23930fef5cd08083e24146190cd01960b1fcd3749fe7ec5847651c857898be0f09efd6e0116a5dbe327f6f3080a65fc966bf64d91", + "wx" : "4d056ab2ff57662fd6eebbe23930fef5cd08083e24146190cd01960b1fcd3749", + "wy" : "00fe7ec5847651c857898be0f09efd6e0116a5dbe327f6f3080a65fc966bf64d91" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044d056ab2ff57662fd6eebbe23930fef5cd08083e24146190cd01960b1fcd3749fe7ec5847651c857898be0f09efd6e0116a5dbe327f6f3080a65fc966bf64d91", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETQVqsv9XZi/W7rviOTD+9c0ICD4k\nFGGQzQGWCx/NN0n+fsWEdlHIV4mL4PCe/W4BFqXb4yf28wgKZfyWa/ZNkQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 370, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "3032020d062522bbd3ecbe7c39e93e7c25022100ef9f6ba4d97c09d03178fa20b4aaad83be3cf9cb824a879fec3270fc4b81ef5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04361c4a62cd867613138dfe24ccebc4b7df1b55fc7410f4995ee2b6b9ab2220584f116c6c84e53d262fd13a5f5de6b57e7a1981de4ecdffdf3323b4e91d80649c", + "wx" : "361c4a62cd867613138dfe24ccebc4b7df1b55fc7410f4995ee2b6b9ab222058", + "wy" : "4f116c6c84e53d262fd13a5f5de6b57e7a1981de4ecdffdf3323b4e91d80649c" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004361c4a62cd867613138dfe24ccebc4b7df1b55fc7410f4995ee2b6b9ab2220584f116c6c84e53d262fd13a5f5de6b57e7a1981de4ecdffdf3323b4e91d80649c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAENhxKYs2GdhMTjf4kzOvEt98bVfx0\nEPSZXuK2uasiIFhPEWxshOU9Ji/ROl9d5rV+ehmB3k7N/98zI7TpHYBknA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 371, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "3045022100ffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc6324d50220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04db9d5c5113f00822a146c9cda2e75cb6634cd0dff54aff6e22875171f57a0dad1c424cdd83eb01c02f6f8d36f42c6dc7e39db74358da8ac9bc9dc5890d46f667", + "wx" : "00db9d5c5113f00822a146c9cda2e75cb6634cd0dff54aff6e22875171f57a0dad", + "wy" : "1c424cdd83eb01c02f6f8d36f42c6dc7e39db74358da8ac9bc9dc5890d46f667" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004db9d5c5113f00822a146c9cda2e75cb6634cd0dff54aff6e22875171f57a0dad1c424cdd83eb01c02f6f8d36f42c6dc7e39db74358da8ac9bc9dc5890d46f667", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE251cURPwCCKhRsnNoudctmNM0N/1\nSv9uIodRcfV6Da0cQkzdg+sBwC9vjTb0LG3H4523Q1jaism8ncWJDUb2Zw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 372, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "30250220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 373, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "30250220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0499f19f07b33e03caf4703e04b930d57d6d9baa44460c596a2d3064e0b63ea41286a74c4612a812ee348d2b43f80de627c11c75d81511e22a199c32119b792c6a", + "wx" : "0099f19f07b33e03caf4703e04b930d57d6d9baa44460c596a2d3064e0b63ea412", + "wy" : "0086a74c4612a812ee348d2b43f80de627c11c75d81511e22a199c32119b792c6a" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000499f19f07b33e03caf4703e04b930d57d6d9baa44460c596a2d3064e0b63ea41286a74c4612a812ee348d2b43f80de627c11c75d81511e22a199c32119b792c6a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEmfGfB7M+A8r0cD4EuTDVfW2bqkRG\nDFlqLTBk4LY+pBKGp0xGEqgS7jSNK0P4DeYnwRx12BUR4ioZnDIRm3ksag==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 374, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "304402207fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a80220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04313f3309b236484c6eb4ea381e007854467a617343a2e97d845801c01a632cfe33f231854bba89a8ca3f802a2764d3bf6c3233c811a31e5e8028a0b862cb1977", + "wx" : "313f3309b236484c6eb4ea381e007854467a617343a2e97d845801c01a632cfe", + "wy" : "33f231854bba89a8ca3f802a2764d3bf6c3233c811a31e5e8028a0b862cb1977" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004313f3309b236484c6eb4ea381e007854467a617343a2e97d845801c01a632cfe33f231854bba89a8ca3f802a2764d3bf6c3233c811a31e5e8028a0b862cb1977", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMT8zCbI2SExutOo4HgB4VEZ6YXND\noul9hFgBwBpjLP4z8jGFS7qJqMo/gConZNO/bDIzyBGjHl6AKKC4YssZdw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 375, + "comment" : "edge case for signature malleability", + "msg" : "313233343030", + "sig" : "304402207fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a902207fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04d3aa01fe59bad92cffe3db59e1385391fafd7af4e4ce462e8aac157274cc8a05c7a7e603e18538aac15f89610beacc21e39898e6c5f7680a81c5bd7bd744a989", + "wx" : "00d3aa01fe59bad92cffe3db59e1385391fafd7af4e4ce462e8aac157274cc8a05", + "wy" : "00c7a7e603e18538aac15f89610beacc21e39898e6c5f7680a81c5bd7bd744a989" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004d3aa01fe59bad92cffe3db59e1385391fafd7af4e4ce462e8aac157274cc8a05c7a7e603e18538aac15f89610beacc21e39898e6c5f7680a81c5bd7bd744a989", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE06oB/lm62Sz/49tZ4ThTkfr9evTk\nzkYuiqwVcnTMigXHp+YD4YU4qsFfiWEL6swh45iY5sX3aAqBxb1710SpiQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 376, + "comment" : "edge case for signature malleability", + "msg" : "313233343030", + "sig" : "304402207fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a902207fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192a9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "045e31eccd4704ebf7a4247ea57f9351abadff63679f2276e2a3b05009ebc1b8df648465a925010db823b2a5f3a6072343a6cc9961a9c482399d0d82051c2e3232", + "wx" : "5e31eccd4704ebf7a4247ea57f9351abadff63679f2276e2a3b05009ebc1b8df", + "wy" : "648465a925010db823b2a5f3a6072343a6cc9961a9c482399d0d82051c2e3232" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200045e31eccd4704ebf7a4247ea57f9351abadff63679f2276e2a3b05009ebc1b8df648465a925010db823b2a5f3a6072343a6cc9961a9c482399d0d82051c2e3232", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEXjHszUcE6/ekJH6lf5NRq63/Y2ef\nInbio7BQCevBuN9khGWpJQENuCOypfOmByNDpsyZYanEgjmdDYIFHC4yMg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 377, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04ce0a47f881fd7315a733c4317848fa33c72e38de0b8fda36b61aa9a164f5808a85b05d25115ea4097ddf63f878c8e83657e66de136a8f9e62ed81a58bf117ff9", + "wx" : "00ce0a47f881fd7315a733c4317848fa33c72e38de0b8fda36b61aa9a164f5808a", + "wy" : "0085b05d25115ea4097ddf63f878c8e83657e66de136a8f9e62ed81a58bf117ff9" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ce0a47f881fd7315a733c4317848fa33c72e38de0b8fda36b61aa9a164f5808a85b05d25115ea4097ddf63f878c8e83657e66de136a8f9e62ed81a58bf117ff9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzgpH+IH9cxWnM8QxeEj6M8cuON4L\nj9o2thqpoWT1gIqFsF0lEV6kCX3fY/h4yOg2V+Zt4Tao+eYu2BpYvxF/+Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 378, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "30450220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022100bc07ff031506dc74a75086a43252fb43731975a16dca6b025e867412d94222d0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04cd6f487b47f36c0dea8f4b04c4e6ac637c76b725929c611f48addcf3d2f65941b50ea8f3a491190ee0b20cfb6efd113608e7c7c127577500e7f5c4a4e490fd60", + "wx" : "00cd6f487b47f36c0dea8f4b04c4e6ac637c76b725929c611f48addcf3d2f65941", + "wy" : "00b50ea8f3a491190ee0b20cfb6efd113608e7c7c127577500e7f5c4a4e490fd60" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004cd6f487b47f36c0dea8f4b04c4e6ac637c76b725929c611f48addcf3d2f65941b50ea8f3a491190ee0b20cfb6efd113608e7c7c127577500e7f5c4a4e490fd60", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEzW9Ie0fzbA3qj0sExOasY3x2tyWS\nnGEfSK3c89L2WUG1DqjzpJEZDuCyDPtu/RE2COfHwSdXdQDn9cSk5JD9YA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 379, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c700220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04456e5f8067d68a1b0a2e8fe2b28acad5755687154a0f167734ebabbdc059070d720dbe96659a66ef0cf27a73e7b3f3f145a60e0ad29f1e21dcc2bb42f0d82c1e", + "wx" : "456e5f8067d68a1b0a2e8fe2b28acad5755687154a0f167734ebabbdc059070d", + "wy" : "720dbe96659a66ef0cf27a73e7b3f3f145a60e0ad29f1e21dcc2bb42f0d82c1e" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004456e5f8067d68a1b0a2e8fe2b28acad5755687154a0f167734ebabbdc059070d720dbe96659a66ef0cf27a73e7b3f3f145a60e0ad29f1e21dcc2bb42f0d82c1e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAERW5fgGfWihsKLo/isorK1XVWhxVK\nDxZ3NOurvcBZBw1yDb6WZZpm7wzyenPns/PxRaYOCtKfHiHcwrtC8NgsHg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 380, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "30450220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70022100aaaaaaaa00000000aaaaaaaaaaaaaaaa7def51c91a0fbf034d26872ca84218e1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0442bf0c0ac1e3850baf5515748a878e34249f71035e20a9f54ed468ec273cb0fc5b3138500230055c71f12d53f5c7d0e3d8aa54a94c668cb311e20d195fc71abb", + "wx" : "42bf0c0ac1e3850baf5515748a878e34249f71035e20a9f54ed468ec273cb0fc", + "wy" : "5b3138500230055c71f12d53f5c7d0e3d8aa54a94c668cb311e20d195fc71abb" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000442bf0c0ac1e3850baf5515748a878e34249f71035e20a9f54ed468ec273cb0fc5b3138500230055c71f12d53f5c7d0e3d8aa54a94c668cb311e20d195fc71abb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEQr8MCsHjhQuvVRV0ioeONCSfcQNe\nIKn1TtRo7Cc8sPxbMThQAjAFXHHxLVP1x9Dj2KpUqUxmjLMR4g0ZX8cauw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 381, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02206bfd55a8f8fdb68472e52873ef39ac3eace6d53df576f0ad2da4607bb52c0d46", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04ffdd48da63d3af67223f16c51eb7e95600eb0b0e8b964f4fcd8c534face3c2c2b4e009ab2a76829480e69c9e43b2f1fe076cfafb3fa8d27dd4d6bab4d6c3db54", + "wx" : "00ffdd48da63d3af67223f16c51eb7e95600eb0b0e8b964f4fcd8c534face3c2c2", + "wy" : "00b4e009ab2a76829480e69c9e43b2f1fe076cfafb3fa8d27dd4d6bab4d6c3db54" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004ffdd48da63d3af67223f16c51eb7e95600eb0b0e8b964f4fcd8c534face3c2c2b4e009ab2a76829480e69c9e43b2f1fe076cfafb3fa8d27dd4d6bab4d6c3db54", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE/91I2mPTr2ciPxbFHrfpVgDrCw6L\nlk9PzYxTT6zjwsK04AmrKnaClIDmnJ5DsvH+B2z6+z+o0n3U1rq01sPbVA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 382, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220654937791db0686f712ff9b453eeadb0026c9b058bba49199ca3e8fac03c094f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04793cbfce6f335dcfede7c6898ea1c537d7661ed6a8c9d308d64a2560d21c6e2c483d23a5ff05da00eaf9d52cf5362be9b53b95316c6a32e9ebe68d9ac35c2fd6", + "wx" : "793cbfce6f335dcfede7c6898ea1c537d7661ed6a8c9d308d64a2560d21c6e2c", + "wy" : "483d23a5ff05da00eaf9d52cf5362be9b53b95316c6a32e9ebe68d9ac35c2fd6" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004793cbfce6f335dcfede7c6898ea1c537d7661ed6a8c9d308d64a2560d21c6e2c483d23a5ff05da00eaf9d52cf5362be9b53b95316c6a32e9ebe68d9ac35c2fd6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEeTy/zm8zXc/t58aJjqHFN9dmHtao\nydMI1kolYNIcbixIPSOl/wXaAOr51Sz1NivptTuVMWxqMunr5o2aw1wv1g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 383, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100c51bbee23a95437abe5c978f8fe596a31c858ac8d55be9786aa5d36a5ac74e97", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04a9f7023f559d4bb6c9f4bc3643e2824aff5451d929479ec3ea5eb30bad2c36ac6a7c77e8dd21f4ad49b103e67da9d3cda62b653dd194fad2ba8d1dd37bb0ea9b", + "wx" : "00a9f7023f559d4bb6c9f4bc3643e2824aff5451d929479ec3ea5eb30bad2c36ac", + "wy" : "6a7c77e8dd21f4ad49b103e67da9d3cda62b653dd194fad2ba8d1dd37bb0ea9b" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a9f7023f559d4bb6c9f4bc3643e2824aff5451d929479ec3ea5eb30bad2c36ac6a7c77e8dd21f4ad49b103e67da9d3cda62b653dd194fad2ba8d1dd37bb0ea9b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqfcCP1WdS7bJ9Lw2Q+KCSv9UUdkp\nR57D6l6zC60sNqxqfHfo3SH0rUmxA+Z9qdPNpitlPdGU+tK6jR3Te7Dqmw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 384, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0221008ba4c3da7154ba564ab344ae12005aa482b6c1639ea191f8568afb6e47163c45", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04df79ee082b2fc77e9ce4633471f569bbcb5ce53856e3067774f37e8a64a2c7ffaa488a6c34d499df76f427de3609bfcfd9feae67ffe0b0de594463c453b0ab16", + "wx" : "00df79ee082b2fc77e9ce4633471f569bbcb5ce53856e3067774f37e8a64a2c7ff", + "wy" : "00aa488a6c34d499df76f427de3609bfcfd9feae67ffe0b0de594463c453b0ab16" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004df79ee082b2fc77e9ce4633471f569bbcb5ce53856e3067774f37e8a64a2c7ffaa488a6c34d499df76f427de3609bfcfd9feae67ffe0b0de594463c453b0ab16", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE33nuCCsvx36c5GM0cfVpu8tc5ThW\n4wZ3dPN+imSix/+qSIpsNNSZ33b0J942Cb/P2f6uZ//gsN5ZRGPEU7CrFg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 385, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02204c3dafcf4ba55bf1344ae12005aa4a74f46eaa85f5023131cc637ae2ea90ab26", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "044cc3bf65e32e00284adfca00f40df755415c485091ac0489ae9a337103a5f8f0123ab86dd433b933b4f2063c002144df3cfeba78dad0ed89c0377541532908c2", + "wx" : "4cc3bf65e32e00284adfca00f40df755415c485091ac0489ae9a337103a5f8f0", + "wy" : "123ab86dd433b933b4f2063c002144df3cfeba78dad0ed89c0377541532908c2" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044cc3bf65e32e00284adfca00f40df755415c485091ac0489ae9a337103a5f8f0123ab86dd433b933b4f2063c002144df3cfeba78dad0ed89c0377541532908c2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETMO/ZeMuAChK38oA9A33VUFcSFCR\nrASJrpozcQOl+PASOrht1DO5M7TyBjwAIUTfPP66eNrQ7YnAN3VBUykIwg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 386, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100987b5f9e974ab7e26895c2400b5494e9e8dd550bea04626398c6f5c5d521564c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04264a7ad439a4828a9dc97ecf837155355f99ae0b65975f851b541ad3a0e032f067268b7298c73e581866fbcbd161689b16b81cf262e007ce68e25a28c83ef041", + "wx" : "264a7ad439a4828a9dc97ecf837155355f99ae0b65975f851b541ad3a0e032f0", + "wy" : "67268b7298c73e581866fbcbd161689b16b81cf262e007ce68e25a28c83ef041" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004264a7ad439a4828a9dc97ecf837155355f99ae0b65975f851b541ad3a0e032f067268b7298c73e581866fbcbd161689b16b81cf262e007ce68e25a28c83ef041", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJkp61DmkgoqdyX7Pg3FVNV+Zrgtl\nl1+FG1Qa06DgMvBnJotymMc+WBhm+8vRYWibFrgc8mLgB85o4looyD7wQQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 387, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100fcf97e2fbf0e80d412005aa4a75086a3f004f59d512cb47271798733ab418606", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "041d7ff4d3a41206c8143635f12876e0ea0875ea5e4a5a249250d0eda33daa211f56e89c0beaf910ac934ca12380455600d0fd85b56a7035cb171b3f1c72a15569", + "wx" : "1d7ff4d3a41206c8143635f12876e0ea0875ea5e4a5a249250d0eda33daa211f", + "wy" : "56e89c0beaf910ac934ca12380455600d0fd85b56a7035cb171b3f1c72a15569" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200041d7ff4d3a41206c8143635f12876e0ea0875ea5e4a5a249250d0eda33daa211f56e89c0beaf910ac934ca12380455600d0fd85b56a7035cb171b3f1c72a15569", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHX/006QSBsgUNjXxKHbg6gh16l5K\nWiSSUNDtoz2qIR9W6JwL6vkQrJNMoSOARVYA0P2FtWpwNcsXGz8ccqFVaQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 388, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022079d482b60864d6c5cb4fd5db9e7e28ccd9a5948c316c8740fb429c0f37169a02", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04b09685f338dceb421778a1458d52bed734c236242da2baa280d6f6b7b86e4f117fe6a34146b422d7aebd1a51b20948d7872a514c4cfd7686dc436b70733d6473", + "wx" : "00b09685f338dceb421778a1458d52bed734c236242da2baa280d6f6b7b86e4f11", + "wy" : "7fe6a34146b422d7aebd1a51b20948d7872a514c4cfd7686dc436b70733d6473" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b09685f338dceb421778a1458d52bed734c236242da2baa280d6f6b7b86e4f117fe6a34146b422d7aebd1a51b20948d7872a514c4cfd7686dc436b70733d6473", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsJaF8zjc60IXeKFFjVK+1zTCNiQt\norqigNb2t7huTxF/5qNBRrQi1669GlGyCUjXhypRTEz9dobcQ2twcz1kcw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 389, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0221008ecd11081a4d0759c14f7bf46813d52cc6738115321be0a4da78a3356bb71510", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04dd811f2c0f5e9d4fbb2ef31818c1cd807247bc14fcd1170bef00e2c71dc037b443a15cdf8f3fbdc87e06250c0720d261d2b8d087fa7bf9548f6293f0ce5ae899", + "wx" : "00dd811f2c0f5e9d4fbb2ef31818c1cd807247bc14fcd1170bef00e2c71dc037b4", + "wy" : "43a15cdf8f3fbdc87e06250c0720d261d2b8d087fa7bf9548f6293f0ce5ae899" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004dd811f2c0f5e9d4fbb2ef31818c1cd807247bc14fcd1170bef00e2c71dc037b443a15cdf8f3fbdc87e06250c0720d261d2b8d087fa7bf9548f6293f0ce5ae899", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE3YEfLA9enU+7LvMYGMHNgHJHvBT8\n0RcL7wDixx3AN7RDoVzfjz+9yH4GJQwHINJh0rjQh/p7+VSPYpPwzlromQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 390, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100e8dbffed13c9a2093085c079714f11f24eb583d73ba2b416b3169183e7d9b4c2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0469d60ae1f39e1da95809d408894707ad2134f4943a1db089bebf815a391f18db32b401d98bf894d3b6d59e6eb45573285642e358ad687b7d7bf9600b1987809e", + "wx" : "69d60ae1f39e1da95809d408894707ad2134f4943a1db089bebf815a391f18db", + "wy" : "32b401d98bf894d3b6d59e6eb45573285642e358ad687b7d7bf9600b1987809e" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000469d60ae1f39e1da95809d408894707ad2134f4943a1db089bebf815a391f18db32b401d98bf894d3b6d59e6eb45573285642e358ad687b7d7bf9600b1987809e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEadYK4fOeHalYCdQIiUcHrSE09JQ6\nHbCJvr+BWjkfGNsytAHZi/iU07bVnm60VXMoVkLjWK1oe317+WALGYeAng==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 391, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100ca01552a838124bec68d6bc6086329e06673900eac5c262e5ce79a8521cd1eae", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04a658553a0620c95e987b5c3163bcfea68c52065f53c9d553f2a924d8b3ed511f79f0dfec4536b65aa5fb31297e96f6b464aa669b9268b3156c43d4612978a577", + "wx" : "00a658553a0620c95e987b5c3163bcfea68c52065f53c9d553f2a924d8b3ed511f", + "wy" : "79f0dfec4536b65aa5fb31297e96f6b464aa669b9268b3156c43d4612978a577" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a658553a0620c95e987b5c3163bcfea68c52065f53c9d553f2a924d8b3ed511f79f0dfec4536b65aa5fb31297e96f6b464aa669b9268b3156c43d4612978a577", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEplhVOgYgyV6Ye1wxY7z+poxSBl9T\nydVT8qkk2LPtUR958N/sRTa2WqX7MSl+lva0ZKpmm5JosxVsQ9RhKXildw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 392, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0221009402aa560702497c8d1ad78c10c653c11000256fb1a0add7c6156a474737180b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04bc4d3354a6a973dd8088919cc181194e879ed7920db30d0d1278edf74413b7b92450d162b26dcb25fbbd53ea4044189981d737055925bd2e86bfb0374b09f3ca", + "wx" : "00bc4d3354a6a973dd8088919cc181194e879ed7920db30d0d1278edf74413b7b9", + "wy" : "2450d162b26dcb25fbbd53ea4044189981d737055925bd2e86bfb0374b09f3ca" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004bc4d3354a6a973dd8088919cc181194e879ed7920db30d0d1278edf74413b7b92450d162b26dcb25fbbd53ea4044189981d737055925bd2e86bfb0374b09f3ca", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEvE0zVKapc92AiJGcwYEZToee15IN\nsw0NEnjt90QTt7kkUNFism3LJfu9U+pARBiZgdc3BVklvS6Gv7A3Swnzyg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 393, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02205e03ff818a836e3a53a8435219297da1b98cbad0b6e535812f433a096ca11168", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "040eb628724fce764c687d874ade7b8e0aa4abf20ee6e3610fac9fe3e72f97ab5aed09f4843660eb1daf015d397a7c1073d7ae43bda0ba3e117008785abfffa00f", + "wx" : "0eb628724fce764c687d874ade7b8e0aa4abf20ee6e3610fac9fe3e72f97ab5a", + "wy" : "00ed09f4843660eb1daf015d397a7c1073d7ae43bda0ba3e117008785abfffa00f" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040eb628724fce764c687d874ade7b8e0aa4abf20ee6e3610fac9fe3e72f97ab5aed09f4843660eb1daf015d397a7c1073d7ae43bda0ba3e117008785abfffa00f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEDrYock/OdkxofYdK3nuOCqSr8g7m\n42EPrJ/j5y+Xq1rtCfSENmDrHa8BXTl6fBBz165DvaC6PhFwCHhav/+gDw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 394, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100e28ddf709d4aa1bddf2e4bc7c7f2cb516cb642bb3e39c3feaf2fcf16ab9539f4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04e7ac5cc7f296912f703f59fe88e49b521da245e12e6eee161ee6b3b1127611a77b3bedd2a773cf58b0629b936dd85dad2d0c39676306ed63e1a9bcd0e08bccc2", + "wx" : "00e7ac5cc7f296912f703f59fe88e49b521da245e12e6eee161ee6b3b1127611a7", + "wy" : "7b3bedd2a773cf58b0629b936dd85dad2d0c39676306ed63e1a9bcd0e08bccc2" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004e7ac5cc7f296912f703f59fe88e49b521da245e12e6eee161ee6b3b1127611a77b3bedd2a773cf58b0629b936dd85dad2d0c39676306ed63e1a9bcd0e08bccc2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE56xcx/KWkS9wP1n+iOSbUh2iReEu\nbu4WHuazsRJ2Ead7O+3Sp3PPWLBim5Nt2F2tLQw5Z2MG7WPhqbzQ4IvMwg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 395, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02207fffffffaaaaaaaaffffffffffffffffe9a2538f37b28a2c513dee40fecbb71a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "042407b60abf3ee5edaf92ed505a11d0ddce0ea33eca58a031bb2f162c512f4062fb81bff36bf967e834e3d5d468730dcd70440022ab60061a62fac53350fe259f", + "wx" : "2407b60abf3ee5edaf92ed505a11d0ddce0ea33eca58a031bb2f162c512f4062", + "wy" : "00fb81bff36bf967e834e3d5d468730dcd70440022ab60061a62fac53350fe259f" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042407b60abf3ee5edaf92ed505a11d0ddce0ea33eca58a031bb2f162c512f4062fb81bff36bf967e834e3d5d468730dcd70440022ab60061a62fac53350fe259f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEJAe2Cr8+5e2vku1QWhHQ3c4Ooz7K\nWKAxuy8WLFEvQGL7gb/za/ln6DTj1dRocw3NcEQAIqtgBhpi+sUzUP4lnw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 396, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100b62f26b5f2a2b26f6de86d42ad8a13da3ab3cccd0459b201de009e526adf21f2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0447b2ad96dfc2f23fe5926809f38042b2c801962bd7394cefbf4aacb2554b7b0bdf2b937a16a7d96a2a0682cd164428890208597f2cdcc734fda73600b5cf6c59", + "wx" : "47b2ad96dfc2f23fe5926809f38042b2c801962bd7394cefbf4aacb2554b7b0b", + "wy" : "00df2b937a16a7d96a2a0682cd164428890208597f2cdcc734fda73600b5cf6c59" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000447b2ad96dfc2f23fe5926809f38042b2c801962bd7394cefbf4aacb2554b7b0bdf2b937a16a7d96a2a0682cd164428890208597f2cdcc734fda73600b5cf6c59", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAER7Ktlt/C8j/lkmgJ84BCssgBlivX\nOUzvv0qsslVLewvfK5N6FqfZaioGgs0WRCiJAghZfyzcxzT9pzYAtc9sWQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 397, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bb1d9ac949dd748cd02bbbe749bd351cd57b38bb61403d700686aa7b4c90851e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0469a65b75f31ae7b4930292f90902461befcee5d1606939c28e01b652a7fbc498cf68619e5860128f56cecf53eba2ffe82889a9bb04a5fa4c8b722bc91d55978a", + "wx" : "69a65b75f31ae7b4930292f90902461befcee5d1606939c28e01b652a7fbc498", + "wy" : "00cf68619e5860128f56cecf53eba2ffe82889a9bb04a5fa4c8b722bc91d55978a" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000469a65b75f31ae7b4930292f90902461befcee5d1606939c28e01b652a7fbc498cf68619e5860128f56cecf53eba2ffe82889a9bb04a5fa4c8b722bc91d55978a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaaZbdfMa57STApL5CQJGG+/O5dFg\naTnCjgG2Uqf7xJjPaGGeWGASj1bOz1Prov/oKImpuwSl+kyLcivJHVWXig==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 398, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022066755a00638cdaec1c732513ca0234ece52545dac11f816e818f725b4f60aaf2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04b2037176c84db04a6c773e32f9ed1d6b25ef4c303c6725c6932ec2cc2788bcbb9361505e6b771691adb41598f292d6521722404bf183241b195738b77abd6cfe", + "wx" : "00b2037176c84db04a6c773e32f9ed1d6b25ef4c303c6725c6932ec2cc2788bcbb", + "wy" : "009361505e6b771691adb41598f292d6521722404bf183241b195738b77abd6cfe" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b2037176c84db04a6c773e32f9ed1d6b25ef4c303c6725c6932ec2cc2788bcbb9361505e6b771691adb41598f292d6521722404bf183241b195738b77abd6cfe", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEsgNxdshNsEpsdz4y+e0dayXvTDA8\nZyXGky7CzCeIvLuTYVBea3cWka20FZjyktZSFyJAS/GDJBsZVzi3er1s/g==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 399, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022055a00c9fcdaebb6032513ca0234ecfffe98ebe492fdf02e48ca48e982beb3669", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "041eef95aef71f793afd50bb2604064d63e88bef7404a4d0e206446245ae2e7834c96e86dd040f9794b63712d90e719576b8b92c406ab0f288ad9b327bd124454f", + "wx" : "1eef95aef71f793afd50bb2604064d63e88bef7404a4d0e206446245ae2e7834", + "wy" : "00c96e86dd040f9794b63712d90e719576b8b92c406ab0f288ad9b327bd124454f" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200041eef95aef71f793afd50bb2604064d63e88bef7404a4d0e206446245ae2e7834c96e86dd040f9794b63712d90e719576b8b92c406ab0f288ad9b327bd124454f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHu+VrvcfeTr9ULsmBAZNY+iL73QE\npNDiBkRiRa4ueDTJbobdBA+XlLY3EtkOcZV2uLksQGqw8oitmzJ70SRFTw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 400, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100ab40193f9b5d76c064a27940469d9fffd31d7c925fbe05c919491d3057d66cd2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04a9734899c954e5b7adbca8f783428b5fbcbdfd3d2813f8d2f95b31a78ab107567667abf8c02ce4951bc59b2564130c27d7b64cdbc5cad95ca42d5bbb7cd4e793", + "wx" : "00a9734899c954e5b7adbca8f783428b5fbcbdfd3d2813f8d2f95b31a78ab10756", + "wy" : "7667abf8c02ce4951bc59b2564130c27d7b64cdbc5cad95ca42d5bbb7cd4e793" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004a9734899c954e5b7adbca8f783428b5fbcbdfd3d2813f8d2f95b31a78ab107567667abf8c02ce4951bc59b2564130c27d7b64cdbc5cad95ca42d5bbb7cd4e793", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqXNImclU5betvKj3g0KLX7y9/T0o\nE/jS+Vsxp4qxB1Z2Z6v4wCzklRvFmyVkEwwn17ZM28XK2VykLVu7fNTnkw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 401, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100ca0234ebb5fdcb13ca0234ecffffffffcb0dadbbc7f549f8a26b4408d0dc8600", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "041ae51662331a1dbfab0751d30dfab2273a04a239e055a537b16ab595f9612396434f21c2bfe6555c9fc4a8e82dab1fa5631881b016e0831d9e1bbf5799fcf32e", + "wx" : "1ae51662331a1dbfab0751d30dfab2273a04a239e055a537b16ab595f9612396", + "wy" : "434f21c2bfe6555c9fc4a8e82dab1fa5631881b016e0831d9e1bbf5799fcf32e" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200041ae51662331a1dbfab0751d30dfab2273a04a239e055a537b16ab595f9612396434f21c2bfe6555c9fc4a8e82dab1fa5631881b016e0831d9e1bbf5799fcf32e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEGuUWYjMaHb+rB1HTDfqyJzoEojng\nVaU3sWq1lflhI5ZDTyHCv+ZVXJ/EqOgtqx+lYxiBsBbggx2eG79XmfzzLg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 402, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff3ea3677e082b9310572620ae19933a9e65b285598711c77298815ad3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0453c90cdd8b0dadd21c44ad557b327f4dbf57144aaf06597deb3f94125206a6c14603475bd79b30e36340cd09b0b59e6cd46ce90150e9ffe5c8a0172b2c9898e3", + "wx" : "53c90cdd8b0dadd21c44ad557b327f4dbf57144aaf06597deb3f94125206a6c1", + "wy" : "4603475bd79b30e36340cd09b0b59e6cd46ce90150e9ffe5c8a0172b2c9898e3" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000453c90cdd8b0dadd21c44ad557b327f4dbf57144aaf06597deb3f94125206a6c14603475bd79b30e36340cd09b0b59e6cd46ce90150e9ffe5c8a0172b2c9898e3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEU8kM3YsNrdIcRK1VezJ/Tb9XFEqv\nBll96z+UElIGpsFGA0db15sw42NAzQmwtZ5s1GzpAVDp/+XIoBcrLJiY4w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 403, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0220266666663bbbbbbbe6666666666666665b37902e023fab7c8f055d86e5cc41f4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0433797539515c51f429967b8e36930d9fdda1edb13aecec9771f7cde5f6f2e74eba51d0b6456bb902dba1f3ea436f96ad2355da454dc9b32c503c4bc6cfd6d410", + "wx" : "33797539515c51f429967b8e36930d9fdda1edb13aecec9771f7cde5f6f2e74e", + "wy" : "00ba51d0b6456bb902dba1f3ea436f96ad2355da454dc9b32c503c4bc6cfd6d410" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000433797539515c51f429967b8e36930d9fdda1edb13aecec9771f7cde5f6f2e74eba51d0b6456bb902dba1f3ea436f96ad2355da454dc9b32c503c4bc6cfd6d410", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEM3l1OVFcUfQplnuONpMNn92h7bE6\n7OyXcffN5fby5066UdC2RWu5Atuh8+pDb5atI1XaRU3JsyxQPEvGz9bUEA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 404, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff36db6db7a492492492492492146c573f4c6dfc8d08a443e258970b09", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "040a8f5f1d5bbd2783fa7f37c86879057fb2fcf25383aafb86d03d6bafb41a17b3eaf6da715fe950349fd5736117b08e15e32cf1d2fdc003e510009f1b4ba1e648", + "wx" : "0a8f5f1d5bbd2783fa7f37c86879057fb2fcf25383aafb86d03d6bafb41a17b3", + "wy" : "00eaf6da715fe950349fd5736117b08e15e32cf1d2fdc003e510009f1b4ba1e648" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040a8f5f1d5bbd2783fa7f37c86879057fb2fcf25383aafb86d03d6bafb41a17b3eaf6da715fe950349fd5736117b08e15e32cf1d2fdc003e510009f1b4ba1e648", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECo9fHVu9J4P6fzfIaHkFf7L88lOD\nqvuG0D1rr7QaF7Pq9tpxX+lQNJ/Vc2EXsI4V4yzx0v3AA+UQAJ8bS6HmSA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 405, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304502207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd022100bfffffff2aaaaaab7fffffffffffffffc815d0e60b3e596ecb1ad3a27cfd49c4", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "041dbc94e96c056b9d2cb6773bb24b69ed473851badf927a29955aff290ef3675a65e587561122aa8226facb95df08308cadf01c8351a1569176d917821113aa7c", + "wx" : "1dbc94e96c056b9d2cb6773bb24b69ed473851badf927a29955aff290ef3675a", + "wy" : "65e587561122aa8226facb95df08308cadf01c8351a1569176d917821113aa7c" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200041dbc94e96c056b9d2cb6773bb24b69ed473851badf927a29955aff290ef3675a65e587561122aa8226facb95df08308cadf01c8351a1569176d917821113aa7c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEHbyU6WwFa50stnc7sktp7Uc4Ubrf\nknoplVr/KQ7zZ1pl5YdWESKqgib6y5XfCDCMrfAcg1GhVpF22ReCEROqfA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 406, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02207fffffff55555555ffffffffffffffffd344a71e6f651458a27bdc81fd976e37", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04084ab885dbff7f12e6cdadb59d456e500797779425c7518c259c83718289e6e991c345d3a093e86670605bbc2ff4c69d0ed694fd433ec6b6ba1bf7d56c3e6b51", + "wx" : "084ab885dbff7f12e6cdadb59d456e500797779425c7518c259c83718289e6e9", + "wy" : "0091c345d3a093e86670605bbc2ff4c69d0ed694fd433ec6b6ba1bf7d56c3e6b51" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004084ab885dbff7f12e6cdadb59d456e500797779425c7518c259c83718289e6e991c345d3a093e86670605bbc2ff4c69d0ed694fd433ec6b6ba1bf7d56c3e6b51", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAECEq4hdv/fxLmza21nUVuUAeXd5Ql\nx1GMJZyDcYKJ5umRw0XToJPoZnBgW7wv9MadDtaU/UM+xra6G/fVbD5rUQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 407, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02203fffffff800000007fffffffffffffffde737d56d38bcf4279dce5617e3192aa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04003adfa4c620a207096cd18ee8fd2a90e20106cf824a0c63d6dec727a9fe7f509430d26bdd5f71e819d12b70069901461ae083cc809122d4fb86b5c475244e5a", + "wx" : "3adfa4c620a207096cd18ee8fd2a90e20106cf824a0c63d6dec727a9fe7f50", + "wy" : "009430d26bdd5f71e819d12b70069901461ae083cc809122d4fb86b5c475244e5a" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004003adfa4c620a207096cd18ee8fd2a90e20106cf824a0c63d6dec727a9fe7f509430d26bdd5f71e819d12b70069901461ae083cc809122d4fb86b5c475244e5a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEADrfpMYgogcJbNGO6P0qkOIBBs+C\nSgxj1t7HJ6n+f1CUMNJr3V9x6BnRK3AGmQFGGuCDzICRItT7hrXEdSROWg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 408, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "304402207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02205d8ecd64a4eeba466815ddf3a4de9a8e6abd9c5db0a01eb80343553da648428f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "047c98b2d47eb433c0d18e533cfbc8909d66f7b79d5925ccb17eccec9d105c58848d5ca99b350bd7d10ab5ee6fcfe46623fdc03e9f828158f4d4cc08ad1ff83de4", + "wx" : "7c98b2d47eb433c0d18e533cfbc8909d66f7b79d5925ccb17eccec9d105c5884", + "wy" : "008d5ca99b350bd7d10ab5ee6fcfe46623fdc03e9f828158f4d4cc08ad1ff83de4" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047c98b2d47eb433c0d18e533cfbc8909d66f7b79d5925ccb17eccec9d105c58848d5ca99b350bd7d10ab5ee6fcfe46623fdc03e9f828158f4d4cc08ad1ff83de4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfJiy1H60M8DRjlM8+8iQnWb3t51Z\nJcyxfszsnRBcWISNXKmbNQvX0Qq17m/P5GYj/cA+n4KBWPTUzAitH/g95A==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 409, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "304502206f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569022100b4cfa1996ec1d24cdbc8fa17fcabc3a5d4b2b36cf4b50a7b775ab78785710746", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "047c98b2d47eb433c0d18e533cfbc8909d66f7b79d5925ccb17eccec9d105c588472a35663caf4282ff54a1190301b99dc023fc1617d7ea70b2b33f752e007c21b", + "wx" : "7c98b2d47eb433c0d18e533cfbc8909d66f7b79d5925ccb17eccec9d105c5884", + "wy" : "72a35663caf4282ff54a1190301b99dc023fc1617d7ea70b2b33f752e007c21b" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200047c98b2d47eb433c0d18e533cfbc8909d66f7b79d5925ccb17eccec9d105c588472a35663caf4282ff54a1190301b99dc023fc1617d7ea70b2b33f752e007c21b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfJiy1H60M8DRjlM8+8iQnWb3t51Z\nJcyxfszsnRBcWIRyo1ZjyvQoL/VKEZAwG5ncAj/BYX1+pwsrM/dS4AfCGw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 410, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "304502206f2347cab7dd76858fe0555ac3bc99048c4aacafdfb6bcbe05ea6c42c4934569022100b4cfa1996ec1d24cdbc8fa17fcabc3a5d4b2b36cf4b50a7b775ab78785710746", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04b7a90e21e7547d73267940033cea05042c50f7c9fa5eaeb471cd6260c685f2e38bb7309d0c3bab249faaf3e44179d6dd5302375c580fd0570a788c6be3680c67", + "wx" : "00b7a90e21e7547d73267940033cea05042c50f7c9fa5eaeb471cd6260c685f2e3", + "wy" : "008bb7309d0c3bab249faaf3e44179d6dd5302375c580fd0570a788c6be3680c67" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004b7a90e21e7547d73267940033cea05042c50f7c9fa5eaeb471cd6260c685f2e38bb7309d0c3bab249faaf3e44179d6dd5302375c580fd0570a788c6be3680c67", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEt6kOIedUfXMmeUADPOoFBCxQ98n6\nXq60cc1iYMaF8uOLtzCdDDurJJ+q8+RBedbdUwI3XFgP0FcKeIxr42gMZw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 411, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "30250201010220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "041550a173373b2d594374f0642cd73de06a045c09c7a4f388c731e8cd8971adfc9a3a9843583a86c0e1c62cbde67165f40a926b1028ba38aa3895e188ebbc7066", + "wx" : "1550a173373b2d594374f0642cd73de06a045c09c7a4f388c731e8cd8971adfc", + "wy" : "009a3a9843583a86c0e1c62cbde67165f40a926b1028ba38aa3895e188ebbc7066" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200041550a173373b2d594374f0642cd73de06a045c09c7a4f388c731e8cd8971adfc9a3a9843583a86c0e1c62cbde67165f40a926b1028ba38aa3895e188ebbc7066", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEFVChczc7LVlDdPBkLNc94GoEXAnH\npPOIxzHozYlxrfyaOphDWDqGwOHGLL3mcWX0CpJrECi6OKo4leGI67xwZg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 412, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3045022101000000000000000000000000000000000000000000000000000000000000000002203333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04313447778195daa1791a6530cd0697ae34bf9d8d225984394f72eef3505971110996a8fbdd1a70ecd64cb00b595afe1669bfef80d91756a62d84c1d83e0f22ab", + "wx" : "313447778195daa1791a6530cd0697ae34bf9d8d225984394f72eef350597111", + "wy" : "0996a8fbdd1a70ecd64cb00b595afe1669bfef80d91756a62d84c1d83e0f22ab" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004313447778195daa1791a6530cd0697ae34bf9d8d225984394f72eef3505971110996a8fbdd1a70ecd64cb00b595afe1669bfef80d91756a62d84c1d83e0f22ab", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEMTRHd4GV2qF5GmUwzQaXrjS/nY0i\nWYQ5T3Lu81BZcREJlqj73Rpw7NZMsAtZWv4Wab/vgNkXVqYthMHYPg8iqw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 413, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "30440220555555550000000055555555555555553ef7a8e48d07df81a693439654210c7002203333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aa9", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "044ada634941476ca63c2c5803eec2f33b2d17920f798a5be6275f5a54cd2e7639b1a04bead5c7314c427492db21b9544d81caa8159587e41aa023aa967f31aaa1", + "wx" : "4ada634941476ca63c2c5803eec2f33b2d17920f798a5be6275f5a54cd2e7639", + "wy" : "00b1a04bead5c7314c427492db21b9544d81caa8159587e41aa023aa967f31aaa1" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044ada634941476ca63c2c5803eec2f33b2d17920f798a5be6275f5a54cd2e7639b1a04bead5c7314c427492db21b9544d81caa8159587e41aa023aa967f31aaa1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEStpjSUFHbKY8LFgD7sLzOy0Xkg95\nilvmJ19aVM0udjmxoEvq1ccxTEJ0ktshuVRNgcqoFZWH5BqgI6qWfzGqoQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 414, + "comment" : "extreme value for k and edgecase s", + "msg" : "313233343030", + "sig" : "304402207cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc476699780220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04aacce093270fa59ad412b5459a08e490743b97086c781ac3c8d54030b41a31193bece4956172d56befb7011d684e772905e48d2115444a75ac7a325a3f25f4b1", + "wx" : "00aacce093270fa59ad412b5459a08e490743b97086c781ac3c8d54030b41a3119", + "wy" : "3bece4956172d56befb7011d684e772905e48d2115444a75ac7a325a3f25f4b1" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004aacce093270fa59ad412b5459a08e490743b97086c781ac3c8d54030b41a31193bece4956172d56befb7011d684e772905e48d2115444a75ac7a325a3f25f4b1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEqszgkycPpZrUErVFmgjkkHQ7lwhs\neBrDyNVAMLQaMRk77OSVYXLVa++3AR1oTncpBeSNIRVESnWsejJaPyX0sQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 415, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "304502207cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978022100b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63cc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04f62b8d7feeff5a847ab79212269e55e62fa87ebe930821747b57a511a5ea99f0439ee057bb27898582a683c3fdb7f95404d41d42f276803751a316eb3aab7ebf", + "wx" : "00f62b8d7feeff5a847ab79212269e55e62fa87ebe930821747b57a511a5ea99f0", + "wy" : "439ee057bb27898582a683c3fdb7f95404d41d42f276803751a316eb3aab7ebf" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f62b8d7feeff5a847ab79212269e55e62fa87ebe930821747b57a511a5ea99f0439ee057bb27898582a683c3fdb7f95404d41d42f276803751a316eb3aab7ebf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE9iuNf+7/WoR6t5ISJp5V5i+ofr6T\nCCF0e1elEaXqmfBDnuBXuyeJhYKmg8P9t/lUBNQdQvJ2gDdRoxbrOqt+vw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 416, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "304502207cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978022100cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "044baa07ff6e7bb9aa223d1c61932005fe98fe78b787fdab4bd3619bc8833072a2bcacd63802c56af82607953e72a0f5d3c23bd265544e020951824ea485555d33", + "wx" : "4baa07ff6e7bb9aa223d1c61932005fe98fe78b787fdab4bd3619bc8833072a2", + "wy" : "00bcacd63802c56af82607953e72a0f5d3c23bd265544e020951824ea485555d33" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044baa07ff6e7bb9aa223d1c61932005fe98fe78b787fdab4bd3619bc8833072a2bcacd63802c56af82607953e72a0f5d3c23bd265544e020951824ea485555d33", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAES6oH/257uaoiPRxhkyAF/pj+eLeH\n/atL02GbyIMwcqK8rNY4AsVq+CYHlT5yoPXTwjvSZVROAglRgk6khVVdMw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 417, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "304402207cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc4766997802203333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "040c753ed1ba92f766800fdd0ae1c0d7f8f4cd8305fd803d8bca881397b5937e2db568509b1faf3cf251de6db9810e8b8caed235da10eeddbed62775c8e5c9460a", + "wx" : "0c753ed1ba92f766800fdd0ae1c0d7f8f4cd8305fd803d8bca881397b5937e2d", + "wy" : "00b568509b1faf3cf251de6db9810e8b8caed235da10eeddbed62775c8e5c9460a" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200040c753ed1ba92f766800fdd0ae1c0d7f8f4cd8305fd803d8bca881397b5937e2db568509b1faf3cf251de6db9810e8b8caed235da10eeddbed62775c8e5c9460a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEDHU+0bqS92aAD90K4cDX+PTNgwX9\ngD2LyogTl7WTfi21aFCbH6888lHebbmBDouMrtI12hDu3b7WJ3XI5clGCg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 418, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "304402207cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978022049249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04030fdcae6541f22c5bab254e4f1a285c507d1cefea03bf90cf19daf3cb62df695ff2c94d588f2c2b2b0a12bebc011bcee4fa1b54506ec07d0a29d24a0891193c", + "wx" : "030fdcae6541f22c5bab254e4f1a285c507d1cefea03bf90cf19daf3cb62df69", + "wy" : "5ff2c94d588f2c2b2b0a12bebc011bcee4fa1b54506ec07d0a29d24a0891193c" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004030fdcae6541f22c5bab254e4f1a285c507d1cefea03bf90cf19daf3cb62df695ff2c94d588f2c2b2b0a12bebc011bcee4fa1b54506ec07d0a29d24a0891193c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAw/crmVB8ixbqyVOTxooXFB9HO/q\nA7+Qzxna88ti32lf8slNWI8sKysKEr68ARvO5PobVFBuwH0KKdJKCJEZPA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 419, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "304402207cf27b188d034f7e8a52380304b51ac3c08969e277f21b35a60b48fc47669978022016a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0403fc621eaf90c23d8f9fa125d2c59b8728ebccb30ca3e3db879a06ca90f20cdcae58d3f0c6aef0e805be10ea54e23cf6f0397f9addddc2b09088855316b0ef44", + "wx" : "03fc621eaf90c23d8f9fa125d2c59b8728ebccb30ca3e3db879a06ca90f20cdc", + "wy" : "00ae58d3f0c6aef0e805be10ea54e23cf6f0397f9addddc2b09088855316b0ef44" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000403fc621eaf90c23d8f9fa125d2c59b8728ebccb30ca3e3db879a06ca90f20cdcae58d3f0c6aef0e805be10ea54e23cf6f0397f9addddc2b09088855316b0ef44", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEA/xiHq+Qwj2Pn6El0sWbhyjrzLMM\no+Pbh5oGypDyDNyuWNPwxq7w6AW+EOpU4jz28Dl/mt3dwrCQiIVTFrDvRA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 420, + "comment" : "extreme value for k and edgecase s", + "msg" : "313233343030", + "sig" : "304402206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2960220555555550000000055555555555555553ef7a8e48d07df81a693439654210c70", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0470f2ce24dc62923bb09cc92d74329bbd0d2e6b0e354c0be2383d24acdccb9e4cd42d1f973466f5e5462a939084a294ebfc7a45629c70ee5def46de9536ea7bf7", + "wx" : "70f2ce24dc62923bb09cc92d74329bbd0d2e6b0e354c0be2383d24acdccb9e4c", + "wy" : "00d42d1f973466f5e5462a939084a294ebfc7a45629c70ee5def46de9536ea7bf7" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000470f2ce24dc62923bb09cc92d74329bbd0d2e6b0e354c0be2383d24acdccb9e4cd42d1f973466f5e5462a939084a294ebfc7a45629c70ee5def46de9536ea7bf7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEcPLOJNxikjuwnMktdDKbvQ0uaw41\nTAviOD0krNzLnkzULR+XNGb15UYqk5CEopTr/HpFYpxw7l3vRt6VNup79w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 421, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "304502206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296022100b6db6db6249249254924924924924924625bd7a09bec4ca81bcdd9f8fd6b63cc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04732b8ac0c30fe44307431235271cb5d6e5f677a19ce3f058b939a7bf19349d3c858cc735af8577468275847cf5ec19972e6c20738276e2708b23c595bfc4433d", + "wx" : "732b8ac0c30fe44307431235271cb5d6e5f677a19ce3f058b939a7bf19349d3c", + "wy" : "00858cc735af8577468275847cf5ec19972e6c20738276e2708b23c595bfc4433d" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004732b8ac0c30fe44307431235271cb5d6e5f677a19ce3f058b939a7bf19349d3c858cc735af8577468275847cf5ec19972e6c20738276e2708b23c595bfc4433d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEcyuKwMMP5EMHQxI1Jxy11uX2d6Gc\n4/BYuTmnvxk0nTyFjMc1r4V3RoJ1hHz17BmXLmwgc4J24nCLI8WVv8RDPQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 422, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "304502206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296022100cccccccc00000000cccccccccccccccc971f2ef152794b9d8fc7d568c9e8eaa7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0447aff9501825a166782bb58a5b459006eacdbce5e5323addad34ec1b6444cdce9199c31502ad4277c73ddd0c807b72634c45762404837d9814a5d4b5a7c3f398", + "wx" : "47aff9501825a166782bb58a5b459006eacdbce5e5323addad34ec1b6444cdce", + "wy" : "009199c31502ad4277c73ddd0c807b72634c45762404837d9814a5d4b5a7c3f398" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000447aff9501825a166782bb58a5b459006eacdbce5e5323addad34ec1b6444cdce9199c31502ad4277c73ddd0c807b72634c45762404837d9814a5d4b5a7c3f398", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAER6/5UBgloWZ4K7WKW0WQBurNvOXl\nMjrdrTTsG2REzc6RmcMVAq1Cd8c93QyAe3JjTEV2JASDfZgUpdS1p8PzmA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 423, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "304402206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c29602203333333300000000333333333333333325c7cbbc549e52e763f1f55a327a3aaa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04aed8eeff77644bf83b9222f8f57173fa8217ec7e0763ee7d7171fb6092fba5c06486a86d94f48834ba5adbaf349687f9cee400389642b828e68207b147ca2c46", + "wx" : "00aed8eeff77644bf83b9222f8f57173fa8217ec7e0763ee7d7171fb6092fba5c0", + "wy" : "6486a86d94f48834ba5adbaf349687f9cee400389642b828e68207b147ca2c46" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004aed8eeff77644bf83b9222f8f57173fa8217ec7e0763ee7d7171fb6092fba5c06486a86d94f48834ba5adbaf349687f9cee400389642b828e68207b147ca2c46", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAErtju/3dkS/g7kiL49XFz+oIX7H4H\nY+59cXH7YJL7pcBkhqhtlPSINLpa2680lof5zuQAOJZCuCjmggexR8osRg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 424, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "304402206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296022049249248db6db6dbb6db6db6db6db6db5a8b230d0b2b51dcd7ebf0c9fef7c185", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04f7c54a585a904300d05b53ef3b854e71999a344b89adc0caaa28e254db9bc7c7c161a79f38ff446051303577e40638fb020329940a63c241bb32c2205eb57b7d", + "wx" : "00f7c54a585a904300d05b53ef3b854e71999a344b89adc0caaa28e254db9bc7c7", + "wy" : "00c161a79f38ff446051303577e40638fb020329940a63c241bb32c2205eb57b7d" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004f7c54a585a904300d05b53ef3b854e71999a344b89adc0caaa28e254db9bc7c7c161a79f38ff446051303577e40638fb020329940a63c241bb32c2205eb57b7d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE98VKWFqQQwDQW1PvO4VOcZmaNEuJ\nrcDKqijiVNubx8fBYaefOP9EYFEwNXfkBjj7AgMplApjwkG7MsIgXrV7fQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 425, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "304402206b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296022016a4502e2781e11ac82cbc9d1edd8c981584d13e18411e2f6e0478c34416e3bb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "wx" : "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "wy" : "4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c2964fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaxfR8uEsQkf4vOblY6RA8ncDfYEt\n6zOg9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9Q==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 426, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3044022043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b0232102810220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 427, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3045022100bc07ff031506dc74a75086a43252fb43731975a16dca6b025e867412d94222d00220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", + "wx" : "6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296", + "wy" : "00b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200046b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296b01cbd1c01e58065711814b583f061e9d431cca994cea1313449bf97c840ae0a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEaxfR8uEsQkf4vOblY6RA8ncDfYEt\n6zOg9KE5RdiYwpawHL0cAeWAZXEYFLWD8GHp1DHMqZTOoTE0Sb+XyECuCg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 428, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3044022043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b0232102810220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 429, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3045022100bc07ff031506dc74a75086a43252fb43731975a16dca6b025e867412d94222d00220249249246db6db6ddb6db6db6db6db6dad4591868595a8ee6bf5f864ff7be0c2", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0404aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "wx" : "04aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad5", + "wy" : "0087d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000404aaec73635726f213fb8a9e64da3b8632e41495a944d0045b522eba7240fad587d9315798aaa3a5ba01775787ced05eaaf7b4e09fc81d6d1aa546e8365d525d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEBKrsc2NXJvIT+4qeZNo7hjLkFJWp\nRNAEW1IuunJA+tWH2TFXmKqjpboBd1eHztBeqve04J/IHW0apUboNl1SXQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 430, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "30440220093f3825c0cf820cced816a3a67446c85606a6d529e43857643fccc11e1f705f0220769782888c63058630f97a5891c8700e82979e4f233586bfc5042fa73cb70a4e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 431, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3046022100e8564e3e515a09f9f35258442b99e162d27e10975fcb7963d3c26319dc093f84022100c3af01ed0fd0148749ca323364846c862fc6f4beb682b7ead3b2d89b9da8bad4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 432, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "304502201412254f8c1dd2742a00ddee5192e7baa288741026871f3057ad9f983b5ab114022100bcdf878fa156f37040922698ad6fb6928601ddc26c40448ea660e67c25eda090", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 433, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30450221009e0676048381839bb0a4703a0ae38facfe1e2c61bd25950c896aa975cd6ec86902206ea0cedf96f11fff0e746941183492f4d17272c92449afd20e34041a6894ee82", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "044f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "wx" : "4f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000", + "wy" : "00ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200044f337ccfd67726a805e4f1600ae2849df3807eca117380239fbd816900000000ed9dea124cc8c396416411e988c30f427eb504af43a3146cd5df7ea60666d685", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAETzN8z9Z3JqgF5PFgCuKEnfOAfsoR\nc4Ajn72BaQAAAADtneoSTMjDlkFkEemIww9CfrUEr0OjFGzV336mBmbWhQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 434, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "30440220554482404173a5582884b0d168a32ef8033d7eb780936c390e8eedf720c7f56402200a15413f9ed0d454b92ab901119e7251a4d444ba1421ba639fa57e0d8cf6b313", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 435, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "304502200b1d838dd54a462745e2c8d5f32637f26fb16dde20a385e45f8a20a8a1f8370e022100ae855e0a10ef087075fda0ed84e2bc5786a681172ea9834e53351316df332bbd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 436, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3045022100af89e4f2b03e5d1f0352e258ef71493040c17d70c36cfd044128302df2ed5e4a0220420f04148c3e6f06561bd448362d6c6fa3f9aeeb7e42843b4674e7ddfd0ba901", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "wx" : "3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935", + "wy" : "0084fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f49726500493584fa174d791c72bf2ce3880a8960dd2a7c7a1338a82f85a9e59cdbde80000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPPA9YU2JOc/UmaB4c/rCgWGPBrj/\nh+gBXD9JcmUASTWE+hdNeRxyvyzjiAqJYN0qfHoTOKgvhanlnNvegAAAAA==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 437, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "304402206c1581f1485ccc4e657606fa1a38cf227e3870dc9f41e26b84e28483635e321b02201b3e3c22af23e919b30330f8710f6ef3760c0e2237a9a9f5cf30a1d9f5bbd464", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 438, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3045022100dc83bf97ca28db0e04104a16fe3de694311a6cd9f230a300504ae71d8ec755b1022064a83af0ab3e6037003a1f4240dffd8a342afdee50604ed1afa416fd009e4668", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 439, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "30450220575b70b4375684291b95d81e3c820ed9bde9e5b7343036e4951f3c46894a6d9d022100f10d716efbfeba953701b603fc9ef6ff6e47edef38c9eeef2d55e6486bc4d6e6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "wx" : "3cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f497265004935", + "wy" : "7b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200043cf03d614d8939cfd499a07873fac281618f06b8ff87e8015c3f4972650049357b05e8b186e38d41d31c77f5769f22d58385ecc857d07a561a6324217fffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEPPA9YU2JOc/UmaB4c/rCgWGPBrj/\nh+gBXD9JcmUASTV7BeixhuONQdMcd/V2nyLVg4XsyFfQelYaYyQhf////w==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 440, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "30450221008d4f113189dfd3d3239e331f76d3fca9cef86fcd5dc9b4ab2ca38aeba56c178b022078389c3cf11dcff6d6c7f5efd277d480060691144b568a6f090c8902557bfc61", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 441, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3046022100834d10ec2d2d50eeebfecd6328f03fafbb488fc043c362cbc67880ec0ebd04b302210094c026feaf6e68759146fe5b6fd52eaa3c3c5552d83719d2cb900615e2a634db", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 442, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "304502206894de495e7bb5566807d475d96a0d414a94f4f02c3ab7c2edc2916deafc1e1f022100a603642c20fabc07182867fcc6923d35be23ad3f97a5f93c6ec5b9cce8239569", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "042829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "wx" : "2829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffff", + "wy" : "00a01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d030107034200042829c31faa2e400e344ed94bca3fcd0545956ebcfe8ad0f6dfa5ff8effffffffa01aafaf000e52585855afa7676ade284113099052df57e7eb3bd37ebeb9222e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKCnDH6ouQA40TtlLyj/NBUWVbrz+\nitD236X/jv////+gGq+vAA5SWFhVr6dnat4oQRMJkFLfV+frO9N+vrkiLg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 443, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3046022100e500c086fedd59e090ce7bfb615751ed9abe4c09b839ee8f05320245b9796f3e022100807b1d0638c86ef6113fff0d63497800e1b848b5a303a54c748e45ca8f35d7d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 444, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3046022100b922c1abe1a8309c0acf90e586c6de8c33e37057673390a97ff098f71680b32b022100f86d92b051b7923d82555c205e21b54eab869766c716209648c3e6cc2629057d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 445, + "comment" : "x-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "3046022100823c37e46c74ec8497d89245fde3bf53ddb462c00d840e983dcb1b72bbf8bf27022100c4552f2425d14f0f0fa988778403d60a58962e7c548715af83b2edabbb24a49f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "wx" : "00fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f5", + "wy" : "5a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004fffffff948081e6a0458dd8f9e738f2665ff9059ad6aac0708318c4ca9a7a4f55a8abcba2dda8474311ee54149b973cae0c0fb89557ad0bf78e6529a1663bd73", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE////+UgIHmoEWN2PnnOPJmX/kFmt\naqwHCDGMTKmnpPVairy6LdqEdDEe5UFJuXPK4MD7iVV60L945lKaFmO9cw==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 446, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30450220577a08a95db6dcda9985109942d3786630f640190f920b95bd4d5d84e0f163ef022100d762286e92925973fd38b67ef944a99c0ec5b499b7175cbb4369e053c1fcbb10", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 447, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "304402207ba458cfe952326922c7aa2854bdc673ce3daaf65d464dfb9f700701503056b102200df8821c92d20546fa741fb426bf56728a53182691964225c9b380b56b22ee6d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 448, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "304402205cd60c3b021b4be116f06f1d447f65e458329a8bbae1d9b5977d18cf5618486102204c635cd7aa9aebb5716d5ae09e57f8c481a741a029b40f71ec47344ef883e86e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "0400000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "wx" : "03fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e", + "wy" : "1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d0301070342000400000003fa15f963949d5f03a6f5c7f86f9e0015eeb23aebbff1173937ba748e1099872070e8e87c555fa13659cca5d7fadcfcb0023ea889548ca48af2ba7e71", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEAAAAA/oV+WOUnV8DpvXH+G+eABXu\nsjrrv/EXOTe6dI4QmYcgcOjofFVfoTZZzKXX+tz8sAI+qIlUjKSK8rp+cQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 449, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304402204b50e1e8cf830e04c17e7472caf60da8150ffa568e2c64498cc972a379e542e502202e3adaa5afab89cca91693609555f40543578852cde29c21cb037c0c0b78478e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 450, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304402205aea930c7d8fffcd5c6df2c9430ef76f8b5ed58a8b9c95847288abf8f09a1ac202207ddfef7688a6053ce4eeeeefd6f1a9d71381b7548925f6682aa0a9d05cf5a3a3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 451, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "304602210098b092c2d14b5b14a23e9368e0ce1be744dfae9f9a5cdaba51e7872099df96f202210090d3e4f87bd7bc94589f8150b6b01045cd8759a00af78b24d7de771887610df5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "wx" : "00bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015", + "wy" : "1352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015000000001352bb4a0fa2ea4cceb9ab63dd684ade5a1127bcf300a698a7193bc2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEvLspFMefBF6qbsu8YSgWs75dLWeW\ncH2BJen4UcGK8BUAAAAAE1K7Sg+i6kzOuatj3WhK3loRJ7zzAKaYpxk7wg==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 452, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "30460221009e95f2856a9fff9a172b07817c8c60fe185cd3ce9582678f8cc4b02bc444621a022100c54ca51d8117d904f0d3773911cb2792348fae21c2da7dad25f990d122376e4c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 453, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3046022100e77df8f9782696344c33de29ebdc9f8d3fcf463d950cdbe256fd4fc2fd44877e02210087028850c962cf2fb450ffe6b983981e499dc498fbd654fa454c9e07c8cb5ca8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 454, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3045022100bd2dd6f5026d2b5ad7ead74bdf52b8cbcabc08facee0a1c8584658a85ed0c5dc02203e8543e819bdae47d872e29a85ba38addf3eaeaad8786d79c3fb027f6f1ff4bf", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp256r1", + "keySize" : 256, + "type" : "EcPublicKey", + "uncompressed" : "04bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "wx" : "00bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015", + "wy" : "00fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d" + }, + "keyDer" : "3059301306072a8648ce3d020106082a8648ce3d03010703420004bcbb2914c79f045eaa6ecbbc612816b3be5d2d6796707d8125e9f851c18af015fffffffeecad44b6f05d15b33146549c2297b522a5eed8430cff596758e6c43d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEvLspFMefBF6qbsu8YSgWs75dLWeW\ncH2BJen4UcGK8BX////+7K1EtvBdFbMxRlScIpe1IqXu2EMM/1lnWObEPQ==\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 455, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3045022100bd5c0294acc28c15c5d1ebc7274c9ca21a081c8a67da430a34a7fff1a564fabb02207ec103a2385b4ff38b47d306434e9091de24dc9f1a25967ee06f8a0a53ac0181", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 456, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "304402203c7dbfb43dd80379ee2c23ad5472873a22c8a0179ac8f381ad9e0f193231dc1f02207cf8e07530ade503b3d43a84b75a2a76fc40763daed4e9734e745c58c9ae72d3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 457, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3045022100b38ca4dac6d949be5e5f969860269f0eedff2eb92f45bfc02470300cc96dd52602201c7b22992bb13749cc0c5bc25330a17446e40db734203f9035172725fc70f863", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/tests/ecdsa_secp384r1_sha384_test.json b/tests/ecdsa_secp384r1_sha384_test.json new file mode 100644 index 00000000..66268a7c --- /dev/null +++ b/tests/ecdsa_secp384r1_sha384_test.json @@ -0,0 +1,4634 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.8r12", + "numberOfTests" : 408, + "header" : [ + "Test vectors of type EcdsaVerify are meant for the verification", + "of ASN encoded ECDSA signatures." + ], + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "schema" : "ecdsa_verify_schema.json", + "testGroups" : [ + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "042da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f", + "wx" : "2da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa", + "wy" : "4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200042da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAELaV92hCJJ2pUP5/9rAv/DZdsrXHrcoDn\n2b/Z/uS9svIPR/+IgnQ4l3LZjMV1ITiqS20FTWnc8+JexJ34cHFeNIg7GDYZfXb4\nrZYuePZXG7x0B7DWCR+eTYjwFCdEBhdP\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702301840da9fc1d2f8f8900cf485d5413b8c2574ee3a8d4ca03995ca30240e09513805bf6209b58ac7aa9cff54eecd82b9f1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "Legacy:ASN encoding of s misses leading 0", + "msg" : "313233343030", + "sig" : "3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70230e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 3, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 4, + "comment" : "long form encoding of length of sequence", + "msg" : "313233343030", + "sig" : "308165023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 5, + "comment" : "length of sequence contains leading 0", + "msg" : "313233343030", + "sig" : "30820065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 6, + "comment" : "wrong length of sequence", + "msg" : "313233343030", + "sig" : "3066023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "wrong length of sequence", + "msg" : "313233343030", + "sig" : "3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "uint32 overflow in length of sequence", + "msg" : "313233343030", + "sig" : "30850100000065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "uint64 overflow in length of sequence", + "msg" : "313233343030", + "sig" : "3089010000000000000065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "length of sequence = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "length of sequence = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length of sequence = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length of sequence = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "incorrect length of sequence", + "msg" : "313233343030", + "sig" : "30ff023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3065028012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7028000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "lonely sequence tag", + "msg" : "313233343030", + "sig" : "30", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "30670000023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "appending unused 0's to sequence", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "appending null value to sequence", + "msg" : "313233343030", + "sig" : "3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306a4981773065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306925003065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30673065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306a2235498177023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306922342500023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306d2232023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70004deadbeef023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306a023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72236498177023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d722352500023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306d023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72233023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306daa00bb00cd003065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306baa02aabb3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306d2238aa00bb00cd00023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306b2236aa02aabb023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306d023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72239aa00bb00cd00023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306b023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72237aa02aabb023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "truncated length of sequence", + "msg" : "313233343030", + "sig" : "3081", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30803065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30692280023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72280023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30803165023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30692280033012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d72280033100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "2e65023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "2f65023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "3165023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "3265023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "ff65023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "using composition for sequence", + "msg" : "313233343030", + "sig" : "306930010230643012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "30643012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 57, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f8200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f8205000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "3080023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "30673000023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f823000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "append garbage with high tag number", + "msg" : "313233343030", + "sig" : "3068023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82bf7f00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "30673065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "truncated sequence: removed last 1 elements", + "msg" : "313233343030", + "sig" : "3032023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "repeating element in sequence", + "msg" : "313233343030", + "sig" : "308198023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "long form encoding of length of integer", + "msg" : "313233343030", + "sig" : "306602813012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 69, + "comment" : "long form encoding of length of integer", + "msg" : "313233343030", + "sig" : "3066023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702813100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 70, + "comment" : "length of integer contains leading 0", + "msg" : "313233343030", + "sig" : "30670282003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 71, + "comment" : "length of integer contains leading 0", + "msg" : "313233343030", + "sig" : "3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70282003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 72, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "3065023112b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "3065022f12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023200e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "uint32 overflow in length of integer", + "msg" : "313233343030", + "sig" : "306a0285010000003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "uint32 overflow in length of integer", + "msg" : "313233343030", + "sig" : "306a023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70285010000003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "uint64 overflow in length of integer", + "msg" : "313233343030", + "sig" : "306e028901000000000000003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "uint64 overflow in length of integer", + "msg" : "313233343030", + "sig" : "306e023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7028901000000000000003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "length of integer = 2**31 - 1", + "msg" : "313233343030", + "sig" : "306902847fffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "length of integer = 2**31 - 1", + "msg" : "313233343030", + "sig" : "3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702847fffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "length of integer = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30690284ffffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "length of integer = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70284ffffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "length of integer = 2**40 - 1", + "msg" : "313233343030", + "sig" : "306a0285ffffffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "length of integer = 2**40 - 1", + "msg" : "313233343030", + "sig" : "306a023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70285ffffffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "length of integer = 2**64 - 1", + "msg" : "313233343030", + "sig" : "306d0288ffffffffffffffff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "length of integer = 2**64 - 1", + "msg" : "313233343030", + "sig" : "306d023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70288ffffffffffffffff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "incorrect length of integer", + "msg" : "313233343030", + "sig" : "306502ff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "incorrect length of integer", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702ff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "3033023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "lonely integer tag", + "msg" : "313233343030", + "sig" : "303402023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "lonely integer tag", + "msg" : "313233343030", + "sig" : "3033023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "3067023212b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023300e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "30670232000012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 96, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70233000000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 97, + "comment" : "appending unused 0's to integer", + "msg" : "313233343030", + "sig" : "3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70000023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "appending null value to integer", + "msg" : "313233343030", + "sig" : "3067023212b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70500023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "appending null value to integer", + "msg" : "313233343030", + "sig" : "3067023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023300e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f820500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "truncated length of integer", + "msg" : "313233343030", + "sig" : "30350281023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "truncated length of integer", + "msg" : "313233343030", + "sig" : "3034023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70281", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "30350500023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3034023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3065003012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3065013012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3065033012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3065043012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3065ff3012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7003100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7013100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7033100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7043100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7ff3100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "30350200023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3034023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "using composition for integer", + "msg" : "313233343030", + "sig" : "30692234020112022fb30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "using composition for integer", + "msg" : "313233343030", + "sig" : "3069023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d722350201000230e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "3065023010b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023102e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c54857023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f02", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "3064022f12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "3064022fb30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023000e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "30660231ff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "3066023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70232ff00e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "replaced integer by infinity", + "msg" : "313233343030", + "sig" : "3036090180023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "replaced integer by infinity", + "msg" : "313233343030", + "sig" : "3035023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "replacing integer with zero", + "msg" : "313233343030", + "sig" : "3036020100023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "replacing integer with zero", + "msg" : "313233343030", + "sig" : "3035023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7020100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "306602310112b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19a25617aad7485e6312a8589714f647acf7a94cffbe8a724a023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30660231ff12b30abef6b5476fe6b612ae557c0425661e26b44b1bfe1a138f7ca6eeda02a462743d328394f8b71dd11a2a25001f64023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30650230ed4cf541094ab8901949ed51aa83fbda99e1d94bb4e401e6250d35d71ceecf7c4571b51b33ba5fcdf542cc6b0e3ab729023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3066023100ed4cf541094ab8901949ed51aa83fbda99e1d94bb4e401e5ec7083591125fd5b9d8bc2cd7c6b0748e22ee5d5daffe09c023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30660231feed4cf541094ab8901949ed51aa83fbda99e1d94bb4e401e65da9e85528b7a19ced57a768eb09b8530856b30041758db6023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "306602310112b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3066023100ed4cf541094ab8901949ed51aa83fbda99e1d94bb4e401e6250d35d71ceecf7c4571b51b33ba5fcdf542cc6b0e3ab729023100e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023101e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc5f8fc6adfda650a86aa74b95adbd6874b3cd8dde6cc0798f5", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70230e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc66a35cfdbf1f6aec7fa409df64a7538556300ab11327d460f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70231ff1840da9fc1d2f8f8900cf485d5413b8c2574ee3a8d4ca039ce66e2a219d22358ada554576cda202fb0133b8400bd907e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d70231fe1840da9fc1d2f8f8900cf485d5413b8c2574ee3a8d4ca03a07039520259af579558b46a5242978b4c327221933f8670b", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3065023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d7023101e7bf25603e2d07076ff30b7a2abec473da8b11c572b35fc631991d5de62ddca7525aaba89325dfd04fecc47bff426f82", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3064023012b30abef6b5476fe6b612ae557c0425661e26b44b1bfe19daf2ca28e3113083ba8e4ae4cc45a0320abd3394f1c548d702301840da9fc1d2f8f8900cf485d5413b8c2574ee3a8d4ca039ce66e2a219d22358ada554576cda202fb0133b8400bd907e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529730201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529720201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529740201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 214, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 215, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 216, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000001000000000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 217, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 218, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 219, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 220, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 221, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 222, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 223, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 224, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30060201010c0130", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 225, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30050201010c00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 226, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30090c0225730c03732573", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 227, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30080201013003020100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 228, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "3003020101", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 229, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "3006020101010100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 230, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3133323237", + "sig" : "3066023100ac042e13ab83394692019170707bc21dd3d7b8d233d11b651757085bdd5767eabbb85322984f14437335de0cdf565684023100bd770d3ee4beadbabe7ca46e8c4702783435228d46e2dd360e322fe61c86926fa49c8116ec940f72ac8c30d9beb3e12f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "special case hash", + "msg" : "31373530353531383135", + "sig" : "3066023100d3298a0193c4316b34e3833ff764a82cff4ef57b5dd79ed6237b51ff76ceab13bf92131f41030515b7e012d2ba857830023100bfc7518d2ad20ed5f58f3be79720f1866f7a23b3bd1bf913d3916819d008497a071046311d3c2fd05fc284c964a39617", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 232, + "comment" : "special case hash", + "msg" : "3130333633303731", + "sig" : "3065023100e14f41a5fc83aa4725a9ea60ab5b0b9de27f519af4b557a601f1fee0243f8eee5180f8c531414f3473f4457430cb7a2602301047ed2bf1f98e3ce93e8fdbdc63cc79f238998fee74e1bb6cd708694950bbffe3945066064da043f04d7083d0a596ec", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 233, + "comment" : "special case hash", + "msg" : "32333632343231333231", + "sig" : "3066023100b7c8b5cf631a96ad908d6a8c8d0e0a35fcc22a5a36050230b665932764ae45bd84cb87ebba8e444abd89e4483fc9c4a8023100a11636c095aa9bc69cf24b50a0a9e5377d0ffbba4fab5433159f006ab4563d55e918493020a19691574e4d1e66e3975e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 234, + "comment" : "special case hash", + "msg" : "34353838303134363536", + "sig" : "306402304a7df2df6a32d59b6bfed54f032c3d6f3acd3ac4063704099cd162ab3908e8eeba4e973ee75b5e285dd572062338fe58023035365be327e2463dc759951c5c0be5e3d094cb706912fdf7d26b15d4a5c42ffebeca5ae73a1823f5e65d571b4ccf1a82", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 235, + "comment" : "special case hash", + "msg" : "32313436363035363432", + "sig" : "30660231009ad363a1bbc67c57c82a378e988cc083cc91f8b32739ec647c0cb348fb5c86472015131a7d9083bf4740af3351755195023100d310dc1509f8c00281efe571768d488027ea760fe32971f6cb7b57cdf90621b7d0086e26443d3761df7aa3a4eccc6c58", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 236, + "comment" : "special case hash", + "msg" : "333335333030383230", + "sig" : "306502310095078af5c2ac230239557f5fcee2e712a7034e95437a9b34c1692a81270edcf8ddd5aba1138a42012663e5f81c9beae2023040ee510a0cceb8518ad4f618599164da0f3ba75eceeac216216ec62bcceae8dc98b5e35b2e7ed47c4b8ebacfe84a74e6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 237, + "comment" : "special case hash", + "msg" : "36333936363033363331", + "sig" : "3066023100a538076362043de54864464c14a6c1c3a478443726c1309a36b9e9ea1592b40c3f3f90d195bd298004a71e8f285e093a023100d74f97ef38468515a8c927a450275c14dc16ddbdd92b3a5cae804be20d29c682129247d2e01d37dabe38ffb74808a8b7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 238, + "comment" : "special case hash", + "msg" : "33333931363630373935", + "sig" : "3065023100bbe835113f8ea4dc469f0283af6603f3d7a3a222b3ab5a93db56007ef2dc07c97988fc7b8b833057fa3fbf97413b6c150230737c316320b61002c2acb184d82e60e46bd2129a9bbf563c80da423121c161decd363518b260aaacf3734c1ef9faa925", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 239, + "comment" : "special case hash", + "msg" : "31343436393735393634", + "sig" : "30650230679c3640ad8ffe9577d9b59b18ff5598dbfe61122bbab8238d268907c989cd94dc7f601d17486af93f6d18624aa524a3023100e84dd195502bdcdd77b7f51d8c1ea789006905844a0e185474af1a583bab564ee23be0bc49500390dceb3d3948f06730", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 240, + "comment" : "special case hash", + "msg" : "35313539343738363431", + "sig" : "3066023100f6f1afe6febce799cc9b754279f2499f3825c3e789accef46d3f068e2b6781fd50669e80c3c7293a5c0c0af48e068e35023100f59cc8c2222ed63b4553f8149ebecc43b866719b294ef0832a12b3e3dbc825eeab68b5779625b10ae5541412ec295354", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 241, + "comment" : "special case hash", + "msg" : "35323431373932333331", + "sig" : "3065023100f46496f6d473f3c091a68aaa3749220c840061cd4f888613ccfeac0aa0411b451edbd4facbe38d2dd9d6d0d0d255ed34023000c3a74fa6666f58c4798f30c3779813e5c6d08ac31a792c2d0f9cb708733f26ad6bf3b1e46815ae536aa151680bdee2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 242, + "comment" : "special case hash", + "msg" : "31313437323930323034", + "sig" : "3066023100df8b8e4cb1bc4ec69cb1472fa5a81c36642ed47fc6ce560033c4f7cb0bc8459b5788e34caa7d96e6071188e449f0207a0231008b8ee0177962a489938f3feffae55729d9d446fe438c7cb91ea5f632c80aa72a43b9b04e6de7ff34f76f4425107fd697", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 243, + "comment" : "special case hash", + "msg" : "3130383738373235363435", + "sig" : "30660231008bb6a8ecdc8b483ad7b9c94bb39f63b5fc1378efe8c0204a74631dded7159643821419af33863b0414bd87ecf73ba3fb0231008928449f2d6db2b2c65d44d98beb77eeadcbda83ff33e57eb183e1fc29ad86f0ba29ee66e750e8170ccc434cf70ae199", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 244, + "comment" : "special case hash", + "msg" : "37333433333036353633", + "sig" : "3065023100e3832877c80c4ed439d8eadcf615c0286ff54943e3ae2f66a3b9f886245fea470e6d5812cef80c23e4f568d0215a3bfc02303177a7dbf0ab8f8f5fc1d01b19d6a5e89642899f369dfe213b7cc55d8eaf21dd2885efce52b5959c1f06b7cac5773e5b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 245, + "comment" : "special case hash", + "msg" : "393734343630393738", + "sig" : "306502306275738f0880023286a9b6f28ea0a9779e8d644c3dec48293c64f1566b34e15c7119bd9d02fa2357774cabc9e53ef7e6023100d2f0a52b1016082bd5517609ee81c0764dc38a8f32d9a5074e717ee1d832f9ea0e4c6b100b1fd5e7f4bc7468c79d3933", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 246, + "comment" : "special case hash", + "msg" : "33323237303836383339", + "sig" : "3066023100d316fe5168cf13753c8c3bbef83869a6703dc0d5afa82af49c88ff3555660f57919a6f36e84451c3e8e5783e3b83fe3b023100995f08c8fec7cd82ce27e7509393f5a3803a48fe255fcb160321c6e1890eb36e37bcda158f0fa6899e7d107e52de8c3c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 247, + "comment" : "special case hash", + "msg" : "323332393736343130", + "sig" : "306402300b13b8fd10fa7b42169137588ad3f557539a4e9206f3a1f1fe9202b0690defded2be18147f5b2da9285c0e7349735ea302300478ad317b22a247bf9334719b4c8ee84acf134515db77e6141c75d08961e1e51eaca29836744103de0f6a4c798d3eeb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 248, + "comment" : "special case hash", + "msg" : "3934303437333831", + "sig" : "3065023015804429bcb5277d4f0af73bd54c8a177499a7b64f18afc566c3ce7096bdc6c275e38548edcfa0b78dd7f57b6f393e49023100d5951f243e65b82ba5c0c7552d33b11f1e90fde0c3fd014aac1bb27db2aaf09b667c8b247c4cdd5b0723fba83b4f999e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 249, + "comment" : "special case hash", + "msg" : "33323230353639313233", + "sig" : "30650230359247c95776bb17492b7bf827f5f330fa9f9de7cc10441a1479c81776ce36cdc6a13c5f5149c4e39147a196bb02ed34023100f6ed9252a73de48516f4eabab6368fbff6875128af4e1226d54db558bd76eec369cc9b285bc196d512e531f84864d33f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 250, + "comment" : "special case hash", + "msg" : "343134303533393934", + "sig" : "3065023100a557d1f63a2094f683429ecb35a6533bac897682775c0051e111eed6e076c48867cae005c5e0803800b050311e381cd602302a2f871efcf03cf1c8f509e076aaa2a76f1ea78d1c64804ea5b063b0324b8e98eb5825d04370106020ee15805dbedf81", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 251, + "comment" : "special case hash", + "msg" : "31393531353638363439", + "sig" : "3065023100f22bf91169b4aec84ca84041cb826f7dfc6f33d973f3c72433b8a0ca203aac93f7eed62be9bea01706402d5b5d3b0e6502307841d3bc34aa47e813a55c25203c5ec2342d838d5b4638c2705dcf4bac9c24f765b5d4c28fa3c7fda7a38ed5048c7de3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 252, + "comment" : "special case hash", + "msg" : "35393539303731363335", + "sig" : "30660231009c196e39a2d61a3c2565f5932f357e242892737e9adfc86c6609f291e5e6fdbb23029ff915a032b0c5390ba9d15f203e023100d721e28e5269d7813e8a9aed53a37e652fec1560ca61f28f55ab4c262cc6214eee8d3c4c2ba9d1ba0ba19e5e3c7484a7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 253, + "comment" : "special case hash", + "msg" : "323135333436393533", + "sig" : "30660231008ba1e9dec14d300b0e250ea0bcd4419c3d9559622cc7b8375bd73f7d70133242e3d5bf70bc782808734654bacd12daea023100d893d3970f72ccab35555ae91ebcfed3c5bfc5d39181071bc06ba382587a695e02ed482f1a74fe309a399eaee5f5bc52", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 254, + "comment" : "special case hash", + "msg" : "34383037313039383330", + "sig" : "306402302f521d9d83e1bff8d25255a9bdca90e15d78a8c9ea7885b884024a40de9a315bed7f746b5da4ce96b070208e9ae0cfa502304185c6f4225b8c255a4d31abb5c9b6c686a6ee50a8eb7103aaef90245a4722fc8996f266f262109c3b5957ba73289a20", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 255, + "comment" : "special case hash", + "msg" : "343932393339363930", + "sig" : "3065023100d4900f54c1bc841d38eb2f13e0bafbb12b5667393b07102db90639744f54d78960b344c8fbfbf3540b38d00278e177aa02303a16eff0399700009b6949f3f506c543495bf8e0f3a34feb8edd63648747b531adc4e75398e4da8083b88b34c2fb97a8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 256, + "comment" : "special case hash", + "msg" : "32313132333535393630", + "sig" : "3065023100c0169e2b8b97eeb0650e27653f2e473b97a06e1e888b07c1018c730cabfdeeec4a626c3edee0767d44e8ed07080c2ac4023013f46475f955f9701928067e3982d4ba5a58a379a66f91b74fad9ac8aee30086be6f41c9c2d8fb80e0924dedbe67e968", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 257, + "comment" : "special case hash", + "msg" : "31323339323735373034", + "sig" : "306402302e868871ea8b27a8a746882152051f2b146af4ac9d8473b4b6852f80a1d0c7cab57489aa43f89024388aec0605b0263702306d8c89eed8a5a6252c5cead1c55391c6743d881609e3db24d70ead80a663570020798fbf41d4c624fcb1ce36c536fe38", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 258, + "comment" : "special case hash", + "msg" : "32303831313838373638", + "sig" : "3065023100abe6a51179ee87c957805ecad5ccebca30c6e3a3e6dbe4eb4d130b71df2bf590b9d67c8f49e81bf90ce0909d3c2dab4c02307110582fab495b21bd9dda064fbd7acc09d0544dcf7699be35ad16207ffa10e8904f9241a709487ba2ba7e34430b81c3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 259, + "comment" : "special case hash", + "msg" : "343534363038393633", + "sig" : "3064023050252c19e60e4120b7c28b2c2e0a588e5d107518cd61e5c7999c6d465ea134f752322d8b83f5988fcdc62bd9adb36ccd0230193899352491dabfe4fc942e14ddacb200673729d61602cc0baf5732d262f36e5279865a810ce2f977f57686a0d0137a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 260, + "comment" : "special case hash", + "msg" : "31333837363837313131", + "sig" : "3066023100eb725fdd539d7de8ea02fac8db6ec464f40c272a63e6b2718c4e0266bf1235dae330f747a6052f4319ecbe7bdade9bd0023100ae84507648ba2d1944bb67722ccd2cb94b92b59e89a1ae698c668bb57f481c42b216c23da4b1d8c0e502ef97fda05ad0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 261, + "comment" : "special case hash", + "msg" : "32303331333831383735", + "sig" : "3064023025aa56fcbd92f2cf53bddbaa0db537de5843290731c1dd78036fcbded4a8f7187ddfed9f5ca9d98ea7b12d24b8d29d570230028f68372d66164810bf79c30a191116d496fe32314605dc1668289425fb3a15d7532dde1052a49a35866c147abde1d9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 262, + "comment" : "special case hash", + "msg" : "323535333538333333", + "sig" : "3065023054bf7adc8548e7cae270e7b097f16b5e315158d21b0e652ce1cfe4b33126ba4a65bf227b4cddcaf22d33d82478937b20023100bfc1b8f1d02846a42f31e1bd10ba334065459f712a3bbc76005d6c6488889f88c0983f4834d0bf2249dbf0a6db760701", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 263, + "comment" : "special case hash", + "msg" : "34363138383431343732", + "sig" : "3066023100d3bb29ac0bd1f6058a5197f766d6ea3216c572ded62af46318c8c7f9547bb246553654279d69989d9af5ef4ccacf64da023100e10281122c2112a2a5a9d87ac58f64fb07c996a2d09292119e8f24d5499b2e8524ebd0570097f6cc7f9c26094a35c857", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 264, + "comment" : "special case hash", + "msg" : "31303039323435383534", + "sig" : "3066023100bc32e85e3112472408f9324586e525325128a38313c34b79700cb0a3f7262a90a1fcc40eef1f1a3884032a7a21810e0a023100c02f52541360358107a13dbea31f83d80397710901734b7adb78b1fc904454a28a378514ccef80ecc70c1d8e55f11311", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 265, + "comment" : "special case hash", + "msg" : "32373536343636353238", + "sig" : "3066023100f04b9e17c71d2d2133ea380d71b6b82c8a8e3332703e9d535b2c2bca9b0ad586d176a6049afa35edd9722edb5c33daa3023100bd44d4a6263380ca6f22e76c26d5f70f41f4d7cae7d4b9c1b8dc2ba5298d9d12408b04614e2f3796cc19c950c8c88a10", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 266, + "comment" : "special case hash", + "msg" : "313139363937313032", + "sig" : "3065023100c8807351d8e261338e750cb9a52f4be4470b63f6f181cbe0e81d43b60824ba4be1bba42b1783897a0d72b0614018b02f023052e3a598c8be982127e961eed2b04f21c86df4ebcab0d955a7c66ec7f818898798ee75367a85022276b912c0a072bff7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 267, + "comment" : "special case hash", + "msg" : "323333313432313732", + "sig" : "306402306152841b6fb460546eeb4158a3e5ffa54f51aa6a208987be899b706055cd59d8ec7c01f4634254fe050e1d4ec525a173023073f0c5f13640d892c28f701428e8fbfb736b6478bbd972c8c684977556ed599a70d313e06b126080e13068d56e1c10be", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 268, + "comment" : "special case hash", + "msg" : "31363733343831383938", + "sig" : "3066023100842f8d2814f5b7163f4b21bd9727246e078ad1e7435dfe1bc5f9e0e7374232e686b9b98b73deab9e43b3b7f25416c2be023100852c106c412300bac3ba265990b428a26076ab3f00fd7657bbd9315fa1cd2a1230a9a60d06b7af87aa0a6cf3f48b344c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "special case hash", + "msg" : "31343630313539383237", + "sig" : "3066023100e13f6d638b9d4fba54aa436a945cfea66dec058fab6f026293265884457b5a86e8e927d699bc64431b71e3d41df200440231009832cd1b4177118ed247b4f31277da15f420179f45c71a237d77f599a45df68247bac3dcef0868ecd1665005c25b7c6c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "special case hash", + "msg" : "38393930383539393239", + "sig" : "3064023009fff1c2e4ff8643cbfad588620c2bf7aaca5cf4242969142c7145b927bd82ed14f3ae8c6e2ce2da63b990b9f1be6d640230780c816f6c86343b008235ee986abf2136123ed247e4751e4d5467334f08e5e2ca1161254f68c3e6678e2d0b87d1cc7c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "special case hash", + "msg" : "34333236343430393831", + "sig" : "3066023100ffae6e7d2cea71b5a9c73cbc1285a8d252949772afe1aa27fb137740fc429c2a8c8648c9a5ba678a32f7ae7689b395ca02310089d54cd13a162c34189ff524813690e79768af8ebe794cc941dfe7fdf2cb8dd0b42519f034ea4d4f1c870046d13210e1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "special case hash", + "msg" : "32333736343337353537", + "sig" : "3066023100efa3c5fc3c8be1007475a2dbd46e3578bb30579445909c2445f850fb8aa60aa5b1749cc3400d8ffd81cb8832b50d27b4023100b36a08db3845b3d2ebd2c335480f12fb83f2a7351841ea3842ec62ad904b098efbf9faa7828b9c185746d9c8bd047d76", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "special case hash", + "msg" : "383630333937373230", + "sig" : "3066023100f577095f7c74594aa1c69aca9bb26e0c7475ae5163058ecc074b03af89e56b12b6a72450589dacf0d7e6b172d0017a0e023100bee756a0b5d0a677bf95f98da512854f3ecb712f94570e1ad230eab17c527b6a8bcc9ae202b657a3611ecffa94ba0d54", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "special case hash", + "msg" : "35383037373733393837", + "sig" : "306502300ae7688c7de5882eb9c3172f5500015552f998fb53702c6cd4b03404d5a0510a8073db95db544808dbd76659fd20cf12023100bc610fe5f04d8909cc439615fb7e302d3d82992817647c50c1f467090a52b328cbbc0262f18ffb6fd9f3bd60013cea08", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "special case hash", + "msg" : "353731383636383537", + "sig" : "306502305dc8a6d84afaaf900d78c6a91dc5e12e7d17891a52c1468253061d704b8940bef85b9fe807a0e02b56e8dd37c22fbb82023100914258de52932c4604dceb5ce7cc0a92e021edca9b819b84a9f25652f9af13f956a1139ee95c7aa7a079e3ad8317fbdb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "special case hash", + "msg" : "38363737333039333632", + "sig" : "3066023100da55a6dbb845205c87c995b0bbc8444ffcba6eb1f4eb9d30f721d2dacc198fb1a8296075e68eb3d25ef596a952b8ea19023100829f671dccad6d7b0b8c4b39ff3f42597965d55c645fb880a66fe198d9344c9311f1598930392470379fa5ff43c75d04", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "special case hash", + "msg" : "32343735353135303630", + "sig" : "306402303730dfd0985de77decdd358a544b47f418d3fab42481530d5d514859894c6f23b729af72b44686058de29687b34b3b0c023065bdfaf0ac217a80b82eb09c9f59c5c8cfbf50a6eb979a8f5f63eab9bd38ee0938e4b23102112033b230a14ad2790e3f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "special case hash", + "msg" : "393733313736383734", + "sig" : "3065023055210df2124c170e259af1dafa73e66613aa18ced8eb40a7f66155d50d5f3124edfa55276de4797013177291e8afeff6023100c314d3a310a60647dad3318ed7f0405a64c3f94b5ac98e6be12208c8ad9835fa6b81a0ea59f476608634657b66e00ffd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "special case hash", + "msg" : "33363938303935313438", + "sig" : "3065023100f6c9897144b5d84964515eb0c8c3d0d9c6687c957887e93c29b2a21804b40307fb88bfd5cca11c95885d28867cb33a740230656bafca242290f7d7e9801b6cfd4bd1b07e8d7c6c1c59fd3d8e82e9846a1b2855c85420e4ee6ec2d97fec2161eeb243", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "special case hash", + "msg" : "3130373530323638353736", + "sig" : "3065023100bfbcc5f343e2ab392ce6c1c02d91c00650c47136836a5d0622d476ac2b3274395721b1ab21882ed5cabed093b43b133f0230043e9fc64c6108df73f9eced90f91185f83d89662f5a9d810c1824fbfd97b842f784305fd6b9c28c80d32d52b1538d12", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "special case hash", + "msg" : "383639313439353538", + "sig" : "3066023100b8f793ddd47e657a9081cbed1600fb22b38ad6a155f9c006ba98de1f383b4c0918ceea72253e0f869524b2369cd9bd8c02310096c452ff58f42e0853040a6d5c7e750b57dd4af06e2df8194e8d524e81ac000ee3315bbeabbf6a21f61b8904c55378d9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "special case hash", + "msg" : "32313734363535343335", + "sig" : "30640230263ab1c93567e93b5ec4e380b0d3bb5ea1ce693c14a47afccc539aaf197f099d331ea9e26f1a0057148d46727acb61880230621db07ce94110e2be74fa953a00a8a554225b3f2c0f6c56b4ebd4db2f57ca2565ed3323fd708bb56ac6e28bfb40f2e7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "special case hash", + "msg" : "363434353530373932", + "sig" : "306502310096f4a2b3529c65e45a0b4c19c582dc8db635d4e74f0b81309696b23be920ba8ec553d4b370df4c59d74dd654bac6df5802301573ba1b280c735a3401d957ecd3b8908e4e0b7d80239ce042594d182faf2ddf811c9056aac4c87f4f85043766a26614", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "special case hash", + "msg" : "353332383138333338", + "sig" : "306602310096a691b19a6294b311a438f8da345e480b1deaa1e940cfbf02177d5f08479976ea58aee31011d50b5542be188c9d63df0231008f67dc9e1588aeb8be180013d41a036f9badfad9fe9340910cbf87243776f54bef7da2ebf3a7643866eb9a3b23fe59b9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "special case hash", + "msg" : "31313932303736333832", + "sig" : "3066023100cff27948c6d902c73d103d0802eb144dd89c1b0e3b9f9a5e498b0361dc122a0d555160d8c64d61539c1dbbd4bc18971f023100b60827488c9f16ba28378fd59b1a29c65073335a7f236131134674c62c8396f193c76f2395ddaaa4f24b69161eb69b4d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "special case hash", + "msg" : "31353332383432323230", + "sig" : "3066023100e90e22d9e535dfdfd86e098d5d6a0ae08f69d4a3ffaa39f6930bcf5f5ad02ee0d0472ae984edd9f0bbe5e7d63fd4f6ac023100e3f57b0a4629ecaa21f2d34a7a0834d57ba20f99c6e31b43c37811cc23b9957c8f3356f4462214d3c8e58745e50f23f6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "special case hash", + "msg" : "313536373137373339", + "sig" : "3064023018b70e272a98cc48e1e0af73146f0f972bbfbeb6b985feb2c4acd695a7a41b99c415be9c46aedaf3ddff67a65a89e387023047d6bcea088f622ad35d88bcf46d71827bcba2f57c36d6fb8a4bf2befdc0d4e3ef366d5966c4d076d3cfa43d6626717b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "special case hash", + "msg" : "34333033303931313230", + "sig" : "3066023100acfd981c55fd5286cfce173726d51c3d25f65b11b7673729a62167256774f7c894b74662a212c706e00cef096074162f023100f4d471c97797c24d96aec1de85a249ef468d6036cd712563aeb65cea4995f3ee85e769b874f09a08637a44a96084be7a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "special case hash", + "msg" : "37373335393135353831", + "sig" : "3065023100f15fcbeea8b64dad5e8566a2c37913c82d6be9d9668df469bd0b591c3923a6e12644eaf697d466fa7cd513983d946a40023070063966801079351526999e5c5c2c5f627e4c8bc96784bcbe715fe7c7afcf69785d1c8c7ccd3725e364101638396597", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "special case hash", + "msg" : "323433393636373430", + "sig" : "3066023100d995147939ae6d8f62bb57372227395839e25a0d4308b899d5f506cf9e0a01e8115b7e4b822f037ec95752bd9e892f5e0231009bb4d07333e468f8482a790a2a2e650e2c42da8240ec5e402506b368122f046680cd71e0117897cce3df4a1555fc8876", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "special case hash", + "msg" : "34333237363032383233", + "sig" : "3064023043c6ce5184476f3f496afeae3cb96a3f9f038957686c93437b8266a233022371d266e904aa096c3566cb33824b88075e0230680c13245a8bc560b638d26f0c5f261964130256939552d3fffb07b658355611612c268a89541055d3c2bf9e82cf4da3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "special case hash", + "msg" : "32393332303032353932", + "sig" : "30630230447539941dc350767fc841083d25d9247a0807e1e22e0bb9d94f504f721981b413d521efbd75e4fe831ee26338cf3de3022f395ab27ea782cee4be53e06c7616bbd41d6926b18d219d75d5979f13cba2f52101019b0ec0a41ffdbf29ef73ddba70", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "special case hash", + "msg" : "36343039383737323834", + "sig" : "3066023100a0ba8e8b979c20345e34fca98531900164a859923bd6986a9c39236a2f5de053a252997f35e5b84b0d48ba0f8d09aedd023100facd6df04358fcd95fa9018a6fc0828dfe319812ff65929c060b18ad4b9f06e7fc0addd1b695315d71c15e51dc51d719", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "special case hash", + "msg" : "36303735363930343132", + "sig" : "3065023100b8378390f71f0bb6663f1846daf6908f8c84f770ae740cc8054122494cf0ffa9437ab26040ca22808fb29a810b70126e0230427636b929a500abc34d9f22977b81e734919afaf3ed2c91eeada7074e0c16bdc52f960eaec9db5a879c1e6414035101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "special case hash", + "msg" : "32333231363233313335", + "sig" : "3066023100f36a9048fd94803d3d6d1b11430b90b94ef8d5d2ad89018c69473ce9cfe0d6105b3c2fb2e7555ccd25f65af8c872bdc602310081254841e7ecbfd0d810afaaf5afd6d6c5d0542bb00cc183b1db01767120afbcc0006ddcba8db7baf65f302723dabc4d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "special case hash", + "msg" : "36343130313532313731", + "sig" : "3066023100d8a4d96409c191baa9540bf35f1d5192f9352d7f0e14f92c0e8e1f19f559b42ed3c6b7bdb6becc56584fb5c09421e2e4023100d966ba13d4245e248eafb46f2a3df92c2037d5969c7db6dbcb0ff4b21850e16a18a29785267239886365cf721a212536", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "special case hash", + "msg" : "383337323835373438", + "sig" : "306402301d5d86fd48e65b0cf0b0b46062241f89cf65785dd818f93f1162771a38a15f20febc261812ecaaf6f4f2b86b3362d7eb02300c76e363de1432513cb9dad6493931381ecd25f142e61968b6f20d7b1270cb9e38a7ae54e4778aff4025eb00c6a67aef", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "special case hash", + "msg" : "33333234373034353235", + "sig" : "306402300508eed148f061114be18e8a86188feabf76b873b36eadcca9c2c60e24a2002fe456231decf7a8f6f032c08dbe0ab5a90230694c0ad781b2341e30e1d0739ac99672064f48821a69852c7940cf1d621738199c980d56d2a0b71b3fc6011c6b2444ba", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "special case hash", + "msg" : "31343033393636383732", + "sig" : "30650230726ef88bb7947a043116c111cb519ddeda3e6ffbf724884a1b22c24409cdf2779d93ce610c8c07411c2b001399103d6d02310095dc1d65046caf0e8dad07b224798d6f7807278e737883e7c7bf0b446791d4ee144c26f710134861af4e6771d4082896", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "special case hash", + "msg" : "31323237363035313238", + "sig" : "3066023100eb0e8e3c639f5eba8eccd9020d0ec62d8ac73f3fddbdfa08fdb2155deb0a536923ebd55e20020cab9f8e39a43a88be11023100c796df399fc35883dd5dae6817d02d3d67a8eec6601585e5e36fd2c134eddb1447ec12b144dddc9aae28a84f22602641", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "special case hash", + "msg" : "34393531343838333632", + "sig" : "3065023100e8f8c69d0396ea900f9757736d2b19dbc2d2a8c01dccf490c8b9455bd63b34c095867e7cf3b84dc7c3c3d6b51bebf405023058152a7564eeb22a3e26597026d0cd7835725bd512245448cb5016eb48ea759809fd6949d0ee5d579643f72f908c16bb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "special case hash", + "msg" : "32343532313237303139", + "sig" : "30650230380b4e48b3ff012af7c08bf871d9f4da0c708b5494a986d3d80b1979e579d0dbee61db9bc3c04c396176410788e15a0f023100e6971c013c965a7e4df10f95620a5092fab096bd5b50828f4bc91c5e479bccf6e0daf287e7ef580fa9ea153fa1a507a2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "special case hash", + "msg" : "31373331353530373036", + "sig" : "30650231008061de12029e2b000d157a455ecf2301222f092df95b9551b78cf0ef3a64f12212b57ec7b16d2c0f258946f51cb1633a02300ac2ca6ad99b29ca29a0dc38b34443ee41020f81ed9087cef7681a00c4fe60653a572944ba37f1fe51d112bfffbdd701", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "special case hash", + "msg" : "31363637303639383738", + "sig" : "3066023100e74f2a791eeb7341cff6cc1c24f459e6c0109924f7984639ae387e3ceb58758a1bc3839dea1fc3a3799562225e70a733023100d90e4d0f47343268e56bbcb011bd4734390abc9aa1304b6253e78f5a78b6905aa6bf6a3892a4ae1a875c823ae5a83e87", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "special case hash", + "msg" : "343431353437363137", + "sig" : "306402306a1cd0ff7906be207b56862edcbc0d0bbfb26d43255c99f6ab77639f5e6103a07aa322b22ed43870d1ce6df68aa0a8c10230655558b129aa23184500bd4aab4f0355d3192e9b8860f60b05a1c29261f4486a6ae235a526339b86c05f5fac477b6723", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "special case hash", + "msg" : "343233393434393938", + "sig" : "306602310081111fdc5f0de65583c7a5668d26c04ee52e08dac227753132cff1741cb721e112aa793c0d5fa047faf14cb45dd13e1f0231009a25cf1e6c152bc3e216e021561d194979f1c11fe17019ed7bac2c13c4010f209665e3b6f33b86641704d922b407818f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "special case hash", + "msg" : "34383037363230373132", + "sig" : "30660231009b66d122a315095b2b66ccb97272c476a2d760e827fdea05732d634df3d066569c984dd941aad5f5dec4c2e1b7b94a0002310096c32403c85bc3d0ee87f96a600182796dce53d54d7467ae660a42b87bb70792f14650ac28a5fa47ce9ca4d3b2c25878", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "special case hash", + "msg" : "32313634363636323839", + "sig" : "306402302bb062a002088d62a0b7338d0484fedfe2af7e20cebf6a4788264eb27cb4ebc3cc81c816e6a35722cf9b464783094cb8023046cc21b70f2133f85ab0443bebe9c6fc62c6e2ec1fd9c4ddf4a6d5f3f48eb7abf1ee7bdf6725879fd1b7daafb44f6e04", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "special case hash", + "msg" : "31393432383533383635", + "sig" : "3065023033e87061ee9a82eb74d8bb4ae91606563c2e4db8b09183cc00d1119ab4f5033d287a1fc90a2348163fdf68d35006fd7f02310096db97c947ee2e96e6139d3bcbf5a43606bae1ad3ca28290fbad43b281ef115ec1b98bc581ef48094f8c1aa8e36c282a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "special case hash", + "msg" : "32323139333833353231", + "sig" : "3064023070f80b438424ba228a7d80f26e22ff6a896243c9d49c75573489ee0de58ec60efd103838143465bd8fe34672ba9496170230115492bd9365b96f38747536318bffb819e7c146df3a5a7a46d6288c7fdf31cff570b22176aa398daba9073ab1e7b9bf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "special case hash", + "msg" : "393236393333343139", + "sig" : "3066023100ff16ca0389ea6948f4305b434fe0aa589f880f5aa937767c31170ee8da6c1ad620c993d40ddf141b7fda37424d51b5cd023100ba0f86985dffc61d6e35a37de06918b11e431b72403161acfb8f05c469f1fcfa6e215c6f7eb5a0a5e0cc9e7be79ce18b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "special case hash", + "msg" : "373639333836333634", + "sig" : "3065023100d60c24bee05f5198cd155ad095ffb956bbcfb66b82fc0d3755119915a62f2f923557b85ddc1d12e6a757f23042cb601b02302c4d968b5eac930b51d283b418fcff6df3a9d6d66e3812cd1bf5fde797fd203a7c439b1b381e4fe8b44e6f108764a7dd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "special case hash", + "msg" : "32373335393330353733", + "sig" : "3066023100bdf634d915a4fae7a155532ca2847c33a6babe7ef8db0af50f485db3dd2c8bffe722394583932f6eb5cd97f6db7561d9023100bb425cae2e5483174b5ed873af4329da4618c14458141850bee3c7bf1ffb3f2030159043277dacc708e9d32f63400083", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "special case hash", + "msg" : "38333030353634303635", + "sig" : "30650230061320a3bcebac33cf399d45d1e1e1b34f37288fe4753f4fddfd496eff427e1d26b1b91d749cc34c12f4ecef837c0e8f023100fd5cf468cda319fe06e773a190c38de6e150a321ac1c416ad875432cdb7a07134c446f13068e71a1a96e35da923974ad", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 315, + "comment" : "special case hash", + "msg" : "34333037363535373338", + "sig" : "3065023100d620f063d33efa859b623f6c9a92340e4cdd854ffbe3e5e01379177aee31715ce587b00bd0aea98fddf236d2fc8a7a740230671f4b7c187297dc236c61888b6d9397e97783077cc4101807d79ee62e4a53a78c4b6a3a31b03178668af894a3d8902e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 316, + "comment" : "special case hash", + "msg" : "39363537303138313735", + "sig" : "306502310091c556c5bddd529fe903b86afc0eb8fa1f49425b779a39114ae563bebc947e633ba4ee98948faa8940dfe2562c63e1c50230198b00079d8db072d25b0a49bc8bc36457926f3c101527528df6679f92c76f1b487e6695d4b92fe33b4ee7046a6a5df9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "044bf4e52f958427ebb5915fb8c9595551b4d3a3fdab67badd9d6c3093f425ba43630df71f42f0eb7ceaa94d9f6448a85dd30331588249fd2fdc0b309ec7ed8481bc16f27800c13d7db700fc82e1b1c8545aa0c0d3b56e3bfe789fc18a916887c2", + "wx" : "4bf4e52f958427ebb5915fb8c9595551b4d3a3fdab67badd9d6c3093f425ba43630df71f42f0eb7ceaa94d9f6448a85d", + "wy" : "00d30331588249fd2fdc0b309ec7ed8481bc16f27800c13d7db700fc82e1b1c8545aa0c0d3b56e3bfe789fc18a916887c2" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200044bf4e52f958427ebb5915fb8c9595551b4d3a3fdab67badd9d6c3093f425ba43630df71f42f0eb7ceaa94d9f6448a85dd30331588249fd2fdc0b309ec7ed8481bc16f27800c13d7db700fc82e1b1c8545aa0c0d3b56e3bfe789fc18a916887c2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAES/TlL5WEJ+u1kV+4yVlVUbTTo/2rZ7rd\nnWwwk/QlukNjDfcfQvDrfOqpTZ9kSKhd0wMxWIJJ/S/cCzCex+2EgbwW8ngAwT19\ntwD8guGxyFRaoMDTtW47/nifwYqRaIfC\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 317, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "304d0218389cb27e0bc8d21fa7e5f24cb74f58851313e696333ad68b023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 318, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "043623bb296b88f626d0f92656bf016f115b721277ccb4930739bfbd81f9c1e734630e0685d32e154e0b4a5c62e43851f6768356b4a5764c128c7b1105e3d778a89d1e01da297ede1bc4312c2583e0bbddd21613583dd09ab895c63be479f94576", + "wx" : "3623bb296b88f626d0f92656bf016f115b721277ccb4930739bfbd81f9c1e734630e0685d32e154e0b4a5c62e43851f6", + "wy" : "768356b4a5764c128c7b1105e3d778a89d1e01da297ede1bc4312c2583e0bbddd21613583dd09ab895c63be479f94576" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200043623bb296b88f626d0f92656bf016f115b721277ccb4930739bfbd81f9c1e734630e0685d32e154e0b4a5c62e43851f6768356b4a5764c128c7b1105e3d778a89d1e01da297ede1bc4312c2583e0bbddd21613583dd09ab895c63be479f94576", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAENiO7KWuI9ibQ+SZWvwFvEVtyEnfMtJMH\nOb+9gfnB5zRjDgaF0y4VTgtKXGLkOFH2doNWtKV2TBKMexEF49d4qJ0eAdopft4b\nxDEsJYPgu93SFhNYPdCauJXGO+R5+UV2\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 319, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04d516cb8ac8e4457b693d5192beeb6ce7d9a46bef48eecf3ea823286f101f98d130f5a26dc6fec23662eff07f14486fd58456932e74894b7f0e3bb0dfd362502b3765dd80a3177209fb221dc9b51aaf4470b245391405bef514176b13a267a720", + "wx" : "00d516cb8ac8e4457b693d5192beeb6ce7d9a46bef48eecf3ea823286f101f98d130f5a26dc6fec23662eff07f14486fd5", + "wy" : "008456932e74894b7f0e3bb0dfd362502b3765dd80a3177209fb221dc9b51aaf4470b245391405bef514176b13a267a720" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004d516cb8ac8e4457b693d5192beeb6ce7d9a46bef48eecf3ea823286f101f98d130f5a26dc6fec23662eff07f14486fd58456932e74894b7f0e3bb0dfd362502b3765dd80a3177209fb221dc9b51aaf4470b245391405bef514176b13a267a720", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE1RbLisjkRXtpPVGSvuts59mka+9I7s8+\nqCMobxAfmNEw9aJtxv7CNmLv8H8USG/VhFaTLnSJS38OO7Df02JQKzdl3YCjF3IJ\n+yIdybUar0RwskU5FAW+9RQXaxOiZ6cg\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 320, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d1aee55fdc2a716ba2fabcb57020b72e539bf05c7902f98e105bf83d4cc10c2a159a3cf7e01d749d2205f4da6bd8fcf1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04a8380cd35026e13bf87be693cdb6e75a82d765b4019b529e8d277c4af6c9db27ebb5d3f86e88add9d5b61186f04c83a992a187507c737325d2cc624acef3cd036bfa99e0c1518be65c88bb51f900f94123acabad81d15130d3ade7ff7e4364e1", + "wx" : "00a8380cd35026e13bf87be693cdb6e75a82d765b4019b529e8d277c4af6c9db27ebb5d3f86e88add9d5b61186f04c83a9", + "wy" : "0092a187507c737325d2cc624acef3cd036bfa99e0c1518be65c88bb51f900f94123acabad81d15130d3ade7ff7e4364e1" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a8380cd35026e13bf87be693cdb6e75a82d765b4019b529e8d277c4af6c9db27ebb5d3f86e88add9d5b61186f04c83a992a187507c737325d2cc624acef3cd036bfa99e0c1518be65c88bb51f900f94123acabad81d15130d3ade7ff7e4364e1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqDgM01Am4Tv4e+aTzbbnWoLXZbQBm1Ke\njSd8SvbJ2yfrtdP4boit2dW2EYbwTIOpkqGHUHxzcyXSzGJKzvPNA2v6meDBUYvm\nXIi7UfkA+UEjrKutgdFRMNOt5/9+Q2Th\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 321, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b6b681dc484f4f020fd3f7e626d88edc6ded1b382ef3e143d60887b51394260832d4d8f2ef70458f9fa90e38c2e19e4f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04554f2fd0b700a9f4568752b673d9c0d29dc96c10fe67e38c6d6d339bfafe05f970da8c3d2164e82031307a44bd32251171312b61b59113ff0bd3b8a9a4934df262aa8096f840e9d8bffa5d7491ded87b38c496f9b9e4f0ba1089f8d3ffc88a9f", + "wx" : "554f2fd0b700a9f4568752b673d9c0d29dc96c10fe67e38c6d6d339bfafe05f970da8c3d2164e82031307a44bd322511", + "wy" : "71312b61b59113ff0bd3b8a9a4934df262aa8096f840e9d8bffa5d7491ded87b38c496f9b9e4f0ba1089f8d3ffc88a9f" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004554f2fd0b700a9f4568752b673d9c0d29dc96c10fe67e38c6d6d339bfafe05f970da8c3d2164e82031307a44bd32251171312b61b59113ff0bd3b8a9a4934df262aa8096f840e9d8bffa5d7491ded87b38c496f9b9e4f0ba1089f8d3ffc88a9f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEVU8v0LcAqfRWh1K2c9nA0p3JbBD+Z+OM\nbW0zm/r+Bflw2ow9IWToIDEwekS9MiURcTErYbWRE/8L07ippJNN8mKqgJb4QOnY\nv/pddJHe2Hs4xJb5ueTwuhCJ+NP/yIqf\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 322, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020102020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0444ee3335fa77d2fb02e4bd7074f45e598a879c0fa822ec718c21dc13b83440edc4e3c10a1858423e03044c9eff22591cd027c49933e5510557d6b4b2c6f66fe5dcb9302a3b13fdc68048c3fcac88ba152b6a9833c87fdc6280afc5d11ab7c107", + "wx" : "44ee3335fa77d2fb02e4bd7074f45e598a879c0fa822ec718c21dc13b83440edc4e3c10a1858423e03044c9eff22591c", + "wy" : "00d027c49933e5510557d6b4b2c6f66fe5dcb9302a3b13fdc68048c3fcac88ba152b6a9833c87fdc6280afc5d11ab7c107" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000444ee3335fa77d2fb02e4bd7074f45e598a879c0fa822ec718c21dc13b83440edc4e3c10a1858423e03044c9eff22591cd027c49933e5510557d6b4b2c6f66fe5dcb9302a3b13fdc68048c3fcac88ba152b6a9833c87fdc6280afc5d11ab7c107", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAERO4zNfp30vsC5L1wdPReWYqHnA+oIuxx\njCHcE7g0QO3E48EKGFhCPgMETJ7/Ilkc0CfEmTPlUQVX1rSyxvZv5dy5MCo7E/3G\ngEjD/KyIuhUrapgzyH/cYoCvxdEat8EH\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 323, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020102020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04e2f87f72e3c66c73037fe77607d42ad2d9c4cc159893b4b9b8b0365d3a7766dbe8678b02e2b68f58e5a4f7681061a390e38f2142818542bef6b2bc3a2c4f43c95e5259d6bd5401531378c7ca125a1f6cc609d4fadfc5c9a99358ee77ff780c8d", + "wx" : "00e2f87f72e3c66c73037fe77607d42ad2d9c4cc159893b4b9b8b0365d3a7766dbe8678b02e2b68f58e5a4f7681061a390", + "wy" : "00e38f2142818542bef6b2bc3a2c4f43c95e5259d6bd5401531378c7ca125a1f6cc609d4fadfc5c9a99358ee77ff780c8d" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004e2f87f72e3c66c73037fe77607d42ad2d9c4cc159893b4b9b8b0365d3a7766dbe8678b02e2b68f58e5a4f7681061a390e38f2142818542bef6b2bc3a2c4f43c95e5259d6bd5401531378c7ca125a1f6cc609d4fadfc5c9a99358ee77ff780c8d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE4vh/cuPGbHMDf+d2B9Qq0tnEzBWYk7S5\nuLA2XTp3ZtvoZ4sC4raPWOWk92gQYaOQ448hQoGFQr72srw6LE9DyV5SWda9VAFT\nE3jHyhJaH2zGCdT638XJqZNY7nf/eAyN\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 324, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020102020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 325, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52975020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0405e67c44fc0cbc9a8eb343b4d6f596c7d00cac5da8594caf45b7209397496214c42d856a015ce589bc9ba865a4fab5ab88a01c7b5d09efaf878fcb9102fb3875a8381af234d1c593076e452225a56f51674f347126d3009b44dcbb003a64d95f", + "wx" : "05e67c44fc0cbc9a8eb343b4d6f596c7d00cac5da8594caf45b7209397496214c42d856a015ce589bc9ba865a4fab5ab", + "wy" : "0088a01c7b5d09efaf878fcb9102fb3875a8381af234d1c593076e452225a56f51674f347126d3009b44dcbb003a64d95f" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000405e67c44fc0cbc9a8eb343b4d6f596c7d00cac5da8594caf45b7209397496214c42d856a015ce589bc9ba865a4fab5ab88a01c7b5d09efaf878fcb9102fb3875a8381af234d1c593076e452225a56f51674f347126d3009b44dcbb003a64d95f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEBeZ8RPwMvJqOs0O01vWWx9AMrF2oWUyv\nRbcgk5dJYhTELYVqAVzlibybqGWk+rWriKAce10J76+Hj8uRAvs4dag4GvI00cWT\nB25FIiWlb1FnTzRxJtMAm0TcuwA6ZNlf\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 326, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3036020102023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accd7fffa", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "040bb03fce3c01ebcf0873abd134a8682f5fb8dbffa22da674047e5c3e71e43de582ed6abb908c2e4faa5d96186278b6c1ba3b22123e68ccc56f17dd79ff15565706f71a0b6123c77af3cd88f0af024cc5259781516edcaf5fe990646e7b66999d", + "wx" : "0bb03fce3c01ebcf0873abd134a8682f5fb8dbffa22da674047e5c3e71e43de582ed6abb908c2e4faa5d96186278b6c1", + "wy" : "00ba3b22123e68ccc56f17dd79ff15565706f71a0b6123c77af3cd88f0af024cc5259781516edcaf5fe990646e7b66999d" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200040bb03fce3c01ebcf0873abd134a8682f5fb8dbffa22da674047e5c3e71e43de582ed6abb908c2e4faa5d96186278b6c1ba3b22123e68ccc56f17dd79ff15565706f71a0b6123c77af3cd88f0af024cc5259781516edcaf5fe990646e7b66999d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEC7A/zjwB688Ic6vRNKhoL1+42/+iLaZ0\nBH5cPnHkPeWC7Wq7kIwuT6pdlhhieLbBujsiEj5ozMVvF915/xVWVwb3GgthI8d6\n882I8K8CTMUll4FRbtyvX+mQZG57Zpmd\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 327, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "3036020201000230489122448912244891224489122448912244891224489122347ce79bc437f4d071aaa92c7d6c882ae8734dc18cb0d553", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0458f246090d5e49863bc0bf2d501ff72f551c5f1c5e679eb49064fd02e221a2707326ec2d140bcc817afaad5065761566497c823fd736882cbf78fb92b1a5589b67e8067497c710a4cbb39dee2c5431bc45cfb96c9f8454385c9f2b3ef2d3d31a", + "wx" : "58f246090d5e49863bc0bf2d501ff72f551c5f1c5e679eb49064fd02e221a2707326ec2d140bcc817afaad5065761566", + "wy" : "497c823fd736882cbf78fb92b1a5589b67e8067497c710a4cbb39dee2c5431bc45cfb96c9f8454385c9f2b3ef2d3d31a" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000458f246090d5e49863bc0bf2d501ff72f551c5f1c5e679eb49064fd02e221a2707326ec2d140bcc817afaad5065761566497c823fd736882cbf78fb92b1a5589b67e8067497c710a4cbb39dee2c5431bc45cfb96c9f8454385c9f2b3ef2d3d31a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEWPJGCQ1eSYY7wL8tUB/3L1UcXxxeZ560\nkGT9AuIhonBzJuwtFAvMgXr6rVBldhVmSXyCP9c2iCy/ePuSsaVYm2foBnSXxxCk\ny7Od7ixUMbxFz7lsn4RUOFyfKz7y09Ma\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 328, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "303c02072d9b4d347952cd023100ce751512561b6f57c75342848a3ff98ccf9c3f0219b6b68d00449e6c971a85d2e2ce73554b59219d54d2083b46327351", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04fc6984dd6830d1485fb2581a45a791d8dca2c727c73d3d44c89f0082c1868af5ca74b4ca4ae22802640a9ebfe8c7ae12998d63a5b5ad1b72b899f0b132e4952aaa19d41fdeea48b1ed6b8358dd1db207fd66e01453ad40f67b836adc802d5fe8", + "wx" : "00fc6984dd6830d1485fb2581a45a791d8dca2c727c73d3d44c89f0082c1868af5ca74b4ca4ae22802640a9ebfe8c7ae12", + "wy" : "00998d63a5b5ad1b72b899f0b132e4952aaa19d41fdeea48b1ed6b8358dd1db207fd66e01453ad40f67b836adc802d5fe8" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004fc6984dd6830d1485fb2581a45a791d8dca2c727c73d3d44c89f0082c1868af5ca74b4ca4ae22802640a9ebfe8c7ae12998d63a5b5ad1b72b899f0b132e4952aaa19d41fdeea48b1ed6b8358dd1db207fd66e01453ad40f67b836adc802d5fe8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE/GmE3Wgw0UhfslgaRaeR2NyixyfHPT1E\nyJ8AgsGGivXKdLTKSuIoAmQKnr/ox64SmY1jpbWtG3K4mfCxMuSVKqoZ1B/e6kix\n7WuDWN0dsgf9ZuAUU61A9nuDatyALV/o\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 329, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3041020d1033e67e37b32b445580bf4efb02302ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad5215c51b320e460542f9cc38968ccdf4263684004eb79a452", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "041b8def5922303d647e8eb07e3bad92f924b79b769eef168e7541de1f4e0d28ae9733eb98cf8a1fb6dd52ca02c8c75b51c7aa4bf679d49d8114122074da8f6044a427371796a5654a6106162d5f686abb73ebd896ab08c7062687f12171fbe4a3", + "wx" : "1b8def5922303d647e8eb07e3bad92f924b79b769eef168e7541de1f4e0d28ae9733eb98cf8a1fb6dd52ca02c8c75b51", + "wy" : "00c7aa4bf679d49d8114122074da8f6044a427371796a5654a6106162d5f686abb73ebd896ab08c7062687f12171fbe4a3" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041b8def5922303d647e8eb07e3bad92f924b79b769eef168e7541de1f4e0d28ae9733eb98cf8a1fb6dd52ca02c8c75b51c7aa4bf679d49d8114122074da8f6044a427371796a5654a6106162d5f686abb73ebd896ab08c7062687f12171fbe4a3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEG43vWSIwPWR+jrB+O62S+SS3m3ae7xaO\ndUHeH04NKK6XM+uYz4oftt1SygLIx1tRx6pL9nnUnYEUEiB02o9gRKQnNxeWpWVK\nYQYWLV9oartz69iWqwjHBiaH8SFx++Sj\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 330, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "303602020100023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "041734a039a88a16c2ff4aa97d2399121f56f52ef01ed5e50887f736f65b6e51d6e8786abb4e063da5d1ba812dff998403ccd698e6c296d5cd69178f8a82481a865da331627f1c4b324fbc02b36e8b5ed58a31f728e904d203a388755302195765", + "wx" : "1734a039a88a16c2ff4aa97d2399121f56f52ef01ed5e50887f736f65b6e51d6e8786abb4e063da5d1ba812dff998403", + "wy" : "00ccd698e6c296d5cd69178f8a82481a865da331627f1c4b324fbc02b36e8b5ed58a31f728e904d203a388755302195765" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041734a039a88a16c2ff4aa97d2399121f56f52ef01ed5e50887f736f65b6e51d6e8786abb4e063da5d1ba812dff998403ccd698e6c296d5cd69178f8a82481a865da331627f1c4b324fbc02b36e8b5ed58a31f728e904d203a388755302195765", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEFzSgOaiKFsL/Sql9I5kSH1b1LvAe1eUI\nh/c29ltuUdboeGq7TgY9pdG6gS3/mYQDzNaY5sKW1c1pF4+Kgkgahl2jMWJ/HEsy\nT7wCs26LXtWKMfco6QTSA6OIdVMCGVdl\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 331, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "3041020d062522bbd3ecbe7c39e93e7c24023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0452ca47dda99172cb8321495acf988548295988ec973c1b4ea9462c53e5768a704a936410ee847b5dbf1e9d0c131da6c787a47027e6655792eb002d4228ee72f7c814c9a0cecbff267948f81c9903ac10eb35f6cb86369224ed609811cdf390f4", + "wx" : "52ca47dda99172cb8321495acf988548295988ec973c1b4ea9462c53e5768a704a936410ee847b5dbf1e9d0c131da6c7", + "wy" : "0087a47027e6655792eb002d4228ee72f7c814c9a0cecbff267948f81c9903ac10eb35f6cb86369224ed609811cdf390f4" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000452ca47dda99172cb8321495acf988548295988ec973c1b4ea9462c53e5768a704a936410ee847b5dbf1e9d0c131da6c787a47027e6655792eb002d4228ee72f7c814c9a0cecbff267948f81c9903ac10eb35f6cb86369224ed609811cdf390f4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEUspH3amRcsuDIUlaz5iFSClZiOyXPBtO\nqUYsU+V2inBKk2QQ7oR7Xb8enQwTHabHh6RwJ+ZlV5LrAC1CKO5y98gUyaDOy/8m\neUj4HJkDrBDrNfbLhjaSJO1gmBHN85D0\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 332, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "3065023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f3023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04bd3d91f003e18adbea73079d4eba23b91fc17fcec14c9eb15a193fbc9ca39c8c747cd7a2c9623e05dd587ccbb8ab4c443adb0a0706aa5ea7a68042082fccefc979612a7a1a3d694b00793b03f89bff866a8b97c8e77990c29360ce795036c764", + "wx" : "00bd3d91f003e18adbea73079d4eba23b91fc17fcec14c9eb15a193fbc9ca39c8c747cd7a2c9623e05dd587ccbb8ab4c44", + "wy" : "3adb0a0706aa5ea7a68042082fccefc979612a7a1a3d694b00793b03f89bff866a8b97c8e77990c29360ce795036c764" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004bd3d91f003e18adbea73079d4eba23b91fc17fcec14c9eb15a193fbc9ca39c8c747cd7a2c9623e05dd587ccbb8ab4c443adb0a0706aa5ea7a68042082fccefc979612a7a1a3d694b00793b03f89bff866a8b97c8e77990c29360ce795036c764", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEvT2R8APhitvqcwedTrojuR/Bf87BTJ6x\nWhk/vJyjnIx0fNeiyWI+Bd1YfMu4q0xEOtsKBwaqXqemgEIIL8zvyXlhKnoaPWlL\nAHk7A/ib/4Zqi5fI53mQwpNgznlQNsdk\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 333, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 334, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04f896353cc3a8afdd543ec3aef062ca97bc32ed1724ea38b940b8c0ea0e23b34187afbe70daf8dbaa5b511557e5d2bddac4bd265da67ceeafca636f6f4c0472f22a9d02e2289184f73bbb700ae8fc921eff4920f290bfcb49fbb232cc13a21028", + "wx" : "00f896353cc3a8afdd543ec3aef062ca97bc32ed1724ea38b940b8c0ea0e23b34187afbe70daf8dbaa5b511557e5d2bdda", + "wy" : "00c4bd265da67ceeafca636f6f4c0472f22a9d02e2289184f73bbb700ae8fc921eff4920f290bfcb49fbb232cc13a21028" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004f896353cc3a8afdd543ec3aef062ca97bc32ed1724ea38b940b8c0ea0e23b34187afbe70daf8dbaa5b511557e5d2bddac4bd265da67ceeafca636f6f4c0472f22a9d02e2289184f73bbb700ae8fc921eff4920f290bfcb49fbb232cc13a21028", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+JY1PMOor91UPsOu8GLKl7wy7Rck6ji5\nQLjA6g4js0GHr75w2vjbqltRFVfl0r3axL0mXaZ87q/KY29vTARy8iqdAuIokYT3\nO7twCuj8kh7/SSDykL/LSfuyMswTohAo\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 335, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "306402307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b9023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04370d9e2e31c712c8028092f802319d7fdf5b3319a8518d08bed3891508c7060cfe2236e18fa14fe077093ceae633e5430fd79aacf9d16ecc19b12d60fba4998dfc682702ec7c8bdd4a590035773b8c9c570ac7dcd414e03252f7a0e6f53b5863", + "wx" : "370d9e2e31c712c8028092f802319d7fdf5b3319a8518d08bed3891508c7060cfe2236e18fa14fe077093ceae633e543", + "wy" : "0fd79aacf9d16ecc19b12d60fba4998dfc682702ec7c8bdd4a590035773b8c9c570ac7dcd414e03252f7a0e6f53b5863" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004370d9e2e31c712c8028092f802319d7fdf5b3319a8518d08bed3891508c7060cfe2236e18fa14fe077093ceae633e5430fd79aacf9d16ecc19b12d60fba4998dfc682702ec7c8bdd4a590035773b8c9c570ac7dcd414e03252f7a0e6f53b5863", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAENw2eLjHHEsgCgJL4AjGdf99bMxmoUY0I\nvtOJFQjHBgz+Ijbhj6FP4HcJPOrmM+VDD9earPnRbswZsS1g+6SZjfxoJwLsfIvd\nSlkANXc7jJxXCsfc1BTgMlL3oOb1O1hj\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 336, + "comment" : "edge case for signature malleability", + "msg" : "313233343030", + "sig" : "306402307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b902307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04941e6cfa356e572dcccaeb594b06955d99dc4bf07958fc98ffa17de11c7521bf2c7aa8ff260952fcb7aac078ede67b4790a78a0296b041a10f003df1998da4cc4a1614ebcbf5d239431f33d90d3023edc1802e8db6dabcbae67cc314da2aabab", + "wx" : "00941e6cfa356e572dcccaeb594b06955d99dc4bf07958fc98ffa17de11c7521bf2c7aa8ff260952fcb7aac078ede67b47", + "wy" : "0090a78a0296b041a10f003df1998da4cc4a1614ebcbf5d239431f33d90d3023edc1802e8db6dabcbae67cc314da2aabab" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004941e6cfa356e572dcccaeb594b06955d99dc4bf07958fc98ffa17de11c7521bf2c7aa8ff260952fcb7aac078ede67b4790a78a0296b041a10f003df1998da4cc4a1614ebcbf5d239431f33d90d3023edc1802e8db6dabcbae67cc314da2aabab", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAElB5s+jVuVy3MyutZSwaVXZncS/B5WPyY\n/6F94Rx1Ib8seqj/JglS/LeqwHjt5ntHkKeKApawQaEPAD3xmY2kzEoWFOvL9dI5\nQx8z2Q0wI+3BgC6Nttq8uuZ8wxTaKqur\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 337, + "comment" : "edge case for signature malleability", + "msg" : "313233343030", + "sig" : "306402307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b902307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294ba", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "043ecfd58a3ce583866e0471d16eb3c10a411ec3b8671f3a04769b1ed8464a71cf1c76d8d9b7e3670bbe712d6f554a9383d980d8bedf57470d6b45cc1ad0c6426dc70a0e4be901106a36663bfcab04fcb86008777b92445120d5e3641d97396362", + "wx" : "3ecfd58a3ce583866e0471d16eb3c10a411ec3b8671f3a04769b1ed8464a71cf1c76d8d9b7e3670bbe712d6f554a9383", + "wy" : "00d980d8bedf57470d6b45cc1ad0c6426dc70a0e4be901106a36663bfcab04fcb86008777b92445120d5e3641d97396362" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200043ecfd58a3ce583866e0471d16eb3c10a411ec3b8671f3a04769b1ed8464a71cf1c76d8d9b7e3670bbe712d6f554a9383d980d8bedf57470d6b45cc1ad0c6426dc70a0e4be901106a36663bfcab04fcb86008777b92445120d5e3641d97396362", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEPs/Vijzlg4ZuBHHRbrPBCkEew7hnHzoE\ndpse2EZKcc8cdtjZt+NnC75xLW9VSpOD2YDYvt9XRw1rRcwa0MZCbccKDkvpARBq\nNmY7/KsE/LhgCHd7kkRRINXjZB2XOWNi\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 338, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "044150ccd0fa45aa2ef6b5042ddbb1b87c5ffd1115a8fe5995641948acda82a7b190762d84352cd74d1ca01e79f68f9cb4eb11be9d494c181c156e23e77e532bdf0a20c3cc74ba8c29b1f3eb2bd99129ee0d70ff0d593f0d7a6d6887e7c55930d2", + "wx" : "4150ccd0fa45aa2ef6b5042ddbb1b87c5ffd1115a8fe5995641948acda82a7b190762d84352cd74d1ca01e79f68f9cb4", + "wy" : "00eb11be9d494c181c156e23e77e532bdf0a20c3cc74ba8c29b1f3eb2bd99129ee0d70ff0d593f0d7a6d6887e7c55930d2" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200044150ccd0fa45aa2ef6b5042ddbb1b87c5ffd1115a8fe5995641948acda82a7b190762d84352cd74d1ca01e79f68f9cb4eb11be9d494c181c156e23e77e532bdf0a20c3cc74ba8c29b1f3eb2bd99129ee0d70ff0d593f0d7a6d6887e7c55930d2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEQVDM0PpFqi72tQQt27G4fF/9ERWo/lmV\nZBlIrNqCp7GQdi2ENSzXTRygHnn2j5y06xG+nUlMGBwVbiPnflMr3wogw8x0uowp\nsfPrK9mRKe4NcP8NWT8Nem1oh+fFWTDS\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 339, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec63260230064ed80f27e1432e84845f15ece399f2cbf4fa31aa837de9b953d44413b9f5c7c7f67989d703f07abef11b6ad0373ea5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04e78fe2c11beac7090ee0af7fed469a8ccebd3cccc4ee9fccc8ef3fc0455b69aaa082dc13e1d84f34026cb6f0af9e992ff34ebba71bf3a4050bf28e4084b5c5f5d4098ec46f10a31b02fb4bf20cc9362f6f02a66e802f817507535fac3ec0b099", + "wx" : "00e78fe2c11beac7090ee0af7fed469a8ccebd3cccc4ee9fccc8ef3fc0455b69aaa082dc13e1d84f34026cb6f0af9e992f", + "wy" : "00f34ebba71bf3a4050bf28e4084b5c5f5d4098ec46f10a31b02fb4bf20cc9362f6f02a66e802f817507535fac3ec0b099" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004e78fe2c11beac7090ee0af7fed469a8ccebd3cccc4ee9fccc8ef3fc0455b69aaa082dc13e1d84f34026cb6f0af9e992ff34ebba71bf3a4050bf28e4084b5c5f5d4098ec46f10a31b02fb4bf20cc9362f6f02a66e802f817507535fac3ec0b099", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE54/iwRvqxwkO4K9/7UaajM69PMzE7p/M\nyO8/wEVbaaqggtwT4dhPNAJstvCvnpkv8067pxvzpAUL8o5AhLXF9dQJjsRvEKMb\nAvtL8gzJNi9vAqZugC+BdQdTX6w+wLCZ\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 340, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04ee24ab8a34d05af684939357f32759cc5a14f3c717529a20aea8e0c5965d8a41e68925f688471994b72021ba51b28c090a55693c92ad0cbae9edcf515e2b4c060b888d82c81e4a3b6a173b62ed04a46fa95db1a2f3949980fba2e371263c4fa9", + "wx" : "00ee24ab8a34d05af684939357f32759cc5a14f3c717529a20aea8e0c5965d8a41e68925f688471994b72021ba51b28c09", + "wy" : "0a55693c92ad0cbae9edcf515e2b4c060b888d82c81e4a3b6a173b62ed04a46fa95db1a2f3949980fba2e371263c4fa9" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004ee24ab8a34d05af684939357f32759cc5a14f3c717529a20aea8e0c5965d8a41e68925f688471994b72021ba51b28c090a55693c92ad0cbae9edcf515e2b4c060b888d82c81e4a3b6a173b62ed04a46fa95db1a2f3949980fba2e371263c4fa9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE7iSrijTQWvaEk5NX8ydZzFoU88cXUpog\nrqjgxZZdikHmiSX2iEcZlLcgIbpRsowJClVpPJKtDLrp7c9RXitMBguIjYLIHko7\nahc7Yu0EpG+pXbGi85SZgPui43EmPE+p\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 341, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa84ecde56a2cf73ea3abc092185cb1a51f34810f1ddd8c64d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "043d2e916055c92e1b36133f5937b37c1b0102834eb77008a3ba9c3da446e9065971d68ba913091851e10cff5b4cd875c139aa7aadfc2caf7107b17ae1aea8b299d61bf15aca0cb3fd6f1ffde8192bfe58f0822bbbc1f55bddf6b4fe9c8f2b0eac", + "wx" : "3d2e916055c92e1b36133f5937b37c1b0102834eb77008a3ba9c3da446e9065971d68ba913091851e10cff5b4cd875c1", + "wy" : "39aa7aadfc2caf7107b17ae1aea8b299d61bf15aca0cb3fd6f1ffde8192bfe58f0822bbbc1f55bddf6b4fe9c8f2b0eac" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200043d2e916055c92e1b36133f5937b37c1b0102834eb77008a3ba9c3da446e9065971d68ba913091851e10cff5b4cd875c139aa7aadfc2caf7107b17ae1aea8b299d61bf15aca0cb3fd6f1ffde8192bfe58f0822bbbc1f55bddf6b4fe9c8f2b0eac", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEPS6RYFXJLhs2Ez9ZN7N8GwECg063cAij\nupw9pEbpBllx1oupEwkYUeEM/1tM2HXBOap6rfwsr3EHsXrhrqiymdYb8VrKDLP9\nbx/96Bkr/ljwgiu7wfVb3fa0/pyPKw6s\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 342, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0230533b0d50480a3ef07e7e8af8b1097759bc03ac9a1c7ed6075a052869f57f12b285613162d08ee7aab9fe54aaa984a39a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04ae596697427aa250156c05ac4338e48980a7f093ea1f1fe67098b43f6539c1b20ae74338f9bf270d33663c50abe8fd001ca6a52732db74ab15d2f249a3d839080f898367dfd64992cdce2708deaad523a2a236b43400424241c91a35b530fa50", + "wx" : "00ae596697427aa250156c05ac4338e48980a7f093ea1f1fe67098b43f6539c1b20ae74338f9bf270d33663c50abe8fd00", + "wy" : "1ca6a52732db74ab15d2f249a3d839080f898367dfd64992cdce2708deaad523a2a236b43400424241c91a35b530fa50" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004ae596697427aa250156c05ac4338e48980a7f093ea1f1fe67098b43f6539c1b20ae74338f9bf270d33663c50abe8fd001ca6a52732db74ab15d2f249a3d839080f898367dfd64992cdce2708deaad523a2a236b43400424241c91a35b530fa50", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAErllml0J6olAVbAWsQzjkiYCn8JPqHx/m\ncJi0P2U5wbIK50M4+b8nDTNmPFCr6P0AHKalJzLbdKsV0vJJo9g5CA+Jg2ff1kmS\nzc4nCN6q1SOioja0NABCQkHJGjW1MPpQ\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 343, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d49a253986bbaa8ce9c3d3808313d39c3b950a478372edc009bc0566b73be7b05dad0737e16960257cc16db6ec6c620f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0488738f9981dd4d1fabb60ad83c2dd6dfc9da302209ae3e53498a883b6e39a38bead9b02709f352d3e6b6578154eab2529388a05c6b9f3a4028abb9950a51f5264ecd7580a423fdec9472faeeb57f92e31c46bef2a781fe5edad026009f198262", + "wx" : "0088738f9981dd4d1fabb60ad83c2dd6dfc9da302209ae3e53498a883b6e39a38bead9b02709f352d3e6b6578154eab252", + "wy" : "009388a05c6b9f3a4028abb9950a51f5264ecd7580a423fdec9472faeeb57f92e31c46bef2a781fe5edad026009f198262" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000488738f9981dd4d1fabb60ad83c2dd6dfc9da302209ae3e53498a883b6e39a38bead9b02709f352d3e6b6578154eab2529388a05c6b9f3a4028abb9950a51f5264ecd7580a423fdec9472faeeb57f92e31c46bef2a781fe5edad026009f198262", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEiHOPmYHdTR+rtgrYPC3W38naMCIJrj5T\nSYqIO245o4vq2bAnCfNS0+a2V4FU6rJSk4igXGufOkAoq7mVClH1Jk7NdYCkI/3s\nlHL67rV/kuMcRr7yp4H+XtrQJgCfGYJi\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 344, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd0230285090b0d6a6820bbba394efbee5c24a2281e825d2f6c55fb7a85b8251db00f75ab07cc993ceaf664f3c116baf34b021", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04f421541311c94fdd79fc298f8ab1a3adfd08029fdad439a94d4cea11f7e799bc439609f2fb7be3f349d55e484d0a0d36b35330bbdbec1e75f2984483d96bf210d722c1830292ffc35a2f6a21a4b50519f565f024bbccc97228a2f8ad8fadc0d5", + "wx" : "00f421541311c94fdd79fc298f8ab1a3adfd08029fdad439a94d4cea11f7e799bc439609f2fb7be3f349d55e484d0a0d36", + "wy" : "00b35330bbdbec1e75f2984483d96bf210d722c1830292ffc35a2f6a21a4b50519f565f024bbccc97228a2f8ad8fadc0d5" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004f421541311c94fdd79fc298f8ab1a3adfd08029fdad439a94d4cea11f7e799bc439609f2fb7be3f349d55e484d0a0d36b35330bbdbec1e75f2984483d96bf210d722c1830292ffc35a2f6a21a4b50519f565f024bbccc97228a2f8ad8fadc0d5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE9CFUExHJT915/CmPirGjrf0IAp/a1Dmp\nTUzqEffnmbxDlgny+3vj80nVXkhNCg02s1Mwu9vsHnXymESD2WvyENciwYMCkv/D\nWi9qIaS1BRn1ZfAku8zJciii+K2PrcDV\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 345, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b39af4a81ee4ae79064ed80f27e1432e84845f15ece399f2a43d2505a0a8c72c5731f4fd967420b1000e3f75502ed7b7", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04399be4cfc439f94f2421cbd34c2cd90bae53eb60ddfafca52f7275d165d14fa659b636713b5d4b39e62fd48bae141d0e1b23e3b4f0c202ed7b59db78a35c12ac698c603eab144fd09ac2ed8f4495f607e4d2c87a23ce2ec33e410ca47ecc2555", + "wx" : "399be4cfc439f94f2421cbd34c2cd90bae53eb60ddfafca52f7275d165d14fa659b636713b5d4b39e62fd48bae141d0e", + "wy" : "1b23e3b4f0c202ed7b59db78a35c12ac698c603eab144fd09ac2ed8f4495f607e4d2c87a23ce2ec33e410ca47ecc2555" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004399be4cfc439f94f2421cbd34c2cd90bae53eb60ddfafca52f7275d165d14fa659b636713b5d4b39e62fd48bae141d0e1b23e3b4f0c202ed7b59db78a35c12ac698c603eab144fd09ac2ed8f4495f607e4d2c87a23ce2ec33e410ca47ecc2555", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEOZvkz8Q5+U8kIcvTTCzZC65T62Dd+vyl\nL3J10WXRT6ZZtjZxO11LOeYv1IuuFB0OGyPjtPDCAu17Wdt4o1wSrGmMYD6rFE/Q\nmsLtj0SV9gfk0sh6I84uwz5BDKR+zCVV\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 346, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100af4a81ee4ae79064ed80f27e1432e84845f15ece399f2cbf28df829ccd30f5ef62ec23957b837d73fe4e156edccd4465", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "041578bbff72137c4bca33d7385a892be94cb059f9091ddfe890345f712a9fba5fc77084cec11084ed048491604a07f66c76bbaa872f0710d82a08d9dddd833c7be7c7e8e265f49145157eb4e8e8280076a37ee5873271db510034da19da24415b", + "wx" : "1578bbff72137c4bca33d7385a892be94cb059f9091ddfe890345f712a9fba5fc77084cec11084ed048491604a07f66c", + "wy" : "76bbaa872f0710d82a08d9dddd833c7be7c7e8e265f49145157eb4e8e8280076a37ee5873271db510034da19da24415b" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041578bbff72137c4bca33d7385a892be94cb059f9091ddfe890345f712a9fba5fc77084cec11084ed048491604a07f66c76bbaa872f0710d82a08d9dddd833c7be7c7e8e265f49145157eb4e8e8280076a37ee5873271db510034da19da24415b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEFXi7/3ITfEvKM9c4Wokr6UywWfkJHd/o\nkDRfcSqful/HcITOwRCE7QSEkWBKB/Zsdruqhy8HENgqCNnd3YM8e+fH6OJl9JFF\nFX606OgoAHajfuWHMnHbUQA02hnaJEFb\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 347, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02305e9503dc95cf20c9db01e4fc2865d0908be2bd9c733e597e8a5bb7b7a62abdff6dbe3978ae56536d0fb01172ecd55f57", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0433ba451c85e729058f83041077a4695eb47df93e718b09a4618c753ac803cd75c1a91290c2ff5a635389d07149571dab1fc7d8a71776851ff244ff632fe6f92e1652e5284893c4244fe775d8efc589d823dd03f3919027f004537bd8ee09f3a3", + "wx" : "33ba451c85e729058f83041077a4695eb47df93e718b09a4618c753ac803cd75c1a91290c2ff5a635389d07149571dab", + "wy" : "1fc7d8a71776851ff244ff632fe6f92e1652e5284893c4244fe775d8efc589d823dd03f3919027f004537bd8ee09f3a3" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000433ba451c85e729058f83041077a4695eb47df93e718b09a4618c753ac803cd75c1a91290c2ff5a635389d07149571dab1fc7d8a71776851ff244ff632fe6f92e1652e5284893c4244fe775d8efc589d823dd03f3919027f004537bd8ee09f3a3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEM7pFHIXnKQWPgwQQd6RpXrR9+T5xiwmk\nYYx1OsgDzXXBqRKQwv9aY1OJ0HFJVx2rH8fYpxd2hR/yRP9jL+b5LhZS5ShIk8Qk\nT+d12O/Fidgj3QPzkZAn8ARTe9juCfOj\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 348, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02301ee4ae79064ed80f27e1432e84845f15ece399f2cbf4fa31a3ae8edab84dc3330a39f70938e3912bd59753de5aed3088", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04040771e3390216fed2c6208bdf5bfea83ab1915b166e626569f12efd410a39b7e7c76f70f0012843a26debf4ccc33ddae5bc5f7e62d054eac31cd022afdb71b7c638f24c30cbad0ef35ed2fc9917f356e9c3f04391b21d1035274b81537fcbf3", + "wx" : "040771e3390216fed2c6208bdf5bfea83ab1915b166e626569f12efd410a39b7e7c76f70f0012843a26debf4ccc33dda", + "wy" : "00e5bc5f7e62d054eac31cd022afdb71b7c638f24c30cbad0ef35ed2fc9917f356e9c3f04391b21d1035274b81537fcbf3" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004040771e3390216fed2c6208bdf5bfea83ab1915b166e626569f12efd410a39b7e7c76f70f0012843a26debf4ccc33ddae5bc5f7e62d054eac31cd022afdb71b7c638f24c30cbad0ef35ed2fc9917f356e9c3f04391b21d1035274b81537fcbf3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEBAdx4zkCFv7SxiCL31v+qDqxkVsWbmJl\nafEu/UEKObfnx29w8AEoQ6Jt6/TMwz3a5bxffmLQVOrDHNAir9txt8Y48kwwy60O\n817S/JkX81bpw/BDkbIdEDUnS4FTf8vz\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 349, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100bb51cd3ba8eb201f53ddb4e34e08c0ff7dff9378106784d798d5a3440bd6dc34be3a0eaef8776619a0c97fefb15720b3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0498d3f16e1c510a933e648e78d01588319f002e9475df8942a2a89db0666bb7c88b32bb248140e44ac4ab28111b2b792399a926f4a66fbe28ff65c09f8306893aec094b89d0fe529e3577c5ecf30a7944caaf530f4575eb113fcf4c200d2dd4bd", + "wx" : "0098d3f16e1c510a933e648e78d01588319f002e9475df8942a2a89db0666bb7c88b32bb248140e44ac4ab28111b2b7923", + "wy" : "0099a926f4a66fbe28ff65c09f8306893aec094b89d0fe529e3577c5ecf30a7944caaf530f4575eb113fcf4c200d2dd4bd" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000498d3f16e1c510a933e648e78d01588319f002e9475df8942a2a89db0666bb7c88b32bb248140e44ac4ab28111b2b792399a926f4a66fbe28ff65c09f8306893aec094b89d0fe529e3577c5ecf30a7944caaf530f4575eb113fcf4c200d2dd4bd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEmNPxbhxRCpM+ZI540BWIMZ8ALpR134lC\noqidsGZrt8iLMrskgUDkSsSrKBEbK3kjmakm9KZvvij/ZcCfgwaJOuwJS4nQ/lKe\nNXfF7PMKeUTKr1MPRXXrET/PTCANLdS9\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 350, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100e707e267ea635384a6da09823149f5cb7acbb29e910d2630c5fb5afbc42aa8436349b214a3b8fb9481ec999e005091f8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04d1fd602feef80be9e55a19d1a9799c72a899110c6ac21fb3c21357069809d591a8775b64d1867a8cfff124f6a5e3a4f5f9548064f01b9af8868705493a37a037193b48f53b7c7973023f53e6ceff6830ca2f7a14ef51536d453af43b3058d8a9", + "wx" : "00d1fd602feef80be9e55a19d1a9799c72a899110c6ac21fb3c21357069809d591a8775b64d1867a8cfff124f6a5e3a4f5", + "wy" : "00f9548064f01b9af8868705493a37a037193b48f53b7c7973023f53e6ceff6830ca2f7a14ef51536d453af43b3058d8a9" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004d1fd602feef80be9e55a19d1a9799c72a899110c6ac21fb3c21357069809d591a8775b64d1867a8cfff124f6a5e3a4f5f9548064f01b9af8868705493a37a037193b48f53b7c7973023f53e6ceff6830ca2f7a14ef51536d453af43b3058d8a9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0f1gL+74C+nlWhnRqXmccqiZEQxqwh+z\nwhNXBpgJ1ZGod1tk0YZ6jP/xJPal46T1+VSAZPAbmviGhwVJOjegNxk7SPU7fHlz\nAj9T5s7/aDDKL3oU71FTbUU69DswWNip\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 351, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100acc4f2afb7f5c10f818175074ef688a643fc5365e38129f86d5e2517feb81b2cd2b8dc4f7821bfd032edc4c0234085d9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0482f37604f66664c2883dba6d98397c281045cbf59f1d16dddb1381126a246553a8b4d2aaea48ad9185a1645f65567d318a4d7b19f1d2e4434c9a8ecad396304abc82221bbab0679935071c72fd975e7b021c04b1d16ea36fc2d051ef5a8e117c", + "wx" : "0082f37604f66664c2883dba6d98397c281045cbf59f1d16dddb1381126a246553a8b4d2aaea48ad9185a1645f65567d31", + "wy" : "008a4d7b19f1d2e4434c9a8ecad396304abc82221bbab0679935071c72fd975e7b021c04b1d16ea36fc2d051ef5a8e117c" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000482f37604f66664c2883dba6d98397c281045cbf59f1d16dddb1381126a246553a8b4d2aaea48ad9185a1645f65567d318a4d7b19f1d2e4434c9a8ecad396304abc82221bbab0679935071c72fd975e7b021c04b1d16ea36fc2d051ef5a8e117c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEgvN2BPZmZMKIPbptmDl8KBBFy/WfHRbd\n2xOBEmokZVOotNKq6kitkYWhZF9lVn0xik17GfHS5ENMmo7K05YwSryCIhu6sGeZ\nNQcccv2XXnsCHASx0W6jb8LQUe9ajhF8\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 352, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02310083276c0793f0a19742422f8af671ccf965fa7d18d541bef4c05b90e303f891d39008439e0fda4bfad5ee9a6ace7e340c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04f052dfc27bf8a6d36f3739f239b981f5b53fe08d999ec683b01e43e7596156206ba08b8b9f59229e2fbdce05f1e40f9990f0fdfb7029f9b3e8c6144dad0339208b7cdcb3820a554259db9d27afdd18f4a750296c59bad6b62df076f90d53be0d", + "wx" : "00f052dfc27bf8a6d36f3739f239b981f5b53fe08d999ec683b01e43e7596156206ba08b8b9f59229e2fbdce05f1e40f99", + "wy" : "0090f0fdfb7029f9b3e8c6144dad0339208b7cdcb3820a554259db9d27afdd18f4a750296c59bad6b62df076f90d53be0d" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004f052dfc27bf8a6d36f3739f239b981f5b53fe08d999ec683b01e43e7596156206ba08b8b9f59229e2fbdce05f1e40f9990f0fdfb7029f9b3e8c6144dad0339208b7cdcb3820a554259db9d27afdd18f4a750296c59bad6b62df076f90d53be0d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE8FLfwnv4ptNvNznyObmB9bU/4I2ZnsaD\nsB5D51lhViBroIuLn1kini+9zgXx5A+ZkPD9+3Ap+bPoxhRNrQM5IIt83LOCClVC\nWdudJ6/dGPSnUClsWbrWti3wdvkNU74N\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 353, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100942848586b534105ddd1ca77df72e1251140f412e97b62afbf85d4822309176b5965453dee3fab709e14156b3dfcecca", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04f877bd6e2a9273e322a3298ea3add13d1104b32172283669ca6688f0cb591524a7f15dd41496681eda98939aae729fede85ca37c81ef19e3dc9ab16908a3720d86875a51a6a6d932e37492a6ec7a344eabc482377f14891fbd1da7faeffa1178", + "wx" : "00f877bd6e2a9273e322a3298ea3add13d1104b32172283669ca6688f0cb591524a7f15dd41496681eda98939aae729fed", + "wy" : "00e85ca37c81ef19e3dc9ab16908a3720d86875a51a6a6d932e37492a6ec7a344eabc482377f14891fbd1da7faeffa1178" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004f877bd6e2a9273e322a3298ea3add13d1104b32172283669ca6688f0cb591524a7f15dd41496681eda98939aae729fede85ca37c81ef19e3dc9ab16908a3720d86875a51a6a6d932e37492a6ec7a344eabc482377f14891fbd1da7faeffa1178", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+He9biqSc+MioymOo63RPREEsyFyKDZp\nymaI8MtZFSSn8V3UFJZoHtqYk5qucp/t6FyjfIHvGePcmrFpCKNyDYaHWlGmptky\n43SSpux6NE6rxII3fxSJH70dp/rv+hF4\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 354, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffed2119d5fc12649fc808af3b6d9037d3a44eb32399970dd0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0414249bbcfeeceab06c75654d361c0df8d56b320ea3bc1d4627ec0a2f4b8fa3577445694664f569a91f480741381e494a28479f2186d715a56788f67073056aa0cb0b6a7f7893e77b9a6976ef6663d80226896d7f43bb502e1b4d49558a27dd8b", + "wx" : "14249bbcfeeceab06c75654d361c0df8d56b320ea3bc1d4627ec0a2f4b8fa3577445694664f569a91f480741381e494a", + "wy" : "28479f2186d715a56788f67073056aa0cb0b6a7f7893e77b9a6976ef6663d80226896d7f43bb502e1b4d49558a27dd8b" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000414249bbcfeeceab06c75654d361c0df8d56b320ea3bc1d4627ec0a2f4b8fa3577445694664f569a91f480741381e494a28479f2186d715a56788f67073056aa0cb0b6a7f7893e77b9a6976ef6663d80226896d7f43bb502e1b4d49558a27dd8b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEFCSbvP7s6rBsdWVNNhwN+NVrMg6jvB1G\nJ+wKL0uPo1d0RWlGZPVpqR9IB0E4HklKKEefIYbXFaVniPZwcwVqoMsLan94k+d7\nmml272Zj2AImiW1/Q7tQLhtNSVWKJ92L\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 355, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023079b95c013b0472de04d8faeec3b779c39fe729ea84fb554cd091c7178c2f054eabbc62c3e1cfbac2c2e69d7aa45d9072", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0450a438c98ee94025ce13e27d36b8280d4843585836eb47011a070cd77729245684a0db31fde980620349c796832b2c6cbdb72dba9f3f9cc878559f50b6bd1290f10a6bccbc1eeef7708b1b72059022987979e35221c51259f337c7288a2f86bc", + "wx" : "50a438c98ee94025ce13e27d36b8280d4843585836eb47011a070cd77729245684a0db31fde980620349c796832b2c6c", + "wy" : "00bdb72dba9f3f9cc878559f50b6bd1290f10a6bccbc1eeef7708b1b72059022987979e35221c51259f337c7288a2f86bc" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000450a438c98ee94025ce13e27d36b8280d4843585836eb47011a070cd77729245684a0db31fde980620349c796832b2c6cbdb72dba9f3f9cc878559f50b6bd1290f10a6bccbc1eeef7708b1b72059022987979e35221c51259f337c7288a2f86bc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEUKQ4yY7pQCXOE+J9NrgoDUhDWFg260cB\nGgcM13cpJFaEoNsx/emAYgNJx5aDKyxsvbctup8/nMh4VZ9Qtr0SkPEKa8y8Hu73\ncIsbcgWQIph5eeNSIcUSWfM3xyiKL4a8\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 356, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100bfd40d0caa4d9d42381f3d72a25683f52b03a1ed96fb72d03f08dcb9a8bc8f23c1a459deab03bcd39396c0d1e9053c81", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "044d3fc5dcfaf741113cda3ce2f8dff4c912143e4d36314c361d7ed5656b68448bcca114ba9e8124281234660b7726ddcd680ddfef7ea07bfbcede10803d38d7211631ca11466078819eb66e11921ab7ffa3c4560c732e77595fd408e917dd9afc", + "wx" : "4d3fc5dcfaf741113cda3ce2f8dff4c912143e4d36314c361d7ed5656b68448bcca114ba9e8124281234660b7726ddcd", + "wy" : "680ddfef7ea07bfbcede10803d38d7211631ca11466078819eb66e11921ab7ffa3c4560c732e77595fd408e917dd9afc" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200044d3fc5dcfaf741113cda3ce2f8dff4c912143e4d36314c361d7ed5656b68448bcca114ba9e8124281234660b7726ddcd680ddfef7ea07bfbcede10803d38d7211631ca11466078819eb66e11921ab7ffa3c4560c732e77595fd408e917dd9afc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAETT/F3Pr3QRE82jzi+N/0yRIUPk02MUw2\nHX7VZWtoRIvMoRS6noEkKBI0Zgt3Jt3NaA3f736ge/vO3hCAPTjXIRYxyhFGYHiB\nnrZuEZIat/+jxFYMcy53WV/UCOkX3Zr8\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 357, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02304c7d219db9af94ce7fffffffffffffffffffffffffffffffef15cf1058c8d8ba1e634c4122db95ec1facd4bb13ebf09a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0463d65cdfeb1f1a42000f43bd1ddd130537a7b6f635e8d2bd81a97da168221183da433ca78429fd2b33c5f94895a9c13aa9d1d5ea328725653a5a9d00f85a5516236f3b1428a8629287d3b0487a2e82dd57f93bb2aa3d9783dc74131e13756034", + "wx" : "63d65cdfeb1f1a42000f43bd1ddd130537a7b6f635e8d2bd81a97da168221183da433ca78429fd2b33c5f94895a9c13a", + "wy" : "00a9d1d5ea328725653a5a9d00f85a5516236f3b1428a8629287d3b0487a2e82dd57f93bb2aa3d9783dc74131e13756034" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000463d65cdfeb1f1a42000f43bd1ddd130537a7b6f635e8d2bd81a97da168221183da433ca78429fd2b33c5f94895a9c13aa9d1d5ea328725653a5a9d00f85a5516236f3b1428a8629287d3b0487a2e82dd57f93bb2aa3d9783dc74131e13756034", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEY9Zc3+sfGkIAD0O9Hd0TBTentvY16NK9\ngal9oWgiEYPaQzynhCn9KzPF+UiVqcE6qdHV6jKHJWU6Wp0A+FpVFiNvOxQoqGKS\nh9OwSHougt1X+Tuyqj2Xg9x0Ex4TdWA0\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 358, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d219db9af94ce7ffffffffffffffffffffffffffffffffffd189bdb6d9ef7be8504ca374756ea5b8f15e44067d209b9b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04d22c9c348b9745711f57debac3a07df90a527c06bd02a8454f41437d54224e071698f03fdc64b1d652414edc3f2239c49ae9812a4b92f099d6659a659691768d57e530ed3c91d5455781605850997a58221f22a2451c3932470606c23f3ab1b8", + "wx" : "00d22c9c348b9745711f57debac3a07df90a527c06bd02a8454f41437d54224e071698f03fdc64b1d652414edc3f2239c4", + "wy" : "009ae9812a4b92f099d6659a659691768d57e530ed3c91d5455781605850997a58221f22a2451c3932470606c23f3ab1b8" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004d22c9c348b9745711f57debac3a07df90a527c06bd02a8454f41437d54224e071698f03fdc64b1d652414edc3f2239c49ae9812a4b92f099d6659a659691768d57e530ed3c91d5455781605850997a58221f22a2451c3932470606c23f3ab1b8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0iycNIuXRXEfV966w6B9+QpSfAa9AqhF\nT0FDfVQiTgcWmPA/3GSx1lJBTtw/IjnEmumBKkuS8JnWZZpllpF2jVflMO08kdVF\nV4FgWFCZelgiHyKiRRw5MkcGBsI/OrG4\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 359, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a433b735f299cfffffffffffffffffffffffffffffffffffdbb02debbfa7c9f1487f3936a22ca3f6f5d06ea22d7c0dc3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0431f05c0c29e9da49aa2fbbedee770c68d10f85e7f77e72ac3cfa9c8623a2bb42eeb2f24ac8f2aef7ab0c4b47823140035bb32fc1ec04bbff5eab96e070c938ba1b53fe63970f649ae02e2a4ada420a249b6f7c525e2c4b9b0d5562ae26f2278c", + "wx" : "31f05c0c29e9da49aa2fbbedee770c68d10f85e7f77e72ac3cfa9c8623a2bb42eeb2f24ac8f2aef7ab0c4b4782314003", + "wy" : "5bb32fc1ec04bbff5eab96e070c938ba1b53fe63970f649ae02e2a4ada420a249b6f7c525e2c4b9b0d5562ae26f2278c" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000431f05c0c29e9da49aa2fbbedee770c68d10f85e7f77e72ac3cfa9c8623a2bb42eeb2f24ac8f2aef7ab0c4b47823140035bb32fc1ec04bbff5eab96e070c938ba1b53fe63970f649ae02e2a4ada420a249b6f7c525e2c4b9b0d5562ae26f2278c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEMfBcDCnp2kmqL7vt7ncMaNEPhef3fnKs\nPPqchiOiu0LusvJKyPKu96sMS0eCMUADW7MvwewEu/9eq5bgcMk4uhtT/mOXD2Sa\n4C4qStpCCiSbb3xSXixLmw1VYq4m8ieM\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 360, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b9af94ce7fffffffffffffffffffffffffffffffffffffffd6efeefc876c9f23217b443c80637ef939e911219f96c179", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04bc26eec95e26c980bc0334264cbcfc26b897c3571c96ce9ab2a67b49bb0f26a6272fdc27806d7a4c572ae0f78149f1f3c8af5f41b99d2066018165513fb3b55e4255dcd0659647ed55e1e2602cae4efbd6eae1dfe2ff63e2c748d4acc7430139", + "wx" : "00bc26eec95e26c980bc0334264cbcfc26b897c3571c96ce9ab2a67b49bb0f26a6272fdc27806d7a4c572ae0f78149f1f3", + "wy" : "00c8af5f41b99d2066018165513fb3b55e4255dcd0659647ed55e1e2602cae4efbd6eae1dfe2ff63e2c748d4acc7430139" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004bc26eec95e26c980bc0334264cbcfc26b897c3571c96ce9ab2a67b49bb0f26a6272fdc27806d7a4c572ae0f78149f1f3c8af5f41b99d2066018165513fb3b55e4255dcd0659647ed55e1e2602cae4efbd6eae1dfe2ff63e2c748d4acc7430139", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEvCbuyV4myYC8AzQmTLz8JriXw1ccls6a\nsqZ7SbsPJqYnL9wngG16TFcq4PeBSfHzyK9fQbmdIGYBgWVRP7O1XkJV3NBllkft\nVeHiYCyuTvvW6uHf4v9j4sdI1KzHQwE5\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 361, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a276276276276276276276276276276276276276276276273d7228d4f84b769be0fd57b97e4c1ebcae9a5f635e80e9df", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "046fa0964dd054250af176891c0c822b013b70f059c347172cafc6b36cd16cf3b0f9d19f2598bd0d580ac16c46acb167d4375bef701c002dcc040fd54824b14cc2df0154eb20e74464e1fe7b833426dd7d636bf2d79603fdde5ddaab23ab0cf426", + "wx" : "6fa0964dd054250af176891c0c822b013b70f059c347172cafc6b36cd16cf3b0f9d19f2598bd0d580ac16c46acb167d4", + "wy" : "375bef701c002dcc040fd54824b14cc2df0154eb20e74464e1fe7b833426dd7d636bf2d79603fdde5ddaab23ab0cf426" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200046fa0964dd054250af176891c0c822b013b70f059c347172cafc6b36cd16cf3b0f9d19f2598bd0d580ac16c46acb167d4375bef701c002dcc040fd54824b14cc2df0154eb20e74464e1fe7b833426dd7d636bf2d79603fdde5ddaab23ab0cf426", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEb6CWTdBUJQrxdokcDIIrATtw8FnDRxcs\nr8azbNFs87D50Z8lmL0NWArBbEassWfUN1vvcBwALcwED9VIJLFMwt8BVOsg50Rk\n4f57gzQm3X1ja/LXlgP93l3aqyOrDPQm\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 362, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023073333333333333333333333333333333333333333333333316e4d9f42d4eca22df403a0c578b86f0a9a93fe89995c7ed", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04baa4e712ee0786a5ab0e5a5dafdcdcf87b38830ab2ec86faedda9fdf65332f6a9688269412f050356530d4664a7fb8cdecc46a901b016e6bb8a336ad9aa6f19abf9ada69705d1c905beafb95a44f52af43de4bf80c050cf996b7796dfcee8e1b", + "wx" : "00baa4e712ee0786a5ab0e5a5dafdcdcf87b38830ab2ec86faedda9fdf65332f6a9688269412f050356530d4664a7fb8cd", + "wy" : "00ecc46a901b016e6bb8a336ad9aa6f19abf9ada69705d1c905beafb95a44f52af43de4bf80c050cf996b7796dfcee8e1b" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004baa4e712ee0786a5ab0e5a5dafdcdcf87b38830ab2ec86faedda9fdf65332f6a9688269412f050356530d4664a7fb8cdecc46a901b016e6bb8a336ad9aa6f19abf9ada69705d1c905beafb95a44f52af43de4bf80c050cf996b7796dfcee8e1b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEuqTnEu4HhqWrDlpdr9zc+Hs4gwqy7Ib6\n7dqf32UzL2qWiCaUEvBQNWUw1GZKf7jN7MRqkBsBbmu4ozatmqbxmr+a2mlwXRyQ\nW+r7laRPUq9D3kv4DAUM+Za3eW387o4b\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 363, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffda4233abf824c93f90115e76db206fa7489d6647332e1ba3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0481e78a52ae0695583f7a601ab9b6fbfaf434f2befa1f8c833d59deb627a927c2f42d48eb617fe042f584e105c23c2317cf22d565f5f3b425ef7937df629b6864dac71264b288c1a987210f523071319ce3f64411910ac23765c4266e615112bc", + "wx" : "0081e78a52ae0695583f7a601ab9b6fbfaf434f2befa1f8c833d59deb627a927c2f42d48eb617fe042f584e105c23c2317", + "wy" : "00cf22d565f5f3b425ef7937df629b6864dac71264b288c1a987210f523071319ce3f64411910ac23765c4266e615112bc" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000481e78a52ae0695583f7a601ab9b6fbfaf434f2befa1f8c833d59deb627a927c2f42d48eb617fe042f584e105c23c2317cf22d565f5f3b425ef7937df629b6864dac71264b288c1a987210f523071319ce3f64411910ac23765c4266e615112bc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEgeeKUq4GlVg/emAaubb7+vQ08r76H4yD\nPVnetiepJ8L0LUjrYX/gQvWE4QXCPCMXzyLVZfXztCXveTffYptoZNrHEmSyiMGp\nhyEPUjBxMZzj9kQRkQrCN2XEJm5hURK8\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 364, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02303fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294bb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0441fa8765b19d3108031e28c9a781a385c9c10b2bfd42e6437e5c4bd711cf2a031750847d17a82f9376a30ae182a6d6e71c20af96324147d4155a4d0c867ca8e36eba204fbed2087e0fcbdc8baabe07bb3123f9f7259e771cd9f1ad17d1a23787", + "wx" : "41fa8765b19d3108031e28c9a781a385c9c10b2bfd42e6437e5c4bd711cf2a031750847d17a82f9376a30ae182a6d6e7", + "wy" : "1c20af96324147d4155a4d0c867ca8e36eba204fbed2087e0fcbdc8baabe07bb3123f9f7259e771cd9f1ad17d1a23787" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000441fa8765b19d3108031e28c9a781a385c9c10b2bfd42e6437e5c4bd711cf2a031750847d17a82f9376a30ae182a6d6e71c20af96324147d4155a4d0c867ca8e36eba204fbed2087e0fcbdc8baabe07bb3123f9f7259e771cd9f1ad17d1a23787", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEQfqHZbGdMQgDHijJp4GjhcnBCyv9QuZD\nflxL1xHPKgMXUIR9F6gvk3ajCuGCptbnHCCvljJBR9QVWk0Mhnyo4266IE++0gh+\nD8vci6q+B7sxI/n3JZ53HNnxrRfRojeH\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 365, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100dfea06865526cea11c0f9eb9512b41fa9581d0f6cb7db9680336151dce79de818cdf33c879da322740416d1e5ae532fa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86b572c1e06dd2c7b94b873f0578fcb2b99d60e246e51245d0804edd44b32f0f000c8f8f88f1d4a65fea51dbbb4ab1e2823", + "wx" : "00e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86b", + "wy" : "572c1e06dd2c7b94b873f0578fcb2b99d60e246e51245d0804edd44b32f0f000c8f8f88f1d4a65fea51dbbb4ab1e2823" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86b572c1e06dd2c7b94b873f0578fcb2b99d60e246e51245d0804edd44b32f0f000c8f8f88f1d4a65fea51dbbb4ab1e2823", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE5YWgZ9bf83rn8X+BWDEZthKRWXNF8Qes\n/+I3oI9IhtT9+U/mMYLmFDyZviWnt9hrVyweBt0se5S4c/BXj8srmdYOJG5RJF0I\nBO3USzLw8ADI+PiPHUpl/qUdu7SrHigj\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 366, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "3065023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023064adb4d51a93f96bed4665de2d4e1169cc95819ec6e9333edfd5c07ca134ceef7c95957b719ae349fc439eaa49fbbe34", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86ba8d3e1f922d3846b478c0fa87034d46629f1db91aedba2f7fb122bb4cd0f0ffe3707076fe2b59a015ae2444c54e1d7dc", + "wx" : "00e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86b", + "wy" : "00a8d3e1f922d3846b478c0fa87034d46629f1db91aedba2f7fb122bb4cd0f0ffe3707076fe2b59a015ae2444c54e1d7dc" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004e585a067d6dff37ae7f17f81583119b61291597345f107acffe237a08f4886d4fdf94fe63182e6143c99be25a7b7d86ba8d3e1f922d3846b478c0fa87034d46629f1db91aedba2f7fb122bb4cd0f0ffe3707076fe2b59a015ae2444c54e1d7dc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE5YWgZ9bf83rn8X+BWDEZthKRWXNF8Qes\n/+I3oI9IhtT9+U/mMYLmFDyZviWnt9hrqNPh+SLThGtHjA+ocDTUZinx25Gu26L3\n+xIrtM0PD/43Bwdv4rWaAVriRExU4dfc\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 367, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "3065023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023064adb4d51a93f96bed4665de2d4e1169cc95819ec6e9333edfd5c07ca134ceef7c95957b719ae349fc439eaa49fbbe34", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04b4d78cccbced8065c0ebdc330b4670ec99309273e442b9be341196c1043e4441fc57b914085595bfc755c64fc409f0ba01fee31cbbbaed5c1323f09c87df9b0712c12e99733fa23ef91b4e6ca666b09dd7540ebf1068a15155bc069e3d595c8c", + "wx" : "00b4d78cccbced8065c0ebdc330b4670ec99309273e442b9be341196c1043e4441fc57b914085595bfc755c64fc409f0ba", + "wy" : "01fee31cbbbaed5c1323f09c87df9b0712c12e99733fa23ef91b4e6ca666b09dd7540ebf1068a15155bc069e3d595c8c" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004b4d78cccbced8065c0ebdc330b4670ec99309273e442b9be341196c1043e4441fc57b914085595bfc755c64fc409f0ba01fee31cbbbaed5c1323f09c87df9b0712c12e99733fa23ef91b4e6ca666b09dd7540ebf1068a15155bc069e3d595c8c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEtNeMzLztgGXA69wzC0Zw7JkwknPkQrm+\nNBGWwQQ+REH8V7kUCFWVv8dVxk/ECfC6Af7jHLu67VwTI/Cch9+bBxLBLplzP6I+\n+RtObKZmsJ3XVA6/EGihUVW8Bp49WVyM\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 368, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3035020101023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "046e3c68be53aade81ef89e096d841e2845a23331e7ec8a6a839d58d07fa016c0973ed75de4f99177bfdc74db566e9d15a4972ea08e577ce1f61c13a6ca1bad1deef2982ee01a2826f002b769f2c46098d3baff068a405d09ca3840d2fafe4e46e", + "wx" : "6e3c68be53aade81ef89e096d841e2845a23331e7ec8a6a839d58d07fa016c0973ed75de4f99177bfdc74db566e9d15a", + "wy" : "4972ea08e577ce1f61c13a6ca1bad1deef2982ee01a2826f002b769f2c46098d3baff068a405d09ca3840d2fafe4e46e" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200046e3c68be53aade81ef89e096d841e2845a23331e7ec8a6a839d58d07fa016c0973ed75de4f99177bfdc74db566e9d15a4972ea08e577ce1f61c13a6ca1bad1deef2982ee01a2826f002b769f2c46098d3baff068a405d09ca3840d2fafe4e46e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEbjxovlOq3oHvieCW2EHihFojMx5+yKao\nOdWNB/oBbAlz7XXeT5kXe/3HTbVm6dFaSXLqCOV3zh9hwTpsobrR3u8pgu4BooJv\nACt2nyxGCY07r/BopAXQnKOEDS+v5ORu\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 369, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3065023101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04b101cdb3eba20e112adbb4bbd2cb479a69e590a44ea902631832abfab8af2c3041b3df7f1665b2c6eb533f546217100a1a61aa9951578ad4f00ae17339a8a6f1359bbd0ac355678ed4df21338f08763c1d3702ec132b634c7bcc0118efb1d0dd", + "wx" : "00b101cdb3eba20e112adbb4bbd2cb479a69e590a44ea902631832abfab8af2c3041b3df7f1665b2c6eb533f546217100a", + "wy" : "1a61aa9951578ad4f00ae17339a8a6f1359bbd0ac355678ed4df21338f08763c1d3702ec132b634c7bcc0118efb1d0dd" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004b101cdb3eba20e112adbb4bbd2cb479a69e590a44ea902631832abfab8af2c3041b3df7f1665b2c6eb533f546217100a1a61aa9951578ad4f00ae17339a8a6f1359bbd0ac355678ed4df21338f08763c1d3702ec132b634c7bcc0118efb1d0dd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEsQHNs+uiDhEq27S70stHmmnlkKROqQJj\nGDKr+rivLDBBs99/FmWyxutTP1RiFxAKGmGqmVFXitTwCuFzOaim8TWbvQrDVWeO\n1N8hM48IdjwdNwLsEytjTHvMARjvsdDd\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 370, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "046761044a040a4979db269b4a377e42f11b4be0ce24611f677674dcf770f5887ca4db565303283809e6d65f7fc6bc273605c7daa403fca53549f75ff3372909642d02b7fdcac1e68242814d6e925ab01a80836cfbb35581960079e2fb44c0d186", + "wx" : "6761044a040a4979db269b4a377e42f11b4be0ce24611f677674dcf770f5887ca4db565303283809e6d65f7fc6bc2736", + "wy" : "05c7daa403fca53549f75ff3372909642d02b7fdcac1e68242814d6e925ab01a80836cfbb35581960079e2fb44c0d186" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200046761044a040a4979db269b4a377e42f11b4be0ce24611f677674dcf770f5887ca4db565303283809e6d65f7fc6bc273605c7daa403fca53549f75ff3372909642d02b7fdcac1e68242814d6e925ab01a80836cfbb35581960079e2fb44c0d186", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEZ2EESgQKSXnbJptKN35C8RtL4M4kYR9n\ndnTc93D1iHyk21ZTAyg4CebWX3/GvCc2BcfapAP8pTVJ91/zNykJZC0Ct/3KweaC\nQoFNbpJasBqAg2z7s1WBlgB54vtEwNGG\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 371, + "comment" : "extreme value for k and edgecase s", + "msg" : "313233343030", + "sig" : "3064023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df61023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "046922c591502f01046fee5617bf16496f58398822e69afa8335308f36c09a8ed437209fefcffbbdf0a4876b35a3c7ab2655854db825b94b3f27e5f892d3bbb6c7240ec922894dd3598e91fcc6134a2b8fd154e1790466906206f0f623416e63a1", + "wx" : "6922c591502f01046fee5617bf16496f58398822e69afa8335308f36c09a8ed437209fefcffbbdf0a4876b35a3c7ab26", + "wy" : "55854db825b94b3f27e5f892d3bbb6c7240ec922894dd3598e91fcc6134a2b8fd154e1790466906206f0f623416e63a1" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200046922c591502f01046fee5617bf16496f58398822e69afa8335308f36c09a8ed437209fefcffbbdf0a4876b35a3c7ab2655854db825b94b3f27e5f892d3bbb6c7240ec922894dd3598e91fcc6134a2b8fd154e1790466906206f0f623416e63a1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEaSLFkVAvAQRv7lYXvxZJb1g5iCLmmvqD\nNTCPNsCajtQ3IJ/vz/u98KSHazWjx6smVYVNuCW5Sz8n5fiS07u2xyQOySKJTdNZ\njpH8xhNKK4/RVOF5BGaQYgbw9iNBbmOh\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 372, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3064023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df6102302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04892dac0e700fc29d1802d9a449a6f56b2172cb1b7d881013cd3b31c0edb052f2d340c8995a4477bcb9225fec15667233cc6c34ae17445444516fd8fd22ee83f79eb0771ebff6677ac5d4e089f87a1c72df957acb24492adcd7c3816b8e0c75b1", + "wx" : "00892dac0e700fc29d1802d9a449a6f56b2172cb1b7d881013cd3b31c0edb052f2d340c8995a4477bcb9225fec15667233", + "wy" : "00cc6c34ae17445444516fd8fd22ee83f79eb0771ebff6677ac5d4e089f87a1c72df957acb24492adcd7c3816b8e0c75b1" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004892dac0e700fc29d1802d9a449a6f56b2172cb1b7d881013cd3b31c0edb052f2d340c8995a4477bcb9225fec15667233cc6c34ae17445444516fd8fd22ee83f79eb0771ebff6677ac5d4e089f87a1c72df957acb24492adcd7c3816b8e0c75b1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEiS2sDnAPwp0YAtmkSab1ayFyyxt9iBAT\nzTsxwO2wUvLTQMiZWkR3vLkiX+wVZnIzzGw0rhdEVERRb9j9Iu6D956wdx6/9md6\nxdTgifh6HHLflXrLJEkq3NfDgWuODHWx\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 373, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3064023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df6102306666666666666666666666666666666666666666666666664fc15233fb49458c89a4057a8379dc9791f80a2ab84edd61", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0401634117e6478ce0568b0a2469237bbac6ff096acb7e514072bf77123cb51ba0cc3e8d69284d534d8e6d1e876cecf22231e5ef04dc96762ce7d5ef3348ad1e241ac797ae3b630ea249afc5139af49b8ef68b32f812d6b514210363d498efc28c", + "wx" : "01634117e6478ce0568b0a2469237bbac6ff096acb7e514072bf77123cb51ba0cc3e8d69284d534d8e6d1e876cecf222", + "wy" : "31e5ef04dc96762ce7d5ef3348ad1e241ac797ae3b630ea249afc5139af49b8ef68b32f812d6b514210363d498efc28c" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000401634117e6478ce0568b0a2469237bbac6ff096acb7e514072bf77123cb51ba0cc3e8d69284d534d8e6d1e876cecf22231e5ef04dc96762ce7d5ef3348ad1e241ac797ae3b630ea249afc5139af49b8ef68b32f812d6b514210363d498efc28c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEAWNBF+ZHjOBWiwokaSN7usb/CWrLflFA\ncr93Ejy1G6DMPo1pKE1TTY5tHods7PIiMeXvBNyWdizn1e8zSK0eJBrHl647Yw6i\nSa/FE5r0m472izL4Eta1FCEDY9SY78KM\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 374, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3065023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df6102310099999999999999999999999999999999999999999999999977a1fb4df8ede852ce760837c536cae35af40f4014764c12", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04675bdc79d8243887fe1b305d12ac10d2e9c0bde070a6e3394cd5f6adfbceda75498b0e7a794c7212f42be93f616744563e96d1bf6f95cdbefa774911ba06463d8a90a0c9d73c9699b061d779dc52496e8ee9b9ae9c5d4d90e89cd1157d811895", + "wx" : "675bdc79d8243887fe1b305d12ac10d2e9c0bde070a6e3394cd5f6adfbceda75498b0e7a794c7212f42be93f61674456", + "wy" : "3e96d1bf6f95cdbefa774911ba06463d8a90a0c9d73c9699b061d779dc52496e8ee9b9ae9c5d4d90e89cd1157d811895" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004675bdc79d8243887fe1b305d12ac10d2e9c0bde070a6e3394cd5f6adfbceda75498b0e7a794c7212f42be93f616744563e96d1bf6f95cdbefa774911ba06463d8a90a0c9d73c9699b061d779dc52496e8ee9b9ae9c5d4d90e89cd1157d811895", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEZ1vcedgkOIf+GzBdEqwQ0unAveBwpuM5\nTNX2rfvO2nVJiw56eUxyEvQr6T9hZ0RWPpbRv2+Vzb76d0kRugZGPYqQoMnXPJaZ\nsGHXedxSSW6O6bmunF1NkOic0RV9gRiV\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 375, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3065023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df61023100db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6aae76701acc1950894a89e068772d8b281eef136f8a8fef5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "040fd1aab89f47b565b8160dfcc433b6408adeb1473c036b26b7ddec714fb4d0e7dd756c88469e86e218813ead8e8e7676f1cc955c4139e0071c0079ec1d77164e0569bdf453837e8b33c98535a0e7c9c61ef24762067bb46b6116ea7909a69b23", + "wx" : "0fd1aab89f47b565b8160dfcc433b6408adeb1473c036b26b7ddec714fb4d0e7dd756c88469e86e218813ead8e8e7676", + "wy" : "00f1cc955c4139e0071c0079ec1d77164e0569bdf453837e8b33c98535a0e7c9c61ef24762067bb46b6116ea7909a69b23" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200040fd1aab89f47b565b8160dfcc433b6408adeb1473c036b26b7ddec714fb4d0e7dd756c88469e86e218813ead8e8e7676f1cc955c4139e0071c0079ec1d77164e0569bdf453837e8b33c98535a0e7c9c61ef24762067bb46b6116ea7909a69b23", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAED9GquJ9HtWW4Fg38xDO2QIresUc8A2sm\nt93scU+00OfddWyIRp6G4hiBPq2OjnZ28cyVXEE54AccAHnsHXcWTgVpvfRTg36L\nM8mFNaDnycYe8kdiBnu0a2EW6nkJppsj\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 376, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3064023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df6102300eb10e5ab95f2f26a40700b1300fb8c3e754d5c453d9384ecce1daa38135a48a0a96c24efc2a76d00bde1d7aeedf7f6a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0434d74ec088bab6c6323968d1f468993812f690d6edca5b97604d718e12b8cdfdd96d42e57d33afe312f0ee3c3d0a13f786f4922bb2c13bdf7752a3ecb69393e997bd65461c46867ebeef6296b23f2c56df63acfde648f3f5002dbc239ffd1582", + "wx" : "34d74ec088bab6c6323968d1f468993812f690d6edca5b97604d718e12b8cdfdd96d42e57d33afe312f0ee3c3d0a13f7", + "wy" : "0086f4922bb2c13bdf7752a3ecb69393e997bd65461c46867ebeef6296b23f2c56df63acfde648f3f5002dbc239ffd1582" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000434d74ec088bab6c6323968d1f468993812f690d6edca5b97604d718e12b8cdfdd96d42e57d33afe312f0ee3c3d0a13f786f4922bb2c13bdf7752a3ecb69393e997bd65461c46867ebeef6296b23f2c56df63acfde648f3f5002dbc239ffd1582", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAENNdOwIi6tsYyOWjR9GiZOBL2kNbtyluX\nYE1xjhK4zf3ZbULlfTOv4xLw7jw9ChP3hvSSK7LBO993UqPstpOT6Ze9ZUYcRoZ+\nvu9ilrI/LFbfY6z95kjz9QAtvCOf/RWC\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 377, + "comment" : "extreme value for k and edgecase s", + "msg" : "313233343030", + "sig" : "3065023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "044376c9893e9277296c766a83abbe36b34da7a631f8cbfd32a1888de0dd1455a21a153ea2d61cfa5071fc6be12a658f6b290ba1a8ee8c78b5dd58f9ffcacb22955682eea02429c3fa8cdcb649fa4d007c8693e3f8f3c0a5f3c4de7a51beaa9809", + "wx" : "4376c9893e9277296c766a83abbe36b34da7a631f8cbfd32a1888de0dd1455a21a153ea2d61cfa5071fc6be12a658f6b", + "wy" : "290ba1a8ee8c78b5dd58f9ffcacb22955682eea02429c3fa8cdcb649fa4d007c8693e3f8f3c0a5f3c4de7a51beaa9809" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200044376c9893e9277296c766a83abbe36b34da7a631f8cbfd32a1888de0dd1455a21a153ea2d61cfa5071fc6be12a658f6b290ba1a8ee8c78b5dd58f9ffcacb22955682eea02429c3fa8cdcb649fa4d007c8693e3f8f3c0a5f3c4de7a51beaa9809", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEQ3bJiT6SdylsdmqDq742s02npjH4y/0y\noYiN4N0UVaIaFT6i1hz6UHH8a+EqZY9rKQuhqO6MeLXdWPn/yssilVaC7qAkKcP6\njNy2SfpNAHyGk+P488Cl88TeelG+qpgJ\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 378, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3065023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab702302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0410878fc4807f6732a23c883e838e38c787f7088f94c1824b84673e8b9eab16de1544ae4bf2c6fe3fe4fb343b7487e2b43036ff439533d22f951dae966584bafb23b217dcad2f8f4e0e6999c0c4d0f076634be805f676fd2a59c27f9fe7c5d95b", + "wx" : "10878fc4807f6732a23c883e838e38c787f7088f94c1824b84673e8b9eab16de1544ae4bf2c6fe3fe4fb343b7487e2b4", + "wy" : "3036ff439533d22f951dae966584bafb23b217dcad2f8f4e0e6999c0c4d0f076634be805f676fd2a59c27f9fe7c5d95b" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000410878fc4807f6732a23c883e838e38c787f7088f94c1824b84673e8b9eab16de1544ae4bf2c6fe3fe4fb343b7487e2b43036ff439533d22f951dae966584bafb23b217dcad2f8f4e0e6999c0c4d0f076634be805f676fd2a59c27f9fe7c5d95b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEEIePxIB/ZzKiPIg+g444x4f3CI+UwYJL\nhGc+i56rFt4VRK5L8sb+P+T7NDt0h+K0MDb/Q5Uz0i+VHa6WZYS6+yOyF9ytL49O\nDmmZwMTQ8HZjS+gF9nb9KlnCf5/nxdlb\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 379, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3065023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab702306666666666666666666666666666666666666666666666664fc15233fb49458c89a4057a8379dc9791f80a2ab84edd61", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04036b253e3b4ac88bb8585a2b32b978766a931e5ad0d0e653a2e34b44d6ddcc0d386e20c4def2d8bb3f8da128c1eac69f9c8e3b5ff5dde2205af359b3974d52758d7abae812b8b275e1452c4e59cb62e9b6771d347dbd1dea761c70291cc5e0a6", + "wx" : "036b253e3b4ac88bb8585a2b32b978766a931e5ad0d0e653a2e34b44d6ddcc0d386e20c4def2d8bb3f8da128c1eac69f", + "wy" : "009c8e3b5ff5dde2205af359b3974d52758d7abae812b8b275e1452c4e59cb62e9b6771d347dbd1dea761c70291cc5e0a6" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004036b253e3b4ac88bb8585a2b32b978766a931e5ad0d0e653a2e34b44d6ddcc0d386e20c4def2d8bb3f8da128c1eac69f9c8e3b5ff5dde2205af359b3974d52758d7abae812b8b275e1452c4e59cb62e9b6771d347dbd1dea761c70291cc5e0a6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEA2slPjtKyIu4WForMrl4dmqTHlrQ0OZT\nouNLRNbdzA04biDE3vLYuz+NoSjB6safnI47X/Xd4iBa81mzl01SdY16uugSuLJ1\n4UUsTlnLYum2dx00fb0d6nYccCkcxeCm\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 380, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3066023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab702310099999999999999999999999999999999999999999999999977a1fb4df8ede852ce760837c536cae35af40f4014764c12", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "042783c1be922fce155864ecb41d0a316e193a55843e80192f1fe556772f3debd04b9fc93c27bc6f353938886a404419941a352cec336946424fa3c208ea7105f5549edde8688abd305344bf4f66dda7eabcda6f8557c9af88109804d702e9670b", + "wx" : "2783c1be922fce155864ecb41d0a316e193a55843e80192f1fe556772f3debd04b9fc93c27bc6f353938886a40441994", + "wy" : "1a352cec336946424fa3c208ea7105f5549edde8688abd305344bf4f66dda7eabcda6f8557c9af88109804d702e9670b" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200042783c1be922fce155864ecb41d0a316e193a55843e80192f1fe556772f3debd04b9fc93c27bc6f353938886a404419941a352cec336946424fa3c208ea7105f5549edde8688abd305344bf4f66dda7eabcda6f8557c9af88109804d702e9670b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEJ4PBvpIvzhVYZOy0HQoxbhk6VYQ+gBkv\nH+VWdy8969BLn8k8J7xvNTk4iGpARBmUGjUs7DNpRkJPo8II6nEF9VSe3ehoir0w\nU0S/T2bdp+q82m+FV8mviBCYBNcC6WcL\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 381, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3066023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7023100db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6aae76701acc1950894a89e068772d8b281eef136f8a8fef5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04fa92538cdc740368caf16480ff1304cebbbe59a46a7a84603726b9592d105be069df1c61b5974f27e7552f797de97cdb620e03a46da862e4b089bafbb80df8f055c8f47991b3a3ddb2b089aedb2f15841a6a5b5e14c1dc36b3c155c4f74d3409", + "wx" : "00fa92538cdc740368caf16480ff1304cebbbe59a46a7a84603726b9592d105be069df1c61b5974f27e7552f797de97cdb", + "wy" : "620e03a46da862e4b089bafbb80df8f055c8f47991b3a3ddb2b089aedb2f15841a6a5b5e14c1dc36b3c155c4f74d3409" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004fa92538cdc740368caf16480ff1304cebbbe59a46a7a84603726b9592d105be069df1c61b5974f27e7552f797de97cdb620e03a46da862e4b089bafbb80df8f055c8f47991b3a3ddb2b089aedb2f15841a6a5b5e14c1dc36b3c155c4f74d3409", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+pJTjNx0A2jK8WSA/xMEzru+WaRqeoRg\nNya5WS0QW+Bp3xxhtZdPJ+dVL3l96XzbYg4DpG2oYuSwibr7uA348FXI9HmRs6Pd\nsrCJrtsvFYQaalteFMHcNrPBVcT3TTQJ\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 382, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3065023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab702300eb10e5ab95f2f26a40700b1300fb8c3e754d5c453d9384ecce1daa38135a48a0a96c24efc2a76d00bde1d7aeedf7f6a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", + "wx" : "00aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7", + "wy" : "3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqofKIr6LBTeOscce8yCtdG4dO2KLp5uY\nWfdB4IJUKjhVAvJdv1UpbDpUXjhydgq3NhfeSpYmLG9dnpi/kpLcKfj0Hb0omhR8\n6doxE7XwuMAKYLHOHX6BnXpDHXyQ6g5f\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 383, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3065023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 384, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "30640230064ed80f27e1432e84845f15ece399f2cbf4fa31aa837de9b953d44413b9f5c7c7f67989d703f07abef11b6ad0373ea502302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0", + "wx" : "00aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7", + "wy" : "00c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqofKIr6LBTeOscce8yCtdG4dO2KLp5uY\nWfdB4IJUKjhVAvJdv1UpbDpUXjhydgq3yeghtWnZ05CiYWdAbW0j1gcL4kLXZeuD\nFiXO7EoPRz71n04w4oF+YoW84oRvFfGg\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 385, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3065023100f9b127f0d81ebcd17b7ba0ea131c660d340b05ce557c82160e0f793de07d38179023942871acb7002dfafdfffc8deace02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 386, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "30640230064ed80f27e1432e84845f15ece399f2cbf4fa31aa837de9b953d44413b9f5c7c7f67989d703f07abef11b6ad0373ea502302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0429bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc9a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3", + "wx" : "29bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc", + "wy" : "009a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000429bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc9a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEKb23bV+nQb/XAjPLOmbMfUS+s7BmPZKo\nE2ZQR4vO+2HvGC4VWlQ0Wl6OXojwZOW8mlJat/dk2tPa4UaMK0GfO2K5upF9XoxP\nsexHQEo/x2R0snEwgb6dtMAOBDran8Sj\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 387, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "3064023032401249714e9091f05a5e109d5c1216fdc05e98614261aa0dbd9e9cd4415dee29238afbd3b103c1e40ee5c9144aee0f02304326756fb2c4fd726360dd6479b5849478c7a9d054a833a58c1631c33b63c3441336ddf2c7fe0ed129aae6d4ddfeb753", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 388, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "3066023100d7143a836608b25599a7f28dec6635494c2992ad1e2bbeecb7ef601a9c01746e710ce0d9c48accb38a79ede5b9638f3402310080f9e165e8c61035bf8aa7b5533960e46dd0e211c904a064edb6de41f797c0eae4e327612ee3f816f4157272bb4fabc9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 389, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30650230234503fcca578121986d96be07fbc8da5d894ed8588c6dbcdbe974b4b813b21c52d20a8928f2e2fdac14705b0705498c023100cd7b9b766b97b53d1a80fc0b760af16a11bf4a59c7c367c6c7275dfb6e18a88091eed3734bf5cf41b3dc6fecd6d3baaf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 390, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "306502305cad9ae1565f2588f86d821c2cc1b4d0fdf874331326568f5b0e130e4e0c0ec497f8f5f564212bd2a26ecb782cf0a18d023100bf2e9d0980fbb00696673e7fbb03e1f854b9d7596b759a17bf6e6e67a95ea6c1664f82dc449ae5ea779abd99c78e6840", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aacacbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1", + "wx" : "00ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aac", + "wy" : "00acbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aacacbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE/////6pj8aI5rHAZfG6/zqV1bcASEj+C\nxR+odNZgKL4A6XahCAYGc3zHXEC9/kqsrL2FOJCIpipjmDhMIrUtSS8j9G5KJ6Ry\nStVVUdpcSDQ4CVokfLDDN48fUsNCX/nx\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 391, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3065023007648b6660d01ba2520a09d298adf3b1a02c32744bd2877208f5a4162f6c984373139d800a4cdc1ffea15bce4871a0ed02310099fd367012cb9e02cde2749455e0d495c52818f3c14f6e6aad105b0925e2a7290ac4a06d9fadf4b15b578556fe332a5f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 392, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3065023100a049dcd96c72e4f36144a51bba30417b451a305dd01c9e30a5e04df94342617dc383f17727708e3277cd7246ca44074102303970e264d85b228bf9e9b9c4947c5dd041ea8b5bde30b93aa59fedf2c428d3e2540a54e0530688acccb83ac7b29b79a2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 393, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30650230441800ea9377c27865be000ad008eb3d7502bdd105824b26d15cf3d06452969a9d0607a915a8fe989215fc4d61af6e05023100dce29faa5137f75ad77e03918c8ee6747cc7a39b0a69f8b915654cac4cf4bfd9c87cc46ae1631b5c6baebd4fc08ff8fd", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000", + "wx" : "00d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422", + "wy" : "00c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0YJ/xvbxLyGZLFpAmgZTsSHS7wKysKsB\nqRYc6VYoB0Cx41ayVXAbCm3cnsLKipQixu1dLO2NirdWD6W7iMc450VBiD2KKxwO\nK6fjbQMPxNm/uLIvJNuJfrrEndQAAAAA\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 394, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402303244768016457c463b74f2097f216d9670b191f76281c74bc6a1a1971d19f209bf4696468f5eb75d6326a0a43c0a65290230501e0ad985ed9f95697bd17fdbe3f9ca92e0f76426d3664e6896648d9c750bf588d0ce7d011c1a1e8d6c2e082422dc93", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 395, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402305e1af40f2480e3d97c4ae4bfd34a9f45269241356f3a46becd86a4a7c9716d73ca5aebdb3db1a7765650666683bc856b02307e7c4b473a2baaa4953785be8aa2a10006f6d36b400ab981864d69cecec046718d0404b9647454b159aa5a92d76d7955", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 396, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306502306688e36a26f15bdc1c3f91367f8a7667f7bb3e30a335d6f0900e9534eb88b260cb29344c723fedfbe7ac9c5a33f4bf0d023100aa35fddf0fdc9017860b378f801cd806f3e2d754cd2fd94eb7bb36a46ce828cef87e9ebbf447068e630b87fee385ad8f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "041099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557", + "wx" : "1099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000", + "wy" : "00e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEEJm7RRAPVfWoXMo94rO9XiUPT2+tZjGj\nFWwuUqM9fWFd0nn3n4tLr/fHE6wAAAAA5sm3NqiSny7Xvgx1OlTLtIuEaeBBHq+T\npKgkWboLaBu6j1+zg7SQbUkBozA+LxVX\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 397, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3065023100d4a8f3b0b4d3a5769e3a0bbc644b35f1d509355ed1fe401e170f667b661f693b32598e8c143a817a958982845042bb48023004cc07578bbd1981dbf6e8a97a354c98d41b8b6f6e8a2c2b1763c7c2a29d79e24f8476075c9aed9aec6c64dff50461ae", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 398, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3065023100c286d1928e9c79fdd3bebdf22a1dbd37c8105e8ecf41e9e3777fe341b6b8d5a89b9d986827d6d1dbb381cd8239484a220230201119ae305b9360aa9b5e5d1567e0674c09e4f025556ebf81b987466b0f421b8d31f72bbe95f3ce2aa9874a84edfd40", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 399, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3065023100d9c678550167f10c511e62acb4bd0a3f7f336bc090c94e6c6b02622439c348a2159c5f41f9b5aa4b470590d40dcd7cc202301fd5eaee295abb4081cb626745f4ad279ceb44604062830b58e6c0465c562d41f02ba588fc0db1ebbe339cdc008d7a1b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04000000002b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98", + "wx" : "2b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69", + "wy" : "00d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004000000002b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEAAAAACsInt11QWkBAUXyY/M0/BZ8wZ2u\ngiWXCuGcyMt+xzWT1qRlw3D1R4sOU51p0ZUdWXtWpnNFrLJYCVgfB80Ot42VOKP4\npl8wDmih63hQffdt5lDo+O5jpfDFaHyY\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 400, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3065023020fee7c71b6cb0d1da3641ec6622c055a3b16a1f596c64b34da1b2d0b868b66a8f0a0d0db983b3dc7e53bb7295da81970231008141a931d3579aec1cac9887d2fff9c6f12d47a27e4aab8cf262a9d14a715bca0b2057cbc3f18b6fd3d1df76f7410f16", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 401, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3065023100913eecc559b3cf7108a65d6cc3076bfdf36c6f94dcc6693d06690470f34a2e81564241e1de5f5f51421de30af467f10f0230649bd3717244e8ef3c6b0eda983f84dca5ea86d1bec15386b9c473ec43a8cd0ba558eee819f791d9ff9272b9afd59551", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 402, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3064023023855c46403a97b76cbb316ec3fe7e2c422b818387604bda8c3d91121b4f20179d9107c5f92dedc8b620d7db87fccccd023050f57343ab148e50662320c4161e44543c35bc992011ea5b1680b94382cf224ea0ec5da511e102f566cb67201f30a2ee", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b33600000000208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4", + "wx" : "00fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336", + "wy" : "208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b33600000000208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+wG6rV8Lj3m5zRBNEqq5MQFGrdfWtMAi\n2HrmcRF4uU1hjKezrxOFSxxYiHnod7M2AAAAACCLP1rTs5N6zJ1gbMXs7KtKcB91\n7UKVfqTXhY0z9cJsauIKnMzaVplnANa0\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 403, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3066023100d200958d491fcebde667cd736c9dba0961c70db2ecaf573c31dd7fa41ecca32b40b5896f9a0ddf272110e3d21e84593a023100c2ecf73943b9adce596bac14fce62495ae93825c5ff6f61c247d1d8afcba52082fc96f63a26e55bccfc3779f88cfd799", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 404, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "306402306ac17d71260c79f81a7566124738cb3ee5d0aa690e73a98ae9e766f1336691e500cad51ba1302366c09cc06b8f7049e0023032ca965d6d7012ec187c7cab9544334d66c2a7658ddefa67e4ad40429815518ecc87b1492ddd57333bd2300b4660a835", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 405, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3065023100e19a4646f0ed8a271fe86ba533f8be4fd81bbf4674716f668efa89a40cac51eec2a6cfbd92327d25efe91ca4ff712bc502304a86b2e8e12378e633dec2691e3b1eed4e932cc48b28e45fa3d464cc0e948c02cc9decf2bb43b25937fcf37e9ad86ef0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b", + "wx" : "00fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336", + "wy" : "00ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+wG6rV8Lj3m5zRBNEqq5MQFGrdfWtMAi\n2HrmcRF4uU1hjKezrxOFSxxYiHnod7M2/////990wKUsTGyFM2KfkzoTE1S1j+CK\nEr1qgVsoenHMCj2SlR31YzMlqWeY/ylL\n-----END PUBLIC KEY-----", + "sha" : "SHA-384", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 406, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3064023015aac6c0f435cb662d110db5cf686caee53c64fe2d6d600a83ebe505a0e6fc62dc5705160477c47528c8c903fa865b5d02307f94ddc01a603f9bec5d10c9f2c89fb23b3ffab6b2b68d0f04336d499085e32d22bf3ab67a49a74c743f72473172b59f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 407, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "306602310090b95a7d194b73498fba5afc95c1aea9be073162a9edc57c4d12f459f0a1730baf2f87d7d6624aea7b931ec53370fe47023100cbc1ef470e666010604c609384b872db7fa7b8a5a9f20fdefd656be2fcc75db53948102f7ab203ea1860a6a32af246a1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 408, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3066023100dd4391ce7557cbd005e3d5d727cd264399dcc3c6501e4547505b6d57b40bbf0a7fac794dcc8d4233159dd0aa40d4e0b9023100a77fa1374fd60aa91600912200fc83c6aa447f8171ecea72ae322df32dccd68951dc5caf6c50380e400e45bf5c0e626b", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/tests/ecdsa_secp384r1_sha512_test.json b/tests/ecdsa_secp384r1_sha512_test.json new file mode 100644 index 00000000..b5126744 --- /dev/null +++ b/tests/ecdsa_secp384r1_sha512_test.json @@ -0,0 +1,4940 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.8r12", + "numberOfTests" : 446, + "header" : [ + "Test vectors of type EcdsaVerify are meant for the verification", + "of ASN encoded ECDSA signatures." + ], + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "MissingZero" : "Some implementations of ECDSA and DSA incorrectly encode r and s by not including leading zeros in the ASN encoding of integers when necessary. Hence, some implementations (e.g. jdk) allow signatures with incorrect ASN encodings assuming that the signature is otherwise valid.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "schema" : "ecdsa_verify_schema.json", + "testGroups" : [ + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "042da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f", + "wx" : "2da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa", + "wy" : "4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200042da57dda1089276a543f9ffdac0bff0d976cad71eb7280e7d9bfd9fee4bdb2f20f47ff888274389772d98cc5752138aa4b6d054d69dcf3e25ec49df870715e34883b1836197d76f8ad962e78f6571bbc7407b0d6091f9e4d88f014274406174f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAELaV92hCJJ2pUP5/9rAv/DZdsrXHrcoDn\n2b/Z/uS9svIPR/+IgnQ4l3LZjMV1ITiqS20FTWnc8+JexJ34cHFeNIg7GDYZfXb4\nrZYuePZXG7x0B7DWCR+eTYjwFCdEBhdP\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202307b0a10ee2dd0dd2fab75095af240d095e446faba7a50a19fbb197e4c4250926e30c5303a2c2d34250f17fcf5ab3181a6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "Legacy:ASN encoding of r misses leading 0", + "msg" : "313233343030", + "sig" : "30650230814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 3, + "comment" : "Legacy:ASN encoding of s misses leading 0", + "msg" : "313233343030", + "sig" : "3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2023084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "acceptable", + "flags" : [ + "MissingZero" + ] + }, + { + "tcId" : 4, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "long form encoding of length of sequence", + "msg" : "313233343030", + "sig" : "308166023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 6, + "comment" : "length of sequence contains leading 0", + "msg" : "313233343030", + "sig" : "30820066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 7, + "comment" : "wrong length of sequence", + "msg" : "313233343030", + "sig" : "3067023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "wrong length of sequence", + "msg" : "313233343030", + "sig" : "3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "uint32 overflow in length of sequence", + "msg" : "313233343030", + "sig" : "30850100000066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "uint64 overflow in length of sequence", + "msg" : "313233343030", + "sig" : "3089010000000000000066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "length of sequence = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "length of sequence = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "length of sequence = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "length of sequence = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "incorrect length of sequence", + "msg" : "313233343030", + "sig" : "30ff023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3066028000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202800084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "lonely sequence tag", + "msg" : "313233343030", + "sig" : "30", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "30680000023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "appending unused 0's to sequence", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "appending null value to sequence", + "msg" : "313233343030", + "sig" : "3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306b4981773066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306a25003066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30683066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306b2236498177023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306a22352500023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306e2233023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20004deadbeef02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306b023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2223649817702310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22235250002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "306e023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2223302310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306eaa00bb00cd003066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306caa02aabb3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306e2239aa00bb00cd00023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306c2237aa02aabb023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306e023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22239aa00bb00cd0002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "306c023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22237aa02aabb02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "truncated length of sequence", + "msg" : "313233343030", + "sig" : "3081", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30803066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "306a2280023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2228002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30803166023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "306a2280033100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2228003310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "2e66023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "2f66023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "3166023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "3266023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "ff66023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "using composition for sequence", + "msg" : "313233343030", + "sig" : "306a30010230653100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 55, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "30653100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 58, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd05000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "3080023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "30683000023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "append garbage with high tag number", + "msg" : "313233343030", + "sig" : "3069023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cdbf7f00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "30683066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 67, + "comment" : "truncated sequence: removed last 1 elements", + "msg" : "313233343030", + "sig" : "3033023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 68, + "comment" : "repeating element in sequence", + "msg" : "313233343030", + "sig" : "308199023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 69, + "comment" : "long form encoding of length of integer", + "msg" : "313233343030", + "sig" : "306702813100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 70, + "comment" : "long form encoding of length of integer", + "msg" : "313233343030", + "sig" : "3067023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20281310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 71, + "comment" : "length of integer contains leading 0", + "msg" : "313233343030", + "sig" : "30680282003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 72, + "comment" : "length of integer contains leading 0", + "msg" : "313233343030", + "sig" : "3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2028200310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 73, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "3066023200814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "3066023000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202320084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202300084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "uint32 overflow in length of integer", + "msg" : "313233343030", + "sig" : "306b0285010000003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "uint32 overflow in length of integer", + "msg" : "313233343030", + "sig" : "306b023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2028501000000310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "uint64 overflow in length of integer", + "msg" : "313233343030", + "sig" : "306f028901000000000000003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "uint64 overflow in length of integer", + "msg" : "313233343030", + "sig" : "306f023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202890100000000000000310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "length of integer = 2**31 - 1", + "msg" : "313233343030", + "sig" : "306a02847fffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "length of integer = 2**31 - 1", + "msg" : "313233343030", + "sig" : "306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202847fffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "length of integer = 2**32 - 1", + "msg" : "313233343030", + "sig" : "306a0284ffffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "length of integer = 2**32 - 1", + "msg" : "313233343030", + "sig" : "306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20284ffffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "length of integer = 2**40 - 1", + "msg" : "313233343030", + "sig" : "306b0285ffffffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "length of integer = 2**40 - 1", + "msg" : "313233343030", + "sig" : "306b023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20285ffffffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "length of integer = 2**64 - 1", + "msg" : "313233343030", + "sig" : "306e0288ffffffffffffffff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "length of integer = 2**64 - 1", + "msg" : "313233343030", + "sig" : "306e023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20288ffffffffffffffff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "incorrect length of integer", + "msg" : "313233343030", + "sig" : "306602ff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "incorrect length of integer", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202ff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "303302310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "lonely integer tag", + "msg" : "313233343030", + "sig" : "30340202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "lonely integer tag", + "msg" : "313233343030", + "sig" : "3034023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 94, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "3068023300814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 95, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202330084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "30680233000000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 97, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2023300000084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 98, + "comment" : "appending unused 0's to integer", + "msg" : "313233343030", + "sig" : "3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2000002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "appending null value to integer", + "msg" : "313233343030", + "sig" : "3068023300814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2050002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "appending null value to integer", + "msg" : "313233343030", + "sig" : "3068023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202330084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "truncated length of integer", + "msg" : "313233343030", + "sig" : "3035028102310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "truncated length of integer", + "msg" : "313233343030", + "sig" : "3035023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20281", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3035050002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "3035023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3066003100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3066013100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3066033100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3066043100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3066ff3100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e200310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e201310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e203310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e204310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2ff310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3035020002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "3035023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "using composition for integer", + "msg" : "313233343030", + "sig" : "306a22350201000230814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "using composition for integer", + "msg" : "313233343030", + "sig" : "306a023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e22235020100023084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "3066023102814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310284f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a156202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a74d", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "3065023000814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a1502310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202300084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "30670232ff00814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "3067023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20232ff0084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "replaced integer by infinity", + "msg" : "313233343030", + "sig" : "303609018002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "replaced integer by infinity", + "msg" : "313233343030", + "sig" : "3036023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "replacing integer with zero", + "msg" : "313233343030", + "sig" : "303602010002310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "replacing integer with zero", + "msg" : "313233343030", + "sig" : "3036023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2020100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3066023101814cc9a70febda342d4ada87fc39426f403d5e8980842845d38217e2bcceedb5caa7aef8bc35edeec4beb155610f3f5502310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30650230814cc9a70febda342d4ada87fc39426f403d5e898084284644bb7cded46091f71a7393942ad49ef8eae67e7fc784ec6f02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30660231ff7eb33658f01425cbd2b5257803c6bd90bfc2a1767f7bd7b9f3e1359f376840298d725eb98c7ab98c282d68156bb5ea1e02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "306502307eb33658f01425cbd2b5257803c6bd90bfc2a1767f7bd7b9bb4483212b9f6e08e58c6c6bd52b610715198180387b139102310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30660231fe7eb33658f01425cbd2b5257803c6bd90bfc2a1767f7bd7ba2c7de81d4331124a3558510743ca12113b414eaa9ef0c0ab02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3066023101814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "306502307eb33658f01425cbd2b5257803c6bd90bfc2a1767f7bd7b9f3e1359f376840298d725eb98c7ab98c282d68156bb5ea1e02310084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310184f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e5fd3ad1cb7a61dc9507f6eeb2a65341ad0cac035dfee58d140", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e2023084f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e6044e681b3bdaf6d91cf3acfc5d3d2cbdaf0e8030a54ce7e5a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20231ff7b0a10ee2dd0dd2fab75095af240d095e446faba7a50a19ff3b630ca4e19648ed8ab2287e37c8caa222be38ade6c5833", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e20231fe7b0a10ee2dd0dd2fab75095af240d095e446faba7a50a1a02c52e34859e236af809114d59acbe52f353fca2011a72ec0", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3066023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202310184f5ef11d22f22d0548af6a50dbf2f6a1bb9054585af5e600c49cf35b1e69b712754dd781c837355ddd41c752193a7cd", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3065023100814cc9a70febda342d4ada87fc39426f403d5e89808428460c1eca60c897bfd6728da14673854673d7d297ea944a15e202307b0a10ee2dd0dd2fab75095af240d095e446faba7a50a19ff3b630ca4e19648ed8ab2287e37c8caa222be38ade6c5833", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020100023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036020101023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30360201ff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529730201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529720201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc529740201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 214, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 215, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 216, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000001000000000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 217, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52973", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 218, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 219, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52974", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 220, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000ffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 221, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 222, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3038023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 223, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3036023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff000000000000000100000000090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 224, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30060201010c0130", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 225, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30050201010c00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 226, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30090c0225730c03732573", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 227, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30080201013003020100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 228, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "3003020101", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 229, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "3006020101010100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 230, + "comment" : "Edge case for Shamir multiplication", + "msg" : "3637323636", + "sig" : "3066023100ac042e13ab83394692019170707bc21dd3d7b8d233d11b651757085bdd5767eabbb85322984f14437335de0cdf5656840231008f8a277dde5282671af958e3315e795a20e2885157b77663a67a77ef2379020c5d12be6c732fd725402cb9ee8c345284", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "special case hash", + "msg" : "33393439313934313732", + "sig" : "3065023100d51c53fa3e201c440a4e33ea0bbc1d3f3fe18b0cc2a4d6812dd217a9b426e54eb4024113b354441272174549c979857c02300992c5442dc6d5d6095a45720f5c5344acb78bc18817ef32c1334e6eba7726246577d4257942bdefe994c1575ed15a6e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 232, + "comment" : "special case hash", + "msg" : "35333637363431383737", + "sig" : "3065023100c8d44c8b70abed9e6ae6bbb9f4b72ed6e8b50a52a8e6e1bd3447c0828dad26fc6f395ba09069b307f040d1e86a42c022023001e0af500505bb88b3a2b0f132acb4da64adddc0598318cb7612b5812d29c2d0dde1413d0ce40044b44590e91b97bacd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 233, + "comment" : "special case hash", + "msg" : "35363731343831303935", + "sig" : "3065023100d3513bd06496d8576e01e8c4b284587acafd239acfd739a19a5899f0a00d269f990659a671b2e0e25f935b3a28a1f5fd0230366b35315ce114bffbb75a969543646ee253f046a8630fbbb121ecc5d62df4a7eb09d2878805d5dab9c9b3880b747b68", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 234, + "comment" : "special case hash", + "msg" : "3131323037313732393039", + "sig" : "3065023100b08c4018556ca8833b524504e30c58346e1c0345b678fdf91891c464a33180ed85a99bc8911acf4f22aceb40440afc9402304a595f7eed2db9f6bd3e90355d5c0e96486dc64242319e41fc07be00a732354b62ec9c34319720b9ffb24c994b1cf875", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 235, + "comment" : "special case hash", + "msg" : "3131323938303334323336", + "sig" : "306502302b08f784617fd0707a83d3c2615efa0c45f28d7d928fc45cd8a886e116b45f4686aee97474d091012e27057b6ba8f7e6023100c440aa6ecb63e0d43c639b37e5810a96def7eec8e90a4c55e5b57971c48dfb4e850232fbb37bd32bb3b0523b815ff985", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 236, + "comment" : "special case hash", + "msg" : "39383736303239363833", + "sig" : "306402300609f4ec120c8838bda916f668e9600af7652e1d3f7182734f97f54da5d106bbfd216c32f227b76d583de1c53949b2ee023046926dffc766ff90c3b921b3e51a2982a1072314c1fdfb4175de7adea5a6f97bdff587a473504a9c402aac7c05bd4785", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 237, + "comment" : "special case hash", + "msg" : "3230323034323936353139", + "sig" : "306502305ae2220e4716e1ef0382afcc39db339e5bd5f05e8a188d4a5daaab71c6c35263ee8820a34558092877449ebb15898c5c023100c4d38e2e85451c43ee35b0c56196cbf3059acf2b8b529f06dc1de9b281d9b0f3f3983df8936e944ab0b18330a342ee88", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 238, + "comment" : "special case hash", + "msg" : "31343531363639313830", + "sig" : "3065023051fb84ed71d436c737ab24e2a45c68f8f623748be2caebd89e02bfc89309b8350042ab1b97849b9f680f044a58765175023100d4a8f60791657a8c12985fd896ac77e7d95cb050582f2466471dc2c6dcf90db05ce34beadbfcfe690dc56c0cc9944007", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 239, + "comment" : "special case hash", + "msg" : "31303933363835393531", + "sig" : "3065023040159290d161df6b3f81a92cefb6df56149d588e7b886bf24939f5c8b6bb515d325b3764f0ed284a77fa9081ccfa5237023100bd55dfb47709287ce7b88dfd96ac7543eeba9bd31b8c91f203d2b90418122406399c80a53539b81f1cb60fa3b23a2563", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 240, + "comment" : "special case hash", + "msg" : "36323139353630323031", + "sig" : "3066023100d7fb9f53865cdf9d4cad6f66981aea35a1454858ceb678d7b851c12a4c6644fe1915a4b219b51389a5ae2c98a433cc3a02310094ad75c3dea88740205cab41032dfe149341cf4ee94dcd2f0c8bbe5af5860b30b5e1f764b2c767b09fd10761050c989c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 241, + "comment" : "special case hash", + "msg" : "35363832343734333033", + "sig" : "30650230157ef8f85cdb9257983d06a7f29674752659097364b401e701705b3bd9ead884fd32141320ae76ae05f6fc7ec155d6c2023100ccadc3851020e41dd91bc28a6c073409136a47f20b8dbf2553fd456a8ed5fa7e73e4ec59dca499e0d082efbb9ad34dc7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 242, + "comment" : "special case hash", + "msg" : "33373336353331373836", + "sig" : "3066023100e763001769c76f6a6d06fad37b584d7f25832501491bec283b3b6836f947dc4e2cef021c6c6e525b0a6a3890d1da122a023100acbd88729cce3992d14ec99e69ff0712b82a33a1c1e8b90e1399c66fe196f7c99bdb3ff81db77dc25ae6f0c1a025117d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 243, + "comment" : "special case hash", + "msg" : "34373935393033373932", + "sig" : "3066023100c6425b6b046ec91ebc32b9e6de750e5d3d36d4ddc6dffd25ba47817385a9466f6fc52259c7d02c66af5bf12045b5659d02310084cdc06e35fecc85a3e00b16488eac3584942f663d8b59df111c0650139d7cda20d68dccae569d433170d832147bc94c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 244, + "comment" : "special case hash", + "msg" : "39333939363131303037", + "sig" : "306502303061f090e4932133a0e08ac984d1c8d8d4f565e21cf15427671503880341265cd44f35a437ee3c3a8857579dd7af0c3502310093ae374a0f63dcbe41a1b7b07a50faf2b33f35e0b6600bb36aa5cda05238640fa35c635c0fa78e1410f3a879bbb8a541", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 245, + "comment" : "special case hash", + "msg" : "31303837343931313835", + "sig" : "306502300ccc627f35454cc84e08a828f5bd5f5e41eeeaa40475bcc2e71ff372e8c718a5e179d3b7f2d7051db9060c4c978eb638023100b12d0240afbdfc64c60861548c33663b8960316a55f860cc33d1908e89aa6fc9519f23a900e0488fa6a37cfb37856565", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 246, + "comment" : "special case hash", + "msg" : "33323336363738353030", + "sig" : "3065023100e72419fb67ebbcc0de9c46ce5475c608f9de7e83fc5e582920b8e9848000d820d393fdac6c96ea35ce941cb14951640002306aa19934ef60f4a247bc261ba256283a94857a268f42a0939c95a536fbd4f8e1f1c285a7b164c12213abb9e3393cbe9f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 247, + "comment" : "special case hash", + "msg" : "31343438393937373033", + "sig" : "30660231008b740931f9afa8a04c08cde896b7fdd9aca3177d5e4a3e5a51e54bfa824b66ab11df4e90f49798d644babfede7830224023100afd91e7ce15059a5b5499e5aef4afa91fd090e4e5029b3f4348f0d4349df11745869f9255117eea405a78af5dd6a646d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 248, + "comment" : "special case hash", + "msg" : "35373134363332383037", + "sig" : "3066023100989024bce204a7539fbd2b185ecf375590d873177c1ff26bbf755838ae5bcde180054663702ac3a4e68fe8b58fd88c70023100bdbedf64e424dbd7f979f83adef3fc85077fa76f8b1724815b5b8c24fde7fbd72f4b369a415d9bbf565cdc459bdce54c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 249, + "comment" : "special case hash", + "msg" : "323236343837343932", + "sig" : "3064023022624fc23403955c0c9f5b89871177fa53879c8424de3b4ab1bcbcddc6e57b870b0491b848e19f728722b3163f4aa32802305bb82642cdaa84d6977fb95b3ede4ec7f2d54881cf435636d3509816f13ebb7be24fd7d4e1e81fddf07bde685e8d630d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 250, + "comment" : "special case hash", + "msg" : "35333533343439343739", + "sig" : "3065023100da5a2daa7437df4566ebba6ac5ed424655633e354ef4d943dc95ddefb0dae69f3616e506cc8cb5bc433a82ba71f6feb402305107b24041bba45073ce54488a5aef861e7805bbb8f970aedc1c59149cfe72c7025e2d117337e8677c88ef43374e6907", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 251, + "comment" : "special case hash", + "msg" : "34373837333033383830", + "sig" : "306402302b0659fb7fa5fc1fce767418c20978de9a6a59941fc54f8380619b2ab2a7d6039de5373fbb503c24f2ce38e9c57995de02300d94dba98dd874bfffeac96a9295b6ab667708b8e33252edc029574c484a132135b13e52db6f877987c1be4f51fca193", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 252, + "comment" : "special case hash", + "msg" : "32323332313935383233", + "sig" : "306402304a5a14f1ecf053bf3ec14843db8c7dd153e9545d20d76345a9e1d1a8fcb49558ca1ee5a9402311c2eaa102e646e57c2c02301573b8b4b633496da320e99a85c6f57b7ee543548180a77f7fced2d0665911cb4cde9de21bc1a981b97742c9040a6369", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 253, + "comment" : "special case hash", + "msg" : "3130373339333931393137", + "sig" : "30650230104e66e6e26c36633c0af001f0d9a216236816923ec93b70bea0a8ff053a15aaaef5fe3483e5cc73564e60fe8364ce0e023100ec2df9100e34875a5dc436da824916487b38e7aeb02944860e257fd982b01782b3bd6b13b376e8a6dbd783dfa0d77169", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 254, + "comment" : "special case hash", + "msg" : "31383831303237333135", + "sig" : "306402304b06795da82bda354e8d9422a76c7bc064027fcdd68f95b7bc6177a85b2d822c84dc31cb91fc016afa48816a3a019267023018e31018e312d3dd3dd49ec355fdb0def3bb3e44393c26cf1bc110b23a3aacf6c442bfcec5535ce37527d0e068f75c03", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 255, + "comment" : "special case hash", + "msg" : "36303631363933393037", + "sig" : "3066023100ad75ca5a3df34e5a6d3ea4c9df534e8910cfb1d8c605fc398fbee4c05f2b715bd2146221920de8bac86c2b210221bcff023100a322d3df3bb2cf9e4215adf1ff459e70f2f86bec6dd6af5d04ae307d21ed5955136c8e258fdc0f9cbd6cf89c31aa691f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 256, + "comment" : "special case hash", + "msg" : "38383935323237303934", + "sig" : "3065023100b0fa6289cc61bab335932ea1ac6540462653cc747ef67827825f77689a4398602297835d08aa16e23a76dea9f75404ef0230278d654a0b50c57d13f9c9c8c7c694001167f8e3b71491772a7427f1410fb6de518740c22e455e58de48846479b300cc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 257, + "comment" : "special case hash", + "msg" : "31353830323334303934", + "sig" : "3065023100c216cb4fe97facb7cd66f02cd751155b94fa2f35f8a62ba565aca575728af533540ff5d769b7c15c1345ab6414e150680230278a8a372b75d6eb17a4f7c7f62d5555c7357a1a047026bead52185cbcc01d73b80a1577e86220b2278da2b1ee8c983a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 258, + "comment" : "special case hash", + "msg" : "33393635393931353132", + "sig" : "30660231009591c80453cffbcd0b8d6d20fce0cbb2a458e54aed7ba1c767e6c017af4c4aa07a76859c0b249f6692a3c9ace893f14e023100893b567cd2959cd60557d3d6013d6e1741421a6edc5bc18244b3e8d7744e57928ce006a3fbd6e6324cb8ea3e5177e7e3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 259, + "comment" : "special case hash", + "msg" : "32323838373332313938", + "sig" : "30650230350b5515ba9785f149e2a566c14f4178757bb325179888f526f7db11161aedcd752551381316c2713f5de21d3d517af002310097d48a90c3bb3444736bec69db0649f82428b39238ada6048a0bead84f2f3b73816b48fed4d57b5f87a194ce4004ed7b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 260, + "comment" : "special case hash", + "msg" : "32323330383837333139", + "sig" : "3066023100833210c45d2448d9a4d69622d6f2193e64c65c79d45d62e28f517ca5c68eef05a2e98b1faed4cc87cbdbec6fe6bb8987023100b777b44cd30e6a049dc56af19a251d955c1bbab0c307fe12e9e5382fd48c173db0292f0b1047da28ee18518e11688eea", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 261, + "comment" : "special case hash", + "msg" : "313239303536393337", + "sig" : "306402307728ef10d9d5f3f32132716e6b403926929b05201700658d4b7f25a0692f153b8d666fd0da39888ab6234212659268d0023055df9466ee2c98225a2b0c4ff77622f9d11b4e48aa7f9279cdc2e245fdd9b9f4282106e25a458ff618bc3ca9422bea25", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 262, + "comment" : "special case hash", + "msg" : "32373438363536343338", + "sig" : "30640230552040701dba17be3b4d5d6e136ce412b6a4c50ce1ee53415d8100c69a8ee4726652648f50e695f8bb552d0df3e8d1c402301374972b2f35b2fd86d45ed0c9358b394e271575e429ac8aa60eb94b9df7e755d9317fb259269e9d3b1db8d48d91dc7e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 263, + "comment" : "special case hash", + "msg" : "37353833353032363034", + "sig" : "3065023100fe6ef07056ce647128584bec156b68b8005f42d8c85dfb122134c488cc0e72cf8f06700417d7ff694b45e894ec23cbbd02307f5e33c5bfa697c144d440b32d06221f630a9ccaa8e9a0489490c04b86e8daae0e41d2466429b4b3cc1d37348e36cc0b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 264, + "comment" : "special case hash", + "msg" : "32333237373534323739", + "sig" : "3065023100e009fc1a13d282bd37f10693350a5b421a0039713d29cb9e816e013c173bd1ec2bd6eb6bd88429023ee3d75d9a5ec06f02300b8bd481982a6e52355bcde5fe0092abac41f0543c31d1928b9a585e63e9520e24a65f46db2696e1b85a65c4e5240879", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 265, + "comment" : "special case hash", + "msg" : "373735353038353834", + "sig" : "3065023100acee00dfdfcee7343aeffa8514b11020c5435027887529d255bdbd45a90f160c68f05bd4b567daa8fa14e5807f5167a402301c9fdf546190970aa33121a3043280669be694e5f700b52a805aa6101b4c58f0467e7b699641d1d03f6229b2faf4253f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 266, + "comment" : "special case hash", + "msg" : "3137393832363438333832", + "sig" : "30650231008a4ee1e3bb251982475877d18763fafcf49ccc8b0fec1da63b0edccbb8d3e38608a2e02d0d951031179e12ac899d30c3023073cb62ad7632cd42dff829abfbfcb6165207e3708ed10043c0cdee951c7f8012432696e9cf732dcbadb504630648419f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 267, + "comment" : "special case hash", + "msg" : "32333936373737333635", + "sig" : "306402303903b59f837ff5f41f42cbe3e2fc8e17d859cbb35386c4327d3947fb012b3629fea911c83cefdbd503aebbcc1114afd102300e5be9094b5a22ade00c24644f476baad0f7741dfb2ce9644a1c45769404f8dccc522017c2b8cc630f1a0ef5fee99fe8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 268, + "comment" : "special case hash", + "msg" : "35393938313035383031", + "sig" : "306502307717ffc8d0811f357299423c56ec181c58f1981f5c1dd4f346f6a2ad71d3582e203a11e8609c1146ff3247a1820f832c02310096c89ec707da3cd8b09084b065e3265327a536a974c4285155388011e348f2e7f005ae7e3e502732fc2971ac13fd72c0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "special case hash", + "msg" : "3136363737383237303537", + "sig" : "3065023100a21519ce3533c80826f1e47fa9afde7096151144291134421990285a8d89a8c2d4afdadd547a923dcc17bfcdd0e9ffb9023040577245dd2e022c8ed8b5de7b8c26f31307429a7a64e5729311cc4128e3b486867e61b4a8a1cd0731792eb1466d08f3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "special case hash", + "msg" : "323036323134333632", + "sig" : "3065023100a727addad0b2acd2942cb1e3f7b2917ca65453275198b06436a993bfc982d3f54620c395e253d57b8fe026efcf7252f902307a19811aa4c12c45c3c041e7c614d0d98051ca7a0c57a9a107d552793ba1d0debb373525aafcc13ae1acd50a42a89adf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "special case hash", + "msg" : "36383432343936303435", + "sig" : "3065023022287277872d175d8a3ff5be9818658f845eb9c1b2edc093ae82a75aa31cc26fe1771b4bfbd4c320251388d7279b5245023100b47d1833867e889fcfd7ac171855293a50aa6db24c6522e374fe87be12bf49b13c8b5e1455a2f25aa7912f799eebe552", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "special case hash", + "msg" : "33323639383937333231", + "sig" : "3065023100a0f41362009b8e7e7545d0f7c4127e22d82ac1921eb61bf51e9ea711e41557a84f7bb6ace499a3bc9ebca8e83728787b02301f6e0c15a3e402370885e2aceb712280ebc45b63986357765b7e54b06cd00db8308e4715c39d48d246030bf960e6a2ff", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "special case hash", + "msg" : "31333837333234363932", + "sig" : "306502304144e1c6ad29ad88aa5472d6d1a8d1f15de315f5b281f87cc392d66d7042547e6af7c733b31828f89c8a5dafce5bb9af023100f5d0d81f92428df2977757c88ba67f9e03abd4c15b1e87fa1dd49e601a9dd479e7c3dc03a8bfea60fcfc1c543931a7de", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "special case hash", + "msg" : "34313138383837353336", + "sig" : "306402305f177fc05542be6e09027b7eac5eb34f34fc10ad1429e4daaea75834de48dd22626f2bf653dfcc46234921d19b97406b02307def6c993a87560425f2c911046357c4b1c4c376bfa22bb45d533654fea6f565ba722147b2269ea7652f9c4af62ed118", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "special case hash", + "msg" : "393838363036353435", + "sig" : "3066023100bd77a8ff0cd798d8f6e75dfbbb16c3ee5bf3f626dcb5abdfd453b301cb4fd4caee8e84dd650a8b4cf6655dea163788c7023100ef8f42394469eb8cd7b2ac6942cdb5e70dd54980ad8c0c483099573d75b936880459c9d14f9e73645865a4f24ee2c4ce", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "special case hash", + "msg" : "32343739313135383435", + "sig" : "3066023100a02e2196258436da6a35a2f73cf6b08880f27757566ce80c7fc45f5dcbaec62d3fcebb784b4a650e24c1a997e4b971f7023100f1195d2ba3321b6938e04169d7baf605001b6311f08a5e82157a7675d54993f2fd1e41f8c84fc437a1a139d2e73e8d46", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "special case hash", + "msg" : "35303736383837333637", + "sig" : "30640230686c5dfe858629125fdee522b77a9b9be5e03a347d79cb4c407f17fd25c97293cd99711f33e77814bd30d2453d3a86c10230509ac9b18c1b2b5a2b1b889d994b950743a988c2fcfb683e89211a43da6ee362c2e414d84fe82db1904b81701c257822", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "special case hash", + "msg" : "393838353036393637", + "sig" : "306502310083ce818ecd276432a8ddfe75406d01329e76d7586cd6f611c1fe1a0913ad80014c2156381942d58dd6356e44ccdc52a8023036a35983b97a9ae2a19cf05ba947dd880c973d5c78f9676ebbcb0b40d639124030c137236232f1fad15afd71c52ad8ec", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "special case hash", + "msg" : "32373231333036313331", + "sig" : "306502307cb78ebb712b5a2e0b0573d28440a5da36bd2338805d90ef3b0c1178ae613be8ae8bf548af4e7403e5a5410462afc2e30231008631a82cbdb8c2c7df70f012405f06ad0ab20d6c4fbceb3e736f40fdff1a8e5f6e667a0e77259f277494de84ec0de50d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "special case hash", + "msg" : "33323034313031363535", + "sig" : "306602310085110fe21156b7764b91bcb6cf44da3eb21d162395071c216a13b5920d67a31aaa20dfc4669cf32c04964d0831bcdc29023100e19187033d8b4e1edf7ab8eaaae1e13c80c0c4db51d921ccf62f424524cbd530d07de2cf902a0ecda5e01206ae61e240", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "special case hash", + "msg" : "33313530363830393530", + "sig" : "306402300fd621a892ee5a3eb0bcb80f3184714a6635f568d92f41ad8d523887d5b82d2b930eb5ff2922fda1a3d299f5a045837f02301278725a607fa6f2fc7549b0de816fe2f88e3a1ec1ccaf9fb58e70a0f6646c2d7aad6e4f73d116e73096bdef231d0c89", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "special case hash", + "msg" : "31373237343630313033", + "sig" : "3066023100802cbe405d3ce9663b0b13c639aa27730b3377ce42521098ae09096b7fc5e7ac998b6994344e89abfb50c05476f9cae80231009aa7258c0dc4eff4b2d583575368301e2a7865cfaa3753055a79c8b8e91e94496a5d539181c2fd77941df50fe87453cd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "special case hash", + "msg" : "3134353731343631323235", + "sig" : "3066023100859b0446949d7f78a0301ac4cc02b599a758fd1be006bf1a12570015869e59b9a429ce1c77a750969f49e291f6ab899402310099a812a1acc2c646814315cf9b6290d2232236cdf131f9590088e75a55786cdfc9d9027ec70056408ab55445fd79fe60", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "special case hash", + "msg" : "34313739353136303930", + "sig" : "3065023100dbcc7ee9fa620e943193deae3f46b3142779caa2bce2df79a20639c8d01bce414a61f72764c1ec949c945320f5ee2a1d02301d9879787b880bd05db39bac07bfe3e7d0792932144e211e81f21da9621b83bff11bc52bcc7cb40cf5093f9bad8650fb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "special case hash", + "msg" : "35383932373133303534", + "sig" : "306402307a1f9fbd0f6e776c3e3a3c798f5c0d9e20f0e2f3f4d22e5893dd09e5af69a46abc2f888d3c76834462008069275dfeb9023045e6d62a74d3eb81f0a3a62902b8949132821b45d8e6cad9bb3d8660451727cdf7b332a9ac7bb04604991312143f8a6a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "special case hash", + "msg" : "33383936313832323937", + "sig" : "30640230047962e09e1b61823d23726bf72b4dde380e032b534e3273db157fa60908159ab7ee4cadce14fd06ebe8e08e8d8d5a0702301892f65ee09e34ce45dd44b5a172b200ce66b678b0e200c17e424e319f414f8dfbb2769a0259c9cc105191aa924e48d5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "special case hash", + "msg" : "38323833333436373332", + "sig" : "30660231008f02799390ab861452cd4949942cbbcc25cad7c4334c4bc6146fbef8ad96c86f923fbf376d9ab79073e5fcb663f1ea91023100ce15d9862d100ff95ad7368922eec3f6d7060ce412c01ff13870aa61626ee49edf39bb27005ecbe406bb6825f74c0438", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "special case hash", + "msg" : "33333636393734383931", + "sig" : "306502301879c4d6cf7c5425515547575049be2a40c624a928cf281250f8bdcbf47e9f95310d0992c9887dc6318b3197114f358e023100e1116bf68320bade7d07a1a9651512d60b551af8625b98b5eb8ca222d4073ae5c140a80e5dbe59f073647daa00837aee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "special case hash", + "msg" : "32313939313533323239", + "sig" : "3064023031dced9a6767f39045472749baec1644ae7d93a810a4b60eb213c02c42de65152ffc669af96089554570801a704e2a2d02303022ecfbc88a72b9c50ef65344765b615738f2b3d420ade68cbf3ec40bef0e10c5cc43bcfe003bb6f17ec23802c40569", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "special case hash", + "msg" : "35363030333136383232", + "sig" : "3066023100f4bdf786c61c5f1ce7568638ba9dbc9a134e27fc142003bf9870353980a8f4c2fbd03c8d0171e4048ef30db6fe15388a023100d0e96768bc6adc91f93ae5704e86888853f479f32a45bfd436dc8a030603d233c56880124b7971362aa11b71315ae304", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "special case hash", + "msg" : "383639363531363935", + "sig" : "3065023100ec0f635b7ce31988a07f41b3df35ca03c70e376bfb3b6ab24831a83be2121b9f9e93928b10a8f5fc0322bdb9edd406fe023066618ccb473c6dac3b14cfab6dfb24d219b37aec63425067c2c1c631d64a80b9cab6445f5a5439adb28bb99daa9234a5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "special case hash", + "msg" : "36353833393236333732", + "sig" : "306402304f2bea24f7de57901e365d4c332ddb62d294d0c5fd58342a43bdd3ba5cbaf25adaddb5944bfef9dcc88f94d93650bbbb02300851b97ddc433e4521c600904970e2bf55aa901e1aaaaf06818377f84a28e033a49eebc21ffe9cff3cbefd0963fbed00", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "special case hash", + "msg" : "3133323035303135373235", + "sig" : "3064023072a9bab30f8da1437f17115cc37b6ef8cf6591ed934d596675ad7b000c6a74cca5f37210a68228a58023790e3726c357023012d697c4e20b18f63a3e0164dca8ca4a5fa0058ad7cd1c571cef356e85fd8f56ab7963d8aba824e8d31efb3e690c27b9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "special case hash", + "msg" : "35303835333330373931", + "sig" : "3064023033b7105f4cc98a1ea2abad45dbbe3761b4613ddd350e62da91560da694be3e84b1684f9a8ee4b3f556c61d02af54446202302c86e3a216dc7dd784cdcbf5084bdf6cdc1c7e67dbd61f9f6ed161fda4d4c26167e5b12731cf2b0cf5d9a5f0b6124939", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "special case hash", + "msg" : "37383636383133313139", + "sig" : "30640230252e3b5b60b8f80748b83623e30013723115cabcc48770c0ab6e7ee29c429ef1d9da78db3a9a8504133b9bd6feceb82502301ba740f87907cf6d450080f7807a50f21c31cd245dd30f95849a168d63b37628e8043c292ab7f130a4468eaf8b47e56d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "special case hash", + "msg" : "32303832353339343239", + "sig" : "3066023100b8694dbf8310ccd78398a1cffa51493f95e3317f238291771cb331f8e3a9753774ae3be78df16d22b3fbe9ad45bed793023100daaead431bbdbf8d82368fbbd2473695683206ee67092c146b266ed32f56b31cb0f033eebf6c75118730eef7b7f96ba7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "special case hash", + "msg" : "3130303635393536363937", + "sig" : "3066023100d37ba39cd1b5289e7aa3f33afefa4df6821a07d3e8ee1c11e7df036c37e36214bb90264633d4c395644cd2cc2523833f0231008b0d58ed75af59e2abbcec9226836f176b27da2d9f3094f2d4a09898136436235025208cf5444265af66fed05b3dc27c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "special case hash", + "msg" : "33303234313831363034", + "sig" : "3066023100b4ef419020c0dcbdeeeed76c255560f1ed783c0f9e7fcea4c08a0714b9d1f491fda9ae7bb1eb96d294b02799f82861290231008d987611063d2f28cb309a56eaf1ea65f27d95c97b77a5f037f2f914fed728267aaf62a37f3c7b44fc4b15125b349863", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "special case hash", + "msg" : "37373637383532383734", + "sig" : "3066023100b2df7b11cf60ac93c078d19f37f889717aa5d9af1d00d0964f9e9f5257c3b51b3d3e47ca5b5aa72058ed63b52464e582023100b524968ea8c58d379e38f4cfa9da1527a2acb26d605d22f173fcf1e834db0d7f031cb9245cb62b8458ff499b8d3decbe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "special case hash", + "msg" : "353434313939393734", + "sig" : "3066023100e0edc08b4122b75ebbd1635d07f0bb55771bda15573a5081da971955f9a63f6decdd4919911dbfea503ea8ed1faad93d023100ca7850c74ce878587056206c590a1097d197a2090cfe3e057becfa2700c7a531623ae7331e163def693e26a97feb540d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "special case hash", + "msg" : "35383433343830333931", + "sig" : "3065023068f555eef5a323a929719bfd8cf81d6d8a977ecb35defd86fa54d8e5749c7b5f3e80087fbd39f8aa0cd29d8310bd6578023100e2c2314a50fc0ad78c1ec02ea77ee2e13dcef1460957c6b573f721d72c209ac5fb529ab20397234c59ed44f60400971a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "special case hash", + "msg" : "373138383932363239", + "sig" : "30660231009e330e29f18123813e83b9c6abd68de96a57f97a4005b88d5b470a67a541b6d3af12124cf8658b751671c6698fb8b021023100d210fba9bde6ef077ca06b75e1cf7ce8dd70b08e9dd42d81a215ef9272f1779ae3e9f0dec510571d87237cc6bf3203e8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "special case hash", + "msg" : "31373433323233343433", + "sig" : "30650230483192056f753f64ddf0f21072b73d68893e6fa5432c981c7a1955b6592a6045a5c1c58c383e70023c34e09b7964ec8d02310094b005d5f98c4fd2ad40ff8e03a8599f45e206082112f834df1d48502d2ac690cd3204f0078913794c9c39077ad6c58b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "special case hash", + "msg" : "32343036303035393336", + "sig" : "306402302b7ec14fd77c4b33230dd0a4e2710fbd307e469baec54b6f25daac7e196b7b4b5df251cdddba7bdc9836ca1319bb900b0230590036192586ff66ae9a288199db9d02bbd5b703f8c329a9a1f986001b190f20ae96fe8b63681eda17bac2a57fd40f2e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "special case hash", + "msg" : "31363134303336393838", + "sig" : "306402302611484e7ff47dfaece4aa883dd73f891869e2786f20c87b980055ddd792070c0d0d9a370878126bab89a402b9ea173c02304e0006b8aabe9d6a3c3018d9c87eae7f46461187d3c20b33e975c850599ec1cb52c76e1f507e439afc43f9f682e7a8d2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "special case hash", + "msg" : "32303935343235363835", + "sig" : "306502302d504e38cdb1bb80bf29e07afbc66aea732accc85a722011069988f21eef685084f55efa30bfe32427eb8636db9171b4023100883e3d80d766ccb29e73a9e929111930da8353ec69769785633fe1b4505f9051e78d50c79a6b7c885c10b160bbb57fb6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "special case hash", + "msg" : "31303038303938393833", + "sig" : "3064023028dc1b63dc61ecde754ff4913780e486339103178e27d761987dac0b03c9bdf4a4a96b8680fa07fc47ae175b780e896e02305a9898eedf8781b9afeb506e0272a12c0c79bb893b8a5893c5a0a1bf4324d46dde71a245be2fd8aa2975fdeb40adf8f3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "special case hash", + "msg" : "31353734313437393237", + "sig" : "306402304c978a47b9e9449337178aa6413a794c4c9bf182a42062646a469b1d2c2c95621e818e661352b07e63254b6954e1459802306997345f05cfc05c0fd4d1dd133e555e5e5002e0929a59f60bbffc354234783ebf4fe5db10a870952cabd453635c1082", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "special case hash", + "msg" : "32383636373731353232", + "sig" : "3065023036d8e2cfc80d0436e1fad3702ec05aa138618cdb745652cb85b0b121ee107bdf1ade0464dc0c6bd16875bcc364044d8c023100898b8775c9b39aa9fd130b5ab77e6c462ced6114898045b7f606142277d9eb2aa897f24c9ba4c8d112111de04dc57c10", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "special case hash", + "msg" : "31363934323830373837", + "sig" : "3065023100ce2bdcf924caaa81e79bd7dd983dfeeee91652e4ea6edd077f8b56ada4953733a22dd3a6336446a648aec4ffc367cb3e023008eb09faeef4b0e5c1262eda2127464f7e2981ea1736e80afc7c622461c3d26fe08694fb4914ce9dbba83704e3077b3c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "special case hash", + "msg" : "39393231363932353638", + "sig" : "3066023100e3a1b4b0567d6c664dec02f3ee9cd8581129046944b0e6650f6e6a41b5d9d4bf79d7a6fd54ea5a218492cfa1bb03ca07023100986206925cbfa186c7d88f7100d87dd3b2d03b8789309a722d582f119eef48cd0ea5460917cf27246c31f90e28540424", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "special case hash", + "msg" : "3131363039343339373938", + "sig" : "306502310095a5e29940e42099c4637f4ae51e7d1ec02be0dcfb0b627030984c35e477e80cc57e7eef970e384dee16a9b9fc8f2bf202300ca166c390339653cde84e79a87e5ceb4f52c1a515a5878542fd82705b9983976fd31a4123b5d0bde95a0818114cf462", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "special case hash", + "msg" : "37313836313632313030", + "sig" : "3066023100c30c49d0ba131944e2075daacb1259d5580a712a08f73d889c4d3d484d73dd9719a439a986f48b072c4595c507a01083023100a5595c0691bc2d215f981fab513e3a88a452f2a1433367b99b02b6efe507519afedbe1ad0337899944e29c9ccccb2476", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "special case hash", + "msg" : "33323934333437313737", + "sig" : "30650231009fd0585f8740669885c162842bba25323ea12b1d05e524bb945cad4e31538742eda5128f467b3c562c5f0a99019d3406023043acfadd03915c2350e1d8e514c47eb36f3c3456169c9a562a6262c1c2d7d33378bf9fec7f220239d5c61e06414414a4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 315, + "comment" : "special case hash", + "msg" : "3138353134343535313230", + "sig" : "306402304ecac0cdbf665c584f8a40614cd55d042706c54895b1de02984fe309122566c959a4dd3315e7d3f089879f8f45821336023009187da6587a3de90eba41f4e6510e711f4467f3122971566ecc39a4bd53e95b8a19380e20ec2a7c752d29de54fd2e8f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 316, + "comment" : "special case hash", + "msg" : "343736303433393330", + "sig" : "3065023037a1ba49f11e97ad0ec47e687c6c6e94f794f874720c0dd2da501437b50e5b00fb6ed33adf7cf1f9c870fd3d37165bf7023100b3ad08c9886b4ca1593a68938b67142c65ed4da1714c22204cba71300c094ccdbdf84c38a3f6d896db72ed5051a19266", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 317, + "comment" : "special case hash", + "msg" : "32353637333738373431", + "sig" : "3066023100a0abe896d2f30207bc9b21e75400eedb88d3498d49806f41aa8e7f9bd815a33382f278db39710c2cb097937790d0236c0231009a29aded30e8ce4790756208d12044e18c34168608026000a883044dd0d91109d866b422a054c232810ddfbb2ae440bb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 318, + "comment" : "special case hash", + "msg" : "35373339393334393935", + "sig" : "3065023100b024fc3479d0ddde1c9e06b63c9bfb76a00d0f2f555220cb9a1311c2deec32eb3d6d2b648f5e8c104d5f88931754c0c20230767950cc149697edbae836f977bd38d89d141ff9774147b13ddd525b7a3f3a14a80d9979856f65b99a6faff173b5d6eb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 319, + "comment" : "special case hash", + "msg" : "33343738333636313339", + "sig" : "306402302a0ae7b5d42645051212cafb7339b9c5283d1fd9881d77ad5c18d25ee10907b7809740a510e65aecd61b53ba3a0f660a02304c0457dd19ef6e4d6ae65f45417ddf1a58c07663a86737d271becfa3ea5724b6018f1fa9e64fd08601a7dbd3957761d9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 320, + "comment" : "special case hash", + "msg" : "363439303532363032", + "sig" : "306502300c1657320faca6668c6e9f06f657a310b01939a7d9640fa0429872fe28bd1667688bc162221285ecfb14e8d80627450a023100f5272aa08c321aa4f7e520825cc720f6511d635598c648d4d514669b3ad803ad259c799e195a095982f66c176435be21", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 321, + "comment" : "special case hash", + "msg" : "34373633383837343936", + "sig" : "3066023100d821798a7a72bfb483e6e9840e8d921200ef1976b7e514036bf9133a01740ce397c73fa046054438c5806c294a02c6800231008c5d12887fcd945ba123fc5a5605d13a5a3e7e781ad69c6103577ee9dc47adc3e39a21080dd50304b59e5f5cf3f5a385", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 322, + "comment" : "special case hash", + "msg" : "353739303230303830", + "sig" : "3065023100c996bd6fa63c9586779f27523d5583135a594808514f98cc44cac1fa5cfa03c78c7f12f746c6bd20608ecbe3060eb068023027d40a11d52373df3054a28b0ab98a91ad689d1211d69919fc04cadc22ff0367d3ef9433012a760c1d1df3715c8d5cf3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 323, + "comment" : "special case hash", + "msg" : "35333434373837383438", + "sig" : "3065023042dd6c8d995938701a538909ed6aeae0ba50c995138de84e195bbb9c56180e108d4a6274548c7be6e121c4d218d2d4a0023100fae8668bb2003f0da1dc90bec67d354ccbb899432599c3198b96c5ca4bd2324c46998f4fb76a123467cf24570b1b6916", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 324, + "comment" : "special case hash", + "msg" : "3139323636343130393230", + "sig" : "30650230061f185633291b9a768e15ec03a2b7c356c757b023b61e313fdf0c5349d128a78668d20b2561709b3bd8451b920f12ab0231008fc5edc66410dbf20a7cbc3498e405761756ed39866856e74256ac1f255f62b0edff519762ecdbbc8395d14715c4388e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 325, + "comment" : "special case hash", + "msg" : "33373033393135373035", + "sig" : "3065023069326e047c62e8bac5c090b76bf73ae652fa9a6aecfa1ccb8702f419094c9727511264fb1aeec00e425c7a0d746793d30231009dbddd22db4a77dbe16114bc6fbb981aecba7e82a9cbc1ed385e28a51793561770fb3f9696090efca24f268d8788f2c9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 326, + "comment" : "special case hash", + "msg" : "3831353435373730", + "sig" : "306402304ca1df89b23ed5efcdf601d295c45e402d786a14d62f7261104e4cb05b8cae17abb095799e71173841749615c829411b02301bb777e0a6fee8a2337a436a6fa26a487de4640ff97d57b44b55305989803863d748c7302f2dfde8b8cedd69bb602e2d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 327, + "comment" : "special case hash", + "msg" : "313935353330333737", + "sig" : "3065023067be1b06f67172c503a5ac50582235d30bc9079eaa4cdec69a39c096310f8d99186cc9af7c8b4369a291d3e921d60705023100ab645fc91f06b1ff7cc58fccf6f7cfac74db30d839748a78cb5f3b8fefc7a06f3b5ff0310a8580c6050bebb75eda972c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 328, + "comment" : "special case hash", + "msg" : "31323637383130393033", + "sig" : "3066023100d966442d6c29e5a4cc60e2374eccd373db3ebe405ee7c9664c4273100cd1899a1c58110487528616d8c5321dbf5227640231009bb0e4a2c041a3b7b672029fe480d155f57671ecd6eb598660d025acce1f613d03cd6cff4a214131c8c7a8ad22df1397", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 329, + "comment" : "special case hash", + "msg" : "3131313830373230383135", + "sig" : "3064023008a84a2bc39b082ab82e6e45f088a36f1cb255f97ec8124eca929d4506d7dab63957c647994be2c2c7344f902de5b38f02300c9645e84a304ba0970ca5ce00b8c8a971fa0d0bcbec6a70134894c44d3075030ff04333ea3889f847a1ed769ee618ee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 330, + "comment" : "special case hash", + "msg" : "38333831383639323930", + "sig" : "306502310083004b034202bbf51a327d32ed3ddf67b46eda9bac695a4422744a4bd99aaac3b3e8ed80ddac6538939c9385d6c8f61602307b4e61926cb9afa8cdaaf44909df6dc6449887d59fe2acac05f7684a235fa77179bdbcc69fd8f359e8eda19e5a5d4807", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 331, + "comment" : "special case hash", + "msg" : "33313331323837323737", + "sig" : "3065023100ad93375a1d374c41e5de268a8c08c205ff5652445bfe3ddf4ca77a70f5819f9f06db861d82fc9637946f0fe38457f2bd02304bc043acbc6a68d4824ed768af9476ad5b93e4cb3bbac284fb5fbd548ae3b96c265c6d1ef4588a3e2da21b124c0d6b12", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 332, + "comment" : "special case hash", + "msg" : "3134333331393236353338", + "sig" : "30660231009e0d45d2dc93fd363dc919405818e39922f3f9dd0827bcad86d4ba80a44b45a6f60b8e593b580c91262b32859dbb1e53023100eb9b8dfe5ba4a055a974f19b488f3a6fa07161006ac94eb1fe1c12dd0e20f3a7be38a37ce96d671183c5871249b2a3c5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 333, + "comment" : "special case hash", + "msg" : "333434393038323336", + "sig" : "306502307a5d04cd2fda59d8565c79ea2a7f1289ab79cae9fde060094c805c591a2534e4393e28c3fd858529bf17643846aceb830231008de0d8c0092fd02d554afe25f814744beaaa17c6946a6387ec7046b602db8a6c900246c2fb63fcef2ac8d9394444a0fc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 334, + "comment" : "special case hash", + "msg" : "36383239383335393239", + "sig" : "3065023100a564eea0cdac051a769f8ff1e0c834a288ce514f67d138113727b53a1a6fc95ce237367b91f1b91b2f65d589adc8288e0230182e5b47b6fbd8e741a04e809487ba5fcb8a5f2f1b9af6ce214128623a4768e38e6ddc958ff39078c36c04a314708427", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 335, + "comment" : "special case hash", + "msg" : "33343435313538303233", + "sig" : "306402306758867cd1ca1446cc41043d1625c967a0ae04d9db17bbb42fa9c076b3593125d63cd3e7471ee6cdba5235a21cec2f220230563db387adb537e1d89231d935ac790316925aeb29132b9f87bee91116c33bf50943fe39b671ce9535dca0a5d22bbfa4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 336, + "comment" : "special case hash", + "msg" : "3132363937393837363434", + "sig" : "3066023100cde033e38d3f791db87d8a6907516bd8021acd47e897df683fda529d48050f8b5688f6361daf1b14bc3f45fc7f76150f023100e14f4811a667c85335a4709a589ea46bac72055b794eaea92d28e834d5bc459c605fe4f27c1ab18d186d59e7d205cb67", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 337, + "comment" : "special case hash", + "msg" : "333939323432353533", + "sig" : "3065023100f2384468b55553c68f9764d8248cfd7358d604fa377ebb13828c43a8ebdf308fbbbebfa49a9458bfda957d2068d24e3f02301fdf4891d56e3e90c02b05c14c27c17f56f8e6aa144f02328c90109e1f70c9e3f582f0d299c44da505c543cc89c6a990", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 338, + "comment" : "special case hash", + "msg" : "31363031393737393737", + "sig" : "3065023100b1ccafedcc21ba90b342fa23c0149f3d12a939ab6c3342b36ae61fddbdc753927a7c3e978bd780cf25cd78c8c5efe28002304c32a73f3157bbe2384095eb67726b9cd3c2623b98a182a3b4f00e8db933e1113b7ada2695a7d79b471026462b20e289", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 339, + "comment" : "special case hash", + "msg" : "3130383738373535313435", + "sig" : "3066023100f3ed170e449758299ae55eb85244745e1876621c1f708e07e55c0d2d9ab5f9af9e0a8b3c7bdf8936ab3c9ebd1908e9dc023100da62ccdb658868147286d7269bcbd4addb4dec9ea3d5d79fdbe0ccffa40d055170bddeb4ef4c5e0bc99fae5db62b4477", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 340, + "comment" : "special case hash", + "msg" : "37303034323532393939", + "sig" : "306502310083455fc4629e7693c8e495fec2d29bb23bb6db79180fcfa83a4f9310d9db27e29297dee27ee80a71ab2f7a2d59f48b8802307736c056c8f2bb57e9fb6b8de0ab6d09879f6611e737634e7b6337aa5c5a01f515d5e3702dec9a702177c816e32bac67", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 341, + "comment" : "special case hash", + "msg" : "31353635333235323833", + "sig" : "3065023074961587cbe49bbf0a73fea82b8b2242f67b0ea09224774639f437c60378a36b2d511a9145d576b440dffd1f02286a8b0231008fb95d46c22889085cc1d3e20bcfbcbc52f4532445f76f08efae2de8b56fe8525204643330dfd23cce946687a0aef046", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 342, + "comment" : "special case hash", + "msg" : "3233383236333432333530", + "sig" : "3065023100a3fd322330d0f0efccc54bd7d73c3159eb1bcca08cec369a4a08fd00f9ec6d482ced58eb08a0d7c2113bd5575de4917d0230164e3232a628c40fbba1de82bfb9627cec78a8040cf325a5a8bb8f864c2ac19e3524ac93f4db5713ce62ba256176e05e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 343, + "comment" : "special case hash", + "msg" : "31343437383437303635", + "sig" : "306502304c862ff9e4ff88f9a58e9fceaaf9bbb30740d3f6c8c6a69b5627fe234b144f8cdf09520735cfd708f5e341a78cc4873d023100a861972514a0e975cf2da214125ec93288524cc77492ed63c516424278e5ec8d41724467cb7c3111fa34c69193abb435", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 344, + "comment" : "special case hash", + "msg" : "3134323630323035353434", + "sig" : "3065023062225e4e492a9773397870336168960a66b9e50391ef7289cb2d3878f32252dc1b904f6682545e14564e415bd93e01170231009f4d0327f79e043505c691e361fa2e00f87f41324777eca6966f4bea2fa0858876aa01980b2cad7f66037524de49bf65", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 345, + "comment" : "special case hash", + "msg" : "31393933383335323835", + "sig" : "30640230450c65d2d88ba464eee3a5ce9310b519d5dcf608799fb2275eee987a67c2c4d7ac53716987cc5139c18c67ef07b1e20702301ee0439311a7bce1c4fed0a3152d1b354d96536c6ca0c9188ac1f1afcc5cd7305b5611ef0d19d8bd57c5059976dc5e68", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 346, + "comment" : "special case hash", + "msg" : "34323932313533353233", + "sig" : "3066023100aa2575fb5bea0effb5247d20c3d0165d575831840b5c18b0245a99a61b7ad5d7bf8a8cfcc375e095a84e781025bee3ee0231009c8b7797ad330abc206060b28b6ca1c639d89f59582528bda1527e3ab081697a2ab576f9d09c2ee329dd73231667308d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 347, + "comment" : "special case hash", + "msg" : "34343539393031343936", + "sig" : "3064023001fc45285aa2c2e50458199ade2ded0dd36b1de03e8969175be4a6f09f9719b195ded8d9eb4ea132d95d19a3528fd6c9023059609a358c5919fef4781061804d4d64a067edecdcfd14620161aae3ef2735095a558e4f8ae345040123f093e5f70af2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 348, + "comment" : "special case hash", + "msg" : "31333933393731313731", + "sig" : "3065023100d8e1f6b19e5b92e36060e59e53eeb788a4758c2c8ee9519f3949d5f3315abafbe937b8ed44d47e886a07c107aa8ac9f4023012550574318371e5168d0a339f20fcacaec87db211bba4d4e7c7e055b63b75fd31790ad285f4cc061378692b0a248e34", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 349, + "comment" : "special case hash", + "msg" : "32333930363936343935", + "sig" : "306402304815aec44a7a6b86ae87fc2556accd77832fa33a4710e02ec5ef6f41f68a910e6af4d173ae462a759bd98079b371bf5d02306e78d562f9e8be65e8d7a74a7305e5d6cf2f3c4c980f2b18dfb8e9c8b0134ec86548053b3d125e56d5872294d2d14ebc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 350, + "comment" : "special case hash", + "msg" : "3131343436303536323634", + "sig" : "3065023100d302f9db6b2d94e194412f0d40a135a554aee014bd939b3d7e45c1221ef7ce45c2aed875f9a2bc43dbc8264d92e444a5023004e7247b258c6e7739979c0a07282f62958ac45e52dd76a41d5e1aca31a5cda73d7b026d67b4d609803001cb661d74c6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 351, + "comment" : "special case hash", + "msg" : "363835303034373530", + "sig" : "3065023100889f0e2a6ae2ddcad1cde3f65b61d4dd40985917ba841b47a1f802491f5af5067722b7683df0fca7ee19d2b73724c8fd02301f989bac23b51c49e5d7dcc319eed2fc767e9b432bf75af92814d9e67a5d4b3398eb15e98b70527abbc029abc1bea524", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 352, + "comment" : "special case hash", + "msg" : "3232323035333630363139", + "sig" : "3066023100e69c70c679795ca7d2b66e2632529651c120055fa3cf25435fe8bb28987c02412ce73e6ca5ca7e0b42e9670c0a588175023100edd8513bff40cdca9e22659238fbcea2de2caeef53c5287a515db9168b3008ec446c9b94f28a6e021c69bc6637fc4634", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 353, + "comment" : "special case hash", + "msg" : "36323135363635313234", + "sig" : "30640230068cbecfd47bfd688f495df05e45fd5fced6d8e240605c5b2be5e69368740b694b9b1ea034af3180e571dd38a86369ef02301a1d2976f748d1621128013c61abda5398a3e24f0073d1a6e07a1e96c12be4f1e2e7b144f9b5a350500acfc5cb0698d9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 354, + "comment" : "Signature generated without truncating the hash", + "msg" : "313233343030", + "sig" : "306402300e2c56eb5f6612f0c2b22ab03d57d9a443075a2b7a0b460883e4f4876121e9b6f1ed67de20b79f028f7f66ed0281db7102303916b72b12d035a307b7c45a9878333a8c61445aad2330dc49a12b92e2e5dab72e53e5789f40afb90aea0ea4431f2dd1", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04ca5ee479ad6624ab5870539a56a23b3816eef7bbc67156836dfb58c425fdb7213e31770f12b43152e887d88a3afb4b182aceec92b3139aca8396402a8f81bb5014e748eab2e2059f8656a883e62d78b9dc988b98332627f95232d37df26585d3", + "wx" : "00ca5ee479ad6624ab5870539a56a23b3816eef7bbc67156836dfb58c425fdb7213e31770f12b43152e887d88a3afb4b18", + "wy" : "2aceec92b3139aca8396402a8f81bb5014e748eab2e2059f8656a883e62d78b9dc988b98332627f95232d37df26585d3" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004ca5ee479ad6624ab5870539a56a23b3816eef7bbc67156836dfb58c425fdb7213e31770f12b43152e887d88a3afb4b182aceec92b3139aca8396402a8f81bb5014e748eab2e2059f8656a883e62d78b9dc988b98332627f95232d37df26585d3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEyl7kea1mJKtYcFOaVqI7OBbu97vGcVaD\nbftYxCX9tyE+MXcPErQxUuiH2Io6+0sYKs7skrMTmsqDlkAqj4G7UBTnSOqy4gWf\nhlaog+YteLncmIuYMyYn+VIy033yZYXT\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 355, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "304d0218389cb27e0bc8d21fa7e5f24cb74f58851313e696333ad68b023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 356, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "3066023100fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff0000000000000000fffffffe023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52970", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0470e6a90b4e076bf51dfa01fa44de49b448f7afa0f3d07677f1682ca776d404b2a0feef66b005ea28ba99b6ce21d0ca12424f7d179951fb89156cdf04aed6db056c98592c651b5a881abc34e2401127fb81c64e90cee83269c5141f9a3c7bce78", + "wx" : "70e6a90b4e076bf51dfa01fa44de49b448f7afa0f3d07677f1682ca776d404b2a0feef66b005ea28ba99b6ce21d0ca12", + "wy" : "424f7d179951fb89156cdf04aed6db056c98592c651b5a881abc34e2401127fb81c64e90cee83269c5141f9a3c7bce78" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000470e6a90b4e076bf51dfa01fa44de49b448f7afa0f3d07677f1682ca776d404b2a0feef66b005ea28ba99b6ce21d0ca12424f7d179951fb89156cdf04aed6db056c98592c651b5a881abc34e2401127fb81c64e90cee83269c5141f9a3c7bce78", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEcOapC04Ha/Ud+gH6RN5JtEj3r6Dz0HZ3\n8Wgsp3bUBLKg/u9msAXqKLqZts4h0MoSQk99F5lR+4kVbN8ErtbbBWyYWSxlG1qI\nGrw04kARJ/uBxk6QzugyacUUH5o8e854\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 357, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "3066023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52972023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52971", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "045a568474805fbf9acc1e5756d296696290b73d4d1c3b197f48aff03b919f0111823f90ea024af1c78e7c803e2297662d4c1c79edc9c694620c1f5b5cc7dd9ff89a42442747857cace26b6ebc99962ec3a68a8e4072226d6d98a2a866dd97c203", + "wx" : "5a568474805fbf9acc1e5756d296696290b73d4d1c3b197f48aff03b919f0111823f90ea024af1c78e7c803e2297662d", + "wy" : "4c1c79edc9c694620c1f5b5cc7dd9ff89a42442747857cace26b6ebc99962ec3a68a8e4072226d6d98a2a866dd97c203" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200045a568474805fbf9acc1e5756d296696290b73d4d1c3b197f48aff03b919f0111823f90ea024af1c78e7c803e2297662d4c1c79edc9c694620c1f5b5cc7dd9ff89a42442747857cace26b6ebc99962ec3a68a8e4072226d6d98a2a866dd97c203", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEWlaEdIBfv5rMHldW0pZpYpC3PU0cOxl/\nSK/wO5GfARGCP5DqAkrxx458gD4il2YtTBx57cnGlGIMH1tcx92f+JpCRCdHhXys\n4mtuvJmWLsOmio5AciJtbZiiqGbdl8ID\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 358, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d1aee55fdc2a716ba2fabcb57020b72e539bf05c7902f98e105bf83d4cc10c2a159a3cf7e01d749d2205f4da6bd8fcf1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0488531382963bfe4e179f0b457ecd446528b98d349edbd8e7d0f6c1673b4ae2a7629b3345a7eae2e7c48358c13bdbe0389375c849dd571d91f2a3bf8994f53f82261f38172806c4d725de2029e887bfe036f38d6985ea5a22c52169db6e4213da", + "wx" : "0088531382963bfe4e179f0b457ecd446528b98d349edbd8e7d0f6c1673b4ae2a7629b3345a7eae2e7c48358c13bdbe038", + "wy" : "009375c849dd571d91f2a3bf8994f53f82261f38172806c4d725de2029e887bfe036f38d6985ea5a22c52169db6e4213da" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000488531382963bfe4e179f0b457ecd446528b98d349edbd8e7d0f6c1673b4ae2a7629b3345a7eae2e7c48358c13bdbe0389375c849dd571d91f2a3bf8994f53f82261f38172806c4d725de2029e887bfe036f38d6985ea5a22c52169db6e4213da", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEiFMTgpY7/k4XnwtFfs1EZSi5jTSe29jn\n0PbBZztK4qdimzNFp+ri58SDWME72+A4k3XISd1XHZHyo7+JlPU/giYfOBcoBsTX\nJd4gKeiHv+A2841phepaIsUhadtuQhPa\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 359, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b6b681dc484f4f020fd3f7e626d88edc6ded1b382ef3e143d60887b51394260832d4d8f2ef70458f9fa90e38c2e19e4f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04080da57d67dba48eb50eef484cf668d981e1bf30c357c3fd21a43cdc41f267c3f186bf87e3680239bac09930f144263c5f28777ad8bcbfc3eb0369e0f7b18392a12397a4fbe15a2a1f6e2e5b4067c82681c89c73db25eca18c6b25768429cef0", + "wx" : "080da57d67dba48eb50eef484cf668d981e1bf30c357c3fd21a43cdc41f267c3f186bf87e3680239bac09930f144263c", + "wy" : "5f28777ad8bcbfc3eb0369e0f7b18392a12397a4fbe15a2a1f6e2e5b4067c82681c89c73db25eca18c6b25768429cef0" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004080da57d67dba48eb50eef484cf668d981e1bf30c357c3fd21a43cdc41f267c3f186bf87e3680239bac09930f144263c5f28777ad8bcbfc3eb0369e0f7b18392a12397a4fbe15a2a1f6e2e5b4067c82681c89c73db25eca18c6b25768429cef0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAECA2lfWfbpI61Du9ITPZo2YHhvzDDV8P9\nIaQ83EHyZ8Pxhr+H42gCObrAmTDxRCY8Xyh3eti8v8PrA2ng97GDkqEjl6T74Voq\nH24uW0BnyCaByJxz2yXsoYxrJXaEKc7w\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 360, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020102020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "040e74a096d7f6ee1be9b4160d6b79baba4d25b4fb6fbdd38f5a9ed5cc1ac79943be71ede093e504c7dc0832daeb898a05a8d005b30c894686f6ecb2bc696e25effaccd3c9e4b48122db567c0118a0b983b757c2f40082dc374f8f6117a8e76fc0", + "wx" : "0e74a096d7f6ee1be9b4160d6b79baba4d25b4fb6fbdd38f5a9ed5cc1ac79943be71ede093e504c7dc0832daeb898a05", + "wy" : "00a8d005b30c894686f6ecb2bc696e25effaccd3c9e4b48122db567c0118a0b983b757c2f40082dc374f8f6117a8e76fc0" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200040e74a096d7f6ee1be9b4160d6b79baba4d25b4fb6fbdd38f5a9ed5cc1ac79943be71ede093e504c7dc0832daeb898a05a8d005b30c894686f6ecb2bc696e25effaccd3c9e4b48122db567c0118a0b983b757c2f40082dc374f8f6117a8e76fc0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEDnSgltf27hvptBYNa3m6uk0ltPtvvdOP\nWp7VzBrHmUO+ce3gk+UEx9wIMtrriYoFqNAFswyJRob27LK8aW4l7/rM08nktIEi\n21Z8ARiguYO3V8L0AILcN0+PYReo52/A\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 361, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020102020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04a2ad0e27b40410d16077ddc5e415f109d328bf75e73a0f56876fef731285f83188b207a68690a40e76ed23e2c5e49fcf604f1c5d7d7df365005d40e209f4da7bb06f310d5a1660ad6236577fbb47955261f507d23b83013ffb951bd76908e76c", + "wx" : "00a2ad0e27b40410d16077ddc5e415f109d328bf75e73a0f56876fef731285f83188b207a68690a40e76ed23e2c5e49fcf", + "wy" : "604f1c5d7d7df365005d40e209f4da7bb06f310d5a1660ad6236577fbb47955261f507d23b83013ffb951bd76908e76c" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a2ad0e27b40410d16077ddc5e415f109d328bf75e73a0f56876fef731285f83188b207a68690a40e76ed23e2c5e49fcf604f1c5d7d7df365005d40e209f4da7bb06f310d5a1660ad6236577fbb47955261f507d23b83013ffb951bd76908e76c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEoq0OJ7QEENFgd93F5BXxCdMov3XnOg9W\nh2/vcxKF+DGIsgemhpCkDnbtI+LF5J/PYE8cXX1982UAXUDiCfTae7BvMQ1aFmCt\nYjZXf7tHlVJh9QfSO4MBP/uVG9dpCOds\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 362, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020102020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 363, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3036023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc52975020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04a233025c12d20f49dc50dc802e79f03c7ce1750b9204b51325d90b5ade08f4a74ef6efb081ed3156d64a0110d60fffabb924881891ee984cf51949dee96cfd7c9759b1ff00f0dbdc718d52117079d5d8bd6c86c6f532276af38b779bf2350d7f", + "wx" : "00a233025c12d20f49dc50dc802e79f03c7ce1750b9204b51325d90b5ade08f4a74ef6efb081ed3156d64a0110d60fffab", + "wy" : "00b924881891ee984cf51949dee96cfd7c9759b1ff00f0dbdc718d52117079d5d8bd6c86c6f532276af38b779bf2350d7f" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a233025c12d20f49dc50dc802e79f03c7ce1750b9204b51325d90b5ade08f4a74ef6efb081ed3156d64a0110d60fffabb924881891ee984cf51949dee96cfd7c9759b1ff00f0dbdc718d52117079d5d8bd6c86c6f532276af38b779bf2350d7f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEojMCXBLSD0ncUNyALnnwPHzhdQuSBLUT\nJdkLWt4I9KdO9u+wge0xVtZKARDWD/+ruSSIGJHumEz1GUne6Wz9fJdZsf8A8Nvc\ncY1SEXB51di9bIbG9TInavOLd5vyNQ1/\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 364, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3036020102023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accd7fffa", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "043c9bb63607cdea0585f38d9780c9ac3e9a5a58153e2aacc4bc7a1d638d12e32c4d3a90c0c114b232c6f16e23e4bebb24da2ac2ccedc5494fe534a9abaea3013de0176f1b0e91bcd62154bdf3f604091a5008b2466702d0e2f93e4a4b6c601a54", + "wx" : "3c9bb63607cdea0585f38d9780c9ac3e9a5a58153e2aacc4bc7a1d638d12e32c4d3a90c0c114b232c6f16e23e4bebb24", + "wy" : "00da2ac2ccedc5494fe534a9abaea3013de0176f1b0e91bcd62154bdf3f604091a5008b2466702d0e2f93e4a4b6c601a54" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200043c9bb63607cdea0585f38d9780c9ac3e9a5a58153e2aacc4bc7a1d638d12e32c4d3a90c0c114b232c6f16e23e4bebb24da2ac2ccedc5494fe534a9abaea3013de0176f1b0e91bcd62154bdf3f604091a5008b2466702d0e2f93e4a4b6c601a54", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEPJu2NgfN6gWF842XgMmsPppaWBU+KqzE\nvHodY40S4yxNOpDAwRSyMsbxbiPkvrsk2irCzO3FSU/lNKmrrqMBPeAXbxsOkbzW\nIVS98/YECRpQCLJGZwLQ4vk+SktsYBpU\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 365, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "3036020201000230489122448912244891224489122448912244891224489122347ce79bc437f4d071aaa92c7d6c882ae8734dc18cb0d553", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04559a66ef77752fd856976f36ed315619932204599bd7ef91d1a53ac1e7c90b3969cab8143b7a53c4bf5a3fe39f649eb61f00f86dd8b8556c4815b2a01c59eb6cc03c97b94b6db4318249fe489e36ac9635876b1ca2ec0999caef5e1a6a58a70d", + "wx" : "559a66ef77752fd856976f36ed315619932204599bd7ef91d1a53ac1e7c90b3969cab8143b7a53c4bf5a3fe39f649eb6", + "wy" : "1f00f86dd8b8556c4815b2a01c59eb6cc03c97b94b6db4318249fe489e36ac9635876b1ca2ec0999caef5e1a6a58a70d" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004559a66ef77752fd856976f36ed315619932204599bd7ef91d1a53ac1e7c90b3969cab8143b7a53c4bf5a3fe39f649eb61f00f86dd8b8556c4815b2a01c59eb6cc03c97b94b6db4318249fe489e36ac9635876b1ca2ec0999caef5e1a6a58a70d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEVZpm73d1L9hWl2827TFWGZMiBFmb1++R\n0aU6wefJCzlpyrgUO3pTxL9aP+OfZJ62HwD4bdi4VWxIFbKgHFnrbMA8l7lLbbQx\ngkn+SJ42rJY1h2scouwJmcrvXhpqWKcN\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 366, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "303c02072d9b4d347952cd023100ce751512561b6f57c75342848a3ff98ccf9c3f0219b6b68d00449e6c971a85d2e2ce73554b59219d54d2083b46327351", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "040548e79a17fd3a114d830ea88f218ee1ef7aa3f8dc139e0a8b9b60e25049a816ef449e8bd5dae867446495fdf20f47700363a1e8afefb02ebfd59df90b6d23ff7d5f706f9b26daebae1d4657ac342844ee9c2e0e9269f7efe7ab91e0303c115d", + "wx" : "0548e79a17fd3a114d830ea88f218ee1ef7aa3f8dc139e0a8b9b60e25049a816ef449e8bd5dae867446495fdf20f4770", + "wy" : "0363a1e8afefb02ebfd59df90b6d23ff7d5f706f9b26daebae1d4657ac342844ee9c2e0e9269f7efe7ab91e0303c115d" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200040548e79a17fd3a114d830ea88f218ee1ef7aa3f8dc139e0a8b9b60e25049a816ef449e8bd5dae867446495fdf20f47700363a1e8afefb02ebfd59df90b6d23ff7d5f706f9b26daebae1d4657ac342844ee9c2e0e9269f7efe7ab91e0303c115d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEBUjnmhf9OhFNgw6ojyGO4e96o/jcE54K\ni5tg4lBJqBbvRJ6L1droZ0Rklf3yD0dwA2Oh6K/vsC6/1Z35C20j/31fcG+bJtrr\nrh1GV6w0KETunC4Okmn37+erkeAwPBFd\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 367, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3041020d1033e67e37b32b445580bf4efb02302ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad52ad5215c51b320e460542f9cc38968ccdf4263684004eb79a452", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04a0eb670630f9bbbd963c5750de7bcbae4ddfd37b13fe7690eec6861a3c56c8efb87dbbf85ccd953c659d382c3d7df76afb08840635a16ac7ecf3de2dc28a77c8af9d49e5a832551e3354a2b311e52be86720d9b2fbb78d11a8aec61606a29f0d", + "wx" : "00a0eb670630f9bbbd963c5750de7bcbae4ddfd37b13fe7690eec6861a3c56c8efb87dbbf85ccd953c659d382c3d7df76a", + "wy" : "00fb08840635a16ac7ecf3de2dc28a77c8af9d49e5a832551e3354a2b311e52be86720d9b2fbb78d11a8aec61606a29f0d" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a0eb670630f9bbbd963c5750de7bcbae4ddfd37b13fe7690eec6861a3c56c8efb87dbbf85ccd953c659d382c3d7df76afb08840635a16ac7ecf3de2dc28a77c8af9d49e5a832551e3354a2b311e52be86720d9b2fbb78d11a8aec61606a29f0d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEoOtnBjD5u72WPFdQ3nvLrk3f03sT/naQ\n7saGGjxWyO+4fbv4XM2VPGWdOCw9ffdq+wiEBjWhasfs894twop3yK+dSeWoMlUe\nM1SisxHlK+hnINmy+7eNEaiuxhYGop8N\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 368, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "303602020100023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04254bce3041b00468445cb9ae597bc76c1279a8506142ce2427185b1d7f753d1c0aad94156b531a2071aa61c83ec842a3710d6c8c96766ae8b63396133e5872805e47d9ba39113e122d676d54dbb2460b59d986bdd33be346c021e8a71bb41ba9", + "wx" : "254bce3041b00468445cb9ae597bc76c1279a8506142ce2427185b1d7f753d1c0aad94156b531a2071aa61c83ec842a3", + "wy" : "710d6c8c96766ae8b63396133e5872805e47d9ba39113e122d676d54dbb2460b59d986bdd33be346c021e8a71bb41ba9" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004254bce3041b00468445cb9ae597bc76c1279a8506142ce2427185b1d7f753d1c0aad94156b531a2071aa61c83ec842a3710d6c8c96766ae8b63396133e5872805e47d9ba39113e122d676d54dbb2460b59d986bdd33be346c021e8a71bb41ba9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEJUvOMEGwBGhEXLmuWXvHbBJ5qFBhQs4k\nJxhbHX91PRwKrZQVa1MaIHGqYcg+yEKjcQ1sjJZ2aui2M5YTPlhygF5H2bo5ET4S\nLWdtVNuyRgtZ2Ya90zvjRsAh6KcbtBup\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 369, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "3041020d062522bbd3ecbe7c39e93e7c24023077a172dfe37a2c53f0b92ab60f0a8f085f49dbfd930719d6f9e587ea68ae57cb49cd35a88cf8c6acec02f057a3807a5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "049129db4446c2c598c4f81070f70f66c37c39323e01418c095de9902e0e1b20f26bc3e011ba84c10626ffdce836690c9f8e4a104fec4aaa4350c238617ee50456accc49efc3b73eb9548e1600c2483f1c4bae9ddf3ff92af17afd19f86274589c", + "wx" : "009129db4446c2c598c4f81070f70f66c37c39323e01418c095de9902e0e1b20f26bc3e011ba84c10626ffdce836690c9f", + "wy" : "008e4a104fec4aaa4350c238617ee50456accc49efc3b73eb9548e1600c2483f1c4bae9ddf3ff92af17afd19f86274589c" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200049129db4446c2c598c4f81070f70f66c37c39323e01418c095de9902e0e1b20f26bc3e011ba84c10626ffdce836690c9f8e4a104fec4aaa4350c238617ee50456accc49efc3b73eb9548e1600c2483f1c4bae9ddf3ff92af17afd19f86274589c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEkSnbREbCxZjE+BBw9w9mw3w5Mj4BQYwJ\nXemQLg4bIPJrw+ARuoTBBib/3Og2aQyfjkoQT+xKqkNQwjhhfuUEVqzMSe/Dtz65\nVI4WAMJIPxxLrp3fP/kq8Xr9GfhidFic\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 370, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "3065023100ffffffffffffffffffffffffffffffffffffffffffffffffc7634d81f4372ddf581a0db248b0a77aecec196accc528f3023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04a701a8111cdf97ced74a00a4514b2b526be8113e7df6cf7163aaee465880d26275b833b186d80f1862dc67ff768dde43e5a991f16f8f777311b17eabdc90b6ece3b5da776cfbebbc504382ca1abae1c6aa6a64d9c41110d97950514e99578ed8", + "wx" : "00a701a8111cdf97ced74a00a4514b2b526be8113e7df6cf7163aaee465880d26275b833b186d80f1862dc67ff768dde43", + "wy" : "00e5a991f16f8f777311b17eabdc90b6ece3b5da776cfbebbc504382ca1abae1c6aa6a64d9c41110d97950514e99578ed8" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a701a8111cdf97ced74a00a4514b2b526be8113e7df6cf7163aaee465880d26275b833b186d80f1862dc67ff768dde43e5a991f16f8f777311b17eabdc90b6ece3b5da776cfbebbc504382ca1abae1c6aa6a64d9c41110d97950514e99578ed8", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEpwGoERzfl87XSgCkUUsrUmvoET599s9x\nY6ruRliA0mJ1uDOxhtgPGGLcZ/92jd5D5amR8W+Pd3MRsX6r3JC27OO12nds++u8\nUEOCyhq64caqamTZxBEQ2XlQUU6ZV47Y\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 371, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 372, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3035023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04b6815ba05413bcf34f4c0704af590c1998d7fcd169541e1efe1567ca1dd71a22e35ac838b20c75281582044a57b58f456cdceb10612062779abadd8742c6e93ed74adf306f3b3a0f96b70dd1134b7558b64b55b200c5732c50f05aa032ae7c00", + "wx" : "00b6815ba05413bcf34f4c0704af590c1998d7fcd169541e1efe1567ca1dd71a22e35ac838b20c75281582044a57b58f45", + "wy" : "6cdceb10612062779abadd8742c6e93ed74adf306f3b3a0f96b70dd1134b7558b64b55b200c5732c50f05aa032ae7c00" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004b6815ba05413bcf34f4c0704af590c1998d7fcd169541e1efe1567ca1dd71a22e35ac838b20c75281582044a57b58f456cdceb10612062779abadd8742c6e93ed74adf306f3b3a0f96b70dd1134b7558b64b55b200c5732c50f05aa032ae7c00", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEtoFboFQTvPNPTAcEr1kMGZjX/NFpVB4e\n/hVnyh3XGiLjWsg4sgx1KBWCBEpXtY9FbNzrEGEgYneaut2HQsbpPtdK3zBvOzoP\nlrcN0RNLdVi2S1WyAMVzLFDwWqAyrnwA\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 373, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "306402307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b9023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "041af19841ff3df8bdc4f8cce957e0dab763efe413929b279f1d46dde1c6f2bbc55af1bb1d8011fc587a4d599a4ae7cd8d5f663860c43c88e08399f00ef6641123787956a2b7012883b5ff7c46bd156d96d3c02a63ef86e060a2a0fa5b80d0c0e5", + "wx" : "1af19841ff3df8bdc4f8cce957e0dab763efe413929b279f1d46dde1c6f2bbc55af1bb1d8011fc587a4d599a4ae7cd8d", + "wy" : "5f663860c43c88e08399f00ef6641123787956a2b7012883b5ff7c46bd156d96d3c02a63ef86e060a2a0fa5b80d0c0e5" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041af19841ff3df8bdc4f8cce957e0dab763efe413929b279f1d46dde1c6f2bbc55af1bb1d8011fc587a4d599a4ae7cd8d5f663860c43c88e08399f00ef6641123787956a2b7012883b5ff7c46bd156d96d3c02a63ef86e060a2a0fa5b80d0c0e5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEGvGYQf89+L3E+MzpV+Dat2Pv5BOSmyef\nHUbd4cbyu8Va8bsdgBH8WHpNWZpK582NX2Y4YMQ8iOCDmfAO9mQRI3h5VqK3ASiD\ntf98Rr0VbZbTwCpj74bgYKKg+luA0MDl\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 374, + "comment" : "edge case for signature malleability", + "msg" : "313233343030", + "sig" : "306402307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b902307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "046836084fddfcfd527cb3847fb8b911c0fa002537fa460ca8f5d40f025603a4d89aa6ec640fde0cc4b31c46239a1d0bb76beed7019892e87287e23f0d35093ab14c4d41c0efe8463ede3494230a384eb1bc410de918c5484a25640741acb8cc0d", + "wx" : "6836084fddfcfd527cb3847fb8b911c0fa002537fa460ca8f5d40f025603a4d89aa6ec640fde0cc4b31c46239a1d0bb7", + "wy" : "6beed7019892e87287e23f0d35093ab14c4d41c0efe8463ede3494230a384eb1bc410de918c5484a25640741acb8cc0d" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200046836084fddfcfd527cb3847fb8b911c0fa002537fa460ca8f5d40f025603a4d89aa6ec640fde0cc4b31c46239a1d0bb76beed7019892e87287e23f0d35093ab14c4d41c0efe8463ede3494230a384eb1bc410de918c5484a25640741acb8cc0d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEaDYIT938/VJ8s4R/uLkRwPoAJTf6Rgyo\n9dQPAlYDpNiapuxkD94MxLMcRiOaHQu3a+7XAZiS6HKH4j8NNQk6sUxNQcDv6EY+\n3jSUIwo4TrG8QQ3pGMVISiVkB0GsuMwN\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 375, + "comment" : "edge case for signature malleability", + "msg" : "313233343030", + "sig" : "306402307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294b902307fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294ba", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04b4b2d5a8b50ffabd34748e94498c1d4728d084f943fbddd4b3b6ee16eaa4da91613a82c98017132c94cd6fe4b87232f16d612228ed5d7d08bf0c8699677e3b8f3e718073b945a6c108d97a3b1433c79052b2655a18a3b2e621baa88198cb5f3c", + "wx" : "00b4b2d5a8b50ffabd34748e94498c1d4728d084f943fbddd4b3b6ee16eaa4da91613a82c98017132c94cd6fe4b87232f1", + "wy" : "6d612228ed5d7d08bf0c8699677e3b8f3e718073b945a6c108d97a3b1433c79052b2655a18a3b2e621baa88198cb5f3c" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004b4b2d5a8b50ffabd34748e94498c1d4728d084f943fbddd4b3b6ee16eaa4da91613a82c98017132c94cd6fe4b87232f16d612228ed5d7d08bf0c8699677e3b8f3e718073b945a6c108d97a3b1433c79052b2655a18a3b2e621baa88198cb5f3c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEtLLVqLUP+r00dI6USYwdRyjQhPlD+93U\ns7buFuqk2pFhOoLJgBcTLJTNb+S4cjLxbWEiKO1dfQi/DIaZZ347jz5xgHO5RabB\nCNl6OxQzx5BSsmVaGKOy5iG6qIGYy188\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 376, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158ca", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04842b3d89e54d9a4b5694d9251bba20ae4854c510dc0b6ef7033e4045ba4e64b6ddcd36299aac554dbac6db3e27c98123868258190297e1d6bae648a6dee2285886233afd1c3d6f196ad1db14262a579d74cf7855fffc65f5abd242b135ae87df", + "wx" : "00842b3d89e54d9a4b5694d9251bba20ae4854c510dc0b6ef7033e4045ba4e64b6ddcd36299aac554dbac6db3e27c98123", + "wy" : "00868258190297e1d6bae648a6dee2285886233afd1c3d6f196ad1db14262a579d74cf7855fffc65f5abd242b135ae87df" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004842b3d89e54d9a4b5694d9251bba20ae4854c510dc0b6ef7033e4045ba4e64b6ddcd36299aac554dbac6db3e27c98123868258190297e1d6bae648a6dee2285886233afd1c3d6f196ad1db14262a579d74cf7855fffc65f5abd242b135ae87df", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEhCs9ieVNmktWlNklG7ogrkhUxRDcC273\nAz5ARbpOZLbdzTYpmqxVTbrG2z4nyYEjhoJYGQKX4da65kim3uIoWIYjOv0cPW8Z\natHbFCYqV510z3hV//xl9avSQrE1roff\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 377, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100bc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d322ff6d1d1162b5de29edcd0b69803fe2f8af8e3d103d0a9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "049ab73dcfffc820e739a3ed9c316c6f15d27a032f8aa59325f7842cf4a34198ac6ff09eb1a311ce226bf1abb49d8085110135f4b0c2b6b195da9bbe1993e985b8607664f1a4b3d499ea1a112b6afc7e6b88357c9348b614ddfdc846a3f38bbdca", + "wx" : "009ab73dcfffc820e739a3ed9c316c6f15d27a032f8aa59325f7842cf4a34198ac6ff09eb1a311ce226bf1abb49d808511", + "wy" : "0135f4b0c2b6b195da9bbe1993e985b8607664f1a4b3d499ea1a112b6afc7e6b88357c9348b614ddfdc846a3f38bbdca" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200049ab73dcfffc820e739a3ed9c316c6f15d27a032f8aa59325f7842cf4a34198ac6ff09eb1a311ce226bf1abb49d8085110135f4b0c2b6b195da9bbe1993e985b8607664f1a4b3d499ea1a112b6afc7e6b88357c9348b614ddfdc846a3f38bbdca", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEmrc9z//IIOc5o+2cMWxvFdJ6Ay+KpZMl\n94Qs9KNBmKxv8J6xoxHOImvxq7SdgIURATX0sMK2sZXam74Zk+mFuGB2ZPGks9SZ\n6hoRK2r8fmuINXyTSLYU3f3IRqPzi73K\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 378, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0428771b137fb7d74c0ed0290416f47c8118997923c7b3b717fbbd5308a4bb0e494714bd3f1ff5e9e368887377284272ebf92e5df476a2fa0906ce4fad121c641abb539ab4ef270cd8f0497cc3e6e05b18561b730670f010741238a5d07b077045", + "wx" : "28771b137fb7d74c0ed0290416f47c8118997923c7b3b717fbbd5308a4bb0e494714bd3f1ff5e9e368887377284272eb", + "wy" : "00f92e5df476a2fa0906ce4fad121c641abb539ab4ef270cd8f0497cc3e6e05b18561b730670f010741238a5d07b077045" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000428771b137fb7d74c0ed0290416f47c8118997923c7b3b717fbbd5308a4bb0e494714bd3f1ff5e9e368887377284272ebf92e5df476a2fa0906ce4fad121c641abb539ab4ef270cd8f0497cc3e6e05b18561b730670f010741238a5d07b077045", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEKHcbE3+310wO0CkEFvR8gRiZeSPHs7cX\n+71TCKS7DklHFL0/H/Xp42iIc3coQnLr+S5d9Hai+gkGzk+tEhxkGrtTmrTvJwzY\n8El8w+bgWxhWG3MGcPAQdBI4pdB7B3BF\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 379, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "3065023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023100aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa84ecde56a2cf73ea3abc092185cb1a51f34810f1ddd8c64d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "049d1baad217829d5f2d7db5bd085e9126232e8c49c58707cb153db1d1e20a109c90f7bcbae4f2c74d6595207cb0e5dd271eea30752a1425905d0811d0f42019e5088142b41945bee03948f206f2e7c3c1081ba9a297180e36b247ee9e70832035", + "wx" : "009d1baad217829d5f2d7db5bd085e9126232e8c49c58707cb153db1d1e20a109c90f7bcbae4f2c74d6595207cb0e5dd27", + "wy" : "1eea30752a1425905d0811d0f42019e5088142b41945bee03948f206f2e7c3c1081ba9a297180e36b247ee9e70832035" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200049d1baad217829d5f2d7db5bd085e9126232e8c49c58707cb153db1d1e20a109c90f7bcbae4f2c74d6595207cb0e5dd271eea30752a1425905d0811d0f42019e5088142b41945bee03948f206f2e7c3c1081ba9a297180e36b247ee9e70832035", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEnRuq0heCnV8tfbW9CF6RJiMujEnFhwfL\nFT2x0eIKEJyQ97y65PLHTWWVIHyw5d0nHuowdSoUJZBdCBHQ9CAZ5QiBQrQZRb7g\nOUjyBvLnw8EIG6milxgONrJH7p5wgyA1\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 380, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100c152aafea3a8612ec83a7dc9448f01941899d7041319bbd60bfdfb3c03da74c00c8fc4176128a6263268711edc6e8e90", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "048e39e1e44f782b810ea93037c344371c4fb141c8bf196ea618f3a176547139a6d02121d2794cbe6481061694db579315c3184e8cd9b6c16b37699633d87f5600654b44cbcb5ab50ba872dfa001769eb765b2d1902e01d2e8af4e1fd6e9c0f30f", + "wx" : "008e39e1e44f782b810ea93037c344371c4fb141c8bf196ea618f3a176547139a6d02121d2794cbe6481061694db579315", + "wy" : "00c3184e8cd9b6c16b37699633d87f5600654b44cbcb5ab50ba872dfa001769eb765b2d1902e01d2e8af4e1fd6e9c0f30f" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200048e39e1e44f782b810ea93037c344371c4fb141c8bf196ea618f3a176547139a6d02121d2794cbe6481061694db579315c3184e8cd9b6c16b37699633d87f5600654b44cbcb5ab50ba872dfa001769eb765b2d1902e01d2e8af4e1fd6e9c0f30f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEjjnh5E94K4EOqTA3w0Q3HE+xQci/GW6m\nGPOhdlRxOabQISHSeUy+ZIEGFpTbV5MVwxhOjNm2wWs3aZYz2H9WAGVLRMvLWrUL\nqHLfoAF2nrdlstGQLgHS6K9OH9bpwPMP\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 381, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02304764eeac3e7a08daacfad7d1e1e3696042164b06f77bd78c3213ddea6f9fd449a34c97b9e560a6bf7195da41333c7565", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04b96fca0e3f6ebf7326f0a8ce8bdf226a2560c22526bf154f7b467010f3a46baca73414070db0f7ab039f345548452ae26f7b744274e9bd6c791f47513e6b51eb42fea3816b3032b33a81695f04d4e775be06484cf7e6a69cba8bacbcb597b3e3", + "wx" : "00b96fca0e3f6ebf7326f0a8ce8bdf226a2560c22526bf154f7b467010f3a46baca73414070db0f7ab039f345548452ae2", + "wy" : "6f7b744274e9bd6c791f47513e6b51eb42fea3816b3032b33a81695f04d4e775be06484cf7e6a69cba8bacbcb597b3e3" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004b96fca0e3f6ebf7326f0a8ce8bdf226a2560c22526bf154f7b467010f3a46baca73414070db0f7ab039f345548452ae26f7b744274e9bd6c791f47513e6b51eb42fea3816b3032b33a81695f04d4e775be06484cf7e6a69cba8bacbcb597b3e3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEuW/KDj9uv3Mm8KjOi98iaiVgwiUmvxVP\ne0ZwEPOka6ynNBQHDbD3qwOfNFVIRSrib3t0QnTpvWx5H0dRPmtR60L+o4FrMDKz\nOoFpXwTU53W+BkhM9+amnLqLrLy1l7Pj\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 382, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100cb4d5c0ff0abe29b2771fe9f179a5614e2e4c3cc1134a7aad08d8ec3fd8fcd07fd34b3473ca65ead1c7bb20bcf3ea5c9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "044fd52b11ff747b59ef609e065a462cd85b73172d20f406fdd845d4eaa3ec173e06ee58a58e1810f051b275bbaa47ccb484d2382b9e72c526dc3764a11a4a962a7a4c7355e6f057fc976ab73cc384f9a29da50769809ecbf37358dd83c74fc25f", + "wx" : "4fd52b11ff747b59ef609e065a462cd85b73172d20f406fdd845d4eaa3ec173e06ee58a58e1810f051b275bbaa47ccb4", + "wy" : "0084d2382b9e72c526dc3764a11a4a962a7a4c7355e6f057fc976ab73cc384f9a29da50769809ecbf37358dd83c74fc25f" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200044fd52b11ff747b59ef609e065a462cd85b73172d20f406fdd845d4eaa3ec173e06ee58a58e1810f051b275bbaa47ccb484d2382b9e72c526dc3764a11a4a962a7a4c7355e6f057fc976ab73cc384f9a29da50769809ecbf37358dd83c74fc25f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAET9UrEf90e1nvYJ4GWkYs2FtzFy0g9Ab9\n2EXU6qPsFz4G7liljhgQ8FGydbuqR8y0hNI4K55yxSbcN2ShGkqWKnpMc1Xm8Ff8\nl2q3PMOE+aKdpQdpgJ7L83NY3YPHT8Jf\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 383, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02306e441db253bf798dbc07ff041506dc73a75086a43252fb439dd016110475d8381f65f7f27f9e1cfc9b48f06a2dfa8eb6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "047d123e3dbab9913d698891023e28654cba2a94dc408a0dc386e63d8d22ff0f33358a231860b7c2e4f8429e9e8c9a1c5be7c95d1875f24ecdfeffc6136cf56f800f5434490f234f14d78505c2d4aea51e2a3a6a5d1693e72c4b1dd2a8746b875a", + "wx" : "7d123e3dbab9913d698891023e28654cba2a94dc408a0dc386e63d8d22ff0f33358a231860b7c2e4f8429e9e8c9a1c5b", + "wy" : "00e7c95d1875f24ecdfeffc6136cf56f800f5434490f234f14d78505c2d4aea51e2a3a6a5d1693e72c4b1dd2a8746b875a" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200047d123e3dbab9913d698891023e28654cba2a94dc408a0dc386e63d8d22ff0f33358a231860b7c2e4f8429e9e8c9a1c5be7c95d1875f24ecdfeffc6136cf56f800f5434490f234f14d78505c2d4aea51e2a3a6a5d1693e72c4b1dd2a8746b875a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEfRI+Pbq5kT1piJECPihlTLoqlNxAig3D\nhuY9jSL/DzM1iiMYYLfC5PhCnp6Mmhxb58ldGHXyTs3+/8YTbPVvgA9UNEkPI08U\n14UFwtSupR4qOmpdFpPnLEsd0qh0a4da\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 384, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023041db253bf798dbc07ff041506dc73a75086a43252fb43b63191efcd0914b6afb4bf8c77d008dbeac04277ef4aa59c394", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04608ce23a383452f8f4dcc5c0085d6793ec518985f0276a3409a23d7b7ca7e7dcb163601aca73840c3bd470aff70250bf674005a0be08939339363e314dca7ea67adfb60cd530628fe35f05416da8f20d5fb3b0ccd183a21dbb41c4e195d6303d", + "wx" : "608ce23a383452f8f4dcc5c0085d6793ec518985f0276a3409a23d7b7ca7e7dcb163601aca73840c3bd470aff70250bf", + "wy" : "674005a0be08939339363e314dca7ea67adfb60cd530628fe35f05416da8f20d5fb3b0ccd183a21dbb41c4e195d6303d" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004608ce23a383452f8f4dcc5c0085d6793ec518985f0276a3409a23d7b7ca7e7dcb163601aca73840c3bd470aff70250bf674005a0be08939339363e314dca7ea67adfb60cd530628fe35f05416da8f20d5fb3b0ccd183a21dbb41c4e195d6303d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYIziOjg0Uvj03MXACF1nk+xRiYXwJ2o0\nCaI9e3yn59yxY2AaynOEDDvUcK/3AlC/Z0AFoL4Ik5M5Nj4xTcp+pnrftgzVMGKP\n418FQW2o8g1fs7DM0YOiHbtBxOGV1jA9\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 385, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02310083b64a77ef31b780ffe082a0db8e74ea10d4864a5f6876c6323df9a12296d5f697f18efa011b7d58084efde954b38728", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0448d23de1869475a1de532399da1240bab560eb74a6c7b0871bf8ac8fb6cc17cf7b34fcd7c79fd99c76c605bdf3fcbe18e15b66ab91d0a03e203c2ff914d4bedc38c1ec5dcd1d12db9b43ef6f44581632683bf785aa4326566227ece3c16be796", + "wx" : "48d23de1869475a1de532399da1240bab560eb74a6c7b0871bf8ac8fb6cc17cf7b34fcd7c79fd99c76c605bdf3fcbe18", + "wy" : "00e15b66ab91d0a03e203c2ff914d4bedc38c1ec5dcd1d12db9b43ef6f44581632683bf785aa4326566227ece3c16be796" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000448d23de1869475a1de532399da1240bab560eb74a6c7b0871bf8ac8fb6cc17cf7b34fcd7c79fd99c76c605bdf3fcbe18e15b66ab91d0a03e203c2ff914d4bedc38c1ec5dcd1d12db9b43ef6f44581632683bf785aa4326566227ece3c16be796", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAESNI94YaUdaHeUyOZ2hJAurVg63Smx7CH\nG/isj7bMF897NPzXx5/ZnHbGBb3z/L4Y4Vtmq5HQoD4gPC/5FNS+3DjB7F3NHRLb\nm0Pvb0RYFjJoO/eFqkMmVmIn7OPBa+eW\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 386, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023053bf798dbc07ff041506dc73a75086a43252fb43b6327af3b42da6d3e9a72cde0b5c2de6bf072e780e94ad12dcab270a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "045d5eb470f9c6a0bb18e8960b67011acf9f01df405ac5b4bf9f4611d6a8af1a26b11b0790e93ae2361525dde51bacac94d42ce151793b80cee679c848362ec272000316590ebc91547b3b6608dfbade21e04de1548ebb45cc4721eb64a16b8318", + "wx" : "5d5eb470f9c6a0bb18e8960b67011acf9f01df405ac5b4bf9f4611d6a8af1a26b11b0790e93ae2361525dde51bacac94", + "wy" : "00d42ce151793b80cee679c848362ec272000316590ebc91547b3b6608dfbade21e04de1548ebb45cc4721eb64a16b8318" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200045d5eb470f9c6a0bb18e8960b67011acf9f01df405ac5b4bf9f4611d6a8af1a26b11b0790e93ae2361525dde51bacac94d42ce151793b80cee679c848362ec272000316590ebc91547b3b6608dfbade21e04de1548ebb45cc4721eb64a16b8318", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEXV60cPnGoLsY6JYLZwEaz58B30BaxbS/\nn0YR1qivGiaxGweQ6TriNhUl3eUbrKyU1CzhUXk7gM7mechINi7CcgADFlkOvJFU\neztmCN+63iHgTeFUjrtFzEch62Sha4MY\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 387, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023024c53b0a00cf087a9a20a2b78bc81d5b383d04ba9b55a567405239d224387344c41cceff0f68ffc930dbaa0b3d346f45", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "041da34a149ed562c8ec13e84cb067107bc28b50bfa47575d5a9948cde5a3d7357c38ea41fcfcdd1ab1a1bd9b6592b33d9e14aedfd0cfffcfecbdc21276e6a2c78b8729412c48339ae538b799b7d8e61163047a64cfcec9018aa00f99ae740e3f3", + "wx" : "1da34a149ed562c8ec13e84cb067107bc28b50bfa47575d5a9948cde5a3d7357c38ea41fcfcdd1ab1a1bd9b6592b33d9", + "wy" : "00e14aedfd0cfffcfecbdc21276e6a2c78b8729412c48339ae538b799b7d8e61163047a64cfcec9018aa00f99ae740e3f3" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041da34a149ed562c8ec13e84cb067107bc28b50bfa47575d5a9948cde5a3d7357c38ea41fcfcdd1ab1a1bd9b6592b33d9e14aedfd0cfffcfecbdc21276e6a2c78b8729412c48339ae538b799b7d8e61163047a64cfcec9018aa00f99ae740e3f3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEHaNKFJ7VYsjsE+hMsGcQe8KLUL+kdXXV\nqZSM3lo9c1fDjqQfz83Rqxob2bZZKzPZ4Urt/Qz//P7L3CEnbmoseLhylBLEgzmu\nU4t5m32OYRYwR6ZM/OyQGKoA+ZrnQOPz\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 388, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100c600ccb39bb3e2d85d880d76d1d519205f050c4b93deae0c5d63e8898ca8d7a5babbb944debe0f3c44332aae5770cb7b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "048b8675211b321f8b318ba60337cde32a6b04243979546383127a068a8749cb5e98c4231b198de62a2b069d3a94d1c7b19d33468a130b4fef66a59d4aee00ca40bdbeaf044b8b22841bb4c8ba419f891b3855f4bddf8dae3577d97120b9d3fa44", + "wx" : "008b8675211b321f8b318ba60337cde32a6b04243979546383127a068a8749cb5e98c4231b198de62a2b069d3a94d1c7b1", + "wy" : "009d33468a130b4fef66a59d4aee00ca40bdbeaf044b8b22841bb4c8ba419f891b3855f4bddf8dae3577d97120b9d3fa44" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200048b8675211b321f8b318ba60337cde32a6b04243979546383127a068a8749cb5e98c4231b198de62a2b069d3a94d1c7b19d33468a130b4fef66a59d4aee00ca40bdbeaf044b8b22841bb4c8ba419f891b3855f4bddf8dae3577d97120b9d3fa44", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEi4Z1IRsyH4sxi6YDN83jKmsEJDl5VGOD\nEnoGiodJy16YxCMbGY3mKisGnTqU0cexnTNGihMLT+9mpZ1K7gDKQL2+rwRLiyKE\nG7TIukGfiRs4VfS9342uNXfZcSC50/pE\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 389, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02303ead55015c579ed137c58236bb70fe6be76628fbece64429bb655245f05cb91f4b8a499ae7880154ba83a84bf0569ae3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04442766bdb8b2cf4fef5f65d5d86b61681ec89220c983b51f15bfe12fb0bf9780e0c38bbcc888afb3c55ee828774b86f756b7f399c534c7acd46be4bc8bb38f087b0023b8f5166ab34192ca0b1cad62d663aa474c6f9286c8a054ef94ea42e3c7", + "wx" : "442766bdb8b2cf4fef5f65d5d86b61681ec89220c983b51f15bfe12fb0bf9780e0c38bbcc888afb3c55ee828774b86f7", + "wy" : "56b7f399c534c7acd46be4bc8bb38f087b0023b8f5166ab34192ca0b1cad62d663aa474c6f9286c8a054ef94ea42e3c7" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004442766bdb8b2cf4fef5f65d5d86b61681ec89220c983b51f15bfe12fb0bf9780e0c38bbcc888afb3c55ee828774b86f756b7f399c534c7acd46be4bc8bb38f087b0023b8f5166ab34192ca0b1cad62d663aa474c6f9286c8a054ef94ea42e3c7", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAERCdmvbiyz0/vX2XV2GthaB7IkiDJg7Uf\nFb/hL7C/l4Dgw4u8yIivs8Ve6Ch3S4b3VrfzmcU0x6zUa+S8i7OPCHsAI7j1Fmqz\nQZLKCxytYtZjqkdMb5KGyKBU75TqQuPH\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 390, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100de03ff820a836e39d3a8435219297da1db193d79e359663e7cc9a229e2a6ac9e9d5c75417fa455bc8e3b89274ee47d0e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0411342b314f31648931abb897c1371dd3a23e91f2405c4a81744be18e753919752208779de2d54e865eeefbb0bfb4998af533d7a4d6fc6cb5cb98915ce08d0f656e37a502e78f8c1b8baca728c2ecb05a2156f01cff16595b363cdb49c00c1aa2", + "wx" : "11342b314f31648931abb897c1371dd3a23e91f2405c4a81744be18e753919752208779de2d54e865eeefbb0bfb4998a", + "wy" : "00f533d7a4d6fc6cb5cb98915ce08d0f656e37a502e78f8c1b8baca728c2ecb05a2156f01cff16595b363cdb49c00c1aa2" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000411342b314f31648931abb897c1371dd3a23e91f2405c4a81744be18e753919752208779de2d54e865eeefbb0bfb4998af533d7a4d6fc6cb5cb98915ce08d0f656e37a502e78f8c1b8baca728c2ecb05a2156f01cff16595b363cdb49c00c1aa2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEETQrMU8xZIkxq7iXwTcd06I+kfJAXEqB\ndEvhjnU5GXUiCHed4tVOhl7u+7C/tJmK9TPXpNb8bLXLmJFc4I0PZW43pQLnj4wb\ni6ynKMLssFohVvAc/xZZWzY820nADBqi\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 391, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100e5a6ae07f855f14d93b8ff4f8bcd2b0a717261e6089a53d54bf86e22f8e37d73aaa7607cc2ab831404b3e5bb4e01e79e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "043c96b49ff60ff05951b7b1aca65664f13128b714da620697ef0d90bfc01ef643baa5c608f16ca885038322a443aed3e6169a27f2ea7a36376ef92a900e5389a7b441fd051d693ce65250b881cfdd6487370372292c84369742b18106188b05c0", + "wx" : "3c96b49ff60ff05951b7b1aca65664f13128b714da620697ef0d90bfc01ef643baa5c608f16ca885038322a443aed3e6", + "wy" : "169a27f2ea7a36376ef92a900e5389a7b441fd051d693ce65250b881cfdd6487370372292c84369742b18106188b05c0" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200043c96b49ff60ff05951b7b1aca65664f13128b714da620697ef0d90bfc01ef643baa5c608f16ca885038322a443aed3e6169a27f2ea7a36376ef92a900e5389a7b441fd051d693ce65250b881cfdd6487370372292c84369742b18106188b05c0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEPJa0n/YP8FlRt7GsplZk8TEotxTaYgaX\n7w2Qv8Ae9kO6pcYI8WyohQODIqRDrtPmFpon8up6Njdu+SqQDlOJp7RB/QUdaTzm\nUlC4gc/dZIc3A3IpLIQ2l0KxgQYYiwXA\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 392, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffed2119d5fc12649fc808af3b6d9037d3a44eb32399970dd0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04388dae49ea48afb558456fdb1d0b04d4f8f1c46f14d22de25862d35069a28ae9284d7a8074546e779ad2c5f17ce9b89bb353298f3c526aa0a10ed23bcb1ed9788812c8a3a6cbea82a3d9d8d465a4cca59dbd3d3d8a36098d644f1b45d36df537", + "wx" : "388dae49ea48afb558456fdb1d0b04d4f8f1c46f14d22de25862d35069a28ae9284d7a8074546e779ad2c5f17ce9b89b", + "wy" : "00b353298f3c526aa0a10ed23bcb1ed9788812c8a3a6cbea82a3d9d8d465a4cca59dbd3d3d8a36098d644f1b45d36df537" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004388dae49ea48afb558456fdb1d0b04d4f8f1c46f14d22de25862d35069a28ae9284d7a8074546e779ad2c5f17ce9b89bb353298f3c526aa0a10ed23bcb1ed9788812c8a3a6cbea82a3d9d8d465a4cca59dbd3d3d8a36098d644f1b45d36df537", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEOI2uSepIr7VYRW/bHQsE1PjxxG8U0i3i\nWGLTUGmiiukoTXqAdFRud5rSxfF86bibs1MpjzxSaqChDtI7yx7ZeIgSyKOmy+qC\no9nY1GWkzKWdvT09ijYJjWRPG0XTbfU3\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 393, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023079b95c013b0472de04d8faeec3b779c39fe729ea84fb554cd091c7178c2f054eabbc62c3e1cfbac2c2e69d7aa45d9072", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04c85200ac6411423573e3ebc1b7aea95e74add5ce3b41282baa885972acc085c8365c05c539ce47e799afc353d6788ce868cfce1eb2bfe009990084fb03c0919ab892313d7a12efc3514e8273685b9071892faefca4306adf7854afcebafffbf4", + "wx" : "00c85200ac6411423573e3ebc1b7aea95e74add5ce3b41282baa885972acc085c8365c05c539ce47e799afc353d6788ce8", + "wy" : "68cfce1eb2bfe009990084fb03c0919ab892313d7a12efc3514e8273685b9071892faefca4306adf7854afcebafffbf4" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004c85200ac6411423573e3ebc1b7aea95e74add5ce3b41282baa885972acc085c8365c05c539ce47e799afc353d6788ce868cfce1eb2bfe009990084fb03c0919ab892313d7a12efc3514e8273685b9071892faefca4306adf7854afcebafffbf4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEyFIArGQRQjVz4+vBt66pXnSt1c47QSgr\nqohZcqzAhcg2XAXFOc5H55mvw1PWeIzoaM/OHrK/4AmZAIT7A8CRmriSMT16Eu/D\nUU6Cc2hbkHGJL678pDBq33hUr866//v0\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 394, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100bfd40d0caa4d9d42381f3d72a25683f52b03a1ed96fb72d03f08dcb9a8bc8f23c1a459deab03bcd39396c0d1e9053c81", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04e63ae2881ed60884ef1aef52178a297bdfedf67f4e3c1d876ad10b42c03b5e67f7f8cfaf4dfea4def7ab82fde3ed9b910e2be22bc3fa46a2ed094ebd7c86a9512c8c40cd542fb539c34347ef2be4e7f1543af960fd2347354a7a1df71a237d51", + "wx" : "00e63ae2881ed60884ef1aef52178a297bdfedf67f4e3c1d876ad10b42c03b5e67f7f8cfaf4dfea4def7ab82fde3ed9b91", + "wy" : "0e2be22bc3fa46a2ed094ebd7c86a9512c8c40cd542fb539c34347ef2be4e7f1543af960fd2347354a7a1df71a237d51" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004e63ae2881ed60884ef1aef52178a297bdfedf67f4e3c1d876ad10b42c03b5e67f7f8cfaf4dfea4def7ab82fde3ed9b910e2be22bc3fa46a2ed094ebd7c86a9512c8c40cd542fb539c34347ef2be4e7f1543af960fd2347354a7a1df71a237d51", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE5jriiB7WCITvGu9SF4ope9/t9n9OPB2H\natELQsA7Xmf3+M+vTf6k3vergv3j7ZuRDiviK8P6RqLtCU69fIapUSyMQM1UL7U5\nw0NH7yvk5/FUOvlg/SNHNUp6HfcaI31R\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 395, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02304c7d219db9af94ce7fffffffffffffffffffffffffffffffef15cf1058c8d8ba1e634c4122db95ec1facd4bb13ebf09a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04e9c415f8a72055239570c3c370cf9380cdfabb6ebdbd8058e2fc65193080707895ea1566eeb26149603f4b4d4c1e79d496ae17a001424d21eae4eaa01067048bcd919625fdd7efd896d980633a0e2ca1f8c9b02c99b69a1e4fa53468a2fe244d", + "wx" : "00e9c415f8a72055239570c3c370cf9380cdfabb6ebdbd8058e2fc65193080707895ea1566eeb26149603f4b4d4c1e79d4", + "wy" : "0096ae17a001424d21eae4eaa01067048bcd919625fdd7efd896d980633a0e2ca1f8c9b02c99b69a1e4fa53468a2fe244d" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004e9c415f8a72055239570c3c370cf9380cdfabb6ebdbd8058e2fc65193080707895ea1566eeb26149603f4b4d4c1e79d496ae17a001424d21eae4eaa01067048bcd919625fdd7efd896d980633a0e2ca1f8c9b02c99b69a1e4fa53468a2fe244d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE6cQV+KcgVSOVcMPDcM+TgM36u269vYBY\n4vxlGTCAcHiV6hVm7rJhSWA/S01MHnnUlq4XoAFCTSHq5OqgEGcEi82RliX91+/Y\nltmAYzoOLKH4ybAsmbaaHk+lNGii/iRN\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 396, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100d219db9af94ce7ffffffffffffffffffffffffffffffffffd189bdb6d9ef7be8504ca374756ea5b8f15e44067d209b9b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04637223a93dd63af6b348f246e7b3bcb30beaa1dcc888af8e12e5086aa00f7792fbe457463c52422d435f430ad1bb4b21f9a1e01758d1e025b162d09d3df8b403226ed3b35e414c41651740d509d8cf6b5e558118607d10669902abebda3ca28d", + "wx" : "637223a93dd63af6b348f246e7b3bcb30beaa1dcc888af8e12e5086aa00f7792fbe457463c52422d435f430ad1bb4b21", + "wy" : "00f9a1e01758d1e025b162d09d3df8b403226ed3b35e414c41651740d509d8cf6b5e558118607d10669902abebda3ca28d" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004637223a93dd63af6b348f246e7b3bcb30beaa1dcc888af8e12e5086aa00f7792fbe457463c52422d435f430ad1bb4b21f9a1e01758d1e025b162d09d3df8b403226ed3b35e414c41651740d509d8cf6b5e558118607d10669902abebda3ca28d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEY3IjqT3WOvazSPJG57O8swvqodzIiK+O\nEuUIaqAPd5L75FdGPFJCLUNfQwrRu0sh+aHgF1jR4CWxYtCdPfi0AyJu07NeQUxB\nZRdA1QnYz2teVYEYYH0QZpkCq+vaPKKN\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 397, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a433b735f299cfffffffffffffffffffffffffffffffffffdbb02debbfa7c9f1487f3936a22ca3f6f5d06ea22d7c0dc3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "047f4dc23982ecc8b84f54241715c7e94e950f596ce033237639a15fefa5eb5c37cb2e562d6d5b3051ea15600e3341a565fed2b55b89d2793321374887b78827ee4ca2216eac2993b1b095844db76adc560450135c072ac1a2c4167520237fbc9d", + "wx" : "7f4dc23982ecc8b84f54241715c7e94e950f596ce033237639a15fefa5eb5c37cb2e562d6d5b3051ea15600e3341a565", + "wy" : "00fed2b55b89d2793321374887b78827ee4ca2216eac2993b1b095844db76adc560450135c072ac1a2c4167520237fbc9d" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200047f4dc23982ecc8b84f54241715c7e94e950f596ce033237639a15fefa5eb5c37cb2e562d6d5b3051ea15600e3341a565fed2b55b89d2793321374887b78827ee4ca2216eac2993b1b095844db76adc560450135c072ac1a2c4167520237fbc9d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEf03COYLsyLhPVCQXFcfpTpUPWWzgMyN2\nOaFf76XrXDfLLlYtbVswUeoVYA4zQaVl/tK1W4nSeTMhN0iHt4gn7kyiIW6sKZOx\nsJWETbdq3FYEUBNcByrBosQWdSAjf7yd\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 398, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100b9af94ce7fffffffffffffffffffffffffffffffffffffffd6efeefc876c9f23217b443c80637ef939e911219f96c179", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04a0ae8c949f63f1b6a5d024c99e0a296ecd12d196d3b1625d4a76600082a14d455aab267c68f571d89ad0619cb8e476a134634336611e1fd1d728bcea588d0e1b652bbca0e52c1bfbd4387a6337ff41ce13a65c8306915d2a39897b985d909b36", + "wx" : "00a0ae8c949f63f1b6a5d024c99e0a296ecd12d196d3b1625d4a76600082a14d455aab267c68f571d89ad0619cb8e476a1", + "wy" : "34634336611e1fd1d728bcea588d0e1b652bbca0e52c1bfbd4387a6337ff41ce13a65c8306915d2a39897b985d909b36" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a0ae8c949f63f1b6a5d024c99e0a296ecd12d196d3b1625d4a76600082a14d455aab267c68f571d89ad0619cb8e476a134634336611e1fd1d728bcea588d0e1b652bbca0e52c1bfbd4387a6337ff41ce13a65c8306915d2a39897b985d909b36", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEoK6MlJ9j8bal0CTJngopbs0S0ZbTsWJd\nSnZgAIKhTUVaqyZ8aPVx2JrQYZy45HahNGNDNmEeH9HXKLzqWI0OG2UrvKDlLBv7\n1Dh6Yzf/Qc4TplyDBpFdKjmJe5hdkJs2\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 399, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100a276276276276276276276276276276276276276276276273d7228d4f84b769be0fd57b97e4c1ebcae9a5f635e80e9df", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "047cad1637721f5988cb7967238b1f47fd0b63f30f207a165951fc6fb74ba868e5b462628595edc80f75182e564a89c7a0fc04c405938aab3d6828e72e86bc59a400719270f8ee3cb5ef929ab53287bb308b51abd2e3ffbc3d93b87471bc2e3730", + "wx" : "7cad1637721f5988cb7967238b1f47fd0b63f30f207a165951fc6fb74ba868e5b462628595edc80f75182e564a89c7a0", + "wy" : "00fc04c405938aab3d6828e72e86bc59a400719270f8ee3cb5ef929ab53287bb308b51abd2e3ffbc3d93b87471bc2e3730" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200047cad1637721f5988cb7967238b1f47fd0b63f30f207a165951fc6fb74ba868e5b462628595edc80f75182e564a89c7a0fc04c405938aab3d6828e72e86bc59a400719270f8ee3cb5ef929ab53287bb308b51abd2e3ffbc3d93b87471bc2e3730", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEfK0WN3IfWYjLeWcjix9H/Qtj8w8gehZZ\nUfxvt0uoaOW0YmKFle3ID3UYLlZKiceg/ATEBZOKqz1oKOcuhrxZpABxknD47jy1\n75KatTKHuzCLUavS4/+8PZO4dHG8Ljcw\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 400, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023073333333333333333333333333333333333333333333333316e4d9f42d4eca22df403a0c578b86f0a9a93fe89995c7ed", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "042024ecde0e61262955b0301ae6b0a4fbd7771762feb2de35eed1823d2636c6e001f7bfcdbc4e65b1ea40224090411906d55362a570e80a2126f01d919b608440294039be03419d518b13cca6a1595414717f1b4ddb842b2c9d4f543e683b86a0", + "wx" : "2024ecde0e61262955b0301ae6b0a4fbd7771762feb2de35eed1823d2636c6e001f7bfcdbc4e65b1ea40224090411906", + "wy" : "00d55362a570e80a2126f01d919b608440294039be03419d518b13cca6a1595414717f1b4ddb842b2c9d4f543e683b86a0" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200042024ecde0e61262955b0301ae6b0a4fbd7771762feb2de35eed1823d2636c6e001f7bfcdbc4e65b1ea40224090411906d55362a570e80a2126f01d919b608440294039be03419d518b13cca6a1595414717f1b4ddb842b2c9d4f543e683b86a0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEICTs3g5hJilVsDAa5rCk+9d3F2L+st41\n7tGCPSY2xuAB97/NvE5lsepAIkCQQRkG1VNipXDoCiEm8B2Rm2CEQClAOb4DQZ1R\nixPMpqFZVBRxfxtN24QrLJ1PVD5oO4ag\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 401, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02307fffffffffffffffffffffffffffffffffffffffffffffffda4233abf824c93f90115e76db206fa7489d6647332e1ba3", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0440c5f2608956380c39695c7457ddce0880b5e8fab0a9a3726d0c8535b2ff6ca15814d83ed82c0ab33aba76e05e5c0476c9d15a2a0b2041237ff61c26519d1d74b141d7a4499fbdefc414a900937a8faf6ef560550c73cdb7edfe9314c480bb2b", + "wx" : "40c5f2608956380c39695c7457ddce0880b5e8fab0a9a3726d0c8535b2ff6ca15814d83ed82c0ab33aba76e05e5c0476", + "wy" : "00c9d15a2a0b2041237ff61c26519d1d74b141d7a4499fbdefc414a900937a8faf6ef560550c73cdb7edfe9314c480bb2b" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000440c5f2608956380c39695c7457ddce0880b5e8fab0a9a3726d0c8535b2ff6ca15814d83ed82c0ab33aba76e05e5c0476c9d15a2a0b2041237ff61c26519d1d74b141d7a4499fbdefc414a900937a8faf6ef560550c73cdb7edfe9314c480bb2b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEQMXyYIlWOAw5aVx0V93OCIC16PqwqaNy\nbQyFNbL/bKFYFNg+2CwKszq6duBeXAR2ydFaKgsgQSN/9hwmUZ0ddLFB16RJn73v\nxBSpAJN6j69u9WBVDHPNt+3+kxTEgLsr\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 402, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306402307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd02303fffffffffffffffffffffffffffffffffffffffffffffffe3b1a6c0fa1b96efac0d06d9245853bd76760cb5666294bb", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0474acdfd2ab763c593bca30d248f2bf26f1843acf9eb89b4dfcb8451d59683812cf3cbe9a264ea435912a8969c53d7cb8496dcb0a4efed69b87110fda20e68eb6feed2d5101a4955d43759f10b73e8ffc3131e0c12a765b68bd216ed1ec4f5d2f", + "wx" : "74acdfd2ab763c593bca30d248f2bf26f1843acf9eb89b4dfcb8451d59683812cf3cbe9a264ea435912a8969c53d7cb8", + "wy" : "496dcb0a4efed69b87110fda20e68eb6feed2d5101a4955d43759f10b73e8ffc3131e0c12a765b68bd216ed1ec4f5d2f" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000474acdfd2ab763c593bca30d248f2bf26f1843acf9eb89b4dfcb8451d59683812cf3cbe9a264ea435912a8969c53d7cb8496dcb0a4efed69b87110fda20e68eb6feed2d5101a4955d43759f10b73e8ffc3131e0c12a765b68bd216ed1ec4f5d2f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEdKzf0qt2PFk7yjDSSPK/JvGEOs+euJtN\n/LhFHVloOBLPPL6aJk6kNZEqiWnFPXy4SW3LCk7+1puHEQ/aIOaOtv7tLVEBpJVd\nQ3WfELc+j/wxMeDBKnZbaL0hbtHsT10v\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 403, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "306502307ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd023100dfea06865526cea11c0f9eb9512b41fa9581d0f6cb7db9680336151dce79de818cdf33c879da322740416d1e5ae532fa", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a3991734945baab27ca6383737b7dd45023f997aff5e165f0fd7d8e5c0b5f9c5e731588af2fe5bd8976a0b871c132edf21f363af", + "wx" : "00da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a3991734", + "wy" : "00945baab27ca6383737b7dd45023f997aff5e165f0fd7d8e5c0b5f9c5e731588af2fe5bd8976a0b871c132edf21f363af" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a3991734945baab27ca6383737b7dd45023f997aff5e165f0fd7d8e5c0b5f9c5e731588af2fe5bd8976a0b871c132edf21f363af", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE2jXWqCgYrlJUy2X8hqxCpHhzqyR6XKZk\n6fCV6N6aV/5yGGDmbLxr1JlDGkijmRc0lFuqsnymODc3t91FAj+Zev9eFl8P19jl\nwLX5xecxWIry/lvYl2oLhxwTLt8h82Ov\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 404, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "3066023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023100e16043c2face20228dba6366e19ecc6db71b918bbe8a890b9dad2fcead184e071c9ac4acaee2f831a1e4cc337994f5ec", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a39917346ba4554d8359c7c8c84822bafdc0668500a1e9a0f028271a3f4a063a18cea7740d01a4266895f478e3ecd121de0c9c50", + "wx" : "00da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a3991734", + "wy" : "6ba4554d8359c7c8c84822bafdc0668500a1e9a0f028271a3f4a063a18cea7740d01a4266895f478e3ecd121de0c9c50" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004da35d6a82818ae5254cb65fc86ac42a47873ab247a5ca664e9f095e8de9a57fe721860e66cbc6bd499431a48a39917346ba4554d8359c7c8c84822bafdc0668500a1e9a0f028271a3f4a063a18cea7740d01a4266895f478e3ecd121de0c9c50", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE2jXWqCgYrlJUy2X8hqxCpHhzqyR6XKZk\n6fCV6N6aV/5yGGDmbLxr1JlDGkijmRc0a6RVTYNZx8jISCK6/cBmhQCh6aDwKCca\nP0oGOhjOp3QNAaQmaJX0eOPs0SHeDJxQ\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 405, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "3066023100b37699e0d518a4d370dbdaaaea3788850fa03f8186d1f78fdfbae6540aa670b31c8ada0fff3e737bd69520560fe0ce60023100e16043c2face20228dba6366e19ecc6db71b918bbe8a890b9dad2fcead184e071c9ac4acaee2f831a1e4cc337994f5ec", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04820064193c71c7141fe41e711fe843a7474be6b05f50cb0be411cdf7fc78ea7ec96aeb3991ef7646bbde59152d381a32631c5adf93d488b45e67cc9890d8e779f63960193dc16bd1cc136b3e28cf499dfa8e7bff482a0115e6083987f7c042fc", + "wx" : "00820064193c71c7141fe41e711fe843a7474be6b05f50cb0be411cdf7fc78ea7ec96aeb3991ef7646bbde59152d381a32", + "wy" : "631c5adf93d488b45e67cc9890d8e779f63960193dc16bd1cc136b3e28cf499dfa8e7bff482a0115e6083987f7c042fc" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004820064193c71c7141fe41e711fe843a7474be6b05f50cb0be411cdf7fc78ea7ec96aeb3991ef7646bbde59152d381a32631c5adf93d488b45e67cc9890d8e779f63960193dc16bd1cc136b3e28cf499dfa8e7bff482a0115e6083987f7c042fc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEggBkGTxxxxQf5B5xH+hDp0dL5rBfUMsL\n5BHN9/x46n7Jaus5ke92RrveWRUtOBoyYxxa35PUiLReZ8yYkNjnefY5YBk9wWvR\nzBNrPijPSZ36jnv/SCoBFeYIOYf3wEL8\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 406, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3035020101023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0452fabc58eacfd3a4828f51c413205c20888941ee45ecac076ffc23145d83542034aa01253d6ebf34eeefaa371d6cee119f340712cd78155712746578f5632ded2b2e5afb43b085f81732792108e331a4b50d27f3578252ffb0daa9d78655a0ab", + "wx" : "52fabc58eacfd3a4828f51c413205c20888941ee45ecac076ffc23145d83542034aa01253d6ebf34eeefaa371d6cee11", + "wy" : "009f340712cd78155712746578f5632ded2b2e5afb43b085f81732792108e331a4b50d27f3578252ffb0daa9d78655a0ab" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000452fabc58eacfd3a4828f51c413205c20888941ee45ecac076ffc23145d83542034aa01253d6ebf34eeefaa371d6cee119f340712cd78155712746578f5632ded2b2e5afb43b085f81732792108e331a4b50d27f3578252ffb0daa9d78655a0ab", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEUvq8WOrP06SCj1HEEyBcIIiJQe5F7KwH\nb/wjFF2DVCA0qgElPW6/NO7vqjcdbO4RnzQHEs14FVcSdGV49WMt7SsuWvtDsIX4\nFzJ5IQjjMaS1DSfzV4JS/7DaqdeGVaCr\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 407, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3065023101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04a8fdb1a022d4e3a7ee29612bb110acbea27daecb827d344cb6c6a7acad61d371ddc7842147b74a18767e618712f04c1c64ac6daf8e08cd7b90a0c9d9123884c7a7abb4664a75b0897064c3c8956b0ca9c417237f8d5a7dd8421b0d48c9d52c7c", + "wx" : "00a8fdb1a022d4e3a7ee29612bb110acbea27daecb827d344cb6c6a7acad61d371ddc7842147b74a18767e618712f04c1c", + "wy" : "64ac6daf8e08cd7b90a0c9d9123884c7a7abb4664a75b0897064c3c8956b0ca9c417237f8d5a7dd8421b0d48c9d52c7c" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004a8fdb1a022d4e3a7ee29612bb110acbea27daecb827d344cb6c6a7acad61d371ddc7842147b74a18767e618712f04c1c64ac6daf8e08cd7b90a0c9d9123884c7a7abb4664a75b0897064c3c8956b0ca9c417237f8d5a7dd8421b0d48c9d52c7c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqP2xoCLU46fuKWErsRCsvqJ9rsuCfTRM\ntsanrK1h03Hdx4QhR7dKGHZ+YYcS8EwcZKxtr44IzXuQoMnZEjiEx6ertGZKdbCJ\ncGTDyJVrDKnEFyN/jVp92EIbDUjJ1Sx8\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 408, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "3064023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326023033333333333333333333333333333333333333333333333327e0a919fda4a2c644d202bd41bcee4bc8fc05155c276eb0", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04878e414a5d6a0e0d1ab3c5563c44e80c3b2ef265f27a33ed5cac109ad664c1269beae9031d8d178cbfdb1bfa7cc3cc79fabbb2b6f7ce54026863b0f297a4fe3de82d5044dacafede49d5afc60bc875f4b659c06c19bb74c7c27351687f52b411", + "wx" : "00878e414a5d6a0e0d1ab3c5563c44e80c3b2ef265f27a33ed5cac109ad664c1269beae9031d8d178cbfdb1bfa7cc3cc79", + "wy" : "00fabbb2b6f7ce54026863b0f297a4fe3de82d5044dacafede49d5afc60bc875f4b659c06c19bb74c7c27351687f52b411" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004878e414a5d6a0e0d1ab3c5563c44e80c3b2ef265f27a33ed5cac109ad664c1269beae9031d8d178cbfdb1bfa7cc3cc79fabbb2b6f7ce54026863b0f297a4fe3de82d5044dacafede49d5afc60bc875f4b659c06c19bb74c7c27351687f52b411", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEh45BSl1qDg0as8VWPEToDDsu8mXyejPt\nXKwQmtZkwSab6ukDHY0XjL/bG/p8w8x5+ruytvfOVAJoY7Dyl6T+PegtUETayv7e\nSdWvxgvIdfS2WcBsGbt0x8JzUWh/UrQR\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 409, + "comment" : "extreme value for k and edgecase s", + "msg" : "313233343030", + "sig" : "3064023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df61023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "048faa8497ae3006b612999b03f91f7884d95543a266598e897b71e44ecfd9abd7908bfd122bb366c016a577cb1b2e2e412bb1a719289c749804ca677d14c0900fab031da8c70724723a0d54e3a0035da7dcddeef6fce80df2f81940817d27b2b5", + "wx" : "008faa8497ae3006b612999b03f91f7884d95543a266598e897b71e44ecfd9abd7908bfd122bb366c016a577cb1b2e2e41", + "wy" : "2bb1a719289c749804ca677d14c0900fab031da8c70724723a0d54e3a0035da7dcddeef6fce80df2f81940817d27b2b5" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200048faa8497ae3006b612999b03f91f7884d95543a266598e897b71e44ecfd9abd7908bfd122bb366c016a577cb1b2e2e412bb1a719289c749804ca677d14c0900fab031da8c70724723a0d54e3a0035da7dcddeef6fce80df2f81940817d27b2b5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEj6qEl64wBrYSmZsD+R94hNlVQ6JmWY6J\ne3HkTs/Zq9eQi/0SK7NmwBald8sbLi5BK7GnGSicdJgEymd9FMCQD6sDHajHByRy\nOg1U46ADXafc3e72/OgN8vgZQIF9J7K1\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 410, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3064023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df6102302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04c59cc648629e62dc1855f653583da0ace631e0f4b4589b7fe5cc449e12df2dceeb862cae00cd100233b999af657ae16cb138f659dcc8d342fd17664d86c5bddaa866c20b0031f65c8442a0ed62b337d09adb63a443ab14e3587b9299053717f9", + "wx" : "00c59cc648629e62dc1855f653583da0ace631e0f4b4589b7fe5cc449e12df2dceeb862cae00cd100233b999af657ae16c", + "wy" : "00b138f659dcc8d342fd17664d86c5bddaa866c20b0031f65c8442a0ed62b337d09adb63a443ab14e3587b9299053717f9" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004c59cc648629e62dc1855f653583da0ace631e0f4b4589b7fe5cc449e12df2dceeb862cae00cd100233b999af657ae16cb138f659dcc8d342fd17664d86c5bddaa866c20b0031f65c8442a0ed62b337d09adb63a443ab14e3587b9299053717f9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAExZzGSGKeYtwYVfZTWD2grOYx4PS0WJt/\n5cxEnhLfLc7rhiyuAM0QAjO5ma9leuFssTj2WdzI00L9F2ZNhsW92qhmwgsAMfZc\nhEKg7WKzN9Ca22OkQ6sU41h7kpkFNxf5\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 411, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3064023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df6102306666666666666666666666666666666666666666666666664fc15233fb49458c89a4057a8379dc9791f80a2ab84edd61", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04386bdc98fe3c156a790eee6d556e0036a4b84853358bd5ab6856db5985b9e8ea92e8d4c1f8d04ecd1e6de4548bf288215503292c2c570f57b42f2caf5e7ab94d87817a800b2af6ffcd4f13e30edb8caaf23c6d5be22abea18c2f9450ad1a4715", + "wx" : "386bdc98fe3c156a790eee6d556e0036a4b84853358bd5ab6856db5985b9e8ea92e8d4c1f8d04ecd1e6de4548bf28821", + "wy" : "5503292c2c570f57b42f2caf5e7ab94d87817a800b2af6ffcd4f13e30edb8caaf23c6d5be22abea18c2f9450ad1a4715" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004386bdc98fe3c156a790eee6d556e0036a4b84853358bd5ab6856db5985b9e8ea92e8d4c1f8d04ecd1e6de4548bf288215503292c2c570f57b42f2caf5e7ab94d87817a800b2af6ffcd4f13e30edb8caaf23c6d5be22abea18c2f9450ad1a4715", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEOGvcmP48FWp5Du5tVW4ANqS4SFM1i9Wr\naFbbWYW56OqS6NTB+NBOzR5t5FSL8oghVQMpLCxXD1e0LyyvXnq5TYeBeoALKvb/\nzU8T4w7bjKryPG1b4iq+oYwvlFCtGkcV\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 412, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3065023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df6102310099999999999999999999999999999999999999999999999977a1fb4df8ede852ce760837c536cae35af40f4014764c12", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04294c37b3ec91a1b0500042d8b97bc9619d17f784a9ea528c0602d700783bfbac9ac49bff1e527b39bb2a49d1dc3abd471e798679b7c58f4dfa33cfe40bb62e7df6d2f190b0f3804c700fa19eba28ad7fd6edd7e3a754af852921c2705f444f0b", + "wx" : "294c37b3ec91a1b0500042d8b97bc9619d17f784a9ea528c0602d700783bfbac9ac49bff1e527b39bb2a49d1dc3abd47", + "wy" : "1e798679b7c58f4dfa33cfe40bb62e7df6d2f190b0f3804c700fa19eba28ad7fd6edd7e3a754af852921c2705f444f0b" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004294c37b3ec91a1b0500042d8b97bc9619d17f784a9ea528c0602d700783bfbac9ac49bff1e527b39bb2a49d1dc3abd471e798679b7c58f4dfa33cfe40bb62e7df6d2f190b0f3804c700fa19eba28ad7fd6edd7e3a754af852921c2705f444f0b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEKUw3s+yRobBQAELYuXvJYZ0X94Sp6lKM\nBgLXAHg7+6yaxJv/HlJ7ObsqSdHcOr1HHnmGebfFj036M8/kC7YuffbS8ZCw84BM\ncA+hnroorX/W7dfjp1SvhSkhwnBfRE8L\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 413, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3065023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df61023100db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6aae76701acc1950894a89e068772d8b281eef136f8a8fef5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04bac7cd8a7755a174fab58e5374ec55a5ce5313235ec51c919c6684bd49305b7005393f72bc4d810ca864fb046d2c83415a33b77f4145680bde63b669ea1f10f3ee1836018c11a6f97155d90827c83dbac388402ac8f59368ddaf2c33548611af", + "wx" : "00bac7cd8a7755a174fab58e5374ec55a5ce5313235ec51c919c6684bd49305b7005393f72bc4d810ca864fb046d2c8341", + "wy" : "5a33b77f4145680bde63b669ea1f10f3ee1836018c11a6f97155d90827c83dbac388402ac8f59368ddaf2c33548611af" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004bac7cd8a7755a174fab58e5374ec55a5ce5313235ec51c919c6684bd49305b7005393f72bc4d810ca864fb046d2c83415a33b77f4145680bde63b669ea1f10f3ee1836018c11a6f97155d90827c83dbac388402ac8f59368ddaf2c33548611af", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEusfNindVoXT6tY5TdOxVpc5TEyNexRyR\nnGaEvUkwW3AFOT9yvE2BDKhk+wRtLINBWjO3f0FFaAveY7Zp6h8Q8+4YNgGMEab5\ncVXZCCfIPbrDiEAqyPWTaN2vLDNUhhGv\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 414, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3064023008d999057ba3d2d969260045c55b97f089025959a6f434d651d207d19fb96e9e4fe0e86ebe0e64f85b96a9c75295df6102300eb10e5ab95f2f26a40700b1300fb8c3e754d5c453d9384ecce1daa38135a48a0a96c24efc2a76d00bde1d7aeedf7f6a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04984a1c04446a52ad6a54d64f2c6c49b61f23abe7dc6f33714896aefb0befb9a52b95b048561132c28c9850e851a6d00eb4e19f9de59d30ca26801f2789a3330b081e6bf57f84f3c6107defd05a959cef5f298acea5a6b87b38e22c5409ec9f71", + "wx" : "00984a1c04446a52ad6a54d64f2c6c49b61f23abe7dc6f33714896aefb0befb9a52b95b048561132c28c9850e851a6d00e", + "wy" : "00b4e19f9de59d30ca26801f2789a3330b081e6bf57f84f3c6107defd05a959cef5f298acea5a6b87b38e22c5409ec9f71" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004984a1c04446a52ad6a54d64f2c6c49b61f23abe7dc6f33714896aefb0befb9a52b95b048561132c28c9850e851a6d00eb4e19f9de59d30ca26801f2789a3330b081e6bf57f84f3c6107defd05a959cef5f298acea5a6b87b38e22c5409ec9f71", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEmEocBERqUq1qVNZPLGxJth8jq+fcbzNx\nSJau+wvvuaUrlbBIVhEywoyYUOhRptAOtOGfneWdMMomgB8niaMzCwgea/V/hPPG\nEH3v0FqVnO9fKYrOpaa4ezjiLFQJ7J9x\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 415, + "comment" : "extreme value for k and edgecase s", + "msg" : "313233343030", + "sig" : "3065023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7023055555555555555555555555555555555555555555555555542766f2b5167b9f51d5e0490c2e58d28f9a40878eeec6326", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04f00d6327b1226eaa1b0897295eeddadf7510249e6f0f811b57d7197eb6e61199a8f1c6665ec4821d3e18675d5399fdf787bf1e3fb7fee5cb3582a4159808b75e8b1de07eaffd49d3882d15c77443ad83213d21a4be9285223aa44a840e47eb56", + "wx" : "00f00d6327b1226eaa1b0897295eeddadf7510249e6f0f811b57d7197eb6e61199a8f1c6665ec4821d3e18675d5399fdf7", + "wy" : "0087bf1e3fb7fee5cb3582a4159808b75e8b1de07eaffd49d3882d15c77443ad83213d21a4be9285223aa44a840e47eb56" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004f00d6327b1226eaa1b0897295eeddadf7510249e6f0f811b57d7197eb6e61199a8f1c6665ec4821d3e18675d5399fdf787bf1e3fb7fee5cb3582a4159808b75e8b1de07eaffd49d3882d15c77443ad83213d21a4be9285223aa44a840e47eb56", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE8A1jJ7EibqobCJcpXu3a33UQJJ5vD4Eb\nV9cZfrbmEZmo8cZmXsSCHT4YZ11Tmf33h78eP7f+5cs1gqQVmAi3Xosd4H6v/UnT\niC0Vx3RDrYMhPSGkvpKFIjqkSoQOR+tW\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 416, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3065023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab702302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04452b047743346898b087daaac5d982d378752ba534e569f21ac592c09654d0809b94ccf822045f2885cbd3b221453cd668a01f502f551af14aab35c2c30ec7bac0709f525fe7960439b1e9de53cdad245efd8930967cde6caf8d222c8200cd69", + "wx" : "452b047743346898b087daaac5d982d378752ba534e569f21ac592c09654d0809b94ccf822045f2885cbd3b221453cd6", + "wy" : "68a01f502f551af14aab35c2c30ec7bac0709f525fe7960439b1e9de53cdad245efd8930967cde6caf8d222c8200cd69" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004452b047743346898b087daaac5d982d378752ba534e569f21ac592c09654d0809b94ccf822045f2885cbd3b221453cd668a01f502f551af14aab35c2c30ec7bac0709f525fe7960439b1e9de53cdad245efd8930967cde6caf8d222c8200cd69", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAERSsEd0M0aJiwh9qqxdmC03h1K6U05Wny\nGsWSwJZU0ICblMz4IgRfKIXL07IhRTzWaKAfUC9VGvFKqzXCww7HusBwn1Jf55YE\nObHp3lPNrSRe/YkwlnzebK+NIiyCAM1p\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 417, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3065023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab702306666666666666666666666666666666666666666666666664fc15233fb49458c89a4057a8379dc9791f80a2ab84edd61", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0444a8f54795bdb81e00fc84fa8373d125b16da6e2bf4cfa9ee1dc13d7f157394683963c170f4c15e8cf21b5466b49fa72bb5693655b3e0a85e27e3e6d265fba0131f3083bf447f62b6e3e5275496f34daa522e16195d81488a31fe982c2b75f16", + "wx" : "44a8f54795bdb81e00fc84fa8373d125b16da6e2bf4cfa9ee1dc13d7f157394683963c170f4c15e8cf21b5466b49fa72", + "wy" : "00bb5693655b3e0a85e27e3e6d265fba0131f3083bf447f62b6e3e5275496f34daa522e16195d81488a31fe982c2b75f16" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000444a8f54795bdb81e00fc84fa8373d125b16da6e2bf4cfa9ee1dc13d7f157394683963c170f4c15e8cf21b5466b49fa72bb5693655b3e0a85e27e3e6d265fba0131f3083bf447f62b6e3e5275496f34daa522e16195d81488a31fe982c2b75f16", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAERKj1R5W9uB4A/IT6g3PRJbFtpuK/TPqe\n4dwT1/FXOUaDljwXD0wV6M8htUZrSfpyu1aTZVs+CoXifj5tJl+6ATHzCDv0R/Yr\nbj5SdUlvNNqlIuFhldgUiKMf6YLCt18W\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 418, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3066023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab702310099999999999999999999999999999999999999999999999977a1fb4df8ede852ce760837c536cae35af40f4014764c12", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0410b336b3afb80c80ff50716e734110fe83cd5b8d41d7f2f94f0dec7ecf1facc663babb8ed94e4bdf3592e37464970afa9be144d354e9b456873c6387a12a3eefd3e2feb66f7519ac72ac502c09d20d72cae9d04c88549a285c081023e1c1da08", + "wx" : "10b336b3afb80c80ff50716e734110fe83cd5b8d41d7f2f94f0dec7ecf1facc663babb8ed94e4bdf3592e37464970afa", + "wy" : "009be144d354e9b456873c6387a12a3eefd3e2feb66f7519ac72ac502c09d20d72cae9d04c88549a285c081023e1c1da08" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000410b336b3afb80c80ff50716e734110fe83cd5b8d41d7f2f94f0dec7ecf1facc663babb8ed94e4bdf3592e37464970afa9be144d354e9b456873c6387a12a3eefd3e2feb66f7519ac72ac502c09d20d72cae9d04c88549a285c081023e1c1da08", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEELM2s6+4DID/UHFuc0EQ/oPNW41B1/L5\nTw3sfs8frMZjuruO2U5L3zWS43Rklwr6m+FE01TptFaHPGOHoSo+79Pi/rZvdRms\ncqxQLAnSDXLK6dBMiFSaKFwIECPhwdoI\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 419, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3066023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7023100db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6aae76701acc1950894a89e068772d8b281eef136f8a8fef5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0481f92630778777a01781e7924fced35fc09018d9b00820881b14a814c1836a1f73c3641f7a17c821ffd95da902efe132221d81323509391f7b61bd796011337e6af36ae0798c17043d79e8efcdae8e724adf96a2309207c2d2cfd88e8c483acb", + "wx" : "0081f92630778777a01781e7924fced35fc09018d9b00820881b14a814c1836a1f73c3641f7a17c821ffd95da902efe132", + "wy" : "221d81323509391f7b61bd796011337e6af36ae0798c17043d79e8efcdae8e724adf96a2309207c2d2cfd88e8c483acb" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000481f92630778777a01781e7924fced35fc09018d9b00820881b14a814c1836a1f73c3641f7a17c821ffd95da902efe132221d81323509391f7b61bd796011337e6af36ae0798c17043d79e8efcdae8e724adf96a2309207c2d2cfd88e8c483acb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEgfkmMHeHd6AXgeeST87TX8CQGNmwCCCI\nGxSoFMGDah9zw2QfehfIIf/ZXakC7+EyIh2BMjUJOR97Yb15YBEzfmrzauB5jBcE\nPXno782ujnJK35aiMJIHwtLP2I6MSDrL\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 420, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3065023100aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab702300eb10e5ab95f2f26a40700b1300fb8c3e754d5c453d9384ecce1daa38135a48a0a96c24efc2a76d00bde1d7aeedf7f6a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", + "wx" : "00aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7", + "wy" : "3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab73617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqofKIr6LBTeOscce8yCtdG4dO2KLp5uY\nWfdB4IJUKjhVAvJdv1UpbDpUXjhydgq3NhfeSpYmLG9dnpi/kpLcKfj0Hb0omhR8\n6doxE7XwuMAKYLHOHX6BnXpDHXyQ6g5f\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 421, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3064023043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158ca02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 422, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3065023100bc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d322ff6d1d1162b5de29edcd0b69803fe2f8af8e3d103d0a902302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0", + "wx" : "00aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7", + "wy" : "00c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004aa87ca22be8b05378eb1c71ef320ad746e1d3b628ba79b9859f741e082542a385502f25dbf55296c3a545e3872760ab7c9e821b569d9d390a26167406d6d23d6070be242d765eb831625ceec4a0f473ef59f4e30e2817e6285bce2846f15f1a0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEqofKIr6LBTeOscce8yCtdG4dO2KLp5uY\nWfdB4IJUKjhVAvJdv1UpbDpUXjhydgq3yeghtWnZ05CiYWdAbW0j1gcL4kLXZeuD\nFiXO7EoPRz71n04w4oF+YoW84oRvFfGg\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 423, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3064023043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158ca02302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 424, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "3065023100bc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d322ff6d1d1162b5de29edcd0b69803fe2f8af8e3d103d0a902302492492492492492492492492492492492492492492492491c7be680477598d6c3716fabc13dcec86afd2833d41c2a7e", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "0429bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc9a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3", + "wx" : "29bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc", + "wy" : "009a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3" + }, + "keyDer" : "3076301006072a8648ce3d020106052b810400220362000429bdb76d5fa741bfd70233cb3a66cc7d44beb3b0663d92a8136650478bcefb61ef182e155a54345a5e8e5e88f064e5bc9a525ab7f764dad3dae1468c2b419f3b62b9ba917d5e8c4fb1ec47404a3fc76474b2713081be9db4c00e043ada9fc4a3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEKb23bV+nQb/XAjPLOmbMfUS+s7BmPZKo\nE2ZQR4vO+2HvGC4VWlQ0Wl6OXojwZOW8mlJat/dk2tPa4UaMK0GfO2K5upF9XoxP\nsexHQEo/x2R0snEwgb6dtMAOBDran8Sj\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 425, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "306402302290c886bbad8f53089583d543a269a727665626d6b94a3796324c62d08988f66f6011e845811a03589e92abe1f17faf023066e2cb4380997f4e7f85022541adb22d24d1196be68a3db888b03eb3d2d40b0d9a3a6a00a1a4782ee0a00e8410ba2d86", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 426, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30650231008071d8cf9df9efef696ebafc59f74db90c1f1ecf5ccde18858de22fe4d7df2a25cb3001695d706dfd7984b39df65a0f4023027291e6339c2a7fed7a174bb97ffe41d8cfdc20c1260c6ec85d7259f0cc7781bf2ae7a6e6fb4c08e0d75b7381bb7d9b8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 427, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "30650230470014ccd7a1a5e5333d301c8ea528ac3b07b01944af30cec60f4bad94db108509e45ba381818b5bdfaf9daf0d372301023100e3d49d6a05a755aa871d7cb96fffb79fed7625f83f69498ba07c0d65166a67107c9a17ae6e1028e244377a44096217b2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 428, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "30640230377044d343f900175ac6833071be74964cd636417039e10e837da94b6919bffc3f5a517b945a450852af3259f5cbf108023032ea25006375c153581e80c09f53ad585c736f823c70147aba4fb47bb0a224fae4d8819adad80d4c144ecc2380954a9e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aacacbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1", + "wx" : "00ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aac", + "wy" : "00acbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004ffffffffaa63f1a239ac70197c6ebfcea5756dc012123f82c51fa874d66028be00e976a1080606737cc75c40bdfe4aacacbd85389088a62a6398384c22b52d492f23f46e4a27a4724ad55551da5c483438095a247cb0c3378f1f52c3425ff9f1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE/////6pj8aI5rHAZfG6/zqV1bcASEj+C\nxR+odNZgKL4A6XahCAYGc3zHXEC9/kqsrL2FOJCIpipjmDhMIrUtSS8j9G5KJ6Ry\nStVVUdpcSDQ4CVokfLDDN48fUsNCX/nx\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 429, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3066023100ccb13c4dc9805a9b4e06ee25ef8c7593eaff7326c432d4b12b923163cf1cbe5fe1cfd3546c1d0761d8874e83ffd2e15d023100db1b0c082ae314b539f05e8a14ad51e5db37f29cacea9b2aab63a04917d58d008cf3f7ba41d5ea280f3b6a67be3ae8f8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 430, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3065023100c79a30e36d2126b348dd9eb2f5db6aa98f79d80214027e51bcf3cabec188a7ebaf25cb7bbe9ec6bfed135e2a3b70e9160230241338ee2ac931adea9a56e7bfe909947128d54d5122a47b00c278e684e10102740d26e89e343290a5b2fa8b401faec6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 431, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "306402300df82e4ec2960e3df614f8b49cec9a4ee1054365414241361feec9d9d9b6909d8775f222ec385a14afab46266db390c302300968485e854addba0f8354e677e955e1ef2df973d564c49f65f2562cb2a2b80d75e92f8784042955f7b8765f609ce221", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000", + "wx" : "00d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422", + "wy" : "00c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004d1827fc6f6f12f21992c5a409a0653b121d2ef02b2b0ab01a9161ce956280740b1e356b255701b0a6ddc9ec2ca8a9422c6ed5d2ced8d8ab7560fa5bb88c738e74541883d8a2b1c0e2ba7e36d030fc4d9bfb8b22f24db897ebac49dd400000000", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE0YJ/xvbxLyGZLFpAmgZTsSHS7wKysKsB\nqRYc6VYoB0Cx41ayVXAbCm3cnsLKipQixu1dLO2NirdWD6W7iMc450VBiD2KKxwO\nK6fjbQMPxNm/uLIvJNuJfrrEndQAAAAA\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 432, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306402301fafd83d728422e1485f1e52e5b631548647cc3c76c109c3177a73751d91a19012fa4628b218f2229fc4d55f105fe00102304474f9af7b4b0bb96fdb05ae918f799024e8d5b864e49ccd047cf97e7b9f8763cce015c11cf1f461c9027cb901055101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 433, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3066023100e6025bb957ab197fb4c080d0a5c647e428afb0d7cc235c605ae97545494fd31a9979790bb2da6e1cf186789422b15c970231008ae9872291430d1bb371ef72360dad5afbb6fb001f403d9aaa1445f0326eb1eef775c9dfe1d7ef8bf4e744822108d27e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 434, + "comment" : "y-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3066023100877d5567c18fa568259005a89c2300d1b3825b732fa14964c1477d4b3098afd09384b97d497464adba41e9df8a74d339023100c40f0760717b4b3bae75742b6dc3dcf04cc22a449cfea19d305e0658cb705fda75163e7399e0b3125ca7d1919c13851e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "041099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557", + "wx" : "1099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000", + "wy" : "00e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557" + }, + "keyDer" : "3076301006072a8648ce3d020106052b81040022036200041099bb45100f55f5a85cca3de2b3bd5e250f4f6fad6631a3156c2e52a33d7d615dd279f79f8b4baff7c713ac00000000e6c9b736a8929f2ed7be0c753a54cbb48b8469e0411eaf93a4a82459ba0b681bba8f5fb383b4906d4901a3303e2f1557", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEEJm7RRAPVfWoXMo94rO9XiUPT2+tZjGj\nFWwuUqM9fWFd0nn3n4tLr/fHE6wAAAAA5sm3NqiSny7Xvgx1OlTLtIuEaeBBHq+T\npKgkWboLaBu6j1+zg7SQbUkBozA+LxVX\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 435, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "3065023100e706b0045a6f54bd175e2437b48767b0204f93d8a4d9d3d00838278137e5b670de4305c5c55e49059b8b5f6e264654c90230405741adff94afd9a88e08d0b1021911fa4cedb2466b1a8fd302a5b5d96566ada63ccb82b6c5e8452fde860c545e0a19", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 436, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "306502300c57ce2bc579fbd3a759dfbf5e84c3cef2414846a2e300453e1e4c5188f24432b14ca647a733b6ad35c980a880d36145023100f12a119e22d48b82049df611f1c851fb22795056498a873c730fcb9fd8f314728de0298b9b22c348abc6de2aba97e972", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 437, + "comment" : "x-coordinate of the public key has many trailing 0's", + "msg" : "4d657373616765", + "sig" : "30660231009a8f80697ccf2e0617612027d861a3a3a657fb75cc82810b40dd5072d39ff37eca29008390da356137e2c9babd814198023100a86537a83c3d57da50e4b29b47dcc3717c5a1ed0fff18ade8dcce4220eac63aab60b9bfed5f1bdd241dab655a9bdd75f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04000000002b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98", + "wx" : "2b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69", + "wy" : "00d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004000000002b089edd754169010145f263f334fc167cc19dae8225970ae19cc8cb7ec73593d6a465c370f5478b0e539d69d1951d597b56a67345acb25809581f07cd0eb78d9538a3f8a65f300e68a1eb78507df76de650e8f8ee63a5f0c5687c98", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEAAAAACsInt11QWkBAUXyY/M0/BZ8wZ2u\ngiWXCuGcyMt+xzWT1qRlw3D1R4sOU51p0ZUdWXtWpnNFrLJYCVgfB80Ot42VOKP4\npl8wDmih63hQffdt5lDo+O5jpfDFaHyY\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 438, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "306602310093718f6f8542725f62de7039fc193d3fcc81d622230ccc94e9e265390b385af3a3ba50c91a9d6a5b1e07d79af2bd80b2023100d08499f3d298e8afecea122265a36dbf337259020654739783c8ec8ef783d072555b5907285ce83fc8ced9c8398c6269", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 439, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3066023100ce26e42c490dec92cf59d6b1ba75c9a1400d6e5c3fd7c47e1eeb1cded30a3a3d18c81cdfdcbad2742a97293369ce21c202310094671085d941fd27d495452a4c8559a1fe24f3225f5b8ef75faf9d3fb01372c586e23b82714359d0e47144ff5d946161", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 440, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3066023100ffc4738acf71f04a13104c328c138b331fb7202aef66f583ba543ed490d12993c18f724c81ad0f7ea18dae352e5c6480023100e67d4ccdeb68a9a731f06f77eae00175be076d92529b109a62542692c8749ddfde03bed1c119a5901a4e852f2115578f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b33600000000208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4", + "wx" : "00fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336", + "wy" : "208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b33600000000208b3f5ad3b3937acc9d606cc5ececab4a701f75ed42957ea4d7858d33f5c26c6ae20a9cccda56996700d6b4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+wG6rV8Lj3m5zRBNEqq5MQFGrdfWtMAi\n2HrmcRF4uU1hjKezrxOFSxxYiHnod7M2AAAAACCLP1rTs5N6zJ1gbMXs7KtKcB91\n7UKVfqTXhY0z9cJsauIKnMzaVplnANa0\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 441, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3065023100e6fa8455bc14e730e4ca1eb5faf6c8180f2f231069b93a0bb17d33ad5513d93a36214f5ce82ca6bd785ccbacf7249a4c02303979b4b480f496357c25aa3fc850c67ff1c5a2aabd80b6020d2eac3dd7833cf2387d0be64df54a0e9b59f12c3bebf886", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 442, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "306502301b49b037783838867fbaa57305b2aa28df1b0ec40f43140067fafdea63f87c02dfb0e6f41b760fbdf51005e90c0c3715023100e7d4eb6ee61611264ea8a668a70287e3d63489273da2b30ad0c221f1893feaea3e878c9a81c6cec865899dbda4fa79ae", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 443, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "306502310091d9da3d577408189dcaae33d95ed0a0118afd460d5228fa352b6ea671b172eb413816a70621ddaf23c5e2ef79df0c110230053dadbfcd564bddbe44e0ecb4d1e608dbd35d4e83b6634cc72afb87a2d61675ee13960c243f6be70519e167b1d3ceb0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp384r1", + "keySize" : 384, + "type" : "EcPublicKey", + "uncompressed" : "04fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b", + "wx" : "00fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336", + "wy" : "00ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b" + }, + "keyDer" : "3076301006072a8648ce3d020106052b8104002203620004fb01baad5f0b8f79b9cd104d12aab9310146add7d6b4c022d87ae6711178b94d618ca7b3af13854b1c588879e877b336ffffffffdf74c0a52c4c6c8533629f933a131354b58fe08a12bd6a815b287a71cc0a3d92951df5633325a96798ff294b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE+wG6rV8Lj3m5zRBNEqq5MQFGrdfWtMAi\n2HrmcRF4uU1hjKezrxOFSxxYiHnod7M2/////990wKUsTGyFM2KfkzoTE1S1j+CK\nEr1qgVsoenHMCj2SlR31YzMlqWeY/ylL\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 444, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3065023100af0ed6ce6419662db80f02a2b632675445c7bf8a34bbacdc81cc5dd306c657ca4c5a3fb1b05f358d8f36fda8ae238806023046b472c0badb17e089c8f9697fd0b4ce71f0f4471b235483d4c8dd3d00aa282cde990253df38ba733b2ad82a601c7508", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 445, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "3066023100e2aa9468ccaaadad8b9f43a429c97f0c6a7eedcb4d4af72d639df0fe53f610b953408a8e24e8db138551770750680f7a023100d81020846d1c50ee9ae23601dd638cb71b38d37fb555268c2fa1ad8a761fa7b27afcab2fa69224d1f976699914e09de2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 446, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "306402306bf6fa7a663802c3382cc5fd02004ec71e5a031e3d9bfc0858fa994e88497a7782308bc265b8237a6bbbdd38658b36fc02303a9d5941a013bf70d99cc3ff255ce85573688dac40344b5db7144b19bf57bb2701e6850a8f819796b67f7d0b6aea7e50", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/tests/ecdsa_secp521r1_sha512_test.json b/tests/ecdsa_secp521r1_sha512_test.json new file mode 100644 index 00000000..25dda640 --- /dev/null +++ b/tests/ecdsa_secp521r1_sha512_test.json @@ -0,0 +1,4989 @@ +{ + "algorithm" : "ECDSA", + "generatorVersion" : "0.8r12", + "numberOfTests" : 447, + "header" : [ + "Test vectors of type EcdsaVerify are meant for the verification", + "of ASN encoded ECDSA signatures." + ], + "notes" : { + "BER" : "This is a signature with correct values for (r, s) but using some alternative BER encoding instead of DER encoding. Implementations should not accept such signatures to limit signature malleability.", + "EdgeCase" : "Edge case values such as r=1 and s=0 can lead to forgeries if the ECDSA implementation does not check boundaries and computes s^(-1)==0.", + "PointDuplication" : "Some implementations of ECDSA do not handle duplication and points at infinity correctly. This is a test vector that has been specially crafted to check for such an omission." + }, + "schema" : "ecdsa_verify_schema.json", + "testGroups" : [ + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04005c6457ec088d532f482093965ae53ccd07e556ed59e2af945cd8c7a95c1c644f8a56a8a8a3cd77392ddd861e8a924dac99c69069093bd52a52fa6c56004a074508007878d6d42e4b4dd1e9c0696cb3e19f63033c3db4e60d473259b3ebe079aaf0a986ee6177f8217a78c68b813f7e149a4e56fd9562c07fed3d895942d7d101cb83f6", + "wx" : "5c6457ec088d532f482093965ae53ccd07e556ed59e2af945cd8c7a95c1c644f8a56a8a8a3cd77392ddd861e8a924dac99c69069093bd52a52fa6c56004a074508", + "wy" : "7878d6d42e4b4dd1e9c0696cb3e19f63033c3db4e60d473259b3ebe079aaf0a986ee6177f8217a78c68b813f7e149a4e56fd9562c07fed3d895942d7d101cb83f6" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004005c6457ec088d532f482093965ae53ccd07e556ed59e2af945cd8c7a95c1c644f8a56a8a8a3cd77392ddd861e8a924dac99c69069093bd52a52fa6c56004a074508007878d6d42e4b4dd1e9c0696cb3e19f63033c3db4e60d473259b3ebe079aaf0a986ee6177f8217a78c68b813f7e149a4e56fd9562c07fed3d895942d7d101cb83f6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAXGRX7AiNUy9IIJOWWuU8zQflVu1Z\n4q+UXNjHqVwcZE+KVqioo813OS3dhh6Kkk2smcaQaQk71SpS+mxWAEoHRQgAeHjW\n1C5LTdHpwGlss+GfYwM8PbTmDUcyWbPr4Hmq8KmG7mF3+CF6eMaLgT9+FJpOVv2V\nYsB/7T2JWULX0QHLg/Y=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 1, + "comment" : "signature malleability", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024201d74a2f6d95be8d4cb64f02d16d6b785a1246b4ebd206dc596818bb953253245f5a27a24a1aae1e218fdccd8cd7d4990b666d4bf4902b84fdad123f941fe906d948", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 2, + "comment" : "valid", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 3, + "comment" : "length of sequence contains leading 0", + "msg" : "313233343030", + "sig" : "3082008602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 4, + "comment" : "wrong length of sequence", + "msg" : "313233343030", + "sig" : "308702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 5, + "comment" : "wrong length of sequence", + "msg" : "313233343030", + "sig" : "308502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 6, + "comment" : "uint32 overflow in length of sequence", + "msg" : "313233343030", + "sig" : "3085010000008602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 7, + "comment" : "uint64 overflow in length of sequence", + "msg" : "313233343030", + "sig" : "308901000000000000008602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 8, + "comment" : "length of sequence = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30847fffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 9, + "comment" : "length of sequence = 2**32 - 1", + "msg" : "313233343030", + "sig" : "3084ffffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 10, + "comment" : "length of sequence = 2**40 - 1", + "msg" : "313233343030", + "sig" : "3085ffffffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 11, + "comment" : "length of sequence = 2**64 - 1", + "msg" : "313233343030", + "sig" : "3088ffffffffffffffff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 12, + "comment" : "incorrect length of sequence", + "msg" : "313233343030", + "sig" : "30ff02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 13, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 14, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "30818602804e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 15, + "comment" : "indefinite length without termination", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645028028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 16, + "comment" : "removing sequence", + "msg" : "313233343030", + "sig" : "", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 17, + "comment" : "lonely sequence tag", + "msg" : "313233343030", + "sig" : "30", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 18, + "comment" : "appending 0's to sequence", + "msg" : "313233343030", + "sig" : "30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 19, + "comment" : "prepending 0's to sequence", + "msg" : "313233343030", + "sig" : "308188000002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 20, + "comment" : "appending unused 0's to sequence", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 21, + "comment" : "appending null value to sequence", + "msg" : "313233343030", + "sig" : "30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 22, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818c49817730818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 23, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818b250030818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 24, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818930818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 25, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818b224649817702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 26, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818a2245250002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 27, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818e224302414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450004deadbeef024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 28, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818b02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452246498177024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 29, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864522452500024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 30, + "comment" : "including garbage", + "msg" : "313233343030", + "sig" : "30818e02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452243024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10004deadbeef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 31, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818faa00bb00cd0030818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 32, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818daa02aabb30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 33, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818e2249aa00bb00cd0002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 34, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818c2247aa02aabb02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 35, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818e02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452249aa00bb00cd00024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 36, + "comment" : "including undefined tags", + "msg" : "313233343030", + "sig" : "30818c02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452247aa02aabb024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 37, + "comment" : "truncated length of sequence", + "msg" : "313233343030", + "sig" : "3081", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 38, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "308030818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 39, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30818a228002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 40, + "comment" : "using composition with indefinite length", + "msg" : "313233343030", + "sig" : "30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452280024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 41, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "308031818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 42, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30818a228003414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 43, + "comment" : "using composition with wrong tag", + "msg" : "313233343030", + "sig" : "30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86452280034128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 44, + "comment" : "Replacing sequence with NULL", + "msg" : "313233343030", + "sig" : "0500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 45, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "2e818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 46, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "2f818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 47, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "31818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 48, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "32818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 49, + "comment" : "changing tag value of sequence", + "msg" : "313233343030", + "sig" : "ff818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 50, + "comment" : "dropping value of sequence", + "msg" : "313233343030", + "sig" : "3000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 51, + "comment" : "using composition for sequence", + "msg" : "313233343030", + "sig" : "30818b300102308185414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 52, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "30818502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 53, + "comment" : "truncated sequence", + "msg" : "313233343030", + "sig" : "308185414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 54, + "comment" : "indefinite length", + "msg" : "313233343030", + "sig" : "308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 55, + "comment" : "indefinite length with truncated delimiter", + "msg" : "313233343030", + "sig" : "308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 56, + "comment" : "indefinite length with additional element", + "msg" : "313233343030", + "sig" : "308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac105000000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 57, + "comment" : "indefinite length with truncated element", + "msg" : "313233343030", + "sig" : "308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1060811220000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 58, + "comment" : "indefinite length with garbage", + "msg" : "313233343030", + "sig" : "308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000fe02beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 59, + "comment" : "indefinite length with nonempty EOC", + "msg" : "313233343030", + "sig" : "308002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10002beef", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 60, + "comment" : "prepend empty sequence", + "msg" : "313233343030", + "sig" : "308188300002414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 61, + "comment" : "append empty sequence", + "msg" : "313233343030", + "sig" : "30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac13000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 62, + "comment" : "append garbage with high tag number", + "msg" : "313233343030", + "sig" : "30818902414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1bf7f00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 63, + "comment" : "sequence of sequence", + "msg" : "313233343030", + "sig" : "30818930818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 64, + "comment" : "truncated sequence: removed last 1 elements", + "msg" : "313233343030", + "sig" : "304302414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 65, + "comment" : "repeating element in sequence", + "msg" : "313233343030", + "sig" : "3081c902414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 66, + "comment" : "long form encoding of length of integer", + "msg" : "313233343030", + "sig" : "3081870281414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 67, + "comment" : "long form encoding of length of integer", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502814128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 68, + "comment" : "length of integer contains leading 0", + "msg" : "313233343030", + "sig" : "308188028200414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 69, + "comment" : "length of integer contains leading 0", + "msg" : "313233343030", + "sig" : "30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450282004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 70, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "30818602424e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 71, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "30818602404e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 72, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024228b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 73, + "comment" : "wrong length of integer", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 74, + "comment" : "uint32 overflow in length of integer", + "msg" : "313233343030", + "sig" : "30818b028501000000414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 75, + "comment" : "uint32 overflow in length of integer", + "msg" : "313233343030", + "sig" : "30818b02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450285010000004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 76, + "comment" : "uint64 overflow in length of integer", + "msg" : "313233343030", + "sig" : "30818f02890100000000000000414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 77, + "comment" : "uint64 overflow in length of integer", + "msg" : "313233343030", + "sig" : "30818f02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645028901000000000000004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 78, + "comment" : "length of integer = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30818a02847fffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 79, + "comment" : "length of integer = 2**31 - 1", + "msg" : "313233343030", + "sig" : "30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502847fffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 80, + "comment" : "length of integer = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30818a0284ffffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 81, + "comment" : "length of integer = 2**32 - 1", + "msg" : "313233343030", + "sig" : "30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450284ffffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 82, + "comment" : "length of integer = 2**40 - 1", + "msg" : "313233343030", + "sig" : "30818b0285ffffffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 83, + "comment" : "length of integer = 2**40 - 1", + "msg" : "313233343030", + "sig" : "30818b02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450285ffffffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 84, + "comment" : "length of integer = 2**64 - 1", + "msg" : "313233343030", + "sig" : "30818e0288ffffffffffffffff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 85, + "comment" : "length of integer = 2**64 - 1", + "msg" : "313233343030", + "sig" : "30818e02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450288ffffffffffffffff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 86, + "comment" : "incorrect length of integer", + "msg" : "313233343030", + "sig" : "30818602ff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 87, + "comment" : "incorrect length of integer", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502ff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 88, + "comment" : "removing integer", + "msg" : "313233343030", + "sig" : "3043024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 89, + "comment" : "lonely integer tag", + "msg" : "313233343030", + "sig" : "304402024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 90, + "comment" : "lonely integer tag", + "msg" : "313233343030", + "sig" : "304402414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 91, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "30818802434e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 92, + "comment" : "appending 0's to integer", + "msg" : "313233343030", + "sig" : "30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024328b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10000", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 93, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "308188024300004e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 94, + "comment" : "prepending 0's to integer", + "msg" : "313233343030", + "sig" : "30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450243000028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [ + "BER" + ] + }, + { + "tcId" : 95, + "comment" : "appending unused 0's to integer", + "msg" : "313233343030", + "sig" : "30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450000024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 96, + "comment" : "appending null value to integer", + "msg" : "313233343030", + "sig" : "30818802434e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450500024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 97, + "comment" : "appending null value to integer", + "msg" : "313233343030", + "sig" : "30818802414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024328b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac10500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 98, + "comment" : "truncated length of integer", + "msg" : "313233343030", + "sig" : "30450281024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 99, + "comment" : "truncated length of integer", + "msg" : "313233343030", + "sig" : "304502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450281", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 100, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "30450500024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 101, + "comment" : "Replacing integer with NULL", + "msg" : "313233343030", + "sig" : "304502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450500", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 102, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "30818600414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 103, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "30818601414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 104, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "30818603414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 105, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "30818604414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 106, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "308186ff414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 107, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645004128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 108, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645014128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 109, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645034128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 110, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645044128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 111, + "comment" : "changing tag value of integer", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645ff4128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 112, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "30450200024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 113, + "comment" : "dropping value of integer", + "msg" : "313233343030", + "sig" : "304502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450200", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 114, + "comment" : "using composition for integer", + "msg" : "313233343030", + "sig" : "30818a224502014e02404223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 115, + "comment" : "using composition for integer", + "msg" : "313233343030", + "sig" : "30818a02414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864522450201280240b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 116, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "30818602414c4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 117, + "comment" : "modify first byte of integer", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502412ab5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 118, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86c5024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 119, + "comment" : "modify last byte of integer", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318a41", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 120, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "30818502404e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 121, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "30818502404223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 122, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "30818502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024028b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318a", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 123, + "comment" : "truncated integer", + "msg" : "313233343030", + "sig" : "30818502414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450240b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 124, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "3081870242ff4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 125, + "comment" : "leading ff in integer", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450242ff28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 126, + "comment" : "replaced integer by infinity", + "msg" : "313233343030", + "sig" : "3046090180024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 127, + "comment" : "replaced integer by infinity", + "msg" : "313233343030", + "sig" : "304602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645090180", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 128, + "comment" : "replacing integer with zero", + "msg" : "313233343030", + "sig" : "3046020100024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 129, + "comment" : "replacing integer with zero", + "msg" : "313233343030", + "sig" : "304602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645020100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 130, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081870242024e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbe97b3367122fa4a20584c271233f3ec3b7f7b31b0faa4d340b92a6b0d5cd17ea4e024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 131, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081870242fe4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbf4d826580ab145752e852a6e91512b78178047879e9714a4ae1bc74298aaa7223c024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 132, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081860241b1bddc11bc17347621c4ecc6003d861a7d07d3854f08e4421bc241c8b538a00410d65320718f8af465fb099025b7cae2184402aea8df4f13a328c90648c42079bb024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 133, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "308187024201b1bddc11bc17347621c4ecc6003d861a7d07d3854f08e4421bc241c8b538a0040b27d9a7f54eba8ad17ad5916eaed487e87fb8786168eb5b51e438bd675558ddc4024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 134, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081870242fdb1bddc11bc17347621c4ecc6003d861a7d07d3854f08e4421bc241c8b538a0041684cc98edd05b5dfa7b3d8edcc0c13c48084ce4f055b2cbf46d594f2a32e815b2024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 135, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081870242024e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 136, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "3081870242fe4e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 137, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "308187024201b1bddc11bc17347621c4ecc6003d861a7d07d3854f08e4421bc241c8b538a00410d65320718f8af465fb099025b7cae2184402aea8df4f13a328c90648c42079bb024128b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 138, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502420228b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba09a7b6ac4ecd0410b4722ca75ba197a403a0a1f9ee0e7b391b0649fda1d3969eeca", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 139, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450242fe28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a5d85db5e551e1de70233273282b66f49992b40b6fd47b0252edc06be016f926b8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 140, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818602414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450241d74a2f6d95be8d4cb64f02d16d6b785a1246b4ebd206dc596818bb953253245f5fd61bc296eeee8b245d018b8edd8f659631962ad7a1e8b5fe56cfdd0157ce753f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 141, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450242fdd74a2f6d95be8d4cb64f02d16d6b785a1246b4ebd206dc596818bb953253245f6584953b132fbef4b8dd358a45e685bfc5f5e0611f184c6e4f9b6025e2c6961136", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 142, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf864502420228b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 143, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf86450242fe28b5d0926a4172b349b0fd2e929487a5edb94b142df923a697e7446acdacdba0a029e43d69111174dba2fe747122709a69ce69d5285e174a01a93022fea8318ac1", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 144, + "comment" : "Modified r or s, e.g. by adding or subtracting the order of the group", + "msg" : "313233343030", + "sig" : "30818702414e4223ee43e8cb89de3b1339ffc279e582f82c7ab0f71bbde43dbe374ac75ffbef29acdf8e70750b9a04f66fda48351de7bbfd515720b0ec5cd736f9b73bdf8645024201d74a2f6d95be8d4cb64f02d16d6b785a1246b4ebd206dc596818bb953253245f5fd61bc296eeee8b245d018b8edd8f659631962ad7a1e8b5fe56cfdd0157ce753f", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 145, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 146, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 147, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 148, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047020100024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 149, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047020100024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 150, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047020100024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 151, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047020100024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 152, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470201000242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 153, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020100090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 154, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020100090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 155, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 156, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 157, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201010201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 158, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 159, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 160, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 161, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047020101024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 162, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470201010242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 163, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3008020101090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 164, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3006020101090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 165, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 166, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 167, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 168, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470201ff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 169, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470201ff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 170, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470201ff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 171, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470201ff024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 172, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470201ff0242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 173, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30080201ff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 174, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30060201ff090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 175, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 176, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 177, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 178, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 179, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 180, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 181, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 182, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864090242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 183, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3049024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 184, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 185, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 186, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 187, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864080201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 188, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 189, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 190, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 191, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 192, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e913864080242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 193, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3049024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 194, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 195, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 196, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 197, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 198, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 199, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 200, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 201, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 202, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a0242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 203, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3049024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 204, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 205, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 206, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 207, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 208, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 209, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 210, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 211, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 212, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "308188024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 213, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3049024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 214, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3047024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 215, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020100", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 216, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020101", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 217, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "304702420200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000201ff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 218, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3081880242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386409", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 219, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3081880242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386408", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 220, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3081880242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 221, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "3081880242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024201ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 222, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30818802420200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 223, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30490242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090380fe01", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 224, + "comment" : "Signature with special case values for r and s", + "msg" : "313233343030", + "sig" : "30470242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000090142", + "result" : "invalid", + "flags" : [ + "EdgeCase" + ] + }, + { + "tcId" : 225, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30060201010c0130", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 226, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30050201010c00", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 227, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30090c0225730c03732573", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 228, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "30080201013003020100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 229, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "3003020101", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 230, + "comment" : "Signature encoding contains wrong types.", + "msg" : "313233343030", + "sig" : "3006020101010100", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 231, + "comment" : "Edge case for Shamir multiplication", + "msg" : "39353032", + "sig" : "308187024200b4b10646a668c385e1c4da613eb6592c0976fc4df843fc446f20673be5ac18c7d8608a943f019d96216254b09de5f20f3159402ced88ef805a4154f780e093e044024165cd4e7f2d8b752c35a62fc11a4ab745a91ca80698a226b41f156fb764b79f4d76548140eb94d2c477c0a9be3e1d4d1acbf9cf449701c10bd47c2e3698b3287934", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 232, + "comment" : "special case hash", + "msg" : "33393439313934313732", + "sig" : "308188024201209e6f7b6f2f764261766d4106c3e4a43ac615f645f3ef5c7139651e86e4a177f9c2ab68027afbc6784ccb78d05c258a8b9b18fb1c0f28be4d024da90738fbd374024201ade5d2cb6bf79d80583aeb11ac3254fc151fa363305508a0f121457d00911f8f5ef6d4ec27460d26f3b56f4447f434ff9abe6a91e5055e7fe7707345e562983d64", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 233, + "comment" : "special case hash", + "msg" : "35333637363431383737", + "sig" : "308188024201c0832c973a455cac48a4439659aa21146036c52ec1514121c66714348a1c0e2c7099a2466d9acb49325a0cb509e5dff2efbcd90369d3027cbb7dca58a134278d05024200a426c063ab5cc6af20dd1ba8a519fac910183561598e67c0929e25f9c3aaeb245c5647fba21e30c103304dc6f49e6dec68a7833533e4e5448240bde023fe201eb9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 234, + "comment" : "special case hash", + "msg" : "35363731343831303935", + "sig" : "30818702410d01cde64dda4dbcef1a9b924779598217b97eb688d9b4a4fd20d1b81ff0bb870abff1b0db6dfc3762f27c3954f230a7933d9ea397a972caac5ed2183ec72716c7024201c6530fb6b913005f81e156be89b3847701829fbb310d8a4c761212c6d2f8750174f2bf81c238fdde4370fa87de320f57dbed96691af45cb99f3daa865edcdda59e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 235, + "comment" : "special case hash", + "msg" : "3131323037313732393039", + "sig" : "308187024200c009c74ec707252325d78f4e7f14be28f56272be17c0c18c90ad4c07322cef4eea444c8feabf41a213e3e846f8ac8bb7750d49143069cd01877d530bb981f1a85b02411f1c27ef97f434a8c2ff315dd39d909709775bb3c7588243bdfd8f7c866c49b3369719d5b74a47924bbce57301675e2baadcec438e07e6d532aba664253ab09550", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 236, + "comment" : "special case hash", + "msg" : "3131323938303334323336", + "sig" : "308188024201d3b17a34b19d134773988c434a9fb7f22a57dfb4c4bcca031e213e1b9a56db0ecb2f3c54cf9b1b6e5981369652de37337a7a7d7ddb54d67b067bbce01fd7fd2808024200c90317dfa061122557eb3899939924a8ea3cdd886e0f2e5f2c384b65b1a40de5f00fd9fce889fc313a6a9d5f0a9cd3a7b89b7ba8e97807031f3d1e3f9c103f0a10", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 237, + "comment" : "special case hash", + "msg" : "39383736303239363833", + "sig" : "308188024200cdca5299e788600a3ca5938d4a4c5f42b5eea3cefc990e67af95a4449aac0ab50e8fc4778efa497223cdca07c0e5a5920110f3a87afaaf265beadbb91c00d13464024201a92b9a5570b42f91ebc3d8ba272db9241468154783548d3fcfb6ef46c9e037bb6217af0a31ef952c27604629ad5775e7695c63efa138cee8326a51c1b04d0c658f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 238, + "comment" : "special case hash", + "msg" : "3230323034323936353139", + "sig" : "308188024201660b0ed15d5f63044cb189e1a405bcb591c37217d0e000008614b152665d5bb9353a3826854a8bc6ebed423b15680e4340a00701b17bae24bd399bcff7e0438bfb024201c47f2f5c6143d2eef063757114aaeb27827b6a8f675d1825dac7f4548cbf78a37eb9621a29e9b14cf61fc6ae49e7e6e15350a4b90a4a897ff69b0c59b69508ebc7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 239, + "comment" : "special case hash", + "msg" : "31343531363639313830", + "sig" : "3081870241364684856c7c02bfb2ad2de603d10883ca93c122d4cebef276467a9b7620fb530e4d05d07c15ab948b9ce7682561307913b64ea6896ece1095dc64369f1a9d5c0d0242009e6db2ff96d9d71150440fd44992656ca118fcaf6bd04499314e8ba61a55a8790aac023ddb68600fbd7ed4cd4decb176e8bd7822ea31d75adcbdaccafcf510c26c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 240, + "comment" : "special case hash", + "msg" : "31303933363835393531", + "sig" : "308188024201a317e49014f1bf3afc09cc048531010e2144b662cac657e51b32bb432d274a730b535fb2de66fa8ddd26faa3f46e004389d25517c56e7d8a1d39563b0e8c9c215b024201ad2e1212e1680b660a1c07f54addff575c8c8298e26a14c516f517fb5f966a2b383aa46a483fdbfa72711d60c0f67a2c03d63d2626ffe271e0ce353a4d4b09bd5e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 241, + "comment" : "special case hash", + "msg" : "36323139353630323031", + "sig" : "308188024201c09b29fc4da04e9b86097bd6d6806aa969ceb37ce52eeac5e9518d27541c3f30c00f113d9dd3b007dae6f381896d43fc6ddfb3fa256a36529b054e416ed638059902420113e5622cb1e4c4bb0842f3d396d7e660241116e94e8120a602e3d2952701b1a11415a3d8c503adced160450fd13157ad147d2d65d77449458659350e20a545602e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 242, + "comment" : "special case hash", + "msg" : "35363832343734333033", + "sig" : "308187024178f4a2968460ea8f64a938b3a97c914eb0ccfa94eb08636efee9d5ad8668ce1c9099573abd146df9e7b2ccaaa1a25de903f85962849356a872e88e545babc28974024200f2729e9593c9fcdf5971b21e367ffdc87aa7520393527c6f68ab512b88b839003c1c9952b04f2dc74010a31071ee20a9fb1c7e1187d04de71b3f4327df128ccd43", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 243, + "comment" : "special case hash", + "msg" : "33373336353331373836", + "sig" : "3081870242019faed147a76b65779d0989e1300802844c9ba09f338c5e31a24d9ebf8f0b0b4c21f59d369ac10e315fa2b7605b0f17a9c07cf6ce4c83838e58333a3390142d79d002415f4de71fdaced1e8da86efd47ecbdac6a6ffc6d69df71da7ceb5596475cdfecea3d00f074d2de89e0fcc05e3231d531f0d38f2b7c6fe4ecf67a0cdddc21d0867b8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 244, + "comment" : "special case hash", + "msg" : "34373935393033373932", + "sig" : "308188024200d0b144350a2128f042bc1a27f6c021dad1ec031be8f1d8304797f9ddcb742974aae209f014980174b9d4e434e3f53247889d2da4b767593179cb4eda47e799643002420184d3416dee35ba8807703a91ac927096c10959a05cbffd8103a93a9f20a11537bed7a645f32295e4abce493579caa4e2242060cc4d58b2414870e98b9336795787", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 245, + "comment" : "special case hash", + "msg" : "39333939363131303037", + "sig" : "308187024105257a0f45ee2ae5cc30283d23c47c96f6deaa3ac1473e8e8a40eaf61bc4b0ef8bd18d11983f257ec4b1d8d04e76a122b5bbe1d31065159072c58fd9bc3e98376802420122dba50d0eb71bdbf092a94a7ea280412906e1f849e91dbd5d8158e3fc6cd12e20461b77653e3df2e45b86883f81071b33651ae1b84cc8e7c365ab8d6a36d1cfa6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 246, + "comment" : "special case hash", + "msg" : "31303837343931313835", + "sig" : "3081880242014f624af9d8096fe7a290651d23ab260da64e44b886fef4f3881d0d984d3b387fddcf65b1fa1dbb239028fbab4a1de6ad150cc8a4e4db0a971bb8bcf01c4728ff9802420105e3b55db0141c06d9854096cc0f73415dd2b85a331da50cfea3bbf648bbf8651f61f2cd09386b62fbb8ce67248683c260894d9ed54d6667ae02978e38ab99320a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 247, + "comment" : "special case hash", + "msg" : "33323336363738353030", + "sig" : "30818702412c952d7e61e1097cd7f709e62ec486879b380b63791c146b545c064e65b3060250d00af279cf15eade67384b28594db542845fcc6574ef5d8d5bb8a162e0350a0002420135ac6d1cc05b095fbae28b652fe5386b8689e21a14990236d3ada7ceeb0c12a4f774bff7b81c8d07572b0c7985364c5d31f33271f0ac3a2afb88b46bfeefbaeaa8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 248, + "comment" : "special case hash", + "msg" : "31343438393937373033", + "sig" : "3081880242017919eff78225e1937a921f98f5d153cbffa03929819f228ee013f8e59549b04b9867006a8df25a93a6a25dd1d3f540239a8ed14047ea00811da9305ec515ad000d0242011fb873bdae1757801e575c5df62cf82a1881af3cd6ed17dc50edbe6c5fd0f4d31766670b2aa572a9e6547b36142afa8464d0be4bf41930629dc04c85e01b2ee8e2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 249, + "comment" : "special case hash", + "msg" : "35373134363332383037", + "sig" : "30818702416ac9b370067b13ac2b57f35d6d9b1faa93b9b068ef5ddf8bde3a54024810aa2226560065b0cb7501df96b4756ce1e1fa607f86a942367894a1f7728bd5f22cf1770242008b47a9e1370c9f5bf4677d554c00e9ac3ea7cdfc78836ac53ac710b7f3bff8c2297780c69a9fddb80e03a605e5e48a52e52fd35f41668cd9064886366fda206086", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 250, + "comment" : "special case hash", + "msg" : "323236343837343932", + "sig" : "308187024200c4bcfff265cd32442220976ffc7e4ec09181d694696eb89af0cb2d5a2dfc3876deb3c6adea168965200c355c3bff5e47ab17ecc44c8434333280796d3a183449ea024162debe91550f8a760eaea309f48483c65a52c7e88a83867c31730cbc6b0a64d4c564bde67e6539af787ecfd18016cde46ddf91740f58f6ea6ec80b173fd1c47ad0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 251, + "comment" : "special case hash", + "msg" : "35333533343439343739", + "sig" : "30818802420174d744ddc631fcf8202fca0ab10f6d96d3f7552bb2a9ae5ac573634133f61c59a120fedbc39cfb521ab0cd572afbd5147981090d1dcbfe902e03f0c0579967b5810242012f59ca927c4ae331d2f667fcd9ec01b0b5514e2ab5da0561ea614431dc1fcb761c351cd1211092720ebb7074a5128f8019b7c18e048d5ed3573ed61686e9713f72", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 252, + "comment" : "special case hash", + "msg" : "34373837333033383830", + "sig" : "3081880242019a513cfaf871287340d8a51d2f4348ab4096c5fe244b22add38ce433e3178e8ff5b2df0fe74a1ba40fe8341f734c71f9a1177b41035777e2da6b082e0b566690de024200d0c43eb33a817c3aab30281c593c74517ee84e958b114395ce0b31fcf30bb8f5dfe60dbc7f6f14698977d8e0516a9274a5bd71847057e006fa315fae6922eaaa55", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 253, + "comment" : "special case hash", + "msg" : "32323332313935383233", + "sig" : "3081870242013204800efcb40ab09ae4137325a3e8c468edae91880a51616ba61f3ef1f72fd89feb956bfb39818d827468bb4475110a04779fd6bb3def25c61c4ba60889ed0ff70241704b7394687698c8841f4875d40e5b3c914f154ccb2b54466ae163ed3410f20d0a07ac5f90c0c31271ec8a524ca2dae4b8bc4f6e1ece173ea907890693c5f2190c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 254, + "comment" : "special case hash", + "msg" : "3130373339333931393137", + "sig" : "30818802420180241cd2e6163158a39599890dabee99c2c86b88accd2b04b5a72874fbdfbde0d18143c4d78e0da1abf3796b238738840d60e34775a8ff810d58a9bb3559a3997c024200bc396c2ef28b244fb8e004bf5361572ba1fef6fbe081ed1dedba4d9af78deee126599f75a0a9d0f1b1618ded7a0c5e672e40917fdd30582460da3aeb1e9c4477d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 255, + "comment" : "special case hash", + "msg" : "31383831303237333135", + "sig" : "308188024201485fc03fcd629fd4c564775ab6969bbc696b5b0f38141b69f86e052e7fe8849a64af2dd37a2adf64672f20bd6f97cd32f0efea51aa22064c5f10a3911177e1979d02420180fab473ff9d726db6d266541a0bddff8610e4026d26b6c9abf972eaef477d50670bdd3067c9d711a8346e16869147751e89b4ea75bb00ece71300cc3b80cf8899", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 256, + "comment" : "special case hash", + "msg" : "36303631363933393037", + "sig" : "308188024201bea49b150a27026fdf848297b0491019f76abf90f3e6d782e3d3fa6caddb81b7ef58b27f1b2b3f7898889b4e2b6cdda7b5636177a27eb9a67b2055b6f21d262c26024200dffb13c2d5f746c8573aa444afc8baf8bf881cc4d0fca8169f6cb304f400eb3932666cd3758c437c9cad79abfd89c72a788505763aabdfabf8903ad4a70d9ec9f7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 257, + "comment" : "special case hash", + "msg" : "38383935323237303934", + "sig" : "308187024201d56bf6f3758f627f470706d1d28c28fbfcad6dc30465cb285a274fc057f791de73ac30baccde044473fa9e3dce6d395eadf98d1f97259bd851a1eb6f3d31d2d756024133704b4ad37300a96682569f4f7fea3e14d6e1f65864663f39aa67f40b5c949f198d5de9f2ac2369bbb9111c89b393199537c6c08ed7c02709c733ef7660113d53", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 258, + "comment" : "special case hash", + "msg" : "31353830323334303934", + "sig" : "308188024201554035ba84b051d50901c622b98be4de0123a02928dffa7eb13b0403fd5e255f226505e15694956a66a878ff581173d123d1b24eaa85c5fe46d8973a55040ff405024201b016dd6b5176ad8347eb9802dd7727e06a29db33cc946f809a42f9193040692b0f82ebbd04eff9f099b7f75f8e45e74ac00a51a9cd4f2cbf5f03f4d2bee99c24eb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 259, + "comment" : "special case hash", + "msg" : "33393635393931353132", + "sig" : "3081860241293e8d6775f3c14183aecc22f608e9013d7b15dad167bb38a1dfef6b373619f1ba2751d77b43f643f68643cfdb5c04a8ed858bfcf3858a681ae93bfc7cd7e3143802412c7d96db7dbbe347bab9f6f7b88f48cb32ab963248737d2c901b90d64591cbdb0f0ca7a14557f8a50fd80d402f929dad141141f1f0c85d9414b32d1fd4d796e6e7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 260, + "comment" : "special case hash", + "msg" : "32323838373332313938", + "sig" : "308188024200b16a9b3aceece85908125f96f6cb6b1afd0ef04171936b3766f8e43beb340d382084b33439f775a29a83945da8efc4190db1343e87d8c0ffb97aeb3be159d90f59024200e5c2bbd98e449bd0bb4f75a07f1a88dd63c0602a7660f4acd33937c4913a9c16ba44dc5808892ec88a4255109a7bc5b221c07e6a278888a9712fc2a25b374427e3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 261, + "comment" : "special case hash", + "msg" : "32323330383837333139", + "sig" : "30818702413b47a8ed52f5b0566365313520bc0b6e4e4efb3ea4176ed7a352c4b2f8bffbdb0148ff44f3f13d9e5e31b1cdeae097574aad8bf393c54a5c842e749ee87a74c6b0024201d3f484e9e224bda9c8f10fbb74bbb62d7a18245707f4eb52f17dde793892c16e4bdf504960fba55da487f542d412b1b833f6f46336118618fcff69469c83963777", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 262, + "comment" : "special case hash", + "msg" : "313239303536393337", + "sig" : "30818802420128b8988bfe9287f82ac97be507a544b823e85cc2813b6929e63699cff85a40283076028e7bf8d24330f89adb96bf24a4e183a898e679b36768909574e7d4733d61024200c18aae44e6801fc2e3d9c7a20ff9d42b46e4a31ca37772f8c46ce65219b195ca23717f816e1fed51e5b6f9a0ca12c3cf81ae7fc9cc6946a88330b2011ddd160930", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 263, + "comment" : "special case hash", + "msg" : "32373438363536343338", + "sig" : "3081870242015edf1fa95b17159f762d68c1736101309e80fe5b2c4415609a5ac0837fe5901f3c2d3d826a43b1f8cd1babf494ffd96cca1267950188a924d4e1bf7f68189f27d302412e8697efbbf53adb7cb1b904718fc71eb2561f331c209c50848b5bc50bef77c5c3487d285bfaa3caa14025cbb71bdbaea6911e3610335641d2799c3fd75019f716", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 264, + "comment" : "special case hash", + "msg" : "37353833353032363034", + "sig" : "30818802420161f64bbe93fdc0e61134cfd4c453ab740233b436179351aa68a3e38a83400d86ff464d7ceb7a51f541b86eb2f12e32a879b3a29bcb92e08cd50e74f86a0ed52ae90242008f6fef49ba12ced6696f4f6d24e6c68057a84496d42eede630199e9bd06d91363542a9776bfcd6d77fbae422e80fe466edd2c2c5e1f5cc79bedd1a7becc1a12660", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 265, + "comment" : "special case hash", + "msg" : "32333237373534323739", + "sig" : "3081870242013a6faccc1c06cb5dadb2cf083cb94a7181fd5cbf3954fdc430c2691248fcfcd13767e32491f00269b549cae93777ced0f7b069440726adde7605d4038d7b5ea4cc02417622c9065f4c49a6f8649073dfc6a827b897b6984176b1a09d151b9733a68f6da746c47427cdeb3be075da4a351ab78dd5e472cd98d1586edd6ff2a11c6c169fbb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 266, + "comment" : "special case hash", + "msg" : "373735353038353834", + "sig" : "308188024201899609e7f7cd2ef14bfbb1cb9ba9283ae11a9346a34bef23b1c249da2e76a7708e0f2f97f819e4e25b0d5227eeb85aa593c3fae9398a7020f61ae1606945d13841024201b8d5e9c4f030295447106d2b5c80cc2e7d4e36b458a90a08f505df62d2234e59d08187385ba5501049b34e12ec92f7839a18361a52a9a0b6f6a664b118680b53d7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 267, + "comment" : "special case hash", + "msg" : "3137393832363438333832", + "sig" : "308187024201ddc69d1508021eb560db39f3add8a28dd7fbce417e5fa1f4f626705caaad72b634868d01dfc474e926c97927c56ac51f9bdcfd0e7627be35cc300a0cdc083b00d402416e862caf9f2df11b0a46104e78865fbbabe30bfac0b1fe7f99badc11746a288c1ff27f6fa2aaba6441bab0372af906eef083ff03ba466b896c9344cd396dd46dbd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 268, + "comment" : "special case hash", + "msg" : "32333936373737333635", + "sig" : "30818702420117fe2c21f282c7e4a8415e9c53c254514eeeb0adadc771adbc6d21a09add4f17ea0c597469488238be795f2e187fa016d590535b4ff10c62d2246aa17bb013f9ee02413c9f1590ce7a68fc84c617f478188e71aefe8c74c4b9979b8c9196bcc262205aecce5fd2bb80c360d3e20da20e36c5ab70d810d4ba97d13858199d3a1c9c140c63", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 269, + "comment" : "special case hash", + "msg" : "35393938313035383031", + "sig" : "308188024200be6b47254a3cf93e2e276adfb072256404744070d6dec83ef34e3e6c119206422bb275e61fc47053ef7b2af9e33aca8f8b2e4938057070eb6ebbcf82fabb44a5fe024201061ef80935ff6d0e9f87f3537b639945acf50c5d97d30b4b9c347e3f5f5ec02b15a376ae754d64b2efaa811b3d12a0fff0bc689022025dd2f69f2f4b40dda8687a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 270, + "comment" : "special case hash", + "msg" : "3136363737383237303537", + "sig" : "30818802420130b6fd7dec5cb6f90a8b54ce7b58c61b013d0aed7c4a26639de80aeac3d9e3388e9f87e1e6419d3f0339af324e1421b5d130317ffd9d8be36500a84bb41d026cea02420176b460a3eae01d8aa8ccffb0d6cf4d1595aa697c65510a1197b97343c1a6234552ce9d6d318c5f20f48bec0dc311dd62eb40058f3cb22fa958edaf9ddded191a08", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 271, + "comment" : "special case hash", + "msg" : "323036323134333632", + "sig" : "308188024200a87de42d827ae1f55d6fab3277c7a9fdfac3af22fe47e52bfee34fa1ee3e765095fff20175becbdc94b4a5ad3a149ea7c1bebf4d45370e6b4404a0437d8fae264f024201a3c1c5186d8aa491b4623f5765a388930f37bb8f3e1c0db508983585b9090b3aaf22bb846e0fb6d915b5811ac55e4d6cb08f605cb84deb55ab7fba2dde8736b1c4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 272, + "comment" : "special case hash", + "msg" : "36383432343936303435", + "sig" : "3081880242010e46055d9aa087f1c4b6056319cbf17a0694fe073266a3f30363030e345a4bd461acbd99d1261fc05ef3c9a1c37afba6e21c2d513ea3d4709de5586810d7d29ec6024200d0c95c7e97a94efb44aa717cd6ebe82de0644e32676d197351f128ee8d2b223ab476d3e66014ecc003081f7040c578b8984628d6ec80733f713e26b2c98cb4ede1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 273, + "comment" : "special case hash", + "msg" : "33323639383937333231", + "sig" : "3081880242012c04d08a7a2d07403aba604ea85ec23a52b52786e7fce04170e867be6146eea75a7180f5d4f3b82a204a3c996811a1e61a3e76ed209c22428b35c51fe60f3bee1e0242016f2feabc25733b0a460463b9933e6e4ae9f4124cd0ad3785c77755dbf0848ec1cfd2ab08b960b556870fa00388d23d9a9fa3112ac3e62a0f342d58fb1f0aa81748", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 274, + "comment" : "special case hash", + "msg" : "31333837333234363932", + "sig" : "308188024201ca9532c9daeb80d0dbc07a4138ba62a6bab8c88b9e1e2edf2675132eb97cfb26f4c395f3b9d1d1275694956b34c3ef72cd00bab86777465b9edba29a41b0114c6202420140eb6dddff253a7ff5b032d82fbd18e481a376fe242f6405b81b57165665c9bfe61e25cd3358245bdfb8de7632de72ed20cdacf384764096c8fe3a376563a348af", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 275, + "comment" : "special case hash", + "msg" : "34313138383837353336", + "sig" : "308188024200d609e1f1cc1adf5889dc6deda441682e760be08932b31592fef3ada143fb4940e4ea75ae519e4fb0769c4fbd33a52b183a21d0bba1ffa3fe50fd11f75c6ac58ff60242012400cc4ddc24ddcd47a6d639a2abdef29a65d4fe9175f51b316f4bf918bc918879495c572f8e98364e2e1aa0d4d53ad29e803a4470d94dd06a982a1d041bf2b5dd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 276, + "comment" : "special case hash", + "msg" : "393838363036353435", + "sig" : "30818702413775a7e61bdda9a3a990ba9fde98f9d81d4b03195547bbd0658e1059daa00da9270671b2fada1bbbf13982f87c9f3f26dda5cd4f24de63bceb5fd9390163c58d260242010a03e4ba08f9e2b6915a6c0b83156b00f59efc5417394c51ca7616b58cf91ab7166d8459eb4eeb0d57146ed6560e173faf354b4390817e0aafb38294df25992cbd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 277, + "comment" : "special case hash", + "msg" : "32343739313135383435", + "sig" : "3081880242017ab00a30c88faeced3e4a10f9c63785bc29e9af4499466bd8880827cfa580b6171f4a20f36487f7b94592946bca4162faf65872af6bfb1919e6b026c14e51e2740024201927515f6489e9b7d9cbf61e103295857c8131320217e7a86d3f2fdcb350da5b42c2dbe173fcb025d14da239d7d610de8475914748573429c9590d3594f4fa3aab3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 278, + "comment" : "special case hash", + "msg" : "35303736383837333637", + "sig" : "30818602413b2ba1509aea9d42d400400033952a022fe7e00c7ad65c39a2f76d41130aada99c3cdfb9cf44575a2163de29f097beb9bd3aef9334e6fd0813dde2a087f938c5f602411afb56087dfd5cb4fff6679a114c340f3a59f6b3e1813373bf3ebe30cb5e8b285a5875d1b5a9120db80f70310201559f89bb1df147961d1ca4fcdb5e8e84cae082", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 279, + "comment" : "special case hash", + "msg" : "393838353036393637", + "sig" : "3081880242010efb321a347625343f5126ed8545017d799eb103c75558922eabe44211e8fd834655dc2ec5bee9bb3e44350eb6885e0ab974730222e55f13ad27c066722fecaa25024200d62e3d7ff9215369aa7da818db302e49033875010b2f9b73d25ca5b9bf2c62ed756686230cd5f4a37c1fa881c97e623919fab827de5995ab456a1fd7ac7b85b1f8", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 280, + "comment" : "special case hash", + "msg" : "32373231333036313331", + "sig" : "30818702412f778cd552f54da5f567f47e6979872ba130dc0890172bf3b3bb952f03c64bc8783abe9f056d60e1667780f5ea88f59ef33c735d540561a197d31fe34853a60a52024200bd2816f06372f2e3f2582d53e583e133a551aaec04ddc2fdb7b8131787e73e4295ac28a9604a2402ed5b272cc03be57dd4a7df84d9ee24cb0c2bf124ed927defee", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 281, + "comment" : "special case hash", + "msg" : "33323034313031363535", + "sig" : "3081880242012a459fffea70d3bfc13e9ea0abb10aae3910df604997cb5e4bb0548abd852abac6b9a32418c3b5ed4e7951ae88eecc0a2f1065caf24c6a814674e95682d9b493f2024200e2abd05c585e0c213a219a7e7d38b810d252ffea67650d4d1994a41c2ca325bb964920c6c2545381c45ca3e1eca05e00514b366cb0e1e49b8c236d383b260b9cbd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 282, + "comment" : "special case hash", + "msg" : "33313530363830393530", + "sig" : "3081870242010f2653d94aa28bcbd667a5013f9b283d8487c44d093ee47660329398caa550ca9c9388c7aadeceacac1507e76590afb736adb3583f54f31ae25c9c717ec9f89b5e0241494448a7ffe4a4eed84b4602781ecef77a23fed116b1b791b8d2e4231b7ca2a7b6f06d132705932d446e61d344714ee24014fa5bb144a96572b3d48d038a55ad68", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 283, + "comment" : "special case hash", + "msg" : "31373237343630313033", + "sig" : "308188024200c2da48552c39d94f5a45427ae9dcd891b65cca33e624ad2532ffa333666b241d873336fab7bbd7b4c193db4d865cd50f0c1d8cb5c14cf3f089ad42dd43cfff634e0242014f2070dcf860b96a45f2a6061e4ec2a6ad64d7d0e9fbdb25aa93b99941be280f5c70c0e32b6234df545bace7341af94c140c865d44fa8ea7ebe0fe53bda44645df", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 284, + "comment" : "special case hash", + "msg" : "3134353731343631323235", + "sig" : "3081880242009bc6e74549b48a1e7c181b179687fb27d6e9acac47ec34b1b8bd044d329320544e4e568e67d17f4cda2f0a3fe303d561a11fc0c981ed9be2fcc6d397a43ad49e10024200ff295e43fec5b68b00ce8044434bcd17af1ba04a74556353e258d017ba26bed67f458fad5dd8e7d2734d56f59928c2419441a9e8c0573db3586ca056951ca935e0", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 285, + "comment" : "special case hash", + "msg" : "34313739353136303930", + "sig" : "308187024120963638d0b058494254efce57778ac65e5f23491f7adfa72e4713b7c03946b543c014d9660d855246f308085eeee495cd831b7dbece47aea48e90433bd0fe818402420161a4f4977fecae92d4f67e56f3338c7a9b820b5e05db1f28d05d71f7e5f36bc63f6edda4d3c1b2d73bb8a30c4d745b73e634ef574cf47656a372e3eb42cc038850", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 286, + "comment" : "special case hash", + "msg" : "35383932373133303534", + "sig" : "308187024201bcc5858597ce8d4dc5ffa6be33f7d804f2f8ef59c5db9301785e0cceb7ed57462f455a465710c7414570c9a35a3100bd15fa40e3ec350d1f75406c2a25885e9d76024143757d282fd1d44c253f9a05d8142c29a6d63c0a1f5508431bc9fb9b60a38b7f414e730e0d59b7b709706a67022e1922fe88b182a57443c58bd06a69ee7814bcab", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 287, + "comment" : "special case hash", + "msg" : "33383936313832323937", + "sig" : "308188024201240120b97ea67bcbd0e412d87137a13e347a870a2249375fccf8c004da35e592620774160e7b82aed1f57997fb015a764d014d4be1f389e5499777054576e7bf000242019f157ec3a2410853274bc4d8e7565e9eaa5dc47d5e515abc86c22fa6dc215482df5c0e2b885f37baef3a6ae83daac930617a5fb37bb03ce40f06fa4ece26cbb11c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 288, + "comment" : "special case hash", + "msg" : "38323833333436373332", + "sig" : "308188024201a7536d55876f8392a6eba18f075118c273015844eb3536c727c004c1bf23067d57e8fe31872f8bf839640e80e06aba3c0a365a268cabc2da96d84550a569f17f9c024200e840b6a7cba718d91103faa134c2f63763f3b6b91db7ecbd3b10f10171a875712cb9384325411beca9a3aa87aaae3902c282d2dedaa1cbddd40ccf0d29975df22a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 289, + "comment" : "special case hash", + "msg" : "33333636393734383931", + "sig" : "3081880242013f72be1c331214f45007ff72ce54afce1c910a90e4ff3d176620ff3ca976c2b62d0cdf5d1134290ee97440715531455dc29818828094d366f959e1adc7d7e98ea4024201e80ac38ba69f3e53116e5432fbdb3b1e7ea1b43e5f86d1c0e3d1c469442dbb406ffe524f0685f71e811d94a9efa9ed38ccd9213f983983035f2add0b8f2fa4ae23", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 290, + "comment" : "special case hash", + "msg" : "32313939313533323239", + "sig" : "308188024201aceaa6d567ddb39ba52d297e60e4a814c9b476cab568c09d8ace878d846218dd2b5d2a2461f0d5a56c12f0bd803e3253dc5b387b94e86589cb1d0cb809c7071125024201b1fb021b10b593cf9e793cf22a88bde9a4b92f9e218094f270b093e8c6c95aced43d097bfa3354e6b98d195c599c2e6f13351c63c28967e08b7e497e120665c663", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 291, + "comment" : "special case hash", + "msg" : "35363030333136383232", + "sig" : "308188024200f6ffb5dd786326041e74564b719d38924a28329868177c13463cff90c4b09d3d2dbc011281cc78aa0e5e8656123bc50605601a547bb4b1761f852a120ea46df9df024201a407fdd445614a16a5ebd4ba075c6c1d7564f3cfd477d6b2620abf18a5bf78311282ea45b9bff813f24c3c7854e6091c8055144f9592fbf2e456421a41c555d7a9", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 292, + "comment" : "special case hash", + "msg" : "383639363531363935", + "sig" : "308187024201a15af4d5ca3deadecd75ec1baec31c8d43fbc889466475e6c23106db4e63ab69003f56d819ddfc5a673c8289f9e6df806b07af57a2541af694e6489734c8eec837024169c35433a3217fcd738a65b7da9e81cd81f04f0ef060050b9c843e9e808d8b8175f3adaefa105d215ea9a46bf415fe2ac180958fcdd878d54f8d19d23e11b76d1a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 293, + "comment" : "special case hash", + "msg" : "36353833393236333732", + "sig" : "308188024200ba899f94841db6c33b850867c8906b436be3853640dbfc863197fa1e5a55ce25240f2be498b9bdcfc0a89dbdca192d8f84ca3c44e5e0ee6f83e7900e085e1bd48102420086e6d558de8d8f014a85cb4a5f6908627e7a1acd70581d9d9c7d14df44d437aa09e5a10a0b760e98d46731f2512ca1b0240c602b5f0a2030485e34de9c6cd08e7e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 294, + "comment" : "special case hash", + "msg" : "3133323035303135373235", + "sig" : "3081880242008eb5c92dbf5e00888b85e6bf6617017e97c04ae950dd731856b9dfb20e0c0e5c54284f411231fed1d071b321f78618d2a75c139663fb9db3435214cbac5a0dcb4f024201da0dd29d4728fe6331c8e2ade5045b1237664aed157db2a6cbdeaf5abea81324e28920a1c49c334b1226441f88e1a7f2c7e01d63e950d4378f08973db16b2e6161", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 295, + "comment" : "special case hash", + "msg" : "35303835333330373931", + "sig" : "30818802420130779f943df098ddb5315cdca4b731c83472d589f4ba4d32c172faf6b3a9e4154c0517fcc5c432eb269b0152297f6df490ece59496bea8047e2f32d0b5f91e85ef024200c9eb0b56273114ce2e553341247da86b813bfd65f143a5562bb1c874ff970523836bcdf390dc196e67dd75cd28112ef74afd51b1fb35333be0505a012efebd4e22", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 296, + "comment" : "special case hash", + "msg" : "37383636383133313139", + "sig" : "3081870241593f0132f7b5c282355978a2cba73fd3bd5ce3272066d4ad9bd8bd8b3e2be0990071b3509ea445dd155cf97e294e2b8d1355809d880e10700eeab0eb8ebbaa4f0902420107eb3d5ed75cbb9bcb9278f2266c14c57cf703cbd8f7c7de45c51f0f3baf1dff6bb92f1cbf89ba649677bcdca776fc57f587ce714e2e43e6cc523f0d0a286d38fb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 297, + "comment" : "special case hash", + "msg" : "32303832353339343239", + "sig" : "3081880242016ded17fad10f945e3d953b4fd3b72898c370f15164bb7712673385c10bf3929bea293e08bfc30029a465138ad47abe604df807b31707fef55adf3e104920038e3b024200b76b212d74e4b6eb994d926e9e796975235fad90e339a21a329e6eed3fe96b6d3c0d5426e8464c4a9ed5cbe08eeb5e490f72e9e0406c0d76ad076b476d07c0144a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 298, + "comment" : "special case hash", + "msg" : "3130303635393536363937", + "sig" : "308187024201f8624ffa5a6aa8d9d04ed1c2272ea55f5271ca2cfc9aa6a3778a0b8a230f611e5d65af18d8251a0cc4ace663878c33205239ee7e8388cc0a040ea51515072e3f6102412c1e61197229f40e840ea37325f3bd87a6cd32d080bd61bbde4b072cf7a0c8a89d402cd9235c26f19a084ddceb1cc0bae4006251ccbe10de3954e85a8c5efaf6cc", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 299, + "comment" : "special case hash", + "msg" : "33303234313831363034", + "sig" : "3081880242012b01c6601ceca9e58e8abb85d1f6663df70cee761a756b77e45294f09ae609a6b76cfcd67f60e47a3494cb85511e33d92a8d297a1b89e9a9038c0c5b78c3a3d4ca0242010ef5d2fab59bd42e2e92a2fca7a975b959dfb372519330defc8fa8954bfcfb397ba939edb6a944a2ce9f6fafbfcda6092cddf628801f6dd8cd40cad4d809d5c1bf", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 300, + "comment" : "special case hash", + "msg" : "37373637383532383734", + "sig" : "308188024201c54a330b9dc47eb88dbf60c9ee49f2c7518c0a78baf642c74105fe283fa4c357ff22931ef42f92d16d6a0b806ef718539d21cad71955a530e21cab49a56f561673024201c2cc32c5a4d335c48d0cbb0407fb7e4729c57251afbf9534c5309b94e6aae13614a1f2514252f48cc7f143ee761782f8dcebf2fb490e08fdeaf570a7ed9d287da2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 301, + "comment" : "special case hash", + "msg" : "353434313939393734", + "sig" : "308188024201467b4511b9d6601da3557b8ed432c14a80e5999847be136c756a88dd5134689b5ab70d0a2e8fd8d6141e2b143282f98afb93b7e17609522dd9e64c9e4a31c7c34f024200f50ee66a1dfbf86167ba5968d4ee3506a7cffe0f521c1bf830d0867241e345d319e77eeca45858bb3062acbf8d100bc6bfd3127d57a7e91a8199e05052b8ccf304", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 302, + "comment" : "special case hash", + "msg" : "35383433343830333931", + "sig" : "30818602417af90f6227750f917d65b1c60200c755158bb783a479be6877c59ed89ff595fea3f3a4137591aab23826ed385bd6156277364b5d603ca272259083e6e9ab5db3f9024170842eb62c894935b82da15ca611d9d754ef57859e0c912c0358d0820f4940cdf5360f116a7547a81bf65617f182e597eb1007e26c62838487ca021c3829a590db", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 303, + "comment" : "special case hash", + "msg" : "373138383932363239", + "sig" : "308188024200b0169e68062caa79f99ec0c72d83c4d0fc2a1c818665cfed1aba3e684392b9a95afb82ddd1de49e3fc3cb3889b4f5a86a7bdf944361db2cfa57021a7643fcfce9502420115ec784e042436892c6cc1bede0f4b7b6eb24b300b1f0c674999a6da816dbefb2d53f90b0dedb962a085e5209fcea50311130800d2a9249d279c7bde2f88622512", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 304, + "comment" : "special case hash", + "msg" : "31373433323233343433", + "sig" : "308188024201de4ed1ee81d5cffcf8256a06858cba5eb925ee68e3ed848ac98071b6e30c3b44b102a2de8117cce5b4f9e42603225e0dbcb3fcc171d1492e7ed8bcb6ec286c7de0024200fd1e93bbc8b8adeb7864a2bf8e29d6f9c0966fe3d543525bf268b57cd6fa8852bfe0d2750726d5445560f2fc211aa7859dd3ee10078ef907e49cd64326b397e01c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 305, + "comment" : "special case hash", + "msg" : "32343036303035393336", + "sig" : "308188024201fcafa62ee6275443d7277fc46e4c30b4db845ba45b5d6b54faf47bbf921f825f6fd0f23a38c0c7f4debc33add282afad1154c8707b6e18cd65adcb07d32915b46202420087a27b2bf3c35d18fd397e0cd7159516cf563b98441e030bfde93ceacd2c4e41228b7b33443ef0a351ce553d6d1d71c12092df796276175cd779b8090c4958b391", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 306, + "comment" : "special case hash", + "msg" : "31363134303336393838", + "sig" : "308187024178989628acfba86d4bf28beeb9f44001fb8f2d8e245320a19efdede31eae3ec8b496faec30c85e8f63f8ae06046fe1d1575321fa04953e460f6b1386dd5df94edb0242012aba3349732e21a5bb27d7d6facd8c7688b9d0d0271d6a077f9d6d82db45b5456b767f4b9f1a80f487031f9c0b3ea833c63fdf9c6a25e6b424c19c2e55305d7a0f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 307, + "comment" : "special case hash", + "msg" : "32303935343235363835", + "sig" : "308187024114a5a46a3ba415f6e8c566ca1b15fa2055649687b1a9fc84cc0fa8631296898fe014e0d45927e4271396baa4cfb3675669b16e76c339db3c0edaf61337e8bebe91024201fb313129757f76754b60fdb1e4077f9fe3dd62c8bce52190cfeb9c03021cc92f6d7d1302b8a84733486bf769ae94d3db4b60b6df28fed481d3d7c510299f0c319f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 308, + "comment" : "special case hash", + "msg" : "31303038303938393833", + "sig" : "3081870242008a3250eb5f28b598c4a42890d25f6af84082d4376f84f1717e5112a76623e6fe0d207c39463d20bb86341bc26c9f68bcdf794671a01f90465025f87a8c52137edf02411ddd317f6622d9b032223f76765ba6c9116ae4b43a1bd357bc9db6fa62f0867dc5d8f781f08c1cbd49b4424fe8c22cfd1dcd07cfde7b3598342442589825aa67f7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 309, + "comment" : "special case hash", + "msg" : "31353734313437393237", + "sig" : "308187024160ee161741d5cb2dd0ff2cf9924aca0376b1544681627a31688e4d8b3b63a01adbb417ee113b9ba8d4d13b7b4e1b14b51a24dbc3f099b068d916aa94862ee081b40242015caff8d30141e1c163e3ec62b7e14874da624a6d8e0252d8e829860e5a49d3732321b625262e5c9b1ef348c3e7cbb1de8227513f320637866785e97e1931d35ccb", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 310, + "comment" : "special case hash", + "msg" : "32383636373731353232", + "sig" : "308188024200a1ef8229db9f45da38ae3b6d601110611e209878bbd03ac2a6de65e8402957c669a115e3f02d085fe2d031c61324b77052ab346b4b1a437b58062fb36f9d56cf45024200cc5c0a3b68970279ae16880f6ca579d0171a827e99a46aa82b9242dcc09cb0b22a44ebcfca84293e6d21aeea492f00ba3157c5b6e2e4caea6a1c09c824720552f2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 311, + "comment" : "special case hash", + "msg" : "31363934323830373837", + "sig" : "30818702415aa0c8a378c4e02bcc2f56c2c365ccee424e2973c28f0daae8f4c3f0d90b421fefd456e749087e0c667c2a7147bc67b90c696244f216b4d9d7418eadc7d06ef1d2024201e28914bd341f526b041128f2d251131d8b2c65847e541d65adca3442962cddb2a71c64fae39fdd56e41686ad632f99c6038d8de0b3aac4045e0a961efdbf4c6a22", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 312, + "comment" : "special case hash", + "msg" : "39393231363932353638", + "sig" : "30818702415a05f5366c8b8be28654bc39a6671d1b1593495e445c07c995c3be3e168ffdec92e44288802fd455007f8746570d93b5683e4d40e9d9e59de539f0e62bc40d92bc02420187a47d8f70adcc5e10267b8fec89d7011d9985427645aed19a8efa2d1189b469cb7aab1998e0c1d2fcac5a5054d79d2ec1c9a00b183dc9af20f555a1140be2dcef", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 313, + "comment" : "special case hash", + "msg" : "3131363039343339373938", + "sig" : "308187024201e213bcb8b960b1296ae176993b2449bae556b6d90df2f07fb08ad8fd60e3b7fe6c73f9c8a7364417611d60119c550261c54bbca8d61e264130ab90187e27d22dbd024134f519382cfacfd07b0a6f3aca117c13d2be725d2f9ee4e5f88739c99121e63ed7358046bfb1575fc73e1ede8339e46c5139843e52e9184bb8c579061a154a0b8f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 314, + "comment" : "special case hash", + "msg" : "37313836313632313030", + "sig" : "308188024200ed11ac7efb1f29ee64108a5e2606fa9af3bbc12d1a952e47240d5236df64f5b2b77a0f7a0a73d30d0708b5b23ac6d584bf6997d8851623793655dee8774549b829024201e1602a2cae7d3212df47eebd12e2fe404851201101bbde702be9d74d040ed998e79a09ebf6d055f94473b1f8d87c99aa165bdaf0a5f270d46caabb8e88bfa54103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 315, + "comment" : "special case hash", + "msg" : "33323934333437313737", + "sig" : "308187024107123c45e6e9338bc9fe225cdd96c5ab36cad5c06163f44f6bd903c7594e8068ba9bc89f652ec31b6e1298766b246c1f10877f1e3ec9829b0937b8d36e3c1ab2b5024201688bbaeb188b5047be6e8023b14fb121eb1451dcb19f814f5f4dca55ff95128011e3bae505a4d22166d00cb7cf14130590335ee923dc5db3e736832a128a067aa4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 316, + "comment" : "special case hash", + "msg" : "3138353134343535313230", + "sig" : "308187024201264e3cc4fb802aa221d0787cd0cdf44eb6568982a00a6639f15238af36e894b14f45f06f8c2180fdeaaac77f674e056d1928cbbdfc4b2ceca0b35345ca07bfff7f02415c2dedee6b3aa096fc47ba0991a077ef4d5df20d8eff1bf8354412b171f08a98cea1704c8189a7951b0e7a8270ccb285b8db8e35285ed926b19c1eef07fdc05ee5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 317, + "comment" : "special case hash", + "msg" : "343736303433393330", + "sig" : "308188024200ca3814747888751794b0488955e2aee07e5fab4b9872074aa7432698e7c83b8079773734df1bc752548a218fa59a362e0657b77ae7798ef4a7a3873256ea59ec670242015df8f1f16611c960d56647424b97936c8a06f62dc3a95d66bf4aa378d7a9e17d2afb53565780025927e6928f5313428f1d6708339787c8f460ba18457d4c0f521f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 318, + "comment" : "special case hash", + "msg" : "32353637333738373431", + "sig" : "3081870242017ba871aee34a893c4ded7a2a546da0d6867d428497b80fca7eea6e51b73d6411aff7609743e6242b6d4d3736ddcc9ee1aa12c8b62de5382e5c33d1fc4853e3e47d02415feb9d9f8fdd44622e4f9effe73fd9b467d355fd6b8de205527f722ee2f5a15eebd59ccdd7b57da26cf953f78886db5a6e5bdd0d56c9bd47ba2271f77687a64b63", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 319, + "comment" : "special case hash", + "msg" : "35373339393334393935", + "sig" : "308188024201840793684765410baf26b66cbcf7c36658d6c18a2f750c1225520e9f3a7c1b890583f321d4e48752c3b3116dfef733ee386c52a53402acea77cfad1db9380110e6024201b51985a306fcdbe3692181106d7d6308873912d003946992098bc98b4261fd78869ed8218849459780b6079f6899a47fcb9ea4874d1c08fab82c6f1e9c9aaae245", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 320, + "comment" : "special case hash", + "msg" : "33343738333636313339", + "sig" : "3081870242012276720b2725ba556d06be39cd16ca0a0351d8f530913c4f0cfb71fdda74b83f02febddc8da0a1f0f910d37d3f5332c027d7bd4c38fd08ebc770bf1252078649540241637e70b06045a86e2f329f907e079a785d7f8649541860322fb8b64b9736363f90156b9a5532d808cf2af33b87ff970c02e648dc4f1c90ff0704028ec2c2d9a82d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 321, + "comment" : "special case hash", + "msg" : "363439303532363032", + "sig" : "30818702417aade608b22c77245734fc5c4be8737ba24dc2ed4321b58124ae46a77ea7befaa5bcf166cb966aad007911623af10925a324bc3c6d06f24d0e2e7b2c7b8468b8ee024201e9913a412300b3980719148de0bb03826184aabd58f19659aa8ca18045f36c73c97df3d12b921de510ffa96ceac5454b801c86c55a06b2d771fa77bca784332c39", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 322, + "comment" : "special case hash", + "msg" : "34373633383837343936", + "sig" : "308187024201eefc7b6c1468ffa7d60b8408bd44c64a3ffaff298168c5016c6f504031867ea14ae48c661b8124418b4ed6ccc32df6bac6d0a485b1990236e15676268b7868d2760241515d48436afffdb65caed737116a861974b734bd1903e37dbbc231a9db37464ed762e364cac8b32f1546d6de37979fa05f8b80159a0f747d9470291af6569d6d94", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 323, + "comment" : "special case hash", + "msg" : "353739303230303830", + "sig" : "308188024201271b912ca055040c227955df729757654aa9bbdb73c61ba14155220e4e7132319f6fb0ee94f2fbe160738f1dce2ad690845c38d962db4fda1598e93270da84a2bb024200b8907f041c3b19b9234ab555d0b48325b0cd330889a53276a1e913bab892b9c05cfa889005b14ee2730220746aecf12af911c5baea4be377ee76c0eeaf47b7a712", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 324, + "comment" : "special case hash", + "msg" : "35333434373837383438", + "sig" : "3081880242016a813db0f75f9047fb11f3e19fc1688c29328a54f56ae30c1c9d9378537bfc40c5719d084e49a3b4aea255f5b7f6cc775492b5371e6b67b2d6abd5743e10fac709024201c258ffd830151bfd41ccdabb86b24af846612788b361c196d24e997ccf3f17d4452f63d32851a483072e6908095e5c49bbc241a0417749b097bc1ca0e4d127779b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 325, + "comment" : "special case hash", + "msg" : "3139323636343130393230", + "sig" : "3081870241156a04c22ea5bdb7871124f1117301d781113ac4c9d4da05fea536e983d9261d25dc97006f8c78de23c788718557cf6f98863994af2086f0be3e8aa8812dc3a11d024200ffca96b04c56a4a6ce5d22b36e44d3b974d520e7f7c0f9d69034f9e59e0bbdc43236b3e4bfb0f6bde8802cc5cd6022cff166f4c488d64f38d44e3c563da31cf6fe", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 326, + "comment" : "special case hash", + "msg" : "33373033393135373035", + "sig" : "3081880242010913540ad73ceef7314d1758264e1d1525a371a7b9b3086971599a6b749be4d6ba69269b089508f6500dd925aa89a7c7cb7185e0cca7d2ee5664f22845d961e31702420135256c79ea5e5768fb3a55e2899b12219b8f68953ccd98c710b6a13de0f59786f4331845e65c7dd6340023a5e280206ca31416058f395fff4bb5de411ff66fc018", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 327, + "comment" : "special case hash", + "msg" : "3831353435373730", + "sig" : "308188024201b5051ca0dd3b20df7d8c5b92cb42b8a204f92fb4e58c612f43d3800de8c0683c427e832ce622156747052b81bfbf6ed5fa177b6d47858ec8478f6c9ca7948fd511024201fe5710fac0e9d3e2b3b83081b28b194b822d0c13397bf1516140cbe3faa52e908848f69789a741b9cd54d703a94577fa813e2f2c75834807401ca010fde5328317", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 328, + "comment" : "special case hash", + "msg" : "313935353330333737", + "sig" : "3081870242008d3c8f8e7ab74d49e16a4c7db3a393fa9567777e373313667f9ce32b1b5e648debffedfd2ff5345ca1b8154c18c8b883957d911e41336285f86261c3ee225fdedd02413c51b84c2c9a3feb76a6518634b6f09c0dde8a9d08dec0b3d66135cc1bdb0a80fd69636104af69de8f4062646b29fa3af685ec82704cef706a18c59ca7eca0fb56", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 329, + "comment" : "special case hash", + "msg" : "31323637383130393033", + "sig" : "308187024201195625a64ac11c4fc1fc479ef80430eb85c1af77f8a197a17e009569ef6c41ac6f35850755379f478d8928b154e3baaa29e92b481ac04dc72f3728b4f088ff37dc02410d55c7067877dd1302fdc6bb69b7b7c024e4cf3a0e924102d744ac52366d9d76d5855d3da228c4b67bc7bc4b2a14e7999962cc9bbdc517fc24a823abf584b8f56e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 330, + "comment" : "special case hash", + "msg" : "3131313830373230383135", + "sig" : "308187024126eb68bc0fb7664c35bf5762cd532dce33b0e396e97d6f4143dc6e1e766c836e27c069da9ea1e74e0b03d030cf8a81490508c1c728f86e59282df94de8d8a0dcaf024200a9fb584b712986f19ab7568693df278cafa43272dba400ff333cf48b5556e6e78353a665605c70b6fd0f18f30b850e1a47cda42c4c924bca80102e6793be9a8698", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 331, + "comment" : "special case hash", + "msg" : "38333831383639323930", + "sig" : "308188024200f3d34e36f9754dfa8eafab160ca96d91c7f4f388ec82ac33784026bb6c6a035719eaeec3ee511fffb22dd5d6ab819e6c6387192d6c3a6e9249ead565157e323f62024201b5786b1d662d26fe9f69c370d2bc18882abef693c8f17100a02725de7c9f03602fd53a9208b573b3b7b0b66db971767bde835f9e8f42ada201e7b7391b86fe0294", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 332, + "comment" : "special case hash", + "msg" : "33313331323837323737", + "sig" : "308188024200e69c833b604075e9b28a2ff73a56a32e1a247ef9ae01e7a0e471f6015c2b86eb864c281c8c93d2acf5653ad05bafab2f58027f37513eb8569f50bd475e770e9a81024200b9c9d6ce09b53025bfcaa7d172ae41a9b636aa4b80a930931fc99e5e2aa23306f19dc57399b0431e72440a1f4ec7d5ca902f0f7b81c91de85e469f992fdfd4c52e", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 333, + "comment" : "special case hash", + "msg" : "3134333331393236353338", + "sig" : "308188024201c6b8b5cf3c4dd3d62391f18e97eef3aa6ace0ae2c6fc97a561cb8e49c087dbcf8135fa433b566b3385cb57202f1b12164fe62765ef73b72a94e7a57870989a498102420185944434b83a0d0fb4bcdce8ddaadb30a1e440815e7674562df9c8bf711222208cc346b9665d90abedb437912391505dd5d26f0178e7c063790f5518f47d1b05c7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 334, + "comment" : "special case hash", + "msg" : "333434393038323336", + "sig" : "3081880242009f351a41d5375b8993e90b8d8a65bf01d52d14aba1dbe49cbb4ea823804f2b533e0c167903c8bbc593297c18f309798a544787d598074cbf56ef0e5022520912ad024201b892740a57204186bd5f434f72d1534b4289f8f7114cb7b1c9cf4541d754f314448cc32deaf35608263488fdc7596f7481ec098b36f8e440829194becc746c77f5", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 335, + "comment" : "special case hash", + "msg" : "36383239383335393239", + "sig" : "308187024201fe24ea831199e31cc68ef23980c4babd3773040870af8823a19708bd0229adc1ce99d02e4d95224101e3e974236f54df86051fa1e9fd21380432633b2495ab782a02410efd1f2a281f967e7b09d721581356a714c499f9b14f781992eb9ae7a19f6825045fdc6d9d763f44e1e7c91480a678a1d8ecf6d66e76cea3505f65ff78cff15cbd", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 336, + "comment" : "special case hash", + "msg" : "33343435313538303233", + "sig" : "3081870242014c6ee9de0a2a0b60c981831e0acd6636b46ae134fedce61b0488112663b24e1d7e74e227fea883d26b68f21e4135ba0e2069bbe0d9c6433c3908fd5b00182894b002416a180a493182c6bc2a09d7e17ff5d62015293f1e8ae205a16fa09042b0a9af6794cb377f4b8b1175fcee5137c234900f735c484feb7da4cbb405cf9e5370fe4f49", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 337, + "comment" : "special case hash", + "msg" : "3132363937393837363434", + "sig" : "308188024201044a45853ada17ca761acc7df6d1d380252cb0fa66124d9278a5ed8a4a60453bc71de1dbe32b0261165948823c461c7c1eb1714ec1dbf66fd602c7a47446d1dae1024200f8b27f7c71e37e4b440d2c86f1c1d50bf7c53d3878ed27e7bcfbeb902f769f86d6c3e8820b99f890050f0dbebd2132e84626c5b16a8c7ffffc3a30ace69dd15a11", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 338, + "comment" : "special case hash", + "msg" : "333939323432353533", + "sig" : "3081870241676a381b18d05207cddd73b44e4dd71449985c0fa7de1fff43ca5155139a1a09e5e3fd754d86ebbe32f6609f6e906d48d24790e494343c61faa90bfdaa4f49fdc7024200fbc1c891bf6e368fccad51cc9b2c29e8e92b658e88c0d23285af269aff6702a55a0ab16807e5523b6637bbb004727f6f55c51ad4cec8c924f9c1feb24601aeddef", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 339, + "comment" : "special case hash", + "msg" : "31363031393737393737", + "sig" : "3081880242013c9a575382ff6881c908fb5184be7baf38edb0b06008592558efd57dd8fb9993c893800a6ac8c6d2e34ebfbeff43e63263f133868d0ac7a838f69aff26d60a38490242009d22ae7bca8a75a53214c3eece437fb28e05b076ec704d751a28a7ed7e529d5c5338be8c724afa547574a17f70510b2462748a53678e39752a688dc8cf39e886c2", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 340, + "comment" : "special case hash", + "msg" : "3130383738373535313435", + "sig" : "308188024201071ce5a19a09aacd43c7cacd58a439dcca4e85f94ea1d48a60f298ee01bb3eeb11d5daf545e7086486f8e4b518a15be69620ab920cf95c5c15ff178c903124fac3024201ad6eaeedece9a7592bd21508b2720f1b8c4bf55637b1e8a5ce5359775b980b21eb1d33e8ebf5c0b3d7829152a295b8a9a1343c25350e35f709936accc8ce08b0b1", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 341, + "comment" : "special case hash", + "msg" : "37303034323532393939", + "sig" : "308188024201bdae499160f4cc6cd163cf110bb1f9b421e8786a8ef9297e4b98fd508a1d14c50617c8d1a3de94fc8bd6c38055e4906b20fdcab6ef7bf9e7e5c98ef3e83e38ec3b024201ba867b8ee72bb7304ff83fc2d734749447420791d5609e0515de4e05fa70a83385a853cac6c47a075c8c61e4b65b9774574101cf4e081770f83ae1b7e727010ba3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 342, + "comment" : "special case hash", + "msg" : "31353635333235323833", + "sig" : "3081860240269fc7ed89e554aa52b3875dc00bc140c1937d4f1b32e29da41ff241cdb9bd3058fc148f905982b8717b035e0db00ded7ebcb08572ec76bf0128411145d73091024201b4bd6bc4ba7befd5c305e018448a771b71fa1a11b3a2c6185dd6b8477c35eaeb4733fecd90f38ecba628f27c02f809191e993e1e7ff590383e2ec2afd08020b267", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 343, + "comment" : "special case hash", + "msg" : "3233383236333432333530", + "sig" : "308188024201a5cecc0e572f5ee4eed6755d3230ec5a933c1fb0e35ae771a1fcf0dc880e1c159dd5b6d192dc377505048b7188de3feb815a81a4f30d9226cdc85f751dec1a0410024201ef4a743e1e16f0a60201cc1060625ede6f0936e7af90b42736281e89fe7f2de6aa3f25c68576da705d8b3f6d5d8a34d3073307ea198d1cc8d72a18ef25e90f31af", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 344, + "comment" : "special case hash", + "msg" : "31343437383437303635", + "sig" : "308188024201a92b43f57421e54d2528d305e7d5aac9a708e75a7d6fedb47908a4e3edcabdd836a2c4e8436f3b7b64895254536174d88c6dca143699522bc2dfdeebcbf38eb90502420093b0b99a89de72aca0c03e12724c2be323577a4629cb47fdda5b12b61ace0b9fdb97549d3d2a1dac15da66ba6389ee54cbc82c995b9f3aa3ae8474f4bb4b52da8a", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 345, + "comment" : "special case hash", + "msg" : "3134323630323035353434", + "sig" : "308188024200a0400f255174ffb8548c29f5faa70e806bb6f6ca08a08753c85c5d145a555cc8e2df285af9985f2e729d4a99a734b7e7fc95560d546a067fda03529f56b2fe66bc024200d7fb60271d22ecb5d8ec904a9df1a416be706ce539e34650b8fc514d1dd7afebc1344c0c68c533c5b20ee249a77c075293b2d7efc8731c2e3619be59da871bb083", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 346, + "comment" : "special case hash", + "msg" : "31393933383335323835", + "sig" : "3081880242019207c7b645aa45c2722331f46e094f2eb0052075b8ac9414ad77baafd01d4d1fdc68344136fbce01edfa5627bfb8f3c128abb61072c74802192e89137c68d0cc31024200ff15b0218f81f0a848742f683cb4d1b7c517efdb8fcf8ac6a35e4971b35536851ed68de40a6e1a4a23bddb5b42efca23b91e91959a4f7e2afa196779c96c6c654c", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 347, + "comment" : "special case hash", + "msg" : "34323932313533353233", + "sig" : "308188024200aaf119702b9985354bbe3f6b6cda8c46151af4202546dfbe04d5f0ffd18ebe7b29d616f1c40376a412a52f4204b5a13e7f3e4304ead566fc41bf4b5fc0b84c8a2d024200d599deafd4fa2368cd072b854a3d53425d06adf3573e886b81248a7328a546ddc41caed38c6b1ffeaec9a98c940905cbffa87b936da980d4a9003da41e0c59c92f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 348, + "comment" : "special case hash", + "msg" : "34343539393031343936", + "sig" : "30818702416c09a59e71cf34f983f75dbb4724c4828a93021cee8fd7d92af6941ca8efc9c5ddda7c49a0e1777225782e09313e3091f056122e585c4eaa689fb2fdb1cb7848d80242019f0c5ff6b4638f4c33916db76f9d078bfa8f9e25ae00348e46bb32d777aa26155b82ea73a9e4e2f21f6a65c73ed6c6ab2101cef3524d45b9fc6ea1292f1986acad", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 349, + "comment" : "special case hash", + "msg" : "31333933393731313731", + "sig" : "3081880242014e791c42f3998458c5e17f895d25c85cb419195d65e5a0b9a42cf13ddd36959c73460f54aa840d2254355c6ac626f440cb3a84fba632262c9dc5cab31be7da106b024200abb97b682f01f45168403613a7e2ff82bb4a9fc20952a35d935428f71ddcc799c6d9085fe3230d72261d73cd082e8108523da7ba0b1691ad6ea63f5f4e8e8909f4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 350, + "comment" : "special case hash", + "msg" : "32333930363936343935", + "sig" : "3081880242013ded35ddff2f97780bbc60b8cec89855a35183a48f8fa6bbdc183994bf89021118cc019629df72112b2c529c023e7a5cfce253f7fdb49105d238680b64275a213c0242009c92e7a0f71608e8d8cfab3f850f7fda1a1a1d056e72254469afe5ceec3c718e6a462e1346941eb08c105501647502c1a810a29df8b208da6a5b296b2bd1e98137", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 351, + "comment" : "special case hash", + "msg" : "3131343436303536323634", + "sig" : "308188024201d0d29756ebff02b71674fa4eae37557ccd51a036fb1eb0b7121b405e7fabd60592927d805b75815af1bca6e9d6c5484225bdd0ec7a40735da972fd5ff645d86f1d0242008b9fe55357dc118070cf898973a64e7554b734e900c675541e20332a260ca51a23248d9b8f47ded811cfce556a06a71ba5dc5b873075f264a6843e675caf06a534", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 352, + "comment" : "special case hash", + "msg" : "363835303034373530", + "sig" : "30818802420165fb993f39d350ed60c8483dd6e4e6736591dea974ecd8ab027d3839b752322ee220d40bb6fc0b0d5a8c42928bde50f659b18f51f42fb2b1aa4583892a9114a0c3024200a8816c09d47138bf662da4ba25caf44e24185696d4914a7de2b2535f73b9afbd3ffa9cb0a86a115e4d9ac5be48cf7e8fe276466abdf17127bcc7aaf4d096008ca4", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 353, + "comment" : "special case hash", + "msg" : "3232323035333630363139", + "sig" : "30818702410b901c88ea699e715f6db864e23a676e7f7f2415ac1f850f2dde1ad0d3f9c92e8c5de66d45174d619955fae4b0dfebe49c583506481d28d30cbf58e2ac49f370c202420144c97b688b9ecc07b84c68095267e17e48232922756609e9859d18d2eb7844ec925150c39f2b3a255c882be705e0a8e30e68e49fe7914dbcc3ccfbc1d467050f80", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 354, + "comment" : "special case hash", + "msg" : "36323135363635313234", + "sig" : "308188024200abbd9e77ef1e2a36c6b06f063d93effb8e852387a94bfdf8359b5c18708f90d9f4e9749fd45347f637546b08733789c988fda4f0309551bde813a0bb1a232adee102420191165d58d153fec68f5cc83bcf5891e2e0ca9681204876e872453e9ebd45870b6878ee437e4d833c6ec54337b779acbf9f8202df510d269a710d0c43e4e07b040d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0400491cd6c5f93b7414d6d45cfe3d264bd077fc4427a4b0afede76cac537a7ca5ee2c44564258260f7691b81fdfecebfd03ba672277875c5b311ea920e74fb3978af50144a353a251b4297894161bae12d16a89c33b719f904cfccc277df78cea5379198642fd549df919904dc0cf3662eeab01ef11b8e3cb49b51b853d98f042600c0997", + "wx" : "491cd6c5f93b7414d6d45cfe3d264bd077fc4427a4b0afede76cac537a7ca5ee2c44564258260f7691b81fdfecebfd03ba672277875c5b311ea920e74fb3978af5", + "wy" : "0144a353a251b4297894161bae12d16a89c33b719f904cfccc277df78cea5379198642fd549df919904dc0cf3662eeab01ef11b8e3cb49b51b853d98f042600c0997" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400491cd6c5f93b7414d6d45cfe3d264bd077fc4427a4b0afede76cac537a7ca5ee2c44564258260f7691b81fdfecebfd03ba672277875c5b311ea920e74fb3978af50144a353a251b4297894161bae12d16a89c33b719f904cfccc277df78cea5379198642fd549df919904dc0cf3662eeab01ef11b8e3cb49b51b853d98f042600c0997", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQASRzWxfk7dBTW1Fz+PSZL0Hf8RCek\nsK/t52ysU3p8pe4sRFZCWCYPdpG4H9/s6/0Dumcid4dcWzEeqSDnT7OXivUBRKNT\nolG0KXiUFhuuEtFqicM7cZ+QTPzMJ333jOpTeRmGQv1UnfkZkE3AzzZi7qsB7xG4\n48tJtRuFPZjwQmAMCZc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 355, + "comment" : "k*G has a large x-coordinate", + "msg" : "313233343030", + "sig" : "3067022105ae79787c40d069948033feb708f65a2fc44a36477663b851449048e16ec79bf5024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 356, + "comment" : "r too large", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04015f281dcdc976641ce024dca1eac8ddd7f949e3290d3b2de11c4873f3676a06ff9f704c24813bd8d63528b2e813f78b869ff38112527e79b383a3bd527badb929ff01502e4cc7032d3ec35b0f8d05409438a86966d623f7a2f432bf712f76dc6345405dfcfcdc36d477831d38eec64ede7f4d39aa91bffcc56ec4241cb06735b2809fbe", + "wx" : "015f281dcdc976641ce024dca1eac8ddd7f949e3290d3b2de11c4873f3676a06ff9f704c24813bd8d63528b2e813f78b869ff38112527e79b383a3bd527badb929ff", + "wy" : "01502e4cc7032d3ec35b0f8d05409438a86966d623f7a2f432bf712f76dc6345405dfcfcdc36d477831d38eec64ede7f4d39aa91bffcc56ec4241cb06735b2809fbe" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004015f281dcdc976641ce024dca1eac8ddd7f949e3290d3b2de11c4873f3676a06ff9f704c24813bd8d63528b2e813f78b869ff38112527e79b383a3bd527badb929ff01502e4cc7032d3ec35b0f8d05409438a86966d623f7a2f432bf712f76dc6345405dfcfcdc36d477831d38eec64ede7f4d39aa91bffcc56ec4241cb06735b2809fbe", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBXygdzcl2ZBzgJNyh6sjd1/lJ4ykN\nOy3hHEhz82dqBv+fcEwkgTvY1jUosugT94uGn/OBElJ+ebODo71Se625Kf8BUC5M\nxwMtPsNbD40FQJQ4qGlm1iP3ovQyv3EvdtxjRUBd/PzcNtR3gx047sZO3n9NOaqR\nv/zFbsQkHLBnNbKAn74=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 357, + "comment" : "r,s are large", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386407024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e91386406", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0400336d5d08fe75c50946e6dddd36c550bb054d9925c8f254cfe1c3388f720b1d6500a90412b020b3db592b92ab9f68f1c693b8d1365371635e21bc43eaadf89e4e7401d48d60319dfd06f935fc46488c229b611eecd038804ae9f681a078dde8ed8f8e20ad9504bcf3c24a0b566b1e85b2d3ed0a1273292ff5f87bae5b3c87857e67ed81", + "wx" : "336d5d08fe75c50946e6dddd36c550bb054d9925c8f254cfe1c3388f720b1d6500a90412b020b3db592b92ab9f68f1c693b8d1365371635e21bc43eaadf89e4e74", + "wy" : "01d48d60319dfd06f935fc46488c229b611eecd038804ae9f681a078dde8ed8f8e20ad9504bcf3c24a0b566b1e85b2d3ed0a1273292ff5f87bae5b3c87857e67ed81" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400336d5d08fe75c50946e6dddd36c550bb054d9925c8f254cfe1c3388f720b1d6500a90412b020b3db592b92ab9f68f1c693b8d1365371635e21bc43eaadf89e4e7401d48d60319dfd06f935fc46488c229b611eecd038804ae9f681a078dde8ed8f8e20ad9504bcf3c24a0b566b1e85b2d3ed0a1273292ff5f87bae5b3c87857e67ed81", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAM21dCP51xQlG5t3dNsVQuwVNmSXI\n8lTP4cM4j3ILHWUAqQQSsCCz21krkqufaPHGk7jRNlNxY14hvEPqrfieTnQB1I1g\nMZ39Bvk1/EZIjCKbYR7s0DiASun2gaB43ejtj44grZUEvPPCSgtWax6FstPtChJz\nKS/1+HuuWzyHhX5n7YE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 358, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe02420095e19fd2b755d603bf994562d9a11f63cf4eadecbdc0ecb5a394e54529e8da58a527bc6d85725043786362ab4de6cbc7d80e625ae0a98861aea1c7bf7109c91f66", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04006f8fadedbae63701072c287c633f9c0052ea1e6cd00a84342cc0f626210071576abfd0875664b0746cdaf2745effc18d94905b0fc9d2cad4ba375c0ea2298c8d1c0150d128cb62a527ae6df3e92f1f280ea33248711ffe4b35c1b162a9508576860165e0ddc361d96fafcd2ff82776c743b9cd6845db61eb56739f5c4ef561e6c20d8c", + "wx" : "6f8fadedbae63701072c287c633f9c0052ea1e6cd00a84342cc0f626210071576abfd0875664b0746cdaf2745effc18d94905b0fc9d2cad4ba375c0ea2298c8d1c", + "wy" : "0150d128cb62a527ae6df3e92f1f280ea33248711ffe4b35c1b162a9508576860165e0ddc361d96fafcd2ff82776c743b9cd6845db61eb56739f5c4ef561e6c20d8c" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004006f8fadedbae63701072c287c633f9c0052ea1e6cd00a84342cc0f626210071576abfd0875664b0746cdaf2745effc18d94905b0fc9d2cad4ba375c0ea2298c8d1c0150d128cb62a527ae6df3e92f1f280ea33248711ffe4b35c1b162a9508576860165e0ddc361d96fafcd2ff82776c743b9cd6845db61eb56739f5c4ef561e6c20d8c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAb4+t7brmNwEHLCh8Yz+cAFLqHmzQ\nCoQ0LMD2JiEAcVdqv9CHVmSwdGza8nRe/8GNlJBbD8nSytS6N1wOoimMjRwBUNEo\ny2KlJ65t8+kvHygOozJIcR/+SzXBsWKpUIV2hgFl4N3DYdlvr80v+Cd2x0O5zWhF\n22HrVnOfXE71YebCDYw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 359, + "comment" : "r and s^-1 have a large Hamming weight", + "msg" : "313233343030", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe024115837645583a37a7a665f983c5e347f65dca47647aa80fd2498a791d44d9b2850a151a6e86fce7d7bb814e724ff11b9ef726bf36c6e7548c37f82a24902876ee19", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04005e7eb6c4f481830abaad8a60ddb09891164ee418ea4cd2995062e227d33c229fb737bf330703097d6b3b69a3f09e79c9de0b402bf846dd26b5bb1191cff801355d01789c9afda567e61de414437b0e93a17611e6e76853762bc0aff1e2bc9e46ce1285b931651d7129b85aef2c1fab1728e7eb4449b2956dec33e6cd7c9ba125c5cd9d", + "wx" : "5e7eb6c4f481830abaad8a60ddb09891164ee418ea4cd2995062e227d33c229fb737bf330703097d6b3b69a3f09e79c9de0b402bf846dd26b5bb1191cff801355d", + "wy" : "01789c9afda567e61de414437b0e93a17611e6e76853762bc0aff1e2bc9e46ce1285b931651d7129b85aef2c1fab1728e7eb4449b2956dec33e6cd7c9ba125c5cd9d" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004005e7eb6c4f481830abaad8a60ddb09891164ee418ea4cd2995062e227d33c229fb737bf330703097d6b3b69a3f09e79c9de0b402bf846dd26b5bb1191cff801355d01789c9afda567e61de414437b0e93a17611e6e76853762bc0aff1e2bc9e46ce1285b931651d7129b85aef2c1fab1728e7eb4449b2956dec33e6cd7c9ba125c5cd9d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAXn62xPSBgwq6rYpg3bCYkRZO5Bjq\nTNKZUGLiJ9M8Ip+3N78zBwMJfWs7aaPwnnnJ3gtAK/hG3Sa1uxGRz/gBNV0BeJya\n/aVn5h3kFEN7DpOhdhHm52hTdivAr/HivJ5GzhKFuTFlHXEpuFrvLB+rFyjn60RJ\nspVt7DPmzXyboSXFzZ0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 360, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020101", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0400b420fb1fecdd9cc5ea7d7c7617e70538db32e6d7a0ad722c63580f1f6a1f5537eb50930b90fd6fdd9abd40015f746d2fd8adf945a75621407edb6863588e41979e00295108a7e9d2191a287fd160bd24f498055dc9badbd61c6a89fede27b4f9d479d86a20b6dc07c90f008ebe68a0e0cc15a4a03b8cf990e4ff7ed6e3892b21c52153", + "wx" : "00b420fb1fecdd9cc5ea7d7c7617e70538db32e6d7a0ad722c63580f1f6a1f5537eb50930b90fd6fdd9abd40015f746d2fd8adf945a75621407edb6863588e41979e", + "wy" : "295108a7e9d2191a287fd160bd24f498055dc9badbd61c6a89fede27b4f9d479d86a20b6dc07c90f008ebe68a0e0cc15a4a03b8cf990e4ff7ed6e3892b21c52153" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400b420fb1fecdd9cc5ea7d7c7617e70538db32e6d7a0ad722c63580f1f6a1f5537eb50930b90fd6fdd9abd40015f746d2fd8adf945a75621407edb6863588e41979e00295108a7e9d2191a287fd160bd24f498055dc9badbd61c6a89fede27b4f9d479d86a20b6dc07c90f008ebe68a0e0cc15a4a03b8cf990e4ff7ed6e3892b21c52153", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAtCD7H+zdnMXqfXx2F+cFONsy5teg\nrXIsY1gPH2ofVTfrUJMLkP1v3Zq9QAFfdG0v2K35RadWIUB+22hjWI5Bl54AKVEI\np+nSGRoof9FgvST0mAVdybrb1hxqif7eJ7T51HnYaiC23AfJDwCOvmig4MwVpKA7\njPmQ5P9+1uOJKyHFIVM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 361, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020102", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040032b9a17c201aec34d29b8c2764e7c7f6aeef10fb61bf9837117fad879f8c6a22a300006d2018cf42b25898ffc9a1bf507352e59e6a52e627cda160e17ea2f4600500317a89899b7cb3a0d33eafa02b0137a0fb1b05102b22b676f35b9ff6c050ddee9f185609ffb7f5165a769e440792b75044a43e838690d13f884aaae888bf5f86f0", + "wx" : "32b9a17c201aec34d29b8c2764e7c7f6aeef10fb61bf9837117fad879f8c6a22a300006d2018cf42b25898ffc9a1bf507352e59e6a52e627cda160e17ea2f46005", + "wy" : "317a89899b7cb3a0d33eafa02b0137a0fb1b05102b22b676f35b9ff6c050ddee9f185609ffb7f5165a769e440792b75044a43e838690d13f884aaae888bf5f86f0" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040032b9a17c201aec34d29b8c2764e7c7f6aeef10fb61bf9837117fad879f8c6a22a300006d2018cf42b25898ffc9a1bf507352e59e6a52e627cda160e17ea2f4600500317a89899b7cb3a0d33eafa02b0137a0fb1b05102b22b676f35b9ff6c050ddee9f185609ffb7f5165a769e440792b75044a43e838690d13f884aaae888bf5f86f0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAMrmhfCAa7DTSm4wnZOfH9q7vEPth\nv5g3EX+th5+MaiKjAABtIBjPQrJYmP/Job9Qc1LlnmpS5ifNoWDhfqL0YAUAMXqJ\niZt8s6DTPq+gKwE3oPsbBRArIrZ281uf9sBQ3e6fGFYJ/7f1Flp2nkQHkrdQRKQ+\ng4aQ0T+ISqroiL9fhvA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 362, + "comment" : "small r and s", + "msg" : "313233343030", + "sig" : "3006020101020103", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 363, + "comment" : "r is larger than n", + "msg" : "313233343030", + "sig" : "3047024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640a020103", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040067dd456b52f82a5d4c4a71b3ea9302f62a852ddc04ad25b62fef1ddf657374fb4e80679ddf42d212f0711db32b626d8593bd70892e93ed0adb273157b6df187938014d2c78509f3bd6f7d0fba4a90cb456286e267f5dd9d967842a6086884d66c7b2a932833470c721a4a728cd8486d15314232d801f17e3a6fd7068bdebacdf82c0b4", + "wx" : "67dd456b52f82a5d4c4a71b3ea9302f62a852ddc04ad25b62fef1ddf657374fb4e80679ddf42d212f0711db32b626d8593bd70892e93ed0adb273157b6df187938", + "wy" : "014d2c78509f3bd6f7d0fba4a90cb456286e267f5dd9d967842a6086884d66c7b2a932833470c721a4a728cd8486d15314232d801f17e3a6fd7068bdebacdf82c0b4" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040067dd456b52f82a5d4c4a71b3ea9302f62a852ddc04ad25b62fef1ddf657374fb4e80679ddf42d212f0711db32b626d8593bd70892e93ed0adb273157b6df187938014d2c78509f3bd6f7d0fba4a90cb456286e267f5dd9d967842a6086884d66c7b2a932833470c721a4a728cd8486d15314232d801f17e3a6fd7068bdebacdf82c0b4", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAZ91Fa1L4Kl1MSnGz6pMC9iqFLdwE\nrSW2L+8d32VzdPtOgGed30LSEvBxHbMrYm2Fk71wiS6T7QrbJzFXtt8YeTgBTSx4\nUJ871vfQ+6SpDLRWKG4mf13Z2WeEKmCGiE1mx7KpMoM0cMchpKcozYSG0VMUIy2A\nHxfjpv1waL3rrN+CwLQ=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 364, + "comment" : "s is larger than n", + "msg" : "313233343030", + "sig" : "3047020101024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e914b3a90", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040068d7b518214766ac734a7461d499352444377d50af42a1bbdb7f0032065ee6dc341ccf231af65250e7d13a80733abebff559891d4211d6c28cf952c9222303b53b00a2f3d7e14d9d8fabe1939d664e4615c6e24f5490c815c7651ccf6cc65252f88bcfd3b07fbdbaa0ba00441e590ccbcea00658f388f22c42d8a6d0f781ae5bb4d78b", + "wx" : "68d7b518214766ac734a7461d499352444377d50af42a1bbdb7f0032065ee6dc341ccf231af65250e7d13a80733abebff559891d4211d6c28cf952c9222303b53b", + "wy" : "00a2f3d7e14d9d8fabe1939d664e4615c6e24f5490c815c7651ccf6cc65252f88bcfd3b07fbdbaa0ba00441e590ccbcea00658f388f22c42d8a6d0f781ae5bb4d78b" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040068d7b518214766ac734a7461d499352444377d50af42a1bbdb7f0032065ee6dc341ccf231af65250e7d13a80733abebff559891d4211d6c28cf952c9222303b53b00a2f3d7e14d9d8fabe1939d664e4615c6e24f5490c815c7651ccf6cc65252f88bcfd3b07fbdbaa0ba00441e590ccbcea00658f388f22c42d8a6d0f781ae5bb4d78b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAaNe1GCFHZqxzSnRh1Jk1JEQ3fVCv\nQqG7238AMgZe5tw0HM8jGvZSUOfROoBzOr6/9VmJHUIR1sKM+VLJIiMDtTsAovPX\n4U2dj6vhk51mTkYVxuJPVJDIFcdlHM9sxlJS+IvP07B/vbqgugBEHlkMy86gBljz\niPIsQtim0PeBrlu014s=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 365, + "comment" : "small r and s^-1", + "msg" : "313233343030", + "sig" : "304802020100024201efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7efdfbf7ef87b4de1fc92dd757639408a50bee10764e326fdd2fa308dfde3e5243fdf4ac5ac", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04011edc3b22b20f9a188b32b1e827d6e46b2ed61b9be6f4ada0b2c95835bee2738ec4dc5313831cce5f927210a7bc2f13abc02fa90e716fc1bd2f63c429a760ed23630118daad88fe9b9d66e66e71ce05d74137d277a9ca81c7d7aef1e74550890564103cc0d95d30f6205c9124829192e15d66fb1f4033032a42ba606e3edca6ec065c50", + "wx" : "011edc3b22b20f9a188b32b1e827d6e46b2ed61b9be6f4ada0b2c95835bee2738ec4dc5313831cce5f927210a7bc2f13abc02fa90e716fc1bd2f63c429a760ed2363", + "wy" : "0118daad88fe9b9d66e66e71ce05d74137d277a9ca81c7d7aef1e74550890564103cc0d95d30f6205c9124829192e15d66fb1f4033032a42ba606e3edca6ec065c50" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004011edc3b22b20f9a188b32b1e827d6e46b2ed61b9be6f4ada0b2c95835bee2738ec4dc5313831cce5f927210a7bc2f13abc02fa90e716fc1bd2f63c429a760ed23630118daad88fe9b9d66e66e71ce05d74137d277a9ca81c7d7aef1e74550890564103cc0d95d30f6205c9124829192e15d66fb1f4033032a42ba606e3edca6ec065c50", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBHtw7IrIPmhiLMrHoJ9bkay7WG5vm\n9K2gsslYNb7ic47E3FMTgxzOX5JyEKe8LxOrwC+pDnFvwb0vY8Qpp2DtI2MBGNqt\niP6bnWbmbnHOBddBN9J3qcqBx9eu8edFUIkFZBA8wNldMPYgXJEkgpGS4V1m+x9A\nMwMqQrpgbj7cpuwGXFA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 366, + "comment" : "smallish r and s^-1", + "msg" : "313233343030", + "sig" : "304d02072d9b4d347952cd02420100508d073413de829275e76509fd81cff49adf4c80ed2ddd4a7937d1d918796878fec24cc46570982c3fb8f5e92ccdcb3e677f07e9bd0db0b84814be1c7949b0de", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04012f8b9863a1887eca6827ad4accc2ba607f8592e5be15d9692b697a4061fcc81560c8feb2ae3851d00e06df3e0091f1f1ca5ec64761f4f8bd6d0c2cab2a121024440174b4e34aec517a0d2ceb2fd152ed1736bc330efca5e6d530ea170802fb6af031425903fa6a378405be5e47d1e52f62f859f537df9c0f6a4a6479a0aadafe219821", + "wx" : "012f8b9863a1887eca6827ad4accc2ba607f8592e5be15d9692b697a4061fcc81560c8feb2ae3851d00e06df3e0091f1f1ca5ec64761f4f8bd6d0c2cab2a12102444", + "wy" : "0174b4e34aec517a0d2ceb2fd152ed1736bc330efca5e6d530ea170802fb6af031425903fa6a378405be5e47d1e52f62f859f537df9c0f6a4a6479a0aadafe219821" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004012f8b9863a1887eca6827ad4accc2ba607f8592e5be15d9692b697a4061fcc81560c8feb2ae3851d00e06df3e0091f1f1ca5ec64761f4f8bd6d0c2cab2a121024440174b4e34aec517a0d2ceb2fd152ed1736bc330efca5e6d530ea170802fb6af031425903fa6a378405be5e47d1e52f62f859f537df9c0f6a4a6479a0aadafe219821", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBL4uYY6GIfspoJ61KzMK6YH+FkuW+\nFdlpK2l6QGH8yBVgyP6yrjhR0A4G3z4AkfHxyl7GR2H0+L1tDCyrKhIQJEQBdLTj\nSuxReg0s6y/RUu0XNrwzDvyl5tUw6hcIAvtq8DFCWQP6ajeEBb5eR9HlL2L4WfU3\n35wPakpkeaCq2v4hmCE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 367, + "comment" : "100-bit r and small s^-1", + "msg" : "313233343030", + "sig" : "3053020d1033e67e37b32b445580bf4eff0242013cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc33cc3393f632affd3eaa3c8fb64507bd5996497bd588fb9e3947c097ced7546b57c8998", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04008aed779a32b9bf56ea7ab46e4b914e55c65301cdbe9ea6e7ed44f7e978c0365989a19a5e48282fb1158f481c556505d66ff414a07003ebf82fca1698c33f2884c600a62426993ed5b177b6045e60b5fa1a1f8ce1ad5d70e7bc7b5af811dbf86e651f9ea02ec796ab991e1439bf07ffe2ac6052a8a0b0174d78a9441aaf4d8fc757d80f", + "wx" : "008aed779a32b9bf56ea7ab46e4b914e55c65301cdbe9ea6e7ed44f7e978c0365989a19a5e48282fb1158f481c556505d66ff414a07003ebf82fca1698c33f2884c6", + "wy" : "00a62426993ed5b177b6045e60b5fa1a1f8ce1ad5d70e7bc7b5af811dbf86e651f9ea02ec796ab991e1439bf07ffe2ac6052a8a0b0174d78a9441aaf4d8fc757d80f" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004008aed779a32b9bf56ea7ab46e4b914e55c65301cdbe9ea6e7ed44f7e978c0365989a19a5e48282fb1158f481c556505d66ff414a07003ebf82fca1698c33f2884c600a62426993ed5b177b6045e60b5fa1a1f8ce1ad5d70e7bc7b5af811dbf86e651f9ea02ec796ab991e1439bf07ffe2ac6052a8a0b0174d78a9441aaf4d8fc757d80f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAiu13mjK5v1bqerRuS5FOVcZTAc2+\nnqbn7UT36XjANlmJoZpeSCgvsRWPSBxVZQXWb/QUoHAD6/gvyhaYwz8ohMYApiQm\nmT7VsXe2BF5gtfoaH4zhrV1w57x7WvgR2/huZR+eoC7HlquZHhQ5vwf/4qxgUqig\nsBdNeKlEGq9Nj8dX2A8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 368, + "comment" : "small r and 100 bit s^-1", + "msg" : "313233343030", + "sig" : "30480202010002420086ecbf54ab59a4e195f0be1402edd8657bb94618fab50f2fe20fe5ebbc9ff0e491397ed313cc918d438eedb9b5ecb4d9dfa305303505baf25400ed8c20fc3fc47b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040093697b0378312b38c31deae073f24a8163f086ac2116b7c37c99157cfae7970ab4201f5a7e06ec39eedbf7d87f3021ca439e3ff7c5988b84679937bab786dbe12e01c6987c86077c05423ac281de6d23f6a685870e12855463770eccabc9f3a1d23cb2a0c15479420b5dd40fbdc9886c463b62ee23239df3a8b861c3291d28224f6057", + "wx" : "0093697b0378312b38c31deae073f24a8163f086ac2116b7c37c99157cfae7970ab4201f5a7e06ec39eedbf7d87f3021ca439e3ff7c5988b84679937bab786dbe12e", + "wy" : "01c6987c86077c05423ac281de6d23f6a685870e12855463770eccabc9f3a1d23cb2a0c15479420b5dd40fbdc9886c463b62ee23239df3a8b861c3291d28224f6057" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040093697b0378312b38c31deae073f24a8163f086ac2116b7c37c99157cfae7970ab4201f5a7e06ec39eedbf7d87f3021ca439e3ff7c5988b84679937bab786dbe12e01c6987c86077c05423ac281de6d23f6a685870e12855463770eccabc9f3a1d23cb2a0c15479420b5dd40fbdc9886c463b62ee23239df3a8b861c3291d28224f6057", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAk2l7A3gxKzjDHergc/JKgWPwhqwh\nFrfDfJkVfPrnlwq0IB9afgbsOe7b99h/MCHKQ54/98WYi4RnmTe6t4bb4S4Bxph8\nhgd8BUI6woHebSP2poWHDhKFVGN3DsyryfOh0jyyoMFUeUILXdQPvcmIbEY7Yu4j\nI53zqLhhwykdKCJPYFc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 369, + "comment" : "100-bit r and s^-1", + "msg" : "313233343030", + "sig" : "3053020d062522bbd3ecbe7c39e93e7c2402420086ecbf54ab59a4e195f0be1402edd8657bb94618fab50f2fe20fe5ebbc9ff0e491397ed313cc918d438eedb9b5ecb4d9dfa305303505baf25400ed8c20fc3fc47b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04019a9f1b7b7f574a021fedd8679a4e998b48524854eefbaae4104a3973d693e02104fa119243256e3d986f8b4966c286ab8cb1f5267c0bbd6bc182aeb57493a5d5b60158b97eb74862fbca41763e8d3a7beb5fccd05565b75a3a43c2b38b96eb2ccff149c23ef1ac09fc455d808ff28081e985f9e172fc62d0900585172cfbff87383595", + "wx" : "019a9f1b7b7f574a021fedd8679a4e998b48524854eefbaae4104a3973d693e02104fa119243256e3d986f8b4966c286ab8cb1f5267c0bbd6bc182aeb57493a5d5b6", + "wy" : "0158b97eb74862fbca41763e8d3a7beb5fccd05565b75a3a43c2b38b96eb2ccff149c23ef1ac09fc455d808ff28081e985f9e172fc62d0900585172cfbff87383595" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004019a9f1b7b7f574a021fedd8679a4e998b48524854eefbaae4104a3973d693e02104fa119243256e3d986f8b4966c286ab8cb1f5267c0bbd6bc182aeb57493a5d5b60158b97eb74862fbca41763e8d3a7beb5fccd05565b75a3a43c2b38b96eb2ccff149c23ef1ac09fc455d808ff28081e985f9e172fc62d0900585172cfbff87383595", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBmp8be39XSgIf7dhnmk6Zi0hSSFTu\n+6rkEEo5c9aT4CEE+hGSQyVuPZhvi0lmwoarjLH1JnwLvWvBgq61dJOl1bYBWLl+\nt0hi+8pBdj6NOnvrX8zQVWW3WjpDwrOLlussz/FJwj7xrAn8RV2Aj/KAgemF+eFy\n/GLQkAWFFyz7/4c4NZU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 370, + "comment" : "r and s^-1 are close to n", + "msg" : "313233343030", + "sig" : "308188024201fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138638a0242015555555555555555555555555555555555555555555555555555555555555555518baf05027f750ef25532ab85fa066e8ad2793125b112da747cf524bf0b7aed5b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0401aa9f3a894b727d7a01b09c4f051b469d661de1e06915b599e211463319ac1b7ca8a6097f1be401d70a71d0b53655cdf9bef748d886e08ee7de2fa781e93ec41a2601ba9ea67385e19894fc9cd4b0173ab215f7b96f23bc420665d46c75447bf200ae3ac7b42bd9b857fd1c85cce8ea9c8d2345e4687dd70df59f5149510735bb9c7b64", + "wx" : "01aa9f3a894b727d7a01b09c4f051b469d661de1e06915b599e211463319ac1b7ca8a6097f1be401d70a71d0b53655cdf9bef748d886e08ee7de2fa781e93ec41a26", + "wy" : "01ba9ea67385e19894fc9cd4b0173ab215f7b96f23bc420665d46c75447bf200ae3ac7b42bd9b857fd1c85cce8ea9c8d2345e4687dd70df59f5149510735bb9c7b64" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401aa9f3a894b727d7a01b09c4f051b469d661de1e06915b599e211463319ac1b7ca8a6097f1be401d70a71d0b53655cdf9bef748d886e08ee7de2fa781e93ec41a2601ba9ea67385e19894fc9cd4b0173ab215f7b96f23bc420665d46c75447bf200ae3ac7b42bd9b857fd1c85cce8ea9c8d2345e4687dd70df59f5149510735bb9c7b64", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBqp86iUtyfXoBsJxPBRtGnWYd4eBp\nFbWZ4hFGMxmsG3yopgl/G+QB1wpx0LU2Vc35vvdI2IbgjufeL6eB6T7EGiYBup6m\nc4XhmJT8nNSwFzqyFfe5byO8QgZl1Gx1RHvyAK46x7Qr2bhX/RyFzOjqnI0jReRo\nfdcN9Z9RSVEHNbuce2Q=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 371, + "comment" : "s == 1", + "msg" : "313233343030", + "sig" : "3047024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad020101", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 372, + "comment" : "s == 0", + "msg" : "313233343030", + "sig" : "3047024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad020100", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04002a07f13f3e8df382145b7942fe6f91c12ff3064b314b4e3476bf3afbb982070f17f63b2de5fbe8c91a87ae632869facf17d5ce9d139b37ed557581bb9a7e4b8fa30024b904c5fc536ae53b323a7fd0b7b8e420302406ade84ea8a10ca7c5c934bad5489db6e3a8cc3064602cc83f309e9d247aae72afca08336bc8919e15f4be5ad77a", + "wx" : "2a07f13f3e8df382145b7942fe6f91c12ff3064b314b4e3476bf3afbb982070f17f63b2de5fbe8c91a87ae632869facf17d5ce9d139b37ed557581bb9a7e4b8fa3", + "wy" : "24b904c5fc536ae53b323a7fd0b7b8e420302406ade84ea8a10ca7c5c934bad5489db6e3a8cc3064602cc83f309e9d247aae72afca08336bc8919e15f4be5ad77a" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004002a07f13f3e8df382145b7942fe6f91c12ff3064b314b4e3476bf3afbb982070f17f63b2de5fbe8c91a87ae632869facf17d5ce9d139b37ed557581bb9a7e4b8fa30024b904c5fc536ae53b323a7fd0b7b8e420302406ade84ea8a10ca7c5c934bad5489db6e3a8cc3064602cc83f309e9d247aae72afca08336bc8919e15f4be5ad77a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAKgfxPz6N84IUW3lC/m+RwS/zBksx\nS040dr86+7mCBw8X9jst5fvoyRqHrmMoafrPF9XOnRObN+1VdYG7mn5Lj6MAJLkE\nxfxTauU7Mjp/0Le45CAwJAat6E6ooQynxck0utVInbbjqMwwZGAsyD8wnp0keq5y\nr8oIM2vIkZ4V9L5a13o=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 373, + "comment" : "point at infinity during verify", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd28c343c1df97cb35bfe600a47b84d2e81ddae4dc44ce23d75db7db8f489c3204024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04004bb904073cb6da9e5028df54fc22cf5a9d5ca73a01feedd2b4ce43b87bfd4300a72bdf26b146b2e7b506c03c7a0ad4a7e3e67204dddca9b65d43560ffaf9bfd540012b8895632e0406b78463fe1bc5360a3cf796fddda9db2b18ca9171558e6158fa4b0b1d0461d9a46b9b958d629bd62a29ee3942238e0fa83e932a66abb1b50c5f37", + "wx" : "4bb904073cb6da9e5028df54fc22cf5a9d5ca73a01feedd2b4ce43b87bfd4300a72bdf26b146b2e7b506c03c7a0ad4a7e3e67204dddca9b65d43560ffaf9bfd540", + "wy" : "012b8895632e0406b78463fe1bc5360a3cf796fddda9db2b18ca9171558e6158fa4b0b1d0461d9a46b9b958d629bd62a29ee3942238e0fa83e932a66abb1b50c5f37" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004004bb904073cb6da9e5028df54fc22cf5a9d5ca73a01feedd2b4ce43b87bfd4300a72bdf26b146b2e7b506c03c7a0ad4a7e3e67204dddca9b65d43560ffaf9bfd540012b8895632e0406b78463fe1bc5360a3cf796fddda9db2b18ca9171558e6158fa4b0b1d0461d9a46b9b958d629bd62a29ee3942238e0fa83e932a66abb1b50c5f37", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAS7kEBzy22p5QKN9U/CLPWp1cpzoB\n/u3StM5DuHv9QwCnK98msUay57UGwDx6CtSn4+ZyBN3cqbZdQ1YP+vm/1UABK4iV\nYy4EBreEY/4bxTYKPPeW/d2p2ysYypFxVY5hWPpLCx0EYdmka5uVjWKb1iop7jlC\nI44PqD6TKmarsbUMXzc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 374, + "comment" : "edge case for signature malleability", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd28c343c1df97cb35bfe600a47b84d2e81ddae4dc44ce23d75db7db8f489c3206024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd28c343c1df97cb35bfe600a47b84d2e81ddae4dc44ce23d75db7db8f489c3204", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04016454afca385eb53eaeaab711537d95c50e01268b100a22656adf5cedf68b4a78a6c14a70245df707f6565ce15948c2e38e3d90e05dda3188ab43a73f30dbc6bda80151dca6dc5aec84fa35c79f21365993f0b267ca486ea66c2186a52a3fb62b53501ce2822d4691fbc25cf27adb70734071be523b9231dd8d33a401dea00cf0ae30a1", + "wx" : "016454afca385eb53eaeaab711537d95c50e01268b100a22656adf5cedf68b4a78a6c14a70245df707f6565ce15948c2e38e3d90e05dda3188ab43a73f30dbc6bda8", + "wy" : "0151dca6dc5aec84fa35c79f21365993f0b267ca486ea66c2186a52a3fb62b53501ce2822d4691fbc25cf27adb70734071be523b9231dd8d33a401dea00cf0ae30a1" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004016454afca385eb53eaeaab711537d95c50e01268b100a22656adf5cedf68b4a78a6c14a70245df707f6565ce15948c2e38e3d90e05dda3188ab43a73f30dbc6bda80151dca6dc5aec84fa35c79f21365993f0b267ca486ea66c2186a52a3fb62b53501ce2822d4691fbc25cf27adb70734071be523b9231dd8d33a401dea00cf0ae30a1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBZFSvyjhetT6uqrcRU32VxQ4BJosQ\nCiJlat9c7faLSnimwUpwJF33B/ZWXOFZSMLjjj2Q4F3aMYirQ6c/MNvGvagBUdym\n3FrshPo1x58hNlmT8LJnykhupmwhhqUqP7YrU1Ac4oItRpH7wlzyettwc0BxvlI7\nkjHdjTOkAd6gDPCuMKE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 375, + "comment" : "edge case for signature malleability", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd28c343c1df97cb35bfe600a47b84d2e81ddae4dc44ce23d75db7db8f489c3206024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd28c343c1df97cb35bfe600a47b84d2e81ddae4dc44ce23d75db7db8f489c3205", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040060daf59638158ed9d3d7e8428501334764162f9be239e168fae9af348c30a7be1cfa4d9636c3bb621d7e0aa71446f8d4a37f2d43274a4255b226f612382f63152e016e48300124a636b206fad4d0355862a852623799afee941e864d96dcbf55b801cabd6249b6f567506d5a503e7d03b4764c70fc44c5365f32c3603678476d62b09d", + "wx" : "60daf59638158ed9d3d7e8428501334764162f9be239e168fae9af348c30a7be1cfa4d9636c3bb621d7e0aa71446f8d4a37f2d43274a4255b226f612382f63152e", + "wy" : "016e48300124a636b206fad4d0355862a852623799afee941e864d96dcbf55b801cabd6249b6f567506d5a503e7d03b4764c70fc44c5365f32c3603678476d62b09d" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040060daf59638158ed9d3d7e8428501334764162f9be239e168fae9af348c30a7be1cfa4d9636c3bb621d7e0aa71446f8d4a37f2d43274a4255b226f612382f63152e016e48300124a636b206fad4d0355862a852623799afee941e864d96dcbf55b801cabd6249b6f567506d5a503e7d03b4764c70fc44c5365f32c3603678476d62b09d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAYNr1ljgVjtnT1+hChQEzR2QWL5vi\nOeFo+umvNIwwp74c+k2WNsO7Yh1+CqcURvjUo38tQydKQlWyJvYSOC9jFS4Bbkgw\nASSmNrIG+tTQNVhiqFJiN5mv7pQehk2W3L9VuAHKvWJJtvVnUG1aUD59A7R2THD8\nRMU2XzLDYDZ4R21isJ0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 376, + "comment" : "u1 == 1", + "msg" : "313233343030", + "sig" : "308186024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040051fe6a35a85070c7c29502a87672a38153d799aef734226b64d8fd3398621701117f0af9d9afaf6dbb8ca3007255dc79b0f41ed552512cb29207b15a01cdfdfaae01a16c61277586356efadcb24764f21f574ef96f2caabc3f47fa66fb8719d7785824061c2d6d7a4bcb851540e62b2f00960b283eac7808d1813ef51b46e1149d3e4d", + "wx" : "51fe6a35a85070c7c29502a87672a38153d799aef734226b64d8fd3398621701117f0af9d9afaf6dbb8ca3007255dc79b0f41ed552512cb29207b15a01cdfdfaae", + "wy" : "01a16c61277586356efadcb24764f21f574ef96f2caabc3f47fa66fb8719d7785824061c2d6d7a4bcb851540e62b2f00960b283eac7808d1813ef51b46e1149d3e4d" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040051fe6a35a85070c7c29502a87672a38153d799aef734226b64d8fd3398621701117f0af9d9afaf6dbb8ca3007255dc79b0f41ed552512cb29207b15a01cdfdfaae01a16c61277586356efadcb24764f21f574ef96f2caabc3f47fa66fb8719d7785824061c2d6d7a4bcb851540e62b2f00960b283eac7808d1813ef51b46e1149d3e4d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAUf5qNahQcMfClQKodnKjgVPXma73\nNCJrZNj9M5hiFwERfwr52a+vbbuMowByVdx5sPQe1VJRLLKSB7FaAc39+q4BoWxh\nJ3WGNW763LJHZPIfV075byyqvD9H+mb7hxnXeFgkBhwtbXpLy4UVQOYrLwCWCyg+\nrHgI0YE+9RtG4RSdPk0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 377, + "comment" : "u1 == n - 1", + "msg" : "313233343030", + "sig" : "308188024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024201ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6acca94fdcdefd78dc0b56a22d16f2eec26ae0c1fb484d059300e80bd6b0472b3d1222ff5d08b03d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0400b4ffc0fff087607ad26c4b23d6d31ae5f904cc064e350f47131ce2784fbb359867988a559d4386752e56277bef34e26544dedda88cc20a3411fa98834eeae869ad009d6e8ca99949b7b34fd06a789744ecac3356247317c4d7aa9296676dd623594f3684bc13064cab8d2db7edbca91f1c8beb542bc97978a3f31f3610a03f46a982d2", + "wx" : "00b4ffc0fff087607ad26c4b23d6d31ae5f904cc064e350f47131ce2784fbb359867988a559d4386752e56277bef34e26544dedda88cc20a3411fa98834eeae869ad", + "wy" : "009d6e8ca99949b7b34fd06a789744ecac3356247317c4d7aa9296676dd623594f3684bc13064cab8d2db7edbca91f1c8beb542bc97978a3f31f3610a03f46a982d2" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400b4ffc0fff087607ad26c4b23d6d31ae5f904cc064e350f47131ce2784fbb359867988a559d4386752e56277bef34e26544dedda88cc20a3411fa98834eeae869ad009d6e8ca99949b7b34fd06a789744ecac3356247317c4d7aa9296676dd623594f3684bc13064cab8d2db7edbca91f1c8beb542bc97978a3f31f3610a03f46a982d2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAtP/A//CHYHrSbEsj1tMa5fkEzAZO\nNQ9HExzieE+7NZhnmIpVnUOGdS5WJ3vvNOJlRN7dqIzCCjQR+piDTuroaa0AnW6M\nqZlJt7NP0Gp4l0TsrDNWJHMXxNeqkpZnbdYjWU82hLwTBkyrjS237bypHxyL61Qr\nyXl4o/MfNhCgP0apgtI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 378, + "comment" : "u2 == 1", + "msg" : "313233343030", + "sig" : "308188024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0400809fba320fe96ded24611b72a2a5428fe46049ff080d6e0813ab7a35897018fe6418613abd860d1eb484959059a01af7d68cba69d1c52ea64ad0f28a18a41fc78a01108acc5577e9e8962e2a7cea0bb37df1d0ca4050fb6cfeba41a7f868d988dbbcebc962986748fa485183f6b60f453ec8606f8c33d43767dddbbef8c412b2c37939", + "wx" : "00809fba320fe96ded24611b72a2a5428fe46049ff080d6e0813ab7a35897018fe6418613abd860d1eb484959059a01af7d68cba69d1c52ea64ad0f28a18a41fc78a", + "wy" : "01108acc5577e9e8962e2a7cea0bb37df1d0ca4050fb6cfeba41a7f868d988dbbcebc962986748fa485183f6b60f453ec8606f8c33d43767dddbbef8c412b2c37939" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400809fba320fe96ded24611b72a2a5428fe46049ff080d6e0813ab7a35897018fe6418613abd860d1eb484959059a01af7d68cba69d1c52ea64ad0f28a18a41fc78a01108acc5577e9e8962e2a7cea0bb37df1d0ca4050fb6cfeba41a7f868d988dbbcebc962986748fa485183f6b60f453ec8606f8c33d43767dddbbef8c412b2c37939", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAgJ+6Mg/pbe0kYRtyoqVCj+RgSf8I\nDW4IE6t6NYlwGP5kGGE6vYYNHrSElZBZoBr31oy6adHFLqZK0PKKGKQfx4oBEIrM\nVXfp6JYuKnzqC7N98dDKQFD7bP66Qaf4aNmI27zryWKYZ0j6SFGD9rYPRT7IYG+M\nM9Q3Z93bvvjEErLDeTk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 379, + "comment" : "u2 == n - 1", + "msg" : "313233343030", + "sig" : "308188024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad0242015555555555555555555555555555555555555555555555555555555555555555518baf05027f750ef25532ab85fa066e8ad2793125b112da747cf524bf0b7aed5c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040145130dca77d9674dfceffa851b4a2672e490e8fba8277622b0020e2fe9101e76933b0c01d248071f854e9bc523733936dc0b9930cbe154b9a402f681ee3c6cef6b000d0c94b2ad28556643aa3d27523048d227a1de82f8a664707e75394d21da181bec82e1afb0e627539531affa849a2409bcac83fb786c351c88bac2fb2e4322e54a", + "wx" : "0145130dca77d9674dfceffa851b4a2672e490e8fba8277622b0020e2fe9101e76933b0c01d248071f854e9bc523733936dc0b9930cbe154b9a402f681ee3c6cef6b", + "wy" : "0d0c94b2ad28556643aa3d27523048d227a1de82f8a664707e75394d21da181bec82e1afb0e627539531affa849a2409bcac83fb786c351c88bac2fb2e4322e54a" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040145130dca77d9674dfceffa851b4a2672e490e8fba8277622b0020e2fe9101e76933b0c01d248071f854e9bc523733936dc0b9930cbe154b9a402f681ee3c6cef6b000d0c94b2ad28556643aa3d27523048d227a1de82f8a664707e75394d21da181bec82e1afb0e627539531affa849a2409bcac83fb786c351c88bac2fb2e4322e54a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBRRMNynfZZ0387/qFG0omcuSQ6Puo\nJ3YisAIOL+kQHnaTOwwB0kgHH4VOm8Ujczk23AuZMMvhVLmkAvaB7jxs72sADQyU\nsq0oVWZDqj0nUjBI0ieh3oL4pmRwfnU5TSHaGBvsguGvsOYnU5Uxr/qEmiQJvKyD\n+3hsNRyIusL7LkMi5Uo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 380, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201556bfd55a94e530bd972e52873ef39ac3ec34481aebdc46680dc66723ab66056275d82bff85ad29ac694530bb2f89c36ce600ad1b49761854afc69ab741ce0294a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0400ed3e09809fe5985818f90592fd06e71d2c493d9a781714c9157cbafa5ba196b987fd49ae24274c76251c70b9f7970f1f713ad274590a702f463c73a0704831ce5d00cac278297093bd9f9ac2d00bef3d67a01b43b28b9f829407264c738117438300c7704772976916ea102a776262ccf4222cc348c34aac683d8f00179a348323babd", + "wx" : "00ed3e09809fe5985818f90592fd06e71d2c493d9a781714c9157cbafa5ba196b987fd49ae24274c76251c70b9f7970f1f713ad274590a702f463c73a0704831ce5d", + "wy" : "00cac278297093bd9f9ac2d00bef3d67a01b43b28b9f829407264c738117438300c7704772976916ea102a776262ccf4222cc348c34aac683d8f00179a348323babd" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400ed3e09809fe5985818f90592fd06e71d2c493d9a781714c9157cbafa5ba196b987fd49ae24274c76251c70b9f7970f1f713ad274590a702f463c73a0704831ce5d00cac278297093bd9f9ac2d00bef3d67a01b43b28b9f829407264c738117438300c7704772976916ea102a776262ccf4222cc348c34aac683d8f00179a348323babd", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQA7T4JgJ/lmFgY+QWS/QbnHSxJPZp4\nFxTJFXy6+luhlrmH/UmuJCdMdiUccLn3lw8fcTrSdFkKcC9GPHOgcEgxzl0AysJ4\nKXCTvZ+awtAL7z1noBtDsoufgpQHJkxzgRdDgwDHcEdyl2kW6hAqd2JizPQiLMNI\nw0qsaD2PABeaNIMjur0=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 381, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200dcf9e7f441448a125b96d72b989d9f4dac7508c7e036f6080d4758e736f5e0636b0ff503f128a98d08e0ae189921065219d2cc3aa83e3c660ca0cb85e7c11a24d0", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04000ac2c5a4c79309a5132d5d7494befb3905d33fda5f80eeaf63775183aae7af108a3d97f3a441532cf6fac47f6c898329d69182e1fa07ce45997ebec3781c9ad7410173a5b6b80a8b73d30ac97e1a4aacb773c1ad692c5ea63f68e373842782bd677864ff656cf8d1e6ec1e58e9a83856ef92677555916749fb95e800ae2e011618ca3a", + "wx" : "0ac2c5a4c79309a5132d5d7494befb3905d33fda5f80eeaf63775183aae7af108a3d97f3a441532cf6fac47f6c898329d69182e1fa07ce45997ebec3781c9ad741", + "wy" : "0173a5b6b80a8b73d30ac97e1a4aacb773c1ad692c5ea63f68e373842782bd677864ff656cf8d1e6ec1e58e9a83856ef92677555916749fb95e800ae2e011618ca3a" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004000ac2c5a4c79309a5132d5d7494befb3905d33fda5f80eeaf63775183aae7af108a3d97f3a441532cf6fac47f6c898329d69182e1fa07ce45997ebec3781c9ad7410173a5b6b80a8b73d30ac97e1a4aacb773c1ad692c5ea63f68e373842782bd677864ff656cf8d1e6ec1e58e9a83856ef92677555916749fb95e800ae2e011618ca3a", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQACsLFpMeTCaUTLV10lL77OQXTP9pf\ngO6vY3dRg6rnrxCKPZfzpEFTLPb6xH9siYMp1pGC4foHzkWZfr7DeBya10EBc6W2\nuAqLc9MKyX4aSqy3c8GtaSxepj9o43OEJ4K9Z3hk/2Vs+NHm7B5Y6ag4Vu+SZ3VV\nkWdJ+5XoAK4uARYYyjo=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 382, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024166eb57733c19a7003cf8253279fce41907bc4f127153c4576dd4814f8b335a0b51560b4447f0382c69b3fe509522c891f0eec3999ad2526835f33ae22a642843af", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0401eb2a353dec6b460fbda49c67f431190fff6f195639c226ef8fefcbf191d72529a12cc5485b282a52704c1fd84529a1aa0ad794f96493e299718d2618a1b83a526c01f704604d5b2b94a42bfc3ab93317d66a54de15258337433fc96a965d8e2d056fd1134b7989d7b3f709adc28227bdabc11fe2f359c6a6e5111ab43379ca25b66f2f", + "wx" : "01eb2a353dec6b460fbda49c67f431190fff6f195639c226ef8fefcbf191d72529a12cc5485b282a52704c1fd84529a1aa0ad794f96493e299718d2618a1b83a526c", + "wy" : "01f704604d5b2b94a42bfc3ab93317d66a54de15258337433fc96a965d8e2d056fd1134b7989d7b3f709adc28227bdabc11fe2f359c6a6e5111ab43379ca25b66f2f" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401eb2a353dec6b460fbda49c67f431190fff6f195639c226ef8fefcbf191d72529a12cc5485b282a52704c1fd84529a1aa0ad794f96493e299718d2618a1b83a526c01f704604d5b2b94a42bfc3ab93317d66a54de15258337433fc96a965d8e2d056fd1134b7989d7b3f709adc28227bdabc11fe2f359c6a6e5111ab43379ca25b66f2f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB6yo1PexrRg+9pJxn9DEZD/9vGVY5\nwibvj+/L8ZHXJSmhLMVIWygqUnBMH9hFKaGqCteU+WST4plxjSYYobg6UmwB9wRg\nTVsrlKQr/Dq5MxfWalTeFSWDN0M/yWqWXY4tBW/RE0t5idez9wmtwoInvavBH+Lz\nWcam5REatDN5yiW2by8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 383, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242017106d1131b3300d7ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc79527ac09f0a3f0a8aa38285585b6afceac5ff6692842232d106d15d4df1b66aa8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0401e43dfecc7e6caad03d17b407322c878f701c5add6eb2afcd786ff3803622dfbb6baa01246e1ea059f7b78842919b2507daa9e3434efa7e8d3ae6c35499f82d0ac8018b0e4d6378222a07ccdb4214001f97b1a503d1aac3ab925ea64faa9c739ba04ee3480b147cb07f93edf40b6856a22f4159c3f5cd6c9e7165452907c8d02fab201e", + "wx" : "01e43dfecc7e6caad03d17b407322c878f701c5add6eb2afcd786ff3803622dfbb6baa01246e1ea059f7b78842919b2507daa9e3434efa7e8d3ae6c35499f82d0ac8", + "wy" : "018b0e4d6378222a07ccdb4214001f97b1a503d1aac3ab925ea64faa9c739ba04ee3480b147cb07f93edf40b6856a22f4159c3f5cd6c9e7165452907c8d02fab201e" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401e43dfecc7e6caad03d17b407322c878f701c5add6eb2afcd786ff3803622dfbb6baa01246e1ea059f7b78842919b2507daa9e3434efa7e8d3ae6c35499f82d0ac8018b0e4d6378222a07ccdb4214001f97b1a503d1aac3ab925ea64faa9c739ba04ee3480b147cb07f93edf40b6856a22f4159c3f5cd6c9e7165452907c8d02fab201e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB5D3+zH5sqtA9F7QHMiyHj3AcWt1u\nsq/NeG/zgDYi37trqgEkbh6gWfe3iEKRmyUH2qnjQ076fo065sNUmfgtCsgBiw5N\nY3giKgfM20IUAB+XsaUD0arDq5Jepk+qnHOboE7jSAsUfLB/k+30C2hWoi9BWcP1\nzWyecWVFKQfI0C+rIB4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 384, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02416d1131b3300d7ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6ab94bf496f53ea229e7fe6b456088ea32f6e2b104f5112798bb59d46a0d468f838", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040141a4d714628c192b8ace1a42854da06e0e1ddb82a07618e4efb05d7095cd1eb65425078160594715eaf59fcb41c9e573fe10298c75c9e9135c775ca73f63d13aac0089524b475170d4391cc032a0543ea22dab60ea07538f3a37607f0d4ed516634fde545e2f0a6ba8d0d2fe6aded0a771b4b134a5a280e54799fa476ef0ec87d44e1c", + "wx" : "0141a4d714628c192b8ace1a42854da06e0e1ddb82a07618e4efb05d7095cd1eb65425078160594715eaf59fcb41c9e573fe10298c75c9e9135c775ca73f63d13aac", + "wy" : "0089524b475170d4391cc032a0543ea22dab60ea07538f3a37607f0d4ed516634fde545e2f0a6ba8d0d2fe6aded0a771b4b134a5a280e54799fa476ef0ec87d44e1c" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040141a4d714628c192b8ace1a42854da06e0e1ddb82a07618e4efb05d7095cd1eb65425078160594715eaf59fcb41c9e573fe10298c75c9e9135c775ca73f63d13aac0089524b475170d4391cc032a0543ea22dab60ea07538f3a37607f0d4ed516634fde545e2f0a6ba8d0d2fe6aded0a771b4b134a5a280e54799fa476ef0ec87d44e1c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBQaTXFGKMGSuKzhpChU2gbg4d24Kg\ndhjk77BdcJXNHrZUJQeBYFlHFer1n8tByeVz/hApjHXJ6RNcd1ynP2PROqwAiVJL\nR1Fw1DkcwDKgVD6iLatg6gdTjzo3YH8NTtUWY0/eVF4vCmuo0NL+at7Qp3G0sTSl\nooDlR5n6R27w7IfUThw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 385, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200da226366601afff780ffe082a0db8e74ea10d4864a5f6876c64f5e78d6598fad57297e92dea7d4453cffcd68ac111d465edc56209ea224f3176b3a8d41a8d1f070", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040147fbcc65d4818e029e0a3af13a1f7c90f0605a00cd0781200eb656a591d669a787620e6fc8cc594aa28a0b0f2939ec73472c494e09cecaf5f331dafd32d5ac31c30075432bdaeecaa0bec7feddc298c565723fb669ee76e38a4c5ff1701f1b38cda9dc9ac43bff18da2047e4dcd80c05a7bb7e7464829d608b68176b04c87f409f46d6", + "wx" : "0147fbcc65d4818e029e0a3af13a1f7c90f0605a00cd0781200eb656a591d669a787620e6fc8cc594aa28a0b0f2939ec73472c494e09cecaf5f331dafd32d5ac31c3", + "wy" : "75432bdaeecaa0bec7feddc298c565723fb669ee76e38a4c5ff1701f1b38cda9dc9ac43bff18da2047e4dcd80c05a7bb7e7464829d608b68176b04c87f409f46d6" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040147fbcc65d4818e029e0a3af13a1f7c90f0605a00cd0781200eb656a591d669a787620e6fc8cc594aa28a0b0f2939ec73472c494e09cecaf5f331dafd32d5ac31c30075432bdaeecaa0bec7feddc298c565723fb669ee76e38a4c5ff1701f1b38cda9dc9ac43bff18da2047e4dcd80c05a7bb7e7464829d608b68176b04c87f409f46d6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBR/vMZdSBjgKeCjrxOh98kPBgWgDN\nB4EgDrZWpZHWaaeHYg5vyMxZSqKKCw8pOexzRyxJTgnOyvXzMdr9MtWsMcMAdUMr\n2u7KoL7H/t3CmMVlcj+2ae5244pMX/FwHxs4zancmsQ7/xjaIEfk3NgMBae7fnRk\ngp1gi2gXawTIf0CfRtY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 386, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242011b3300d7ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6acca94cb85df5e6c1125394fcd34f6521ffdaddd98f88a99fedcedd9384288bb793cf2f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0400b5b1c3998589b25c96a700bbd450d04da1f273df8053767a3b03ed1a763ed089c0de99bcf54d49c1520d3a09b845296f0445b3bd5b87918d3752cf651e0ff3007b00e896380876b9419c56096914ff6eec01aee247eefef0741895f14ee280f360e11508c37826af82cd915b9002f046cb51008d9ead21124c591bd8265d1492b35ffb", + "wx" : "00b5b1c3998589b25c96a700bbd450d04da1f273df8053767a3b03ed1a763ed089c0de99bcf54d49c1520d3a09b845296f0445b3bd5b87918d3752cf651e0ff3007b", + "wy" : "00e896380876b9419c56096914ff6eec01aee247eefef0741895f14ee280f360e11508c37826af82cd915b9002f046cb51008d9ead21124c591bd8265d1492b35ffb" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400b5b1c3998589b25c96a700bbd450d04da1f273df8053767a3b03ed1a763ed089c0de99bcf54d49c1520d3a09b845296f0445b3bd5b87918d3752cf651e0ff3007b00e896380876b9419c56096914ff6eec01aee247eefef0741895f14ee280f360e11508c37826af82cd915b9002f046cb51008d9ead21124c591bd8265d1492b35ffb", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAtbHDmYWJslyWpwC71FDQTaHyc9+A\nU3Z6OwPtGnY+0InA3pm89U1JwVINOgm4RSlvBEWzvVuHkY03Us9lHg/zAHsA6JY4\nCHa5QZxWCWkU/27sAa7iR+7+8HQYlfFO4oDzYOEVCMN4Jq+CzZFbkALwRstRAI2e\nrSESTFkb2CZdFJKzX/s=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 387, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02420161be37ed5f748e06a89d72c4b7051cae809d9567848b1d8d7ed019221efb06ae81e1264ce49c5d29ee5fe22ccf70899002643aca7b99f57756f2639b6d459ae410", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0401aadb41fadc35cf6d11a7c7d01d049b74b37677f04e1bd3dc08450fabae28adcd2d135f966616d283fb18a5e69eabfe7ec41e1a0edb3682f1d39f2af64a94d602b9014ae81ebf5e3d2d0529479d4ae8eb05f4b42e519608466ad69e7662d6e9b236765f9be535c058f00f0866bbb4b172ef47a03cb97c58dde5750344bb293035f8e97e", + "wx" : "01aadb41fadc35cf6d11a7c7d01d049b74b37677f04e1bd3dc08450fabae28adcd2d135f966616d283fb18a5e69eabfe7ec41e1a0edb3682f1d39f2af64a94d602b9", + "wy" : "014ae81ebf5e3d2d0529479d4ae8eb05f4b42e519608466ad69e7662d6e9b236765f9be535c058f00f0866bbb4b172ef47a03cb97c58dde5750344bb293035f8e97e" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401aadb41fadc35cf6d11a7c7d01d049b74b37677f04e1bd3dc08450fabae28adcd2d135f966616d283fb18a5e69eabfe7ec41e1a0edb3682f1d39f2af64a94d602b9014ae81ebf5e3d2d0529479d4ae8eb05f4b42e519608466ad69e7662d6e9b236765f9be535c058f00f0866bbb4b172ef47a03cb97c58dde5750344bb293035f8e97e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBqttB+tw1z20Rp8fQHQSbdLN2d/BO\nG9PcCEUPq64orc0tE1+WZhbSg/sYpeaeq/5+xB4aDts2gvHTnyr2SpTWArkBSuge\nv149LQUpR51K6OsF9LQuUZYIRmrWnnZi1umyNnZfm+U1wFjwDwhmu7Sxcu9HoDy5\nfFjd5XUDRLspMDX46X4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 388, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201e9bbbd64270b9668f7623ef7cbead5483eb07b883cf39fb6884aab67dac7958b0e03144357b9433e69adc696c86c63a23d35724cbd749b7c34f8e34232d21ea420", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0401b706fc3f4aae5b86da261a66fbce47eb3b3e1e91544a40a9989fccf74154bbecac042dbbbf411a39090058b62c46fccd1d5eaba0c4879a688ea5fd0a7b4f9a0b4f01eda01930c6b22745a97f2d59e182598dfdfbfdb463335293901de7fc9d49cf55ed7fcf5d767d4c22f89f171b4137c8415c3ed438089270c41f88eadef3018140e1", + "wx" : "01b706fc3f4aae5b86da261a66fbce47eb3b3e1e91544a40a9989fccf74154bbecac042dbbbf411a39090058b62c46fccd1d5eaba0c4879a688ea5fd0a7b4f9a0b4f", + "wy" : "01eda01930c6b22745a97f2d59e182598dfdfbfdb463335293901de7fc9d49cf55ed7fcf5d767d4c22f89f171b4137c8415c3ed438089270c41f88eadef3018140e1" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401b706fc3f4aae5b86da261a66fbce47eb3b3e1e91544a40a9989fccf74154bbecac042dbbbf411a39090058b62c46fccd1d5eaba0c4879a688ea5fd0a7b4f9a0b4f01eda01930c6b22745a97f2d59e182598dfdfbfdb463335293901de7fc9d49cf55ed7fcf5d767d4c22f89f171b4137c8415c3ed438089270c41f88eadef3018140e1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBtwb8P0quW4baJhpm+85H6zs+HpFU\nSkCpmJ/M90FUu+ysBC27v0EaOQkAWLYsRvzNHV6roMSHmmiOpf0Ke0+aC08B7aAZ\nMMayJ0Wpfy1Z4YJZjf37/bRjM1KTkB3n/J1Jz1Xtf89ddn1MIvifFxtBN8hBXD7U\nOAiScMQfiOre8wGBQOE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 389, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200924449b6c96f3758e3b085c079714f11f28d039b11699f0e9b3e7c553c8fc6c8f5212fec5eac3068713b8ec72fc6e2a90872b94e161a89822887f4a9bd5c9efd74", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040058a1fa96111bf30be76c3b8ba4435666677b6dd05031b5c4a840e1ea81f6025f70e1d395ef63cb59fa71e3674cb678f7250887f5d734e3ec377dbe3ae637d24f82007a4eaf02cc57e658b5b9fa08ee30e0ef5b3429bb5a10438b0e05bacaebc60317010a334d7f896028aef620f5d9c7cabc38306e032b1b91c2376c3fef3e455a10df", + "wx" : "58a1fa96111bf30be76c3b8ba4435666677b6dd05031b5c4a840e1ea81f6025f70e1d395ef63cb59fa71e3674cb678f7250887f5d734e3ec377dbe3ae637d24f82", + "wy" : "7a4eaf02cc57e658b5b9fa08ee30e0ef5b3429bb5a10438b0e05bacaebc60317010a334d7f896028aef620f5d9c7cabc38306e032b1b91c2376c3fef3e455a10df" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040058a1fa96111bf30be76c3b8ba4435666677b6dd05031b5c4a840e1ea81f6025f70e1d395ef63cb59fa71e3674cb678f7250887f5d734e3ec377dbe3ae637d24f82007a4eaf02cc57e658b5b9fa08ee30e0ef5b3429bb5a10438b0e05bacaebc60317010a334d7f896028aef620f5d9c7cabc38306e032b1b91c2376c3fef3e455a10df", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAWKH6lhEb8wvnbDuLpENWZmd7bdBQ\nMbXEqEDh6oH2Al9w4dOV72PLWfpx42dMtnj3JQiH9dc04+w3fb465jfST4IAek6v\nAsxX5li1ufoI7jDg71s0KbtaEEOLDgW6yuvGAxcBCjNNf4lgKK72IPXZx8q8ODBu\nAysbkcI3bD/vPkVaEN8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 390, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201554a01552b58d67a13468d6bc6086329e09e5dbf28a11dccbf91ccc6e2a4cfd4e6a2c5278791c6490835a27b6f7abb8a690bb060de3deb85093d3ae16482c84f64", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0400303ba5ef90b05110002fdf74d2b8d4c7ab189c64004859c69d7c4730fcacb5f4d9b761ae987d1f3b63bb3ecb78aeecf4a04ff60f5f367a96ac2da8da27a3687a3e006673d0d4ccd4c3ce1abc9980fd1885002c3e7b86078214caf7f0962fa51e116363032d7a1b93c92a4d62827549d5a33e4e6b9b6c2ab6ad9c2a15e410c5b1a846b2", + "wx" : "303ba5ef90b05110002fdf74d2b8d4c7ab189c64004859c69d7c4730fcacb5f4d9b761ae987d1f3b63bb3ecb78aeecf4a04ff60f5f367a96ac2da8da27a3687a3e", + "wy" : "6673d0d4ccd4c3ce1abc9980fd1885002c3e7b86078214caf7f0962fa51e116363032d7a1b93c92a4d62827549d5a33e4e6b9b6c2ab6ad9c2a15e410c5b1a846b2" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400303ba5ef90b05110002fdf74d2b8d4c7ab189c64004859c69d7c4730fcacb5f4d9b761ae987d1f3b63bb3ecb78aeecf4a04ff60f5f367a96ac2da8da27a3687a3e006673d0d4ccd4c3ce1abc9980fd1885002c3e7b86078214caf7f0962fa51e116363032d7a1b93c92a4d62827549d5a33e4e6b9b6c2ab6ad9c2a15e410c5b1a846b2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAMDul75CwURAAL9900rjUx6sYnGQA\nSFnGnXxHMPystfTZt2GumH0fO2O7Pst4ruz0oE/2D182epasLajaJ6Noej4AZnPQ\n1MzUw84avJmA/RiFACw+e4YHghTK9/CWL6UeEWNjAy16G5PJKk1ignVJ1aM+Tmub\nbCq2rZwqFeQQxbGoRrI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 391, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200aa9402aa56b1acf4268d1ad78c10c653c13cbb7e51423b997f23998dc5499fa9d2f403c78b645cfba4eb78f595fe6d6f01dbaaf803f23ac263bf060baa74583abf", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0400a94eea843a5c49637041598e30c381f7173bf8cd127f3caf5c16cbc728aa4d99173fb38d6a1b1ec21e40336e8d802249272b0ccbf4f8c3636ef66290a81b58fa5b01116c23464fad61df8d2d5d1250a5a4c427e9c58e2cf1d059cdd88a7c34984fdd22a4cf18411e1b0224d444a5bd39d5fc97fc0b3648600f19d6ab80aa6a7c083a17", + "wx" : "00a94eea843a5c49637041598e30c381f7173bf8cd127f3caf5c16cbc728aa4d99173fb38d6a1b1ec21e40336e8d802249272b0ccbf4f8c3636ef66290a81b58fa5b", + "wy" : "01116c23464fad61df8d2d5d1250a5a4c427e9c58e2cf1d059cdd88a7c34984fdd22a4cf18411e1b0224d444a5bd39d5fc97fc0b3648600f19d6ab80aa6a7c083a17" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400a94eea843a5c49637041598e30c381f7173bf8cd127f3caf5c16cbc728aa4d99173fb38d6a1b1ec21e40336e8d802249272b0ccbf4f8c3636ef66290a81b58fa5b01116c23464fad61df8d2d5d1250a5a4c427e9c58e2cf1d059cdd88a7c34984fdd22a4cf18411e1b0224d444a5bd39d5fc97fc0b3648600f19d6ab80aa6a7c083a17", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAqU7qhDpcSWNwQVmOMMOB9xc7+M0S\nfzyvXBbLxyiqTZkXP7ONahsewh5AM26NgCJJJysMy/T4w2Nu9mKQqBtY+lsBEWwj\nRk+tYd+NLV0SUKWkxCfpxY4s8dBZzdiKfDSYT90ipM8YQR4bAiTURKW9OdX8l/wL\nNkhgDxnWq4CqanwIOhc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 392, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201ffde03ff820a836e39d3a8435219297da1db193d79e359663eb56654a7ee6f7eb996c8ef12f62344ad211b71057928f96ae75b58e23026476cfc40ed0ef7208a23", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04014f71d2ca5bd2051336854657f09a1fab14c7f2f7865d71bd3fa354bf27b69dc8738972140553b525658b6fd203cc05ca0822e0904bad21b632e0de74a2ad3f0e72004525f90519f9497425460b31cbb69ab3701a9ea68aaab72c6d65d364d0f0ed4d0524280f113bd69ef1ba9825202b10287a088c4bf30debecb720ac0739ec67434d", + "wx" : "014f71d2ca5bd2051336854657f09a1fab14c7f2f7865d71bd3fa354bf27b69dc8738972140553b525658b6fd203cc05ca0822e0904bad21b632e0de74a2ad3f0e72", + "wy" : "4525f90519f9497425460b31cbb69ab3701a9ea68aaab72c6d65d364d0f0ed4d0524280f113bd69ef1ba9825202b10287a088c4bf30debecb720ac0739ec67434d" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004014f71d2ca5bd2051336854657f09a1fab14c7f2f7865d71bd3fa354bf27b69dc8738972140553b525658b6fd203cc05ca0822e0904bad21b632e0de74a2ad3f0e72004525f90519f9497425460b31cbb69ab3701a9ea68aaab72c6d65d364d0f0ed4d0524280f113bd69ef1ba9825202b10287a088c4bf30debecb720ac0739ec67434d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBT3HSylvSBRM2hUZX8JofqxTH8veG\nXXG9P6NUvye2nchziXIUBVO1JWWLb9IDzAXKCCLgkEutIbYy4N50oq0/DnIARSX5\nBRn5SXQlRgsxy7aas3AanqaKqrcsbWXTZNDw7U0FJCgPETvWnvG6mCUgKxAoegiM\nS/MN6+y3IKwHOexnQ00=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 393, + "comment" : "edge case for u1", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242013375abb99e0cd3801e7c12993cfe720c83de278938a9e22bb6ea40a7c599ad05a5d3c8e5e5d7b3e16a99e528ef0ce91be0953cb1a9adf757f257554ca47ab053dc", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0401d2ecad921dd100a8dc1a7b824b0ac6c9b654ab179833c2881ce237f1b8497ade851302cf50ea5ea169c2a50c0c09cb6ea539a7290a0f3437044b7a2e9ca8d40500003fd5651535dcba1f331981c216a1c7d9842f65c5f38ca43dd71c41e19efcac384617656fd0afdd83c50c5e524e9b672b7aa8a66b289afa688e45ca6edb3477a8b0", + "wx" : "01d2ecad921dd100a8dc1a7b824b0ac6c9b654ab179833c2881ce237f1b8497ade851302cf50ea5ea169c2a50c0c09cb6ea539a7290a0f3437044b7a2e9ca8d40500", + "wy" : "3fd5651535dcba1f331981c216a1c7d9842f65c5f38ca43dd71c41e19efcac384617656fd0afdd83c50c5e524e9b672b7aa8a66b289afa688e45ca6edb3477a8b0" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401d2ecad921dd100a8dc1a7b824b0ac6c9b654ab179833c2881ce237f1b8497ade851302cf50ea5ea169c2a50c0c09cb6ea539a7290a0f3437044b7a2e9ca8d40500003fd5651535dcba1f331981c216a1c7d9842f65c5f38ca43dd71c41e19efcac384617656fd0afdd83c50c5e524e9b672b7aa8a66b289afa688e45ca6edb3477a8b0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB0uytkh3RAKjcGnuCSwrGybZUqxeY\nM8KIHOI38bhJet6FEwLPUOpeoWnCpQwMCctupTmnKQoPNDcES3ounKjUBQAAP9Vl\nFTXcuh8zGYHCFqHH2YQvZcXzjKQ91xxB4Z78rDhGF2Vv0K/dg8UMXlJOm2creqim\nayia+miORcpu2zR3qLA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 394, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc02415555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555554", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040165d67972a48fddc2f41c03f79ab5e0d42fd0992c013ead135c3394049645e26ad7c7be96510df59ba677dc94f1146e8e8e8fbe56debcb66920639581956b92b4d1008aeb66ee0be18abaa909a973c70b5749d688f8e2cd2e6e1613af93d0033492d26a6e82cfb80ac6925ac6bc79b984f73e3ebbff2f223a38676891c1ecd784a8a789", + "wx" : "0165d67972a48fddc2f41c03f79ab5e0d42fd0992c013ead135c3394049645e26ad7c7be96510df59ba677dc94f1146e8e8e8fbe56debcb66920639581956b92b4d1", + "wy" : "008aeb66ee0be18abaa909a973c70b5749d688f8e2cd2e6e1613af93d0033492d26a6e82cfb80ac6925ac6bc79b984f73e3ebbff2f223a38676891c1ecd784a8a789" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040165d67972a48fddc2f41c03f79ab5e0d42fd0992c013ead135c3394049645e26ad7c7be96510df59ba677dc94f1146e8e8e8fbe56debcb66920639581956b92b4d1008aeb66ee0be18abaa909a973c70b5749d688f8e2cd2e6e1613af93d0033492d26a6e82cfb80ac6925ac6bc79b984f73e3ebbff2f223a38676891c1ecd784a8a789", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBZdZ5cqSP3cL0HAP3mrXg1C/QmSwB\nPq0TXDOUBJZF4mrXx76WUQ31m6Z33JTxFG6Ojo++Vt68tmkgY5WBlWuStNEAiutm\n7gvhirqpCalzxwtXSdaI+OLNLm4WE6+T0AM0ktJqboLPuArGklrGvHm5hPc+Prv/\nLyI6OGdokcHs14Sop4k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 395, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242009f57708fa97eba94c6d4782cdd4e33bb95c1353bde095232e3e2bab277bb5d2b48f55a53ffe928d034c29970a9e5f384a003907d3d9b82a86817cc61fb17f4c59e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04018cd11252f0a434f446d3af18518c6b84cb0b7bf33758b4d83b97c2a56e0037b54d57d2b0b842e9c17d70504e01896389c066db8f2bfec025259a51dff51466830801cca54365156c59e2c73c17664f09fcdcfd5b910f9ab48d0899b6a7064de8b80fc7a992e47ee7f23ec82fd80179a19f4cf89b4c02b7218f435298da5d322a982c1e", + "wx" : "018cd11252f0a434f446d3af18518c6b84cb0b7bf33758b4d83b97c2a56e0037b54d57d2b0b842e9c17d70504e01896389c066db8f2bfec025259a51dff514668308", + "wy" : "01cca54365156c59e2c73c17664f09fcdcfd5b910f9ab48d0899b6a7064de8b80fc7a992e47ee7f23ec82fd80179a19f4cf89b4c02b7218f435298da5d322a982c1e" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004018cd11252f0a434f446d3af18518c6b84cb0b7bf33758b4d83b97c2a56e0037b54d57d2b0b842e9c17d70504e01896389c066db8f2bfec025259a51dff51466830801cca54365156c59e2c73c17664f09fcdcfd5b910f9ab48d0899b6a7064de8b80fc7a992e47ee7f23ec82fd80179a19f4cf89b4c02b7218f435298da5d322a982c1e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBjNESUvCkNPRG068YUYxrhMsLe/M3\nWLTYO5fCpW4AN7VNV9KwuELpwX1wUE4BiWOJwGbbjyv+wCUlmlHf9RRmgwgBzKVD\nZRVsWeLHPBdmTwn83P1bkQ+atI0ImbanBk3ouA/HqZLkfufyPsgv2AF5oZ9M+JtM\nArchj0NSmNpdMiqYLB4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 396, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024168d98fa90736eff3e90f8fcfe50838b6fa0bf2cde77bc51e3f41019c8006f4e9cbaeadce7dbb44462da6425be9cfdaecb234c41749ce695be1b5ead2e6b1205f35", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0401d6329a8afdea27cf1028a44d19c3c72927590d64628775f324514c81de301aa9be9c775c53a6349d1cbd5ecfc7bd39b373e613a10c1439441b141430fdadac168c00071342d63dba901b93bdc444a1fe2ec6a15108bdf49eb1dfd218373884520d84bce03c5012f5837051cb8abf6a0be78dfdfeeb3a5872dff75b3f874faa6d2243bf", + "wx" : "01d6329a8afdea27cf1028a44d19c3c72927590d64628775f324514c81de301aa9be9c775c53a6349d1cbd5ecfc7bd39b373e613a10c1439441b141430fdadac168c", + "wy" : "071342d63dba901b93bdc444a1fe2ec6a15108bdf49eb1dfd218373884520d84bce03c5012f5837051cb8abf6a0be78dfdfeeb3a5872dff75b3f874faa6d2243bf" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401d6329a8afdea27cf1028a44d19c3c72927590d64628775f324514c81de301aa9be9c775c53a6349d1cbd5ecfc7bd39b373e613a10c1439441b141430fdadac168c00071342d63dba901b93bdc444a1fe2ec6a15108bdf49eb1dfd218373884520d84bce03c5012f5837051cb8abf6a0be78dfdfeeb3a5872dff75b3f874faa6d2243bf", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB1jKaiv3qJ88QKKRNGcPHKSdZDWRi\nh3XzJFFMgd4wGqm+nHdcU6Y0nRy9Xs/HvTmzc+YToQwUOUQbFBQw/a2sFowABxNC\n1j26kBuTvcREof4uxqFRCL30nrHf0hg3OIRSDYS84DxQEvWDcFHLir9qC+eN/f7r\nOlhy3/dbP4dPqm0iQ78=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 397, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024200e97ae66bcd4cae36fffffffffffffffffffffffffffffffffffffffffffffffffd68bc9726f02dbf8598a98b3e5077eff6f2491eb678ed040fb338c084a9ea8a4c", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0401c963b64cdc3ecb1c35cda5ced9419ac146b060adb04c638cf6b66658013cb25e915a6ad0055668342881ed27f438b50ae4bb86ae3c7c02b727a130c77bad69800800481bfffaead856b4137fd4268ecd74a6c2d4bd6cd13998ce7f0e828b220135d8df23253e681dc90673e0537e7590769a2a441aaaaa3a9901c4fbe44fa9513951ef", + "wx" : "01c963b64cdc3ecb1c35cda5ced9419ac146b060adb04c638cf6b66658013cb25e915a6ad0055668342881ed27f438b50ae4bb86ae3c7c02b727a130c77bad698008", + "wy" : "481bfffaead856b4137fd4268ecd74a6c2d4bd6cd13998ce7f0e828b220135d8df23253e681dc90673e0537e7590769a2a441aaaaa3a9901c4fbe44fa9513951ef" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401c963b64cdc3ecb1c35cda5ced9419ac146b060adb04c638cf6b66658013cb25e915a6ad0055668342881ed27f438b50ae4bb86ae3c7c02b727a130c77bad69800800481bfffaead856b4137fd4268ecd74a6c2d4bd6cd13998ce7f0e828b220135d8df23253e681dc90673e0537e7590769a2a441aaaaa3a9901c4fbe44fa9513951ef", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQByWO2TNw+yxw1zaXO2UGawUawYK2w\nTGOM9rZmWAE8sl6RWmrQBVZoNCiB7Sf0OLUK5LuGrjx8ArcnoTDHe61pgAgASBv/\n+urYVrQTf9Qmjs10psLUvWzROZjOfw6CiyIBNdjfIyU+aB3JBnPgU351kHaaKkQa\nqqo6mQHE++RPqVE5Ue8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 398, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201ae66bcd4cae36ffffffffffffffffffffffffffffffffffffffffffffffffffffb3954212f8bea578d93e685e5dba329811b2542bb398233e2944bceb19263325d", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04005dfbc867d53c57b2945502b8e56d96ca2d4d485aa33452200a2f4ba16042357976afeecf3e63b2fdcd5cdd76076c1a73e496caf9d6de3e8831d955d138e05884ae01e04aa0b5360a0d3badd0120fbb8cc42a38bf1c61755d00858e40e4b10da4ea2575830dc92e312c20af2b8b167d7a58d178661d48cd932fe47a4bc7145e620ae22c", + "wx" : "5dfbc867d53c57b2945502b8e56d96ca2d4d485aa33452200a2f4ba16042357976afeecf3e63b2fdcd5cdd76076c1a73e496caf9d6de3e8831d955d138e05884ae", + "wy" : "01e04aa0b5360a0d3badd0120fbb8cc42a38bf1c61755d00858e40e4b10da4ea2575830dc92e312c20af2b8b167d7a58d178661d48cd932fe47a4bc7145e620ae22c" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004005dfbc867d53c57b2945502b8e56d96ca2d4d485aa33452200a2f4ba16042357976afeecf3e63b2fdcd5cdd76076c1a73e496caf9d6de3e8831d955d138e05884ae01e04aa0b5360a0d3badd0120fbb8cc42a38bf1c61755d00858e40e4b10da4ea2575830dc92e312c20af2b8b167d7a58d178661d48cd932fe47a4bc7145e620ae22c", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAXfvIZ9U8V7KUVQK45W2Wyi1NSFqj\nNFIgCi9LoWBCNXl2r+7PPmOy/c1c3XYHbBpz5JbK+dbePogx2VXROOBYhK4B4Eqg\ntTYKDTut0BIPu4zEKji/HGF1XQCFjkDksQ2k6iV1gw3JLjEsIK8rixZ9eljReGYd\nSM2TL+R6S8cUXmIK4iw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 399, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242015ccd79a995c6dffffffffffffffffffffffffffffffffffffffffffffffffffffc2121badb58a518afa8010a82c03cad31fa94bbbde96820166d27e644938e00b1", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040078be6c43e366cf63ddc4235e8b969386e95012fbca5cebf1b0a6fe3c03c1257df7cf47b002eb6c4497f310bff6131b5ccb54fd0e8ee7fcf6b49d487e1b54508f68009b61a547104c8516e0dc35d3d17659ca098d023b0593908fe979c29e62373738a3c30094ba47105a49edbc6e1d37cce317b49d2701470eeb53d9b24dce9d809166", + "wx" : "78be6c43e366cf63ddc4235e8b969386e95012fbca5cebf1b0a6fe3c03c1257df7cf47b002eb6c4497f310bff6131b5ccb54fd0e8ee7fcf6b49d487e1b54508f68", + "wy" : "009b61a547104c8516e0dc35d3d17659ca098d023b0593908fe979c29e62373738a3c30094ba47105a49edbc6e1d37cce317b49d2701470eeb53d9b24dce9d809166" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040078be6c43e366cf63ddc4235e8b969386e95012fbca5cebf1b0a6fe3c03c1257df7cf47b002eb6c4497f310bff6131b5ccb54fd0e8ee7fcf6b49d487e1b54508f68009b61a547104c8516e0dc35d3d17659ca098d023b0593908fe979c29e62373738a3c30094ba47105a49edbc6e1d37cce317b49d2701470eeb53d9b24dce9d809166", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAeL5sQ+Nmz2PdxCNei5aThulQEvvK\nXOvxsKb+PAPBJX33z0ewAutsRJfzEL/2Extcy1T9Do7n/Pa0nUh+G1RQj2gAm2Gl\nRxBMhRbg3DXT0XZZygmNAjsFk5CP6XnCnmI3NzijwwCUukcQWkntvG4dN8zjF7Sd\nJwFHDutT2bJNzp2AkWY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 400, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201cd4cae36fffffffffffffffffffffffffffffffffffffffffffffffffffffffffae18dcc11dff7526233d923a0b202cb29e713f22de8bb6ab0a12821c5abbe3f23", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040093f68961005f3040dc1a8ff1416c917bdcc77f1dfa85506c3bb62dac47f7be9529b4cbe57dd2c19e860bd2a0db71d47ef1eca8a20bfc3e0bc5e05c8303001c1960002b9a3d45f2f5120fee06445f0d34e6138e3ac5b16d2a22f0460cea258c368ca9e478eb7b8253e7c6f2f7250fdc7dcd7243761f8d56f2350ac51e47ee063f41da31", + "wx" : "0093f68961005f3040dc1a8ff1416c917bdcc77f1dfa85506c3bb62dac47f7be9529b4cbe57dd2c19e860bd2a0db71d47ef1eca8a20bfc3e0bc5e05c8303001c1960", + "wy" : "2b9a3d45f2f5120fee06445f0d34e6138e3ac5b16d2a22f0460cea258c368ca9e478eb7b8253e7c6f2f7250fdc7dcd7243761f8d56f2350ac51e47ee063f41da31" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040093f68961005f3040dc1a8ff1416c917bdcc77f1dfa85506c3bb62dac47f7be9529b4cbe57dd2c19e860bd2a0db71d47ef1eca8a20bfc3e0bc5e05c8303001c1960002b9a3d45f2f5120fee06445f0d34e6138e3ac5b16d2a22f0460cea258c368ca9e478eb7b8253e7c6f2f7250fdc7dcd7243761f8d56f2350ac51e47ee063f41da31", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAk/aJYQBfMEDcGo/xQWyRe9zHfx36\nhVBsO7YtrEf3vpUptMvlfdLBnoYL0qDbcdR+8eyoogv8PgvF4FyDAwAcGWAAK5o9\nRfL1Eg/uBkRfDTTmE446xbFtKiLwRgzqJYw2jKnkeOt7glPnxvL3JQ/cfc1yQ3Yf\njVbyNQrFHkfuBj9B2jE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 401, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308187024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024122e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8ba2e8b9c4c3f73cc816143fac3412b62de4c63db08f8c57e4c58c31f1b457ca5e57e20a", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04002d2d7d40bf17c4e8b18757e451ddded95e6b1007cd144809d21af31353b03038372c4af204d4414b71060b48b3a8439c632809bd33c4736263044405a1ad766e3600bb0c5a8848f93fa3e85376b012bf064e303746529a673b852bb5a969c24c0156a8dd26242d0aad4bae43e23631b01fb9d050f9744b59f3b52b1c572217a1d70588", + "wx" : "2d2d7d40bf17c4e8b18757e451ddded95e6b1007cd144809d21af31353b03038372c4af204d4414b71060b48b3a8439c632809bd33c4736263044405a1ad766e36", + "wy" : "00bb0c5a8848f93fa3e85376b012bf064e303746529a673b852bb5a969c24c0156a8dd26242d0aad4bae43e23631b01fb9d050f9744b59f3b52b1c572217a1d70588" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004002d2d7d40bf17c4e8b18757e451ddded95e6b1007cd144809d21af31353b03038372c4af204d4414b71060b48b3a8439c632809bd33c4736263044405a1ad766e3600bb0c5a8848f93fa3e85376b012bf064e303746529a673b852bb5a969c24c0156a8dd26242d0aad4bae43e23631b01fb9d050f9744b59f3b52b1c572217a1d70588", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQALS19QL8XxOixh1fkUd3e2V5rEAfN\nFEgJ0hrzE1OwMDg3LEryBNRBS3EGC0izqEOcYygJvTPEc2JjBEQFoa12bjYAuwxa\niEj5P6PoU3awEr8GTjA3RlKaZzuFK7WpacJMAVao3SYkLQqtS65D4jYxsB+50FD5\ndEtZ87UrHFciF6HXBYg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 402, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242010590b21642c8590b21642c8590b21642c8590b21642c8590b21642c8590b2164298eb57e5aff9343597a542d3132f9e734fdc305125e0ec139c5f780ee8e8cb9c2", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04018ac11dfe62d1f2a8202732c79b423d29f43bec4db6080a220796a10f2685f92c71c7f72d9da0a8acb22680cca018eba2e8ba3bfde1db9a4ef3b97da16474364e96005aad3b286707bd3ad07a060cabca49c53de4f56c05a0a8de40fd969d7d4f995f7c6701fe5c5321f85318b98be66251fa490088fd727da2454e00b3b94dc6e1241b", + "wx" : "018ac11dfe62d1f2a8202732c79b423d29f43bec4db6080a220796a10f2685f92c71c7f72d9da0a8acb22680cca018eba2e8ba3bfde1db9a4ef3b97da16474364e96", + "wy" : "5aad3b286707bd3ad07a060cabca49c53de4f56c05a0a8de40fd969d7d4f995f7c6701fe5c5321f85318b98be66251fa490088fd727da2454e00b3b94dc6e1241b" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004018ac11dfe62d1f2a8202732c79b423d29f43bec4db6080a220796a10f2685f92c71c7f72d9da0a8acb22680cca018eba2e8ba3bfde1db9a4ef3b97da16474364e96005aad3b286707bd3ad07a060cabca49c53de4f56c05a0a8de40fd969d7d4f995f7c6701fe5c5321f85318b98be66251fa490088fd727da2454e00b3b94dc6e1241b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBisEd/mLR8qggJzLHm0I9KfQ77E22\nCAoiB5ahDyaF+Sxxx/ctnaCorLImgMygGOui6Lo7/eHbmk7zuX2hZHQ2TpYAWq07\nKGcHvTrQegYMq8pJxT3k9WwFoKjeQP2WnX1PmV98ZwH+XFMh+FMYuYvmYlH6SQCI\n/XJ9okVOALO5TcbhJBs=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 403, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201a4924924924924924924924924924924924924924924924924924924924924924445e10670ed0437c9db4125ac4175fbd70e9bd1799a85f44ca0a8e61a3354e808", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040051b2c3e0494564ed48ed3479b596ea4078240550a3c28da33d71d259e8e623e37ab43f396c49363f31c8de8a4644d37e94ed80e0dd4f92c3df2106e2795c2798b800a530d5e961f0696bbeb962aca8e71f65956ae04cdc22a4ac65146943e99a4a2fdb477df75aa069c8dd37a5daaea3848079a6a7bc03e0faa3d65d42f8053db2078b", + "wx" : "51b2c3e0494564ed48ed3479b596ea4078240550a3c28da33d71d259e8e623e37ab43f396c49363f31c8de8a4644d37e94ed80e0dd4f92c3df2106e2795c2798b8", + "wy" : "00a530d5e961f0696bbeb962aca8e71f65956ae04cdc22a4ac65146943e99a4a2fdb477df75aa069c8dd37a5daaea3848079a6a7bc03e0faa3d65d42f8053db2078b" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040051b2c3e0494564ed48ed3479b596ea4078240550a3c28da33d71d259e8e623e37ab43f396c49363f31c8de8a4644d37e94ed80e0dd4f92c3df2106e2795c2798b800a530d5e961f0696bbeb962aca8e71f65956ae04cdc22a4ac65146943e99a4a2fdb477df75aa069c8dd37a5daaea3848079a6a7bc03e0faa3d65d42f8053db2078b", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAUbLD4ElFZO1I7TR5tZbqQHgkBVCj\nwo2jPXHSWejmI+N6tD85bEk2PzHI3opGRNN+lO2A4N1PksPfIQbieVwnmLgApTDV\n6WHwaWu+uWKsqOcfZZVq4EzcIqSsZRRpQ+maSi/bR333WqBpyN03pdquo4SAeaan\nvAPg+qPWXUL4BT2yB4s=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 404, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201d5555555555555555555555555555555555555555555555555555555555555554fa6dbdcd91484ebc0d521569e4c5efb25910b1f0ddef19d0410c50c73e68db95f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0401ba31a6f9c2d227da57de00759e2e844d607bc9bd92bcdf282006884dc347c9284f0dc0623af1e9db22117364a7a80a5b067efa19b204dac8faf2230d80b704addc00d88b761cd3a4b0947bfc17e204b4d751f76880a82c9b7c6fd93ded55883c995002d8b8bfff1e021189c08d829d16b088f4fb39ad9456eafbc77c20353bc0f3c038", + "wx" : "01ba31a6f9c2d227da57de00759e2e844d607bc9bd92bcdf282006884dc347c9284f0dc0623af1e9db22117364a7a80a5b067efa19b204dac8faf2230d80b704addc", + "wy" : "00d88b761cd3a4b0947bfc17e204b4d751f76880a82c9b7c6fd93ded55883c995002d8b8bfff1e021189c08d829d16b088f4fb39ad9456eafbc77c20353bc0f3c038" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401ba31a6f9c2d227da57de00759e2e844d607bc9bd92bcdf282006884dc347c9284f0dc0623af1e9db22117364a7a80a5b067efa19b204dac8faf2230d80b704addc00d88b761cd3a4b0947bfc17e204b4d751f76880a82c9b7c6fd93ded55883c995002d8b8bfff1e021189c08d829d16b088f4fb39ad9456eafbc77c20353bc0f3c038", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBujGm+cLSJ9pX3gB1ni6ETWB7yb2S\nvN8oIAaITcNHyShPDcBiOvHp2yIRc2SnqApbBn76GbIE2sj68iMNgLcErdwA2It2\nHNOksJR7/BfiBLTXUfdogKgsm3xv2T3tVYg8mVAC2Li//x4CEYnAjYKdFrCI9Ps5\nrZRW6vvHfCA1O8DzwDg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 405, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa4fc31322e69da41162a76abf3a1b4507ae66074633446f259661a61c93be30eb5", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040137bbb48ef281133849ed723f5662a19fff9cc7389a0170d311bd34f4dbdc656246db695ea0712d8aceff9d1d0ef7921ec2e3f8b533e4ca122f9f7f4460738893340163e4500d998095f60fa3fed4149d2d9b5b018e03eb5344efe8ffcc1c7d276e7401a4df639c4ab108820062495471be7b29398aadbae440a9bdcd55cf0bb5d96f79", + "wx" : "0137bbb48ef281133849ed723f5662a19fff9cc7389a0170d311bd34f4dbdc656246db695ea0712d8aceff9d1d0ef7921ec2e3f8b533e4ca122f9f7f446073889334", + "wy" : "0163e4500d998095f60fa3fed4149d2d9b5b018e03eb5344efe8ffcc1c7d276e7401a4df639c4ab108820062495471be7b29398aadbae440a9bdcd55cf0bb5d96f79" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040137bbb48ef281133849ed723f5662a19fff9cc7389a0170d311bd34f4dbdc656246db695ea0712d8aceff9d1d0ef7921ec2e3f8b533e4ca122f9f7f4460738893340163e4500d998095f60fa3fed4149d2d9b5b018e03eb5344efe8ffcc1c7d276e7401a4df639c4ab108820062495471be7b29398aadbae440a9bdcd55cf0bb5d96f79", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBN7u0jvKBEzhJ7XI/VmKhn/+cxzia\nAXDTEb009NvcZWJG22leoHEtis7/nR0O95IewuP4tTPkyhIvn39EYHOIkzQBY+RQ\nDZmAlfYPo/7UFJ0tm1sBjgPrU0Tv6P/MHH0nbnQBpN9jnEqxCIIAYklUcb57KTmK\nrbrkQKm9zVXPC7XZb3k=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 406, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0242017ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa51868783bf2f966b7fcc0148f709a5d03bb5c9b8899c47aebb6fb71e9138640b", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0400726dda8b7b6ed25f97f1fc6c3ccf554d60fc71e4fab2a578286d32612e7f3e669faed0b97619aef2d5aff9c8ffd987feddc0d6c38b7eec028191400874803f498b00c0b8870c612e06c13c57ed6f7ef3d53b5e5fa2db62707b034b5ec13fb47018e31da7ecc991d575943468d701e118eca33122cf6d394b8a6ec0f45bc09701603a26", + "wx" : "726dda8b7b6ed25f97f1fc6c3ccf554d60fc71e4fab2a578286d32612e7f3e669faed0b97619aef2d5aff9c8ffd987feddc0d6c38b7eec028191400874803f498b", + "wy" : "00c0b8870c612e06c13c57ed6f7ef3d53b5e5fa2db62707b034b5ec13fb47018e31da7ecc991d575943468d701e118eca33122cf6d394b8a6ec0f45bc09701603a26" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400726dda8b7b6ed25f97f1fc6c3ccf554d60fc71e4fab2a578286d32612e7f3e669faed0b97619aef2d5aff9c8ffd987feddc0d6c38b7eec028191400874803f498b00c0b8870c612e06c13c57ed6f7ef3d53b5e5fa2db62707b034b5ec13fb47018e31da7ecc991d575943468d701e118eca33122cf6d394b8a6ec0f45bc09701603a26", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAcm3ai3tu0l+X8fxsPM9VTWD8ceT6\nsqV4KG0yYS5/PmafrtC5dhmu8tWv+cj/2Yf+3cDWw4t+7AKBkUAIdIA/SYsAwLiH\nDGEuBsE8V+1vfvPVO15fotticHsDS17BP7RwGOMdp+zJkdV1lDRo1wHhGOyjMSLP\nbTlLim7A9FvAlwFgOiY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 407, + "comment" : "edge case for u2", + "msg" : "313233343030", + "sig" : "308188024200fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc024201346cc7d4839b77f9f487c7e7f2841c5b7d05f966f3bde28f1fa080ce40037a74e3001a2b00bd39ee4c93072e9963724941383cf0812c02d1c838ad4502a12c619f", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04016fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc27970083f130792d6c45c8f2a67471e51246e2b8781465b8291cbda66d22719cd536bf801e0076030919d5701732ce7678bf472846ed0777937ed77caad74d05664614a2", + "wx" : "016fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc2797", + "wy" : "0083f130792d6c45c8f2a67471e51246e2b8781465b8291cbda66d22719cd536bf801e0076030919d5701732ce7678bf472846ed0777937ed77caad74d05664614a2" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004016fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc27970083f130792d6c45c8f2a67471e51246e2b8781465b8291cbda66d22719cd536bf801e0076030919d5701732ce7678bf472846ed0777937ed77caad74d05664614a2", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBb86fN1u9KWitqvNXVZUSnvPnIcO3\nyD1aSnn0td+72x9m2nJD5RIMXb174coHPgS0zFjKjOLzT/aj0CqSm/L8J5cAg/Ew\neS1sRcjypnRx5RJG4rh4FGW4KRy9pm0icZzVNr+AHgB2AwkZ1XAXMs52eL9HKEbt\nB3eTftd8qtdNBWZGFKI=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 408, + "comment" : "point duplication during verification", + "msg" : "313233343030", + "sig" : "30818802420090c8d0d718cb9d8d81094e6d068fb13c16b4df8c77bac676dddfe3e68855bed06b9ba8d0f8a80edce03a9fac7da561e24b1cd22d459239a146695a671f81f73aaf024201150b0fe9f0dff27fa180cc9442c3bfc9e395232898607b110a51bcb1086cb9726e251a07c9557808df32460715950a3dc446ae4229b9ed59fe241b389aee3a6963", + "result" : "valid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04016fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc2797017c0ecf86d293ba370d598b8e1aedb91d4787eb9a47d6e3425992dd8e632ac9407fe1ff89fcf6e62a8fe8cd31898740b8d7b912f8886c8128835528b2fa99b9eb5d", + "wx" : "016fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc2797", + "wy" : "017c0ecf86d293ba370d598b8e1aedb91d4787eb9a47d6e3425992dd8e632ac9407fe1ff89fcf6e62a8fe8cd31898740b8d7b912f8886c8128835528b2fa99b9eb5d" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004016fce9f375bbd2968adaaf3575595129ef3e721c3b7c83d5a4a79f4b5dfbbdb1f66da7243e5120c5dbd7be1ca073e04b4cc58ca8ce2f34ff6a3d02a929bf2fc2797017c0ecf86d293ba370d598b8e1aedb91d4787eb9a47d6e3425992dd8e632ac9407fe1ff89fcf6e62a8fe8cd31898740b8d7b912f8886c8128835528b2fa99b9eb5d", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBb86fN1u9KWitqvNXVZUSnvPnIcO3\nyD1aSnn0td+72x9m2nJD5RIMXb174coHPgS0zFjKjOLzT/aj0CqSm/L8J5cBfA7P\nhtKTujcNWYuOGu25HUeH65pH1uNCWZLdjmMqyUB/4f+J/PbmKo/ozTGJh0C417kS\n+IhsgSiDVSiy+pm5610=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 409, + "comment" : "duplication bug", + "msg" : "313233343030", + "sig" : "30818802420090c8d0d718cb9d8d81094e6d068fb13c16b4df8c77bac676dddfe3e68855bed06b9ba8d0f8a80edce03a9fac7da561e24b1cd22d459239a146695a671f81f73aaf024201150b0fe9f0dff27fa180cc9442c3bfc9e395232898607b110a51bcb1086cb9726e251a07c9557808df32460715950a3dc446ae4229b9ed59fe241b389aee3a6963", + "result" : "invalid", + "flags" : [ + "PointDuplication" + ] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040110fb89aff135edb801a1cb5bc49525b81dc74da45090d228122871814f489fdcb02ebee46b703e6b4e6af56c5024422b31fd4252c44d0bfd29d945de782d98543f01ec425b4c4928e12b619227f1da6d0a9675070d9c5b49ca523050acb718e62643b0e5801543b76dc11f8d694ba09436d8391b477ad2c143ec50c2384c4f688512dc", + "wx" : "0110fb89aff135edb801a1cb5bc49525b81dc74da45090d228122871814f489fdcb02ebee46b703e6b4e6af56c5024422b31fd4252c44d0bfd29d945de782d98543f", + "wy" : "01ec425b4c4928e12b619227f1da6d0a9675070d9c5b49ca523050acb718e62643b0e5801543b76dc11f8d694ba09436d8391b477ad2c143ec50c2384c4f688512dc" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040110fb89aff135edb801a1cb5bc49525b81dc74da45090d228122871814f489fdcb02ebee46b703e6b4e6af56c5024422b31fd4252c44d0bfd29d945de782d98543f01ec425b4c4928e12b619227f1da6d0a9675070d9c5b49ca523050acb718e62643b0e5801543b76dc11f8d694ba09436d8391b477ad2c143ec50c2384c4f688512dc", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBEPuJr/E17bgBoctbxJUluB3HTaRQ\nkNIoEihxgU9In9ywLr7ka3A+a05q9WxQJEIrMf1CUsRNC/0p2UXeeC2YVD8B7EJb\nTEko4Sthkifx2m0KlnUHDZxbScpSMFCstxjmJkOw5YAVQ7dtwR+NaUuglDbYORtH\netLBQ+xQwjhMT2iFEtw=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 410, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3047020101024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0401c693a3fccbc9f625284239c2725f2a5c90b29b7ce3d07730f7de6031c9e74446d217888ae023aae23df6a4aa153f58c79597d57f42ce5c1354e5dc43a5eb311e13015f99658443b2e39c3edcbcda70707fc5a4d39545eabe354816d09284a6265e47ebf0a47355828e818a767f8452a6d18451e0e3817a896ff404cb1611bfc4c4b4a3", + "wx" : "01c693a3fccbc9f625284239c2725f2a5c90b29b7ce3d07730f7de6031c9e74446d217888ae023aae23df6a4aa153f58c79597d57f42ce5c1354e5dc43a5eb311e13", + "wy" : "015f99658443b2e39c3edcbcda70707fc5a4d39545eabe354816d09284a6265e47ebf0a47355828e818a767f8452a6d18451e0e3817a896ff404cb1611bfc4c4b4a3" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401c693a3fccbc9f625284239c2725f2a5c90b29b7ce3d07730f7de6031c9e74446d217888ae023aae23df6a4aa153f58c79597d57f42ce5c1354e5dc43a5eb311e13015f99658443b2e39c3edcbcda70707fc5a4d39545eabe354816d09284a6265e47ebf0a47355828e818a767f8452a6d18451e0e3817a896ff404cb1611bfc4c4b4a3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBxpOj/MvJ9iUoQjnCcl8qXJCym3zj\n0Hcw995gMcnnREbSF4iK4COq4j32pKoVP1jHlZfVf0LOXBNU5dxDpesxHhMBX5ll\nhEOy45w+3LzacHB/xaTTlUXqvjVIFtCShKYmXkfr8KRzVYKOgYp2f4RSptGEUeDj\ngXqJb/QEyxYRv8TEtKM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 411, + "comment" : "point with x-coordinate 0", + "msg" : "313233343030", + "sig" : "3081870242020000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024166666666666666666666666666666666666666666666666666666666666666666543814e4d8ca31e157ff599db649b87900bf128581b85a7efbf1657d2e9d81401", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04017d7bf723678df574ce4366741e1d3787f834af9997b41c8260a074cb1f325d2bae9f8565dc6b51b6cb02dceeb5a1b774ee8dd7057c99e2d94c3c71299a9ce0f1b00162c65632fff88bdbb17ce2525ccac8df37c501ab0e6626e273fb6cf99000424344c0ac539c9fd6c4f3d28876b257c010d347a45bb010cc058443843a758328d491", + "wx" : "017d7bf723678df574ce4366741e1d3787f834af9997b41c8260a074cb1f325d2bae9f8565dc6b51b6cb02dceeb5a1b774ee8dd7057c99e2d94c3c71299a9ce0f1b0", + "wy" : "0162c65632fff88bdbb17ce2525ccac8df37c501ab0e6626e273fb6cf99000424344c0ac539c9fd6c4f3d28876b257c010d347a45bb010cc058443843a758328d491" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004017d7bf723678df574ce4366741e1d3787f834af9997b41c8260a074cb1f325d2bae9f8565dc6b51b6cb02dceeb5a1b774ee8dd7057c99e2d94c3c71299a9ce0f1b00162c65632fff88bdbb17ce2525ccac8df37c501ab0e6626e273fb6cf99000424344c0ac539c9fd6c4f3d28876b257c010d347a45bb010cc058443843a758328d491", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBfXv3I2eN9XTOQ2Z0Hh03h/g0r5mX\ntByCYKB0yx8yXSuun4Vl3GtRtssC3O61obd07o3XBXyZ4tlMPHEpmpzg8bABYsZW\nMv/4i9uxfOJSXMrI3zfFAasOZibic/ts+ZAAQkNEwKxTnJ/WxPPSiHayV8AQ00ek\nW7AQzAWEQ4Q6dYMo1JE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 412, + "comment" : "comparison with point at infinity ", + "msg" : "313233343030", + "sig" : "308187024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad024166666666666666666666666666666666666666666666666666666666666666666543814e4d8ca31e157ff599db649b87900bf128581b85a7efbf1657d2e9d81401", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0401e06db423a902e239b97340ab052534ead37e79412c675bf0eb823999e6b731040bff2b0e4fa64edf3962a328921ea5ae4e8f4079eab439e12f92335dfc4863c07f007ee9f0ecb409cb133c0cd08b85e840b076f3d615e1ef1393b5222338b227d768003da5f3ba1f72f6654ca54ac11c2ba91a6cb5883d6d1a82304ad2b79de09215f3", + "wx" : "01e06db423a902e239b97340ab052534ead37e79412c675bf0eb823999e6b731040bff2b0e4fa64edf3962a328921ea5ae4e8f4079eab439e12f92335dfc4863c07f", + "wy" : "7ee9f0ecb409cb133c0cd08b85e840b076f3d615e1ef1393b5222338b227d768003da5f3ba1f72f6654ca54ac11c2ba91a6cb5883d6d1a82304ad2b79de09215f3" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401e06db423a902e239b97340ab052534ead37e79412c675bf0eb823999e6b731040bff2b0e4fa64edf3962a328921ea5ae4e8f4079eab439e12f92335dfc4863c07f007ee9f0ecb409cb133c0cd08b85e840b076f3d615e1ef1393b5222338b227d768003da5f3ba1f72f6654ca54ac11c2ba91a6cb5883d6d1a82304ad2b79de09215f3", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB4G20I6kC4jm5c0CrBSU06tN+eUEs\nZ1vw64I5mea3MQQL/ysOT6ZO3zlioyiSHqWuTo9Aeeq0OeEvkjNd/EhjwH8Afunw\n7LQJyxM8DNCLhehAsHbz1hXh7xOTtSIjOLIn12gAPaXzuh9y9mVMpUrBHCupGmy1\niD1tGoIwStK3neCSFfM=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 413, + "comment" : "extreme value for k and edgecase s", + "msg" : "313233343030", + "sig" : "3081870241433c219024277e7e682fcb288148c282747403279b1ccc06352c6e5505d769be97b3b204da6ef55507aa104a3a35c5af41cf2fa364d60fd967f43e3933ba6d783d024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04015053744d53811dbed8880f38d3a34578a7f1c172ec65bd8ad8183ba0ae10093416107f3c942742bde60719949b2c4f026f43582125c99ed48cbc7c5a051a5a744800b36d4c91a2b0367c566b2c12981ce0fdbc3beb983717403f69bf4264fc6182478af0b236ff120bcfca116924c552abef6663b6023be1986b70206d9bb89b5ed298", + "wx" : "015053744d53811dbed8880f38d3a34578a7f1c172ec65bd8ad8183ba0ae10093416107f3c942742bde60719949b2c4f026f43582125c99ed48cbc7c5a051a5a7448", + "wy" : "00b36d4c91a2b0367c566b2c12981ce0fdbc3beb983717403f69bf4264fc6182478af0b236ff120bcfca116924c552abef6663b6023be1986b70206d9bb89b5ed298" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004015053744d53811dbed8880f38d3a34578a7f1c172ec65bd8ad8183ba0ae10093416107f3c942742bde60719949b2c4f026f43582125c99ed48cbc7c5a051a5a744800b36d4c91a2b0367c566b2c12981ce0fdbc3beb983717403f69bf4264fc6182478af0b236ff120bcfca116924c552abef6663b6023be1986b70206d9bb89b5ed298", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBUFN0TVOBHb7YiA8406NFeKfxwXLs\nZb2K2Bg7oK4QCTQWEH88lCdCveYHGZSbLE8Cb0NYISXJntSMvHxaBRpadEgAs21M\nkaKwNnxWaywSmBzg/bw765g3F0A/ab9CZPxhgkeK8LI2/xILz8oRaSTFUqvvZmO2\nAjvhmGtwIG2buJte0pg=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 414, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3081860241433c219024277e7e682fcb288148c282747403279b1ccc06352c6e5505d769be97b3b204da6ef55507aa104a3a35c5af41cf2fa364d60fd967f43e3933ba6d783d0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0401fb2e26596cc80473917dd46b4a1d14bd9a1ca9769dd12bfac1bff17cdc282e74c73a801ec1be83edfe4bfe9813ec943ac151678f0a9a0bf27d9ef308177eb0400f019e03a5da3da67e6b8d068dbdacf091b9d5efadaf63f4a7e9c6b6ed0a1c9a5d3cbc3e0244d481066018fba7674a2b59139a5656780563bb4618014f176752e177e0", + "wx" : "01fb2e26596cc80473917dd46b4a1d14bd9a1ca9769dd12bfac1bff17cdc282e74c73a801ec1be83edfe4bfe9813ec943ac151678f0a9a0bf27d9ef308177eb0400f", + "wy" : "019e03a5da3da67e6b8d068dbdacf091b9d5efadaf63f4a7e9c6b6ed0a1c9a5d3cbc3e0244d481066018fba7674a2b59139a5656780563bb4618014f176752e177e0" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401fb2e26596cc80473917dd46b4a1d14bd9a1ca9769dd12bfac1bff17cdc282e74c73a801ec1be83edfe4bfe9813ec943ac151678f0a9a0bf27d9ef308177eb0400f019e03a5da3da67e6b8d068dbdacf091b9d5efadaf63f4a7e9c6b6ed0a1c9a5d3cbc3e0244d481066018fba7674a2b59139a5656780563bb4618014f176752e177e0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB+y4mWWzIBHORfdRrSh0UvZocqXad\n0Sv6wb/xfNwoLnTHOoAewb6D7f5L/pgT7JQ6wVFnjwqaC/J9nvMIF36wQA8BngOl\n2j2mfmuNBo29rPCRudXvra9j9KfpxrbtChyaXTy8PgJE1IEGYBj7p2dKK1kTmlZW\neAVju0YYAU8XZ1Lhd+A=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 415, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3081870241433c219024277e7e682fcb288148c282747403279b1ccc06352c6e5505d769be97b3b204da6ef55507aa104a3a35c5af41cf2fa364d60fd967f43e3933ba6d783d0242019999999999999999999999999999999999999999999999999999999999999999950e053936328c7855ffd6676d926e1e402fc4a1606e169fbefc595f4ba7605007", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04008422cea9dcf8ae01f7a157888f018a40a66461d3566ec4a4dfc89ecb3c2404be734d329137d630387b012d033221857d5bfb290fa8027640b4063072a3e5b14c860025a219e724b81814901a677a8bee9b716b33b16a5b65f2272956a46b5e8683dc896984309ac79449657a1895c9f62bde99c7f5e24ed2defbc9f8dde35ebd0bddc1", + "wx" : "008422cea9dcf8ae01f7a157888f018a40a66461d3566ec4a4dfc89ecb3c2404be734d329137d630387b012d033221857d5bfb290fa8027640b4063072a3e5b14c86", + "wy" : "25a219e724b81814901a677a8bee9b716b33b16a5b65f2272956a46b5e8683dc896984309ac79449657a1895c9f62bde99c7f5e24ed2defbc9f8dde35ebd0bddc1" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004008422cea9dcf8ae01f7a157888f018a40a66461d3566ec4a4dfc89ecb3c2404be734d329137d630387b012d033221857d5bfb290fa8027640b4063072a3e5b14c860025a219e724b81814901a677a8bee9b716b33b16a5b65f2272956a46b5e8683dc896984309ac79449657a1895c9f62bde99c7f5e24ed2defbc9f8dde35ebd0bddc1", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAhCLOqdz4rgH3oVeIjwGKQKZkYdNW\nbsSk38ieyzwkBL5zTTKRN9YwOHsBLQMyIYV9W/spD6gCdkC0BjByo+WxTIYAJaIZ\n5yS4GBSQGmd6i+6bcWszsWpbZfInKVaka16Gg9yJaYQwmseUSWV6GJXJ9ivemcf1\n4k7S3vvJ+N3jXr0L3cE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 416, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3081860241433c219024277e7e682fcb288148c282747403279b1ccc06352c6e5505d769be97b3b204da6ef55507aa104a3a35c5af41cf2fa364d60fd967f43e3933ba6d783d024166666666666666666666666666666666666666666666666666666666666666666543814e4d8ca31e157ff599db649b87900bf128581b85a7efbf1657d2e9d81402", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0401bc19cf4b94bcd34114ce83c5f1a7e048e2fc4fd457d57e39b3da29f4766acbaef1c10cb13c796a6fffb56d6a392e47b6c74522df7fa02754c33d95b1a9a3c92a1500f5744c2bed308cb4f41b512e632cd01d270ef1a0d3f47ea780e73c6a6c9ea6a996faef4d282896c64fa50f5b04e204c56b504bc122ffba7aea4574d7d7ab6303c0", + "wx" : "01bc19cf4b94bcd34114ce83c5f1a7e048e2fc4fd457d57e39b3da29f4766acbaef1c10cb13c796a6fffb56d6a392e47b6c74522df7fa02754c33d95b1a9a3c92a15", + "wy" : "00f5744c2bed308cb4f41b512e632cd01d270ef1a0d3f47ea780e73c6a6c9ea6a996faef4d282896c64fa50f5b04e204c56b504bc122ffba7aea4574d7d7ab6303c0" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401bc19cf4b94bcd34114ce83c5f1a7e048e2fc4fd457d57e39b3da29f4766acbaef1c10cb13c796a6fffb56d6a392e47b6c74522df7fa02754c33d95b1a9a3c92a1500f5744c2bed308cb4f41b512e632cd01d270ef1a0d3f47ea780e73c6a6c9ea6a996faef4d282896c64fa50f5b04e204c56b504bc122ffba7aea4574d7d7ab6303c0", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBvBnPS5S800EUzoPF8afgSOL8T9RX\n1X45s9op9HZqy67xwQyxPHlqb/+1bWo5Lke2x0Ui33+gJ1TDPZWxqaPJKhUA9XRM\nK+0wjLT0G1EuYyzQHScO8aDT9H6ngOc8amyepqmW+u9NKCiWxk+lD1sE4gTFa1BL\nwSL/unrqRXTX16tjA8A=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 417, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "3081870241433c219024277e7e682fcb288148c282747403279b1ccc06352c6e5505d769be97b3b204da6ef55507aa104a3a35c5af41cf2fa364d60fd967f43e3933ba6d783d024201b6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db68d82a2b033628ca12ffd36ed0d3bf206957c063c2bf183d7132f20aac7c797a51", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04017b0ebce08b09f21e30d15e0edd9fcdf24ab4831ec8a65a3d1e38f72b15f0115da6ed1885e42fcfae31c0914b71e9df2cd106adc039a82810a92924dd154dc05da300c614d1afc4f63de3803bb5490a34e1e2fab9eb78422b21d377fc0d7f991b938c22f4d7dd665f8dd21fadde43172a55f80d05cc4557b6663f9e7a3fe490d25c5531", + "wx" : "017b0ebce08b09f21e30d15e0edd9fcdf24ab4831ec8a65a3d1e38f72b15f0115da6ed1885e42fcfae31c0914b71e9df2cd106adc039a82810a92924dd154dc05da3", + "wy" : "00c614d1afc4f63de3803bb5490a34e1e2fab9eb78422b21d377fc0d7f991b938c22f4d7dd665f8dd21fadde43172a55f80d05cc4557b6663f9e7a3fe490d25c5531" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004017b0ebce08b09f21e30d15e0edd9fcdf24ab4831ec8a65a3d1e38f72b15f0115da6ed1885e42fcfae31c0914b71e9df2cd106adc039a82810a92924dd154dc05da300c614d1afc4f63de3803bb5490a34e1e2fab9eb78422b21d377fc0d7f991b938c22f4d7dd665f8dd21fadde43172a55f80d05cc4557b6663f9e7a3fe490d25c5531", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBew684IsJ8h4w0V4O3Z/N8kq0gx7I\nplo9Hjj3KxXwEV2m7RiF5C/PrjHAkUtx6d8s0QatwDmoKBCpKSTdFU3AXaMAxhTR\nr8T2PeOAO7VJCjTh4vq563hCKyHTd/wNf5kbk4wi9NfdZl+N0h+t3kMXKlX4DQXM\nRVe2Zj+eej/kkNJcVTE=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 418, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "3081860241433c219024277e7e682fcb288148c282747403279b1ccc06352c6e5505d769be97b3b204da6ef55507aa104a3a35c5af41cf2fa364d60fd967f43e3933ba6d783d02410eb10e5ab95f2f26a40700b1300fb8c3c8d5384ffbecf1fdb9e11e67cb7fd6a7f503e6e25ac09bb88b6c3983df764d4d72bc2920e233f0f7974a234a21b00bb447", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040004c3ec8d7d23ce74be8b9c7c27be869c23bafc6874ebc44f47e107422ab1e75ed09bebd7cb1ec4626e442bcf512a25c5ddde26eb08ba37506461830cf9241cbe9c0050a1bc08f4ba8da1d641ac3891823ab519facd4159768b1c0738f0e23450f374e4d6de55cceed95722be635c5dc0023a1498862f87bfe61d77e20e592cc20bb2ca", + "wx" : "04c3ec8d7d23ce74be8b9c7c27be869c23bafc6874ebc44f47e107422ab1e75ed09bebd7cb1ec4626e442bcf512a25c5ddde26eb08ba37506461830cf9241cbe9c", + "wy" : "50a1bc08f4ba8da1d641ac3891823ab519facd4159768b1c0738f0e23450f374e4d6de55cceed95722be635c5dc0023a1498862f87bfe61d77e20e592cc20bb2ca" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040004c3ec8d7d23ce74be8b9c7c27be869c23bafc6874ebc44f47e107422ab1e75ed09bebd7cb1ec4626e442bcf512a25c5ddde26eb08ba37506461830cf9241cbe9c0050a1bc08f4ba8da1d641ac3891823ab519facd4159768b1c0738f0e23450f374e4d6de55cceed95722be635c5dc0023a1498862f87bfe61d77e20e592cc20bb2ca", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQABMPsjX0jznS+i5x8J76GnCO6/Gh0\n68RPR+EHQiqx517Qm+vXyx7EYm5EK89RKiXF3d4m6wi6N1BkYYMM+SQcvpwAUKG8\nCPS6jaHWQaw4kYI6tRn6zUFZdoscBzjw4jRQ83Tk1t5VzO7ZVyK+Y1xdwAI6FJiG\nL4e/5h134g5ZLMILsso=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 419, + "comment" : "extreme value for k and edgecase s", + "msg" : "313233343030", + "sig" : "308188024200c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66024200aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa8c5d782813fba87792a9955c2fd033745693c9892d8896d3a3e7a925f85bd76ad", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0400a7c8204f2864dcef089165c3914dcc2c0896075870ca0bc1ce37856f80f23815b0c8f2ec05145c421049e80ec1e7694f9f04174bbef21bc0972e559cf222de7e1a01ff1108c28f01b703820e1c0187912962ab23109618dfcb0c062ccee339002222a3f7dd8dd21675b0e20908fe5855ea876d6a9e02c5f5b793d38fdf79fb83603ea9", + "wx" : "00a7c8204f2864dcef089165c3914dcc2c0896075870ca0bc1ce37856f80f23815b0c8f2ec05145c421049e80ec1e7694f9f04174bbef21bc0972e559cf222de7e1a", + "wy" : "01ff1108c28f01b703820e1c0187912962ab23109618dfcb0c062ccee339002222a3f7dd8dd21675b0e20908fe5855ea876d6a9e02c5f5b793d38fdf79fb83603ea9" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400a7c8204f2864dcef089165c3914dcc2c0896075870ca0bc1ce37856f80f23815b0c8f2ec05145c421049e80ec1e7694f9f04174bbef21bc0972e559cf222de7e1a01ff1108c28f01b703820e1c0187912962ab23109618dfcb0c062ccee339002222a3f7dd8dd21675b0e20908fe5855ea876d6a9e02c5f5b793d38fdf79fb83603ea9", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAp8ggTyhk3O8IkWXDkU3MLAiWB1hw\nygvBzjeFb4DyOBWwyPLsBRRcQhBJ6A7B52lPnwQXS77yG8CXLlWc8iLefhoB/xEI\nwo8BtwOCDhwBh5EpYqsjEJYY38sMBizO4zkAIiKj992N0hZ1sOIJCP5YVeqHbWqe\nAsX1t5PTj995+4NgPqk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 420, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "308187024200c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd660241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0401802fc79fc8e55bce50a581632b51d6eec04a3c74ac2bf4fae16ce6c7efef1701d69f9c00a91ad521d75ac7539d54bf464caeec871456103dc974354460898a19c600722fc1f528506618b1da9f8b2edbdbdaf7eec02e8fb9203d2b277735a1d867911b131f453f52ccc4ced05c3b1bc29e4d20f1e6d34979faa688ce8003f79d8e0c95", + "wx" : "01802fc79fc8e55bce50a581632b51d6eec04a3c74ac2bf4fae16ce6c7efef1701d69f9c00a91ad521d75ac7539d54bf464caeec871456103dc974354460898a19c6", + "wy" : "722fc1f528506618b1da9f8b2edbdbdaf7eec02e8fb9203d2b277735a1d867911b131f453f52ccc4ced05c3b1bc29e4d20f1e6d34979faa688ce8003f79d8e0c95" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401802fc79fc8e55bce50a581632b51d6eec04a3c74ac2bf4fae16ce6c7efef1701d69f9c00a91ad521d75ac7539d54bf464caeec871456103dc974354460898a19c600722fc1f528506618b1da9f8b2edbdbdaf7eec02e8fb9203d2b277735a1d867911b131f453f52ccc4ced05c3b1bc29e4d20f1e6d34979faa688ce8003f79d8e0c95", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBgC/Hn8jlW85QpYFjK1HW7sBKPHSs\nK/T64Wzmx+/vFwHWn5wAqRrVIddax1OdVL9GTK7shxRWED3JdDVEYImKGcYAci/B\n9ShQZhix2p+LLtvb2vfuwC6PuSA9Kyd3NaHYZ5EbEx9FP1LMxM7QXDsbwp5NIPHm\n00l5+qaIzoAD952ODJU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 421, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "308188024200c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd660242019999999999999999999999999999999999999999999999999999999999999999950e053936328c7855ffd6676d926e1e402fc4a1606e169fbefc595f4ba7605007", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0401beb0b4c2e494226404fca4ad505ebfed13d184b1572683215b16173c29a4475aede47f266e0c9c4143137d3e0001f9f0148b689286a7c64e229458b824ed7658360130205169783ed9ada9f3a193027ae4e21829ad4a71d05d969605c04f3231dabab03beb2fab07dd8323d7132755734f4e6d1fb43fc8a63bfd244160c23efb6c1429", + "wx" : "01beb0b4c2e494226404fca4ad505ebfed13d184b1572683215b16173c29a4475aede47f266e0c9c4143137d3e0001f9f0148b689286a7c64e229458b824ed765836", + "wy" : "0130205169783ed9ada9f3a193027ae4e21829ad4a71d05d969605c04f3231dabab03beb2fab07dd8323d7132755734f4e6d1fb43fc8a63bfd244160c23efb6c1429" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401beb0b4c2e494226404fca4ad505ebfed13d184b1572683215b16173c29a4475aede47f266e0c9c4143137d3e0001f9f0148b689286a7c64e229458b824ed7658360130205169783ed9ada9f3a193027ae4e21829ad4a71d05d969605c04f3231dabab03beb2fab07dd8323d7132755734f4e6d1fb43fc8a63bfd244160c23efb6c1429", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBvrC0wuSUImQE/KStUF6/7RPRhLFX\nJoMhWxYXPCmkR1rt5H8mbgycQUMTfT4AAfnwFItokoanxk4ilFi4JO12WDYBMCBR\naXg+2a2p86GTAnrk4hgprUpx0F2WlgXATzIx2rqwO+svqwfdgyPXEydVc09ObR+0\nP8imO/0kQWDCPvtsFCk=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 422, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "308187024200c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66024166666666666666666666666666666666666666666666666666666666666666666543814e4d8ca31e157ff599db649b87900bf128581b85a7efbf1657d2e9d81402", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040121e59aaf26b8301f4fcc3e0a563c4104ae00b47c55b8945ce749116fdf6761d768bd50ed431e2b51e646fe4fe7dc2985b6aefa7f9441ea11840d2ace2f34293cb1000cf1e1a46d4d637216e28abd124cc641ae7a673445d573856bc2fec58d86e5ed63bc2a7f2049234e335a7bee95bb2724fb1480c97c38cd0d296cbcc113de3f135f", + "wx" : "0121e59aaf26b8301f4fcc3e0a563c4104ae00b47c55b8945ce749116fdf6761d768bd50ed431e2b51e646fe4fe7dc2985b6aefa7f9441ea11840d2ace2f34293cb1", + "wy" : "0cf1e1a46d4d637216e28abd124cc641ae7a673445d573856bc2fec58d86e5ed63bc2a7f2049234e335a7bee95bb2724fb1480c97c38cd0d296cbcc113de3f135f" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040121e59aaf26b8301f4fcc3e0a563c4104ae00b47c55b8945ce749116fdf6761d768bd50ed431e2b51e646fe4fe7dc2985b6aefa7f9441ea11840d2ace2f34293cb1000cf1e1a46d4d637216e28abd124cc641ae7a673445d573856bc2fec58d86e5ed63bc2a7f2049234e335a7bee95bb2724fb1480c97c38cd0d296cbcc113de3f135f", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBIeWarya4MB9PzD4KVjxBBK4AtHxV\nuJRc50kRb99nYddovVDtQx4rUeZG/k/n3CmFtq76f5RB6hGEDSrOLzQpPLEADPHh\npG1NY3IW4oq9EkzGQa56ZzRF1XOFa8L+xY2G5e1jvCp/IEkjTjNae+6Vuyck+xSA\nyXw4zQ0pbLzBE94/E18=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 423, + "comment" : "extreme value for k and s^-1", + "msg" : "313233343030", + "sig" : "308188024200c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66024201b6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db6db68d82a2b033628ca12ffd36ed0d3bf206957c063c2bf183d7132f20aac7c797a51", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04008e859e66d1237fdc928a4b954954fef565d203a0731d065d9df41a4fd3812b1cc2487053ea19ce839d200845952f80d80698771d83ccc1fc7f236dbee4c76b2bb4005a04b24c88cd40233fb43c59ea5cf2cb9510d16b1168bc126db64aaf9ab07a7453208fde079095966272bf03bc3312c9b9bab8c795ae375e8a0e8dd81c924e7c27", + "wx" : "008e859e66d1237fdc928a4b954954fef565d203a0731d065d9df41a4fd3812b1cc2487053ea19ce839d200845952f80d80698771d83ccc1fc7f236dbee4c76b2bb4", + "wy" : "5a04b24c88cd40233fb43c59ea5cf2cb9510d16b1168bc126db64aaf9ab07a7453208fde079095966272bf03bc3312c9b9bab8c795ae375e8a0e8dd81c924e7c27" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004008e859e66d1237fdc928a4b954954fef565d203a0731d065d9df41a4fd3812b1cc2487053ea19ce839d200845952f80d80698771d83ccc1fc7f236dbee4c76b2bb4005a04b24c88cd40233fb43c59ea5cf2cb9510d16b1168bc126db64aaf9ab07a7453208fde079095966272bf03bc3312c9b9bab8c795ae375e8a0e8dd81c924e7c27", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAjoWeZtEjf9ySikuVSVT+9WXSA6Bz\nHQZdnfQaT9OBKxzCSHBT6hnOg50gCEWVL4DYBph3HYPMwfx/I22+5MdrK7QAWgSy\nTIjNQCM/tDxZ6lzyy5UQ0WsRaLwSbbZKr5qwenRTII/eB5CVlmJyvwO8MxLJubq4\nx5WuN16KDo3YHJJOfCc=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 424, + "comment" : "extreme value for k", + "msg" : "313233343030", + "sig" : "308187024200c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd6602410eb10e5ab95f2f26a40700b1300fb8c3c8d5384ffbecf1fdb9e11e67cb7fd6a7f503e6e25ac09bb88b6c3983df764d4d72bc2920e233f0f7974a234a21b00bb447", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", + "wx" : "00c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66", + "wy" : "011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAxoWOBrcEBOnNnj7LZiOVtEKcZIE5\nBT+1Ifgor2BrTT26oUted+/nWSj+HcEnov+o3jNIs8GFakKb+X5+McLlvWYBGDkp\naniaO8AEXIpftCx9G9mY9URJV5tEaBevvRcnPmYsl+5ymV70JkDFULkBP60HYTU8\ncIaicsJAiL6Udp/RZlA=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 425, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "308185024043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 426, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "308187024201ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6acca94fdcdefd78dc0b56a22d16f2eec26ae0c1fb484d059300e80bd6b0472b3d1222ff5d08b03d0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd6600e7c6d6958765c43ffba375a04bd382e426670abbb6a864bb97e85042e8d8c199d368118d66a10bd9bf3aaf46fec052f89ecac38f795d8d3dbf77416b89602e99af", + "wx" : "00c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd66", + "wy" : "00e7c6d6958765c43ffba375a04bd382e426670abbb6a864bb97e85042e8d8c199d368118d66a10bd9bf3aaf46fec052f89ecac38f795d8d3dbf77416b89602e99af" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400c6858e06b70404e9cd9e3ecb662395b4429c648139053fb521f828af606b4d3dbaa14b5e77efe75928fe1dc127a2ffa8de3348b3c1856a429bf97e7e31c2e5bd6600e7c6d6958765c43ffba375a04bd382e426670abbb6a864bb97e85042e8d8c199d368118d66a10bd9bf3aaf46fec052f89ecac38f795d8d3dbf77416b89602e99af", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAxoWOBrcEBOnNnj7LZiOVtEKcZIE5\nBT+1Ifgor2BrTT26oUted+/nWSj+HcEnov+o3jNIs8GFakKb+X5+McLlvWYA58bW\nlYdlxD/7o3WgS9OC5CZnCru2qGS7l+hQQujYwZnTaBGNZqEL2b86r0b+wFL4nsrD\nj3ldjT2/d0FriWAuma8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 427, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "308185024043f800fbeaf9238c58af795bcdad04bc49cd850c394d3382953356b023210281757b30e19218a37cbd612086fbc158caa8b4e1acb2ec00837e5d941f342fb3cc0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "invalid", + "flags" : [] + }, + { + "tcId" : 428, + "comment" : "testing point duplication", + "msg" : "313233343030", + "sig" : "308187024201ffbc07ff041506dc73a75086a43252fb43b6327af3c6b2cc7d6acca94fdcdefd78dc0b56a22d16f2eec26ae0c1fb484d059300e80bd6b0472b3d1222ff5d08b03d0241492492492492492492492492492492492492492492492492492492492492492491795c5c808906cc587ff89278234a8566e3f565f5ca840a3d887dac7214bee9b8", + "result" : "invalid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "04012a908bfc5b70e17bdfae74294994808bf2a42dab59af8b0523a026d640a2a3d6d344520b62177e2cfa339ca42fb0883ec425904fbda2833a3b5b0a9a00811365d8012333d532f8f8eb1a623c378a3694651192bbda833e3b8d7b8f90b2bfc9b045f8a55e1b6a5fe1512c400c4bc9c86fd7c699d642f5cee9bb827c8b0abc0da01cef1e", + "wx" : "012a908bfc5b70e17bdfae74294994808bf2a42dab59af8b0523a026d640a2a3d6d344520b62177e2cfa339ca42fb0883ec425904fbda2833a3b5b0a9a00811365d8", + "wy" : "012333d532f8f8eb1a623c378a3694651192bbda833e3b8d7b8f90b2bfc9b045f8a55e1b6a5fe1512c400c4bc9c86fd7c699d642f5cee9bb827c8b0abc0da01cef1e" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b810400230381860004012a908bfc5b70e17bdfae74294994808bf2a42dab59af8b0523a026d640a2a3d6d344520b62177e2cfa339ca42fb0883ec425904fbda2833a3b5b0a9a00811365d8012333d532f8f8eb1a623c378a3694651192bbda833e3b8d7b8f90b2bfc9b045f8a55e1b6a5fe1512c400c4bc9c86fd7c699d642f5cee9bb827c8b0abc0da01cef1e", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBKpCL/Ftw4XvfrnQpSZSAi/KkLatZ\nr4sFI6Am1kCio9bTRFILYhd+LPoznKQvsIg+xCWQT72igzo7WwqaAIETZdgBIzPV\nMvj46xpiPDeKNpRlEZK72oM+O417j5Cyv8mwRfilXhtqX+FRLEAMS8nIb9fGmdZC\n9c7pu4J8iwq8DaAc7x4=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 429, + "comment" : "pseudorandom signature", + "msg" : "", + "sig" : "308188024201625d6115092a8e2ee21b9f8a425aa73814dec8b2335e86150ab4229f5a3421d2e6256d632c7a4365a1ee01dd2a936921bbb4551a512d1d4b5a56c314e4a02534c5024201b792d23f2649862595451055777bda1b02dc6cc8fef23231e44b921b16155cd42257441d75a790371e91819f0a9b1fd0ebd02c90b5b774527746ed9bfe743dbe2f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 430, + "comment" : "pseudorandom signature", + "msg" : "4d7367", + "sig" : "30818602415adc833cbc1d6141ced457bab2b01b0814054d7a28fa8bb2925d1e7525b7cf7d5c938a17abfb33426dcc05ce8d44db02f53a75ea04017dca51e1fbb14ce3311b1402415f69b2a6de129147a8437b79c72315d35173d88c2d6119085c90dae8ec05c55e067e7dfa4f681035e3dccab099291c0ecf4428332a9cb0736d16e79111ac76d766", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 431, + "comment" : "pseudorandom signature", + "msg" : "313233343030", + "sig" : "3081880242014141e4d94a58c1e747cbd9ee6670a41eac3c26fb4db3248e45d583179076e6b19a8e2003657a108f91f9a103157edff9b37df2b436a77dc112927d907ac9ba258702420108afa91b34bd904c680471e943af336fb90c5fb2b91401a58c9b1f467bf81af8049965dd8b45f12e152f4f7fd3780e3492f31ed2680d4777fbe655fe779ad897ab", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 432, + "comment" : "pseudorandom signature", + "msg" : "0000000000000000000000000000000000000000", + "sig" : "308187024108135d3f1ae9e26fba825643ed8a29d63d7843720e93566aa09db2bdf5aaa69afbcc0c51e5295c298f305ba7b870f0a85bb5699cdf40764aab59418f77c6ffb4520242011d345256887fb351f5700961a7d47572e0d669056cb1d5619345c0c987f3331c2fe2c6df848a5c610422defd6212b64346161aa871ae55b1fe4add5f68836eb181", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0400304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a00000000009b98bfd33398c2cf8606fc0ae468b6d617ccb3e704af3b8506642a775d5b4da9d00209364a9f0a4ad77cbac604a015c97e6b5a18844a589a4f1c7d9625", + "wx" : "304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a", + "wy" : "009b98bfd33398c2cf8606fc0ae468b6d617ccb3e704af3b8506642a775d5b4da9d00209364a9f0a4ad77cbac604a015c97e6b5a18844a589a4f1c7d9625" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a00000000009b98bfd33398c2cf8606fc0ae468b6d617ccb3e704af3b8506642a775d5b4da9d00209364a9f0a4ad77cbac604a015c97e6b5a18844a589a4f1c7d9625", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAMEs9Bx7R7zAjkbVmr4ydHLev6aq8\nFBrDmrOWdsY+SMGyxkUetGDkUr1XPh+18VuOX5wD9jTY22iXKFBks86b2YoAAAAA\nAJuYv9MzmMLPhgb8CuRottYXzLPnBK87hQZkKnddW02p0AIJNkqfCkrXfLrGBKAV\nyX5rWhiESliaTxx9liU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 433, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3081870242011c9684af6dc52728410473c63053b01c358d67e81f8a1324ad711c60481a4a86dd3e75de20ca55ce7a9a39b1f82fd5da4fadf26a5bb8edd467af8825efe4746218024134c058aba6488d6943e11e0d1348429449ea17ac5edf8bcaf654106b98b2ddf346c537b8a9a3f9b3174b77637d220ef5318dbbc33d0aac0fe2ddeda17b23cb2de6", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 434, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "30818702417c47a668625648cd8a31ac92174cf3d61041f7ad292588def6ed143b1ff9a288fd20cf36f58d4bfe4b2cd4a381d4da50c8eda5674f020449ae1d3dd77e44ed485e024201058e86b327d284e35bab49fc7c335417573f310afa9e1a53566e0fae516e099007965030f6f46b077116353f26cb466d1cf3f35300d744d2d8f883c8a31b43c20d", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 435, + "comment" : "y-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "308188024201e4e9f3a7b800de63407b8703ac545226541c97a673566711f70e2b9ccb21a145ad4637825b023d1ea9f18e60897413711611a85c1179bff9c107368f1c1b61c24c024201de948ee577c3d4e4122a52ecccac59abb6fa937dfb3e4b988cb243efe98740309452ba013112b225b3b1b1384d5f68796845199a2602a8d4505a331b07d101188e", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0400304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a01ffffffff6467402ccc673d3079f903f51b974929e8334c18fb50c47af99bd588a2a4b2562ffdf6c9b560f5b528834539fb5fea368194a5e77bb5a765b0e38269da", + "wx" : "304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a", + "wy" : "01ffffffff6467402ccc673d3079f903f51b974929e8334c18fb50c47af99bd588a2a4b2562ffdf6c9b560f5b528834539fb5fea368194a5e77bb5a765b0e38269da" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400304b3d071ed1ef302391b566af8c9d1cb7afe9aabc141ac39ab39676c63e48c1b2c6451eb460e452bd573e1fb5f15b8e5f9c03f634d8db6897285064b3ce9bd98a01ffffffff6467402ccc673d3079f903f51b974929e8334c18fb50c47af99bd588a2a4b2562ffdf6c9b560f5b528834539fb5fea368194a5e77bb5a765b0e38269da", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAMEs9Bx7R7zAjkbVmr4ydHLev6aq8\nFBrDmrOWdsY+SMGyxkUetGDkUr1XPh+18VuOX5wD9jTY22iXKFBks86b2YoB////\n/2RnQCzMZz0wefkD9RuXSSnoM0wY+1DEevmb1YiipLJWL/32ybVg9bUog0U5+1/q\nNoGUped7tadlsOOCado=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 436, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "308187024200b6cf64861a2b16e33976095dbf45a592c7c24228c4a1dd727f303d5eeb87e5388ad05c328f824c40abd3e6ce003fef5cd59dee0069ad6348ea6e57f90f6bdc0a820241228181c180366e5451dfef3593ce664804cb42d5a8d5046b816b3daf6602fafd9ac2dc24b8c93a10024480882558b6ad3d9e905923dcd0fd2a11964754a9b46b8f", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 437, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30818802420093c8f766827d6dc15c810fa30433153a5e742859205ee8389fbf695c8840dc917440870acc5b160087ffd0cd9a6081029c60a7c26d5e8aa9a0570f4efdeb13dea20242012ec3bbf75a0ad3df40310266648a36db820217ed7fa94e9c8313e03293ef4f6a40e736fb8f208ad8fb883ca509d48046910523645459c27829d54431463b2548c7", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 438, + "comment" : "y-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30818802420152388c6da66164b706b41dd4dd48176d6eaf6525f876ef0ff2d147f6966ebfadf1767fa66d04203d3ec9c937a1f0c945aed953e34be444c219fd3b94d3277aa652024201658c1e5b2e563a49d11c883d05c491d628f0a92c3e3dc8db9a4c8d5f0dc846ac22af8b3c5fb5bbe2cfa98614dcffd87de1cee2c5912a5899505a0c5bcaa513e2c6", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "040000000002fba6a061201ea6b1ed4265163568735ebab78600cdf6a71101dc63beaf546d97a214fc6396793b014eb1aa7a728f53deb2ff9999a3808ddfed15e9629b01993852dadc39299a5a45b6bd7c8dc8ec67e7adbb359fa8fa5d44977e15e2e5a9acf0c33645f3f2c68c526e07732fb35043719cfafc16063c8e58850a958436a4e5", + "wx" : "02fba6a061201ea6b1ed4265163568735ebab78600cdf6a71101dc63beaf546d97a214fc6396793b014eb1aa7a728f53deb2ff9999a3808ddfed15e9629b", + "wy" : "01993852dadc39299a5a45b6bd7c8dc8ec67e7adbb359fa8fa5d44977e15e2e5a9acf0c33645f3f2c68c526e07732fb35043719cfafc16063c8e58850a958436a4e5" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b8104002303818600040000000002fba6a061201ea6b1ed4265163568735ebab78600cdf6a71101dc63beaf546d97a214fc6396793b014eb1aa7a728f53deb2ff9999a3808ddfed15e9629b01993852dadc39299a5a45b6bd7c8dc8ec67e7adbb359fa8fa5d44977e15e2e5a9acf0c33645f3f2c68c526e07732fb35043719cfafc16063c8e58850a958436a4e5", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAAAAAAvumoGEgHqax7UJlFjVoc166\nt4YAzfanEQHcY76vVG2XohT8Y5Z5OwFOsap6co9T3rL/mZmjgI3f7RXpYpsBmThS\n2tw5KZpaRba9fI3I7Gfnrbs1n6j6XUSXfhXi5ams8MM2RfPyxoxSbgdzL7NQQ3Gc\n+vwWBjyOWIUKlYQ2pOU=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 439, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3081880242010e89470f981d2c7c5c96587121a67323bb96ff2427739d0d885ea277293efa3b25c0bda04d81466198a3cbfc441f1b1b98f6bcdc2589d9d91a17a7899f70d0461e0242017351b0da8c8d0e4aa0974669d190fa2f90aa50227160594dfb55755002365441de17ea42902128a6f81e554177ed509c0cec31fd5053fae03f62ff76579ba92bda", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 440, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "3081880242011094ac23ca46a3e2b4ac3baae6504f1bfb3ddf2db9ab40eda32d8e0a05727998f8552a033bb05241e826a86a1d03014eae3aa5fe1a45caac1db3e8138b9cf5906802420147edb15a5080ee2f929f78b6ac86604aae51b674fa46eaae7fdfd90bf64d6189341155f4eba937eae74c9e480eb4fb7e6aafd4285e7fc503ee6ec20f0b1415be06", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 441, + "comment" : "x-coordinate of the public key is small", + "msg" : "4d657373616765", + "sig" : "308188024201d876ae174da31e128babff9f1d15507660bdc7958750844dc4f4291f75a882a22f177f704be6067bf7ce8f06b8626d971e6ef5dcb666fa975c1e11126e04fccce2024201abb12630a68b669e6ad2d8d62654d75dfbc6b54a8e3a9c915be663e080ddcc348e57a10e2b1dd9f03e1b897796ad889b075e5919dc5bf37a112d92c693456e6457", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0401fffffffe1d5d52b31ca52f8947a35593edf164cd324f833b90935846c64db1454df9f028dc8bc36bb04cb7f0cceceba01a3844097f7c35eeaa81428db0cca6333101b7c70277d0bf78a3c7b62c937f0cb2cad2565f5514f6205ceb1a193d4fdb45ba6e6cec07827bae0b16b8316c3539a15114d0de6d2de407fd7117551a70826eada6", + "wx" : "01fffffffe1d5d52b31ca52f8947a35593edf164cd324f833b90935846c64db1454df9f028dc8bc36bb04cb7f0cceceba01a3844097f7c35eeaa81428db0cca63331", + "wy" : "01b7c70277d0bf78a3c7b62c937f0cb2cad2565f5514f6205ceb1a193d4fdb45ba6e6cec07827bae0b16b8316c3539a15114d0de6d2de407fd7117551a70826eada6" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000401fffffffe1d5d52b31ca52f8947a35593edf164cd324f833b90935846c64db1454df9f028dc8bc36bb04cb7f0cceceba01a3844097f7c35eeaa81428db0cca6333101b7c70277d0bf78a3c7b62c937f0cb2cad2565f5514f6205ceb1a193d4fdb45ba6e6cec07827bae0b16b8316c3539a15114d0de6d2de407fd7117551a70826eada6", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQB/////h1dUrMcpS+JR6NVk+3xZM0y\nT4M7kJNYRsZNsUVN+fAo3IvDa7BMt/DM7OugGjhECX98Ne6qgUKNsMymMzEBt8cC\nd9C/eKPHtiyTfwyyytJWX1UU9iBc6xoZPU/bRbpubOwHgnuuCxa4MWw1OaFRFNDe\nbS3kB/1xF1UacIJuraY=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 442, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "30818602414ed692af1ed1b4bd5cea3aa8ddc6f3f15d8a6ee0016fa0e8eb958580e7421832ecc0e387c34aafac6380bac419ea45c42ae6426af503847f22c49c2f456338c1a702417aceadde02ace1668bc1a3360d34e125afde230f536c154d91e6c876bee1d34ae06edcbbca0c7cd17646840913164740b12e2e224fe3ef3dec6fd84a81b581c188", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 443, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "308188024200e01094048fcf7a1e2ec66faedffc40f48c9c93514325bde6b4958d80f0413efde7eec1dc6de65f96009c069397e51da2eb1729efa287afd5552b25a9e427a6d836024201489e7e124f66942e642de992e60b3a86fcce576767719390c3a312fcdeaa560a7fbb0cabb35e05a6d6f3499160fd2dba12d29b613b16dec7494c950d65fdf11fa3", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 444, + "comment" : "x-coordinate of the public key is large", + "msg" : "4d657373616765", + "sig" : "308188024201d296292213380de133dc66eceb8bd857a5c468afe855c05da9db937373b51f9020ca11353415da76bb6af997a486d2370e31adcc0a4531952a3b59428678ee59430242015979a3c609c2c2099ae1b290da3d613b248e3a10de7ad770dffc82fb33e74fc3207533f97285cf4557a6407e9a775e59efeaee4264b2634933a6baf8c406f0c4a9", + "result" : "valid", + "flags" : [] + } + ] + }, + { + "key" : { + "curve" : "secp521r1", + "keySize" : 521, + "type" : "EcPublicKey", + "uncompressed" : "0400c7c8817bf2f0652a4a4b5140c773e261080a0a111395856e8a3350f5eb5612bd63b367b965e92e9538ea3b7908aef1ade4b68e17f9f9148495c167d1c4dd4913490008bf0be2979abb8111fd0d768adcad774113a822c1bb60887053b5cf8c9563e76705a391ece154b5dfb114b20e351df4014bec19fa87720845801cf06b7fffffff", + "wx" : "00c7c8817bf2f0652a4a4b5140c773e261080a0a111395856e8a3350f5eb5612bd63b367b965e92e9538ea3b7908aef1ade4b68e17f9f9148495c167d1c4dd491349", + "wy" : "08bf0be2979abb8111fd0d768adcad774113a822c1bb60887053b5cf8c9563e76705a391ece154b5dfb114b20e351df4014bec19fa87720845801cf06b7fffffff" + }, + "keyDer" : "30819b301006072a8648ce3d020106052b81040023038186000400c7c8817bf2f0652a4a4b5140c773e261080a0a111395856e8a3350f5eb5612bd63b367b965e92e9538ea3b7908aef1ade4b68e17f9f9148495c167d1c4dd4913490008bf0be2979abb8111fd0d768adcad774113a822c1bb60887053b5cf8c9563e76705a391ece154b5dfb114b20e351df4014bec19fa87720845801cf06b7fffffff", + "keyPem" : "-----BEGIN PUBLIC KEY-----\nMIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQAx8iBe/LwZSpKS1FAx3PiYQgKChET\nlYVuijNQ9etWEr1js2e5ZekulTjqO3kIrvGt5LaOF/n5FISVwWfRxN1JE0kACL8L\n4peau4ER/Q12itytd0ETqCLBu2CIcFO1z4yVY+dnBaOR7OFUtd+xFLIONR30AUvs\nGfqHcghFgBzwa3////8=\n-----END PUBLIC KEY-----", + "sha" : "SHA-512", + "type" : "EcdsaVerify", + "tests" : [ + { + "tcId" : 445, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "308188024201ef8f785c51a25ae2cd93487b5c848d4af133217a91f51359c966e7538e68743578122df5830002f96f6fadb5bc44480e3b3b2c804e4c51cf95d059d5646c5cef21024201ba2276cc003e87bea37c3724e58a0ab885f56d09b8b5718f674f9c70f3b5ecfb4ad1f3417b420ec40810e08826efa7d8ad6ca7c6a7840348097f92b2de8d6e080b", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 446, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "30818802420155978adc4b570d897511f5ecfb65a31947e6e989da17dea716625bb3fa7b92b853623eb0cd9ce2a5e2b4d8c1c2a90ec04fe79d012576ec728a45c5ce47c6d500c0024200f79fa8b94ee282a3d1815892cbf15d7ebdf62cb042c76bb3c710c23e32b75992cc249d84072198e4ed63d72435a07d2ed76f278d7399f61a5b5c997f45692fed22", + "result" : "valid", + "flags" : [] + }, + { + "tcId" : 447, + "comment" : "y-coordinate of the public key has many trailing 1's", + "msg" : "4d657373616765", + "sig" : "308188024201a2af29c58184ca861e7cd931f39cea064b199eee563f241cd5ecf6ebb2ade728f1be23cf007ebe8ef0c42d99f9f5190f6815446afc3043a820d7daf27e86b83b8a024201a2acd1822eb539383defff8769aad8bacd50cd24ca7aa6670671418110177808c3f4fbe6041b9cb898359ee61e04824adedd62b39fe5791907a20586333bd3c76d", + "result" : "valid", + "flags" : [] + } + ] + } + ] +} diff --git a/tests/test_ec.ml b/tests/test_ec.ml index df2428f3..750f2a93 100644 --- a/tests/test_ec.ml +++ b/tests/test_ec.ml @@ -4,7 +4,8 @@ module Testable = struct let ok_or_error = Alcotest.result Alcotest.unit fiat_error end -let key_pair_of_hex h = Mirage_crypto_ec.gen_key ~rng:(fun _ -> Hex.to_cstruct h) +let key_pair_of_hex h = + Mirage_crypto_ec.P256.Dh.gen_key ~rng:(fun _ -> Hex.to_cstruct h) let scalar_of_hex h = fst (key_pair_of_hex h) @@ -24,7 +25,7 @@ let key_exchange = ( name, `Quick, fun () -> - Mirage_crypto_ec.key_exchange d p + Mirage_crypto_ec.P256.Dh.key_exchange d p |> Format.asprintf "%a" pp_result |> Alcotest.check Alcotest.string __LOC__ expected ) in @@ -58,7 +59,7 @@ let scalar_mult = ( Printf.sprintf "Scalar mult (#%d)" n, `Quick, fun () -> - Mirage_crypto_ec.key_exchange scalar point + Mirage_crypto_ec.P256.Dh.key_exchange scalar point |> Format.asprintf "%a" pp_result |> Alcotest.check Alcotest.string __LOC__ expected ) in @@ -132,7 +133,7 @@ let point_validation = ( name, `Quick, fun () -> - Mirage_crypto_ec.key_exchange scalar point + Mirage_crypto_ec.P256.Dh.key_exchange scalar point |> to_ok_or_error |> Alcotest.check Testable.ok_or_error __LOC__ expected ) in @@ -185,7 +186,7 @@ let scalar_validation = ( name, `Quick, fun () -> - let _, _ = Mirage_crypto_ec.gen_key ~rng in + let _, _ = Mirage_crypto_ec.P256.Dh.gen_key ~rng in let got = !ncalls in Alcotest.check Alcotest.int __LOC__ expected got ) in @@ -212,11 +213,535 @@ let scalar_validation = ~expected:2; ] +let ecdsa_gen () = + let d = Cstruct.of_hex "C477F9F6 5C22CCE2 0657FAA5 B2D1D812 2336F851 A508A1ED 04E479C3 4985BF96" in + let p = match + Mirage_crypto_ec.P256.Dsa.pub_of_cstruct + (Cstruct.of_hex {|04 + B7E08AFD FE94BAD3 F1DC8C73 4798BA1C 62B3A0AD 1E9EA2A3 8201CD08 89BC7A19 + 3603F747 959DBF7A 4BB226E4 19287290 63ADC7AE 43529E61 B563BBC6 06CC5E09|}) + with + | Ok a -> a + | Error _ -> assert false + in + let _priv, pub = Mirage_crypto_ec.P256.Dsa.generate ~rng:(fun _ -> d) in + let pub_eq a b = + Cstruct.equal + (Mirage_crypto_ec.P256.Dsa.pub_to_cstruct a) + (Mirage_crypto_ec.P256.Dsa.pub_to_cstruct b) + in + Alcotest.(check bool __LOC__ true (pub_eq pub p)) + +let ecdsa_sign () = + let d = Cstruct.of_hex "C477F9F6 5C22CCE2 0657FAA5 B2D1D812 2336F851 A508A1ED 04E479C3 4985BF96" + and k = Cstruct.of_hex "7A1A7E52 797FC8CA AA435D2A 4DACE391 58504BF2 04FBE19F 14DBB427 FAEE50AE" + and e = Cstruct.of_hex "A41A41A1 2A799548 211C410C 65D8133A FDE34D28 BDD542E4 B680CF28 99C8A8C4" + in + let r = Cstruct.of_hex "2B42F576 D07F4165 FF65D1F3 B1500F81 E44C316F 1F0B3EF5 7325B69A CA46104F" + and s = Cstruct.of_hex "DC42C212 2D6392CD 3E3A993A 89502A81 98C1886F E69D262C 4B329BDB 6B63FAF1" + in + let key, _pub = Mirage_crypto_ec.P256.Dsa.generate ~rng:(fun _ -> d) in + let (r', s') = Mirage_crypto_ec.P256.Dsa.sign ~key ~k e in + Alcotest.(check bool __LOC__ true (Cstruct.equal r r' && Cstruct.equal s s')) + +let ecdsa_verify () = + let key = + match Mirage_crypto_ec.P256.Dsa.pub_of_cstruct + (Cstruct.of_hex {|04 + B7E08AFD FE94BAD3 F1DC8C73 4798BA1C 62B3A0AD 1E9EA2A3 8201CD08 89BC7A19 + 3603F747 959DBF7A 4BB226E4 19287290 63ADC7AE 43529E61 B563BBC6 06CC5E09|}) + with + | Ok a -> a + | Error _ -> assert false + and e = Cstruct.of_hex "A41A41A1 2A799548 211C410C 65D8133A FDE34D28 BDD542E4 B680CF28 99C8A8C4" + and r = Cstruct.of_hex "2B42F576 D07F4165 FF65D1F3 B1500F81 E44C316F 1F0B3EF5 7325B69A CA46104F" + and s = Cstruct.of_hex "DC42C212 2D6392CD 3E3A993A 89502A81 98C1886F E69D262C 4B329BDB 6B63FAF1" + in + Alcotest.(check bool __LOC__ true (Mirage_crypto_ec.P256.Dsa.verify ~key (r, s) e)) + +let ecdsa = [ + (* from https://csrc.nist.rip/groups/ST/toolkit/documents/Examples/ECDSA_Prime.pdf *) + "ECDSA gen", `Quick, ecdsa_gen ; + "ECDSA sign", `Quick, ecdsa_sign ; + "ECDSA verify", `Quick, ecdsa_verify ; +] + +let ecdsa_rfc6979_p224 = + (* A.2.4 - P 224 *) + let priv, pub = + let data = Cstruct.of_hex "F220266E1105BFE3083E03EC7A3A654651F45E37167E88600BF257C1" in + Mirage_crypto_ec.P224.Dsa.generate ~rng:(fun _ -> data) + in + let pub_rfc () = + let fst = Cstruct.create 1 in + Cstruct.set_uint8 fst 0 4; + let ux = Cstruct.of_hex "00CF08DA5AD719E42707FA431292DEA11244D64FC51610D94B130D6C" + and uy = Cstruct.of_hex "EEAB6F3DEBE455E3DBF85416F7030CBD94F34F2D6F232C69F3C1385A" + in + match Mirage_crypto_ec.P224.Dsa.pub_of_cstruct (Cstruct.concat [ fst ; ux ; uy ]) with + | Ok p -> + let pub_eq = + Cstruct.equal + (Mirage_crypto_ec.P224.Dsa.pub_to_cstruct pub) + (Mirage_crypto_ec.P224.Dsa.pub_to_cstruct p) + in + Alcotest.(check bool __LOC__ true pub_eq) + | Error _ -> Alcotest.fail "bad public key" + in + let case hash ~message ~k ~r ~s () = + let msg = Mirage_crypto.Hash.digest hash (Cstruct.of_string message) + and k = Cstruct.of_hex k + in + let k' = + let module H = (val (Mirage_crypto.Hash.module_of hash)) in + let module K = Mirage_crypto_ec.P224.Dsa.K_gen (H) in + K.generate ~key:priv msg + in + Alcotest.(check bool __LOC__ true (Cstruct.equal k k')); + let sig_eq (r', s') = + Cstruct.equal (Cstruct.of_hex r) r' && Cstruct.equal (Cstruct.of_hex s) s' + in + let sig' = Mirage_crypto_ec.P224.Dsa.sign ~key:priv ~k msg in + Alcotest.(check bool __LOC__ true (sig_eq sig')) + in + let cases = [ + + case `SHA1 ~message:"sample" + ~k:"7EEFADD91110D8DE6C2C470831387C50D3357F7F4D477054B8B426BC" + ~r:"22226F9D40A96E19C4A301CE5B74B115303C0F3A4FD30FC257FB57AC" + ~s:"66D1CDD83E3AF75605DD6E2FEFF196D30AA7ED7A2EDF7AF475403D69"; + + case `SHA224 ~message:"sample" + ~k:"C1D1F2F10881088301880506805FEB4825FE09ACB6816C36991AA06D" + ~r:"1CDFE6662DDE1E4A1EC4CDEDF6A1F5A2FB7FBD9145C12113E6ABFD3E" + ~s:"A6694FD7718A21053F225D3F46197CA699D45006C06F871808F43EBC"; + + case `SHA256 ~message:"sample" + ~k:"AD3029E0278F80643DE33917CE6908C70A8FF50A411F06E41DEDFCDC" + ~r:"61AA3DA010E8E8406C656BC477A7A7189895E7E840CDFE8FF42307BA" + ~s:"BC814050DAB5D23770879494F9E0A680DC1AF7161991BDE692B10101"; + + case `SHA384 ~message:"sample" + ~k:"52B40F5A9D3D13040F494E83D3906C6079F29981035C7BD51E5CAC40" + ~r:"0B115E5E36F0F9EC81F1325A5952878D745E19D7BB3EABFABA77E953" + ~s:"830F34CCDFE826CCFDC81EB4129772E20E122348A2BBD889A1B1AF1D"; + + case `SHA512 ~message:"sample" + ~k:"9DB103FFEDEDF9CFDBA05184F925400C1653B8501BAB89CEA0FBEC14" + ~r:"074BD1D979D5F32BF958DDC61E4FB4872ADCAFEB2256497CDAC30397" + ~s:"A4CECA196C3D5A1FF31027B33185DC8EE43F288B21AB342E5D8EB084"; + + case `SHA1 ~message:"test" + ~k:"2519178F82C3F0E4F87ED5883A4E114E5B7A6E374043D8EFD329C253" + ~r:"DEAA646EC2AF2EA8AD53ED66B2E2DDAA49A12EFD8356561451F3E21C" + ~s:"95987796F6CF2062AB8135271DE56AE55366C045F6D9593F53787BD2"; + + case `SHA224 ~message:"test" + ~k:"DF8B38D40DCA3E077D0AC520BF56B6D565134D9B5F2EAE0D34900524" + ~r:"C441CE8E261DED634E4CF84910E4C5D1D22C5CF3B732BB204DBEF019" + ~s:"902F42847A63BDC5F6046ADA114953120F99442D76510150F372A3F4"; + + case `SHA256 ~message:"test" + ~k:"FF86F57924DA248D6E44E8154EB69F0AE2AEBAEE9931D0B5A969F904" + ~r:"AD04DDE87B84747A243A631EA47A1BA6D1FAA059149AD2440DE6FBA6" + ~s:"178D49B1AE90E3D8B629BE3DB5683915F4E8C99FDF6E666CF37ADCFD"; + + case `SHA384 ~message:"test" + ~k:"7046742B839478C1B5BD31DB2E862AD868E1A45C863585B5F22BDC2D" + ~r:"389B92682E399B26518A95506B52C03BC9379A9DADF3391A21FB0EA4" + ~s:"414A718ED3249FF6DBC5B50C27F71F01F070944DA22AB1F78F559AAB"; + + case `SHA512 ~message:"test" + ~k:"E39C2AA4EA6BE2306C72126D40ED77BF9739BB4D6EF2BBB1DCB6169D" + ~r:"049F050477C5ADD858CAC56208394B5A55BAEBBE887FDF765047C17C" + ~s:"077EB13E7005929CEFA3CD0403C7CDCC077ADF4E44F3C41B2F60ECFF"; + + ] in + ("public key matches", `Quick, pub_rfc) :: + List.mapi (fun i c -> "RFC 6979 A.2.4 " ^ string_of_int i, `Quick, c) cases + +let ecdsa_rfc6979_p256 = + (* A.2.5 - P 256 *) + let priv, pub = + let data = Cstruct.of_hex "C9AFA9D845BA75166B5C215767B1D6934E50C3DB36E89B127B8A622B120F6721" in + Mirage_crypto_ec.P256.Dsa.generate ~rng:(fun _ -> data) + in + let pub_rfc () = + let fst = Cstruct.create 1 in + Cstruct.set_uint8 fst 0 4; + let ux = Cstruct.of_hex "60FED4BA255A9D31C961EB74C6356D68C049B8923B61FA6CE669622E60F29FB6" + and uy = Cstruct.of_hex "7903FE1008B8BC99A41AE9E95628BC64F2F1B20C2D7E9F5177A3C294D4462299" + in + match Mirage_crypto_ec.P256.Dsa.pub_of_cstruct (Cstruct.concat [ fst ; ux ; uy ]) with + | Ok p -> + let pub_eq = + Cstruct.equal + (Mirage_crypto_ec.P256.Dsa.pub_to_cstruct pub) + (Mirage_crypto_ec.P256.Dsa.pub_to_cstruct p) + in + Alcotest.(check bool __LOC__ true pub_eq) + | Error _ -> Alcotest.fail "bad public key" + in + let case hash ~message ~k ~r ~s () = + let msg = Mirage_crypto.Hash.digest hash (Cstruct.of_string message) + and k = Cstruct.of_hex k + in + let k' = + let module H = (val (Mirage_crypto.Hash.module_of hash)) in + let module K = Mirage_crypto_ec.P256.Dsa.K_gen (H) in + K.generate ~key:priv msg + in + Alcotest.(check bool __LOC__ true (Cstruct.equal k k')); + let sig_eq (r', s') = + Cstruct.equal (Cstruct.of_hex r) r' && Cstruct.equal (Cstruct.of_hex s) s' + in + let sig' = Mirage_crypto_ec.P256.Dsa.sign ~key:priv ~k msg in + Alcotest.(check bool __LOC__ true (sig_eq sig')) + in + let cases = [ + case `SHA1 ~message:"sample" + ~k:"882905F1227FD620FBF2ABF21244F0BA83D0DC3A9103DBBEE43A1FB858109DB4" + ~r:"61340C88C3AAEBEB4F6D667F672CA9759A6CCAA9FA8811313039EE4A35471D32" + ~s:"6D7F147DAC089441BB2E2FE8F7A3FA264B9C475098FDCF6E00D7C996E1B8B7EB" ; + case `SHA224 ~message:"sample" + ~k:"103F90EE9DC52E5E7FB5132B7033C63066D194321491862059967C715985D473" + ~r:"53B2FFF5D1752B2C689DF257C04C40A587FABABB3F6FC2702F1343AF7CA9AA3F" + ~s:"B9AFB64FDC03DC1A131C7D2386D11E349F070AA432A4ACC918BEA988BF75C74C" ; + case `SHA256 ~message:"sample" + ~k:"A6E3C57DD01ABE90086538398355DD4C3B17AA873382B0F24D6129493D8AAD60" + ~r:"EFD48B2AACB6A8FD1140DD9CD45E81D69D2C877B56AAF991C34D0EA84EAF3716" + ~s:"F7CB1C942D657C41D436C7A1B6E29F65F3E900DBB9AFF4064DC4AB2F843ACDA8" ; + case `SHA384 ~message:"sample" + ~k:"09F634B188CEFD98E7EC88B1AA9852D734D0BC272F7D2A47DECC6EBEB375AAD4" + ~r:"0EAFEA039B20E9B42309FB1D89E213057CBF973DC0CFC8F129EDDDC800EF7719" + ~s:"4861F0491E6998B9455193E34E7B0D284DDD7149A74B95B9261F13ABDE940954" ; + case `SHA512 ~message:"sample" + ~k:"5FA81C63109BADB88C1F367B47DA606DA28CAD69AA22C4FE6AD7DF73A7173AA5" + ~r:"8496A60B5E9B47C825488827E0495B0E3FA109EC4568FD3F8D1097678EB97F00" + ~s:"2362AB1ADBE2B8ADF9CB9EDAB740EA6049C028114F2460F96554F61FAE3302FE" ; + case `SHA1 ~message:"test" + ~k:"8C9520267C55D6B980DF741E56B4ADEE114D84FBFA2E62137954164028632A2E" + ~r:"0CBCC86FD6ABD1D99E703E1EC50069EE5C0B4BA4B9AC60E409E8EC5910D81A89" + ~s:"01B9D7B73DFAA60D5651EC4591A0136F87653E0FD780C3B1BC872FFDEAE479B1" ; + case `SHA224 ~message:"test" + ~k:"669F4426F2688B8BE0DB3A6BD1989BDAEFFF84B649EEB84F3DD26080F667FAA7" + ~r:"C37EDB6F0AE79D47C3C27E962FA269BB4F441770357E114EE511F662EC34A692" + ~s:"C820053A05791E521FCAAD6042D40AEA1D6B1A540138558F47D0719800E18F2D" ; + case `SHA256 ~message:"test" + ~k:"D16B6AE827F17175E040871A1C7EC3500192C4C92677336EC2537ACAEE0008E0" + ~r:"F1ABB023518351CD71D881567B1EA663ED3EFCF6C5132B354F28D3B0B7D38367" + ~s:"019F4113742A2B14BD25926B49C649155F267E60D3814B4C0CC84250E46F0083" ; + case `SHA384 ~message:"test" + ~k:"16AEFFA357260B04B1DD199693960740066C1A8F3E8EDD79070AA914D361B3B8" + ~r:"83910E8B48BB0C74244EBDF7F07A1C5413D61472BD941EF3920E623FBCCEBEB6" + ~s:"8DDBEC54CF8CD5874883841D712142A56A8D0F218F5003CB0296B6B509619F2C" ; + case `SHA512 ~message:"test" + ~k:"6915D11632ACA3C40D5D51C08DAF9C555933819548784480E93499000D9F0B7F" + ~r:"461D93F31B6540894788FD206C07CFA0CC35F46FA3C91816FFF1040AD1581A04" + ~s:"39AF9F15DE0DB8D97E72719C74820D304CE5226E32DEDAE67519E840D1194E55" ; + ] in + ("public key matches", `Quick, pub_rfc) :: + List.mapi (fun i c -> "RFC 6979 A.2.5 " ^ string_of_int i, `Quick, c) cases + +let ecdsa_rfc6979_p384 = + (* A.2.6 - P 384 *) + let priv, pub = + let data = Cstruct.of_hex "6B9D3DAD2E1B8C1C05B19875B6659F4DE23C3B667BF297BA9AA47740787137D896D5724E4C70A825F872C9EA60D2EDF5" in + Mirage_crypto_ec.P384.Dsa.generate ~rng:(fun _ -> data) + in + let pub_rfc () = + let fst = Cstruct.create 1 in + Cstruct.set_uint8 fst 0 4; + let ux = Cstruct.of_hex "EC3A4E415B4E19A4568618029F427FA5DA9A8BC4AE92E02E06AAE5286B300C64DEF8F0EA9055866064A254515480BC13" + and uy = Cstruct.of_hex "8015D9B72D7D57244EA8EF9AC0C621896708A59367F9DFB9F54CA84B3F1C9DB1288B231C3AE0D4FE7344FD2533264720" + in + match Mirage_crypto_ec.P384.Dsa.pub_of_cstruct (Cstruct.concat [ fst ; ux ; uy ]) with + | Ok p -> + let pub_eq = + Cstruct.equal + (Mirage_crypto_ec.P384.Dsa.pub_to_cstruct pub) + (Mirage_crypto_ec.P384.Dsa.pub_to_cstruct p) + in + Alcotest.(check bool __LOC__ true pub_eq) + | Error _ -> Alcotest.fail "bad public key" + in + let case hash ~message ~k ~r ~s () = + let msg = Mirage_crypto.Hash.digest hash (Cstruct.of_string message) + and k = Cstruct.of_hex k + in + let k' = + let module H = (val (Mirage_crypto.Hash.module_of hash)) in + let module K = Mirage_crypto_ec.P384.Dsa.K_gen (H) in + K.generate ~key:priv msg + in + Alcotest.(check bool __LOC__ true (Cstruct.equal k k')); + let sig_eq (r', s') = + Cstruct.equal (Cstruct.of_hex r) r' && Cstruct.equal (Cstruct.of_hex s) s' + in + let sig' = Mirage_crypto_ec.P384.Dsa.sign ~key:priv ~k msg in + Alcotest.(check bool __LOC__ true (sig_eq sig')) + in + let cases = [ + case `SHA1 ~message:"sample" + ~k:"4471EF7518BB2C7C20F62EAE1C387AD0C5E8E470995DB4ACF694466E6AB09663 + 0F29E5938D25106C3C340045A2DB01A7" + ~r:"EC748D839243D6FBEF4FC5C4859A7DFFD7F3ABDDF72014540C16D73309834FA3 + 7B9BA002899F6FDA3A4A9386790D4EB2" + ~s:"A3BCFA947BEEF4732BF247AC17F71676CB31A847B9FF0CBC9C9ED4C1A5B3FACF + 26F49CA031D4857570CCB5CA4424A443"; + + case `SHA224 ~message:"sample" + ~k:"A4E4D2F0E729EB786B31FC20AD5D849E304450E0AE8E3E341134A5C1AFA03CAB + 8083EE4E3C45B06A5899EA56C51B5879" + ~r:"42356E76B55A6D9B4631C865445DBE54E056D3B3431766D0509244793C3F9366 + 450F76EE3DE43F5A125333A6BE060122" + ~s:"9DA0C81787064021E78DF658F2FBB0B042BF304665DB721F077A4298B095E483 + 4C082C03D83028EFBF93A3C23940CA8D"; + + case `SHA256 ~message:"sample" + ~k:"180AE9F9AEC5438A44BC159A1FCB277C7BE54FA20E7CF404B490650A8ACC414E + 375572342863C899F9F2EDF9747A9B60" + ~r:"21B13D1E013C7FA1392D03C5F99AF8B30C570C6F98D4EA8E354B63A21D3DAA33 + BDE1E888E63355D92FA2B3C36D8FB2CD" + ~s:"F3AA443FB107745BF4BD77CB3891674632068A10CA67E3D45DB2266FA7D1FEEB + EFDC63ECCD1AC42EC0CB8668A4FA0AB0"; + + case `SHA384 ~message:"sample" + ~k:"94ED910D1A099DAD3254E9242AE85ABDE4BA15168EAF0CA87A555FD56D10FBCA + 2907E3E83BA95368623B8C4686915CF9" + ~r:"94EDBB92A5ECB8AAD4736E56C691916B3F88140666CE9FA73D64C4EA95AD133C + 81A648152E44ACF96E36DD1E80FABE46" + ~s:"99EF4AEB15F178CEA1FE40DB2603138F130E740A19624526203B6351D0A3A94F + A329C145786E679E7B82C71A38628AC8"; + + case `SHA512 ~message:"sample" + ~k:"92FC3C7183A883E24216D1141F1A8976C5B0DD797DFA597E3D7B32198BD35331 + A4E966532593A52980D0E3AAA5E10EC3" + ~r:"ED0959D5880AB2D869AE7F6C2915C6D60F96507F9CB3E047C0046861DA4A799C + FE30F35CC900056D7C99CD7882433709" + ~s:"512C8CCEEE3890A84058CE1E22DBC2198F42323CE8ACA9135329F03C068E5112 + DC7CC3EF3446DEFCEB01A45C2667FDD5"; + + case `SHA1 ~message:"test" + ~k:"66CC2C8F4D303FC962E5FF6A27BD79F84EC812DDAE58CF5243B64A4AD8094D47 + EC3727F3A3C186C15054492E30698497" + ~r:"4BC35D3A50EF4E30576F58CD96CE6BF638025EE624004A1F7789A8B8E43D0678 + ACD9D29876DAF46638645F7F404B11C7" + ~s:"D5A6326C494ED3FF614703878961C0FDE7B2C278F9A65FD8C4B7186201A29916 + 95BA1C84541327E966FA7B50F7382282"; + + case `SHA224 ~message:"test" + ~k:"18FA39DB95AA5F561F30FA3591DC59C0FA3653A80DAFFA0B48D1A4C6DFCBFF6E + 3D33BE4DC5EB8886A8ECD093F2935726" + ~r:"E8C9D0B6EA72A0E7837FEA1D14A1A9557F29FAA45D3E7EE888FC5BF954B5E624 + 64A9A817C47FF78B8C11066B24080E72" + ~s:"07041D4A7A0379AC7232FF72E6F77B6DDB8F09B16CCE0EC3286B2BD43FA8C614 + 1C53EA5ABEF0D8231077A04540A96B66"; + + case `SHA256 ~message:"test" + ~k:"0CFAC37587532347DC3389FDC98286BBA8C73807285B184C83E62E26C401C0FA + A48DD070BA79921A3457ABFF2D630AD7" + ~r:"6D6DEFAC9AB64DABAFE36C6BF510352A4CC27001263638E5B16D9BB51D451559 + F918EEDAF2293BE5B475CC8F0188636B" + ~s:"2D46F3BECBCC523D5F1A1256BF0C9B024D879BA9E838144C8BA6BAEB4B53B47D + 51AB373F9845C0514EEFB14024787265"; + + case `SHA384 ~message:"test" + ~k:"015EE46A5BF88773ED9123A5AB0807962D193719503C527B031B4C2D225092AD + A71F4A459BC0DA98ADB95837DB8312EA" + ~r:"8203B63D3C853E8D77227FB377BCF7B7B772E97892A80F36AB775D509D7A5FEB + 0542A7F0812998DA8F1DD3CA3CF023DB" + ~s:"DDD0760448D42D8A43AF45AF836FCE4DE8BE06B485E9B61B827C2F13173923E0 + 6A739F040649A667BF3B828246BAA5A5"; + + case `SHA512 ~message:"test" + ~k:"3780C4F67CB15518B6ACAE34C9F83568D2E12E47DEAB6C50A4E4EE5319D1E8CE + 0E2CC8A136036DC4B9C00E6888F66B6C" + ~r:"A0D5D090C9980FAF3C2CE57B7AE951D31977DD11C775D314AF55F76C676447D0 + 6FB6495CD21B4B6E340FC236584FB277" + ~s:"976984E59B4C77B0E8E4460DCA3D9F20E07B9BB1F63BEEFAF576F6B2E8B22463 + 4A2092CD3792E0159AD9CEE37659C736" + ] in + ("public key matches", `Quick, pub_rfc) :: + List.mapi (fun i c -> "RFC 6979 A.2.6 " ^ string_of_int i, `Quick, c) cases + +let ecdsa_rfc6979_p521 = + (* A.2.7 - P 521 *) + let of_h b = Cstruct.of_hex ((String.make 1 '0') ^ b) in + let priv, pub = + let data = of_h + "0FAD06DAA62BA3B25D2FB40133DA757205DE67F5BB0018FEE8C86E1B68C7E75C + AA896EB32F1F47C70855836A6D16FCC1466F6D8FBEC67DB89EC0C08B0E996B83 + 538" + in + Mirage_crypto_ec.P521.Dsa.generate ~rng:(fun _ -> data) + in + let pub_rfc () = + let fst = Cstruct.create 1 in + Cstruct.set_uint8 fst 0 4; + let ux = of_h + "1894550D0785932E00EAA23B694F213F8C3121F86DC97A04E5A7167DB4E5BCD3 + 71123D46E45DB6B5D5370A7F20FB633155D38FFA16D2BD761DCAC474B9A2F502 + 3A4" + and uy = of_h + "0493101C962CD4D2FDDF782285E64584139C2F91B47F87FF82354D6630F746A2 + 8A0DB25741B5B34A828008B22ACC23F924FAAFBD4D33F81EA66956DFEAA2BFDF + CF5" + in + match Mirage_crypto_ec.P521.Dsa.pub_of_cstruct (Cstruct.concat [ fst ; ux ; uy ]) with + | Ok p -> + let pub_eq = + Cstruct.equal + (Mirage_crypto_ec.P521.Dsa.pub_to_cstruct pub) + (Mirage_crypto_ec.P521.Dsa.pub_to_cstruct p) + in + Alcotest.(check bool __LOC__ true pub_eq) + | Error _ -> Alcotest.fail "bad public key" + in + let case hash ~message ~k ~r ~s () = + let msg = Mirage_crypto.Hash.digest hash (Cstruct.of_string message) + and k = of_h k + in + let k' = + let module H = (val (Mirage_crypto.Hash.module_of hash)) in + let module K = Mirage_crypto_ec.P521.Dsa.K_gen (H) in + K.generate ~key:priv msg + in + Alcotest.(check bool __LOC__ true (Cstruct.equal k k')); + let sig_eq (r', s') = + Cstruct.equal (of_h r) r' && Cstruct.equal (of_h s) s' + in + let sig' = Mirage_crypto_ec.P521.Dsa.sign ~key:priv ~k msg in + Alcotest.(check bool __LOC__ true (sig_eq sig')) + in + let _cases = [ + + case `SHA1 ~message:"sample" + ~k:"089C071B419E1C2820962321787258469511958E80582E95D8378E0C2CCDB3CB + 42BEDE42F50E3FA3C71F5A76724281D31D9C89F0F91FC1BE4918DB1C03A5838D + 0F9" + ~r:"0343B6EC45728975EA5CBA6659BBB6062A5FF89EEA58BE3C80B619F322C87910 + FE092F7D45BB0F8EEE01ED3F20BABEC079D202AE677B243AB40B5431D497C55D + 75D" + ~s:"0E7B0E675A9B24413D448B8CC119D2BF7B2D2DF032741C096634D6D65D0DBE3D + 5694625FB9E8104D3B842C1B0E2D0B98BEA19341E8676AEF66AE4EBA3D5475D5 + D16"; + + case `SHA224 ~message:"sample" + ~k:"121415EC2CD7726330A61F7F3FA5DE14BE9436019C4DB8CB4041F3B54CF31BE0 + 493EE3F427FB906393D895A19C9523F3A1D54BB8702BD4AA9C99DAB2597B9211 + 3F3" + ~r:"1776331CFCDF927D666E032E00CF776187BC9FDD8E69D0DABB4109FFE1B5E2A3 + 0715F4CC923A4A5E94D2503E9ACFED92857B7F31D7152E0F8C00C15FF3D87E2E + D2E" + ~s:"050CB5265417FE2320BBB5A122B8E1A32BD699089851128E360E620A30C7E17B + A41A666AF126CE100E5799B153B60528D5300D08489CA9178FB610A2006C254B + 41F"; + + case `SHA256 ~message:"sample" + ~k:"0EDF38AFCAAECAB4383358B34D67C9F2216C8382AAEA44A3DAD5FDC9C3257576 + 1793FEF24EB0FC276DFC4F6E3EC476752F043CF01415387470BCBD8678ED2C7E + 1A0" + ~r:"1511BB4D675114FE266FC4372B87682BAECC01D3CC62CF2303C92B3526012659 + D16876E25C7C1E57648F23B73564D67F61C6F14D527D54972810421E7D87589E + 1A7" + ~s:"04A171143A83163D6DF460AAF61522695F207A58B95C0644D87E52AA1A347916 + E4F7A72930B1BC06DBE22CE3F58264AFD23704CBB63B29B931F7DE6C9D949A7E + CFC"; + + case `SHA384 ~message:"sample" + ~k:"1546A108BC23A15D6F21872F7DED661FA8431DDBD922D0DCDB77CC878C8553FF + AD064C95A920A750AC9137E527390D2D92F153E66196966EA554D9ADFCB109C4 + 211" + ~r:"1EA842A0E17D2DE4F92C15315C63DDF72685C18195C2BB95E572B9C5136CA4B4 + B576AD712A52BE9730627D16054BA40CC0B8D3FF035B12AE75168397F5D50C67 + 451" + ~s:"1F21A3CEE066E1961025FB048BD5FE2B7924D0CD797BABE0A83B66F1E35EEAF5 + FDE143FA85DC394A7DEE766523393784484BDF3E00114A1C857CDE1AA203DB65 + D61"; + + case `SHA512 ~message:"sample" + ~k:"1DAE2EA071F8110DC26882D4D5EAE0621A3256FC8847FB9022E2B7D28E6F1019 + 8B1574FDD03A9053C08A1854A168AA5A57470EC97DD5CE090124EF52A2F7ECBF + FD3" + ~r:"0C328FAFCBD79DD77850370C46325D987CB525569FB63C5D3BC53950E6D4C5F1 + 74E25A1EE9017B5D450606ADD152B534931D7D4E8455CC91F9B15BF05EC36E37 + 7FA" + ~s:"0617CCE7CF5064806C467F678D3B4080D6F1CC50AF26CA209417308281B68AF2 + 82623EAA63E5B5C0723D8B8C37FF0777B1A20F8CCB1DCCC43997F1EE0E44DA4A + 67A"; + + case `SHA1 ~message:"test" + ~k:"0BB9F2BF4FE1038CCF4DABD7139A56F6FD8BB1386561BD3C6A4FC818B20DF5DD + BA80795A947107A1AB9D12DAA615B1ADE4F7A9DC05E8E6311150F47F5C57CE8B + 222" + ~r:"13BAD9F29ABE20DE37EBEB823C252CA0F63361284015A3BF430A46AAA80B87B0 + 693F0694BD88AFE4E661FC33B094CD3B7963BED5A727ED8BD6A3A202ABE009D0 + 367" + ~s:"1E9BB81FF7944CA409AD138DBBEE228E1AFCC0C890FC78EC8604639CB0DBDC90 + F717A99EAD9D272855D00162EE9527567DD6A92CBD629805C0445282BBC91679 + 7FF"; + + case `SHA224 ~message:"test" + ~k:"040D09FCF3C8A5F62CF4FB223CBBB2B9937F6B0577C27020A99602C25A011369 + 87E452988781484EDBBCF1C47E554E7FC901BC3085E5206D9F619CFF07E73D6F + 706" + ~r:"1C7ED902E123E6815546065A2C4AF977B22AA8EADDB68B2C1110E7EA44D42086 + BFE4A34B67DDC0E17E96536E358219B23A706C6A6E16BA77B65E1C595D43CAE1 + 7FB" + ~s:"177336676304FCB343CE028B38E7B4FBA76C1C1B277DA18CAD2A8478B2A9A9F5 + BEC0F3BA04F35DB3E4263569EC6AADE8C92746E4C82F8299AE1B8F1739F8FD51 + 9A4"; + + case `SHA256 ~message:"test" + ~k:"01DE74955EFAABC4C4F17F8E84D881D1310B5392D7700275F82F145C61E84384 + 1AF09035BF7A6210F5A431A6A9E81C9323354A9E69135D44EBD2FCAA7731B909 + 258" + ~r:"00E871C4A14F993C6C7369501900C4BC1E9C7B0B4BA44E04868B30B41D807104 + 2EB28C4C250411D0CE08CD197E4188EA4876F279F90B3D8D74A3C76E6F1E4656 + AA8" + ~s:"0CD52DBAA33B063C3A6CD8058A1FB0A46A4754B034FCC644766CA14DA8CA5CA9 + FDE00E88C1AD60CCBA759025299079D7A427EC3CC5B619BFBC828E7769BCD694 + E86"; + + case `SHA384 ~message:"test" + ~k:"1F1FC4A349A7DA9A9E116BFDD055DC08E78252FF8E23AC276AC88B1770AE0B5D + CEB1ED14A4916B769A523CE1E90BA22846AF11DF8B300C38818F713DADD85DE0 + C88" + ~r:"14BEE21A18B6D8B3C93FAB08D43E739707953244FDBE924FA926D76669E7AC8C + 89DF62ED8975C2D8397A65A49DCC09F6B0AC62272741924D479354D74FF60755 + 78C" + ~s:"133330865C067A0EAF72362A65E2D7BC4E461E8C8995C3B6226A21BD1AA78F0E + D94FE536A0DCA35534F0CD1510C41525D163FE9D74D134881E35141ED5E8E95B + 979"; + + case `SHA512 ~message:"test" + ~k:"16200813020EC986863BEDFC1B121F605C1215645018AEA1A7B215A564DE9EB1 + B38A67AA1128B80CE391C4FB71187654AAA3431027BFC7F395766CA988C964DC + 56D" + ~r:"13E99020ABF5CEE7525D16B69B229652AB6BDF2AFFCAEF38773B4B7D08725F10 + CDB93482FDCC54EDCEE91ECA4166B2A7C6265EF0CE2BD7051B7CEF945BABD47E + E6D" + ~s:"1FBD0013C674AA79CB39849527916CE301C66EA7CE8B80682786AD60F98F7E78 + A19CA69EFF5C57400E3B3A0AD66CE0978214D13BAF4E9AC60752F7B155E2DE4D + CE3" + + ] in + [ ("public key matches", `Quick, pub_rfc) ] + (* TODO: our deterministic generator for bit_size mod 8 <> 0 is different from RFC 6979 *) + (* List.mapi (fun i c -> "RFC 6979 A.2.7 " ^ string_of_int i, `Quick, c) cases *) + let () = - Alcotest.run "P256 ECDH" + Mirage_crypto_rng_unix.initialize (); + Alcotest.run "P256 EC" [ ("Key exchange", key_exchange); ("Low level scalar mult", scalar_mult); ("Point validation", point_validation); ("Scalar validation when generating", scalar_validation); + ("ECDSA NIST", ecdsa); + ("ECDSA RFC 6979 P224", ecdsa_rfc6979_p224); + ("ECDSA RFC 6979 P256", ecdsa_rfc6979_p256); + ("ECDSA RFC 6979 P384", ecdsa_rfc6979_p384); + ("ECDSA RFC 6979 P521", ecdsa_rfc6979_p521); ] diff --git a/tests/test_ec_wycheproof.ml b/tests/test_ec_wycheproof.ml new file mode 100644 index 00000000..12f9677e --- /dev/null +++ b/tests/test_ec_wycheproof.ml @@ -0,0 +1,235 @@ +open Wycheproof + +let hex = Alcotest.testable Wycheproof.pp_hex Wycheproof.equal_hex + +let parse_asn1 curve s = + let cs = Cstruct.of_string s in + let seq2 a b = Asn.S.(sequence2 (required a) (required b)) in + let term = Asn.S.(seq2 (seq2 oid oid) bit_string_cs) in + let ec_public_key = Asn.OID.(base 1 2 <|| [ 840; 10045; 2; 1 ]) in + let prime_oid = match curve with + | "secp224r1" -> Asn.OID.(base 1 3 <|| [ 132; 0; 33 ]) + | "secp256r1" -> Asn.OID.(base 1 2 <|| [ 840; 10045; 3; 1; 7 ]) + | "secp384r1" -> Asn.OID.(base 1 3 <|| [ 132; 0; 34 ]) + | "secp521r1" -> Asn.OID.(base 1 3 <|| [ 132; 0; 35 ]) + | _ -> assert false + in + match Asn.decode (Asn.codec Asn.ber term) cs with + | Error _ -> Error "ASN1 parse error" + | Ok (((oid1, oid2), data), rest) -> + if Cstruct.len rest <> 0 then Error "ASN1 leftover" + else if not (Asn.OID.equal oid1 ec_public_key) then + Error "ASN1: wrong oid 1" + else if not (Asn.OID.equal oid2 prime_oid) then Error "ASN1: wrong oid 2" + else Ok (Cstruct.to_string data) + +let ( >>= ) xr f = match xr with Error _ as e -> e | Ok x -> f x + +let parse_point curve p = + parse_asn1 curve p >>= fun h -> + Ok Hex.(to_cstruct (of_string h)) + +let to_string_result ~pp_error = function + | Ok _ as ok -> ok + | Error e -> + let msg = Format.asprintf "%a" pp_error e in + Error msg + +let pad ~total_len cs = + match total_len - Cstruct.len cs with + | 0 -> Ok cs + | n when n < 0 -> + let is_zero = ref true in + for i = 0 to abs n - 1 do + if Cstruct.get_uint8 cs i <> 0 then + is_zero := false + done; + if !is_zero then + Ok (Cstruct.sub cs (abs n) total_len) + else + Error "input is too long" + | pad_len -> Ok (Cstruct.append (Cstruct.create pad_len) cs) + +let len = function + | "secp224r1" -> 28 + | "secp256r1" -> 32 + | "secp384r1" -> 48 + | "secp521r1" -> 66 + | _ -> assert false + +let parse_secret curve s = + let total_len = len curve in + pad ~total_len (Cstruct.of_string s) + +type test = { + public_key : Cstruct.t; + raw_private_key : Cstruct.t; + expected : string; +} + +let perform_key_exchange curve ~public_key ~raw_private_key = + let open Mirage_crypto_ec in + let rng _ = raw_private_key in + to_string_result ~pp_error + (match curve with + | "secp224r1" -> + P224.Dh.key_exchange (fst (P224.Dh.gen_key ~rng)) public_key + | "secp256r1" -> + P256.Dh.key_exchange (fst (P256.Dh.gen_key ~rng)) public_key + | "secp384r1" -> + P384.Dh.key_exchange (fst (P384.Dh.gen_key ~rng)) public_key + | "secp521r1" -> + P521.Dh.key_exchange (fst (P521.Dh.gen_key ~rng)) public_key + | _ -> assert false) + +let interpret_test ~tcId curve { public_key; raw_private_key; expected } () = + match perform_key_exchange curve ~public_key ~raw_private_key with + | Ok cs -> + let got = Cstruct.to_string cs in + Alcotest.check hex __LOC__ expected got + | Error err -> Printf.ksprintf Alcotest.fail "While parsing %d: %s" tcId err + +type invalid_test = { public : string; private_ : string } + +let is_ok = function Ok _ -> true | Error _ -> false + +let interpret_invalid_test curve { public; private_ } () = + let result = + parse_point curve public >>= fun public_key -> + parse_secret curve private_ >>= fun raw_private_key -> + perform_key_exchange curve ~public_key ~raw_private_key + in + Alcotest.check Alcotest.bool __LOC__ false (is_ok result) + +type strategy = Test of test | Invalid_test of invalid_test | Skip + +let make_ecdh_test curve (test : ecdh_test) = + let ignored_flags = [ "CompressedPoint"; "UnnamedCurve" ] in + match test.result with + | _ when has_ignored_flag test ~ignored_flags -> Ok Skip + | Invalid -> + Ok (Invalid_test { public = test.public; private_ = test.private_ }) + | Acceptable -> Ok Skip + | Valid -> + parse_point curve test.public >>= fun public_key -> + parse_secret curve test.private_ >>= fun raw_private_key -> + Ok (Test { public_key; raw_private_key; expected = test.shared }) + +let concat_map f l = List.map f l |> List.concat + +let to_ecdh_tests curve (x : ecdh_test) = + let name = Printf.sprintf "%d - %s" x.tcId x.comment in + match make_ecdh_test curve x with + | Ok (Test t) -> [ (name, `Quick, interpret_test ~tcId:x.tcId curve t) ] + | Ok (Invalid_test t) -> [ (name, `Quick, interpret_invalid_test curve t) ] + | Ok Skip -> [] + | Error e -> Printf.ksprintf failwith "While parsing %d: %s" x.tcId e + +let ecdh_tests file = + let data = load_file_exn file in + let groups : ecdh_test_group list = + List.map ecdh_test_group_exn data.testGroups + in + concat_map (fun (group : ecdh_test_group) -> + concat_map (to_ecdh_tests group.curve) group.tests) + groups + +let parse_sig size cs = + let asn = Asn.S.(sequence2 (required integer) (required integer)) in + match Asn.(decode (codec der asn) cs) with + | Error _ -> Error "ASN1 parse error" + | Ok ((r, s), rest) -> + if Cstruct.len rest <> 0 then Error "ASN1 leftover" + else + let check_size y = + let bytes x = 1 + ((x - 1) / 8) in + if bytes (Z.numbits y) > size then + Error "signature too long" + else + Ok () + in + check_size r >>= fun () -> + check_size s >>= fun () -> + if Z.sign r < 0 || Z.sign s < 0 then + Error "r or s must be > 0" + else + Ok (Mirage_crypto_pk.Z_extra.to_cstruct_be ~size r, + Mirage_crypto_pk.Z_extra.to_cstruct_be ~size s) + +let make_ecdsa_test curve key hash (tst : ecdsa_test) = + let name = Printf.sprintf "%d - %s" tst.tcId tst.comment in + let msg = Mirage_crypto.Hash.digest hash (Cstruct.of_string tst.msg) in + let size = len curve in + let verified (r,s) = + match curve with + | "secp224r1" -> + begin match Mirage_crypto_ec.P224.Dsa.pub_of_cstruct key with + | Ok key -> Mirage_crypto_ec.P224.Dsa.verify ~key (r, s) msg + | Error _ -> assert false + end + | "secp256r1" -> + begin match Mirage_crypto_ec.P256.Dsa.pub_of_cstruct key with + | Ok key -> Mirage_crypto_ec.P256.Dsa.verify ~key (r, s) msg + | Error _ -> assert false + end + | "secp384r1" -> + begin match Mirage_crypto_ec.P384.Dsa.pub_of_cstruct key with + | Ok key -> Mirage_crypto_ec.P384.Dsa.verify ~key (r, s) msg + | Error _ -> assert false + end + | "secp521r1" -> + begin match Mirage_crypto_ec.P521.Dsa.pub_of_cstruct key with + | Ok key -> Mirage_crypto_ec.P521.Dsa.verify ~key (r, s) msg + | Error _ -> assert false + end + | _ -> assert false + in + match tst.result with + | Acceptable + | Invalid -> + let f () = + match parse_sig size (Cstruct.of_string tst.sig_) with + | Ok (r, s) -> Alcotest.(check bool __LOC__ false (verified (r, s))) + | Error _s -> () + in + name, `Quick, f + | Valid -> + let f () = + match parse_sig size (Cstruct.of_string tst.sig_) with + | Ok (r, s) -> Alcotest.(check bool __LOC__ true (verified (r, s))) + | Error s -> Alcotest.fail s + in + name, `Quick, f + +let to_ecdsa_tests (x : ecdsa_test_group) = + let hash = match x.sha with + | "SHA-256" -> `SHA256 + | "SHA-384" -> `SHA384 + | "SHA-512" -> `SHA512 + | "SHA-224" -> `SHA224 + | _ -> assert false + in + List.map (make_ecdsa_test x.key.curve (Cstruct.of_string x.key.uncompressed) hash) x.tests + +let ecdsa_tests file = + let data = load_file_exn file in + let groups : ecdsa_test_group list = + List.map ecdsa_test_group_exn data.testGroups + in + concat_map to_ecdsa_tests groups + +let () = + Alcotest.run "Wycheproof NIST curves" [ + ("ECDH P224 test vectors", ecdh_tests "ecdh_secp224r1_test.json") ; + ("ECDSA P224 test vectors (SHA224)", ecdsa_tests "ecdsa_secp224r1_sha224_test.json") ; + ("ECDSA P224 test vectors (SHA256)", ecdsa_tests "ecdsa_secp224r1_sha256_test.json") ; + ("ECDSA P224 test vectors (SHA512)", ecdsa_tests "ecdsa_secp224r1_sha512_test.json") ; + ("ECDH P256 test vectors", ecdh_tests "ecdh_secp256r1_test.json") ; + ("ECDSA P256 test vectors (SHA256)", ecdsa_tests "ecdsa_secp256r1_sha256_test.json") ; + ("ECDSA P256 test vectors (SHA512)", ecdsa_tests "ecdsa_secp256r1_sha512_test.json") ; + ("ECDH P384 test vectors", ecdh_tests "ecdh_secp384r1_test.json") ; + ("ECDSA P384 test vectors (SHA384)", ecdsa_tests "ecdsa_secp384r1_sha384_test.json") ; + ("ECDSA P384 test vectors (SHA512)", ecdsa_tests "ecdsa_secp384r1_sha512_test.json") ; + ("ECDH P521 test vectors", ecdh_tests "ecdh_secp521r1_test.json") ; + ("ECDSA P521 test vectors (SHA512)", ecdsa_tests "ecdsa_secp521r1_sha512_test.json") + ] diff --git a/tests/test_ec_wycheproof_secp256r1.ml b/tests/test_ec_wycheproof_secp256r1.ml deleted file mode 100644 index 1c967979..00000000 --- a/tests/test_ec_wycheproof_secp256r1.ml +++ /dev/null @@ -1,112 +0,0 @@ -open Wycheproof - -let hex = Alcotest.testable Wycheproof.pp_hex Wycheproof.equal_hex - -let parse_asn1 s = - let cs = Cstruct.of_string s in - let seq2 a b = Asn.S.(sequence2 (required a) (required b)) in - let term = Asn.S.(seq2 (seq2 oid oid) bit_string_cs) in - let ec_public_key = Asn.OID.(base 1 2 <|| [ 840; 10045; 2; 1 ]) in - let prime256v1 = Asn.OID.(base 1 2 <|| [ 840; 10045; 3; 1; 7 ]) in - match Asn.decode (Asn.codec Asn.ber term) cs with - | Error _ -> Error "ASN1 parse error" - | Ok (((oid1, oid2), data), rest) -> - if Cstruct.len rest <> 0 then Error "ASN1 leftover" - else if not (Asn.OID.equal oid1 ec_public_key) then - Error "ASN1: wrong oid 1" - else if not (Asn.OID.equal oid2 prime256v1) then Error "ASN1: wrong oid 2" - else Ok (Cstruct.to_string data) - -let ( >>= ) xr f = match xr with Error _ as e -> e | Ok x -> f x - -let parse_point p = parse_asn1 p >>= fun h -> Ok Hex.(to_cstruct (of_string h)) - -let to_string_result ~pp_error = function - | Ok _ as ok -> ok - | Error e -> - let msg = Format.asprintf "%a" pp_error e in - Error msg - -let strip_leading_zeroes cs = - let first_nonzero_index = ref None in - let cs_len = Cstruct.len cs in - for i = cs_len - 1 downto 0 do - if Cstruct.get_uint8 cs i <> 0 then first_nonzero_index := Some i - done; - match !first_nonzero_index with - | None -> Cstruct.empty - | Some i -> - let off = i in - let len = cs_len - i in - Cstruct.sub cs off len - -let pad ~total_len cs = - match total_len - Cstruct.len cs with - | 0 -> Ok cs - | n when n < 0 -> Error "input is too long" - | pad_len -> Ok (Cstruct.append cs (Cstruct.create pad_len)) - -let parse_secret s = - let stripped = strip_leading_zeroes (Cstruct.of_string s) in - pad ~total_len:32 (Cstruct.rev stripped) >>= fun cs -> Ok (Cstruct.rev cs) - -type test = { - public_key : Cstruct.t; - raw_private_key : Cstruct.t; - expected : string; -} - -let perform_key_exchange ~public_key ~raw_private_key = - let open Mirage_crypto_ec in - let gen _ = raw_private_key in - let secret, _ = gen_key ~rng:gen in - to_string_result ~pp_error (key_exchange secret public_key) - -let interpret_test ~tcId { public_key; raw_private_key; expected } () = - match perform_key_exchange ~public_key ~raw_private_key with - | Ok cs -> - let got = Cstruct.to_string cs in - Alcotest.check hex __LOC__ expected got - | Error err -> Printf.ksprintf Alcotest.fail "While parsing %d: %s" tcId err - -type invalid_test = { public : string; private_ : string } - -let is_ok = function Ok _ -> true | Error _ -> false - -let interpret_invalid_test { public; private_ } () = - let result = - parse_point public >>= fun public_key -> - parse_secret private_ >>= fun raw_private_key -> - perform_key_exchange ~public_key ~raw_private_key - in - Alcotest.check Alcotest.bool __LOC__ false (is_ok result) - -type strategy = Test of test | Invalid_test of invalid_test | Skip - -let make_test test = - let ignored_flags = [ "CompressedPoint"; "UnnamedCurve" ] in - match test.result with - | _ when has_ignored_flag test ~ignored_flags -> Ok Skip - | Invalid -> - Ok (Invalid_test { public = test.public; private_ = test.private_ }) - | Acceptable -> Ok Skip - | Valid -> - parse_point test.public >>= fun public_key -> - parse_secret test.private_ >>= fun raw_private_key -> - Ok (Test { public_key; raw_private_key; expected = test.shared }) - -let concat_map f l = List.map f l |> List.concat - -let to_tests x = - let name = Printf.sprintf "%d - %s" x.tcId x.comment in - match make_test x with - | Ok (Test t) -> [ (name, `Quick, interpret_test ~tcId:x.tcId t) ] - | Ok (Invalid_test t) -> [ (name, `Quick, interpret_invalid_test t) ] - | Ok Skip -> [] - | Error e -> Printf.ksprintf failwith "While parsing %d: %s" x.tcId e - -let tests = - let data = load_file_exn "ecdh_secp256r1_test.json" in - concat_map (fun group -> concat_map to_tests group.tests) data.testGroups - -let () = Alcotest.run "Wycheproof-hacl-p256" [ ("test vectors", tests) ] diff --git a/tests/wycheproof/wycheproof.ml b/tests/wycheproof/wycheproof.ml index 2572dd89..1b239615 100644 --- a/tests/wycheproof/wycheproof.ml +++ b/tests/wycheproof/wycheproof.ml @@ -1,5 +1,3 @@ -[@@@ocaml.warning "-39"] - type json = Yojson.Safe.t [@@deriving of_yojson] let pp_json = Yojson.Safe.pretty_print @@ -24,7 +22,7 @@ let test_result_of_yojson = function | `String "invalid" -> Ok Invalid | _ -> Error "test_result" -type test = { +type ecdh_test = { tcId : int; comment : string; curve : json option; [@yojson.default None] @@ -41,21 +39,52 @@ let has_ignored_flag test ~ignored_flags = (fun ignored_flag -> List.mem ignored_flag test.flags) ignored_flags -type test_group = { - curve : json; - tests : test list; +type ecdh_test_group = { + curve : string; + tests : ecdh_test list; encoding : json option; [@yojson.default None] type_ : json option; [@yojson.default None] [@yojson.key "type"] } [@@deriving of_yojson, show] +type ecdsa_key = { + curve : string; + keySize : int; + type_ : json; [@yojson.key "type"] + uncompressed : hex; + wx : hex; + wy : hex; +} +[@@deriving of_yojson, show] + +type ecdsa_test = { + tcId : int; + comment : string; + msg : hex; + sig_ : hex; [@yojson.key "sig"] + result : test_result; + flags : string list; +} +[@@deriving of_yojson, show] + +type ecdsa_test_group = { + key : ecdsa_key; + keyDer : string; + keyPem : string; + sha : string; + tests : ecdsa_test list; + type_ : json option; [@yojson.default None] [@yojson.key "type"] +} +[@@deriving of_yojson, show] + type test_file = { algorithm : json; generatorVersion : json; header : json; notes : json; numberOfTests : json; - testGroups : test_group list; + schema : json; + testGroups : json list; } [@@deriving of_yojson, show] @@ -63,3 +92,7 @@ let get_json = function Ok x -> x | Error s -> failwith s let load_file_exn path = Yojson.Safe.from_file path |> [%of_yojson: test_file] |> get_json + +let ecdh_test_group_exn json = [%of_yojson: ecdh_test_group] json |> get_json + +let ecdsa_test_group_exn json = [%of_yojson: ecdsa_test_group] json |> get_json diff --git a/tests/wycheproof/wycheproof.mli b/tests/wycheproof/wycheproof.mli index 40e64ad1..24076d08 100644 --- a/tests/wycheproof/wycheproof.mli +++ b/tests/wycheproof/wycheproof.mli @@ -6,7 +6,7 @@ val pp_hex : Format.formatter -> hex -> unit type test_result = Valid | Acceptable | Invalid [@@deriving show] -type test = { +type ecdh_test = { tcId : int; comment : string; curve : json option; @@ -18,24 +18,59 @@ type test = { } [@@deriving show] -val has_ignored_flag : test -> ignored_flags:string list -> bool +val has_ignored_flag : ecdh_test -> ignored_flags:string list -> bool -type test_group = { - curve : json; - tests : test list; +type ecdh_test_group = { + curve : string; + tests : ecdh_test list; encoding : json option; type_ : json option; } [@@deriving show] +type ecdsa_key = { + curve : string; + keySize : int; + type_ : json; + uncompressed : hex; + wx : hex; + wy : hex; +} +[@@deriving show] + +type ecdsa_test = { + tcId : int; + comment : string; + msg : hex; + sig_ : hex; + result : test_result; + flags : string list; +} +[@@deriving show] + +type ecdsa_test_group = { + key : ecdsa_key; + keyDer : string; + keyPem : string; + sha : string; + tests : ecdsa_test list; + type_ : json option; +} +[@@deriving show] + type test_file = { algorithm : json; generatorVersion : json; header : json; notes : json; numberOfTests : json; - testGroups : test_group list; + schema : json; + testGroups : json list; } [@@deriving show] val load_file_exn : string -> test_file + +val ecdh_test_group_exn : json -> ecdh_test_group + +val ecdsa_test_group_exn : json -> ecdsa_test_group