// The MIT License (MIT)
//
// Copyright (c) 2015-2016 the fiat-crypto authors (see the AUTHORS file).
//
// 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.

// The field arithmetic code is generated by Fiat
// (https://github.com/mit-plv/fiat-crypto), which is MIT licensed.
//
// An implementation of the NIST P-256 elliptic curve point multiplication.
// 256-bit Montgomery form, generated using fiat-crypto, for 64 and 32-bit.
// Field operations with inputs in [0,p) return outputs in [0,p).

#include <openssl/base.h>

#include <openssl/bn.h>
#include <openssl/ec.h>
#include <openssl/err.h>
#include <openssl/mem.h>
#include <openssl/type_check.h>

#include <assert.h>
#include <string.h>

#include "../../crypto/fipsmodule/delocate.h"
#include "../../crypto/fipsmodule/ec/internal.h"
#include "../../crypto/internal.h"


// MSVC does not implement uint128_t, and crashes with intrinsics
#if defined(BORINGSSL_HAS_UINT128)
#define BORINGSSL_NISTP256_64BIT 1
#endif

// "intrinsics"

#if defined(BORINGSSL_NISTP256_64BIT)

static uint64_t mulx_u64(uint64_t a, uint64_t b, uint64_t *high) {
  uint128_t x = (uint128_t)a * b;
  *high = (uint64_t) (x >> 64);
  return (uint64_t) x;
}

static uint64_t addcarryx_u64(uint8_t c, uint64_t a, uint64_t b, uint64_t *low) {
  uint128_t x = (uint128_t)a + b + c;
  *low = (uint64_t) x;
  return (uint64_t) (x>>64);
}

static uint64_t subborrow_u64(uint8_t c, uint64_t a, uint64_t b, uint64_t *low) {
  uint128_t t = ((uint128_t) b + c);
  uint128_t x = a-t;
  *low = (uint64_t) x;
  return (uint8_t) (x>>127);
}

static uint64_t cmovznz_u64(uint64_t t, uint64_t z, uint64_t nz) {
  t = -!!t; // all set if nonzero, 0 if 0
  return (t&nz) | ((~t)&z);
}

#else

static uint32_t mulx_u32(uint32_t a, uint32_t b, uint32_t *high) {
  uint64_t x = (uint64_t)a * b;
  *high = (uint32_t) (x >> 32);
  return (uint32_t) x;
}

static uint32_t addcarryx_u32(uint8_t c, uint32_t a, uint32_t b, uint32_t *low) {
  uint64_t x = (uint64_t)a + b + c;
  *low = (uint32_t) x;
  return (uint32_t) (x>>32);
}

static uint32_t subborrow_u32(uint8_t c, uint32_t a, uint32_t b, uint32_t *low) {
  uint64_t t = ((uint64_t) b + c);
  uint64_t x = a-t;
  *low = (uint32_t) x;
  return (uint8_t) (x>>63);
}

static uint32_t cmovznz_u32(uint32_t t, uint32_t z, uint32_t nz) {
  t = -!!t; // all set if nonzero, 0 if 0
  return (t&nz) | ((~t)&z);
}

#endif

// fiat-crypto generated code

#if defined(BORINGSSL_NISTP256_64BIT)

static void fe_add(uint64_t out[4], const uint64_t in1[4], const uint64_t in2[4]) {
  { const uint64_t x8 = in1[3];
  { const uint64_t x9 = in1[2];
  { const uint64_t x7 = in1[1];
  { const uint64_t x5 = in1[0];
  { const uint64_t x14 = in2[3];
  { const uint64_t x15 = in2[2];
  { const uint64_t x13 = in2[1];
  { const uint64_t x11 = in2[0];
  { uint64_t x17; uint8_t x18 = addcarryx_u64(0x0, x5, x11, &x17);
  { uint64_t x20; uint8_t x21 = addcarryx_u64(x18, x7, x13, &x20);
  { uint64_t x23; uint8_t x24 = addcarryx_u64(x21, x9, x15, &x23);
  { uint64_t x26; uint8_t x27 = addcarryx_u64(x24, x8, x14, &x26);
  { uint64_t x29; uint8_t x30 = subborrow_u64(0x0, x17, 0xffffffffffffffffL, &x29);
  { uint64_t x32; uint8_t x33 = subborrow_u64(x30, x20, 0xffffffff, &x32);
  { uint64_t x35; uint8_t x36 = subborrow_u64(x33, x23, 0x0, &x35);
  { uint64_t x38; uint8_t x39 = subborrow_u64(x36, x26, 0xffffffff00000001L, &x38);
  { uint64_t _1; uint8_t x42 = subborrow_u64(x39, x27, 0x0, &_1);
  { uint64_t x43 = cmovznz_u64(x42, x38, x26);
  { uint64_t x44 = cmovznz_u64(x42, x35, x23);
  { uint64_t x45 = cmovznz_u64(x42, x32, x20);
  { uint64_t x46 = cmovznz_u64(x42, x29, x17);
  out[0] = x46;
  out[1] = x45;
  out[2] = x44;
  out[3] = x43;
  }}}}}}}}}}}}}}}}}}}}}
}

// fe_op sets out = -in
static void fe_opp(uint64_t out[4], const uint64_t in1[4]) {
  const uint64_t x5 = in1[3];
  const uint64_t x6 = in1[2];
  const uint64_t x4 = in1[1];
  const uint64_t x2 = in1[0];
  uint64_t x8; uint8_t x9 = subborrow_u64(0x0, 0x0, x2, &x8);
  uint64_t x11; uint8_t x12 = subborrow_u64(x9, 0x0, x4, &x11);
  uint64_t x14; uint8_t x15 = subborrow_u64(x12, 0x0, x6, &x14);
  uint64_t x17; uint8_t x18 = subborrow_u64(x15, 0x0, x5, &x17);
  uint64_t x19 = (uint64_t)cmovznz_u64(x18, 0x0, 0xffffffffffffffffL);
  uint64_t x20 = (x19 & 0xffffffffffffffffL);
  uint64_t x22; uint8_t x23 = addcarryx_u64(0x0, x8, x20, &x22);
  uint64_t x24 = (x19 & 0xffffffff);
  uint64_t x26; uint8_t x27 = addcarryx_u64(x23, x11, x24, &x26);
  uint64_t x29; uint8_t x30 = addcarryx_u64(x27, x14, 0x0, &x29);
  uint64_t x31 = (x19 & 0xffffffff00000001L);
  uint64_t x33; addcarryx_u64(x30, x17, x31, &x33);
  out[0] = x22;
  out[1] = x26;
  out[2] = x29;
  out[3] = x33;
}

static void fe_mul(uint64_t out[4], const uint64_t in1[4], const uint64_t in2[4]) {
  const uint64_t x8 = in1[3];
  const uint64_t x9 = in1[2];
  const uint64_t x7 = in1[1];
  const uint64_t x5 = in1[0];
  const uint64_t x14 = in2[3];
  const uint64_t x15 = in2[2];
  const uint64_t x13 = in2[1];
  const uint64_t x11 = in2[0];
  uint64_t x18;  uint64_t x17 = mulx_u64(x5, x11, &x18);
  uint64_t x21;  uint64_t x20 = mulx_u64(x5, x13, &x21);
  uint64_t x24;  uint64_t x23 = mulx_u64(x5, x15, &x24);
  uint64_t x27;  uint64_t x26 = mulx_u64(x5, x14, &x27);
  uint64_t x29; uint8_t x30 = addcarryx_u64(0x0, x18, x20, &x29);
  uint64_t x32; uint8_t x33 = addcarryx_u64(x30, x21, x23, &x32);
  uint64_t x35; uint8_t x36 = addcarryx_u64(x33, x24, x26, &x35);
  uint64_t x38; addcarryx_u64(0x0, x36, x27, &x38);
  uint64_t x42;  uint64_t x41 = mulx_u64(x17, 0xffffffffffffffffL, &x42);
  uint64_t x45;  uint64_t x44 = mulx_u64(x17, 0xffffffff, &x45);
  uint64_t x48;  uint64_t x47 = mulx_u64(x17, 0xffffffff00000001L, &x48);
  uint64_t x50; uint8_t x51 = addcarryx_u64(0x0, x42, x44, &x50);
  uint64_t x53; uint8_t x54 = addcarryx_u64(x51, x45, 0x0, &x53);
  uint64_t x56; uint8_t x57 = addcarryx_u64(x54, 0x0, x47, &x56);
  uint64_t x59; addcarryx_u64(0x0, x57, x48, &x59);
  uint64_t _2; uint8_t x63 = addcarryx_u64(0x0, x17, x41, &_2);
  uint64_t x65; uint8_t x66 = addcarryx_u64(x63, x29, x50, &x65);
  uint64_t x68; uint8_t x69 = addcarryx_u64(x66, x32, x53, &x68);
  uint64_t x71; uint8_t x72 = addcarryx_u64(x69, x35, x56, &x71);
  uint64_t x74; uint8_t x75 = addcarryx_u64(x72, x38, x59, &x74);
  uint64_t x78;  uint64_t x77 = mulx_u64(x7, x11, &x78);
  uint64_t x81;  uint64_t x80 = mulx_u64(x7, x13, &x81);
  uint64_t x84;  uint64_t x83 = mulx_u64(x7, x15, &x84);
  uint64_t x87;  uint64_t x86 = mulx_u64(x7, x14, &x87);
  uint64_t x89; uint8_t x90 = addcarryx_u64(0x0, x78, x80, &x89);
  uint64_t x92; uint8_t x93 = addcarryx_u64(x90, x81, x83, &x92);
  uint64_t x95; uint8_t x96 = addcarryx_u64(x93, x84, x86, &x95);
  uint64_t x98; addcarryx_u64(0x0, x96, x87, &x98);
  uint64_t x101; uint8_t x102 = addcarryx_u64(0x0, x65, x77, &x101);
  uint64_t x104; uint8_t x105 = addcarryx_u64(x102, x68, x89, &x104);
  uint64_t x107; uint8_t x108 = addcarryx_u64(x105, x71, x92, &x107);
  uint64_t x110; uint8_t x111 = addcarryx_u64(x108, x74, x95, &x110);
  uint64_t x113; uint8_t x114 = addcarryx_u64(x111, x75, x98, &x113);
  uint64_t x117;  uint64_t x116 = mulx_u64(x101, 0xffffffffffffffffL, &x117);
  uint64_t x120;  uint64_t x119 = mulx_u64(x101, 0xffffffff, &x120);
  uint64_t x123;  uint64_t x122 = mulx_u64(x101, 0xffffffff00000001L, &x123);
  uint64_t x125; uint8_t x126 = addcarryx_u64(0x0, x117, x119, &x125);
  uint64_t x128; uint8_t x129 = addcarryx_u64(x126, x120, 0x0, &x128);
  uint64_t x131; uint8_t x132 = addcarryx_u64(x129, 0x0, x122, &x131);
  uint64_t x134; addcarryx_u64(0x0, x132, x123, &x134);
  uint64_t _3; uint8_t x138 = addcarryx_u64(0x0, x101, x116, &_3);
  uint64_t x140; uint8_t x141 = addcarryx_u64(x138, x104, x125, &x140);
  uint64_t x143; uint8_t x144 = addcarryx_u64(x141, x107, x128, &x143);
  uint64_t x146; uint8_t x147 = addcarryx_u64(x144, x110, x131, &x146);
  uint64_t x149; uint8_t x150 = addcarryx_u64(x147, x113, x134, &x149);
  uint8_t x151 = (x150 + x114);
  uint64_t x154;  uint64_t x153 = mulx_u64(x9, x11, &x154);
  uint64_t x157;  uint64_t x156 = mulx_u64(x9, x13, &x157);
  uint64_t x160;  uint64_t x159 = mulx_u64(x9, x15, &x160);
  uint64_t x163;  uint64_t x162 = mulx_u64(x9, x14, &x163);
  uint64_t x165; uint8_t x166 = addcarryx_u64(0x0, x154, x156, &x165);
  uint64_t x168; uint8_t x169 = addcarryx_u64(x166, x157, x159, &x168);
  uint64_t x171; uint8_t x172 = addcarryx_u64(x169, x160, x162, &x171);
  uint64_t x174; addcarryx_u64(0x0, x172, x163, &x174);
  uint64_t x177; uint8_t x178 = addcarryx_u64(0x0, x140, x153, &x177);
  uint64_t x180; uint8_t x181 = addcarryx_u64(x178, x143, x165, &x180);
  uint64_t x183; uint8_t x184 = addcarryx_u64(x181, x146, x168, &x183);
  uint64_t x186; uint8_t x187 = addcarryx_u64(x184, x149, x171, &x186);
  uint64_t x189; uint8_t x190 = addcarryx_u64(x187, x151, x174, &x189);
  uint64_t x193;  uint64_t x192 = mulx_u64(x177, 0xffffffffffffffffL, &x193);
  uint64_t x196;  uint64_t x195 = mulx_u64(x177, 0xffffffff, &x196);
  uint64_t x199;  uint64_t x198 = mulx_u64(x177, 0xffffffff00000001L, &x199);
  uint64_t x201; uint8_t x202 = addcarryx_u64(0x0, x193, x195, &x201);
  uint64_t x204; uint8_t x205 = addcarryx_u64(x202, x196, 0x0, &x204);
  uint64_t x207; uint8_t x208 = addcarryx_u64(x205, 0x0, x198, &x207);
  uint64_t x210; addcarryx_u64(0x0, x208, x199, &x210);
  uint64_t _4; uint8_t x214 = addcarryx_u64(0x0, x177, x192, &_4);
  uint64_t x216; uint8_t x217 = addcarryx_u64(x214, x180, x201, &x216);
  uint64_t x219; uint8_t x220 = addcarryx_u64(x217, x183, x204, &x219);
  uint64_t x222; uint8_t x223 = addcarryx_u64(x220, x186, x207, &x222);
  uint64_t x225; uint8_t x226 = addcarryx_u64(x223, x189, x210, &x225);
  uint8_t x227 = (x226 + x190);
  uint64_t x230;  uint64_t x229 = mulx_u64(x8, x11, &x230);
  uint64_t x233;  uint64_t x232 = mulx_u64(x8, x13, &x233);
  uint64_t x236;  uint64_t x235 = mulx_u64(x8, x15, &x236);
  uint64_t x239;  uint64_t x238 = mulx_u64(x8, x14, &x239);
  uint64_t x241; uint8_t x242 = addcarryx_u64(0x0, x230, x232, &x241);
  uint64_t x244; uint8_t x245 = addcarryx_u64(x242, x233, x235, &x244);
  uint64_t x247; uint8_t x248 = addcarryx_u64(x245, x236, x238, &x247);
  uint64_t x250; addcarryx_u64(0x0, x248, x239, &x250);
  uint64_t x253; uint8_t x254 = addcarryx_u64(0x0, x216, x229, &x253);
  uint64_t x256; uint8_t x257 = addcarryx_u64(x254, x219, x241, &x256);
  uint64_t x259; uint8_t x260 = addcarryx_u64(x257, x222, x244, &x259);
  uint64_t x262; uint8_t x263 = addcarryx_u64(x260, x225, x247, &x262);
  uint64_t x265; uint8_t x266 = addcarryx_u64(x263, x227, x250, &x265);
  uint64_t x269;  uint64_t x268 = mulx_u64(x253, 0xffffffffffffffffL, &x269);
  uint64_t x272;  uint64_t x271 = mulx_u64(x253, 0xffffffff, &x272);
  uint64_t x275;  uint64_t x274 = mulx_u64(x253, 0xffffffff00000001L, &x275);
  uint64_t x277; uint8_t x278 = addcarryx_u64(0x0, x269, x271, &x277);
  uint64_t x280; uint8_t x281 = addcarryx_u64(x278, x272, 0x0, &x280);
  uint64_t x283; uint8_t x284 = addcarryx_u64(x281, 0x0, x274, &x283);
  uint64_t x286; addcarryx_u64(0x0, x284, x275, &x286);
  uint64_t _5; uint8_t x290 = addcarryx_u64(0x0, x253, x268, &_5);
  uint64_t x292; uint8_t x293 = addcarryx_u64(x290, x256, x277, &x292);
  uint64_t x295; uint8_t x296 = addcarryx_u64(x293, x259, x280, &x295);
  uint64_t x298; uint8_t x299 = addcarryx_u64(x296, x262, x283, &x298);
  uint64_t x301; uint8_t x302 = addcarryx_u64(x299, x265, x286, &x301);
  uint8_t x303 = (x302 + x266);
  uint64_t x305; uint8_t x306 = subborrow_u64(0x0, x292, 0xffffffffffffffffL, &x305);
  uint64_t x308; uint8_t x309 = subborrow_u64(x306, x295, 0xffffffff, &x308);
  uint64_t x311; uint8_t x312 = subborrow_u64(x309, x298, 0x0, &x311);
  uint64_t x314; uint8_t x315 = subborrow_u64(x312, x301, 0xffffffff00000001L, &x314);
  uint64_t _6; uint8_t x318 = subborrow_u64(x315, x303, 0x0, &_6);
  uint64_t x319 = cmovznz_u64(x318, x314, x301);
  uint64_t x320 = cmovznz_u64(x318, x311, x298);
  uint64_t x321 = cmovznz_u64(x318, x308, x295);
  uint64_t x322 = cmovznz_u64(x318, x305, x292);
  out[0] = x322;
  out[1] = x321;
  out[2] = x320;
  out[3] = x319;
}

