// 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_COMPILE_ASSERT(
      256 / 8 == sizeof(BN_ULONG) * ((256 + BN_BITS2 - 1) / BN_BITS2),
      bytes_left_over);
  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