static void fe_sub(uint64_t out[4], const uint64_t in1[4], const uint64_t in2[4]) {
  const uint64_t x8 = in1[3];
  const uint64_t x9 = in1[2];
  const uint64_t x7 = in1[1];
  const uint64_t x5 = in1[0];
  const uint64_t x14 = in2[3];
  const uint64_t x15 = in2[2];
  const uint64_t x13 = in2[1];
  const uint64_t x11 = in2[0];
  uint64_t x17; uint8_t x18 = subborrow_u64(0x0, x5, x11, &x17);
  uint64_t x20; uint8_t x21 = subborrow_u64(x18, x7, x13, &x20);
  uint64_t x23; uint8_t x24 = subborrow_u64(x21, x9, x15, &x23);
  uint64_t x26; uint8_t x27 = subborrow_u64(x24, x8, x14, &x26);
  uint64_t x28 = (uint64_t)cmovznz_u64(x27, 0x0, 0xffffffffffffffffL);
  uint64_t x29 = (x28 & 0xffffffffffffffffL);
  uint64_t x31; uint8_t x32 = addcarryx_u64(0x0, x17, x29, &x31);
  uint64_t x33 = (x28 & 0xffffffff);
  uint64_t x35; uint8_t x36 = addcarryx_u64(x32, x20, x33, &x35);
  uint64_t x38; uint8_t x39 = addcarryx_u64(x36, x23, 0x0, &x38);
  uint64_t x40 = (x28 & 0xffffffff00000001L);
  uint64_t x42; addcarryx_u64(x39, x26, x40, &x42);
  out[0] = x31;
  out[1] = x35;
  out[2] = x38;
  out[3] = x42;
}

#else // 64BIT, else 32BIT

static void fe_add(uint32_t out[8], const uint32_t in1[8], const uint32_t in2[8]) {
  const uint32_t x16 = in1[7];
  const uint32_t x17 = in1[6];
  const uint32_t x15 = in1[5];
  const uint32_t x13 = in1[4];
  const uint32_t x11 = in1[3];
  const uint32_t x9 = in1[2];
  const uint32_t x7 = in1[1];
  const uint32_t x5 = in1[0];
  const uint32_t x30 = in2[7];
  const uint32_t x31 = in2[6];
  const uint32_t x29 = in2[5];
  const uint32_t x27 = in2[4];
  const uint32_t x25 = in2[3];
  const uint32_t x23 = in2[2];
  const uint32_t x21 = in2[1];
  const uint32_t x19 = in2[0];
  uint32_t x33; uint8_t x34 = addcarryx_u32(0x0, x5, x19, &x33);
  uint32_t x36; uint8_t x37 = addcarryx_u32(x34, x7, x21, &x36);
  uint32_t x39; uint8_t x40 = addcarryx_u32(x37, x9, x23, &x39);
  uint32_t x42; uint8_t x43 = addcarryx_u32(x40, x11, x25, &x42);
  uint32_t x45; uint8_t x46 = addcarryx_u32(x43, x13, x27, &x45);
  uint32_t x48; uint8_t x49 = addcarryx_u32(x46, x15, x29, &x48);
  uint32_t x51; uint8_t x52 = addcarryx_u32(x49, x17, x31, &x51);
  uint32_t x54; uint8_t x55 = addcarryx_u32(x52, x16, x30, &x54);
  uint32_t x57; uint8_t x58 = subborrow_u32(0x0, x33, 0xffffffff, &x57);
  uint32_t x60; uint8_t x61 = subborrow_u32(x58, x36, 0xffffffff, &x60);
  uint32_t x63; uint8_t x64 = subborrow_u32(x61, x39, 0xffffffff, &x63);
  uint32_t x66; uint8_t x67 = subborrow_u32(x64, x42, 0x0, &x66);
  uint32_t x69; uint8_t x70 = subborrow_u32(x67, x45, 0x0, &x69);
  uint32_t x72; uint8_t x73 = subborrow_u32(x70, x48, 0x0, &x72);
  uint32_t x75; uint8_t x76 = subborrow_u32(x73, x51, 0x1, &x75);
  uint32_t x78; uint8_t x79 = subborrow_u32(x76, x54, 0xffffffff, &x78);
  uint32_t _; uint8_t x82 = subborrow_u32(x79, x55, 0x0, &_);
  uint32_t x83 = cmovznz_u32(x82, x78, x54);
  uint32_t x84 = cmovznz_u32(x82, x75, x51);
  uint32_t x85 = cmovznz_u32(x82, x72, x48);
  uint32_t x86 = cmovznz_u32(x82, x69, x45);
  uint32_t x87 = cmovznz_u32(x82, x66, x42);
  uint32_t x88 = cmovznz_u32(x82, x63, x39);
  uint32_t x89 = cmovznz_u32(x82, x60, x36);
  uint32_t x90 = cmovznz_u32(x82, x57, x33);
  out[0] = x90;
  out[1] = x89;
  out[2] = x88;
  out[3] = x87;
  out[4] = x86;
  out[5] = x85;
  out[6] = x84;
  out[7] = x83;
}

static void fe_mul(uint32_t out[8], const uint32_t in1[8], const uint32_t in2[8]) {
  const uint32_t x16 = in1[7];
  const uint32_t x17 = in1[6];
  const uint32_t x15 = in1[5];
  const uint32_t x13 = in1[4];
  const uint32_t x11 = in1[3];
  const uint32_t x9 = in1[2];
  const uint32_t x7 = in1[1];
  const uint32_t x5 = in1[0];
  const uint32_t x30 = in2[7];
  const uint32_t x31 = in2[6];
  const uint32_t x29 = in2[5];
  const uint32_t x27 = in2[4];
  const uint32_t x25 = in2[3];
  const uint32_t x23 = in2[2];
  const uint32_t x21 = in2[1];
  const uint32_t x19 = in2[0];
  uint32_t x34;  uint32_t x33 = mulx_u32(x5, x19, &x34);
  uint32_t x37;  uint32_t x36 = mulx_u32(x5, x21, &x37);
  uint32_t x40;  uint32_t x39 = mulx_u32(x5, x23, &x40);
  uint32_t x43;  uint32_t x42 = mulx_u32(x5, x25, &x43);
  uint32_t x46;  uint32_t x45 = mulx_u32(x5, x27, &x46);
  uint32_t x49;  uint32_t x48 = mulx_u32(x5, x29, &x49);
  uint32_t x52;  uint32_t x51 = mulx_u32(x5, x31, &x52);
  uint32_t x55;  uint32_t x54 = mulx_u32(x5, x30, &x55);
  uint32_t x57; uint8_t x58 = addcarryx_u32(0x0, x34, x36, &x57);
  uint32_t x60; uint8_t x61 = addcarryx_u32(x58, x37, x39, &x60);
  uint32_t x63; uint8_t x64 = addcarryx_u32(x61, x40, x42, &x63);
  uint32_t x66; uint8_t x67 = addcarryx_u32(x64, x43, x45, &x66);
  uint32_t x69; uint8_t x70 = addcarryx_u32(x67, x46, x48, &x69);
  uint32_t x72; uint8_t x73 = addcarryx_u32(x70, x49, x51, &x72);
  uint32_t x75; uint8_t x76 = addcarryx_u32(x73, x52, x54, &x75);
  uint32_t x78; addcarryx_u32(0x0, x76, x55, &x78);
  uint32_t x82;  uint32_t x81 = mulx_u32(x33, 0xffffffff, &x82);
  uint32_t x85;  uint32_t x84 = mulx_u32(x33, 0xffffffff, &x85);
  uint32_t x88;  uint32_t x87 = mulx_u32(x33, 0xffffffff, &x88);
  uint32_t x91;  uint32_t x90 = mulx_u32(x33, 0xffffffff, &x91);
  uint32_t x93; uint8_t x94 = addcarryx_u32(0x0, x82, x84, &x93);
  uint32_t x96; uint8_t x97 = addcarryx_u32(x94, x85, x87, &x96);
  uint32_t x99; uint8_t x100 = addcarryx_u32(x97, x88, 0x0, &x99);
  uint8_t x101 = (0x0 + 0x0);
  uint32_t _1; uint8_t x104 = addcarryx_u32(0x0, x33, x81, &_1);
  uint32_t x106; uint8_t x107 = addcarryx_u32(x104, x57, x93, &x106);
  uint32_t x109; uint8_t x110 = addcarryx_u32(x107, x60, x96, &x109);
  uint32_t x112; uint8_t x113 = addcarryx_u32(x110, x63, x99, &x112);
  uint32_t x115; uint8_t x116 = addcarryx_u32(x113, x66, x100, &x115);
  uint32_t x118; uint8_t x119 = addcarryx_u32(x116, x69, x101, &x118);
  uint32_t x121; uint8_t x122 = addcarryx_u32(x119, x72, x33, &x121);
  uint32_t x124; uint8_t x125 = addcarryx_u32(x122, x75, x90, &x124);
  uint32_t x127; uint8_t x128 = addcarryx_u32(x125, x78, x91, &x127);
  uint8_t x129 = (x128 + 0x0);
  uint32_t x132;  uint32_t x131 = mulx_u32(x7, x19, &x132);
  uint32_t x135;  uint32_t x134 = mulx_u32(x7, x21, &x135);
  uint32_t x138;  uint32_t x137 = mulx_u32(x7, x23, &x138);
  uint32_t x141;  uint32_t x140 = mulx_u32(x7, x25, &x141);
  uint32_t x144;  uint32_t x143 = mulx_u32(x7, x27, &x144);
  uint32_t x147;  uint32_t x146 = mulx_u32(x7, x29, &x147);
  uint32_t x150;  uint32_t x149 = mulx_u32(x7, x31, &x150);
  uint32_t x153;  uint32_t x152 = mulx_u32(x7, x30, &x153);
  uint32_t x155; uint8_t x156 = addcarryx_u32(0x0, x132, x134, &x155);
  uint32_t x158; uint8_t x159 = addcarryx_u32(x156, x135, x137, &x158);
  uint32_t x161; uint8_t x162 = addcarryx_u32(x159, x138, x140, &x161);
  uint32_t x164; uint8_t x165 = addcarryx_u32(x162, x141, x143, &x164);
  uint32_t x167; uint8_t x168 = addcarryx_u32(x165, x144, x146, &x167);
  uint32_t x170; uint8_t x171 = addcarryx_u32(x168, x147, x149, &x170);
  uint32_t x173; uint8_t x174 = addcarryx_u32(x171, x150, x152, &x173);
  uint32_t x176; addcarryx_u32(0x0, x174, x153, &x176);
  uint32_t x179; uint8_t x180 = addcarryx_u32(0x0, x106, x131, &x179);
  uint32_t x182; uint8_t x183 = addcarryx_u32(x180, x109, x155, &x182);
  uint32_t x185; uint8_t x186 = addcarryx_u32(x183, x112, x158, &x185);
  uint32_t x188; uint8_t x189 = addcarryx_u32(x186, x115, x161, &x188);
  uint32_t x191; uint8_t x192 = addcarryx_u32(x189, x118, x164, &x191);
  uint32_t x194; uint8_t x195 = addcarryx_u32(x192, x121, x167, &x194);
  uint32_t x197; uint8_t x198 = addcarryx_u32(x195, x124, x170, &x197);
  uint32_t x200; uint8_t x201 = addcarryx_u32(x198, x127, x173, &x200);
  uint32_t x203; uint8_t x204 = addcarryx_u32(x201, x129, x176, &x203);
  uint32_t x207;  uint32_t x206 = mulx_u32(x179, 0xffffffff, &x207);
  uint32_t x210;  uint32_t x209 = mulx_u32(x179, 0xffffffff, &x210);
  uint32_t x213;  uint32_t x212 = mulx_u32(x179, 0xffffffff, &x213);
  uint32_t x216;  uint32_t x215 = mulx_u32(x179, 0xffffffff, &x216);
  uint32_t x218; uint8_t x219 = addcarryx_u32(0x0, x207, x209, &x218);
  uint32_t x221; uint8_t x222 = addcarryx_u32(x219, x210, x212, &x221);
  uint32_t x224; uint8_t x225 = addcarryx_u32(x222, x213, 0x0, &x224);
  uint8_t x226 = (0x0 + 0x0);
  uint32_t _2; uint8_t x229 = addcarryx_u32(0x0, x179, x206, &_2);
  uint32_t x231; uint8_t x232 = addcarryx_u32(x229, x182, x218, &x231);
  uint32_t x234; uint8_t x235 = addcarryx_u32(x232, x185, x221, &x234);
  uint32_t x237; uint8_t x238 = addcarryx_u32(x235, x188, x224, &x237);
  uint32_t x240; uint8_t x241 = addcarryx_u32(x238, x191, x225, &x240);
  uint32_t x243; uint8_t x244 = addcarryx_u32(x241, x194, x226, &x243);
  uint32_t x246; uint8_t x247 = addcarryx_u32(x244, x197, x179, &x246);
  uint32_t x249; uint8_t x250 = addcarryx_u32(x247, x200, x215, &x249);
  uint32_t x252; uint8_t x253 = addcarryx_u32(x250, x203, x216, &x252);
  uint8_t x254 = (x253 + x204);
  uint32_t x257;  uint32_t x256 = mulx_u32(x9, x19, &x257);
  uint32_t x260;  uint32_t x259 = mulx_u32(x9, x21, &x260);
  uint32_t x263;  uint32_t x262 = mulx_u32(x9, x23, &x263);
  uint32_t x266;  uint32_t x265 = mulx_u32(x9, x25, &x266);
  uint32_t x269;  uint32_t x268 = mulx_u32(x9, x27, &x269);
  uint32_t x272;  uint32_t x271 = mulx_u32(x9, x29, &x272);
  uint32_t x275;  uint32_t x274 = mulx_u32(x9, x31, &x275);
  uint32_t x278;  uint32_t x277 = mulx_u32(x9, x30, &x278);
  uint32_t x280; uint8_t x281 = addcarryx_u32(0x0, x257, x259, &x280);
  uint32_t x283; uint8_t x284 = addcarryx_u32(x281, x260, x262, &x283);
  uint32_t x286; uint8_t x287 = addcarryx_u32(x284, x263, x265, &x286);
  uint32_t x289; uint8_t x290 = addcarryx_u32(x287, x266, x268, &x289);
  uint32_t x292; uint8_t x293 = addcarryx_u32(x290, x269, x271, &x292);
  uint32_t x295; uint8_t x296 = addcarryx_u32(x293, x272, x274, &x295);
  uint32_t x298; uint8_t x299 = addcarryx_u32(x296, x275, x277, &x298);
  uint32_t x301; addcarryx_u32(0x0, x299, x278, &x301);
  uint32_t x304; uint8_t x305 = addcarryx_u32(0x0, x231, x256, &x304);
  uint32_t x307; uint8_t x308 = addcarryx_u32(x305, x234, x280, &x307);
  uint32_t x310; uint8_t x311 = addcarryx_u32(x308, x237, x283, &x310);
  uint32_t x313; uint8_t x314 = addcarryx_u32(x311, x240, x286, &x313);
  uint32_t x316; uint8_t x317 = addcarryx_u32(x314, x243, x289, &x316);
  uint32_t x319; uint8_t x320 = addcarryx_u32(x317, x246, x292, &x319);
  uint32_t x322; uint8_t x323 = addcarryx_u32(x320, x249, x295, &x322);
  uint32_t x325; uint8_t x326 = addcarryx_u32(x323, x252, x298, &x325);
  uint32_t x328; uint8_t x329 = addcarryx_u32(x326, x254, x301, &x328);
  uint32_t x332;  uint32_t x331 = mulx_u32(x304, 0xffffffff, &x332);
  uint32_t x335;  uint32_t x334 = mulx_u32(x304, 0xffffffff, &x335);
  uint32_t x338;  uint32_t x337 = mulx_u32(x304, 0xffffffff, &x338);
  uint32_t x341;  uint32_t x340 = mulx_u32(x304, 0xffffffff, &x341);
  uint32_t x343; uint8_t x344 = addcarryx_u32(0x0, x332, x334, &x343);
  uint32_t x346; uint8_t x347 = addcarryx_u32(x344, x335, x337, &x346);
  uint32_t x349; uint8_t x350 = addcarryx_u32(x347, x338, 0x0, &x349);
  uint8_t x351 = (0x0 + 0x0);
  uint32_t _3; uint8_t x354 = addcarryx_u32(0x0, x304, x331, &_3);
  uint32_t x356; uint8_t x357 = addcarryx_u32(x354, x307, x343, &x356);
  uint32_t x359; uint8_t x360 = addcarryx_u32(x357, x310, x346, &x359);
  uint32_t x362; uint8_t x363 = addcarryx_u32(x360, x313, x349, &x362);
  uint32_t x365; uint8_t x366 = addcarryx_u32(x363, x316, x350, &x365);
  uint32_t x368; uint8_t x369 = addcarryx_u32(x366, x319, x351, &x368);
  uint32_t x371; uint8_t x372 = addcarryx_u32(x369, x322, x304, &x371);
  uint32_t x374; uint8_t x375 = addcarryx_u32(x372, x325, x340, &x374);
  uint32_t x377; uint8_t x378 = addcarryx_u32(x375, x328, x341, &x377);
  uint8_t x379 = (x378 + x329);
  uint32_t x382;  uint32_t x381 = mulx_u32(x11, x19, &x382);
  uint32_t x385;  uint32_t x384 = mulx_u32(x11, x21, &x385);
  uint32_t x388;  uint32_t x387 = mulx_u32(x11, x23, &x388);
  uint32_t x391;  uint32_t x390 = mulx_u32(x11, x25, &x391);
  uint32_t x394;  uint32_t x393 = mulx_u32(x11, x27, &x394);
  uint32_t x397;  uint32_t x396 = mulx_u32(x11, x29, &x397);
  uint32_t x400;  uint32_t x399 = mulx_u32(x11, x31, &x400);
  uint32_t x403;  uint32_t x402 = mulx_u32(x11, x30, &x403);
  uint32_t x405; uint8_t x406 = addcarryx_u32(0x0, x382, x384, &x405);
  uint32_t x408; uint8_t x409 = addcarryx_u32(x406, x385, x387, &x408);
  uint32_t x411; uint8_t x412 = addcarryx_u32(x409, x388, x390, &x411);
  uint32_t x414; uint8_t x415 = addcarryx_u32(x412, x391, x393, &x414);
  uint32_t x417; uint8_t x418 = addcarryx_u32(x415, x394, x396, &x417);
  uint32_t x420; uint8_t x421 = addcarryx_u32(x418, x397, x399, &x420);
  uint32_t x423; uint8_t x424 = addcarryx_u32(x421, x400, x402, &x423);
  uint32_t x426; addcarryx_u32(0x0, x424, x403, &x426);
  uint32_t x429; uint8_t x430 = addcarryx_u32(0x0, x356, x381, &x429);
  uint32_t x432; uint8_t x433 = addcarryx_u32(x430, x359, x405, &x432);
  uint32_t x435; uint8_t x436 = addcarryx_u32(x433, x362, x408, &x435);
  uint32_t x438; uint8_t x439 = addcarryx_u32(x436, x365, x411, &x438);
  uint32_t x441; uint8_t x442 = addcarryx_u32(x439, x368, x414, &x441);
  uint32_t x444; uint8_t x445 = addcarryx_u32(x442, x371, x417, &x444);
  uint32_t x447; uint8_t x448 = addcarryx_u32(x445, x374, x420, &x447);
  uint32_t x450; uint8_t x451 = addcarryx_u32(x448, x377, x423, &x450);
  uint32_t x453; uint8_t x454 = addcarryx_u32(x451, x379, x426, &x453);
  uint32_t x457;  uint32_t x456 = mulx_u32(x429, 0xffffffff, &x457);
  uint32_t x460;  uint32_t x459 = mulx_u32(x429, 0xffffffff, &x460);
  uint32_t x463;  uint32_t x462 = mulx_u32(x429, 0xffffffff, &x463);
  uint32_t x466;  uint32_t x465 = mulx_u32(x429, 0xffffffff, &x466);
  uint32_t x468; uint8_t x469 = addcarryx_u32(0x0, x457, x459, &x468);
  uint32_t x471; uint8_t x472 = addcarryx_u32(x469, x460, x462, &x471);
  uint32_t x474; uint8_t x475 = addcarryx_u32(x472, x463, 0x0, &x474);
  uint8_t x476 = (0x0 + 0x0);
  uint32_t _4; uint8_t x479 = addcarryx_u32(0x0, x429, x456, &_4);
  uint32_t x481; uint8_t x482 = addcarryx_u32(x479, x432, x468, &x481);
  uint32_t x484; uint8_t x485 = addcarryx_u32(x482, x435, x471, &x484);
  uint32_t x487; uint8_t x488 = addcarryx_u32(x485, x438, x474, &x487);
  uint32_t x490; uint8_t x491 = addcarryx_u32(x488, x441, x475, &x490);
  uint32_t x493; uint8_t x494 = addcarryx_u32(x491, x444, x476, &x493);
  uint32_t x496; uint8_t x497 = addcarryx_u32(x494, x447, x429, &x496);
  uint32_t x499; uint8_t x500 = addcarryx_u32(x497, x450, x465, &x499);
  uint32_t x502; uint8_t x503 = addcarryx_u32(x500, x453, x466, &x502);
  uint8_t x504 = (x503 + x454);
  uint32_t x507;  uint32_t x506 = mulx_u32(x13, x19, &x507);
  uint32_t x510;  uint32_t x509 = mulx_u32(x13, x21, &x510);
  uint32_t x513;  uint32_t x512 = mulx_u32(x13, x23, &x513);
  uint32_t x516;  uint32_t x515 = mulx_u32(x13, x25, &x516);
  uint32_t x519;  uint32_t x518 = mulx_u32(x13, x27, &x519);
  uint32_t x522;  uint32_t x521 = mulx_u32(x13, x29, &x522);
  uint32_t x525;  uint32_t x524 = mulx_u32(x13, x31, &x525);
  uint32_t x528;  uint32_t x527 = mulx_u32(x13, x30, &x528);
  uint32_t x530; uint8_t x531 = addcarryx_u32(0x0, x507, x509, &x530);
  uint32_t x533; uint8_t x534 = addcarryx_u32(x531, x510, x512, &x533);
  uint32_t x536; uint8_t x537 = addcarryx_u32(x534, x513, x515, &x536);
  uint32_t x539; uint8_t x540 = addcarryx_u32(x537, x516, x518, &x539);
  uint32_t x542; uint8_t x543 = addcarryx_u32(x540, x519, x521, &x542);
  uint32_t x545; uint8_t x546 = addcarryx_u32(x543, x522, x524, &x545);
  uint32_t x548; uint8_t x549 = addcarryx_u32(x546, x525, x527, &x548);
  uint32_t x551; addcarryx_u32(0x0, x549, x528, &x551);
  uint32_t x554; uint8_t x555 = addcarryx_u32(0x0, x481, x506, &x554);
  uint32_t x557; uint8_t x558 = addcarryx_u32(x555, x484, x530, &x557);
  uint32_t x560; uint8_t x561 = addcarryx_u32(x558, x487, x533, &x560);
  uint32_t x563; uint8_t x564 = addcarryx_u32(x561, x490, x536, &x563);
  uint32_t x566; uint8_t x567 = addcarryx_u32(x564, x493, x539, &x566);
  uint32_t x569; uint8_t x570 = addcarryx_u32(x567, x496, x542, &x569);
  uint32_t x572; uint8_t x573 = addcarryx_u32(x570, x499, x545, &x572);
  uint32_t x575; uint8_t x576 = addcarryx_u32(x573, x502, x548, &x575);
  uint32_t x578; uint8_t x579 = addcarryx_u32(x576, x504, x551, &x578);
  uint32_t x582;  uint32_t x581 = mulx_u32(x554, 0xffffffff, &x582);
  uint32_t x585;  uint32_t x584 = mulx_u32(x554, 0xffffffff, &x585);
  uint32_t x588;  uint32_t x587 = mulx_u32(x554, 0xffffffff, &x588);
  uint32_t x591;  uint32_t x590 = mulx_u32(x554, 0xffffffff, &x591);
  uint32_t x593; uint8_t x594 = addcarryx_u32(0x0, x582, x584, &x593);
  uint32_t x596; uint8_t x597 = addcarryx_u32(x594, x585, x587, &x596);
  uint32_t x599; uint8_t x600 = addcarryx_u32(x597, x588, 0x0, &x599);
  uint8_t x601 = (0x0 + 0x0);
  uint32_t _5; uint8_t x604 = addcarryx_u32(0x0, x554, x581, &_5);
  uint32_t x606; uint8_t x607 = addcarryx_u32(x604, x557, x593, &x606);
  uint32_t x609; uint8_t x610 = addcarryx_u32(x607, x560, x596, &x609);
  uint32_t x612; uint8_t x613 = addcarryx_u32(x610, x563, x599, &x612);
  uint32_t x615; uint8_t x616 = addcarryx_u32(x613, x566, x600, &x615);
  uint32_t x618; uint8_t x619 = addcarryx_u32(x616, x569, x601, &x618);
  uint32_t x621; uint8_t x622 = addcarryx_u32(x619, x572, x554, &x621);
  uint32_t x624; uint8_t x625 = addcarryx_u32(x622, x575, x590, &x624);
  uint32_t x627; uint8_t x628 = addcarryx_u32(x625, x578, x591, &x627);
  uint8_t x629 = (x628 + x579);
  uint32_t x632;  uint32_t x631 = mulx_u32(x15, x19, &x632);
  uint32_t x635;  uint32_t x634 = mulx_u32(x15, x21, &x635);
  uint32_t x638;  uint32_t x637 = mulx_u32(x15, x23, &x638);
  uint32_t x641;  uint32_t x640 = mulx_u32(x15, x25, &x641);
  uint32_t x644;  uint32_t x643 = mulx_u32(x15, x27, &x644);
  uint32_t x647;  uint32_t x646 = mulx_u32(x15, x29, &x647);
  uint32_t x650;  uint32_t x649 = mulx_u32(x15, x31, &x650);
  uint32_t x653;  uint32_t x652 = mulx_u32(x15, x30, &x653);
  uint32_t x655; uint8_t x656 = addcarryx_u32(0x0, x632, x634, &x655);
  uint32_t x658; uint8_t x659 = addcarryx_u32(x656, x635, x637, &x658);
  uint32_t x661; uint8_t x662 = addcarryx_u32(x659, x638, x640, &x661);
  uint32_t x664; uint8_t x665 = addcarryx_u32(x662, x641, x643, &x664);
  uint32_t x667; uint8_t x668 = addcarryx_u32(x665, x644, x646, &x667);
  uint32_t x670; uint8_t x671 = addcarryx_u32(x668, x647, x649, &x670);
  uint32_t x673; uint8_t x674 = addcarryx_u32(x671, x650, x652, &x673);
  uint32_t x676; addcarryx_u32(0x0, x674, x653, &x676);
  uint32_t x679; uint8_t x680 = addcarryx_u32(0x0, x606, x631, &x679);
  uint32_t x682; uint8_t x683 = addcarryx_u32(x680, x609, x655, &x682);
  uint32_t x685; uint8_t x686 = addcarryx_u32(x683, x612, x658, &x685);
  uint32_t x688; uint8_t x689 = addcarryx_u32(x686, x615, x661, &x688);
  uint32_t x691; uint8_t x692 = addcarryx_u32(x689, x618, x664, &x691);
  uint32_t x694; uint8_t x695 = addcarryx_u32(x692, x621, x667, &x694);
  uint32_t x697; uint8_t x698 = addcarryx_u32(x695, x624, x670, &x697);
  uint32_t x700; uint8_t x701 = addcarryx_u32(x698, x627, x673, &x700);
  uint32_t x703; uint8_t x704 = addcarryx_u32(x701, x629, x676, &x703);
  uint32_t x707;  uint32_t x706 = mulx_u32(x679, 0xffffffff, &x707);
  uint32_t x710;  uint32_t x709 = mulx_u32(x679, 0xffffffff, &x710);
  uint32_t x713;  uint32_t x712 = mulx_u32(x679, 0xffffffff, &x713);
  uint32_t x716;  uint32_t x715 = mulx_u32(x679, 0xffffffff, &x716);
  uint32_t x718; uint8_t x719 = addcarryx_u32(0x0, x707, x709, &x718);
  uint32_t x721; uint8_t x722 = addcarryx_u32(x719, x710, x712, &x721);
  uint32_t x724; uint8_t x725 = addcarryx_u32(x722, x713, 0x0, &x724);
  uint8_t x726 = (0x0 + 0x0);
  uint32_t _6; uint8_t x729 = addcarryx_u32(0x0, x679, x706, &_6);
  uint32_t x731; uint8_t x732 = addcarryx_u32(x729, x682, x718, &x731);
  uint32_t x734; uint8_t x735 = addcarryx_u32(x732, x685, x721, &x734);
  uint32_t x737; uint8_t x738 = addcarryx_u32(x735, x688, x724, &x737);
  uint32_t x740; uint8_t x741 = addcarryx_u32(x738, x691, x725, &x740);
  uint32_t x743; uint8_t x744 = addcarryx_u32(x741, x694, x726, &x743);
  uint32_t x746; uint8_t x747 = addcarryx_u32(x744, x697, x679, &x746);
  uint32_t x749; uint8_t x750 = addcarryx_u32(x747, x700, x715, &x749);
  uint32_t x752; uint8_t x753 = addcarryx_u32(x750, x703, x716, &x752);
  uint8_t x754 = (x753 + x704);
  uint32_t x757;  uint32_t x756 = mulx_u32(x17, x19, &x757);
  uint32_t x760;  uint32_t x759 = mulx_u32(x17, x21, &x760);
  uint32_t x763;  uint32_t x762 = mulx_u32(x17, x23, &x763);
  uint32_t x766;  uint32_t x765 = mulx_u32(x17, x25, &x766);
  uint32_t x769;  uint32_t x768 = mulx_u32(x17, x27, &x769);
  uint32_t x772;  uint32_t x771 = mulx_u32(x17, x29, &x772);
  uint32_t x775;  uint32_t x774 = mulx_u32(x17, x31, &x775);
  uint32_t x778;  uint32_t x777 = mulx_u32(x17, x30, &x778);
  uint32_t x780; uint8_t x781 = addcarryx_u32(0x0, x757, x759, &x780);
  uint32_t x783; uint8_t x784 = addcarryx_u32(x781, x760, x762, &x783);
  uint32_t x786; uint8_t x787 = addcarryx_u32(x784, x763, x765, &x786);
  uint32_t x789; uint8_t x790 = addcarryx_u32(x787, x766, x768, &x789);
  uint32_t x792; uint8_t x793 = addcarryx_u32(x790, x769, x771, &x792);
  uint32_t x795; uint8_t x796 = addcarryx_u32(x793, x772, x774, &x795);
  uint32_t x798; uint8_t x799 = addcarryx_u32(x796, x775, x777, &x798);
  uint32_t x801; addcarryx_u32(0x0, x799, x778, &x801);
  uint32_t x804; uint8_t x805 = addcarryx_u32(0x0, x731, x756, &x804);
  uint32_t x807; uint8_t x808 = addcarryx_u32(x805, x734, x780, &x807);
  uint32_t x810; uint8_t x811 = addcarryx_u32(x808, x737, x783, &x810);
  uint32_t x813; uint8_t x814 = addcarryx_u32(x811, x740, x786, &x813);
  uint32_t x816; uint8_t x817 = addcarryx_u32(x814, x743, x789, &x816);
  uint32_t x819; uint8_t x820 = addcarryx_u32(x817, x746, x792, &x819);
  uint32_t x822; uint8_t x823 = addcarryx_u32(x820, x749, x795, &x822);
  uint32_t x825; uint8_t x826 = addcarryx_u32(x823, x752, x798, &x825);
  uint32_t x828; uint8_t x829 = addcarryx_u32(x826, x754, x801, &x828);
  uint32_t x832;  uint32_t x831 = mulx_u32(x804, 0xffffffff, &x832);
  uint32_t x835;  uint32_t x834 = mulx_u32(x804, 0xffffffff, &x835);
  uint32_t x838;  uint32_t x837 = mulx_u32(x804, 0xffffffff, &x838);
  uint32_t x841;  uint32_t x840 = mulx_u32(x804, 0xffffffff, &x841);
  uint32_t x843; uint8_t x844 = addcarryx_u32(0x0, x832, x834, &x843);
  uint32_t x846; uint8_t x847 = addcarryx_u32(x844, x835, x837, &x846);
  uint32_t x849; uint8_t x850 = addcarryx_u32(x847, x838, 0x0, &x849);
  uint8_t x851 = (0x0 + 0x0);
  uint32_t _7; uint8_t x854 = addcarryx_u32(0x0, x804, x831, &_7);
  uint32_t x856; uint8_t x857 = addcarryx_u32(x854, x807, x843, &x856);
  uint32_t x859; uint8_t x860 = addcarryx_u32(x857, x810, x846, &x859);
  uint32_t x862; uint8_t x863 = addcarryx_u32(x860, x813, x849, &x862);
  uint32_t x865; uint8_t x866 = addcarryx_u32(x863, x816, x850, &x865);
  uint32_t x868; uint8_t x869 = addcarryx_u32(x866, x819, x851, &x868);
  uint32_t x871; uint8_t x872 = addcarryx_u32(x869, x822, x804, &x871);
  uint32_t x874; uint8_t x875 = addcarryx_u32(x872, x825, x840, &x874);
  uint32_t x877; uint8_t x878 = addcarryx_u32(x875, x828, x841, &x877);
  uint8_t x879 = (x878 + x829);
  uint32_t x882;  uint32_t x881 = mulx_u32(x16, x19, &x882);
  uint32_t x885;  uint32_t x884 = mulx_u32(x16, x21, &x885);
  uint32_t x888;  uint32_t x887 = mulx_u32(x16, x23, &x888);
  uint32_t x891;  uint32_t x890 = mulx_u32(x16, x25, &x891);
  uint32_t x894;  uint32_t x893 = mulx_u32(x16, x27, &x894);
  uint32_t x897;  uint32_t x896 = mulx_u32(x16, x29, &x897);
  uint32_t x900;  uint32_t x899 = mulx_u32(x16, x31, &x900);
  uint32_t x903;  uint32_t x902 = mulx_u32(x16, x30, &x903);
  uint32_t x905; uint8_t x906 = addcarryx_u32(0x0, x882, x884, &x905);
  uint32_t x908; uint8_t x909 = addcarryx_u32(x906, x885, x887, &x908);
  uint32_t x911; uint8_t x912 = addcarryx_u32(x909, x888, x890, &x911);
  uint32_t x914; uint8_t x915 = addcarryx_u32(x912, x891, x893, &x914);
  uint32_t x917; uint8_t x918 = addcarryx_u32(x915, x894, x896, &x917);
  uint32_t x920; uint8_t x921 = addcarryx_u32(x918, x897, x899, &x920);
  uint32_t x923; uint8_t x924 = addcarryx_u32(x921, x900, x902, &x923);
  uint32_t x926; addcarryx_u32(0x0, x924, x903, &x926);
  uint32_t x929; uint8_t x930 = addcarryx_u32(0x0, x856, x881, &x929);
  uint32_t x932; uint8_t x933 = addcarryx_u32(x930, x859, x905, &x932);
  uint32_t x935; uint8_t x936 = addcarryx_u32(x933, x862, x908, &x935);
  uint32_t x938; uint8_t x939 = addcarryx_u32(x936, x865, x911, &x938);
  uint32_t x941; uint8_t x942 = addcarryx_u32(x939, x868, x914, &x941);
  uint32_t x944; uint8_t x945 = addcarryx_u32(x942, x871, x917, &x944);
  uint32_t x947; uint8_t x948 = addcarryx_u32(x945, x874, x920, &x947);
  uint32_t x950; uint8_t x951 = addcarryx_u32(x948, x877, x923, &x950);
  uint32_t x953; uint8_t x954 = addcarryx_u32(x951, x879, x926, &x953);
  uint32_t x957;  uint32_t x956 = mulx_u32(x929, 0xffffffff, &x957);
  uint32_t x960;  uint32_t x959 = mulx_u32(x929, 0xffffffff, &x960);
  uint32_t x963;  uint32_t x962 = mulx_u32(x929, 0xffffffff, &x963);
  uint32_t x966;  uint32_t x965 = mulx_u32(x929, 0xffffffff, &x966);
  uint32_t x968; uint8_t x969 = addcarryx_u32(0x0, x957, x959, &x968);
  uint32_t x971; uint8_t x972 = addcarryx_u32(x969, x960, x962, &x971);
  uint32_t x974; uint8_t x975 = addcarryx_u32(x972, x963, 0x0, &x974);
  uint8_t x976 = (0x0 + 0x0);
  uint32_t _8; uint8_t x979 = addcarryx_u32(0x0, x929, x956, &_8);
  uint32_t x981; uint8_t x982 = addcarryx_u32(x979, x932, x968, &x981);
  uint32_t x984; uint8_t x985 = addcarryx_u32(x982, x935, x971, &x984);
  uint32_t x987; uint8_t x988 = addcarryx_u32(x985, x938, x974, &x987);
  uint32_t x990; uint8_t x991 = addcarryx_u32(x988, x941, x975, &x990);
  uint32_t x993; uint8_t x994 = addcarryx_u32(x991, x944, x976, &x993);
  uint32_t x996; uint8_t x997 = addcarryx_u32(x994, x947, x929, &x996);
  uint32_t x999; uint8_t x1000 = addcarryx_u32(x997, x950, x965, &x999);
  uint32_t x1002; uint8_t x1003 = addcarryx_u32(x1000, x953, x966, &x1002);
  uint8_t x1004 = (x1003 + x954);
  uint32_t x1006; uint8_t x1007 = subborrow_u32(0x0, x981, 0xffffffff, &x1006);
  uint32_t x1009; uint8_t x1010 = subborrow_u32(x1007, x984, 0xffffffff, &x1009);
  uint32_t x1012; uint8_t x1013 = subborrow_u32(x1010, x987, 0xffffffff, &x1012);
  uint32_t x1015; uint8_t x1016 = subborrow_u32(x1013, x990, 0x0, &x1015);
  uint32_t x1018; uint8_t x1019 = subborrow_u32(x1016, x993, 0x0, &x1018);
  uint32_t x1021; uint8_t x1022 = subborrow_u32(x1019, x996, 0x0, &x1021);
  uint32_t x1024; uint8_t x1025 = subborrow_u32(x1022, x999, 0x1, &x1024);
  uint32_t x1027; uint8_t x1028 = subborrow_u32(x1025, x1002, 0xffffffff, &x1027);
  uint32_t _9; uint8_t x1031 = subborrow_u32(x1028, x1004, 0x0, &_9);
  uint32_t x1032 = cmovznz_u32(x1031, x1027, x1002);
  uint32_t x1033 = cmovznz_u32(x1031, x1024, x999);
  uint32_t x1034 = cmovznz_u32(x1031, x1021, x996);
  uint32_t x1035 = cmovznz_u32(x1031, x1018, x993);
  uint32_t x1036 = cmovznz_u32(x1031, x1015, x990);
  uint32_t x1037 = cmovznz_u32(x1031, x1012, x987);
  uint32_t x1038 = cmovznz_u32(x1031, x1009, x984);
  uint32_t x1039 = cmovznz_u32(x1031, x1006, x981);
  out[0] = x1039;
  out[1] = x1038;
  out[2] = x1037;
  out[3] = x1036;
  out[4] = x1035;
  out[5] = x1034;
  out[6] = x1033;
  out[7] = x1032;
}

// NOTE: the following functions are generated from fiat-crypto, from the same
// template as their 64-bit counterparts above, but the correctness proof of
// the template was not composed with the correctness proof of the
// specialization pipeline. This is because Coq unexplainedly loops on trying
// to synthesize opp and sub using the normal pipeline.

static void fe_sub(uint32_t out[8], const uint32_t in1[8], const uint32_t in2[8]) {
  const uint32_t x14 = in1[7];
  const uint32_t x15 = in1[6];
  const uint32_t x13 = in1[5];
  const uint32_t x11 = in1[4];
  const uint32_t x9 = in1[3];
  const uint32_t x7 = in1[2];
  const uint32_t x5 = in1[1];
  const uint32_t x3 = in1[0];
  const uint32_t x28 = in2[7];
  const uint32_t x29 = in2[6];
  const uint32_t x27 = in2[5];
  const uint32_t x25 = in2[4];
  const uint32_t x23 = in2[3];
  const uint32_t x21 = in2[2];
  const uint32_t x19 = in2[1];
  const uint32_t x17 = in2[0];
  uint32_t x31; uint8_t x32 = subborrow_u32(0x0, x3, x17, &x31);
  uint32_t x34; uint8_t x35 = subborrow_u32(x32, x5, x19, &x34);
  uint32_t x37; uint8_t x38 = subborrow_u32(x35, x7, x21, &x37);
  uint32_t x40; uint8_t x41 = subborrow_u32(x38, x9, x23, &x40);
  uint32_t x43; uint8_t x44 = subborrow_u32(x41, x11, x25, &x43);
  uint32_t x46; uint8_t x47 = subborrow_u32(x44, x13, x27, &x46);
  uint32_t x49; uint8_t x50 = subborrow_u32(x47, x15, x29, &x49);
  uint32_t x52; uint8_t x53 = subborrow_u32(x50, x14, x28, &x52);
  uint32_t x54 = cmovznz_u32(x53, 0x0, 0xffffffff);
  uint32_t x56; uint8_t x57 = addcarryx_u32(0x0, x31, (x54 & 0xffffffff), &x56);
  uint32_t x59; uint8_t x60 = addcarryx_u32(x57, x34, (x54 & 0xffffffff), &x59);
  uint32_t x62; uint8_t x63 = addcarryx_u32(x60, x37, (x54 & 0xffffffff), &x62);
  uint32_t x65; uint8_t x66 = addcarryx_u32(x63, x40, 0x0, &x65);
  uint32_t x68; uint8_t x69 = addcarryx_u32(x66, x43, 0x0, &x68);
  uint32_t x71; uint8_t x72 = addcarryx_u32(x69, x46, 0x0, &x71);
  uint32_t x74; uint8_t x75 = addcarryx_u32(x72, x49, ((uint8_t)x54 & 0x1), &x74);
  uint32_t x77; addcarryx_u32(x75, x52, (x54 & 0xffffffff), &x77);
  out[0] = x56;
  out[1] = x59;
  out[2] = x62;
  out[3] = x65;
  out[4] = x68;
  out[5] = x71;
  out[6] = x74;
  out[7] = x77;
}

// fe_op sets out = -in
static void fe_opp(uint32_t out[8], const uint32_t in1[8]) {
  const uint32_t x12 = in1[7];
  const uint32_t x13 = in1[6];
  const uint32_t x11 = in1[5];
  const uint32_t x9 = in1[4];
  const uint32_t x7 = in1[3];
  const uint32_t x5 = in1[2];
  const uint32_t x3 = in1[1];
  const uint32_t x1 = in1[0];
  uint32_t x15; uint8_t x16 = subborrow_u32(0x0, 0x0, x1, &x15);
  uint32_t x18; uint8_t x19 = subborrow_u32(x16, 0x0, x3, &x18);
  uint32_t x21; uint8_t x22 = subborrow_u32(x19, 0x0, x5, &x21);
  uint32_t x24; uint8_t x25 = subborrow_u32(x22, 0x0, x7, &x24);
  uint32_t x27; uint8_t x28 = subborrow_u32(x25, 0x0, x9, &x27);
  uint32_t x30; uint8_t x31 = subborrow_u32(x28, 0x0, x11, &x30);
  uint32_t x33; uint8_t x34 = subborrow_u32(x31, 0x0, x13, &x33);
  uint32_t x36; uint8_t x37 = subborrow_u32(x34, 0x0, x12, &x36);
  uint32_t x38 = cmovznz_u32(x37, 0x0, 0xffffffff);
  uint32_t x40; uint8_t x41 = addcarryx_u32(0x0, x15, (x38 & 0xffffffff), &x40);
  uint32_t x43; uint8_t x44 = addcarryx_u32(x41, x18, (x38 & 0xffffffff), &x43);
  uint32_t x46; uint8_t x47 = addcarryx_u32(x44, x21, (x38 & 0xffffffff), &x46);
  uint32_t x49; uint8_t x50 = addcarryx_u32(x47, x24, 0x0, &x49);
  uint32_t x52; uint8_t x53 = addcarryx_u32(x50, x27, 0x0, &x52);
  uint32_t x55; uint8_t x56 = addcarryx_u32(x53, x30, 0x0, &x55);
  uint32_t x58; uint8_t x59 = addcarryx_u32(x56, x33, ((uint8_t)x38 & 0x1), &x58);
  uint32_t x61; addcarryx_u32(x59, x36, (x38 & 0xffffffff), &x61);
  out[0] = x40;
  out[1] = x43;
  out[2] = x46;
  out[3] = x49;
  out[4] = x52;
  out[5] = x55;
  out[6] = x58;
  out[7] = x61;
}

#endif

// utility functions, handwritten

#define NBYTES 32

#if defined(BORINGSSL_NISTP256_64BIT)

#define NLIMBS 4
typedef uint64_t limb_t;
#define cmovznz_limb cmovznz_u64
typedef uint64_t fe[NLIMBS];
#else // 64BIT; else 32BIT

#define NLIMBS 8
typedef uint32_t limb_t;
#define cmovznz_limb cmovznz_u32
typedef uint32_t fe[NLIMBS];

#endif // 64BIT

static limb_t fe_nz(const limb_t in1[NLIMBS]) {
  limb_t ret = 0;
  for (int i = 0; i < NLIMBS; i++) {
    ret |= in1[i];
  }
  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]) {
  for (int i = 0; i < NLIMBS; i++) {
    out[i] = cmovznz_limb(t, z[i], nz[i]);
  }
}

static void fe_sqr(fe out, const fe in) {
  fe_mul(out, in, in);
}

static void fe_tobytes(uint8_t out[NBYTES], const fe in) {
  for (int i = 0; i<NBYTES; i++) {
    out[i] = (uint8_t)(in[i/sizeof(in[0])] >> (8*(i%sizeof(in[0]))));
  }
}

static void fe_frombytes(fe out, const uint8_t in[NBYTES]) {
  for (int i = 0; i<NLIMBS; i++) {
    out[i] = 0;
  }
  for (int i = 0; i<NBYTES; i++) {
    out[i/sizeof(out[0])] |= ((limb_t)in[i]) << (8*(i%sizeof(out[0])));
  }
}

static void fe_from_montgomery(fe x) {
  static const limb_t kOne[NLIMBS] = {1, 0};
  fe_mul(x, x, kOne);
}

static void fe_from_generic(fe out, const EC_FELEM *in) {
  fe_frombytes(out, in->bytes);
}

static void fe_to_generic(EC_FELEM *out, const fe in) {
  // This works because 256 is a multiple of 64, so there are no excess bytes to
  // zero when rounding up to |BN_ULONG|s.
  OPENSSL_STATIC_ASSERT(
      256 / 8 == sizeof(BN_ULONG) * ((256 + BN_BITS2 - 1) / BN_BITS2),
      "fe_tobytes leaves bytes uninitialized");
  fe_tobytes(out->bytes, in);
}

// 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:
// <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Spec/WeierstrassCurve.v#L28>
// As a sanity check, a proof that these points form a commutative group:
// <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Curves/Weierstrass/AffineProofs.v#L33>

// 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:
// <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Curves/Weierstrass/Jacobian.v#L93>
// <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Curves/Weierstrass/Jacobian.v#L201>
//
// 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:
// <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Curves/Weierstrass/Jacobian.v#L135>
// <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Curves/Weierstrass/Jacobian.v#L205>
//
// 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);
}

// Base point pre computation
// --------------------------
//
// Two different sorts of precomputed tables are used in the following code.
// Each contain various points on the curve, where each point is three field
// elements (x, y, z).
//
// For the base point table, z is usually 1 (0 for the point at infinity).
// This table has 2 * 16 elements, starting with the following:
// index | bits    | point
// ------+---------+------------------------------
//     0 | 0 0 0 0 | 0G
//     1 | 0 0 0 1 | 1G
//     2 | 0 0 1 0 | 2^64G
//     3 | 0 0 1 1 | (2^64 + 1)G
//     4 | 0 1 0 0 | 2^128G
//     5 | 0 1 0 1 | (2^128 + 1)G
//     6 | 0 1 1 0 | (2^128 + 2^64)G
//     7 | 0 1 1 1 | (2^128 + 2^64 + 1)G
//     8 | 1 0 0 0 | 2^192G
//     9 | 1 0 0 1 | (2^192 + 1)G
//    10 | 1 0 1 0 | (2^192 + 2^64)G
//    11 | 1 0 1 1 | (2^192 + 2^64 + 1)G
//    12 | 1 1 0 0 | (2^192 + 2^128)G
//    13 | 1 1 0 1 | (2^192 + 2^128 + 1)G
//    14 | 1 1 1 0 | (2^192 + 2^128 + 2^64)G
//    15 | 1 1 1 1 | (2^192 + 2^128 + 2^64 + 1)G
// followed by a copy of this with each element multiplied by 2^32.
//
// The reason for this is so that we can clock bits into four different
// locations when doing simple scalar multiplies against the base point,
// and then another four locations using the second 16 elements.
//
// Tables for other points have table[i] = iG for i in 0 .. 16.

// g_pre_comp is the table of precomputed base points
#if defined(BORINGSSL_NISTP256_64BIT)
static const fe g_pre_comp[2][16][3] = {
    {{{0x0, 0x0, 0x0, 0x0}, {0x0, 0x0, 0x0, 0x0}, {0x0, 0x0, 0x0, 0x0}},
     {{0x79e730d418a9143c, 0x75ba95fc5fedb601, 0x79fb732b77622510,
       0x18905f76a53755c6},
      {0xddf25357ce95560a, 0x8b4ab8e4ba19e45c, 0xd2e88688dd21f325,
       0x8571ff1825885d85},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0x4f922fc516a0d2bb, 0xd5cc16c1a623499, 0x9241cf3a57c62c8b,
       0x2f5e6961fd1b667f},
      {0x5c15c70bf5a01797, 0x3d20b44d60956192, 0x4911b37071fdb52,
       0xf648f9168d6f0f7b},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0x9e566847e137bbbc, 0xe434469e8a6a0bec, 0xb1c4276179d73463,
       0x5abe0285133d0015},
      {0x92aa837cc04c7dab, 0x573d9f4c43260c07, 0xc93156278e6cc37,
       0x94bb725b6b6f7383},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0x62a8c244bfe20925, 0x91c19ac38fdce867, 0x5a96a5d5dd387063,
       0x61d587d421d324f6},
      {0xe87673a2a37173ea, 0x2384800853778b65, 0x10f8441e05bab43e,
       0xfa11fe124621efbe},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0x1c891f2b2cb19ffd, 0x1ba8d5bb1923c23, 0xb6d03d678ac5ca8e,
       0x586eb04c1f13bedc},
      {0xc35c6e527e8ed09, 0x1e81a33c1819ede2, 0x278fd6c056c652fa,
       0x19d5ac0870864f11},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0x62577734d2b533d5, 0x673b8af6a1bdddc0, 0x577e7c9aa79ec293,
       0xbb6de651c3b266b1},
      {0xe7e9303ab65259b3, 0xd6a0afd3d03a7480, 0xc5ac83d19b3cfc27,
       0x60b4619a5d18b99b},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0xbd6a38e11ae5aa1c, 0xb8b7652b49e73658, 0xb130014ee5f87ed,
       0x9d0f27b2aeebffcd},
      {0xca9246317a730a55, 0x9c955b2fddbbc83a, 0x7c1dfe0ac019a71,
       0x244a566d356ec48d},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0x56f8410ef4f8b16a, 0x97241afec47b266a, 0xa406b8e6d9c87c1,
       0x803f3e02cd42ab1b},
      {0x7f0309a804dbec69, 0xa83b85f73bbad05f, 0xc6097273ad8e197f,
       0xc097440e5067adc1},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0x846a56f2c379ab34, 0xa8ee068b841df8d1, 0x20314459176c68ef,
       0xf1af32d5915f1f30},
      {0x99c375315d75bd50, 0x837cffbaf72f67bc, 0x613a41848d7723f,
       0x23d0f130e2d41c8b},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0xed93e225d5be5a2b, 0x6fe799835934f3c6, 0x4314092622626ffc,
       0x50bbb4d97990216a},
      {0x378191c6e57ec63e, 0x65422c40181dcdb2, 0x41a8099b0236e0f6,
       0x2b10011801fe49c3},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0xfc68b5c59b391593, 0xc385f5a2598270fc, 0x7144f3aad19adcbb,
       0xdd55899983fbae0c},
      {0x93b88b8e74b82ff4, 0xd2e03c4071e734c9, 0x9a7a9eaf43c0322a,
       0xe6e4c551149d6041},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0x5fe14bfe80ec21fe, 0xf6ce116ac255be82, 0x98bc5a072f4a5d67,
       0xfad27148db7e63af},
      {0x90c0b6ac29ab05b3, 0x37a9a83c4e251ae6, 0xa7dc875c2aade7d,
       0x77387de39f0e1a84},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0x1e9ecc49a56c0dd7, 0xa5cffcd846086c74, 0x8f7a1408f505aece,
       0xb37b85c0bef0c47e},
      {0x3596b6e4cc0e6a8f, 0xfd6d4bbf6b388f23, 0xaba453fac39cef4e,
       0x9c135ac8f9f628d5},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0xa1c729495c8f8be, 0x2961c4803bf362bf, 0x9e418403df63d4ac,
       0xc109f9cb91ece900},
      {0xc2d095d058945705, 0xb9083d96ddeb85c0, 0x84692b8d7a40449b,
       0x9bc3344f2eee1ee1},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0xd5ae35642913074, 0x55491b2748a542b1, 0x469ca665b310732a,
       0x29591d525f1a4cc1},
      {0xe76f5b6bb84f983f, 0xbe7eef419f5f84e1, 0x1200d49680baa189,
       0x6376551f18ef332c},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}}},
    {{{0x0, 0x0, 0x0, 0x0}, {0x0, 0x0, 0x0, 0x0}, {0x0, 0x0, 0x0, 0x0}},
     {{0x202886024147519a, 0xd0981eac26b372f0, 0xa9d4a7caa785ebc8,
       0xd953c50ddbdf58e9},
      {0x9d6361ccfd590f8f, 0x72e9626b44e6c917, 0x7fd9611022eb64cf,
       0x863ebb7e9eb288f3},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0x4fe7ee31b0e63d34, 0xf4600572a9e54fab, 0xc0493334d5e7b5a4,
       0x8589fb9206d54831},
      {0xaa70f5cc6583553a, 0x879094ae25649e5, 0xcc90450710044652,
       0xebb0696d02541c4f},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0xabbaa0c03b89da99, 0xa6f2d79eb8284022, 0x27847862b81c05e8,
       0x337a4b5905e54d63},
      {0x3c67500d21f7794a, 0x207005b77d6d7f61, 0xa5a378104cfd6e8,
       0xd65e0d5f4c2fbd6},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0xd433e50f6d3549cf, 0x6f33696ffacd665e, 0x695bfdacce11fcb4,
       0x810ee252af7c9860},
      {0x65450fe17159bb2c, 0xf7dfbebe758b357b, 0x2b057e74d69fea72,
       0xd485717a92731745},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0xce1f69bbe83f7669, 0x9f8ae8272877d6b, 0x9548ae543244278d,
       0x207755dee3c2c19c},
      {0x87bd61d96fef1945, 0x18813cefb12d28c3, 0x9fbcd1d672df64aa,
       0x48dc5ee57154b00d},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0xef0f469ef49a3154, 0x3e85a5956e2b2e9a, 0x45aaec1eaa924a9c,
       0xaa12dfc8a09e4719},
      {0x26f272274df69f1d, 0xe0e4c82ca2ff5e73, 0xb9d8ce73b7a9dd44,
       0x6c036e73e48ca901},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0xe1e421e1a47153f0, 0xb86c3b79920418c9, 0x93bdce87705d7672,
       0xf25ae793cab79a77},
      {0x1f3194a36d869d0c, 0x9d55c8824986c264, 0x49fb5ea3096e945e,
       0x39b8e65313db0a3e},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0xe3417bc035d0b34a, 0x440b386b8327c0a7, 0x8fb7262dac0362d1,
       0x2c41114ce0cdf943},
      {0x2ba5cef1ad95a0b1, 0xc09b37a867d54362, 0x26d6cdd201e486c9,
       0x20477abf42ff9297},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0xf121b41bc0a67d2, 0x62d4760a444d248a, 0xe044f1d659b4737,
       0x8fde365250bb4a8},
      {0xaceec3da848bf287, 0xc2a62182d3369d6e, 0x3582dfdc92449482,
       0x2f7e2fd2565d6cd7},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0xa0122b5178a876b, 0x51ff96ff085104b4, 0x50b31ab14f29f76,
       0x84abb28b5f87d4e6},
      {0xd5ed439f8270790a, 0x2d6cb59d85e3f46b, 0x75f55c1b6c1e2212,
       0xe5436f6717655640},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0xc2965ecc9aeb596d, 0x1ea03e7023c92b4, 0x4704b4b62e013961,
       0xca8fd3f905ea367},
      {0x92523a42551b2b61, 0x1eb7a89c390fcd06, 0xe7f1d2be0392a63e,
       0x96dca2644ddb0c33},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0x231c210e15339848, 0xe87a28e870778c8d, 0x9d1de6616956e170,
       0x4ac3c9382bb09c0b},
      {0x19be05516998987d, 0x8b2376c4ae09f4d6, 0x1de0b7651a3f933d,
       0x380d94c7e39705f4},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0x3685954b8c31c31d, 0x68533d005bf21a0c, 0xbd7626e75c79ec9,
       0xca17754742c69d54},
      {0xcc6edafff6d2dbb2, 0xfd0d8cbd174a9d18, 0x875e8793aa4578e8,
       0xa976a7139cab2ce6},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0xce37ab11b43ea1db, 0xa7ff1a95259d292, 0x851b02218f84f186,
       0xa7222beadefaad13},
      {0xa2ac78ec2b0a9144, 0x5a024051f2fa59c5, 0x91d1eca56147ce38,
       0xbe94d523bc2ac690},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}},
     {{0x2d8daefd79ec1a0f, 0x3bbcd6fdceb39c97, 0xf5575ffc58f61a95,
       0xdbd986c4adf7b420},
      {0x81aa881415f39eb7, 0x6ee2fcf5b98d976c, 0x5465475dcf2f717d,
       0x8e24d3c46860bbd0},
      {0x1, 0xffffffff00000000, 0xffffffffffffffff, 0xfffffffe}}}};
#else
static const fe g_pre_comp[2][16][3] = {
    {{{0x0,0x0, 0x0,0x0, 0x0,0x0, 0x0,0x0},
      {0x0,0x0, 0x0,0x0, 0x0,0x0, 0x0,0x0},
      {0x0,0x0, 0x0,0x0, 0x0,0x0, 0x0,0x0}},
     {{0x18a9143c,0x79e730d4, 0x5fedb601,0x75ba95fc, 0x77622510,0x79fb732b,
       0xa53755c6,0x18905f76},
      {0xce95560a,0xddf25357, 0xba19e45c,0x8b4ab8e4, 0xdd21f325,0xd2e88688,
       0x25885d85,0x8571ff18},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0x16a0d2bb,0x4f922fc5, 0x1a623499,0xd5cc16c, 0x57c62c8b,0x9241cf3a,
       0xfd1b667f,0x2f5e6961},
      {0xf5a01797,0x5c15c70b, 0x60956192,0x3d20b44d, 0x71fdb52,0x4911b37,
       0x8d6f0f7b,0xf648f916},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0xe137bbbc,0x9e566847, 0x8a6a0bec,0xe434469e, 0x79d73463,0xb1c42761,
       0x133d0015,0x5abe0285},
      {0xc04c7dab,0x92aa837c, 0x43260c07,0x573d9f4c, 0x78e6cc37,0xc931562,
       0x6b6f7383,0x94bb725b},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0xbfe20925,0x62a8c244, 0x8fdce867,0x91c19ac3, 0xdd387063,0x5a96a5d5,
       0x21d324f6,0x61d587d4},
      {0xa37173ea,0xe87673a2, 0x53778b65,0x23848008, 0x5bab43e,0x10f8441e,
       0x4621efbe,0xfa11fe12},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0x2cb19ffd,0x1c891f2b, 0xb1923c23,0x1ba8d5b, 0x8ac5ca8e,0xb6d03d67,
       0x1f13bedc,0x586eb04c},
      {0x27e8ed09,0xc35c6e5, 0x1819ede2,0x1e81a33c, 0x56c652fa,0x278fd6c0,
       0x70864f11,0x19d5ac08},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0xd2b533d5,0x62577734, 0xa1bdddc0,0x673b8af6, 0xa79ec293,0x577e7c9a,
       0xc3b266b1,0xbb6de651},
      {0xb65259b3,0xe7e9303a, 0xd03a7480,0xd6a0afd3, 0x9b3cfc27,0xc5ac83d1,
       0x5d18b99b,0x60b4619a},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0x1ae5aa1c,0xbd6a38e1, 0x49e73658,0xb8b7652b, 0xee5f87ed,0xb130014,
       0xaeebffcd,0x9d0f27b2},
      {0x7a730a55,0xca924631, 0xddbbc83a,0x9c955b2f, 0xac019a71,0x7c1dfe0,
       0x356ec48d,0x244a566d},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0xf4f8b16a,0x56f8410e, 0xc47b266a,0x97241afe, 0x6d9c87c1,0xa406b8e,
       0xcd42ab1b,0x803f3e02},
      {0x4dbec69,0x7f0309a8, 0x3bbad05f,0xa83b85f7, 0xad8e197f,0xc6097273,
       0x5067adc1,0xc097440e},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0xc379ab34,0x846a56f2, 0x841df8d1,0xa8ee068b, 0x176c68ef,0x20314459,
       0x915f1f30,0xf1af32d5},
      {0x5d75bd50,0x99c37531, 0xf72f67bc,0x837cffba, 0x48d7723f,0x613a418,
       0xe2d41c8b,0x23d0f130},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0xd5be5a2b,0xed93e225, 0x5934f3c6,0x6fe79983, 0x22626ffc,0x43140926,
       0x7990216a,0x50bbb4d9},
      {0xe57ec63e,0x378191c6, 0x181dcdb2,0x65422c40, 0x236e0f6,0x41a8099b,
       0x1fe49c3,0x2b100118},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0x9b391593,0xfc68b5c5, 0x598270fc,0xc385f5a2, 0xd19adcbb,0x7144f3aa,
       0x83fbae0c,0xdd558999},
      {0x74b82ff4,0x93b88b8e, 0x71e734c9,0xd2e03c40, 0x43c0322a,0x9a7a9eaf,
       0x149d6041,0xe6e4c551},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0x80ec21fe,0x5fe14bfe, 0xc255be82,0xf6ce116a, 0x2f4a5d67,0x98bc5a07,
       0xdb7e63af,0xfad27148},
      {0x29ab05b3,0x90c0b6ac, 0x4e251ae6,0x37a9a83c, 0xc2aade7d,0xa7dc875,
       0x9f0e1a84,0x77387de3},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0xa56c0dd7,0x1e9ecc49, 0x46086c74,0xa5cffcd8, 0xf505aece,0x8f7a1408,
       0xbef0c47e,0xb37b85c0},
      {0xcc0e6a8f,0x3596b6e4, 0x6b388f23,0xfd6d4bbf, 0xc39cef4e,0xaba453fa,
       0xf9f628d5,0x9c135ac8},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0x95c8f8be,0xa1c7294, 0x3bf362bf,0x2961c480, 0xdf63d4ac,0x9e418403,
       0x91ece900,0xc109f9cb},
      {0x58945705,0xc2d095d0, 0xddeb85c0,0xb9083d96, 0x7a40449b,0x84692b8d,
       0x2eee1ee1,0x9bc3344f},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0x42913074,0xd5ae356, 0x48a542b1,0x55491b27, 0xb310732a,0x469ca665,
       0x5f1a4cc1,0x29591d52},
      {0xb84f983f,0xe76f5b6b, 0x9f5f84e1,0xbe7eef41, 0x80baa189,0x1200d496,
       0x18ef332c,0x6376551f},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}}},
    {{{0x0,0x0, 0x0,0x0, 0x0,0x0, 0x0,0x0},
      {0x0,0x0, 0x0,0x0, 0x0,0x0, 0x0,0x0},
      {0x0,0x0, 0x0,0x0, 0x0,0x0, 0x0,0x0}},
     {{0x4147519a,0x20288602, 0x26b372f0,0xd0981eac, 0xa785ebc8,0xa9d4a7ca,
       0xdbdf58e9,0xd953c50d},
      {0xfd590f8f,0x9d6361cc, 0x44e6c917,0x72e9626b, 0x22eb64cf,0x7fd96110,
       0x9eb288f3,0x863ebb7e},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0xb0e63d34,0x4fe7ee31, 0xa9e54fab,0xf4600572, 0xd5e7b5a4,0xc0493334,
       0x6d54831,0x8589fb92},
      {0x6583553a,0xaa70f5cc, 0xe25649e5,0x879094a, 0x10044652,0xcc904507,
       0x2541c4f,0xebb0696d},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0x3b89da99,0xabbaa0c0, 0xb8284022,0xa6f2d79e, 0xb81c05e8,0x27847862,
       0x5e54d63,0x337a4b59},
      {0x21f7794a,0x3c67500d, 0x7d6d7f61,0x207005b7, 0x4cfd6e8,0xa5a3781,
       0xf4c2fbd6,0xd65e0d5},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0x6d3549cf,0xd433e50f, 0xfacd665e,0x6f33696f, 0xce11fcb4,0x695bfdac,
       0xaf7c9860,0x810ee252},
      {0x7159bb2c,0x65450fe1, 0x758b357b,0xf7dfbebe, 0xd69fea72,0x2b057e74,
       0x92731745,0xd485717a},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0xe83f7669,0xce1f69bb, 0x72877d6b,0x9f8ae82, 0x3244278d,0x9548ae54,
       0xe3c2c19c,0x207755de},
      {0x6fef1945,0x87bd61d9, 0xb12d28c3,0x18813cef, 0x72df64aa,0x9fbcd1d6,
       0x7154b00d,0x48dc5ee5},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0xf49a3154,0xef0f469e, 0x6e2b2e9a,0x3e85a595, 0xaa924a9c,0x45aaec1e,
       0xa09e4719,0xaa12dfc8},
      {0x4df69f1d,0x26f27227, 0xa2ff5e73,0xe0e4c82c, 0xb7a9dd44,0xb9d8ce73,
       0xe48ca901,0x6c036e73},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0xa47153f0,0xe1e421e1, 0x920418c9,0xb86c3b79, 0x705d7672,0x93bdce87,
       0xcab79a77,0xf25ae793},
      {0x6d869d0c,0x1f3194a3, 0x4986c264,0x9d55c882, 0x96e945e,0x49fb5ea3,
       0x13db0a3e,0x39b8e653},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0x35d0b34a,0xe3417bc0, 0x8327c0a7,0x440b386b, 0xac0362d1,0x8fb7262d,
       0xe0cdf943,0x2c41114c},
      {0xad95a0b1,0x2ba5cef1, 0x67d54362,0xc09b37a8, 0x1e486c9,0x26d6cdd2,
       0x42ff9297,0x20477abf},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0xbc0a67d2,0xf121b41, 0x444d248a,0x62d4760a, 0x659b4737,0xe044f1d,
       0x250bb4a8,0x8fde365},
      {0x848bf287,0xaceec3da, 0xd3369d6e,0xc2a62182, 0x92449482,0x3582dfdc,
       0x565d6cd7,0x2f7e2fd2},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0x178a876b,0xa0122b5, 0x85104b4,0x51ff96ff, 0x14f29f76,0x50b31ab,
       0x5f87d4e6,0x84abb28b},
      {0x8270790a,0xd5ed439f, 0x85e3f46b,0x2d6cb59d, 0x6c1e2212,0x75f55c1b,
       0x17655640,0xe5436f67},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0x9aeb596d,0xc2965ecc, 0x23c92b4,0x1ea03e7, 0x2e013961,0x4704b4b6,
       0x905ea367,0xca8fd3f},
      {0x551b2b61,0x92523a42, 0x390fcd06,0x1eb7a89c, 0x392a63e,0xe7f1d2be,
       0x4ddb0c33,0x96dca264},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0x15339848,0x231c210e, 0x70778c8d,0xe87a28e8, 0x6956e170,0x9d1de661,
       0x2bb09c0b,0x4ac3c938},
      {0x6998987d,0x19be0551, 0xae09f4d6,0x8b2376c4, 0x1a3f933d,0x1de0b765,
       0xe39705f4,0x380d94c7},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0x8c31c31d,0x3685954b, 0x5bf21a0c,0x68533d00, 0x75c79ec9,0xbd7626e,
       0x42c69d54,0xca177547},
      {0xf6d2dbb2,0xcc6edaff, 0x174a9d18,0xfd0d8cbd, 0xaa4578e8,0x875e8793,
       0x9cab2ce6,0xa976a713},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0xb43ea1db,0xce37ab11, 0x5259d292,0xa7ff1a9, 0x8f84f186,0x851b0221,
       0xdefaad13,0xa7222bea},
      {0x2b0a9144,0xa2ac78ec, 0xf2fa59c5,0x5a024051, 0x6147ce38,0x91d1eca5,
       0xbc2ac690,0xbe94d523},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}},
     {{0x79ec1a0f,0x2d8daefd, 0xceb39c97,0x3bbcd6fd, 0x58f61a95,0xf5575ffc,
       0xadf7b420,0xdbd986c4},
      {0x15f39eb7,0x81aa8814, 0xb98d976c,0x6ee2fcf5, 0xcf2f717d,0x5465475d,
       0x6860bbd0,0x8e24d3c4},
      {0x1,0x0, 0x0,0xffffffff, 0xffffffff,0xffffffff, 0xfffffffe,0x0}}}};
#endif

// select_point selects the |idx|th point from a precomputation table and
// copies it to out.
static void select_point(const limb_t idx, size_t size,
                         const fe pre_comp[/*size*/][3],
                         fe out[3]) {
  OPENSSL_memset(out, 0, sizeof(fe) * 3);
  for (size_t i = 0; i < size; i++) {
    limb_t mismatch = i ^ idx;
    fe_cmovznz(out[0], mismatch, pre_comp[i][0], out[0]);
    fe_cmovznz(out[1], mismatch, pre_comp[i][1], out[1]);
    fe_cmovznz(out[2], mismatch, pre_comp[i][2], out[2]);
  }
}

// get_bit returns the |i|th bit in |in|
static char get_bit(const uint8_t *in, int i) {
  if (i < 0 || i >= 256) {
    return 0;
  }
  return (in[i >> 3] >> (i & 7)) & 1;
}

// Interleaved point multiplication using precomputed point multiples: The
// small point multiples 0*P, 1*P, ..., 17*P are in p_pre_comp, the scalar
// in p_scalar, if non-NULL. If g_scalar is non-NULL, we also add this multiple
// of the generator, using certain (large) precomputed multiples in g_pre_comp.
// Output point (X, Y, Z) is stored in x_out, y_out, z_out.
static void batch_mul(fe x_out, fe y_out, fe z_out,
                      const uint8_t *p_scalar, const uint8_t *g_scalar,
                      const fe p_pre_comp[17][3]) {
  // set nq to the point at infinity
  fe nq[3] = {{0},{0},{0}}, ftmp, tmp[3];
  uint64_t bits;
  uint8_t sign, digit;

  // Loop over both scalars msb-to-lsb, interleaving additions of multiples
  // of the generator (two in each of the last 32 rounds) and additions of p
  // (every 5th round).

  int skip = 1;  // save two point operations in the first round
  size_t i = p_scalar != NULL ? 255 : 31;
  for (;;) {
    // double
    if (!skip) {
      point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
    }

    // add multiples of the generator
    if (g_scalar != NULL && i <= 31) {
      // first, look 32 bits upwards
      bits = get_bit(g_scalar, i + 224) << 3;
      bits |= get_bit(g_scalar, i + 160) << 2;
      bits |= get_bit(g_scalar, i + 96) << 1;
      bits |= get_bit(g_scalar, i + 32);
      // select the point to add, in constant time
      select_point(bits, 16, g_pre_comp[1], tmp);

      if (!skip) {
        point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */,
                  tmp[0], tmp[1], tmp[2]);
      } else {
        fe_copy(nq[0], tmp[0]);
        fe_copy(nq[1], tmp[1]);
        fe_copy(nq[2], tmp[2]);
        skip = 0;
      }

      // second, look at the current position
      bits = get_bit(g_scalar, i + 192) << 3;
      bits |= get_bit(g_scalar, i + 128) << 2;
      bits |= get_bit(g_scalar, i + 64) << 1;
      bits |= get_bit(g_scalar, i);
      // select the point to add, in constant time
      select_point(bits, 16, g_pre_comp[0], tmp);
      point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */, tmp[0],
                tmp[1], tmp[2]);
    }

    // do other additions every 5 doublings
    if (p_scalar != NULL && i % 5 == 0) {
      bits = get_bit(p_scalar, i + 4) << 5;
      bits |= get_bit(p_scalar, i + 3) << 4;
      bits |= get_bit(p_scalar, i + 2) << 3;
      bits |= get_bit(p_scalar, i + 1) << 2;
      bits |= get_bit(p_scalar, i) << 1;
      bits |= get_bit(p_scalar, i - 1);
      ec_GFp_nistp_recode_scalar_bits(&sign, &digit, bits);

      // select the point to add or subtract, in constant time.
      select_point(digit, 17, p_pre_comp, tmp);
      fe_opp(ftmp, tmp[1]);  // (X, -Y, Z) is the negative point.
      fe_cmovznz(tmp[1], sign, tmp[1], ftmp);

      if (!skip) {
        point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 0 /* mixed */,
                  tmp[0], tmp[1], tmp[2]);
      } else {
        fe_copy(nq[0], tmp[0]);
        fe_copy(nq[1], tmp[1]);
        fe_copy(nq[2], tmp[2]);
        skip = 0;
      }
    }

    if (i == 0) {
      break;
    }
    --i;
  }
  fe_copy(x_out, nq[0]);
  fe_copy(y_out, nq[1]);
  fe_copy(z_out, nq[2]);
}

// OPENSSL EC_METHOD FUNCTIONS

// Takes the Jacobian coordinates (X, Y, Z) of a point and returns (X', Y') =
// (X/Z^2, Y/Z^3).
static int ec_GFp_nistp256_point_get_affine_coordinates(
    const EC_GROUP *group, const EC_RAW_POINT *point, EC_FELEM *x_out,
    EC_FELEM *y_out) {
  if (ec_GFp_simple_is_at_infinity(group, point)) {
    OPENSSL_PUT_ERROR(EC, EC_R_POINT_AT_INFINITY);
    return 0;
  }

  fe z1, z2;
  fe_from_generic(z1, &point->Z);
  fe_inv(z2, z1);
  fe_sqr(z1, z2);

  // Instead of using |fe_from_montgomery| to convert the |x| coordinate and
  // then calling |fe_from_montgomery| again to convert the |y| coordinate
  // below, convert the common factor |z1| once now, saving one reduction.
  fe_from_montgomery(z1);

  if (x_out != NULL) {
    fe x;
    fe_from_generic(x, &point->X);
    fe_mul(x, x, z1);
    fe_to_generic(x_out, x);
  }

  if (y_out != NULL) {
    fe y;
    fe_from_generic(y, &point->Y);
    fe_mul(z1, z1, z2);
    fe_mul(y, y, z1);
    fe_to_generic(y_out, y);
  }

  return 1;
}

static void ec_GFp_nistp256_add(const EC_GROUP *group, EC_RAW_POINT *r,
                                const EC_RAW_POINT *a, const EC_RAW_POINT *b) {
  fe x1, y1, z1, x2, y2, z2;
  fe_from_generic(x1, &a->X);
  fe_from_generic(y1, &a->Y);
  fe_from_generic(z1, &a->Z);
  fe_from_generic(x2, &b->X);
  fe_from_generic(y2, &b->Y);
  fe_from_generic(z2, &b->Z);
  point_add(x1, y1, z1, x1, y1, z1, 0 /* both Jacobian */, x2, y2, z2);
  fe_to_generic(&r->X, x1);
  fe_to_generic(&r->Y, y1);
  fe_to_generic(&r->Z, z1);
}

static void ec_GFp_nistp256_dbl(const EC_GROUP *group, EC_RAW_POINT *r,
                                const EC_RAW_POINT *a) {
  fe x, y, z;
  fe_from_generic(x, &a->X);
  fe_from_generic(y, &a->Y);
  fe_from_generic(z, &a->Z);
  point_double(x, y, z, x, y, z);
  fe_to_generic(&r->X, x);
  fe_to_generic(&r->Y, y);
  fe_to_generic(&r->Z, z);
}

static void ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_RAW_POINT *r,
                                       const EC_SCALAR *g_scalar,
                                       const EC_RAW_POINT *p,
                                       const EC_SCALAR *p_scalar) {
  fe p_pre_comp[17][3];
  fe x_out, y_out, z_out;

  if (p != NULL && p_scalar != NULL) {
    // We treat NULL scalars as 0, and NULL points as points at infinity, i.e.,
    // they contribute nothing to the linear combination.
    OPENSSL_memset(&p_pre_comp, 0, sizeof(p_pre_comp));
    // Precompute multiples.
    fe_from_generic(p_pre_comp[1][0], &p->X);
    fe_from_generic(p_pre_comp[1][1], &p->Y);
    fe_from_generic(p_pre_comp[1][2], &p->Z);
    for (size_t j = 2; j <= 16; ++j) {
      if (j & 1) {
        point_add(p_pre_comp[j][0], p_pre_comp[j][1],
                  p_pre_comp[j][2], p_pre_comp[1][0],
                  p_pre_comp[1][1], p_pre_comp[1][2],
                  0,
                  p_pre_comp[j - 1][0], p_pre_comp[j - 1][1],
                  p_pre_comp[j - 1][2]);
      } else {
        point_double(p_pre_comp[j][0], p_pre_comp[j][1],
                     p_pre_comp[j][2], p_pre_comp[j / 2][0],
                     p_pre_comp[j / 2][1], p_pre_comp[j / 2][2]);
      }
    }
  }

  batch_mul(x_out, y_out, z_out,
            (p != NULL && p_scalar != NULL) ? p_scalar->bytes : NULL,
            g_scalar != NULL ? g_scalar->bytes : NULL,
            (const fe (*) [3])p_pre_comp);

  fe_to_generic(&r->X, x_out);
  fe_to_generic(&r->Y, y_out);
  fe_to_generic(&r->Z, z_out);
}

static void ec_GFp_nistp256_point_mul_public(const EC_GROUP *group,
                                             EC_RAW_POINT *r,
                                             const EC_SCALAR *g_scalar,
                                             const EC_RAW_POINT *p,
                                             const EC_SCALAR *p_scalar) {
#define P256_WSIZE_PUBLIC 4
  // Precompute multiples of |p|. p_pre_comp[i] is (2*i+1) * |p|.
  fe p_pre_comp[1 << (P256_WSIZE_PUBLIC-1)][3];
  fe_from_generic(p_pre_comp[0][0], &p->X);
  fe_from_generic(p_pre_comp[0][1], &p->Y);
  fe_from_generic(p_pre_comp[0][2], &p->Z);
  fe p2[3];
  point_double(p2[0], p2[1], p2[2], p_pre_comp[0][0], p_pre_comp[0][1],
               p_pre_comp[0][2]);
  for (size_t i = 1; i < OPENSSL_ARRAY_SIZE(p_pre_comp); i++) {
    point_add(p_pre_comp[i][0], p_pre_comp[i][1], p_pre_comp[i][2],
              p_pre_comp[i - 1][0], p_pre_comp[i - 1][1], p_pre_comp[i - 1][2],
              0 /* not mixed */, p2[0], p2[1], p2[2]);
  }

  // Set up the coefficients for |p_scalar|.
  int8_t p_wNAF[257];
  ec_compute_wNAF(group, p_wNAF, p_scalar, 256, P256_WSIZE_PUBLIC);

  // Set |ret| to the point at infinity.
  int skip = 1;  // Save some point operations.
  fe ret[3] = {{0},{0},{0}};
  for (int i = 256; i >= 0; i--) {
    if (!skip) {
      point_double(ret[0], ret[1], ret[2], ret[0], ret[1], ret[2]);
    }

    // For the |g_scalar|, we use the precomputed table without the
    // constant-time lookup.
    if (i <= 31) {
      // First, look 32 bits upwards.
      uint64_t bits = get_bit(g_scalar->bytes, i + 224) << 3;
      bits |= get_bit(g_scalar->bytes, i + 160) << 2;
      bits |= get_bit(g_scalar->bytes, i + 96) << 1;
      bits |= get_bit(g_scalar->bytes, i + 32);
      point_add(ret[0], ret[1], ret[2], ret[0], ret[1], ret[2], 1 /* mixed */,
                g_pre_comp[1][bits][0], g_pre_comp[1][bits][1],
                g_pre_comp[1][bits][2]);
      skip = 0;

      // Second, look at the current position.
      bits = get_bit(g_scalar->bytes, i + 192) << 3;
      bits |= get_bit(g_scalar->bytes, i + 128) << 2;
      bits |= get_bit(g_scalar->bytes, i + 64) << 1;
      bits |= get_bit(g_scalar->bytes, i);
      point_add(ret[0], ret[1], ret[2], ret[0], ret[1], ret[2], 1 /* mixed */,
                g_pre_comp[0][bits][0], g_pre_comp[0][bits][1],
                g_pre_comp[0][bits][2]);
    }

    int digit = p_wNAF[i];
    if (digit != 0) {
      assert(digit & 1);
      int idx = digit < 0 ? (-digit) >> 1 : digit >> 1;
      fe *y = &p_pre_comp[idx][1], tmp;
      if (digit < 0) {
        fe_opp(tmp, p_pre_comp[idx][1]);
        y = &tmp;
      }
      if (!skip) {
        point_add(ret[0], ret[1], ret[2], ret[0], ret[1], ret[2],
                  0 /* not mixed */, p_pre_comp[idx][0], *y, p_pre_comp[idx][2]);
      } else {
        fe_copy(ret[0], p_pre_comp[idx][0]);
        fe_copy(ret[1], *y);
        fe_copy(ret[2], p_pre_comp[idx][2]);
        skip = 0;
      }
    }
  }

  fe_to_generic(&r->X, ret[0]);
  fe_to_generic(&r->Y, ret[1]);
  fe_to_generic(&r->Z, ret[2]);
}

static int ec_GFp_nistp256_cmp_x_coordinate(const EC_GROUP *group,
                                            const EC_RAW_POINT *p,
                                            const EC_SCALAR *r) {
  if (ec_GFp_simple_is_at_infinity(group, p)) {
    return 0;
  }

  // We wish to compare X/Z^2 with r. This is equivalent to comparing X with
  // r*Z^2. Note that X and Z are represented in Montgomery form, while r is
  // not.
  fe Z2_mont;
  fe_from_generic(Z2_mont, &p->Z);
  fe_mul(Z2_mont, Z2_mont, Z2_mont);

  fe r_Z2;
  fe_frombytes(r_Z2, r->bytes);  // r < order < p, so this is valid.
  fe_mul(r_Z2, r_Z2, Z2_mont);

  fe X;
  fe_from_generic(X, &p->X);
  fe_from_montgomery(X);

  if (OPENSSL_memcmp(&r_Z2, &X, sizeof(r_Z2)) == 0) {
    return 1;
  }

  // During signing the x coefficient is reduced modulo the group order.
  // Therefore there is a small possibility, less than 1/2^128, that group_order
  // < p.x < P. in that case we need not only to compare against |r| but also to
  // compare against r+group_order.
  assert(group->field.width == group->order.width);
  if (bn_less_than_words(r->words, group->field_minus_order.words,
                         group->field.width)) {
    // We can ignore the carry because: r + group_order < p < 2^256.
    EC_FELEM tmp;
    bn_add_words(tmp.words, r->words, group->order.d, group->order.width);
    fe_from_generic(r_Z2, &tmp);
    fe_mul(r_Z2, r_Z2, Z2_mont);
    if (OPENSSL_memcmp(&r_Z2, &X, sizeof(r_Z2)) == 0) {
      return 1;
    }
  }

  return 0;
}

DEFINE_METHOD_FUNCTION(EC_METHOD, EC_GFp_nistp256_method) {
  out->group_init = ec_GFp_mont_group_init;
  out->group_finish = ec_GFp_mont_group_finish;
  out->group_set_curve = ec_GFp_mont_group_set_curve;
  out->point_get_affine_coordinates =
    ec_GFp_nistp256_point_get_affine_coordinates;
  out->add = ec_GFp_nistp256_add;
  out->dbl = ec_GFp_nistp256_dbl;
  out->mul = ec_GFp_nistp256_points_mul;
  out->mul_public = ec_GFp_nistp256_point_mul_public;
  out->felem_mul = ec_GFp_mont_felem_mul;
  out->felem_sqr = ec_GFp_mont_felem_sqr;
  out->bignum_to_felem = ec_GFp_mont_bignum_to_felem;
  out->felem_to_bignum = ec_GFp_mont_felem_to_bignum;
  out->scalar_inv_montgomery = ec_simple_scalar_inv_montgomery;
  out->scalar_inv_montgomery_vartime = ec_GFp_simple_mont_inv_mod_ord_vartime;
  out->cmp_x_coordinate = ec_GFp_nistp256_cmp_x_coordinate;
};

#undef BORINGSSL_NISTP256_64BIT
